Catrobat.IDE.Core.ViewModels.Main.MainViewModel.UpdateLocalPrograms C# (CSharp) Method

UpdateLocalPrograms() private method

private UpdateLocalPrograms ( ) : System.Threading.Tasks.Task
return System.Threading.Tasks.Task
        private async Task UpdateLocalPrograms()
        {
            if (IsInDesignMode) return;

            if (_localPrograms == null)
            {
                _localPrograms = new ObservableCollection<LocalProgramHeader>();
            }

            //_localPrograms.Clear();

            using (var storage = StorageSystem.GetStorage())
            {
                var programNames = await storage.GetDirectoryNamesAsync(StorageConstants.ProgramsPath);

                //var programs = new List<ProgramDummyHeader>();

                var programsToRemove = new List<LocalProgramHeader>();

                foreach (var header in _localPrograms)
                {
                    var found = false;
                    foreach (string programName in programNames)
                        if (header.ProjectName == programName)
                            found = true;

                    if (!found)
                        programsToRemove.Add(header);
                }

                //foreach (var header in _localProjects)
                //{
                //    if (header.ProjectName == CurrentProgram.ProjectDummyHeader.ProjectName)
                //        programsToRemove.Add(header);
                //}


                foreach (var program in programsToRemove)
                {
                    _localPrograms.Remove(program);
                }



                //var programsToAdd = new List<LocalProgramHeader>();

                foreach (string programName in programNames)
                {
                    LocalProgramHeader header = null;

                    foreach (var h in _localPrograms)
                    {
                        if (h.ProjectName == programName)
                            header = h;
                    }

                    if (header == null)
                    {
                        var manualScreenshotPath = Path.Combine(
                            StorageConstants.ProgramsPath, programName, StorageConstants.ProgramManualScreenshotPath);
                        var automaticProjectScreenshotPath = Path.Combine(
                            StorageConstants.ProgramsPath, programName, StorageConstants.ProgramAutomaticScreenshotPath);

                        var codePath = Path.Combine(StorageConstants.ProgramsPath,
                            programName, StorageConstants.ProgramCodePath);

                        var programScreenshot = new PortableImage();
                        programScreenshot.LoadAsync(manualScreenshotPath, automaticProjectScreenshotPath, false);

                        var isLoaded = !await storage.FileExistsAsync(codePath);

                        var programHeader = new LocalProgramHeader
                        {
                            ProjectName = programName,
                            Screenshot = programScreenshot,
                            IsLoading = isLoaded
                        };

                        _localPrograms.Insert(0, programHeader);
                    }
                    else if (header.IsLoading)
                    {
                        var codePath = Path.Combine(StorageConstants.ProgramsPath,
                            programName, StorageConstants.ProgramCodePath);
                        var isLoaded = !await storage.FileExistsAsync(codePath);
                        header.IsLoading = isLoaded;
                    }
                }

                //programsToAdd.Sort();


                //foreach (var program in programsToAdd)
                //{
                //    _localPrograms.Insert(0, program);
                //}
            }
        }
    }