From bfcc651f2f32c69734a5fa0367138d6edf1f5e8e Mon Sep 17 00:00:00 2001 From: Soultaco83 Date: Thu, 7 May 2026 05:45:49 -0400 Subject: [PATCH] folder move --- mangadownloader/forms/frmMain.pas | 78 +++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/mangadownloader/forms/frmMain.pas b/mangadownloader/forms/frmMain.pas index 6f3c040b7..baad62475 100644 --- a/mangadownloader/forms/frmMain.pas +++ b/mangadownloader/forms/frmMain.pas @@ -958,6 +958,8 @@ TMangaInfoData = record RS_DlgRemoveItem = 'Are you sure you want to delete this item(s)?'; RS_DlgRemoveTask = 'Are you sure you want to delete the task(s)?'; RS_DlgRemoveFavorite = 'Are you sure you want to delete the favorite(s)?'; + RS_DlgMoveSaveToFiles = 'Files exist in the current save location.'#13#10'Do you want to move them to the new location?'; + RS_DlgMoveSaveToFilesMulti = 'Some favorites have files in their current save locations.'#13#10'Do you want to move them to the new locations?'; RS_DlgURLNotSupport = 'URL not supported!'; RS_DlgUpdaterIsRunning = 'Updater is running!'; RS_DlgTypeInNewChapter = 'Type in new chapter:'; @@ -3526,11 +3528,46 @@ procedure TMainForm.miFavoritesDeleteClick(Sender: TObject); vtFavoritesFilterCountChange; end; +function DirHasContent(const Dir: String): Boolean; +var + SR: TSearchRec; +begin + Result := False; + if FindFirstUTF8(IncludeTrailingPathDelimiter(Dir) + '*', faAnyFile, SR) = 0 then + try + repeat + if (SR.Name <> '.') and (SR.Name <> '..') then + begin + Result := True; + Break; + end; + until FindNextUTF8(SR) <> 0; + finally + FindCloseUTF8(SR); + end; +end; + +procedure MoveSaveDir(const OldDir, NewDir: String); +var + Src, Dst: String; +begin + Src := ChompPathDelim(OldDir); + Dst := ChompPathDelim(NewDir); + if Src = Dst then Exit; + if not DirectoryExistsUTF8(Dst) then + if RenameFileUTF8(Src, Dst) then Exit; + if CopyDirTree(Src, Dst, [cffOverwriteFile, cffPreserveTime]) then + DeleteDirectory(Src, False); +end; + procedure TMainForm.miFavoritesChangeSaveToClick(Sender: TObject); var s: String; s1: String; s2: String; + oldSaveTo: String; + bAnyFiles: Boolean; + bMoveFiles: Boolean; Node: PVirtualNode; F: TFavoriteContainer; begin @@ -3554,6 +3591,7 @@ procedure TMainForm.miFavoritesChangeSaveToClick(Sender: TObject); if s <> '' then begin + oldSaveTo := FavoriteManager.Items[vtFavorites.FocusedNode^.Index].FavoriteInfo.SaveTo; FavoriteManager.Lock; try F:=FavoriteManager.Items[vtFavorites.FocusedNode^.Index]; @@ -3562,6 +3600,16 @@ procedure TMainForm.miFavoritesChangeSaveToClick(Sender: TObject); finally FavoriteManager.UnLock; end; + if (s <> oldSaveTo) and DirectoryExistsUTF8(oldSaveTo) then + begin + if DirHasContent(oldSaveTo) then + begin + if CenteredMessageDlg(Self, RS_DlgMoveSaveToFiles, mtConfirmation, [mbYes, mbNo], 0) = mrYes then + MoveSaveDir(oldSaveTo, s); + end + else + RemoveDirUTF8(oldSaveTo); + end; UpdateVtFavorites; FavoriteManager.Backup; end; @@ -3578,12 +3626,32 @@ procedure TMainForm.miFavoritesChangeSaveToClick(Sender: TObject); if s <> '' then begin + bAnyFiles := False; + FavoriteManager.Lock; + try + Node := vtFavorites.GetFirstSelected(); + while Assigned(Node) do + begin + F := FavoriteManager.Items[Node^.Index]; + if DirectoryExistsUTF8(F.FavoriteInfo.SaveTo) and DirHasContent(F.FavoriteInfo.SaveTo) then + begin + bAnyFiles := True; + Break; + end; + Node := vtFavorites.GetNextSelected(Node); + end; + finally + FavoriteManager.UnLock; + end; + bMoveFiles := bAnyFiles and + (CenteredMessageDlg(Self, RS_DlgMoveSaveToFilesMulti, mtConfirmation, [mbYes, mbNo], 0) = mrYes); FavoriteManager.Lock; try Node := vtFavorites.GetFirstSelected(); while Assigned(Node) do begin F:=FavoriteManager.Items[Node^.Index]; + oldSaveTo := F.FavoriteInfo.SaveTo; s1 := ''; s2 := ''; if (length(s) = 2) and (pos(':', s) > 0) then @@ -3605,6 +3673,16 @@ procedure TMainForm.miFavoritesChangeSaveToClick(Sender: TObject); else F.FavoriteInfo.SaveTo := s + '\' + s2; end; + if (oldSaveTo <> F.FavoriteInfo.SaveTo) and DirectoryExistsUTF8(oldSaveTo) then + begin + if DirHasContent(oldSaveTo) then + begin + if bMoveFiles then + MoveSaveDir(oldSaveTo, F.FavoriteInfo.SaveTo); + end + else + RemoveDirUTF8(oldSaveTo); + end; F.DBUpdateSaveTo; Node := vtFavorites.GetNextSelected(Node); end;