Fixed regression on recommendation engine
This commit is contained in:
@@ -43,6 +43,13 @@ Db::Db(const std::filesystem::path& dbPath)
|
||||
_connectionPool = std::move(connectionPool);
|
||||
}
|
||||
|
||||
Db::~Db()
|
||||
{
|
||||
LMS_LOG(DB, DEBUG) << "Optimizing db...";
|
||||
executeSql("pragma optimize");
|
||||
LMS_LOG(DB, DEBUG) << "Optimizing db DONE";
|
||||
}
|
||||
|
||||
void
|
||||
Db::executeSql(const std::string& sql)
|
||||
{
|
||||
|
||||
@@ -32,6 +32,12 @@ class Db
|
||||
public:
|
||||
|
||||
Db(const std::filesystem::path& dbPath);
|
||||
~Db();
|
||||
|
||||
Db(const Db&) = delete;
|
||||
Db(Db&&) = delete;
|
||||
Db& operator=(const Db&) = delete;
|
||||
Db& operator=(Db&&) = delete;
|
||||
|
||||
private:
|
||||
friend class Session;
|
||||
|
||||
@@ -38,6 +38,12 @@ createEngine(Database::Db& db)
|
||||
Engine::Engine(Database::Db& db)
|
||||
: _dbSession {db}
|
||||
{
|
||||
start();
|
||||
}
|
||||
|
||||
Engine::~Engine()
|
||||
{
|
||||
stop();
|
||||
}
|
||||
|
||||
void
|
||||
@@ -45,9 +51,6 @@ Engine::start()
|
||||
{
|
||||
assert(!_running);
|
||||
_running = true;
|
||||
|
||||
requestReloadInternal(false);
|
||||
|
||||
_ioService.start();
|
||||
}
|
||||
|
||||
@@ -62,6 +65,12 @@ Engine::stop()
|
||||
_ioService.stop();
|
||||
}
|
||||
|
||||
void
|
||||
Engine::requestLoad()
|
||||
{
|
||||
requestReloadInternal(false);
|
||||
}
|
||||
|
||||
void
|
||||
Engine::requestReload()
|
||||
{
|
||||
@@ -254,7 +263,7 @@ void
|
||||
Engine::cancelPendingClassifiers()
|
||||
{
|
||||
std::unique_lock<std::shared_mutex> lock {_classifiersMutex};
|
||||
|
||||
|
||||
for (IClassifier* classifier : _pendingClassifiers)
|
||||
classifier->requestCancelInit();
|
||||
}
|
||||
|
||||
@@ -35,12 +35,19 @@ namespace Recommendation
|
||||
{
|
||||
public:
|
||||
Engine(Database::Db& db);
|
||||
~Engine();
|
||||
|
||||
Engine(const Engine&) = delete;
|
||||
Engine(Engine&&) = delete;
|
||||
Engine& operator=(const Engine&) = delete;
|
||||
Engine& operator=(Engine&&) = delete;
|
||||
|
||||
private:
|
||||
|
||||
void start() override;
|
||||
void stop() override;
|
||||
void start();
|
||||
void stop();
|
||||
|
||||
void requestLoad() override;
|
||||
void requestReload() override;
|
||||
Wt::Signal<>& reloaded() override { return _sigReloaded; }
|
||||
|
||||
|
||||
@@ -40,8 +40,7 @@ namespace Recommendation
|
||||
public:
|
||||
virtual ~IEngine() = default;
|
||||
|
||||
virtual void start() = 0;
|
||||
virtual void stop() = 0;
|
||||
virtual void requestLoad() = 0;
|
||||
|
||||
virtual void requestReload() = 0;
|
||||
virtual Wt::Signal<>& reloaded() = 0;
|
||||
|
||||
@@ -254,6 +254,8 @@ MediaScanner::MediaScanner(Database::Db& db)
|
||||
_ioService.setThreadCount(1);
|
||||
|
||||
refreshScanSettings();
|
||||
|
||||
start();
|
||||
}
|
||||
|
||||
MediaScanner::~MediaScanner()
|
||||
|
||||
@@ -50,8 +50,6 @@ class MediaScanner : public IMediaScanner
|
||||
MediaScanner& operator=(const MediaScanner&) = delete;
|
||||
MediaScanner& operator=(MediaScanner&&) = delete;
|
||||
|
||||
void start() override;
|
||||
void stop() override;
|
||||
void requestReload() override;
|
||||
void requestImmediateScan(bool force) override;
|
||||
|
||||
@@ -64,6 +62,9 @@ class MediaScanner : public IMediaScanner
|
||||
|
||||
private:
|
||||
|
||||
void start();
|
||||
void stop();
|
||||
|
||||
// Job handling
|
||||
void scheduleNextScan();
|
||||
void scheduleScan(bool force, const Wt::WDateTime& dateTime = {});
|
||||
|
||||
@@ -38,14 +38,10 @@ class IMediaScanner
|
||||
public:
|
||||
virtual ~IMediaScanner() = default;
|
||||
|
||||
virtual void start() = 0;
|
||||
virtual void stop() = 0;
|
||||
|
||||
// Async requests
|
||||
virtual void requestReload() = 0;
|
||||
virtual void requestImmediateScan(bool force) = 0;
|
||||
|
||||
|
||||
enum class State
|
||||
{
|
||||
NotScheduled,
|
||||
|
||||
Reference in New Issue
Block a user