public async Task <AppConfigContainer?> Migrate(AppConfigContainer?container) { const string originalConfigKey = "current-config"; const string originalThemeKey = "current-theme"; container ??= new AppConfigContainer(); container.Item ??= new AppConfig(); var config = await _localStorage.GetItemAsync <ProjectConfigAzureDevOps>(originalConfigKey); if (config != null) { container.Item.SelectedProjectId = 1; ProjectsMetadataContainer metadataContainer = new() { Item = new List <ProjectMetadata> { new ProjectMetadata { Id = 1, Name = "Default", Path = "default", ProjectType = ProjectType.AzureDevOps } } }; await _localStorage.SetItemAsync(metadataContainer.StorageTableName, metadataContainer); config.Id = 1; ProjectContainer projectContainer = new() { Item = new ProjectStorageItem { ProjectType = ProjectType.AzureDevOps, JsonPayload = JsonSerializer.Serialize(config) }, Path = "default", StorageTableName = ProjectContainer.StorageKey("default") }; await _localStorage.SetItemAsync(projectContainer.StorageTableName, projectContainer); } var theme = await _localStorage.GetItemAsync <ThemeSettings>(originalThemeKey); if (theme != null) { container.Item.ThemeSettings = theme; } container.Version = AppConfigContainer.CurrentVersion; await _localStorage.SetItemAsync(AppConfigContainer.StorageKey, container); return(container); } }
public async Task Remove(string?path) { if (path == null) { return; } string projectPath = ProjectContainer.StorageKey(path); if (await _localStorage.ContainKeyAsync(projectPath)) { await _localStorage.RemoveItemAsync(projectPath); } }
public async Task AddOrUpdate <TProjectConfig>(ProjectMetadata metadata, TProjectConfig projectConfig) where TProjectConfig : ProjectConfig { if (metadata?.Path == null) { return; } // Atm, update simply overrides current data. string path = ProjectContainer.StorageKey(metadata.Path); ProjectStorageItem storageItem = new() { ProjectType = projectConfig.ProjectType, JsonPayload = JsonSerializer.Serialize(projectConfig), }; await _localStorage.SetItemAsync(path, new ProjectContainer(path, storageItem)); }
public async Task <ProjectConfig?> Get(string?path) { Console.WriteLine($"Loading project - {path}"); if (string.IsNullOrWhiteSpace(path)) { return(null); } ProjectContainer?container = await _localStorage.GetItemAsync <ProjectContainer>(ProjectContainer.StorageKey(path)); container = await container.Migrate(() => new ProjectMigration()); ProjectConfig?project = null; if (container?.Item != null) { Console.WriteLine("Parsing project - " + container.Item.ProjectType + " - " + container.Item.JsonPayload); ProjectStorageItem?storageItem = container.Item; if (storageItem.ProjectType == ProjectType.AzureDevOps) { project = JsonSerializer.Deserialize <ProjectConfigAzureDevOps>(storageItem.JsonPayload); } } return(project); }