#include #include #include #include "Album.h" #include "AlbumTrack.h" #include "File.h" #include "Label.h" #include "ShowEpisode.h" #include "SqliteTools.h" const std::string policy::FileTable::Name = "File"; const std::string policy::FileTable::CacheColumn = "mrl"; File::File( sqlite3* dbConnection, sqlite3_stmt* stmt ) : m_dbConnection( dbConnection ) { m_id = sqlite3_column_int( stmt, 0 ); m_type = (Type)sqlite3_column_int( stmt, 1 ); m_duration = sqlite3_column_int( stmt, 2 ); m_albumTrackId = sqlite3_column_int( stmt, 3 ); m_playCount = sqlite3_column_int( stmt, 4 ); m_showEpisodeId = sqlite3_column_int( stmt, 5 ); m_mrl = (const char*)sqlite3_column_text( stmt, 6 ); } File::File( const std::string& mrl ) : m_dbConnection( NULL ) , m_id( 0 ) , m_type( UnknownType ) , m_duration( 0 ) , m_albumTrackId( 0 ) , m_playCount( 0 ) , m_showEpisodeId( 0 ) , m_mrl( mrl ) { } FilePtr File::create( sqlite3* dbConnection, const std::string& mrl ) { auto self = std::make_shared( mrl ); static const std::string req = "INSERT INTO " + policy::FileTable::Name + " VALUES(NULL, ?, ?, ?, ?, ?, ?)"; auto pKey = _Cache::insert( dbConnection, self, req.c_str(), (int)self->m_type, self->m_duration, self->m_albumTrackId, self->m_playCount, self->m_showEpisodeId, self->m_mrl ); if ( pKey == 0 ) return nullptr; self->m_id = pKey; self->m_dbConnection = dbConnection; return self; } std::shared_ptr File::albumTrack() { if ( m_albumTrack == nullptr && m_albumTrackId != 0 ) { m_albumTrack = AlbumTrack::fetch( m_dbConnection, m_albumTrackId ); } return m_albumTrack; } unsigned int File::duration() { return m_duration; } std::shared_ptr File::showEpisode() { if ( m_showEpisode == nullptr && m_showEpisodeId != 0 ) { m_showEpisode = ShowEpisode::fetch( m_dbConnection, m_showEpisodeId ); } return m_showEpisode; } std::vector > File::labels() { std::vector > labels; static const std::string req = "SELECT l.* FROM " + policy::LabelTable::Name + " l " "LEFT JOIN LabelFileRelation lfr ON lfr.id_label = l.id_label " "WHERE lfr.id_file = ?"; SqliteTools::fetchAll