File indexing completed on 2024-05-19 04:50:23
0001 /**************************************************************************************** 0002 * Copyright (c) 2008 Nikolaj Hald Nielsen <nhn@kde.org> * 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 "OpmlDirectoryDatabaseHandler.h" 0018 0019 #include "core-impl/collections/support/CollectionManager.h" 0020 #include "core/support/Debug.h" 0021 #include <core/storage/SqlStorage.h> 0022 0023 using namespace Meta; 0024 0025 OpmlDirectoryDatabaseHandler::OpmlDirectoryDatabaseHandler() 0026 {} 0027 0028 OpmlDirectoryDatabaseHandler::~OpmlDirectoryDatabaseHandler() 0029 {} 0030 0031 void 0032 OpmlDirectoryDatabaseHandler::createDatabase() 0033 { 0034 //Get database instance 0035 SqlStorage *db = CollectionManager::instance()->sqlStorage(); 0036 0037 QString genreAutoIncrement = ""; 0038 0039 // create table containing feeds 0040 QString queryString = "CREATE TABLE opmldirectory_tracks (" 0041 "id INTEGER PRIMARY KEY AUTO_INCREMENT, " 0042 "name " + db->textColumnType() + ',' + 0043 "track_number INTEGER," 0044 "length INTEGER," 0045 "preview_url " + db->exactTextColumnType() + ',' + 0046 "album_id INTEGER," 0047 "artist_id INTEGER ) ENGINE = MyISAM;"; 0048 0049 debug() << "Creating opmldirectory_tracks: " << queryString; 0050 0051 QStringList result = db->query( queryString ); 0052 0053 db->query( "CREATE INDEX opmldirectory_tracks_id ON opmldirectory_tracks(id);" ); 0054 db->query( "CREATE INDEX opmldirectory_tracks_album_id ON opmldirectory_tracks(album_id);" ); 0055 0056 // create table containing categories 0057 queryString = "CREATE TABLE opmldirectory_albums (" 0058 "id INTEGER PRIMARY KEY AUTO_INCREMENT, " 0059 "name " + db->textColumnType() + ',' + 0060 "description " + db->exactTextColumnType() + ',' + 0061 "artist_id INTEGER ) ENGINE = MyISAM;"; 0062 0063 result = db->query( queryString ); 0064 db->query( "CREATE INDEX opmldirectory_albums_name ON opmldirectory_albums(name);" ); 0065 0066 0067 //HACK!! monster hack actually! We really need a default dummy artist or the service query maker screws up big time- 0068 // we also need a dummy genre it would seem.... 0069 0070 queryString = "CREATE TABLE opmldirectory_artists (" 0071 "id INTEGER PRIMARY KEY AUTO_INCREMENT, " 0072 "name " + db->textColumnType() + ',' + 0073 "description " + db->exactTextColumnType() + ") ENGINE = MyISAM;"; 0074 0075 result = db->query( queryString ); 0076 0077 //now, insert a default artist 0078 SqlStorage *sqlDb = CollectionManager::instance()->sqlStorage(); 0079 queryString = "INSERT INTO opmldirectory_artists ( id, name, description " 0080 ") VALUES ( 1, 'dummy', 'dummy' );"; 0081 0082 sqlDb->insert( queryString, QString() ); 0083 0084 //create genre table 0085 queryString = "CREATE TABLE opmldirectory_genre (" 0086 "id INTEGER PRIMARY KEY AUTO_INCREMENT, " 0087 "name " + db->textColumnType() + ',' + 0088 "album_id INTEGER ) ENGINE = MyISAM;"; 0089 0090 result = db->query( queryString ); 0091 } 0092 0093 void 0094 OpmlDirectoryDatabaseHandler::destroyDatabase() 0095 { 0096 SqlStorage *db = CollectionManager::instance()->sqlStorage(); 0097 QStringList result = db->query( "DROP TABLE IF EXISTS opmldirectory_tracks;" ); 0098 result = db->query( "DROP TABLE IF EXISTS opmldirectory_albums;" ); 0099 result = db->query( "DROP TABLE IF EXISTS opmldirectory_artists;" ); 0100 result = db->query( "DROP TABLE IF EXISTS opmldirectory_genre;"); 0101 0102 result = db->query( "DROP INDEX IF EXISTS opmldirectory_tracks_id;"); 0103 result = db->query( "DROP INDEX IF EXISTS opmldirectory_tracks_artist_id;"); 0104 result = db->query( "DROP INDEX IF EXISTS opmldirectory_album_name;"); 0105 } 0106 0107 int 0108 OpmlDirectoryDatabaseHandler::insertTrack( ServiceTrackPtr track ) 0109 { 0110 SqlStorage *sqlDb = CollectionManager::instance()->sqlStorage(); 0111 QString queryString = "INSERT INTO opmldirectory_tracks ( name, track_number, length, " 0112 "album_id, artist_id, preview_url ) VALUES ( '" 0113 + sqlDb->escape( track->name() ) + "', " 0114 + QString::number( 0 ) + ", " 0115 + QString::number( 0 ) + ", " 0116 + QString::number( track->albumId() ) + ", " 0117 + QString::number( 1 ) + ", '" 0118 + sqlDb->escape( track->uidUrl() ) + "' );"; 0119 0120 int trackId = sqlDb->insert( queryString, NULL ); 0121 0122 return trackId; 0123 } 0124 0125 int 0126 OpmlDirectoryDatabaseHandler::insertAlbum( ServiceAlbumPtr album ) 0127 { 0128 QString queryString; 0129 SqlStorage *sqlDb = CollectionManager::instance()->sqlStorage(); 0130 queryString = "INSERT INTO opmldirectory_albums ( name, description, " 0131 "artist_id ) VALUES ( '" 0132 + sqlDb->escape( album->name() ) + "', '" 0133 + sqlDb->escape( album->description() ) + "', " 0134 + QString::number( 1 ) + ");"; 0135 0136 int newAlbumId = sqlDb->insert( queryString, QString() ); 0137 0138 //create a dummy genre for this album 0139 queryString = "INSERT INTO opmldirectory_genre ( album_id, name " 0140 ") VALUES ( " + QString::number ( newAlbumId ) + ", 'dummy');"; 0141 0142 return sqlDb->insert( queryString, 0 ); 0143 } 0144 0145 void 0146 OpmlDirectoryDatabaseHandler::begin() 0147 { 0148 CollectionManager *mgr = CollectionManager::instance(); 0149 QString queryString = "BEGIN;"; 0150 mgr->sqlStorage()->query( queryString ); 0151 } 0152 0153 void 0154 OpmlDirectoryDatabaseHandler::commit() 0155 { 0156 CollectionManager *mgr = CollectionManager::instance(); 0157 QString queryString = "COMMIT;"; 0158 mgr->sqlStorage()->query( queryString ); 0159 } 0160