Fixed bug with directory scanning
authorNikolay Tischenko <niktischenko@gmail.com>
Fri, 19 Nov 2010 17:07:46 +0000 (23:07 +0600)
committerNikolay Tischenko <niktischenko@gmail.com>
Fri, 19 Nov 2010 17:07:46 +0000 (23:07 +0600)
Added ability to delete tracks from favorites

resources/someplayer_ru.ts
src/dbstorage.cpp
src/dbstorage.h
src/library.cpp
src/library.h
src/libraryform.cpp
src/libraryform.h
src/mediascanner.cpp

index 2f47f39..71563fd 100644 (file)
         <translation>Библиотека</translation>
     </message>
     <message>
-        <location filename="../src/libraryform.cpp" line="173"/>
+        <location filename="../src/libraryform.cpp" line="174"/>
         <source>Artists</source>
         <translation>Исполнители</translation>
     </message>
     <message>
-        <location filename="../src/libraryform.cpp" line="200"/>
+        <location filename="../src/libraryform.cpp" line="201"/>
         <source>Dynamic playlists</source>
         <translation>Динамические плейлисты</translation>
     </message>
     <message>
-        <location filename="../src/libraryform.cpp" line="224"/>
-        <location filename="../src/libraryform.cpp" line="399"/>
+        <location filename="../src/libraryform.cpp" line="225"/>
+        <location filename="../src/libraryform.cpp" line="404"/>
         <source>Albums by &quot;%1&quot;</source>
         <translation>Альбомы &quot;%1&quot;</translation>
     </message>
     <message>
-        <location filename="../src/libraryform.cpp" line="236"/>
+        <location filename="../src/libraryform.cpp" line="237"/>
         <source>Tracks from &quot;%1&quot; by &quot;%2&quot;</source>
         <translation>Треки из &quot;%1&quot; от &quot;%2&quot;</translation>
     </message>
     <message>
-        <location filename="../src/libraryform.cpp" line="246"/>
+        <location filename="../src/libraryform.cpp" line="247"/>
         <source>All tracks by &quot;%1&quot;</source>
         <translation>Все треки &quot;%1&quot;</translation>
     </message>
     <message>
-        <location filename="../src/libraryform.cpp" line="263"/>
+        <location filename="../src/libraryform.cpp" line="264"/>
         <source>Tracks in playlist &quot;%1&quot;</source>
         <translation>Треки в плейлисте &quot;%1&quot;</translation>
     </message>
     <message>
-        <location filename="../src/libraryform.cpp" line="421"/>
+        <location filename="../src/libraryform.cpp" line="426"/>
         <source>Playlists</source>
         <translation>Плейлисты</translation>
     </message>
     <message>
-        <location filename="../src/libraryform.cpp" line="782"/>
+        <location filename="../src/libraryform.cpp" line="798"/>
         <source>Search in library</source>
         <translation>Поиск в библиотеке</translation>
     </message>
     <message>
         <location filename="../src/ui/settingsform.ui" line="347"/>
         <source>Show track lenght in library view:</source>
-        <translation>Показыать длину трека в библиотеке:</translation>
+        <translation>Показывать длину трека в библиотеке:</translation>
     </message>
     <message>
         <location filename="../src/ui/settingsform.ui" line="390"/>
index a9b811d..2b9d03f 100644 (file)
@@ -161,6 +161,9 @@ void DbStorage::_prepare_queries() {
 
        _remove_directory_query = new QSqlQuery(db);
        _remove_directory_query->prepare("DELETE FROM directories WHERE path = :path");
+
+       _remove_track_from_favorites_query = new QSqlQuery(db);
+       _remove_track_from_favorites_query->prepare("DELETE FROM favorites WHERE track_id in (SELECT id FROM tracks WHERE source = :source)");
 }
 
 void DbStorage::_create_database_structure() {
@@ -243,6 +246,7 @@ DbStorage::~DbStorage() {
        delete _remove_track_query;
        delete _remove_directory_query;
        delete _remove_tracks_from_query;
+       delete _remove_track_from_favorites_query;
        db.close();
 }
 
@@ -653,3 +657,9 @@ void DbStorage::checkTracksFrom(QString path) {
                _cleanup();
        }
 }
+
+void DbStorage::removeFromFavorites(Track track) {
+       QSqlQuery *query = _remove_track_from_favorites_query;
+       query->bindValue(":source", track.source());
+       query->exec();
+}
index 8dfd025..7e7e8e8 100644 (file)
@@ -60,6 +60,7 @@ namespace SomePlayer {
 
                        void removeTrack(Track track);
                        void addToFavorites(Track track);
+                       void removeFromFavorites(Track track);
 
                        void updateTrackCount(Track track);
                        Track updateTrack(Track);
@@ -115,6 +116,7 @@ namespace SomePlayer {
                        QSqlQuery *_remove_empty_albums_query;
                        QSqlQuery *_remove_tracks_from_query;
                        QSqlQuery *_remove_directory_query;
+                       QSqlQuery *_remove_track_from_favorites_query;
                };
        };
 };
index 4518b70..0aeddad 100644 (file)
@@ -228,3 +228,7 @@ void Library::updatePlaylists() {
        }
        emit done();
 }
