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 + -
显示快捷键?