public TaskData(IEnumerable <Task> tasks, IEnumerable <Folder> folders, BaseFolder currentFolder, string filter) { Util.RequireNotNull(tasks, "tasks"); Util.RequireNotNull(folders, "folders"); Util.RequireNotNull(currentFolder, "currentFolder"); folders.ForEach(folder => AddFolder(folder)); m_userFolders = new ReadOnlyCollection <Folder>(m_folderList); tasks.ForEach(task => AddTask(task)); CurrentFolder = currentFolder; m_filter = filter; refreshAllFolders(); }
public void RenameFolder(Folder folder, string newName) { Util.RequireNotNull(folder, "folder"); Util.RequireArgument(m_folderList.Contains(folder), "folder"); Util.RequireArgument(newName == newName.SuperTrim(), "newName"); Util.RequireArgument(Folder.IsValidFolderName(newName), "newName"); if (folder.Name == newName) { // no-op } else if (folder.Name.EasyEquals(newName)) { // just a case change -> easy // make darn sure we haven't broken our logic -> should only have folder that matches w/ case Debug.Assert(m_folderList.Count(existing => existing.Name.EasyEquals(newName)) == 1); folder.UpdateName(newName); } else if (m_folderList.Count(existing => existing.Name.EasyEquals(newName)) > 0) { Debug.Assert(m_folderList.Count(existing => existing.Name.EasyEquals(newName)) == 1); var target = m_folderList.First(existing => existing.Name.EasyEquals(newName)); // move existing items to target folder m_taskList .Where(task => task.Folder == folder) .ForEach(task => task.Folder = target); // nuke existing folder m_folderList.Remove(folder); if (m_currentFolder == folder) { CurrentFolder = target; } } else { // this is an entirely novel name. Cool! // make darn sure we haven't broken our logic -> should have no folder with matching name Debug.Assert(m_folderList.Count(existing => existing.Name.EasyEquals(newName)) == 0); folder.UpdateName(newName); } refreshAllFolders(); }