<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 "%1"</source>
<translation>Альбомы "%1"</translation>
</message>
<message>
- <location filename="../src/libraryform.cpp" line="236"/>
+ <location filename="../src/libraryform.cpp" line="237"/>
<source>Tracks from "%1" by "%2"</source>
<translation>Треки из "%1" от "%2"</translation>
</message>
<message>
- <location filename="../src/libraryform.cpp" line="246"/>
+ <location filename="../src/libraryform.cpp" line="247"/>
<source>All tracks by "%1"</source>
<translation>Все треки "%1"</translation>
</message>
<message>
- <location filename="../src/libraryform.cpp" line="263"/>
+ <location filename="../src/libraryform.cpp" line="264"/>
<source>Tracks in playlist "%1"</source>
<translation>Треки в плейлисте "%1"</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"/>
_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() {
delete _remove_track_query;
delete _remove_directory_query;
delete _remove_tracks_from_query;
+ delete _remove_track_from_favorites_query;
db.close();
}
_cleanup();
}
}
+
+void DbStorage::removeFromFavorites(Track track) {
+ QSqlQuery *query = _remove_track_from_favorites_query;
+ query->bindValue(":source", track.source());
+ query->exec();
+}
void removeTrack(Track track);
void addToFavorites(Track track);
+ void removeFromFavorites(Track track);
void updateTrackCount(Track track);
Track updateTrack(Track);
QSqlQuery *_remove_empty_albums_query;
QSqlQuery *_remove_tracks_from_query;
QSqlQuery *_remove_directory_query;
+ QSqlQuery *_remove_track_from_favorites_query;
};
};
};
}
emit done();
}
+
+void Library::removeFromFavorites(Track track) {
+ _library_storage->removeFromFavorites(track);
+}
void removeTrack(Track);
void addTrack(Track);
void addToFavorites(Track);
+ void removeFromFavorites(Track);
void updateTrackCount(Track);
void updateTrackMetadata(Track);
void updatePlaylists();
_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);
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;
}
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) {
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"));
}
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"));
}
QStandardItemModel *_model;
LibraryFormListState _state;
bool _is_dynamic; // workaround
+ bool _is_favorites; // workaround
QString _current_artist;
QString _current_album;
Playlist _current_playlist;
return;
_foundMedia.clear();
_scan_directory(_dir);
- _foundMedia = _scan_directory(_dir);
emit scanFinish(_foundMedia);
_stopped = true;
}
}
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());