Skip to content

Commit 69dddf6

Browse files
authored
Fix: DirectUnpack cancellation (#530)
- Fixed DirectUnpack cancellation because files were prematurely renamed to *.rar. Renaming incomplete files can cause DirectUnpack to fail, as it may try to unpack incomplete .rar files.
1 parent b9d1be6 commit 69dddf6

1 file changed

Lines changed: 12 additions & 14 deletions

File tree

daemon/queue/DirectRenamer.cpp

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,11 @@ void DirectRenamer::RenameFiles(DownloadQueue* downloadQueue, NzbInfo* nzbInfo,
394394
RenameCompleted(downloadQueue, nzbInfo);
395395
}
396396

397+
/**
398+
* @brief Renames (metadata only) partially downloaded files using info from PAR files.
399+
* Doesn't rename the files themselves. The actual renaming happens only when the download is complete.
400+
* Renaming incomplete files can cause DirectUnpack to fail, as it may try to unpack incomplete .rar files.
401+
*/
397402
int DirectRenamer::RenameFilesInProgress(NzbInfo* nzbInfo, FileHashList* parHashes, bool needRenamePars, int& vol)
398403
{
399404
int renamedFiles = 0;
@@ -425,24 +430,17 @@ int DirectRenamer::RenameFilesInProgress(NzbInfo* nzbInfo, FileHashList* parHash
425430

426431
nzbInfo->PrintMessage(Message::mkInfo,
427432
"Renaming in-progress file %s to %s",
428-
fileInfo->GetFilename(), newOutputFilename.c_str()
433+
oldOutputFilename.c_str(), newOutputFilename.c_str()
429434
);
430435

431-
bool renamed = (g_Options->GetDirectWrite() || fileInfo->GetForceDirectWrite())
432-
? RenameFile(nzbInfo, oldOutputFilename, newOutputFilename)
433-
: true;
434-
435-
if (renamed)
436+
if (Util::EmptyStr(fileInfo->GetOrigname()))
436437
{
437-
if (Util::EmptyStr(fileInfo->GetOrigname()))
438-
{
439-
fileInfo->SetOrigname(fileInfo->GetFilename());
440-
}
441-
fileInfo->SetOutputFilename(std::move(newOutputFilename));
442-
fileInfo->SetFilename(std::move(newFilename));
443-
fileInfo->SetFilenameConfirmed(true);
444-
++renamedFiles;
438+
fileInfo->SetOrigname(fileInfo->GetFilename());
445439
}
440+
441+
fileInfo->SetFilename(std::move(newFilename));
442+
fileInfo->SetFilenameConfirmed(true);
443+
++renamedFiles;
446444
}
447445

448446
return renamedFiles;

0 commit comments

Comments
 (0)