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);
//}
}
}
}