public async Task<Folder> AddFolderAsync() { Folder newFolder = null; bool isOk = await RunFunctionIfOpenAsyncTB(async delegate { newFolder = new Folder(_dbManager, RuntimeData.GetText("NewFolder"), DateTime.Now); // folder.ParentId = Id; // folders may not have ParentId because they can be exported or imported if (await _dbManager.InsertIntoFoldersAsync(newFolder)) { // Add the same categories as the last folder, which was added. // This is an automatism to streamline usage, it has no special reason to be. await newFolder.OpenAsync().ConfigureAwait(false); Folder lastAddedFolder = null; if (_folders.Any()) { var maxCreateDate = _folders.Max(fol => fol.DateCreated); if (maxCreateDate != default(DateTime)) { lastAddedFolder = _folders.FirstOrDefault(fol => fol.DateCreated == maxCreateDate); } } if (lastAddedFolder != null) { foreach (var cat in lastAddedFolder.DynamicCategories) { await newFolder.AddDynamicCategoryAsync(cat?.CategoryId).ConfigureAwait(false); } } await RunInUiThreadAsync(() => _folders.Add(newFolder)).ConfigureAwait(false); return true; } return false; }); if (isOk) return newFolder; else return null; }
private async Task<bool> RemoveFolder2Async(Folder folder) { if (folder == null) return false; if (await _dbManager.DeleteFromFoldersAsync(folder)) { if (folder.Id == _currentFolderId) { int previousFolderIndex = Math.Max(0, _folders.IndexOf(folder) - 1); CurrentFolderId = _folders.Count > previousFolderIndex ? _folders[previousFolderIndex].Id : DEFAULT_ID; await UpdateCurrentFolder2Async(false); } await RunInUiThreadAsync(delegate { _folders.Remove(folder); }).ConfigureAwait(false); await folder.OpenAsync().ConfigureAwait(false); await folder.RemoveWalletsAsync().ConfigureAwait(false); await folder.CloseAsync().ConfigureAwait(false); folder.Dispose(); return true; } Debugger.Break(); // LOLLO this must never happen, check it await Logger.AddAsync("Attempting to remove folder, the db operation failed", Logger.FileErrorLogFilename).ConfigureAwait(false); return false; }
private async Task UpdateCurrentFolder2Async(bool openTheFolder) { if (_folders == null) return; _currentFolder = string.IsNullOrEmpty(_currentFolderId) ? null : _folders.FirstOrDefault(fo => fo.Id == _currentFolderId); if (_currentFolder != null && openTheFolder) { await _currentFolder.OpenAsync().ConfigureAwait(false); } RaisePropertyChanged_UI(nameof(CurrentFolder)); // notify the UI once the data has been loaded }