File indexing completed on 2024-05-19 04:49:44
0001 /**************************************************************************************** 0002 * Copyright (c) 2013 Konrad Zemek <konrad.zemek@gmail.com> * 0003 * * 0004 * This program is free software; you can redistribute it and/or modify it under * 0005 * the terms of the GNU General Public License as published by the Free Software * 0006 * Foundation; either version 2 of the License, or (at your option) any later * 0007 * version. * 0008 * * 0009 * This program is distributed in the hope that it will be useful, but WITHOUT ANY * 0010 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * 0011 * PARTICULAR PURPOSE. See the GNU General Public License for more details. * 0012 * * 0013 * You should have received a copy of the GNU General Public License along with * 0014 * this program. If not, see <http://www.gnu.org/licenses/>. * 0015 ****************************************************************************************/ 0016 0017 #include "FastForwardProvider.h" 0018 0019 #include "FastForwardTrack.h" 0020 #include "core/support/Debug.h" 0021 #include "importers/ImporterManager.h" 0022 #include "importers/ImporterSqlConnection.h" 0023 0024 using namespace StatSyncing; 0025 0026 FastForwardProvider::FastForwardProvider( const QVariantMap &config, 0027 ImporterManager *importer ) 0028 : ImporterProvider( config, importer ) 0029 { 0030 if( config.value( "dbDriver" ).toString() == "QSQLITE" ) 0031 { 0032 m_connection = ImporterSqlConnectionPtr( 0033 new ImporterSqlConnection( config.value( "dbPath" ).toString() ) ); 0034 } 0035 else 0036 { 0037 m_connection = ImporterSqlConnectionPtr( new ImporterSqlConnection( 0038 m_config.value( "dbDriver" ).toString(), 0039 m_config.value( "dbHost" ).toString(), 0040 m_config.value( "dbPort" ).toUInt(), 0041 m_config.value( "dbName" ).toString(), 0042 m_config.value( "dbUser" ).toString(), 0043 m_config.value( "dbPass" ).toString() 0044 ) ); 0045 } 0046 } 0047 0048 FastForwardProvider::~FastForwardProvider() 0049 { 0050 } 0051 0052 qint64 0053 FastForwardProvider::reliableTrackMetaData() const 0054 { 0055 return Meta::valTitle | Meta::valArtist | Meta::valAlbum | Meta::valComposer 0056 | Meta::valYear | Meta::valTrackNr | Meta::valDiscNr; 0057 } 0058 0059 qint64 0060 FastForwardProvider::writableTrackStatsData() const 0061 { 0062 return Meta::valRating | Meta::valFirstPlayed | Meta::valLastPlayed 0063 | Meta::valPlaycount | Meta::valLabel; 0064 } 0065 0066 QSet<QString> 0067 FastForwardProvider::artists() 0068 { 0069 QSet<QString> result; 0070 foreach( const QVariantList &row, m_connection->query( "SELECT name FROM artist" ) ) 0071 result.insert( row[0].toString() ); 0072 0073 return result; 0074 } 0075 0076 TrackList 0077 FastForwardProvider::artistTracks( const QString &artistName ) 0078 { 0079 const QString query = "SELECT t.url, t.title, al.name, ar.name, c.name, y.name, " 0080 "t.track, t.discnumber, s.rating, s.createdate, s.accessdate, s.playcounter " 0081 "FROM tags t " 0082 "INNER JOIN artist ar ON ar.id = t.artist " 0083 "LEFT JOIN album al ON al.id = t.album " 0084 "LEFT JOIN composer c ON c.id = t.composer " 0085 "LEFT JOIN year y ON y.id = t.year " 0086 "LEFT JOIN statistics s ON s.url = t.url " 0087 "WHERE ar.name = :artist"; 0088 0089 QVariantMap bindValues; 0090 bindValues.insert( ":artist", artistName ); 0091 0092 const QList<qint64> fields = QList<qint64>() << Meta::valTitle << Meta::valAlbum 0093 << Meta::valArtist << Meta::valComposer << Meta::valYear 0094 << Meta::valTrackNr << Meta::valDiscNr << Meta::valRating 0095 << Meta::valFirstPlayed << Meta::valLastPlayed << Meta::valPlaycount; 0096 0097 TrackList result; 0098 foreach( const QVariantList &row, m_connection->query( query, bindValues ) ) 0099 { 0100 const QString trackUrl = row[0].toString(); 0101 0102 Meta::FieldHash metadata; 0103 for( int i = 0; i < fields.size(); ++i ) 0104 metadata.insert( fields[i], row[i + 1] ); 0105 0106 const QString lblQuery = "SELECT l.name FROM labels l " 0107 "INNER JOIN tags_labels tl ON tl.labelid = l.id " 0108 "WHERE tl.url = :url"; 0109 0110 QVariantMap lblBindValues; 0111 lblBindValues.insert( ":url", trackUrl ); 0112 0113 QSet<QString> labels; 0114 foreach( const QVariantList &row, m_connection->query( lblQuery, lblBindValues ) ) 0115 labels.insert( row[0].toString() ); 0116 0117 result << TrackPtr( new FastForwardTrack( trackUrl, m_connection, metadata, 0118 labels ) ); 0119 } 0120 0121 return result; 0122 }