private static int GetIndex(FolderSystem data, BaseBookmarkData item) { if (InteractiveFolder.TryGetFolder(data.Home, item.Parent ?? data.Home, out InteractiveFolder f)) { switch (item) { case FanficBookmark mark: return(f.Contents.IndexOf(mark)); case InteractiveFolder folder: return(f.Folders.IndexOf(folder)); case BookmarkFolder bFolder: return(f.Folders.FindIndex(x => x.Id == bFolder.Id)); } } return(-1); }
private static void DroppedFolder(FolderSystem data, InteractiveFolder folder, BaseBookmarkData droppedOn, int indexMod) { // Dont worry about adding a negative index mod, because then it moves the item two spaces instead of one. var index = GetIndex(data, droppedOn) + (indexMod > 0 ? 1 : 0); FolderModel folderModel; switch (droppedOn) { case InteractiveFolder droppedOnFolder: if (indexMod == 0) { folderModel = new FolderModel(folder, 0) { ParentFolder = droppedOnFolder.Id.ToString() }; data.UpdateFolder(folderModel); } else { folderModel = new FolderModel(folder, index) { ParentFolder = droppedOnFolder.Parent?.Id.ToString() ?? Guid.Empty.ToString() }; data.UpdateFolder(folderModel); } break; case FanficBookmark droppedOnFic: folderModel = new FolderModel(folder, index) { ParentFolder = droppedOnFic.Parent?.Id.ToString() ?? Guid.Empty.ToString() }; data.UpdateFolder(folderModel); break; } }