DB, scan only well known extensions
This commit is contained in:
+24
-3
@@ -1,5 +1,20 @@
|
||||
#include <sstream>
|
||||
|
||||
#include "ConfigReader.hpp"
|
||||
|
||||
namespace {
|
||||
|
||||
void splitStrings(const std::string& source, std::vector<std::string>& res)
|
||||
{
|
||||
std::istringstream oss(source);
|
||||
|
||||
std::string str;
|
||||
while(oss >> str)
|
||||
res.push_back(str);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ConfigReader::ConfigReader(boost::filesystem::path p)
|
||||
{
|
||||
_config.readFile(p.string().c_str());
|
||||
@@ -29,7 +44,7 @@ ConfigReader::getUserInterfaceConfig(Service::UserInterfaceService::Config& conf
|
||||
config.sslPrivateKeyPath = _config.lookup("ui.ssl-crypto.key");
|
||||
config.sslTempDhPath = _config.lookup("ui.ssl-crypto.dh");
|
||||
|
||||
config.dbPath = _config.lookup("main.db");
|
||||
config.dbPath = _config.lookup("main.database.path");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -45,7 +60,7 @@ ConfigReader::getRemoteServerConfig(Service::RemoteServerService::Config& config
|
||||
config.sslPrivateKeyPath = _config.lookup("remote.ssl-crypto.key");
|
||||
config.sslTempDhPath = _config.lookup("remote.ssl-crypto.dh");
|
||||
|
||||
config.dbPath = _config.lookup("main.db");
|
||||
config.dbPath = _config.lookup("main.database.path");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -53,6 +68,12 @@ ConfigReader::getDatabaseUpdateConfig(Service::DatabaseUpdateService::Config& co
|
||||
{
|
||||
config.enable = true;
|
||||
|
||||
config.dbPath = _config.lookup("main.db");
|
||||
config.dbPath = _config.lookup("main.database.path");
|
||||
|
||||
std::string audioExtensions = _config.lookup("main.database.audio_extensions");
|
||||
std::string videoExtensions = _config.lookup("main.database.audio_extensions");
|
||||
|
||||
splitStrings(audioExtensions, config.audioExtensions);
|
||||
splitStrings(videoExtensions, config.videoExtensions);
|
||||
}
|
||||
|
||||
|
||||
@@ -48,29 +48,40 @@ getNextFirstOfMonth(const boost::gregorian::date& current)
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
isFileSupported(const boost::filesystem::path& file, const std::vector<boost::filesystem::path> extensions)
|
||||
{
|
||||
|
||||
boost::filesystem::path fileExtension = file.extension();
|
||||
|
||||
BOOST_FOREACH(const boost::filesystem::path extension, extensions)
|
||||
{
|
||||
if (extension == fileExtension)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
std::vector<boost::filesystem::path>
|
||||
getRootDirectoriesByType(Wt::Dbo::Session& session, Database::MediaDirectory::Type type)
|
||||
{
|
||||
std::vector<boost::filesystem::path> res;
|
||||
std::vector<Database::MediaDirectory::pointer> rootDirs = Database::MediaDirectory::getByType(session, type);
|
||||
|
||||
BOOST_FOREACH(Database::MediaDirectory::pointer rootDir, rootDirs)
|
||||
res.push_back(rootDir->getPath());
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
|
||||
namespace DatabaseUpdater {
|
||||
|
||||
using namespace Database;
|
||||
|
||||
namespace {
|
||||
|
||||
std::vector<boost::filesystem::path>
|
||||
getRootDirectoriesByType(Wt::Dbo::Session& session, Database::MediaDirectory::Type type)
|
||||
{
|
||||
std::vector<boost::filesystem::path> res;
|
||||
std::vector<Database::MediaDirectory::pointer> rootDirs = Database::MediaDirectory::getByType(session, type);
|
||||
|
||||
BOOST_FOREACH(Database::MediaDirectory::pointer rootDir, rootDirs)
|
||||
res.push_back(rootDir->getPath());
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Updater::Updater(boost::filesystem::path dbPath, MetaData::Parser& parser)
|
||||
: _running(false),
|
||||
@@ -81,6 +92,20 @@ _metadataParser(parser)
|
||||
_ioService.setThreadCount(1);
|
||||
}
|
||||
|
||||
void
|
||||
Updater::setAudioExtensions(const std::vector<std::string>& extensions)
|
||||
{
|
||||
BOOST_FOREACH(const std::string& extension, extensions)
|
||||
_audioExtensions.push_back("." + extension);
|
||||
}
|
||||
|
||||
void
|
||||
Updater::setVideoExtensions(const std::vector<std::string>& extensions)
|
||||
{
|
||||
BOOST_FOREACH(const std::string& extension, extensions)
|
||||
_videoExtensions.push_back("." + extension);
|
||||
}
|
||||
|
||||
void
|
||||
Updater::start(void)
|
||||
{
|
||||
@@ -405,7 +430,8 @@ Updater::processDirectory(const boost::filesystem::path& rootDirectory,
|
||||
switch( type )
|
||||
{
|
||||
case Database::MediaDirectory::Audio:
|
||||
processAudioFile( *itPath, stats );
|
||||
if (isFileSupported(*itPath, _audioExtensions))
|
||||
processAudioFile( *itPath, stats );
|
||||
|
||||
break;
|
||||
|
||||
@@ -420,7 +446,7 @@ Updater::processDirectory(const boost::filesystem::path& rootDirectory,
|
||||
}
|
||||
|
||||
bool
|
||||
Updater::checkFile(const boost::filesystem::path& p, const std::vector<boost::filesystem::path>& rootDirs)
|
||||
Updater::checkFile(const boost::filesystem::path& p, const std::vector<boost::filesystem::path>& rootDirs, const std::vector<boost::filesystem::path>& extensions)
|
||||
{
|
||||
bool status = true;
|
||||
|
||||
@@ -449,6 +475,11 @@ Updater::checkFile(const boost::filesystem::path& p, const std::vector<boost::fi
|
||||
LMS_LOG(MOD_DBUPDATER, SEV_INFO) << "Out of root file '" << p << "'";
|
||||
status = false;
|
||||
}
|
||||
else if (!isFileSupported(p, extensions))
|
||||
{
|
||||
LMS_LOG(MOD_DBUPDATER, SEV_INFO) << "File format no longer supported for '" << p << "'";
|
||||
status = false;
|
||||
}
|
||||
}
|
||||
|
||||
return status;
|
||||
@@ -472,7 +503,7 @@ Updater::checkAudioFiles( Stats& stats )
|
||||
{
|
||||
Track::pointer track = (*it);
|
||||
|
||||
if (!checkFile(track->getPath(), rootDirs))
|
||||
if (!checkFile(track->getPath(), rootDirs, _audioExtensions))
|
||||
{
|
||||
track.remove();
|
||||
stats.nbRemoved++;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#ifndef DB_UPDATER_UPDATER_HPP
|
||||
#define DB_UPDATER_UPDATER_HPP
|
||||
#ifndef DB_UPDATER_HPP
|
||||
#define DB_UPDATER_HPP
|
||||
|
||||
#include <boost/asio/deadline_timer.hpp>
|
||||
#include <Wt/WIOService>
|
||||
@@ -18,10 +18,12 @@ class Updater
|
||||
public:
|
||||
Updater(boost::filesystem::path db, MetaData::Parser& parser);
|
||||
|
||||
void setAudioExtensions(const std::vector<std::string>& extensions);
|
||||
void setVideoExtensions(const std::vector<std::string>& extensions);
|
||||
|
||||
void start();
|
||||
void stop();
|
||||
|
||||
|
||||
private:
|
||||
|
||||
struct Stats
|
||||
@@ -44,7 +46,10 @@ class Updater
|
||||
void process(boost::system::error_code ec);
|
||||
|
||||
// Check if a file exists and is still in a root directory
|
||||
static bool checkFile(const boost::filesystem::path& p, const std::vector<boost::filesystem::path>& rootDirectories);
|
||||
static bool checkFile(const boost::filesystem::path& p,
|
||||
const std::vector<boost::filesystem::path>& rootDirectories,
|
||||
const std::vector<boost::filesystem::path>& extensions);
|
||||
|
||||
|
||||
// Video
|
||||
|
||||
@@ -68,8 +73,12 @@ class Updater
|
||||
|
||||
Database::Handler _db;
|
||||
|
||||
std::vector<boost::filesystem::path> _audioExtensions;
|
||||
std::vector<boost::filesystem::path> _videoExtensions;
|
||||
|
||||
MetaData::Parser& _metadataParser;
|
||||
|
||||
|
||||
}; // class Updater
|
||||
|
||||
} // DatabaseUpdater
|
||||
|
||||
+7
-1
@@ -7,9 +7,15 @@ main = {
|
||||
level = 7;
|
||||
}
|
||||
|
||||
db = "/var/lms/lms.db";
|
||||
database = {
|
||||
path = "/var/lms/lms.db";
|
||||
|
||||
audio_extensions = "mp3 ogg oga aac m4a flac wav wma aif aiff ape mpc shn";
|
||||
video_extensions = "flv avi mpg mpeg mp4 m4v mkv mov wmv ogv divx m2ts"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ui = {
|
||||
enable = true;
|
||||
|
||||
|
||||
@@ -10,6 +10,8 @@ DatabaseUpdateService::DatabaseUpdateService(const Config& config)
|
||||
: _metadataParser(),
|
||||
_databaseUpdater( config.dbPath, _metadataParser)
|
||||
{
|
||||
_databaseUpdater.setAudioExtensions(config.audioExtensions);
|
||||
_databaseUpdater.setVideoExtensions(config.videoExtensions);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -20,6 +20,8 @@ class DatabaseUpdateService : public Service
|
||||
struct Config {
|
||||
bool enable;
|
||||
boost::filesystem::path dbPath;
|
||||
std::vector<std::string> audioExtensions;
|
||||
std::vector<std::string> videoExtensions;
|
||||
};
|
||||
|
||||
DatabaseUpdateService(const Config& config);
|
||||
|
||||
Reference in New Issue
Block a user