From 8caab715513ce425d105aff54d59f977df9e0543 Mon Sep 17 00:00:00 2001 From: Nikolay Tischenko Date: Thu, 14 Oct 2010 00:18:49 +0700 Subject: [PATCH] Removed Id from Track class, adapted library --- src/dbstorage.cpp | 112 +++++++++++++++++++++++++-------------------------- src/dbstorage.h | 3 +- src/filestorage.cpp | 2 +- src/library.cpp | 5 +-- src/playerform.cpp | 2 +- src/tagresolver.cpp | 4 +- src/track.cpp | 11 +---- src/track.h | 4 +- 8 files changed, 62 insertions(+), 81 deletions(-) diff --git a/src/dbstorage.cpp b/src/dbstorage.cpp index 5d4c356..a739007 100644 --- a/src/dbstorage.cpp +++ b/src/dbstorage.cpp @@ -84,12 +84,6 @@ void DbStorage::_prepare_queries() { _get_track_count = new QSqlQuery(db); _get_track_count->prepare("SELECT count from tracks WHERE id = :id"); - _get_track_by_source_query = new QSqlQuery(db); - _get_track_by_source_query->prepare("SELECT track_id AS id, title, artist, album.name AS album, source, count, length FROM " - "(SELECT tracks.id AS track_id, artist.name AS artist, title, count, tracks.album_id, length FROM " - "tracks JOIN artist ON tracks.artist_id = artist.id AND source = :source) " - "JOIN album ON album_id = album.id LIMIT 1"); - _get_tracks_by_pattern_query = new QSqlQuery(db); _get_tracks_by_pattern_query->prepare("SELECT id, title, artist, album, source, count, length, year FROM " "entire WHERE " @@ -98,15 +92,15 @@ void DbStorage::_prepare_queries() { "artist_uname LIKE (SELECT '%' || :partist || '%') " "ORDER BY artist_uname, year"); + _get_track_id_by_source_query = new QSqlQuery(db); + _get_track_id_by_source_query->prepare("SELECT id FROM tracks WHERE source = :source"); + _check_artist_query = new QSqlQuery(db); _check_artist_query->prepare("SELECT id FROM artist WHERE uname = :uname"); _check_album_query = new QSqlQuery(db); _check_album_query->prepare("SELECT id FROM album WHERE uname = :uname AND artist_id = :artist_id"); - _check_track_query = new QSqlQuery(db); - _check_track_query->prepare("SELECT id FROM tracks WHERE source = :source"); - _insert_artist_query = new QSqlQuery(db); _insert_artist_query->prepare("INSERT INTO artist (name, uname) values (:name, :uname)"); @@ -186,11 +180,10 @@ DbStorage::~DbStorage() { delete _get_never_played_query; delete _get_recently_added_query; delete _get_tracks_for_album_query; - delete _get_track_by_source_query; delete _get_tracks_by_pattern_query; delete _check_album_query; delete _check_artist_query; - delete _check_track_query; + delete _get_track_id_by_source_query; delete _insert_album_query; delete _insert_artist_query; delete _insert_date_query; @@ -239,13 +232,12 @@ QList DbStorage::getTracksForAlbum(QString album, QString artist) { query->exec(); while (query->next()) { - int id = query->value(0).toInt(); QString title = query->value(1).toString(); QString source = query->value(2).toString(); int count = query->value(3).toInt(); int length = query->value(4).toInt(); TrackMetadata meta (title, artist, album, length); - Track track(id, meta, source); + Track track(meta, source); track.setCount(count); tracks.append(track); } @@ -258,7 +250,6 @@ Playlist DbStorage::getFavorites() { QSqlQuery *query = _get_favorites_query; query->exec(); while(query->next()) { - int id = query->value(0).toInt(); QString title = query->value(1).toString(); QString artist = query->value(2).toString(); QString album = query->value(3).toString(); @@ -266,7 +257,7 @@ Playlist DbStorage::getFavorites() { int count = query->value(5).toInt(); int length = query->value(6).toInt(); TrackMetadata meta(title, artist, album, length); - Track track(id, meta, source); + Track track(meta, source); track.setCount(count); playlist.addTrack(track); playlist.setName("Favorites"); @@ -280,7 +271,6 @@ Playlist DbStorage::getMostPlayed() { query->bindValue(":max", _DYNAMIC_PLAYLIST_MAX_COUNT_); query->exec(); while (query->next()) { - int id = query->value(0).toInt(); QString title = query->value(1).toString(); QString artist = query->value(2).toString(); QString album = query->value(3).toString(); @@ -288,7 +278,7 @@ Playlist DbStorage::getMostPlayed() { int count = query->value(5).toInt(); int length = query->value(6).toInt(); TrackMetadata meta(title, artist, album, length); - Track track(id, meta, source); + Track track(meta, source); track.setCount(count); playlist.addTrack(track); playlist.setName("Most popular"); @@ -302,7 +292,6 @@ Playlist DbStorage::getNeverPlayed() { query->bindValue(":max", _DYNAMIC_PLAYLIST_MAX_COUNT_); query->exec(); while (query->next()) { - int id = query->value(0).toInt(); QString title = query->value(1).toString(); QString artist = query->value(2).toString(); QString album = query->value(3).toString(); @@ -310,7 +299,7 @@ Playlist DbStorage::getNeverPlayed() { int count = query->value(5).toInt(); int length = query->value(6).toInt(); TrackMetadata meta(title, artist, album, length); - Track track(id, meta, source); + Track track(meta, source); track.setCount(count); playlist.addTrack(track); playlist.setName("Never played"); @@ -324,7 +313,6 @@ Playlist DbStorage::getRecentlyAdded() { query->bindValue(":max", _DYNAMIC_PLAYLIST_MAX_COUNT_); query->exec(); while (query->next()) { - int id = query->value(0).toInt(); QString title = query->value(1).toString(); QString artist = query->value(2).toString(); QString album = query->value(3).toString(); @@ -332,7 +320,7 @@ Playlist DbStorage::getRecentlyAdded() { int count = query->value(5).toInt(); int length = query->value(6).toInt(); TrackMetadata meta(title, artist, album, length); - Track track(id, meta, source); + Track track(meta, source); track.setCount(count); playlist.addTrack(track); playlist.setName("Recently added"); @@ -341,17 +329,22 @@ Playlist DbStorage::getRecentlyAdded() { } void DbStorage::removeTrack(Track track) { - int id = track.id(); - QSqlQuery *query = new QSqlQuery(db); - query->prepare("DELETE FROM tracks WHERE id = :id;"); - query->bindValue(":id", id); - query->exec(); - query->prepare("DELETE FROM favorites WHERE track_id = :id;"); - query->bindValue(":id", id); - query->exec(); - query->prepare("DELETE FROM adding_date WHERE id = :id;"); - query->bindValue(":id", id); + QSqlQuery *query = _get_track_id_by_source_query; + query->bindValue(":source", track.source()); query->exec(); + if (query->next()) { + int id = query->value(0).toInt(); + query = new QSqlQuery(db); + query->prepare("DELETE FROM tracks WHERE id = :id;"); + query->bindValue(":id", id); + query->exec(); + query->prepare("DELETE FROM favorites WHERE track_id = :id;"); + query->bindValue(":id", id); + query->exec(); + query->prepare("DELETE FROM adding_date WHERE id = :id;"); + query->bindValue(":id", id); + query->exec(); + } } void DbStorage::addTrack(Track track) { @@ -366,7 +359,7 @@ void DbStorage::addTrack(Track track) { //big bang return; } - QSqlQuery *query = _check_track_query; + QSqlQuery *query = _get_track_id_by_source_query; query->bindValue(":source", source); query->exec(); if (query->next()) { @@ -382,7 +375,7 @@ void DbStorage::addTrack(Track track) { query->bindValue(":length", track.metadata().length()); if (query->exec()) { //ok - query = _check_track_query; + query = _get_track_id_by_source_query; query->bindValue(":source", source); query->exec(); if (query->next()) { @@ -403,43 +396,47 @@ void DbStorage::addTrack(Track track) { } void DbStorage::addToFavorites(Track track) { - QSqlQuery *query = _insert_favorites_query; - query->bindValue(":track_id", track.id()); + QSqlQuery *query = _get_track_id_by_source_query; + query->bindValue(":source", track.source()); query->exec(); + if (query->next()) { + int id = query->value(0).toInt(); + query = _insert_favorites_query; + query->bindValue(":track_id", id); + query->exec(); + } } void DbStorage::updateTrackCount(Track track) { - QSqlQuery *query = _get_track_count; - query->bindValue(":id", track.id()); + QSqlQuery *query = _get_track_id_by_source_query; + query->bindValue(":source", track.source()); query->exec(); if (query->next()) { - int count = query->value(0).toInt(); - query = _update_track_count_query; - query->bindValue(":count", count+1); - query->bindValue(":id", track.id()); + int id = query->value(0).toInt(); + query = _get_track_count; + query->bindValue(":id", id); query->exec(); + if (query->next()) { + int count = query->value(0).toInt(); + query = _update_track_count_query; + query->bindValue(":count", count+1); + query->bindValue(":id", id); + query->exec(); + } } } Track DbStorage::updateTrack(Track track) { - QSqlQuery *query = _remove_track_query; - query->bindValue(":id", track.id()); - addTrack(track); - query = _get_track_by_source_query; + QSqlQuery *query = _get_track_id_by_source_query; query->bindValue(":source", track.source()); query->exec(); - if (query->next()) { + if (query->next()) { // found track in library int id = query->value(0).toInt(); - QString title = query->value(1).toString(); - QString artist = query->value(2).toString(); - QString album = query->value(3).toString(); - QString source = query->value(4).toString(); - int count = query->value(5).toInt(); - int length = query->value(6).toInt(); - TrackMetadata meta(title, artist, album, length); - Track ntrack(id, meta, source); - ntrack.setCount(count); - return ntrack; + qWarning() << "found " << id; + query = _remove_track_query; + query->bindValue(":id", id); + query->exec(); + addTrack(track); } return track; } @@ -496,7 +493,6 @@ QList DbStorage::search(QString pattern) { query->exec(); // id, title, artist, album, source, count, length, year while (query->next()) { - int id = query->value(0).toInt(); QString title = query->value(1).toString(); QString artist = query->value(2).toString(); QString album = query->value(3).toString(); @@ -506,7 +502,7 @@ QList DbStorage::search(QString pattern) { int year = query->value(7).toInt(); TrackMetadata meta(title, artist, album, length); meta.setYear(year); - Track track(id, meta, source); + Track track(meta, source); track.setCount(count); found.append(track); } diff --git a/src/dbstorage.h b/src/dbstorage.h index e6c5eb5..db55d93 100644 --- a/src/dbstorage.h +++ b/src/dbstorage.h @@ -78,12 +78,11 @@ namespace SomePlayer { QSqlQuery *_get_never_played_query; QSqlQuery *_get_recently_added_query; QSqlQuery *_get_track_count; - QSqlQuery *_get_track_by_source_query; QSqlQuery *_get_tracks_by_pattern_query; + QSqlQuery *_get_track_id_by_source_query; QSqlQuery *_check_artist_query; QSqlQuery *_check_album_query; - QSqlQuery *_check_track_query; QSqlQuery *_insert_artist_query; QSqlQuery *_insert_album_query; diff --git a/src/filestorage.cpp b/src/filestorage.cpp index c55a9b1..3d46f0a 100644 --- a/src/filestorage.cpp +++ b/src/filestorage.cpp @@ -75,7 +75,7 @@ Playlist FileStorage::getPlaylist(QString name) { basource.append(elocation.text()); QString source = QUrl::fromEncoded(basource).toLocalFile(); TrackMetadata meta(title, artist, album, duration.toInt()/1000); - Track track(0, meta, source); + Track track(meta, source); playlist.addTrack(track); } } diff --git a/src/library.cpp b/src/library.cpp index 77e6887..ffe1580 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -144,10 +144,7 @@ void Library::_scanned(QStringList files) { } void Library::updateTrackMetadata(Track track) { - Track ntrack = track; - if (track.id() > 0) { - ntrack = _library_storage->updateTrack(track); - } + Track ntrack = _library_storage->updateTrack(track); // update all playlists QList playlists = getPlaylistsNames(); foreach (QString name, playlists) { diff --git a/src/playerform.cpp b/src/playerform.cpp index 24e3b8e..fd41832 100644 --- a/src/playerform.cpp +++ b/src/playerform.cpp @@ -543,7 +543,7 @@ void PlayerForm::checkGradient() { void PlayerForm::play(Track track) { reload(true); int id = _current_playlist.tracks().indexOf(track); - if (id > 0) { + if (id >= 0) { _player->setTrackId(id); _player->play(); } diff --git a/src/tagresolver.cpp b/src/tagresolver.cpp index fef54e4..b4f90e1 100644 --- a/src/tagresolver.cpp +++ b/src/tagresolver.cpp @@ -44,7 +44,7 @@ void TagResolver::decode(QStringList files) { QString::fromStdWString(tag->album().toWString()), properties->length()); meta.setYear(tag->year()); - Track track(0, meta, filename); + Track track(meta, filename); emit decoded(track); } } @@ -54,7 +54,7 @@ void TagResolver::decode(QStringList files) { QFileInfo fi(filename); meta.setArtist(fi.suffix().toUpper()); meta.setTitle(fi.baseName()); - Track track(0, meta, filename); + Track track(meta, filename); emit decoded(track); } } diff --git a/src/track.cpp b/src/track.cpp index 807f156..50f5315 100644 --- a/src/track.cpp +++ b/src/track.cpp @@ -26,8 +26,7 @@ using namespace SomePlayer::DataObjects; Track::Track() : QObject() { } -Track::Track(int id, TrackMetadata metadata, QString source) : QObject() { - _id = id; +Track::Track(TrackMetadata metadata, QString source) : QObject() { _metadata = metadata; if (_metadata.title() == _UNKNOWN_TRACK_) { QFileInfo info(source); @@ -40,7 +39,6 @@ Track::Track(int id, TrackMetadata metadata, QString source) : QObject() { Track::Track(const Track &track) : QObject() { this->_metadata = track.metadata(); this->_source = track.source(); - this->_id = track._id; this->_count = track._count; } @@ -52,7 +50,6 @@ Track::Track(QString source) :QObject() { foo << source; _resolver->decode(foo); _count = 0; - _id = -1; } TrackMetadata Track::metadata() const { @@ -67,10 +64,6 @@ QString Track::source() const { return _source; } -int Track::id() const { - return _id; -} - void Track::setSource(QString source) { _source = source; } @@ -84,14 +77,12 @@ void Track::setCount(int count) { } void Track::decoded(Track track) { - _id = track.id(); _source = track.source(); _metadata = track.metadata(); delete _resolver; } Track &Track::operator =(const Track &track) { - _id = track.id(); _source = track.source(); _metadata = track.metadata(); _count = track._count; diff --git a/src/track.h b/src/track.h index 5a81d90..cd9c307 100644 --- a/src/track.h +++ b/src/track.h @@ -36,14 +36,13 @@ namespace SomePlayer { public: Track(); Track(const Track &track); - Track(int id, TrackMetadata metadata, QString source); + Track(TrackMetadata metadata, QString source); Track(QString source); ~Track(); Track &operator=(const Track &track); TrackMetadata metadata() const; //read-write void setMetadata(TrackMetadata meta); QString source() const; - int id() const; void setSource (QString source); int count() const; //count of plays void setCount(int count); //for restoring from database and counting from player @@ -53,7 +52,6 @@ namespace SomePlayer { TrackMetadata _metadata; QString _source; int _count; - int _id; TagResolver *_resolver; private slots: void decoded(Track); -- 1.7.9.5