diff --git a/Makefile.am b/Makefile.am index 80ff4477..9fbf6fcf 100644 --- a/Makefile.am +++ b/Makefile.am @@ -414,6 +414,14 @@ testdata_FILES = \ tests/testdata/parchecker/testfile.vol00+1.PAR2 \ tests/testdata/parchecker/testfile.vol01+2.PAR2 \ tests/testdata/parchecker/testfile.vol03+3.PAR2 \ + tests/testdata/parchecker2/crc.txt \ + tests/testdata/parchecker2/testfile.7z.001 \ + tests/testdata/parchecker2/testfile.7z.002 \ + tests/testdata/parchecker2/testfile.7z.003 \ + tests/testdata/parchecker2/testfile.7z.par2 \ + tests/testdata/parchecker2/testfile.7z.vol0+1.PAR2 \ + tests/testdata/parchecker2/testfile.7z.vol1+2.PAR2 \ + tests/testdata/parchecker2/testfile.7z.vol3+3.PAR2 \ tests/testdata/rarrenamer/testfile3.part01.rar \ tests/testdata/rarrenamer/testfile3.part02.rar \ tests/testdata/rarrenamer/testfile3.part03.rar \ diff --git a/Makefile.in b/Makefile.in index ec4d2eb5..9c915b35 100644 --- a/Makefile.in +++ b/Makefile.in @@ -928,6 +928,14 @@ testdata_FILES = \ tests/testdata/parchecker/testfile.vol00+1.PAR2 \ tests/testdata/parchecker/testfile.vol01+2.PAR2 \ tests/testdata/parchecker/testfile.vol03+3.PAR2 \ + tests/testdata/parchecker2/crc.txt \ + tests/testdata/parchecker2/testfile.7z.001 \ + tests/testdata/parchecker2/testfile.7z.002 \ + tests/testdata/parchecker2/testfile.7z.003 \ + tests/testdata/parchecker2/testfile.7z.par2 \ + tests/testdata/parchecker2/testfile.7z.vol0+1.PAR2 \ + tests/testdata/parchecker2/testfile.7z.vol1+2.PAR2 \ + tests/testdata/parchecker2/testfile.7z.vol3+3.PAR2 \ tests/testdata/rarrenamer/testfile3.part01.rar \ tests/testdata/rarrenamer/testfile3.part02.rar \ tests/testdata/rarrenamer/testfile3.part03.rar \ diff --git a/daemon/postprocess/PrePostProcessor.cpp b/daemon/postprocess/PrePostProcessor.cpp index f8c71b0e..13c7252f 100644 --- a/daemon/postprocess/PrePostProcessor.cpp +++ b/daemon/postprocess/PrePostProcessor.cpp @@ -1,7 +1,7 @@ /* * This file is part of nzbget. See . * - * Copyright (C) 2007-2017 Andrey Prygunkov + * Copyright (C) 2007-2018 Andrey Prygunkov * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -719,6 +719,21 @@ void PrePostProcessor::StartJob(DownloadQueue* downloadQueue, PostInfo* postInfo return; } +#ifndef DISABLE_PARCHECK + if (postInfo->GetNzbInfo()->GetParStatus() == NzbInfo::psSkipped && + postInfo->GetNzbInfo()->GetDeleteStatus() == NzbInfo::dsNone && + g_Options->GetParCheck() == Options::pcAuto && + !UnpackController::HasCompletedArchiveFiles(postInfo->GetNzbInfo()) && + ParParser::FindMainPars(postInfo->GetNzbInfo()->GetDestDir(), nullptr)) + { + postInfo->GetNzbInfo()->PrintMessage(Message::mkInfo, + "Requesting par-check for collection %s without archive files", + postInfo->GetNzbInfo()->GetName()); + postInfo->SetRequestParCheck(true); + return; + } +#endif + bool parFailed = postInfo->GetNzbInfo()->GetParStatus() == NzbInfo::psFailure || postInfo->GetNzbInfo()->GetParStatus() == NzbInfo::psRepairPossible || postInfo->GetNzbInfo()->GetParStatus() == NzbInfo::psManual; diff --git a/daemon/postprocess/Unpack.cpp b/daemon/postprocess/Unpack.cpp index 1d0412e2..20dbfcfd 100644 --- a/daemon/postprocess/Unpack.cpp +++ b/daemon/postprocess/Unpack.cpp @@ -1,7 +1,7 @@ /* * This file is part of nzbget. See . * - * Copyright (C) 2013-2017 Andrey Prygunkov + * Copyright (C) 2013-2018 Andrey Prygunkov * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -929,3 +929,23 @@ void UnpackController::SetProgressLabel(const char* progressLabel) GuardedDownloadQueue guard = DownloadQueue::Guard(); m_postInfo->SetProgressLabel(progressLabel); } + +bool UnpackController::HasCompletedArchiveFiles(NzbInfo* nzbInfo) +{ + RegEx regExRar(".*\\.rar$"); + RegEx regExSevenZip(".*\\.7z$"); + RegEx regExSevenZipMulti(".*\\.7z\\.[0-9]+$"); + + for (CompletedFile& completedFile: nzbInfo->GetCompletedFiles()) + { + const char* filename = completedFile.GetFilename(); + if (regExRar.Match(filename) || + regExSevenZip.Match(filename) || + regExSevenZipMulti.Match(filename)) + { + return true; + } + } + + return false; +} diff --git a/daemon/postprocess/Unpack.h b/daemon/postprocess/Unpack.h index eb18f92d..ddbd4de4 100644 --- a/daemon/postprocess/Unpack.h +++ b/daemon/postprocess/Unpack.h @@ -1,7 +1,7 @@ /* * This file is part of nzbget. See . * - * Copyright (C) 2013-2017 Andrey Prygunkov + * Copyright (C) 2013-2018 Andrey Prygunkov * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -32,6 +32,7 @@ public: virtual void Run(); virtual void Stop(); static void StartJob(PostInfo* postInfo); + static bool HasCompletedArchiveFiles(NzbInfo* nzbInfo); protected: virtual bool ReadLine(char* buf, int bufSize, FILE* stream); diff --git a/tests/functional/parcheck/conftest.py b/tests/functional/parcheck/conftest.py index 377028e2..00c64c78 100644 --- a/tests/functional/parcheck/conftest.py +++ b/tests/functional/parcheck/conftest.py @@ -21,6 +21,8 @@ def prepare_testdata(request): testdata_dir = nzbget_srcdir + '/tests/testdata' if not os.path.exists(nserv_datadir + '/parchecker'): shutil.copytree(testdata_dir +'/parchecker', nserv_datadir + '/parchecker') + if not os.path.exists(nserv_datadir + '/parchecker2'): + shutil.copytree(testdata_dir +'/parchecker2', nserv_datadir + '/parchecker2') if 0 != subprocess.call([nzbget_bin, '--nserv', '-d', nserv_datadir, '-v', '2', '-z', '3000', '-q']): pytest.exit('Test file generation failed') diff --git a/tests/functional/parcheck/parcheck_base_test.py b/tests/functional/parcheck/parcheck_base_test.py index c464b848..b9ea1256 100644 --- a/tests/functional/parcheck/parcheck_base_test.py +++ b/tests/functional/parcheck/parcheck_base_test.py @@ -1,19 +1,37 @@ nzbget_options = ['ParCheck=auto', 'ParQuick=yes', 'PostStrategy=sequential'] def test_parchecker_healthy(nserv, nzbget): - hist = nzbget.download_nzb('parchecker.nzb') + hist = nzbget.download_nzb('parchecker2.nzb') assert hist['Status'] == 'SUCCESS/HEALTH' def test_parchecker_repair(nserv, nzbget): - nzb_content = nzbget.load_nzb('parchecker.nzb') - nzb_content = nzb_content.replace('parchecker/testfile.dat?1=0:3000', 'parchecker/testfile.dat?1=0:3000!0') + nzb_content = nzbget.load_nzb('parchecker2.nzb') + nzb_content = nzb_content.replace('parchecker2/testfile.7z.001?16=45000:3000', 'parchecker2/testfile.7z.001?16=45000:3000!0') hist = nzbget.download_nzb('parchecker.repair.nzb', nzb_content) assert hist['Status'] == 'SUCCESS/PAR' def test_parchecker_subject(nserv, nzbget): - nzb_content = nzbget.load_nzb('parchecker.nzb') - nzb_content = nzb_content.replace('parchecker/testfile.dat?1=0:3000', 'parchecker/testfile.dat?1=0:3000!0') + nzb_content = nzbget.load_nzb('parchecker2.nzb') + nzb_content = nzb_content.replace('parchecker2/testfile.7z.001?16=45000:3000', 'parchecker2/testfile.7z.001?16=45000:3000!0') nzb_content = nzb_content.replace('subject=""', 'subject="') nzb_content = nzb_content.replace('" yEnc', '.dat yEnc') hist = nzbget.download_nzb('parchecker.subject.nzb', nzb_content) assert hist['Status'] == 'SUCCESS/PAR' + +def test_parchecker_middle(nserv, nzbget): + nzb_content = nzbget.load_nzb('parchecker2.nzb') + nzb_content = nzb_content.replace('parchecker2/testfile.7z.001?16=45000:3000', 'parchecker2/testfile.7z.001?16=45000:3000!0') + hist = nzbget.download_nzb('parchecker.middle.nzb', nzb_content) + assert hist['Status'] == 'SUCCESS/PAR' + +def test_parchecker_last(nserv, nzbget): + nzb_content = nzbget.load_nzb('parchecker2.nzb') + nzb_content = nzb_content.replace('parchecker2/testfile.7z.001?18=51000:200', '') + hist = nzbget.download_nzb('parchecker.last.nzb', nzb_content, unpack=False) + assert hist['Status'] == 'SUCCESS/HEALTH' + +def test_parchecker_last_unpack(nserv, nzbget): + nzb_content = nzbget.load_nzb('parchecker2.nzb') + nzb_content = nzb_content.replace('parchecker2/testfile.7z.001?18=51000:200', '') + hist = nzbget.download_nzb('parchecker.last.unpack.nzb', nzb_content, unpack=True) + assert hist['Status'] == 'SUCCESS/UNPACK' diff --git a/tests/functional/parcheck/parcheck_opt1_test.py b/tests/functional/parcheck/parcheck_opt1_test.py index 9cffd436..6effb69a 100644 --- a/tests/functional/parcheck/parcheck_opt1_test.py +++ b/tests/functional/parcheck/parcheck_opt1_test.py @@ -1,11 +1,23 @@ nzbget_options = ['ParCheck=force', 'ParQuick=yes', 'PostStrategy=sequential'] def test_parchecker_healthy(nserv, nzbget): - hist = nzbget.download_nzb('parchecker.nzb') + hist = nzbget.download_nzb('parchecker2.nzb') assert hist['Status'] == 'SUCCESS/PAR' def test_parchecker_repair(nserv, nzbget): - nzb_content = nzbget.load_nzb('parchecker.nzb') - nzb_content = nzb_content.replace('parchecker/testfile.dat?1=0:3000', 'parchecker/testfile.dat?1=0:3000!0') + nzb_content = nzbget.load_nzb('parchecker2.nzb') + nzb_content = nzb_content.replace('parchecker2/testfile.7z.001?16=45000:3000', 'parchecker2/testfile.7z.001?16=45000:3000!0') hist = nzbget.download_nzb('parchecker.repair.nzb', nzb_content) assert hist['Status'] == 'SUCCESS/PAR' + +def test_parchecker_middle(nserv, nzbget): + nzb_content = nzbget.load_nzb('parchecker2.nzb') + nzb_content = nzb_content.replace('parchecker2/testfile.7z.001?16=45000:3000', 'parchecker2/testfile.7z.001?16=45000:3000!0') + hist = nzbget.download_nzb('parchecker.middle.nzb', nzb_content) + assert hist['Status'] == 'SUCCESS/PAR' + +def test_parchecker_last(nserv, nzbget): + nzb_content = nzbget.load_nzb('parchecker2.nzb') + nzb_content = nzb_content.replace('parchecker2/testfile.7z.001?18=51000:200', '') + hist = nzbget.download_nzb('parchecker.last.nzb', nzb_content) + assert hist['Status'] == 'SUCCESS/PAR' diff --git a/tests/functional/parcheck/parcheck_opt2_test.py b/tests/functional/parcheck/parcheck_opt2_test.py index bfda2b8f..77b6c5de 100644 --- a/tests/functional/parcheck/parcheck_opt2_test.py +++ b/tests/functional/parcheck/parcheck_opt2_test.py @@ -1,11 +1,23 @@ nzbget_options = ['ParCheck=manual', 'ParQuick=yes', 'PostStrategy=sequential'] def test_parchecker_healthy(nserv, nzbget): - hist = nzbget.download_nzb('parchecker.nzb') + hist = nzbget.download_nzb('parchecker2.nzb') assert hist['Status'] == 'SUCCESS/HEALTH' def test_parchecker_repair(nserv, nzbget): - nzb_content = nzbget.load_nzb('parchecker.nzb') - nzb_content = nzb_content.replace('parchecker/testfile.dat?1=0:3000', 'parchecker/testfile.dat?1=0:3000!0') + nzb_content = nzbget.load_nzb('parchecker2.nzb') + nzb_content = nzb_content.replace('parchecker2/testfile.7z.001?16=45000:3000', 'parchecker2/testfile.7z.001?16=45000:3000!0') hist = nzbget.download_nzb('parchecker.repair.nzb', nzb_content) assert hist['Status'] == 'WARNING/DAMAGED' + +def test_parchecker_middle(nserv, nzbget): + nzb_content = nzbget.load_nzb('parchecker2.nzb') + nzb_content = nzb_content.replace('parchecker2/testfile.7z.001?16=45000:3000', '') + hist = nzbget.download_nzb('parchecker.middle.nzb', nzb_content) + assert hist['Status'] == 'WARNING/DAMAGED' + +def test_parchecker_last(nserv, nzbget): + nzb_content = nzbget.load_nzb('parchecker2.nzb') + nzb_content = nzb_content.replace('parchecker2/testfile.7z.001?18=51000:200', '') + hist = nzbget.download_nzb('parchecker.last.nzb', nzb_content) + assert hist['Status'] == 'SUCCESS/HEALTH' diff --git a/tests/functional/parcheck/parcheck_opt3_test.py b/tests/functional/parcheck/parcheck_opt3_test.py index daec8657..169477fc 100644 --- a/tests/functional/parcheck/parcheck_opt3_test.py +++ b/tests/functional/parcheck/parcheck_opt3_test.py @@ -1,11 +1,11 @@ nzbget_options = ['ParCheck=auto', 'ParQuick=yes', 'PostStrategy=balanced'] def test_parchecker_healthy(nserv, nzbget): - hist = nzbget.download_nzb('parchecker.nzb') + hist = nzbget.download_nzb('parchecker2.nzb') assert hist['Status'] == 'SUCCESS/HEALTH' def test_parchecker_repair(nserv, nzbget): - nzb_content = nzbget.load_nzb('parchecker.nzb') - nzb_content = nzb_content.replace('parchecker/testfile.dat?1=0:3000', 'parchecker/testfile.dat?1=0:3000!0') + nzb_content = nzbget.load_nzb('parchecker2.nzb') + nzb_content = nzb_content.replace('parchecker2/testfile.7z.001?16=45000:3000', 'parchecker2/testfile.7z.001?16=45000:3000!0') hist = nzbget.download_nzb('parchecker.repair.nzb', nzb_content) assert hist['Status'] == 'SUCCESS/PAR' diff --git a/tests/functional/parcheck/parcheck_opt4_test.py b/tests/functional/parcheck/parcheck_opt4_test.py index 6a3dd14d..144c4b91 100644 --- a/tests/functional/parcheck/parcheck_opt4_test.py +++ b/tests/functional/parcheck/parcheck_opt4_test.py @@ -1,11 +1,11 @@ nzbget_options = ['ParCheck=force', 'ParQuick=yes', 'PostStrategy=balanced'] def test_parchecker_healthy(nserv, nzbget): - hist = nzbget.download_nzb('parchecker.nzb') + hist = nzbget.download_nzb('parchecker2.nzb') assert hist['Status'] == 'SUCCESS/PAR' def test_parchecker_repair(nserv, nzbget): - nzb_content = nzbget.load_nzb('parchecker.nzb') - nzb_content = nzb_content.replace('parchecker/testfile.dat?1=0:3000', 'parchecker/testfile.dat?1=0:3000!0') + nzb_content = nzbget.load_nzb('parchecker2.nzb') + nzb_content = nzb_content.replace('parchecker2/testfile.7z.001?16=45000:3000', 'parchecker2/testfile.7z.001?16=45000:3000!0') hist = nzbget.download_nzb('parchecker.repair.nzb', nzb_content) assert hist['Status'] == 'SUCCESS/PAR' diff --git a/tests/functional/parcheck/parcheck_opt5_test.py b/tests/functional/parcheck/parcheck_opt5_test.py index a3e2e562..8bfafabe 100644 --- a/tests/functional/parcheck/parcheck_opt5_test.py +++ b/tests/functional/parcheck/parcheck_opt5_test.py @@ -1,11 +1,11 @@ nzbget_options = ['ParCheck=manual', 'ParQuick=yes', 'PostStrategy=balanced'] def test_parchecker_healthy(nserv, nzbget): - hist = nzbget.download_nzb('parchecker.nzb') + hist = nzbget.download_nzb('parchecker2.nzb') assert hist['Status'] == 'SUCCESS/HEALTH' def test_parchecker_repair(nserv, nzbget): - nzb_content = nzbget.load_nzb('parchecker.nzb') - nzb_content = nzb_content.replace('parchecker/testfile.dat?1=0:3000', 'parchecker/testfile.dat?1=0:3000!0') + nzb_content = nzbget.load_nzb('parchecker2.nzb') + nzb_content = nzb_content.replace('parchecker2/testfile.7z.001?16=45000:3000', 'parchecker2/testfile.7z.001?16=45000:3000!0') hist = nzbget.download_nzb('parchecker.repair.nzb', nzb_content) assert hist['Status'] == 'WARNING/DAMAGED' diff --git a/tests/functional/parcheck/parcheck_opt6_test.py b/tests/functional/parcheck/parcheck_opt6_test.py index 99fd4168..4a2b0987 100644 --- a/tests/functional/parcheck/parcheck_opt6_test.py +++ b/tests/functional/parcheck/parcheck_opt6_test.py @@ -1,11 +1,11 @@ nzbget_options = ['ParCheck=force', 'ParQuick=no', 'PostStrategy=balanced'] def test_parchecker_healthy(nserv, nzbget): - hist = nzbget.download_nzb('parchecker.nzb') + hist = nzbget.download_nzb('parchecker2.nzb') assert hist['Status'] == 'SUCCESS/PAR' def test_parchecker_repair(nserv, nzbget): - nzb_content = nzbget.load_nzb('parchecker.nzb') - nzb_content = nzb_content.replace('parchecker/testfile.dat?1=0:3000', 'parchecker/testfile.dat?1=0:3000!0') + nzb_content = nzbget.load_nzb('parchecker2.nzb') + nzb_content = nzb_content.replace('parchecker2/testfile.7z.001?16=45000:3000', 'parchecker2/testfile.7z.001?16=45000:3000!0') hist = nzbget.download_nzb('parchecker.repair.nzb', nzb_content) assert hist['Status'] == 'SUCCESS/PAR' diff --git a/tests/functional/parcheck/parcheck_opt7_test.py b/tests/functional/parcheck/parcheck_opt7_test.py index 5e96f9c3..fa3afd63 100644 --- a/tests/functional/parcheck/parcheck_opt7_test.py +++ b/tests/functional/parcheck/parcheck_opt7_test.py @@ -1,13 +1,13 @@ nzbget_options = ['ParCheck=auto', 'ParQuick=no', 'PostStrategy=rocket'] def test_parchecker_healthy(nserv, nzbget): - hist = nzbget.download_nzb('parchecker.nzb') + hist = nzbget.download_nzb('parchecker2.nzb') assert hist['Status'] == 'SUCCESS/HEALTH' def test_parchecker_repair(nserv, nzbget): nzbget.api.pausepost(); - nzb_content = nzbget.load_nzb('parchecker.nzb') - nzb_content = nzb_content.replace('parchecker/testfile.dat?1=0:3000', 'parchecker/testfile.dat?1=0:3000!0') + nzb_content = nzbget.load_nzb('parchecker2.nzb') + nzb_content = nzb_content.replace('parchecker2/testfile.7z.001?16=45000:3000', 'parchecker2/testfile.7z.001?16=45000:3000!0') nzbget.append_nzb('parchecker.1.nzb', nzb_content, dupemode='FORCE') nzbget.append_nzb('parchecker.2.nzb', nzb_content, dupemode='FORCE') nzbget.append_nzb('parchecker.3.nzb', nzb_content, dupemode='FORCE') diff --git a/tests/functional/rename/rename_opt2_test.py b/tests/functional/rename/rename_opt2_test.py index 78690075..9c04b67e 100644 --- a/tests/functional/rename/rename_opt2_test.py +++ b/tests/functional/rename/rename_opt2_test.py @@ -67,19 +67,19 @@ def test_rename_obf3dmf2(nserv, nzbget): assert hist['Status'] == 'WARNING/HEALTH' def test_renameparchecker_healthy(nserv, nzbget): - hist = nzbget.download_nzb('parchecker.nzb') + hist = nzbget.download_nzb('parchecker2.nzb') assert hist['Status'] == 'SUCCESS/HEALTH' def test_parchecker_repair(nserv, nzbget): - nzb_content = nzbget.load_nzb('parchecker.nzb') - nzb_content = nzb_content.replace('parchecker/testfile.dat?1=0:3000', 'parchecker/testfile.dat?1=0:3000!0') + nzb_content = nzbget.load_nzb('parchecker2.nzb') + nzb_content = nzb_content.replace('parchecker2/testfile.7z.001?16=45000:3000', 'parchecker2/testfile.7z.001?16=45000:3000!0') hist = nzbget.download_nzb('parchecker.repair.nzb', nzb_content) assert hist['Status'] == 'SUCCESS/PAR' def test_parchecker_dmp(nserv, nzbget): - nzb_content = nzbget.load_nzb('parchecker.nzb') - nzb_content = nzb_content.replace('parchecker/testfile.par2?1=0:3000', 'parchecker/testfile.par2?1=0:3000!0') - hist = nzbget.download_nzb('parchecker.damagedpar.nzb', nzb_content) + nzb_content = nzbget.load_nzb('parchecker2.nzb') + nzb_content = nzb_content.replace('parchecker2/testfile.7z.par2?1=0:3000', 'parchecker2/testfile.7z.par2?1=0:3000!0') + hist = nzbget.download_nzb('parchecker2.damagedpar.nzb', nzb_content) assert hist['Status'] == 'SUCCESS/HEALTH' for entry in nzbget.api.loadlog(hist['ID'], 0, 10000): assert entry['Kind'] != 'ERROR', entry['Text'] diff --git a/tests/functional/rename/rename_opt3_test.py b/tests/functional/rename/rename_opt3_test.py index c1819153..d7d231fd 100644 --- a/tests/functional/rename/rename_opt3_test.py +++ b/tests/functional/rename/rename_opt3_test.py @@ -67,19 +67,19 @@ def test_rename_obf3dmf2(nserv, nzbget): assert hist['Status'] == 'SUCCESS/UNPACK' def test_parchecker_healthy(nserv, nzbget): - hist = nzbget.download_nzb('parchecker.nzb') + hist = nzbget.download_nzb('parchecker2.nzb') assert hist['Status'] == 'SUCCESS/HEALTH' def test_parchecker_repair(nserv, nzbget): - nzb_content = nzbget.load_nzb('parchecker.nzb') - nzb_content = nzb_content.replace('parchecker/testfile.dat?1=0:3000', 'parchecker/testfile.dat?1=0:3000!0') - hist = nzbget.download_nzb('parchecker.repair.nzb', nzb_content) + nzb_content = nzbget.load_nzb('parchecker2.nzb') + nzb_content = nzb_content.replace('parchecker2/testfile.7z.001?16=45000:3000', 'parchecker2/testfile.7z.001?16=45000:3000!0') + hist = nzbget.download_nzb('parchecker2.repair.nzb', nzb_content) assert hist['Status'] == 'SUCCESS/PAR' def test_parchecker_dmp(nserv, nzbget): - nzb_content = nzbget.load_nzb('parchecker.nzb') - nzb_content = nzb_content.replace('parchecker/testfile.par2?1=0:3000', 'parchecker/testfile.par2?1=0:3000!0') - hist = nzbget.download_nzb('parchecker.damagedpar.nzb', nzb_content) + nzb_content = nzbget.load_nzb('parchecker2.nzb') + nzb_content = nzb_content.replace('parchecker2/testfile.7z.par2?1=0:3000', 'parchecker2/testfile.7z.par2?1=0:3000!0') + hist = nzbget.download_nzb('parchecker2.damagedpar.nzb', nzb_content) assert hist['Status'] == 'SUCCESS/HEALTH' for entry in nzbget.api.loadlog(hist['ID'], 0, 10000): assert entry['Kind'] != 'ERROR', entry['Text'] diff --git a/tests/testdata/parchecker2/crc.txt b/tests/testdata/parchecker2/crc.txt new file mode 100644 index 00000000..6c5c9ff3 --- /dev/null +++ b/tests/testdata/parchecker2/crc.txt @@ -0,0 +1,4 @@ +testfile.7z.001 2c4f3383 +testfile.7z.002 153f2b08 +testfile.7z.003 f4c85a77 +testfile.nfo 0f294d41 diff --git a/tests/testdata/parchecker2/testfile.7z.001 b/tests/testdata/parchecker2/testfile.7z.001 new file mode 100644 index 00000000..b71d158b Binary files /dev/null and b/tests/testdata/parchecker2/testfile.7z.001 differ diff --git a/tests/testdata/parchecker2/testfile.7z.002 b/tests/testdata/parchecker2/testfile.7z.002 new file mode 100644 index 00000000..6d20e66e --- /dev/null +++ b/tests/testdata/parchecker2/testfile.7z.002 @@ -0,0 +1,868 @@ +rmediate destination directory + names now include unique numbers to avoid several downloads with same + name to use the same directory and interfere with each other; + - when option "UnpackCleanupDisk" is active all archive files are now + deleted from download directory without relying on output printed by + unrar; this solves issues with non-ascii-characters in archive file + names on some platforms and especially in combination with rar5; + - improved handling of non-ascii characters in file names on windows; + - added support for rar5-format when checking signatures of archives + with non-standard file extensions; + - small restructure in settings order: + - combined sections "REMOTE CONTROL" and "PERMISSIONS" into one + section with name "SECURITY"; + - moved sections "CATEGORIES" and "RSS FEEDS" higher in the + section list; + - improved par-check: if main par2-file is corrupted and can not be + loaded other par2-files are downloaded and then used as replacement + for main par2-file; + - if unpack did not find archive files the par-check is not requested + anymore if par-rename was already done; + - better handling of obfuscated nzb-files containing multiple files + with same names; removed option "StrictParName" which was not working + good with obfuscated files; if more par-files are required for repair + the files with strict names are tried first and then other par-files; + - added new scheduler commands "ActivateServer", "DeactivateServer" and + "FetchFeed"; combined options "TaskX.DownloadRate" and "TaskX.Process" + into one option "TaskX.Param", also used by new commands; + - added status filter buttons to history page; + - if unpack fails with write error (usually because of not enough space + on disk) this is shown as status "Unpack: space" in web-interface; + this unpack-status is handled as "success" by duplicate handling + (no download of other duplicate); also added new unpack-status "wrong + password" (only for rar5-archives); env.var. NZBPP_UNPACKSTATUS has + two new possible values: 3 (write error) and 4 (wrong password); + updated pp-script "EMail.py" to support new unpack-statuses; + - fixed a potential seg. fault in a commonly used function; + - added new option "TimeCorrection" to adjust conversion from system + time to local time (solves issues with scheduler when using a + binary compiled for other platform); + - NZBIDs are now generated with more care avoiding numbering holes + possible in previous versions; + - fixed: invalid "Offset" passed to RPC-method "editqueue" or command + line action "-E/--edit" could crash the program; + - fixed: crash after downloading of an URL (happen only on certain systems); + - fixed: restoring of settings didn't work for multi-sections (servers, + categories, etc.) if they were empty; + - fixed: choosing local files didn't work in Opera; + - fixed: certain characters printed by pp-scripts could crash the + program; + - fixed: malformed nzb-file could cause a memory leak; + - fixed: when a duplicate file was detected in collection it was + automatically deleted (if option DupeCheck is active) but the + total size of collection was not updated; + - when deleting individual files the total count of files in collection + was not updated; + - fixed: when multiple nzb-files were added via URL (rss including) at + the same time the info about category and priority could get lost for + some of files; + - fixed: if unpack fails the created destination directory was not + automatically removed (only if option "InterDir" was active); + - fixed scrolling to the top of page happening by clicking on items in + downloads/history lists and on action-buttons in edit-download and + history dialogs; + - fixed potential buffer overflow in remote client; + - improved error reporting when creation of temporary output file fails; + - fixed: when deleting download, if all remaining queued files are + par2-files the disk cleanup should not be performed, but it was + sometimes; + - fixed a potential problem in incorrect using of one library function. + +nzbget-11.0: + - reworked concept of post-processing scripts: + - multiple scripts can be assigned to each nzb-file; + - all assigned scripts are executed after the nzb-file is + downloaded and internally processed (unpack, repair); + - option is obsolete; + - new option sets directory where all pp-scripts must + be stored; + - new option sets the default list of pp-scripts to + be assigned to nzb-file when it's added to queue; + - new option to set the default list of + pp-scripts on a category basis; + - the execution order of pp-scripts can be set using new option + ; + - there are no separate configuration files for pp-scripts; + - configuration options and pp-parameters are defined in the + pp-scripts; + - script configuration options are saved in nzbget configuration + file (nzbget.conf); + - changed parameters list of RPC-methods and + ; + - new RPC-method returns configuration + descriptions for the program and for all pp-scripts; + - configuration of all scripts can be done in web-interface; + - the pp-scripts assigned to a particular nzb-file can be viewed + and changed in web-interface on page in the + edit download dialog; + - option renamed to (the old + name is still recognized); + - new option to define the location of template + configuration file (in previous versions it must be always + stored in ); + - history dialog shows status of every script; + - the old example post-processing script replaced with two new scripts: + - EMail.py - sends E-Mail notification; + - Logger.py - saves the full post-processing log of the job into + file _postprocesslog.txt; + - both pp-scripts are written in python and work on Windows too + (in addition to Linux, Mac, etc.); + - added possibility to set post-processing parameters for history items: + - pp-parameters can now be viewed and changed in history dialog + in web-interface; + - useful before post-processing again; + - new action in RPC-method ; + - new action in remote command <--edit/-E> for history items + (subcommand ); + - added new feature which creates new download from + selected files of source download; + - new command in web-interface in edit download dialog + on page ; + - new action in remote command <--edit/-E>; + - new action in JSON-/XML-RPC method ; + - added support for manual par-check: + - if option is set to and a damaged download + is detected the program downloads all par2-files but doesn't + perform par-check; the user must perform par-check/repair + manually then (possibly on another, faster computer); + - old values of option renamed to + and respectively; + - when set to all par2-files are always downloaded; + - removed option since its functionality is now + covered by option ; + - result of par-check can now have new value ; + - field in RPC-method can have new value + ; + - parameter for pp-script can have new value + <4 = manual repair necessary>; + - when download is resumed in web-interface the option + is respected and all par2-files are resumed (not only main par2-file); + - automatic deletion of backup-source files after successful par-repair; + important when repairing renamed rar-files since this could cause + failure during unpack; + - par-checker and renamer now add messages into the log of pp-item + (like unpack- and pp-scripts-messages); these message now appear in + the log created by scripts Logger.py and EMail.py; + - when a nzb-file is added via web-interface or via remote call the + file is now put into incoming nzb-directory (option "NzbDir") and + then scanned; this has two advantages over the old behavior when the + file was parsed directly in memory: + - the file serves as a backup for troubleshootings; + - the file is processed by nzbprocess-script (if defined in + option "NzbProcess") making the pre-processing much easier; + - new env-var parameters are passed to NzbProcess-script: NZBNP_NZBNAME, + NZBNP_CATEGORY, NZBNP_PRIORITY, NZBNP_TOP, NZBNP_PAUSED; + - new commands for use in NzbProcess-scripts: "[NZB] TOP=1" to add nzb + to the top of queue and "[NZB] PAUSED=1" to add nzb-file in paused state; + - reworked post-processor queue: + - only one job is created for each nzb-file; no more separate + jobs are created for par-collections within one nzb-file; + - option removed; a post-processing script is + called only once per nzb-file, this behavior cannot be altered + anymore; + - with a new feature individual par-collections can be + processed separately in a more effective way than before + - improved unicode (utf8) support: + - non-ascii characters are now correctly transferred via JSON-RPC; + - correct displaying of nzb-names and paths in web-interface; + - it is now possible to use non-ascii characters on settings page + for option values (such as paths or category names); + - improved unicode support in XML-RPC and JSON-RPC; + - if username and password are defined for a news-server the + authentication is now forced (in previous versions the authentication + was performed only if requested by server); needed for servers + supporting both anonymous (restricted) and authorized (full access) + accounts; + - added option to automatically delete unwanted files + (with specified extensions or names) after successful par-check or unpack; + - improvement in JSON-/XML-RPC: + - all ID fields including NZBID are now persistent and remain + their values after restart; + - this allows for third-party software to identify nzb-files by + ID; + - method now returns ID of NZB-file in the field + ; + - in versions up to 0.8.0 the field was used to identify + history items in the edit-commands , + , ; since version 9 field + is used for this purpose; in versions 9-10 field still + existed and had the same value as field for compatibility + with version 0.8.0; the compatibility is not provided anymore; + this change was needed to provide a consistent using of field + across all RPC-methods; + - added support for rar-files with non-standard extensions (such as + .001, etc.); + - added functions to backup and restore settings from web-interface; + when restoring it's possible to choose what sections to restore + (for example only news servers settings or only settings of a + certain pp-script) or restore the whole configuration; + - new option "ControlUsername" to define login user name (if you don't + like default username "nzbget"); + - if a communication error occurs in web-interface, it retries multiple + times before giving up with an error message; + - the maximum number of download threads are now managed automatically + taking into account the number of allowed connections to news servers; + removed option ; + - pp-scripts terminated with unknown status are now considered failed + (status=FAILURE instead of status=UNKNOWN); + - new parameter (env. var) is passed to pp_scripts and + contains an internal ID of NZB-file; + - improved thread synchronisation to avoid (short-time) lockings of + the program during creation of destination files; + - more detailed error message if a directory could not be created + (, , etc.); the message includes error text reported + by OS such as or similar; + - when unpacking the unpack start time is now measured after receiving + of unrar copyright message; this provides better unpack time + estimation in a case when user uses unpack-script to do some things + before executing unrar (for example sending Wake-On-Lan message to + the destination NAS); it works with unrar only, it's not possible + with 7-Zip because it buffers printed messages; + - when the program is reloaded, a message with version number is + printed like on start; + - configuration can now be saved in web-interface even if there were + no changes made but if obsolete or invalid options were detected in + the config file; the saving removes invalid entries from config file; + - option can now be set to en empty value to disable + authentication; useful if nzbget works behind other web-server with + its own authentication; + - when deleting downloads via web-interface a proper hint regarding + deleting of already downloaded files from disk depending on option + is displayed; + - if a news-server returns empty or bad article (this may be caused + by errors on the news server), the program tries again from the same + or other servers (in previous versions the article was marked as + failed without other download attempts); + - when a nzb-file whose name ends with ".queued" is added via web- + interface the ".queued"-part is automatically removed; + - small improvement in multithread synchronization of download queue; + - added link to catalog of pp-scripts to web-interface; + - updated forum URL in about dialog in web-interface; + - small correction in a log-message: removed from message + ; + - removed option "ProcessLogKind"; scripts should use prefixes ([INFO], + [DETAIL], etc); messages printed without prefixes are added as [INFO]; + - removed option "AppendNzbDir"; if it was disabled that caused problems + in par-checker and unpacker; the option is now assumed always active; + - removed option "RenameBroken"; it caused problems in par-checker + (the option existed since early program versions before the par-check + was added); + - configure-script now defines "SIGCHLD_HANDLER" by default on all + systems including BSD; this eliminates the need of configure- + parameter "--enable-sigchld-handler" on 64-Bit BSD; the trade-off: + 32-Bit BSD now requires "--disable-sigchld-handler"; + - improved configure-script: defining of symbol "FILE_OFFSET_BITS=64", + required on some systems, is not necessary anymore; + - fixed: in the option "NzbAddedProcess" the env-var parameter with + nzb-name was passed in "NZBNA_NAME", should be "NZBNA_NZBNAME"; + the old parameter name "NZBNA_NAME" is still supported for + compatibility; + - fixed: download time in statistics were incorrect if the computer + was put into standby (thanks Frank Kuypers for the patch); + - fixed: when option was active and the download after + unpack contained rar-file with the same name as one of original + files (sometimes happen with included subtitles) the original + rar-file was kept with name <.rar_duplicate1> even if the option + was active; + - fixed: failed to read download queue from disk if post-processing + queue was not empty; + - fixed: when a duplicate file was detected during download the + program could hang; + - fixed: symbol must be defined in project settings; + defining it in didn't work properly (Windows only); + - fixed: crash when adding malformed nzb-files with certain + structure (Windows only); + - fixed: by deleting of a partially downloaded nzb-file from queue, + when the option was active, the file + <_brokenlog.txt> was not deleted preventing the directory from + automatic deletion; + - fixed: if an error occurs when a RPC-client or web-browser + communicates with nzbget the program could crash; + - fixed: if the last file of collection was detected as duplicate + after the download of the first article the file was deleted from + queue (that's OK) but the post-processing was not triggered + (that's a bug); + - fixed: support for splitted files (.001, .002, etc.) were broken. + +nzbget-10.2: + - fixed potential segfault which could happen with file paths longer + than 1024 characters; + - fixed: when options and were both + active, a restart or reload of the program during download may cause + damaged files in the active download; + - increased width of speed indication ui-element to avoid layout + breaking on some linux-browsers; + - fixed a race condition in unpacker which could lead to a segfault + (although the chances were low because the code wasn't executed often). + +nzbget-10.1: + - fixed: articles with decoding errors (incomplete or damaged posts) + caused infinite retry-loop in downloader. + +nzbget-10.0: + - added built-in unpack: + - rar and 7-zip formats are supported (via external Unrar and + 7-Zip executables); + - new options , , , + , ; + - web-interface now shows progress and estimated time during + unpack (rar only; for 7-Zip progress is not available due to + limitations of 7-Zip); + - when built-in unpack is enabled, the post-processing script is + called after unpack and possibly par-check/repair (if needed); + - for nzb-files containing multiple collections (par-sets) the + post-processing script is called only once, after the last + par-set; + - new parameter passed to post-processing + script; + - if the option is enabled the post-processing- + script is called after each par-set (as in previous versions); + - example post-processing script updated: removed unrar-code, + added check for unpack status; + - new field in result of RPC-method ; + - history-dialog in web-interface shows three status: par-status, + unpack-status, script-status; + - with two built-in special post-processing parameters <*Unpack:> + and <*Unpack:Password> the unpack can be disabled for individual + nzb-file or the password can be set; + - built-in special post-processing parameters can be set via web- + interface on page (when built-in unpack is + enabled); + - added support for HTTPS to the built-in web-server (web-interface and + XML/JSON-RPC): + - new options , , and + ; + - module completely rewritten with support for server- + side sockets, newer versions of GnuTLS, proper thread lockings + in OpenSSL; + - improved the automatic par-scan (option ) to + significantly reduce the verify-time in some common cases with renamed + rar-files: + - the extra files are scanned in an optimized order; + - the scan stops when all missings files are found; + - added fast renaming of intentionally misnamed (rar-) files: + - the new renaming algorithm doesn't require full par-scan and + restores original filenames in just a few seconds, even on very + slow computers (NAS, media players, etc.); + - the fast renaming is performed automatically when requested by + the built-in unpacker (option must be active); + - added new option to put intermediate files during download + into a separate directory (instead of storing them directly in + destination directory (option ): + - when nzb-file is completely (successfully) downloaded, repaired + (if neccessary) and unpacked the files are moved to destination + directory (option or ); + - intermediate directory can significantly improve unpack + performance if it is located on a separate physical hard drive; + - added new option to manually select cipher for + encrypted communication with news server: + - manually choosing a faster cipher (such as ) can + significantly improve performance (if CPU is a limiting factor); + - major improvements in news-server/connection management (main and fill + servers): + - if download of article fails, the program tries all servers of + the same level before trying higher level servers; + - this ensures that fill servers are used only if all main servers + fail; + - this makes the configuring of multiple servers much easier than + before: in most cases the simple configuration of level 0 for + all main servers and level 1 for all fill servers suffices; + - in previous versions the level was increased immediately after + the first tried server of the level failed; to make sure all + main servers were tried before downloading from fill servers it + was required to create complex server configurations with + duplicates; these configurations were still not as effective as + now; + - do not reconnect on
errors since this + doesn't help but unnecessary increases CPU load and network + traffic; + - removed option ; it's not required anymore; + - new option allows more flexible configuration + of news servers when using multiple accounts on the same server; + with this option it's also possible to imitate the old server + management behavior regarding levels; + - news servers configuration is now less error-prone: + - the option is not required to start from <0> and + when several news servers are configured the Levels can be any + integers - the program sorts the servers and corrects the Levels + to 0,1,2,etc. automatically if needed; + - when option is set to <0> the server is + ignored (in previous version such a server could cause hanging + when the program was trying to go to the next level); + - if no news servers are defined (or all definitions are invalid) + a warning is printed to inform that the download is not + possible; + - categories can now have their own destination directories; new option + ; + - new feature in web-interface; new XML-/JSON-RPC + method ; + - improved the handling of hanging connections: if a connection hangs + longer than defined by option the program tries to + gracefully close connection first (this is new); if it still hangs + after the download thread is terminated as a last + resort (as in previous versions); + - added automatic speed meter recalibration to recover after possible + synchronization errors which can occur when the option + is not active; this makes the default (less accurate but fast) speed + meter almost as good as the accurate one; important when speed + throttling is active; + - when the par-checked requests more par-files, they get an extra + priority and are downloaded before other files regardless of their + priorities; this is needed to avoid hanging of par-checker-job if a + file with a higher priority gets added to queue during par-check; + - when post-processing-parameters are passed to the post-processing + script a second version of each parameter with a normalized parameter- + name is passed in addition to the original parameter name; in the + normalized name the special characters <*> and <:> are replaced with + <_> and all characters are passed in upper case; this is important for + internal post-processing-parameters (*Unpack:=yes/no) which include + special characters; + - warning now is not printed when the + connection was aborted before the request signature was read; + - changed formatting of remaining time for post-processing to short + format (as used for remaining download time); + - added link to article to settings tab on web- + interface; + - removed hint + from history dialog since it caused more questions than helped; + - changed default value for option to ; most + news servers nowadays do not require joining the group and many + servers do not keep headers for many groups making the join-command + fail even if the articles still can be successfully downloaded; + - small change in example post-processing script: message are now printed only if ts-files really existed; + - improved configure-script: + - libs which are added via pkgconfig are now put into LIBS instead + of LDFLAGS - improves compatibility with newer Linux linkers; + - OpenSSL libs/includes are now added using pkgconfig to better + handle dependencies; + - additional check for libcrypto (part of OpenSSL) ensures the + library is added to linker command even if pkgconfig is not + used; + - adding of local files via web-interface now works in IE10; + - if an obsolete option is found in the config file a warning is printed + instead of an error and the program is not paused anymore; + - fixed: the reported line numbers for configuration errors were + sometimes inaccurate; + - fixed warning ; + - fixed: some XML-/JSON-RPC methods may return negative values for file + sizes between 2-4GB; this had also influence on web-interface. + - fixed: if an external program (unrar, pp-script, etc.) could not be + started, the execute-function has returned code 255 although the code + -1 were expected in this case; this could break designed post- + processing flow; + - fixed: some characters with codes below 32 were not properly encoded + in JSON-RPC; sometimes output from unrar contained such characters + and could break web-interface; + - fixed: special characters (quotation marks, etc.) in unpack password + and in configuration options were not displayed properly and could be + discarded on saving; + +nzbget-9.1: + - added full par-scan feature needed to par-check/repair files which + were renamed after creation of par-files: + - new option to activate full par-scan (always or automatic); + the automatic full par-scan activates if missing files are detected + during par-check, this avoids unnecessary full scan for normal + (not renamed) par sets; + - improved the post-processing script to better handle renamed rar-files; + - replaced a browser error message when trying to add local files in + IE9 with a better message dialog; + +nzbget-9.0: + - changed version naming scheme by removing the leading zero: current + version is now called 9.0 instead of 0.9.0 (it's really the 9th major + version of the program); + - added built-in web-interface: + - completely new designed and written from scratch; + - doesn't require a separate web-server; + - doesn't require PHP; + - 100% Javascript application; the built-in web-server hosts only + static files; the javascript app communicates with NZBGet via + JSON-RPC; + - very efficient usage of server resources (CPU and memory); + - easy installation. Since neither a separate web-server nor PHP + are needed the installation of new web-interface is very easy. + Actually it is performed automatically when you "make install" + or "ipkg install nzbget"; + - modern look: better layout, popup dialogs, nice animations, + hi-def icons; + - built-in phone-theme (activates automatically); + - combined view for "currently downloading", "queued", "currently + processing" and "queued for processing"; + - renaming of nzb-files; + - multiselect with multiedit or merge of downloads; + - fast paging in the lists (downloads, history, messages); + - search box for filtering in the lists (downloads, history, messages) + and in settings; + - adding nzb-files to download queue was improved in several ways: + - add multiple files at once. The "select files dialog" allows + to select multiple files; + - add files using drag and drop. Just drop the files from your + file manager directly into the web-browser; + - add files via URLs. Put the URL and NZBGet downloads the + nzb-file and adds it to download queue automatically; + - the priority of nzb-file can now be set when adding local-files + or URLs; + - the history can be cleared completely or selected items can be removed; + - file mode is now nzb-file related; + - added the ability to queue URLs: + - the program automatically downloads nzb-files from given URLs + and put them to download queue. + - when multiple URLs are added in a short time, they are put + into a special URL-queue. + - the number of simultaneous URL-downloads are controlled via + new option UrlConnections. + - with the new option ReloadUrlQueue can be controlled if the URL-queue + should be reloaded after the program is restarted (if the URL-queue + was not empty). + - new switch <-U> for remote-command <--append/-A> to queue an URL. + - new subcommand <-U> in the remote command <--list/-L> prints the + current URL-queue. + - if URL-download fails, the URL is moved into history. + - with subcommand <-R> of command <--edit> the failed URL can be + returned to URL-queue for redownload. + - the remote command <--list/-L> for history can now print the infos + for URL history items. + - new XML/JSON-RPC command to add an URL or multiple + URLs for download. + - new XML/JSON-RPC command returns the items from the + URL-queue. + - the XML/JSON-RPC command was extended to provide + infos about URL history items. + - the URL-queue obeys the pause-state of download queue. + - the URL-downloads support HTTP and HTTPS protocols; + - added new field to nzb-info-object. + - it is initially set to the cleaned up name of the nzb-file. + - the renaming of the group changes this field. + - all RPC-methods related to nzb-object return the new field, the + old field is now deprecated. + - the option now checks the -field instead of + (the latter is not changed when the nzb is renamed). + - new env-var-parameter for post-processing script; + - added options and for remote command <--edit/-E>. With these + options the name of group or file can be used in edit-command instead + of file ID; + - added support for regular expressions (POSIX ERE Syntax) in remote + commands <--list/-L> and <--edit/-E> using new subcommands and ; + - improved performance of RPC-command ; + - added new command to RPC-method to set the + order of individual files in the group; + - added gzip-support to built-in web-server (including RPC); + - added processing of http-request in RPC-server for better + support of cross domain requests; + - renamed example configuration file and postprocessing script to make + the installation easier; + - improved the automatic installation () to install all + necessary files (not only the binary as it was before); + - improved handling of configuration errors: the program now does not + terminate on errors but rather logs all of them and uses default option values; + - added new XML/JSON-RPC methods , and ; + - with active option the NZB considered completed even if + there are paused non-par-files (the paused non-par-files are treated the + same way as paused par-files): as a result the reprocessable script is called; + - added subcommand to remote command <-S/--scan> to scan synchronously + (wait until scan completed); + - added parameter to XML/JSON-RPC method ; + - the command in web-interface now waits for completing of scan + before reporting the status; + - added remote command <--reload/-O> and JSON/XML-RPC method to + reload configuration from disk and reintialize the program; the reload + can be performed from web-interface; + - JSON/XML-RPC method extended with parameter ; + - categories available in web-interface are now configured in program + configuration file (nzbget.conf) and can be managed via web-interface + on settings page; + - updated descriptions in example configuration file; + - changes in configuration file: + - renamed options , and to + , and to avoid confusion + with news-server options , and + ; + - the old option names are still recognized and are automatically + renamed when the configuration is saved from web-interface; + - also renamed option <$MAINDIR> to ; + - extended remote command <--append/-A> with optional parameters: + - - adds the file/URL to the top of queue; + -

- pauses added files; + - - sets category for added nzb-file/URL; + - - sets nzb filename for added URL; + - the old switches <--category/-K> and <--top/-T> are deprecated + but still supported for compatibility; + - renamed subcommand of command <--edit/-E> to (the old + subcommand is still supported for compatibility); + - added new option to setup a script called after + a nzb-file is added to queue; + - added debug messages for speed meter; + - improved the startup script so it can be directly used in + without modifications; + - fixed: after renaming of a group, the new name was not displayed + by remote commands <-L G> and <-C in curses mode>; + - fixed incompatibility with OpenSLL 1.0 (thanks to OpenWRT team + for the patch); + - fixed: RPC-method could return wrong results if + the log was filtered with options ; + - fixed: free disk space calculated incorrectly on some OSes; + - fixed: unrar failure was not always properly detected causing the + post-processing to delete not yet unpacked rar-files; + - fixed compilation error on recent linux versions; + - fixed compilation error on older systems; + +nzbget-0.8.0: + - added priorities; new action for remote command <--edit/-E> to set + priorities for groups or individual files; new actions + and of RPC-command ; remote command + <--list/-L> prints priorities and indicates files or groups being + downloaded; ncurses-frontend prints priorities and indicates files or + groups being download; new command to set priority of nzb-file + from nzbprocess-script; RPC-commands and return + priorities and indicate files or groups being downloaded; + - added renaming of groups; new subcommand for command <--edit/-E>; new + action for RPC-method ; + - added new option , which enables syncronisation in speed + meter; that makes the indicated speed more accurate by eliminating + measurement errors possible due thread conflicts; thanks to anonymous + nzbget user for the patch; + - improved the parsing of filename from article subject; + - option now efficiently works on Windows with NTFS partitions; + - added URL-based-authentication as alternative to HTTP-header authentication + for XML- and JSON-RPC; + - fixed: nzb-files containing umlauts and other special characters could not + be parsed - replaced XML-Reader with SAX-Parser - only on POSIX (not on + Windows); + - fixed incorrect displaying of group sizes bigger than 4GB on many 64-bit + OSes; + - fixed a bug causing error on decoding of input data in JSON-RPC; + - fixed a compilation error on some windows versions; + - fixed: par-repair could fail when the filenames were not correctly parsed + from article subjects; + - fixed a compatibility issue with OpenBSD (and possibly other BSD based + systems); added the automatic configuring of required signal handling logic + to better support BSD without breaking the compatibility with certain Linux + systems; + - corrected the address of Free Software Foundation in copyright notice. + +nzbget-0.7.0: + - added history: new option , new remote subcommand for + commands (list history entries) and (delete history entries, + return history item, postprocess history item), new RPC-command + and subcommands , , for + command ; + - added support for JSON-P (extension of JSON-RPC); + - changed the result code returning status for postprocessing script + from <1> to <94> (needed to show the proper script status in history); + - improved the detection of new files in incoming nzb directory: now the + scanner does not rely on system datum, but tracks the changing of file + sizes during a last few () seconds instead; + - improvements in example postprocessing script: 1) if download contains + only par2-files the script do not delete them during cleanup; + 2) if download contains only nzb-files the script moves them to incoming + nzb-directory for further download; + - improved formatting of groups and added time info in curses output mode; + - added second pause register, which is independent of main pause-state and + therfore is intended for usage from external scripts; + that allows to pause download without interfering with options + and and scheduler tasks + and - they all work with first (default) pause register; + new subcommand for commands <--pause/-P> and <--unpause/-U>; + new RPC-command and ; + existing RPC-commands und renamed to and + ; + new field in result struct for RPC-command ; + existing fields and renamed to + and ; + old RPC-commands and fields still exist for compatibility; + the status output of command <--list/-L> indicates the state of second + pause register; + key

in curses-frontend can unpause second pause-register; + - nzbprocess-script (option ) can now set category and + post-processing parameters for nzb-file; + - redesigned server pool and par-checker to avoid using of semaphores + (which are very platform specific); + - added subcommand to remote commands <--pause/-P> and <--unpause/-U> to + pause/unpause the scanning of incoming nzb-directory; + - added commands and for scheduler option + ; + - added remote commands and for XML-/JSON-RPC; + - command now not only pauses the post-processing + queue but also pauses the current post-processing job (par-job or + script-job); + however the script-job can be paused only after the next line printed to + screen; + - improved error reporting while parsing nzb-files; + - added field to NZBInfo; the field is now returned by XML-/JSON-RPC + methods , and ; + - improvements in configure script; + - added support for platforms without IPv6 (they do not have ); + - debug-messages generated on early stages during initializing are now + printed to screen/log-file; + - messages about obsolete options are now printed to screen/log-file; + - imporved example postprocessing script: added support for external + configuration file, postprocessing parameters and configuration via + web-interface; + - option now can contain parameters which must be passed + to the script; + - added pausing/resuming for post-processor queue; + added new modifier to remote commands <--pause/-P> and <--unpause/-U>; + added new commands and to XML-/JSON-RPC; + extended output of remote command <--list/-L> to indicate paused state + of post-processor queue; extended command of XML-/JSON-RPC + with field ; + - changed the command line syntax for requesting of post-processor queue + from <-O> to <-L O> for consistency with other post-queue related + commands (<-P O>, <-U O> and <-E O>); + - improved example post-processing script: added support for delayed + par-check (try unrar first, par-repair if unrar failed); + - added modifier to command <-E/--edit> for editing of + post-processor-queue; + following subcommands are supported: <+/-offset>, , , ; + subcommand supports deletion of queued post-jobs and active job as well; + deletion of active job means the cancelling of par-check/repair or + terminating of post-processing-script (including child processes of the + script); + updated remote-server to support new edit-subcommands in XML/JSON-RPC; + - extended the syntax of option in two ways: + 1) it now accepts multiple comma-separated values; + 2) an asterix as hours-part means ; + - added svn revision number to version string (commands <-v> and <-V>, + startup log entry); + svn revision is automatically read from svn-repository on each build; + - added estimated remaining time and better distinguishing of server state + in command <--list/-L>; + - added new return code (93) for post-processing script to indicate + successful processing; that results in cleaning up of download queue + if option is active; + - added readonly options , and for usage + in processing scripts (options are available as environment variables + , and ); + - renamed ParStatus constant to for a consistence with + ScriptStatus constant , that also affects the results of + RPC-command ; + - added a new return code <95/POSTPROCESS_NONE> for post-processing scripts + for cases when pp-script skips all post-processing work (typically upon + a user's request via a pp-parameter); + modified the example post-processing script to return the new code + instead of a error code when a pp-parameter was set to ; + - added field to result of RPC-Command and fields + and for command ; + - in and output-modes the download speed is now printed + with one decimal digit when the speed is lower than 10 KB/s; + - improvement in example post-processing script: added check for existence + of and command ; + - added shell batch file for windows (nzbget-shell.bat); + thanks to orbisvicis (orbisvicis@users.sourceforge.net) for the script; + - added debian style init script (nzbgetd); + thanks to orbisvicis (orbisvicis@users.sourceforge.net) for the script; + - added the returning of a proper HTTP error code if the authorization was + failed on RPC-calls; + thanks to jdembski (jdembski@users.sourceforge.net) for the patch; + - changed the sleep-time during the throttling of bandwidth from 200ms to + 10ms in order to achieve better uniformity; + - modified example postprocessing script to not use the command , + which is not always available; + thanks to Ger Teunis for the patch; + - improved example post-processing script: added the check for existence + of destination directory to return a proper ERROR-code (important for + reprocessing of history items); + - by saving the queue to disk now using relative paths for the list of + compeled files to reduce the file's size; + - eliminated few compiler warnings on GCC; + - fixed: when option was specified and nzbget was + started as root, the lockfile was not removed; + - fixed: nothing was downloaded when the option was set to <0>; + - fixed: base64 decoding function used by RPC-method sometimes + failed, in particular when called from Ruby-language; + - fixed: JSON-RPC-commands failed, if parameters were placed before method + name in the request; + - fixed: RPC-method did not work properly on Posix systems + (it worked only on Windows); + - fixed compilation error when using native curses library on OpenSolaris; + - fixed linking error on OpenSolaris when using GnuTLS; + - fixed: option did not work; + - fixed: seg. fault in service mode on program start (Windows only); + - fixed: environment block was not passed correctly to child process, + what could result in seg faults (windows only); + - fixed: returning the postprocessing exit code <92 - par-check all + collections> when there were no par-files results in endless calling + of postprocessing script; + - fixed compatibility issues with OS/2. + +nzbget-0.6.0: + - added scheduler; new options , , + , and ; + - added support for postprocess-parameters; new subcommand of remote + command to add/modify pp-parameter for group (nzb-file); new + XML-/JSON-RPC-subcommand of method for + the same purpose; updated example configuration file and example + postprocess-script to indicate new method of passing arguments via + environment variables; + - added subcommands , and to command line switch <-L/--list>, + which prints list of files, groups or only status info respectively; + extended binary communication protocol to transfer nzb-infos in addition + to file-infos; + - added new subcommand to edit-command for merging of two (or more) + groups (useful after adding pars from a separate nzb-file); + - added option to automatically merge nzb-files with the same + filename (useful by adding pars from a different source); + - added script-processing of files in incoming directory to allow automatic + unpacking and queueing of compressed nzb-files; new option ; + - added the printing of post-process-parameters for groups in command + <--list G>; + - added the printing of nzbget version into the log-file on start; + - added option to automatically delete already downloaded + files from disk if nzb-file was deleted from queue (the download was + cancelled); + - added option to define the max time allowed for par-repair; + - added command <--scan/-S> to execute the scan of nzb-directory on remote + server; + - changed the method to pass arguments to postprocess/nzbprocess: now using + environment variables (old method is still supported for compatibility with + existing scripts); + - added the passing of nzbget-options to postprocess/nzbprocess scripts as + environment variables; + - extended the communication between nzbget and post-process-script: + collections are now detected even if parcheck is disabled; + - added support for delayed par-check/repair: post-process-script can request + par-check/repair using special exit codes to repair current collection or + all collections; + - implemented the normalizing of option names and values in option list; the + command <-p> also prints normalized names and values now; that makes the + parsing of output of command <-p> for external scripts easier; + - replaced option with new option which is now + used by all scripts (PostProcess, NzbProcess, TaskX.Process); + - improved entering to paused state on connection errors (do not retry failed + downloads if pause was activated); + - improved error reporting on decoding failures; + - improved compatibility of yenc-decoder; + - improved the speed of deleting of groups from download queue (by avoiding + the saving of queue after the deleting of each individual file); + - updated configure-script for better compatibility with FreeBSD; + - cleaning up of download queue (option ) and deletion of + source nzb-file (option ) after par-repair now works also + if par-repair was cancelled (option ); since required + par-files were already downloaded the repair in an external tool is + possible; + - added workaround to avoid hangs in child processes (by starting of + postprocess or nzbprocess), observed on uClibC based systems; + - fixed: TLS/SSL didn't work in standalone mode; + - fixed compatibility issues with Mac OS X; + - fixed: not all necessary par2-files were unpaused on first request for + par-blocks (although harmless, because additional files were unpaused + later anyway); + - fixed small memory leak appeared if process-script could not be started; + - fixed: configure-script could not detect the right syntax for function + on OpenSolaris. + - fixed: files downloaded with disabled decoder (option decode=no) sometimes + were malformed and could not be decoded; + - fixed: empty string parameters did not always work in XML-RPC. + +nzbget-0.5.1: + - improved the check of server responses to prevent unnecessary retrying + if the article does not exist on server; + - fixed: seg.fault in standalone mode if used without specifying the + category (e.g. without switch <-K>); + - fixed: download speed indicator could report not-null values in + standby-mode (when paused); + - fixed: parameter in JSON/XML-RPC was not properly decoded by + server, makin \ No newline at end of file diff --git a/tests/testdata/parchecker2/testfile.7z.003 b/tests/testdata/parchecker2/testfile.7z.003 new file mode 100644 index 00000000..3aa4e975 --- /dev/null +++ b/tests/testdata/parchecker2/testfile.7z.003 @@ -0,0 +1,402 @@ +g the setting of a nested category (containing slash or + backslash character) via nzbgetweb not possible; + +nzbget-0.5.0: + - added TLS/SSL-support for encrypted communication with news-servers; + - added IPv6-support for communication with news-servers as well as for + communication between nzbget-server and nzbget-client; + - added support for categories to organize downloaded files; + - new option to create the subdirectory for each category; + - new switch <-K> for usage with switch <-A> to define a category during + the adding a file to download queue; + - new command in switch <-E> to change the category of nzb-file in + download queue; the already downloaded files are automatically moved to new + directory if the option is active; + - new parameter in XML-/JSON-RPC-command to allow the + changing of category via those protocols; + - new parameter in a call to post-process-script with category name; + - scanning of subdirectories inside incoming nzb-directory to automatically + assign category names; nested categories are supported; + - added option to connect to servers, that do not accept + -command; + - added example post-process script for unraring of downloaded files + (POSIX only); + - added options and useful on slow CPUs; + - added option to delete source nzb-file after successful + download and parcheck; + - switch <-P> can now be used together with switches <-s> and <-D> to start + server/daemon in paused state; + - changed the type of messages logged in a case of connection errors from + to to provide better error reporting; + - now using OS-specific line-endings in log-file and brokenlog-file: LF on + Posix and CRLF on Windows; + - added detection of adjusting of system clock to correct uptime/download + time (for NAS-devices, that do not have internal clock and set time from + internet after booting, while nzbget may be already running); + - added the printing of stack on segmentation faults (if configured with + <--enable-debug>, POSIX only); + - added option for better debugging on Linux in a case of abnormal + program termination; + - fixed: configure-script could not automatically find libsigc++ on 64-bit + systems; + - few other small fixes; + +nzbget-0.4.1: + - to avoid accidental deletion of file in curses-frontend the key + now must be pressed in uppercase; + - options and in news-server's configuration are now + optional; + - added the server's name to the detail-log-message, displayed on the start + of article's download; + - added the option to help to post-process-scripts, which + make par-check/-repair on it's own; + - improved download-speed-meter: it uses now a little bit less cpu and + calculates the speed for the last 30 seconds (instead of 5 seconds), + providing better accuracy; Thanks to ydrol + for the patch; + - reduced CPU-usage in curses-outputmode; Thanks to ydrol for the patch + ; + - fixed: line-endings in windows-style (CR-LF) in config-file were not + read properly; + - fixed: trailing spaces in nzb-filenames (before the file's extension) + caused errors on windows. Now they will be trimmed; + - fixed: XML-RPC and JSON-RPC did not work on Big-Endian-CPUs (ARM, PPC, etc), + preventing the using of web-interface; + - fixed: umask-option did not allow to enable write-permissions for + and ; + - fixed: in curses-outputmode the remote-client showed on first screen-update + only one item of queue; + - fixed: edit-commands with negative offset did not work via XML-RPC + (but worked via JSON-RPC); + - fixed incompatibility issues with gcc 4.3; Thanks to Paul Bredbury + for the patch; + - fixed: segmentation fault if a file listed in nzb-file does not have any + segments (articles); + +nzbget-0.4.0: + - added the support for XML-RPC and JSON-RPC to easier control the server + from other applications; + - added web-interface - it is available for download from nzbget-project's + home page as a separate package "web-interface"; + - added the automatic cleaning up of the download queue (deletion of unneeded + paused par-files) after successful par-check/repair - new + option ; + - added option to allow to filter the (not so important) + log-messages from articles' downloads (they have now the type + instead of ); + - added the gathering of progress-information during par-check; it is + available via XML-RPC or JSON-RPC; it is also showed in web-interface; + - improvements in internal decoder: added support for yEnc-files without + ypart-statement (sometimes used for small files); added support for + UU-format; + - removed support for uulib-decoder (it did not work well anyway); + - replaced the option with the option + ; + - added detection of errors and + (special case for NNTPCache-server) to consider them as connect-errors + (and therefore not count as retries); + - added check for incomplete articles (also mostly for NNTPCache-server) to + differ such errors from CrcErrors (better error reporting); + - improved error-reporting on moving of completed files from tmp- to + dst-directory and added code to move files across drives if renaming fails; + - improved handling of nzb-files with multiple collections in par-checker; + - improved the parchecker: added the detection and processing of files + splitted after parring; + - added the queueing of post-process-scripts and waiting for script's + completion before starting of a next job in postprocessor (par-job or + script) to provide more balanced cpu utilization; + - added the redirecting of post-process-script's output to log; new option + to specify the default message-kind for unformatted + log-messages; + - added the returning of script-output by command via XML-RPC + and JSON-RPC; the script-output is also showed in web-interface; + - added the saving and restoring of the post-processor-queue (if server was + stopped before all items were processed); new option ; + - added new parameter to postprocess-script to indicate if any of par-jobs + for the same nzb-file failed; + - added remote command (switch O/--post) to request the post-processor-queue + from server; + - added remote command (switch -W/--write) to write messages to server's log; + - added option to automatically pause the download on low disk + space; + - fixed few incompatibility-issues with unslung-platform on nslu2 (ARM); + - fixed: articles with trailing text after binary data caused the decode + failures and the reporting of CRC-errors; + - fixed: dupecheck could cause seg.faults when all articles for a file failed; + - fixed: by dupe-checking of files contained in nzb-file the files with the + same size were ignored (not deleted from queue); + - updated libpar2-patch for msvc to fix a segfault in libpar2 (windows only); + - fixed: by registering the service on windows the fullpath to nzbget.exe + was not always added to service's exename, making the registered service + unusable; + - fixed: the pausing of a group could cause the start of post-processing for + that group; + - fixed: too many info-messages could be printed during + par-check (appeared on posix only); + +nzbget-0.3.1: + - Greatly reduced the memory consumption by keeping articles' info on disk + until the file download starts; + - Implemented decode-on-the-fly-technique to reduce disk-io; downloaded + and decoded data can also be saved directly to the destination file + (without any intermediate files at all); this eliminates the necessity + of joining of articles later (option "DirectWrite"); + - Improved communication with news-servers: connections are now keeped open + until all files are downloaded (or server paused); this eliminates the + need for establishing of connections and authorizations for each + article and improves overal download speed; + - Significantly better download speed is now possible on fast connection; + it was limited by delays on starting of new articles' downloads; + the synchronisation mechanism was reworked to fix this issue; + - Download speed meter is much more accurate, especially on fast connections; + this also means better speed throttling; + - Speed optimisations in internal decoder (up to 25% faster); + - CRC-calculation can be bypassed to increase performance on slow CPUs + (option "CrcCheck"); + - Improved parsing of artcile's subject for better extracting of filename + part from it and implemented a fallback-option if the parsing was incorrect; + - Improved dupe check for files from the same nzb-request to detect reposted + files and download only the best from them (if option "DupeCheck" is on); + - Articles with incorrect CRC can be treated as "possibly recoverable errors" + and relaunched for download (option "RetryOnCrcError"), it is useful if + multiple servers are available; + - Improved error-check for downloaded articles (crc-check and check for + received message-id) decreases the number of broken files; + - Extensions in curses-outputmode: added group-view-mode (key "G") to show + items in download queue as groups, where one group represents all files + from the same nzb-file; the editing of queue works also in group-mode + (for all files in this group): pause/unpause/delete/move of groups; + - Other extensions in curses-outputmode: key "T" toggles timestamps in log; + added output of statistical data: uptime, download-time, average session + download speed; + - Edit-command accepts more than one ID or range of IDs. + E.g: "nzbget -E P 2,6-10,33-39"; The switch "-I" is not used anymore; + - Move-actions in Edit-command affect files in a smart order to guarantee + that the relative order of files in queue is not changed after the moving; + - Extended syntax of edit-command to edit groups (pause/unpause/delete/move + of groups). E.g: "nzbget -E G P 2"; + - Added option "DaemonUserName" to set the user that the daemon (POSIX only) + normally runs at. This allows nzbget daemon to be launched in rc.local + (at boot), and download items as a specific user id; Thanks to Thierry + MERLE for the patch; + - Added option "UMask" to specify permissions for newly created files and dirs + (POSIX only); + - Communication protocol used between server and client was revised to define + the byte order for transferred data. This allows hosts with different + endianness to communicate with each other; + - Added options "CursesNzbName", "CursesGroup" and "CursesTime" to define + initial state of curses-outputmode; + - Added option "UpdateInterval" to adjust update interval for Frontend-output + (useful in remote-mode to reduce network usage); + - Added option "WriteBufferSize" to reduce disk-io (but it could slightly + increase memory usage and therefore disabled by default); + - List-command prints additional statistical info: uptime, download-time, + total amount of downloaded data and average session download speed; + - The creation of necessary directories on program's start was extended + with automatic creation of all parent directories or error reporting + if it was not possible; + - Printed messages are now translated to oem-codepage to correctly print + filenames with non-english characters (windows only); + - Added remote-command "-V (--serverversion)" to print the server's version; + - Added option "ThreadLimit" to prevent program from crash if it wants to + create too many threads (sometimes could occur in special cases); + - Added options "NzbDirInterval" and "NzbDirFileAge" to adjust interval and + delay by monitoring of incoming-directory for new nzb-files; + - Fixed error on parsing of nzb-files containing percent and other special + characters in their names (bug appeared on windows only); + - Reformated sample configuration file and changed default optionnames + from lowercase to MixedCase for better readability; + - Few bugs (seg faults) were fixed. + +nzbget-0.3.0: + - The download queue now contains newsgroup-files to be downloaded instead of + nzb-jobs. By adding a new job, the nzb-file is immediately parsed and each + newsgroup-file is added to download queue. Each file can therefore be + managed separately (paused, deleted or moved); + - Current queue state is saved after every change (file is completed or the + queue is changed - entries paused, deleted or moved). The state is saved on + disk using internal format, which allows fast loading on next program start + (no need to parse xml-files again); + - The remaining download-size is updated after every article is completed to + indicate the correct remaining size and time for total files in queue; + - Downloaded articles, which are saved in temp-directory, can be reused on + next program start, if the file was not completed (option "continuepartial" + in config-file); + - Along with uulib the program has internal decoder for yEnc-format. This + decoder was necessary, because uulib is so slow, that it prevents using of + the program on not so powerful systems like linux-routers (MIPSEL CPU 200 + MHz). The new decoder is very fast. It is controlled over option "decoder" + in config-file; + - The decoder can be completely disabled. In this case all downloaded articles + are saved in unaltered form and can be joined with an external program; + UUDeview is one of them; + - If download of article fails, the program attempts to download it again so + many times, what the option "retries" in config-file says. This works even + if no servers with level higher than "0" defined. After each retry the next + server-level is used, if there are no more levels, the program switches to + level "0" again. The pause between retries can be set with config-option + "retryinterval"; + - If despite of a stated connection-timeout (it can be changed via + config-option "connectiontimeout") connection hangs, the program tries to + cancel the connection (after "terminatetimeout" seconds). If it doesn't + work the download thread is killed and the article will be redownloaded in + a new thread. This ensures, that there are no long-time hanging connections + and all articles are downloaded, when a time to rejoin file comes; + - Automatic par-checking and repairing. Only reuired par-files are downloaded. + The program uses libpar2 and does not require any external tools. The big + advantage of library is, that it allows to continue par-check after new + par-blocks were downloaded. This were not possible with external + par2cmdline-tool; + - There is a daemon-mode now (command-line switch "-D" (--daemon)). In this + mode a lock-file (default location "/tmp/nzbget.lock", can be changed via + option "lockfile") contains PID of daemon; + - The format of configuration-file was changed from xml to more common + text-format. It allows also using of variables like + "tempdir=${MAINDIR}/tmp"; + - Any option of config-file can be overwritten via command-line switch + "-o" (--option). This includes also the definition of servers. + This means that the program can now be started without a configuration-file + at all (all required options must be passed via command-line); + - The command-line switches were revised. The dedicated switches to change + options in config-file were eliminated, since any option can now be changed + via switch "-o" (--option); + - If the name of configuration-file was not passed via command-line the + program search it in following locations: "~/.nzbget", "/etc/nzbget.conf", + "/usr/etc/nzbget.conf", "/usr/local/etc/nzbget.conf", + "/opt/etc/nzbget.conf"; + - The new command-line switch "-n" (--noconfigfile) prevents the loading of + a config-file. All required config-options must be passed via command-line + (switch "-o" (--option)); + - To start the program in server mode either "-s" (--server) or + "-D" (--daemon) switch must be used. If the program started without any + parameters it prints help-screen. There is no a dedicated switch to start + in a standalone mode. If switches "-s" and "-D" are omitted and none of + client-request-switches used the standalone mode is default. This usage + of switches is more common to programs like "wget". To add a file to + server's download queue use switch "-A" (--append) and a name of nzb-file + as last command-line parameter; + - There is a new switch "-Q" (--quit) to gracefully stop server. BTW the + SIGKIL-signal is now handled appropriately, so "killall nzbget" is also OK, + where "killall -9 nzbget" terminates server immediately (helpful if it + hangs, but it shouldn't); + - With new switch "-T" (--top) the file will be added to the top of download + queue. Use it with switch "-A" (--append); + - The download queue can be edited via switch "-E" (--edit). It is possible + to pause, unpause, delete and move files in queue. The IDs of file(s) + to be affected are passed via switch "-I" (fileid), either one ID or a + range in a form "IDForm-IDTo". This also means, that every file in queue + have ID now; + - The switch "-L" (--list) prints IDs of files consequently. It prints also + name, size, percentage of completing and state (paused or not) of each file. + Plus summary info: number of files, total remaining size and size of + paused files, server state (paused or running), number of threads on + server, current speed limit; + - With new switch "-G" (--log) the last N lines printed to server's + screen-log, can be printed on client. The max number of lines which can + be returned from servers depends on option "logbuffersize"; + - The redesigned Frontends (known as outputmodes "loggable", "colored" and + "curses") can connect to (remote) server and behave as if you were running + server-instance of program itself (command-line switch "-C" (--connect)). + The log-output updates constantly and even all control-functions in + ncurses-mode works: pause/unpause server, set download rate limit, edit of + queue (pause/unpause, delete, move entries). The number of connected + clients is not limited. The "outputmode" on a client can be set + independently from server. The client-mode is especially useful if the + server runs as a daemon; + - The writing to log-file can be disabled via option "createlog". + The location of log-file controls the option "log-file"; + - Switch "-p" (--printconfig) prints the name of configuration file being + used and all option/value-pairs, taking into account all used + "-o" (--option) - switches; + - The communication protocol between server and client was optimized to + minimize the size of transferred data. Instead of fixing the size for + Filenames in data-structures to 512 bytes only in fact used data + are transferred; + - Extensions in ncurses-outputmode: scrolling in queue-list works better, + navigation in queue with keys Up, Down, PgUp, PgDn, Home, End. + Keys to move entries are "U" (move up), "N" (move down), "T" (move to top), + "B" (move to bottom). "P" to pause/unpause file. The size, percentage + of completing and state (paused or not) for every file is printed. + The header of queue shows number of total files, number of unpaused + files and size for all and unpaused files. Better using of screen estate + space - no more empty lines and separate header for status (total seven + lines gain). The messages are printed on several lines (if they not fill + in one line) without trimming now; + - configure.ac-file updated to work with recent versions of autoconf/automake. + There are new configure-options now: "--disable-uulib" to compile the + program without uulib; "--disable-ncurses" to disable ncurses-support + (eliminates necessity of ncurses-libs), useful on embedded systems with + little resources; "--disable-parcheck" to compile without par-check; + - The algorithm for parsing of nzb-files now uses XMLReader instead of + DOM-Parser to minimize memory usage (no mor needs to build complete DOM-tree + in memory). Thanks to Thierry MERLE for + the patch; + - The log-file contains now thread-ID for all entry-types and additionally + for debug-entries: filename, line number and function's name of source + code, where the message was printed. Debug-messages can be disabled in + config-file (option "debugtarget") like other messages; + - The program is now compatible with windows. Project file for MS Visual + C++ 2005 is included. Use "nzbget -install" and "nzbget -remove" to + install/remove nzbget-Service. Servers and clients can run on diferrent + operating systems; + - Improved compatibility with POSIX systems; Tested on: + - Linux Debian 3.1 on x86; + - Linux BusyBox with uClibc on MIPSEL; + - PC-BSD 1.4 (based on FreeBSD 6.2) on x86; + - Solaris 10 on x86; + - Many memory-leaks and thread issues were fixed; + - The program was thoroughly worked over. Almost every line of code was + revised. + +nzbget-0.2.3 + - Fixed problem with losing connection to newsserver after too long idle time + - Added functionality for dumping lots of debug info + +nzbget-0.2.2 + - Added Florian Penzkofers fix for FreeBSD, exchanging base functionality in + SingleServerPool.cpp with a more elegant solution + - Added functionality for forcing answer to reloading queue upon startup of + server + + use -y option to force from command-line + + use "reloadqueue" option in nzbget.cfg to control behavior + - Added nzbget.cfg options to control where info, warnings and errors get + directed to (either screen, log or both) + - Added option "createbrokenfilelog" in nzbget.cfg + +nzbget-0.2.1 + - Changed and extendddddddddddddddddd/server interface + - Added timeout on sockets which prevents certain types of nzbget hanging + - Added Kristian Hermansen's patch for renaming broken files + +nzbget-0.2.0 + - Moved 0.1.2-alt4 to a official release as 0.2.0 + - Small fixes + +nzbget-0.1.2-alt4 + - implemented tcp/ip communication between client & server (removing the + rather defunct System V IPC) + - added queue editing functionality in server-mode + +nzbget-0.1.2-alt1 + - added new ncurses frontend + - added server/client-mode (using System V IPC) + - added functionality for queueing download requests + +nzbget-0.1.2 + - performance-improvements + - commandline-options + - fixes + +nzbget-0.1.1 + - new output + - fixes + +nzbget-0.1.0a + - compiling-fixes + +nzbget-0.1.0 + - initial release + {  { +An +testfile.dat +s \ No newline at end of file diff --git a/tests/testdata/parchecker2/testfile.7z.par2 b/tests/testdata/parchecker2/testfile.7z.par2 new file mode 100644 index 00000000..5d3c74c5 Binary files /dev/null and b/tests/testdata/parchecker2/testfile.7z.par2 differ diff --git a/tests/testdata/parchecker2/testfile.7z.vol0+1.PAR2 b/tests/testdata/parchecker2/testfile.7z.vol0+1.PAR2 new file mode 100644 index 00000000..66a1ee38 Binary files /dev/null and b/tests/testdata/parchecker2/testfile.7z.vol0+1.PAR2 differ diff --git a/tests/testdata/parchecker2/testfile.7z.vol1+2.PAR2 b/tests/testdata/parchecker2/testfile.7z.vol1+2.PAR2 new file mode 100644 index 00000000..710362b9 Binary files /dev/null and b/tests/testdata/parchecker2/testfile.7z.vol1+2.PAR2 differ diff --git a/tests/testdata/parchecker2/testfile.7z.vol3+3.PAR2 b/tests/testdata/parchecker2/testfile.7z.vol3+3.PAR2 new file mode 100644 index 00000000..378c56bd Binary files /dev/null and b/tests/testdata/parchecker2/testfile.7z.vol3+3.PAR2 differ