Autoremoving emty artists and empty albyms
authorNikolay Tischenko <niktischenko@gmail.com>
Wed, 13 Oct 2010 17:51:46 +0000 (00:51 +0700)
committerNikolay Tischenko <niktischenko@gmail.com>
Wed, 13 Oct 2010 17:51:46 +0000 (00:51 +0700)
Refreshing libraryfrom after switching to it

src/dbstorage.cpp
src/dbstorage.h
src/mainwindow.cpp

index a739007..078c21f 100644 (file)
@@ -121,6 +121,20 @@ void DbStorage::_prepare_queries() {
 
        _remove_track_query = new QSqlQuery(db);
        _remove_track_query->prepare("DELETE FROM tracks WHERE id = :id");
+
+       _remove_empty_albums_query = new QSqlQuery(db);
+       _remove_empty_albums_query->prepare("DELETE FROM album WHERE album.id IN "
+                                           "(SELECT id FROM "
+                                           "(SELECT COUNT(tracks.id) AS cnt, album.id FROM "
+                                           "album LEFT OUTER JOIN tracks ON album.id = tracks.album_id "
+                                           "GROUP BY album.id) WHERE cnt = 0)");
+
+       _remove_empty_artists_query = new QSqlQuery(db);
+       _remove_empty_artists_query->prepare("DELETE FROM artist WHERE artist.id IN "
+                                            "(SELECT id FROM "
+                                            "(SELECT COUNT(tracks.id) AS cnt, artist.id FROM "
+                                            "artist LEFT OUTER JOIN tracks ON artist.id = tracks.artist_id "
+                                            "GROUP BY artist.id) WHERE cnt = 0)");
 }
 
 void DbStorage::_create_database_structure() {
@@ -432,11 +446,11 @@ Track DbStorage::updateTrack(Track track) {
        query->exec();
        if (query->next()) { // found track in library
                int id = query->value(0).toInt();
-               qWarning() << "found " << id;
                query = _remove_track_query;
                query->bindValue(":id", id);
                query->exec();
                addTrack(track);
+               _cleanup();
        }
        return track;
 }
@@ -508,3 +522,8 @@ QList<Track> DbStorage::search(QString pattern) {
        }
        return found;
 }
+
+void DbStorage::_cleanup() {
+       _remove_empty_albums_query->exec();
+       _remove_empty_artists_query->exec();
+}
index db55d93..1e1fb8c 100644 (file)
@@ -68,6 +68,8 @@ namespace SomePlayer {
                        int _check_add_artist(QString artist);
                        int _check_add_album(QString album, int artist_id, int year);
 
+                       void _cleanup();
+
                        // queries
                        QSqlQuery *_get_artists_query;
                        QSqlQuery *_get_albums_for_artist_sort_name_query;
@@ -93,6 +95,8 @@ namespace SomePlayer {
                        QSqlQuery *_update_track_count_query;
 
                        QSqlQuery *_remove_track_query;
+                       QSqlQuery *_remove_empty_artists_query;
+                       QSqlQuery *_remove_empty_albums_query;
                };
        };
 };
index ddbca43..1fbec1d 100644 (file)
@@ -129,6 +129,7 @@ void MainWindow::player(bool reread) {
 
 void MainWindow::library() {
        ui->menuBar->setEnabled(true);
+       _library_form->refresh();
        ui->stackedWidget->setCurrentIndex(1);
        setWindowTitle("SomePlayer Library");
        _orientation_changed(); // workaround