DB, scan only well known extensions

This commit is contained in:
emeric
2014-09-02 14:06:34 +02:00
parent c8837d6d68
commit 9f400f6e6c
6 changed files with 98 additions and 27 deletions
+24 -3
View File
@@ -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);
}
+50 -19
View File
@@ -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++;
+13 -4
View File
@@ -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
View File
@@ -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;
+2
View File
@@ -10,6 +10,8 @@ DatabaseUpdateService::DatabaseUpdateService(const Config& config)
: _metadataParser(),
_databaseUpdater( config.dbPath, _metadataParser)
{
_databaseUpdater.setAudioExtensions(config.audioExtensions);
_databaseUpdater.setVideoExtensions(config.videoExtensions);
}
void
+2
View File
@@ -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);