Removed Id from Track class, adapted library
authorNikolay Tischenko <niktischenko@gmail.com>
Wed, 13 Oct 2010 17:18:49 +0000 (00:18 +0700)
committerNikolay Tischenko <niktischenko@gmail.com>
Wed, 13 Oct 2010 17:18:49 +0000 (00:18 +0700)
src/dbstorage.cpp
src/dbstorage.h
src/filestorage.cpp
src/library.cpp
src/playerform.cpp
src/tagresolver.cpp
src/track.cpp
src/track.h

index 5d4c356..a739007 100644 (file)
@@ -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<Track> 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<Track> 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<Track> 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);
        }
index e6c5eb5..db55d93 100644 (file)
@@ -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;
index c55a9b1..3d46f0a 100644 (file)
@@ -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);
                                                        }
                                                }
index 77e6887..ffe1580 100644 (file)
@@ -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<QString> playlists = getPlaylistsNames();
        foreach (QString name, playlists) {
index 24e3b8e..fd41832 100644 (file)
@@ -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();
        }
index fef54e4..b4f90e1 100644 (file)
@@ -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);
                }
        }
index 807f156..50f5315 100644 (file)
@@ -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;
index 5a81d90..cd9c307 100644 (file)
@@ -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);