magnatunedatabasehandler.cpp
来自「Amarok是一款在LINUX或其他类UNIX操作系统中运行的音频播放器软件。 」· C++ 代码 · 共 573 行 · 第 1/2 页
CPP
573 行
/* Copyright (c) 2006 Nikolaj Hald Nielsen <nhnFreespirit@gmail.com> This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.*/#include "magnatunedatabasehandler.h"#include "debug.h"MagnatuneDatabaseHandler *MagnatuneDatabaseHandler::m_pInstance = 0;MagnatuneDatabaseHandler* MagnatuneDatabaseHandler::instance(){ if ( m_pInstance == 0 ) { m_pInstance = new MagnatuneDatabaseHandler(); } return m_pInstance;}MagnatuneDatabaseHandler::MagnatuneDatabaseHandler(){}MagnatuneDatabaseHandler::~MagnatuneDatabaseHandler(){}void MagnatuneDatabaseHandler::createDatabase( ){ //Get database instance CollectionDB *db = CollectionDB::instance(); QString tracksAutoIncrement = ""; QString albumsAutoIncrement = ""; QString artistAutoIncrement = ""; if ( db->getDbConnectionType() == DbConnection::postgresql ) { db->query( QString( "CREATE SEQUENCE magnatune_track_seq;" ) ); db->query( QString( "CREATE SEQUENCE magnatune_album_seq;" ) ); db->query( QString( "CREATE SEQUENCE magnatune_artist_seq;" ) ); tracksAutoIncrement = QString( "DEFAULT nextval('magnatune_track_seq')" ); albumsAutoIncrement = QString( "DEFAULT nextval('magnatune_album_seq')" ); artistAutoIncrement = QString( "DEFAULT nextval('magnatune_artist_seq')" ); } else if ( db->getDbConnectionType() == DbConnection::mysql ) { tracksAutoIncrement = "AUTO_INCREMENT"; albumsAutoIncrement = "AUTO_INCREMENT"; artistAutoIncrement = "AUTO_INCREMENT"; } // create table containing tracks QString queryString = "CREATE TABLE magnatune_tracks (" "id INTEGER PRIMARY KEY " + tracksAutoIncrement + ',' + "name " + db->textColumnType() + ',' + "track_number INTEGER," "length INTEGER," "album_id INTEGER," "artist_id INTEGER," "preview_lofi " + db->exactTextColumnType() + ',' + "preview_hifi " + db->exactTextColumnType() + ");"; debug() << "Creating mangnatune_tracks: " << queryString << endl; QStringList result = db->query( queryString ); //Create album table queryString = "CREATE TABLE magnatune_albums (" "id INTEGER PRIMARY KEY " + albumsAutoIncrement + ',' + "name " + db->textColumnType() + ',' + "year INTEGER," "artist_id INTEGER," "genre " + db->textColumnType() + ',' + "album_code " + db->textColumnType() + ',' + "cover_url " + db->exactTextColumnType() + ");"; debug() << "Creating mangnatune_albums: " << queryString << endl; result = db->query( queryString ); //Create artist table queryString = "CREATE TABLE magnatune_artists (" "id INTEGER PRIMARY KEY " + artistAutoIncrement + ',' + "name " + db->textColumnType() + ',' + "artist_page " + db->exactTextColumnType() + ',' + "description " + db->textColumnType() + ',' + "photo_url " + db->exactTextColumnType() + ");"; debug() << "Creating mangnatune_artist: " << queryString << endl; result = db->query( queryString );}void MagnatuneDatabaseHandler::destroyDatabase( ){ CollectionDB *db = CollectionDB::instance(); QStringList result = db->query( "DROP TABLE magnatune_tracks;" ); result = db->query( "DROP TABLE magnatune_albums;" ); result = db->query( "DROP TABLE magnatune_artists;" ); if ( db->getDbConnectionType() == DbConnection::postgresql ) { db->query( QString( "DROP SEQUENCE magnatune_track_seq;" ) ); db->query( QString( "DROP SEQUENCE magnatune_album_seq;" ) ); db->query( QString( "DROP SEQUENCE magnatune_artist_seq;" ) ); }}int MagnatuneDatabaseHandler::insertTrack( MagnatuneTrack *track, int albumId, int artistId ){ QString numberString; CollectionDB *db = CollectionDB::instance(); QString queryString = "INSERT INTO magnatune_tracks ( name, track_number, length, " "album_id, artist_id, preview_lofi, preview_hifi ) VALUES ( '" + db->escapeString( track->getName() ) + "', " + QString::number( track->getTrackNumber() ) + ", " + QString::number( track->getDuration() ) + ", " + QString::number( albumId ) + ", " + QString::number( artistId ) + ", '" + db->escapeString( track->getLofiURL() ) + "', '" + db->escapeString( track->getHifiURL() ) + "' );"; // debug() << "Adding Magnatune track " << queryString << endl; return db->insert( queryString, NULL );}int MagnatuneDatabaseHandler::insertAlbum( MagnatuneAlbum *album, int artistId ){ QString queryString; CollectionDB *db = CollectionDB::instance(); queryString = "INSERT INTO magnatune_albums ( name, year, artist_id, " "genre, album_code, cover_url ) VALUES ( '" + db->escapeString( db->escapeString( album->getName() ) ) + "', " + QString::number( album->getLaunchDate().year() ) + ", " + QString::number( artistId ) + ", '" + db->escapeString( album->getMp3Genre() ) + "', '" + album->getAlbumCode() + "', '" + db->escapeString( album->getCoverURL() ) + "' );"; //debug() << "Adding Magnatune album " << queryString << endl; return db->insert( queryString, 0 );}int MagnatuneDatabaseHandler::insertArtist( MagnatuneArtist *artist ){ QString queryString; CollectionDB *db = CollectionDB::instance(); queryString = "INSERT INTO magnatune_artists ( name, artist_page, description, " "photo_url ) VALUES ( '" + db->escapeString( db->escapeString( artist->getName() ) ) + "', '" + db->escapeString( artist->getHomeURL() ) + "', '" + db->escapeString( artist->getDescription() ) + "', '" + db->escapeString( artist->getPhotoURL() ) + "' );"; //debug() << "Adding Magnatune artist " << queryString << endl; return db->insert( queryString, 0 );}int MagnatuneDatabaseHandler::getArtistIdByExactName( QString name ){ CollectionDB *db = CollectionDB::instance(); QString queryString = "SELECT id from magnatune_artists WHERE name='" + db->escapeString( name ) + "';"; QStringList result = db->query( queryString ); //debug() << "Looking for id of artist " << name << ":" << endl; if ( result.size() < 1 ) return -1; int artistId = result.first().toInt(); //debug() << " Found: " << QString::number( artistId ) << ":" << endl; return artistId;}int MagnatuneDatabaseHandler::getAlbumIdByAlbumCode( QString albumcode ){ CollectionDB *db = CollectionDB::instance(); QString queryString = "SELECT id from magnatune_albums WHERE album_code='" + db->escapeString( albumcode ) + "';"; QStringList result = db->query( queryString ); //debug() << "Looking for id of album " << albumcode << ":" << endl; if ( result.size() < 1 ) return -1; int albumId = result.first().toInt(); //debug() << " Found: " << QString::number( albumId ) << ":" << endl; return albumId;}MagnatuneArtistList MagnatuneDatabaseHandler::getArtistsByGenre( QString genre ){ QString genreSql = ""; if ( genre != "All" ) { genreSql = "magnatune_albums.genre='" + genre + "' AND "; } CollectionDB *db = CollectionDB::instance(); QString queryString; queryString = "SELECT DISTINCT magnatune_artists.id, " "magnatune_artists.name, magnatune_artists.artist_page, " "magnatune_artists.description, magnatune_artists.photo_url " "FROM magnatune_albums, magnatune_artists " "WHERE " + genreSql + "magnatune_albums.artist_id " "= magnatune_artists.id;"; QStringList result = db->query( queryString ); debug() << "Looking for artist in genre: " << genre << endl; MagnatuneArtistList list; while ( result.size() > 0 ) { MagnatuneArtist artist; artist.setId( result.front().toInt() ); result.pop_front(); artist.setName( result.front() ); result.pop_front(); artist.setHomeURL( result.front() ); result.pop_front(); artist.setDescription( result.front() ); result.pop_front(); artist.setPhotoURL( result.front() ); result.pop_front(); list.append( artist ); } return list;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?