+
+void Library::removeFromFavorites(Track track) {
+       _library_storage->removeFromFavorites(track);
+}
index b68333e..ed9b2be 100644 (file)
@@ -102,6 +102,7 @@ namespace SomePlayer {
                        void removeTrack(Track);
                        void addTrack(Track);
                        void addToFavorites(Track);
+                       void removeFromFavorites(Track);
                        void updateTrackCount(Track);
                        void updateTrackMetadata(Track);
                        void updatePlaylists();
index 41cd374..ef93660 100644 (file)
@@ -150,6 +150,7 @@ LibraryForm::LibraryForm(Library *lib, QWidget *parent) :
        _top_gradient = ui->topWidget->styleSheet();
        _bottom_gradient = ui->bottomWidget->styleSheet();
        _is_dynamic = false;
+       _is_favorites = false;
        setAttribute(Qt::WA_Maemo5StackedWindow);
        setWindowFlags(Qt::Window | windowFlags());
        ui->addButton->setEnabled(false);
@@ -268,14 +269,18 @@ void LibraryForm::_process_list_click(QModelIndex index) {
                        switch(index.row()) {
                        case 0: //favorites
                                _current_playlist = _lib->getFavorites();
+                               _is_favorites = true;
                                break;
                        case 1: //most played
                                _current_playlist = _lib->getMostPlayed();
+                               _is_favorites = false;
                                break;
                        case 2: //never played
                                _current_playlist = _lib->getNeverPlayed();
+                               _is_favorites = false;
                        case 3: //recently added
                                _current_playlist = _lib->getRecentlyAdded();
+                               _is_favorites = false;
                                break;
                        default:
                                return;
@@ -438,12 +443,21 @@ void LibraryForm::_delete_button() {
                }
                qSort(to_delete);
                int count = to_delete.count();
-               for (int i = count-1; i >= 0; i--) {
-                       _current_playlist.removeTrackAt(to_delete.at(i));
+               if (_is_dynamic && _is_favorites) {
+                       _current_tracks = _lib->getFavorites().tracks();
+                       for (int i = count-1; i >= 0; i--) {
+                               _lib->removeFromFavorites(_current_tracks.at(to_delete.at(i)));
+                       }
+                       _current_playlist = _lib->getFavorites();
+                       _current_tracks = _current_playlist.tracks();
+               } else {
+                       for (int i = count-1; i >= 0; i--) {
+                               _current_playlist.removeTrackAt(to_delete.at(i));
+                       }
+                       _current_tracks = _current_playlist.tracks();
+                       _lib->savePlaylist(_current_playlist);
+                       emit refreshPlayer();
                }
-               _current_tracks = _current_playlist.tracks();
-               _lib->savePlaylist(_current_playlist);
-               emit refreshPlayer();
                __fill_model_tracks(_model, _current_tracks, _icons_theme);
                ui->listView->setColumnWidth(0, 70);
        } else if (_state == STATE_PLAYLIST) {
@@ -566,7 +580,8 @@ void LibraryForm::_toggle_select_all_button() {
                ui->selectAllButton->setIcon(QIcon(":/icons/"+_icons_theme+"/deselect_all.png"));
                ui->addButton->setIcon(QIcon(":/icons/"+_icons_theme+"/add.png"));
                ui->addButton->setEnabled(true);
-               if (_state == STATE_PLAYLIST || (_state == STATE_PLAYLIST_TRACK && !_is_dynamic)) {
+               if (_state == STATE_PLAYLIST || (_state == STATE_PLAYLIST_TRACK && !_is_dynamic)
+                       || (_state == STATE_PLAYLIST_TRACK && _is_favorites)) {
                        ui->deleteButton->setEnabled(true);
                        ui->deleteButton->setIcon(QIcon(":/icons/"+_icons_theme+"/delete.png"));
                }
@@ -745,7 +760,8 @@ void LibraryForm::_process_selection(QItemSelection selected, QItemSelection des
        if (ui->listView->selectionModel()->selectedRows().count() > 0) {
                ui->addButton->setEnabled(true);
                ui->addButton->setIcon(QIcon(":/icons/"+_icons_theme+"/add.png"));
-               if (_state == STATE_PLAYLIST || (_state == STATE_PLAYLIST_TRACK && !_is_dynamic)) {
+               if (_state == STATE_PLAYLIST || (_state == STATE_PLAYLIST_TRACK && !_is_dynamic)
+                       || (_state == STATE_PLAYLIST_TRACK && _is_favorites)) {
                        ui->deleteButton->setEnabled(true);
                        ui->deleteButton->setIcon(QIcon(":/icons/"+_icons_theme+"/delete.png"));
                }
index 9c5b423..1483f39 100644 (file)
@@ -85,6 +85,7 @@ private:
        QStandardItemModel *_model;
        LibraryFormListState _state;
        bool _is_dynamic; // workaround
+        bool _is_favorites; // workaround
        QString _current_artist;
        QString _current_album;
        Playlist _current_playlist;
index 4f93a37..6a6390c 100644 (file)
@@ -35,7 +35,6 @@ void MediaScanner::run() {
                return;
        _foundMedia.clear();
        _scan_directory(_dir);
-       _foundMedia = _scan_directory(_dir);
        emit scanFinish(_foundMedia);
        _stopped = true;
 }
@@ -46,8 +45,7 @@ QStringList MediaScanner::singleScan(QString path) {
 }
 
 QStringList MediaScanner::_scan_directory(QDir dir) {
-       _foundMedia.clear();
-       QFileInfoList items = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
+       QFileInfoList items = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot | QDir::Hidden);
        foreach (QFileInfo info, items) {
                if (info.isDir()) {
                        QDir ndir(info.absoluteFilePath());