#include "metadata/MetaData.hpp" #include "DatabaseHandler.hpp" #include "FileTypes.hpp" class WatchedDirectory { public: enum Type { Audio, Video, }; WatchedDirectory( boost::filesystem::path path, Type type) : _path(path), _type(type) { if (!boost::filesystem::is_directory(path)) throw std::runtime_error( "path '" + path.string() + "' is not a directory!"); } bool operator==(WatchedDirectory const& other) { return _path == other._path && _type == other._type; } const boost::filesystem::path& getPath() const { return _path; } Type getType() const { return _type; } private: boost::filesystem::path _path; Type _type; }; class Database { public: Database(boost::filesystem::path db, MetaData::Parser& parser); void watchDirectory(WatchedDirectory dir); void unwatchDirectory(WatchedDirectory dir); // Rescan media folders void refresh(); private: void refresh(const WatchedDirectory& directory); // Video void refreshVideoDirectory( const boost::filesystem::path& directory ); void processVideoFile( const boost::filesystem::path& file); // Audio void removeMissingAudioFiles( void ); void refreshAudioDirectory( const boost::filesystem::path& directory); void processAudioFile( const boost::filesystem::path& file); Path::pointer getAddPath(const boost::filesystem::path& path); DatabaseHandler _db; std::list _directories; MetaData::Parser& _metadataParser; };