Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 78 additions & 0 deletions mangadownloader/forms/frmMain.pas
Original file line number Diff line number Diff line change
Expand Up @@ -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:';
Expand Down Expand Up @@ -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
Expand All @@ -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];
Expand All @@ -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;
Expand All @@ -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
Expand All @@ -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;
Expand Down