private static bool DropChecks(FolderSystem data, BaseBookmarkData dropped, BaseBookmarkData droppedOn) { if (data is null || dropped is null || droppedOn is null) { return(false); } if (dropped.Id == droppedOn.Id) { return(false); } return(true); }
public static void CompleteReorder(FolderSystem data, BaseBookmarkData dropped, BaseBookmarkData droppedOn, int indexMod) { if (!DropChecks(data, dropped, droppedOn)) { return; } switch (dropped) { case InteractiveFolder folder: DroppedFolder(data, folder, droppedOn, indexMod); break; case FanficBookmark fic: DroppedFic(data, fic, droppedOn, indexMod); break; } }
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 DroppedFic(FolderSystem data, FanficBookmark fic, BaseBookmarkData droppedOn, int indexMod) { var index = GetIndex(data, droppedOn) + (indexMod > 0 ? 1 : 0); FanficModel ficModel; switch (droppedOn) { case InteractiveFolder droppedOnFolder: ficModel = new FanficModel(fic, 0) { ParentFolder = droppedOnFolder.Id.ToString() }; data.UpdateFanfic(ficModel); break; case FanficBookmark droppedOnFic: ficModel = new FanficModel(fic, index) { ParentFolder = droppedOnFic.Parent?.Id.ToString() ?? Guid.Empty.ToString() }; data.UpdateFanfic(ficModel); break; } }
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; } }