Subsonic API: added the getScanStatus and startScan commands. fixes #62
This commit is contained in:
@@ -310,7 +310,7 @@ MediaScanner::getStatus()
|
||||
{
|
||||
Status res;
|
||||
|
||||
std::unique_lock<std::mutex> lock {_statusMutex};
|
||||
std::shared_lock lock {_statusMutex};
|
||||
|
||||
res.currentState = _curState;
|
||||
res.nextScheduledScan = _nextScheduledScan;
|
||||
@@ -367,7 +367,7 @@ MediaScanner::scheduleNextScan()
|
||||
}
|
||||
|
||||
{
|
||||
std::unique_lock<std::mutex> lock {_statusMutex};
|
||||
std::unique_lock lock {_statusMutex};
|
||||
_curState = nextScanDateTime.isValid() ? State::Scheduled : State::NotScheduled;
|
||||
_nextScheduledScan = nextScanDateTime;
|
||||
}
|
||||
@@ -421,8 +421,10 @@ MediaScanner::scan(boost::system::error_code err)
|
||||
if (err)
|
||||
return;
|
||||
|
||||
scanStarted().emit();
|
||||
|
||||
{
|
||||
std::unique_lock<std::mutex> lock {_statusMutex};
|
||||
std::unique_lock lock {_statusMutex};
|
||||
_curState = State::InProgress;
|
||||
_nextScheduledScan = {};
|
||||
}
|
||||
@@ -464,7 +466,7 @@ MediaScanner::scan(boost::system::error_code err)
|
||||
{
|
||||
stats.stopTime = Wt::WLocalDateTime::currentDateTime().toUTC();
|
||||
{
|
||||
std::unique_lock<std::mutex> lock {_statusMutex};
|
||||
std::unique_lock lock {_statusMutex};
|
||||
|
||||
_lastCompleteScanStats = std::move(stats);
|
||||
_inProgressScanStats.reset();
|
||||
@@ -476,7 +478,7 @@ MediaScanner::scan(boost::system::error_code err)
|
||||
}
|
||||
else
|
||||
{
|
||||
std::unique_lock<std::mutex> lock {_statusMutex};
|
||||
std::unique_lock lock {_statusMutex};
|
||||
|
||||
_curState = State::NotScheduled;
|
||||
_inProgressScanStats.reset();
|
||||
@@ -584,13 +586,15 @@ MediaScanner::refreshScanSettings()
|
||||
void
|
||||
MediaScanner::notifyInProgress(const ScanStats& stats)
|
||||
{
|
||||
const ScanProgressStats progressStats {stats.toProgressStats()};
|
||||
|
||||
{
|
||||
std::unique_lock<std::mutex> lock {_statusMutex};
|
||||
_inProgressScanStats = stats.toProgressStats();
|
||||
std::unique_lock lock {_statusMutex};
|
||||
_inProgressScanStats = progressStats;
|
||||
}
|
||||
|
||||
std::chrono::system_clock::time_point now {std::chrono::system_clock::now()};
|
||||
_sigScanInProgress(*_inProgressScanStats);
|
||||
const std::chrono::system_clock::time_point now {std::chrono::system_clock::now()};
|
||||
_sigScanInProgress(progressStats);
|
||||
_lastScanInProgressEmit = now;
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <chrono>
|
||||
#include <mutex>
|
||||
#include <shared_mutex>
|
||||
#include <optional>
|
||||
|
||||
#include <Wt/WDateTime.h>
|
||||
@@ -59,6 +59,7 @@ class MediaScanner : public IMediaScanner
|
||||
|
||||
Status getStatus() override;
|
||||
|
||||
Wt::Signal<>& scanStarted() override { return _sigScanStarted; }
|
||||
Wt::Signal<>& scanComplete() override { return _sigScanComplete; }
|
||||
Wt::Signal<ScanProgressStats>& scanInProgress() override { return _sigScanInProgress; }
|
||||
Wt::Signal<Wt::WDateTime>& scheduled() override { return _sigScheduled; }
|
||||
@@ -88,21 +89,22 @@ class MediaScanner : public IMediaScanner
|
||||
void notifyInProgressIfNeeded(const ScanStats& stats);
|
||||
void notifyInProgress(const ScanStats& stats);
|
||||
|
||||
bool _running {};
|
||||
Wt::WIOService _ioService;
|
||||
boost::asio::system_timer _scheduleTimer {_ioService};
|
||||
Wt::Signal<> _sigScanComplete;
|
||||
Wt::Signal<ScanProgressStats> _sigScanInProgress;
|
||||
bool _running {};
|
||||
Wt::WIOService _ioService;
|
||||
boost::asio::system_timer _scheduleTimer {_ioService};
|
||||
Wt::Signal<> _sigScanStarted;
|
||||
Wt::Signal<> _sigScanComplete;
|
||||
Wt::Signal<ScanProgressStats> _sigScanInProgress;
|
||||
std::chrono::system_clock::time_point _lastScanInProgressEmit {};
|
||||
Wt::Signal<Wt::WDateTime> _sigScheduled;
|
||||
Database::Session _dbSession;
|
||||
std::unique_ptr<MetaData::IParser> _metadataParser;
|
||||
Wt::Signal<Wt::WDateTime> _sigScheduled;
|
||||
Database::Session _dbSession;
|
||||
std::unique_ptr<MetaData::IParser> _metadataParser;
|
||||
|
||||
std::mutex _statusMutex;
|
||||
State _curState {State::NotScheduled};
|
||||
std::optional<ScanStats> _lastCompleteScanStats;
|
||||
std::shared_mutex _statusMutex;
|
||||
State _curState {State::NotScheduled};
|
||||
std::optional<ScanStats> _lastCompleteScanStats;
|
||||
std::optional<ScanProgressStats> _inProgressScanStats;
|
||||
Wt::WDateTime _nextScheduledScan;
|
||||
Wt::WDateTime _nextScheduledScan;
|
||||
|
||||
// Current scan settings
|
||||
std::size_t _scanVersion {};
|
||||
|
||||
Reference in New Issue
Block a user