void Metadata::dumpToDatabase() { QString sqldir = m_filename.section('/', 0, -2); QString sqlfilename = m_filename.section('/', -1); checkEmptyFields(); MSqlQuery query(MSqlQuery::InitCon()); if (sqldir.isEmpty()) { m_directoryid = 0; } else if (m_directoryid < 0) { // Load the directory id query.prepare("SELECT directory_id FROM music_directories " "WHERE path = :DIRECTORY ;"); query.bindValue(":DIRECTORY", sqldir); if (!query.exec() || !query.isActive()) { MythDB::DBError("music select directory id", query); return; } if (query.next()) { m_directoryid = query.value(0).toInt(); } else { query.prepare("INSERT INTO music_directories (path) VALUES (:DIRECTORY);"); query.bindValue(":DIRECTORY", sqldir); if (!query.exec() || !query.isActive() || query.numRowsAffected() <= 0) { MythDB::DBError("music insert directory", query); return; } m_directoryid = query.lastInsertId().toInt(); } } if (m_artistid < 0) { // Load the artist id query.prepare("SELECT artist_id FROM music_artists " "WHERE artist_name = :ARTIST ;"); query.bindValue(":ARTIST", m_artist); if (!query.exec() || !query.isActive()) { MythDB::DBError("music select artist id", query); return; } if (query.next()) { m_artistid = query.value(0).toInt(); } else { query.prepare("INSERT INTO music_artists (artist_name) VALUES (:ARTIST);"); query.bindValue(":ARTIST", m_artist); if (!query.exec() || !query.isActive() || query.numRowsAffected() <= 0) { MythDB::DBError("music insert artist", query); return; } m_artistid = query.lastInsertId().toInt(); } } // Compilation Artist if (m_artist == m_compilation_artist) { m_compartistid = m_artistid; } else { query.prepare("SELECT artist_id FROM music_artists " "WHERE artist_name = :ARTIST ;"); query.bindValue(":ARTIST", m_compilation_artist); if (!query.exec() || !query.isActive()) { MythDB::DBError("music select compilation artist id", query); return; } if (query.next()) { m_compartistid = query.value(0).toInt(); } else { query.prepare("INSERT INTO music_artists (artist_name) VALUES (:ARTIST);"); query.bindValue(":ARTIST", m_compilation_artist); if (!query.exec() || !query.isActive() || query.numRowsAffected() <= 0) { MythDB::DBError("music insert compilation artist", query); return; } m_compartistid = query.lastInsertId().toInt(); } } // Album if (m_albumid < 0) { query.prepare("SELECT album_id FROM music_albums " "WHERE artist_id = :COMP_ARTIST_ID " " AND album_name = :ALBUM ;"); query.bindValue(":COMP_ARTIST_ID", m_compartistid); query.bindValue(":ALBUM", m_album); if (!query.exec() || !query.isActive()) { MythDB::DBError("music select album id", query); return; } if (query.next()) { m_albumid = query.value(0).toInt(); } else { query.prepare("INSERT INTO music_albums (artist_id, album_name, compilation, year) VALUES (:COMP_ARTIST_ID, :ALBUM, :COMPILATION, :YEAR);"); query.bindValue(":COMP_ARTIST_ID", m_compartistid); query.bindValue(":ALBUM", m_album); query.bindValue(":COMPILATION", m_compilation); query.bindValue(":YEAR", m_year); if (!query.exec() || !query.isActive() || query.numRowsAffected() <= 0) { MythDB::DBError("music insert album", query); return; } m_albumid = query.lastInsertId().toInt(); } } if (m_genreid < 0) { // Genres query.prepare("SELECT genre_id FROM music_genres " "WHERE genre = :GENRE ;"); query.bindValue(":GENRE", m_genre); if (!query.exec() || !query.isActive()) { MythDB::DBError("music select genre id", query); return; } if (query.next()) { m_genreid = query.value(0).toInt(); } else { query.prepare("INSERT INTO music_genres (genre) VALUES (:GENRE);"); query.bindValue(":GENRE", m_genre); if (!query.exec() || !query.isActive() || query.numRowsAffected() <= 0) { MythDB::DBError("music insert genre", query); return; } m_genreid = query.lastInsertId().toInt(); } } // We have all the id's now. We can insert it. QString strQuery; if (m_id < 1) { strQuery = "INSERT INTO music_songs ( directory_id," " artist_id, album_id, name, genre_id," " year, track, length, filename," " rating, format, date_entered, date_modified," " numplays, track_count) " "VALUES ( " " :DIRECTORY, " " :ARTIST, :ALBUM, :TITLE, :GENRE," " :YEAR, :TRACKNUM, :LENGTH, :FILENAME," " :RATING, :FORMAT, :DATE_ADD, :DATE_MOD," " :PLAYCOUNT,:TRACKCOUNT );"; } else { strQuery = "UPDATE music_songs SET" " directory_id = :DIRECTORY" ", artist_id = :ARTIST" ", album_id = :ALBUM" ", name = :TITLE" ", genre_id = :GENRE" ", year = :YEAR" ", track = :TRACKNUM" ", length = :LENGTH" ", filename = :FILENAME" ", rating = :RATING" ", format = :FORMAT" ", date_modified = :DATE_MOD " ", numplays = :PLAYCOUNT " ", track_count = :TRACKCOUNT " "WHERE song_id= :ID ;"; } query.prepare(strQuery); query.bindValue(":DIRECTORY", m_directoryid); query.bindValue(":ARTIST", m_artistid); query.bindValue(":ALBUM", m_albumid); query.bindValue(":TITLE", m_title); query.bindValue(":GENRE", m_genreid); query.bindValue(":YEAR", m_year); query.bindValue(":TRACKNUM", m_tracknum); query.bindValue(":LENGTH", m_length); query.bindValue(":FILENAME", sqlfilename); query.bindValue(":RATING", m_rating); query.bindValue(":FORMAT", m_format); query.bindValue(":DATE_MOD", QDateTime::currentDateTime()); query.bindValue(":PLAYCOUNT", m_playcount); if (m_id < 1) query.bindValue(":DATE_ADD", QDateTime::currentDateTime()); else query.bindValue(":ID", m_id); query.bindValue(":TRACKCOUNT", m_trackCount); if (!query.exec()) MythDB::DBError("Metadata::dumpToDatabase - updating music_songs", query); if (m_id < 1 && query.isActive() && 1 == query.numRowsAffected()) m_id = query.lastInsertId().toInt(); // save the albumart to the db if (m_albumArt) m_albumArt->dumpToDatabase(); // make sure the compilation flag is updated query.prepare("UPDATE music_albums SET compilation = :COMPILATION, year = :YEAR " "WHERE music_albums.album_id = :ALBUMID"); query.bindValue(":ALBUMID", m_albumid); query.bindValue(":COMPILATION", m_compilation); query.bindValue(":YEAR", m_year); if (!query.exec() || !query.isActive()) { MythDB::DBError("music compilation update", query); return; } }
void Metadata::dumpToDatabase() { QString sqlfilepath(m_filename); if (!sqlfilepath.contains("://")) { sqlfilepath.remove(0, m_startdir.length()); } QString sqldir = sqlfilepath.section( '/', 0, -2); QString sqlfilename = sqlfilepath.section( '/', -1 ) ; checkEmptyFields(); MSqlQuery query(MSqlQuery::InitCon()); if (sqldir.isEmpty()) { m_directoryid = 0; } else if (m_directoryid < 0) { // Load the directory id query.prepare("SELECT directory_id FROM music_directories " "WHERE path = :DIRECTORY ;"); query.bindValue(":DIRECTORY", sqldir); if (!query.exec() || !query.isActive()) { MythDB::DBError("music select directory id", query); return; } if (query.next()) { m_directoryid = query.value(0).toInt(); } else { query.prepare("INSERT INTO music_directories (path) VALUES (:DIRECTORY);"); query.bindValue(":DIRECTORY", sqldir); if (!query.exec() || !query.isActive() || query.numRowsAffected() <= 0) { MythDB::DBError("music insert directory", query); return; } m_directoryid = query.lastInsertId().toInt(); } } if (m_artistid < 0) { // Load the artist id query.prepare("SELECT artist_id FROM music_artists " "WHERE artist_name = :ARTIST ;"); query.bindValue(":ARTIST", m_artist); if (!query.exec() || !query.isActive()) { MythDB::DBError("music select artist id", query); return; } if (query.next()) { m_artistid = query.value(0).toInt(); } else { query.prepare("INSERT INTO music_artists (artist_name) VALUES (:ARTIST);"); query.bindValue(":ARTIST", m_artist); if (!query.exec() || !query.isActive() || query.numRowsAffected() <= 0) { MythDB::DBError("music insert artist", query); return; } m_artistid = query.lastInsertId().toInt(); } } // Compilation Artist if (m_artist == m_compilation_artist) { m_compartistid = m_artistid; } else { query.prepare("SELECT artist_id FROM music_artists " "WHERE artist_name = :ARTIST ;"); query.bindValue(":ARTIST", m_compilation_artist); if (!query.exec() || !query.isActive()) { MythDB::DBError("music select compilation artist id", query); return; } if (query.next()) { m_compartistid = query.value(0).toInt(); } else { query.prepare("INSERT INTO music_artists (artist_name) VALUES (:ARTIST);"); query.bindValue(":ARTIST", m_compilation_artist); if (!query.exec() || !query.isActive() || query.numRowsAffected() <= 0) { MythDB::DBError("music insert compilation artist", query); return; } m_compartistid = query.lastInsertId().toInt(); } } // Album if (m_albumid < 0) { query.prepare("SELECT album_id FROM music_albums " "WHERE artist_id = :COMP_ARTIST_ID " " AND album_name = :ALBUM ;"); query.bindValue(":COMP_ARTIST_ID", m_compartistid); query.bindValue(":ALBUM", m_album); if (!query.exec() || !query.isActive()) { MythDB::DBError("music select album id", query); return; } if (query.next()) { m_albumid = query.value(0).toInt(); } else { query.prepare("INSERT INTO music_albums (artist_id, album_name, compilation, year) VALUES (:COMP_ARTIST_ID, :ALBUM, :COMPILATION, :YEAR);"); query.bindValue(":COMP_ARTIST_ID", m_compartistid); query.bindValue(":ALBUM", m_album); query.bindValue(":COMPILATION", m_compilation); query.bindValue(":YEAR", m_year); if (!query.exec() || !query.isActive() || query.numRowsAffected() <= 0) { MythDB::DBError("music insert album", query); return; } m_albumid = query.lastInsertId().toInt(); } } if (m_genreid < 0) { // Genres query.prepare("SELECT genre_id FROM music_genres " "WHERE genre = :GENRE ;"); query.bindValue(":GENRE", m_genre); if (!query.exec() || !query.isActive()) { MythDB::DBError("music select genre id", query); return; } if (query.next()) { m_genreid = query.value(0).toInt(); } else { query.prepare("INSERT INTO music_genres (genre) VALUES (:GENRE);"); query.bindValue(":GENRE", m_genre); if (!query.exec() || !query.isActive() || query.numRowsAffected() <= 0) { MythDB::DBError("music insert genre", query); return; } m_genreid = query.lastInsertId().toInt(); } } // We have all the id's now. We can insert it. QString strQuery; if (m_id < 1) { strQuery = "INSERT INTO music_songs ( directory_id," " artist_id, album_id, name, genre_id," " year, track, length, filename," " rating, format, date_entered, date_modified ) " "VALUES ( " " :DIRECTORY, " " :ARTIST, :ALBUM, :TITLE, :GENRE," " :YEAR, :TRACKNUM, :LENGTH, :FILENAME," " :RATING, :FORMAT, :DATE_ADD, :DATE_MOD );"; } else { strQuery = "UPDATE music_songs SET" " directory_id = :DIRECTORY" ", artist_id = :ARTIST" ", album_id = :ALBUM" ", name = :TITLE" ", genre_id = :GENRE" ", year = :YEAR" ", track = :TRACKNUM" ", length = :LENGTH" ", filename = :FILENAME" ", rating = :RATING" ", format = :FORMAT" ", date_modified = :DATE_MOD " "WHERE song_id= :ID ;"; } query.prepare(strQuery); query.bindValue(":DIRECTORY", m_directoryid); query.bindValue(":ARTIST", m_artistid); query.bindValue(":ALBUM", m_albumid); query.bindValue(":TITLE", m_title); query.bindValue(":GENRE", m_genreid); query.bindValue(":YEAR", m_year); query.bindValue(":TRACKNUM", m_tracknum); query.bindValue(":LENGTH", m_length); query.bindValue(":FILENAME", sqlfilename); query.bindValue(":RATING", m_rating); query.bindValue(":FORMAT", m_format); query.bindValue(":DATE_MOD", QDateTime::currentDateTime()); if (m_id < 1) query.bindValue(":DATE_ADD", QDateTime::currentDateTime()); else query.bindValue(":ID", m_id); if (!query.exec()) MythDB::DBError("Metadata::dumpToDatabase - updating music_songs", query); if (m_id < 1 && query.isActive() && 1 == query.numRowsAffected()) m_id = query.lastInsertId().toInt(); if (! m_albumart.empty()) { QList<struct AlbumArtImage>::iterator it; for ( it = m_albumart.begin(); it != m_albumart.end(); ++it ) { query.prepare("SELECT albumart_id FROM music_albumart WHERE " "song_id=:SONGID AND imagetype=:TYPE;"); query.bindValue(":TYPE", (*it).imageType); query.bindValue(":SONGID", m_id); if (query.exec() && query.next()) { int artid = query.value(0).toInt(); query.prepare("UPDATE music_albumart SET " "filename=:FILENAME, imagetype=:TYPE, " "song_id=:SONGID, embedded=:EMBED " "WHERE albumart_id=:ARTID"); query.bindValue(":ARTID", artid); } else { query.prepare("INSERT INTO music_albumart ( filename, " "imagetype, song_id, embedded ) VALUES ( " ":FILENAME, :TYPE, :SONGID, :EMBED );"); } query.bindValue(":FILENAME", (*it).description); query.bindValue(":TYPE", (*it).imageType); query.bindValue(":SONGID", m_id); query.bindValue(":EMBED", 1); if (!query.exec()) MythDB::DBError("Metadata::dumpToDatabase - " "inserting music_albumart", query); } } // make sure the compilation flag is updated query.prepare("UPDATE music_albums SET compilation = :COMPILATION, year = :YEAR " "WHERE music_albums.album_id = :ALBUMID"); query.bindValue(":ALBUMID", m_albumid); query.bindValue(":COMPILATION", m_compilation); query.bindValue(":YEAR", m_year); if (!query.exec() || !query.isActive()) { MythDB::DBError("music compilation update", query); return; } }