From 00e08012d5b22a9d7fe06cab84eb8e96db2a1f3d Mon Sep 17 00:00:00 2001 From: Nikolay Tischenko Date: Thu, 14 Oct 2010 00:51:46 +0700 Subject: [PATCH 1/1] Autoremoving emty artists and empty albyms Refreshing libraryfrom after switching to it --- src/dbstorage.cpp | 21 ++++++++++++++++++++- src/dbstorage.h | 4 ++++ src/mainwindow.cpp | 1 + 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/dbstorage.cpp b/src/dbstorage.cpp index a739007..078c21f 100644 --- a/src/dbstorage.cpp +++ b/src/dbstorage.cpp @@ -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 DbStorage::search(QString pattern) { } return found; } + +void DbStorage::_cleanup() { + _remove_empty_albums_query->exec(); + _remove_empty_artists_query->exec(); +} diff --git a/src/dbstorage.h b/src/dbstorage.h index db55d93..1e1fb8c 100644 --- a/src/dbstorage.h +++ b/src/dbstorage.h @@ -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; }; }; }; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index ddbca43..1fbec1d 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -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 -- 1.7.9.5