Skip to content
Merged
Show file tree
Hide file tree
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
15 changes: 6 additions & 9 deletions daemon/extension/ScanScript.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,13 @@ void ScanScriptController::ExecuteScripts(
const char* nzbFilename,
NzbInfo* nzbInfo,
const char* directory,
const char* nzbName,
const char* category,
std::string& nzbName,
std::string& category,
int* priority,
NzbParameterList* parameters,
bool* addTop,
bool* addPaused,
const char* dupeKey,
std::string& dupeKey,
int* dupeScore,
EDupeMode* dupeMode)
{
Expand All @@ -61,26 +61,23 @@ void ScanScriptController::ExecuteScripts(
return;
}

ScanScriptController scriptController;
ScanScriptController scriptController(nzbName, category, dupeKey);
scriptController.m_nzbFilename = nzbFilename;
scriptController.m_url = nzbInfo ? nzbInfo->GetUrl() : "";
scriptController.m_directory = directory;
scriptController.m_nzbName = nzbName ? nzbName : "";
scriptController.m_category = category ? category : "";
scriptController.m_parameters = parameters;
scriptController.m_priority = priority;
scriptController.m_addTop = addTop;
scriptController.m_addPaused = addPaused;
scriptController.m_dupeKey = dupeKey ? dupeKey : "";
scriptController.m_dupeScore = dupeScore;
scriptController.m_dupeMode = dupeMode;
scriptController.m_prefixLen = 0;

const char* extensions = g_Options->GetExtensions();

if (!Util::EmptyStr(category))
if (!category.empty())
{
Options::Category* categoryObj = g_Options->FindCategory(category, false);
Options::Category* categoryObj = g_Options->FindCategory(category.c_str(), false);
if (categoryObj && !Util::EmptyStr(categoryObj->GetExtensions()))
{
extensions = categoryObj->GetExtensions();
Expand Down
40 changes: 32 additions & 8 deletions daemon/extension/ScanScript.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,30 +27,54 @@
class ScanScriptController : public NzbScriptController
{
public:
static void ExecuteScripts(const char* nzbFilename, NzbInfo* nzbInfo,
const char* directory, const char* nzbName, const char* category, int* priority,
NzbParameterList* parameters, bool* addTop, bool* addPaused,
const char* dupeKey, int* dupeScore, EDupeMode* dupeMode);
ScanScriptController(
std::string& nzbName,
std::string& category,
std::string& dupeKey)
: m_nzbName{ nzbName }
, m_category{ category }
, m_dupeKey{ dupeKey } {}

static void ExecuteScripts(
const char* nzbFilename,
NzbInfo* nzbInfo,
const char* directory,
std::string& nzbName,
std::string& category,
int* priority,
NzbParameterList* parameters,
bool* addTop,
bool* addPaused,
std::string& dupeKey,
int* dupeScore,
EDupeMode* dupeMode);
static bool HasScripts();

protected:
void ExecuteScript(std::shared_ptr<const Extension::Script> script) override;
void AddMessage(Message::EKind kind, const char* text) override;

void SetPriority(int* priority) { m_priority = priority; }
void SetDupeScore(int* dupeScore) { m_dupeScore = dupeScore; }
void SetDupeMode(EDupeMode* dupeMode) { m_dupeMode = dupeMode; }
void SetAddTop(bool* addTop) { m_addTop = addTop; }
void SetAddPaused(bool* addPaused) { m_addPaused = addPaused; }
void SetParameters(NzbParameterList* parameters) { m_parameters = parameters; }

private:
const char* m_nzbFilename;
const char* m_url;
const char* m_directory;
std::string m_nzbName;
std::string m_category;
std::string m_dupeKey;
std::string& m_nzbName;
std::string& m_category;
std::string& m_dupeKey;
int* m_priority;
int* m_dupeScore;
bool* m_addTop;
bool* m_addPaused;
EDupeMode* m_dupeMode;
NzbParameterList* m_parameters;
int m_prefixLen;
int m_prefixLen = 0;

void PrepareParams(const char* scriptName);
};
Expand Down
6 changes: 3 additions & 3 deletions daemon/queue/Scanner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -336,13 +336,13 @@ void Scanner::ProcessIncomingFile(
ScanScriptController::ExecuteScripts(fullFilename,
nzbInfo,
directory,
nzbName.c_str(),
nzbCategory.c_str(),
nzbName,
nzbCategory,
&priority,
&parameters,
&addTop,
&addPaused,
dupeKey.c_str(),
dupeKey,
&dupeScore,
&dupeMode
);
Expand Down
32 changes: 32 additions & 0 deletions tests/extension/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,37 @@ set(ExtensionSrc
ExtensionLoaderTest.cpp
ExtensionTest.cpp
ExtensionManagerTest.cpp
ScanScriptTest.cpp
${CMAKE_SOURCE_DIR}/daemon/extension/ManifestFile.cpp
${CMAKE_SOURCE_DIR}/daemon/extension/ExtensionLoader.cpp
${CMAKE_SOURCE_DIR}/daemon/extension/Extension.cpp
${CMAKE_SOURCE_DIR}/daemon/extension/ExtensionManager.cpp
${CMAKE_SOURCE_DIR}/daemon/extension/ScanScript.cpp
${CMAKE_SOURCE_DIR}/daemon/extension/NzbScript.cpp
${CMAKE_SOURCE_DIR}/daemon/extension/QueueScript.cpp
${CMAKE_SOURCE_DIR}/daemon/extension/PostScript.cpp
${CMAKE_SOURCE_DIR}/daemon/main/Options.cpp
${CMAKE_SOURCE_DIR}/daemon/main/Options.cpp
${CMAKE_SOURCE_DIR}/daemon/main/WorkState.cpp
${CMAKE_SOURCE_DIR}/daemon/queue/DownloadInfo.cpp
${CMAKE_SOURCE_DIR}/daemon/queue/DiskState.cpp
${CMAKE_SOURCE_DIR}/daemon/queue/Scanner.cpp
${CMAKE_SOURCE_DIR}/daemon/queue/QueueCoordinator.cpp
${CMAKE_SOURCE_DIR}/daemon/queue/QueueEditor.cpp
${CMAKE_SOURCE_DIR}/daemon/queue/Deobfuscation.cpp
${CMAKE_SOURCE_DIR}/daemon/queue/DirectRenamer.cpp
${CMAKE_SOURCE_DIR}/daemon/queue/NzbFile.cpp
${CMAKE_SOURCE_DIR}/daemon/queue/UrlCoordinator.cpp
${CMAKE_SOURCE_DIR}/daemon/queue/HistoryCoordinator.cpp
${CMAKE_SOURCE_DIR}/daemon/queue/DupeCoordinator.cpp
${CMAKE_SOURCE_DIR}/daemon/feed/FeedInfo.cpp
${CMAKE_SOURCE_DIR}/daemon/nntp/NewsServer.cpp
${CMAKE_SOURCE_DIR}/daemon/nntp/ServerPool.cpp
${CMAKE_SOURCE_DIR}/daemon/nntp/ArticleWriter.cpp
${CMAKE_SOURCE_DIR}/daemon/nntp/ArticleDownloader.cpp
${CMAKE_SOURCE_DIR}/daemon/nntp/NntpConnection.cpp
${CMAKE_SOURCE_DIR}/daemon/nntp/StatMeter.cpp
${CMAKE_SOURCE_DIR}/daemon/nntp/Decoder.cpp
${CMAKE_SOURCE_DIR}/daemon/util/FileSystem.cpp
${CMAKE_SOURCE_DIR}/daemon/util/Log.cpp
${CMAKE_SOURCE_DIR}/daemon/util/Json.cpp
Expand All @@ -25,8 +45,20 @@ set(ExtensionSrc
${CMAKE_SOURCE_DIR}/daemon/util/Thread.cpp
${CMAKE_SOURCE_DIR}/daemon/util/Observer.cpp
${CMAKE_SOURCE_DIR}/daemon/util/OpenSSL.cpp
${CMAKE_SOURCE_DIR}/daemon/util/Service.cpp
${CMAKE_SOURCE_DIR}/daemon/postprocess/Unpack.cpp
${CMAKE_SOURCE_DIR}/daemon/postprocess/ParParser.cpp
${CMAKE_SOURCE_DIR}/daemon/postprocess/PrePostProcessor.cpp
${CMAKE_SOURCE_DIR}/daemon/postprocess/DirectUnpack.cpp
${CMAKE_SOURCE_DIR}/daemon/postprocess/Cleanup.cpp
${CMAKE_SOURCE_DIR}/daemon/postprocess/Rename.cpp
${CMAKE_SOURCE_DIR}/daemon/postprocess/Repair.cpp
${CMAKE_SOURCE_DIR}/daemon/postprocess/ParChecker.cpp
${CMAKE_SOURCE_DIR}/daemon/postprocess/DupeMatcher.cpp
${CMAKE_SOURCE_DIR}/daemon/postprocess/ParRenamer.cpp
${CMAKE_SOURCE_DIR}/daemon/postprocess/RarRenamer.cpp
${CMAKE_SOURCE_DIR}/daemon/postprocess/PostUnpackRenamer.cpp
${CMAKE_SOURCE_DIR}/daemon/postprocess/RarReader.cpp
${CMAKE_SOURCE_DIR}/daemon/connect/WebDownloader.cpp
${CMAKE_SOURCE_DIR}/daemon/connect/Connection.cpp
${CMAKE_SOURCE_DIR}/daemon/connect/TlsSocket.cpp
Expand Down
2 changes: 1 addition & 1 deletion tests/extension/ExtensionLoaderTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/


Expand Down
2 changes: 1 addition & 1 deletion tests/extension/ManifestFileTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/


Expand Down
127 changes: 127 additions & 0 deletions tests/extension/ScanScriptTest.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
/*
* This file is part of nzbget. See <https://nzbget.com>.
*
* Copyright (C) 2025 Denis <denis@nzbget.com>
*
* 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
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/


#include "nzbget.h"

#include <boost/test/unit_test.hpp>
#include "ScanScript.h"
#include "Options.h"

class TestScanScriptController : public ScanScriptController
{
public:
TestScanScriptController(
std::string& nzbName,
std::string& category,
std::string& dupeKey)
: ScanScriptController(nzbName, category, dupeKey) {
}

void AddMessage(Message::EKind kind, const char* text) override
{
ScanScriptController::AddMessage(kind, text);
}

void SetPriority(int* priority)
{
ScanScriptController::SetPriority(priority);
}

void SetDupeScore(int* dupeScore)
{
ScanScriptController::SetDupeScore(dupeScore);
}

void SetDupeMode(EDupeMode* dupeMode)
{
ScanScriptController::SetDupeMode(dupeMode);
}

void SetAddTop(bool* addTop)
{
ScanScriptController::SetAddTop(addTop);
}

void SetAddPaused(bool* addPaused)
{
ScanScriptController::SetAddPaused(addPaused);
}

void SetParameters(NzbParameterList* parameters)
{
ScanScriptController::SetParameters(parameters);
}
};

BOOST_AUTO_TEST_CASE(ScanScriptCommandTest)
{
Options::CmdOptList cmdOpts;
cmdOpts.push_back("NzbLog=no");
Options options(&cmdOpts, nullptr);

const char* nzbFilename = "NzbFilename";
NzbInfo nzbInfo;
const char* directory = "NzbDir";
std::string nzbName = "NzbDir";
std::string category = "NzbCategory";
int priority = 0;
NzbParameterList parameters;
bool addTop = false;
bool addPaused = false;
std::string dupeKey = "DupeKey";
int dupeScore = 0;
EDupeMode dupeMode = EDupeMode::dmAll;

TestScanScriptController ctrl(nzbName, category, dupeKey);
ctrl.SetPriority(&priority);
ctrl.SetDupeScore(&dupeScore);
ctrl.SetDupeMode(&dupeMode);
ctrl.SetAddTop(&addTop);
ctrl.SetAddPaused(&addPaused);
ctrl.SetParameters(&parameters);

ctrl.AddMessage(Message::mkInfo, "[NZB] NZBNAME=my download");
BOOST_CHECK_EQUAL(nzbName, "my download");

ctrl.AddMessage(Message::mkInfo, "[NZB] CATEGORY=my category");
BOOST_CHECK_EQUAL(category, "my category");

ctrl.AddMessage(Message::mkInfo, "[NZB] DUPEKEY=tv show s01e02");
BOOST_CHECK_EQUAL(dupeKey, "tv show s01e02");

ctrl.AddMessage(Message::mkInfo, "[NZB] PRIORITY=50");
BOOST_CHECK_EQUAL(priority, 50);

ctrl.AddMessage(Message::mkInfo, "[NZB] DUPESCORE=10");
BOOST_CHECK_EQUAL(dupeScore, 10);

ctrl.AddMessage(Message::mkInfo, "[NZB] TOP=1");
BOOST_CHECK_EQUAL(addTop, true);

ctrl.AddMessage(Message::mkInfo, "[NZB] PAUSED=1");
BOOST_CHECK_EQUAL(addPaused, true);

ctrl.AddMessage(Message::mkInfo, "[NZB] DUPEMODE=FORCE");
BOOST_CHECK_EQUAL(dupeMode, EDupeMode::dmForce);

ctrl.AddMessage(Message::mkInfo, "[NZB] NZBPR_myvar=my value");
BOOST_CHECK_EQUAL(parameters.back().GetName(), "myvar");
BOOST_CHECK_EQUAL(parameters.back().GetValue(), "my value");
}
Loading