X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Flibrary.cpp;h=4c0047e5c2a808da8dc8d425409de25aff7e2c8b;hb=HEAD;hp=58d7febabc5aa69d2ee5c07beba90ef5ae3a9a94;hpb=f9685f48a0d412250d81fa0ed67054d8978f4a21;p=someplayer diff --git a/src/library.cpp b/src/library.cpp index 58d7feb..4c0047e 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -24,15 +24,17 @@ using namespace SomePlayer::Storage; #include "mediascanner.h" #include +#include Library::Library(QString databasePath, QString playlistsPath) : QObject(0) { _library_storage = new DbStorage(databasePath); _playlist_storage = new FileStorage(playlistsPath); _scanner = new MediaScanner(); _resolver = new TagResolver(this); - connect(_scanner, SIGNAL(scanFinish(QStringList)), _resolver, SLOT(decode(QStringList))); + connect(_scanner, SIGNAL(scanFinish(QStringList)), this, SLOT(_scanned(QStringList))); + connect(_resolver, SIGNAL(started()), this, SIGNAL(started())); connect(_resolver, SIGNAL(done()), this, SIGNAL(done())); - connect(_resolver, SIGNAL(decoded(Track)), this, SLOT(addTrack(Track))); + connect(_resolver, SIGNAL(decoded(Track)), this, SLOT(_decoded(Track))); } Library::~Library() { @@ -40,9 +42,10 @@ Library::~Library() { delete _playlist_storage; } -void Library::addDirectory(QString path) { +void Library::addDirectory(QString path, bool async) { _scanner->init(path); - _scanner->start(QThread::LowestPriority); + if (async) _scanner->start(QThread::LowestPriority); + else _scanner->run(); } void Library::addFile(QString path) { @@ -54,7 +57,7 @@ QList Library::getArtists() { return _library_storage->getArtists(); } -QList Library::getAlbumsForArtist(QString artist) { +QMap Library::getAlbumsForArtist(QString artist) { return _library_storage->getAlbumsForArtist(artist); } @@ -62,6 +65,15 @@ QList Library::getTracksForAlbum(QString album, QString artist) { return _library_storage->getTracksForAlbum(album, artist); } +QList Library::getAllTracksForArtist(QString artist) { + QList all; + QMap albumsmap = getAlbumsForArtist(artist); + QList albums = albumsmap.keys(); + foreach (QString album, albums) { + all.append(getTracksForAlbum(album, artist)); + } + return all; +} // dynamic: @@ -125,6 +137,21 @@ void Library::removePlaylist(QString name) { _playlist_storage->removePlaylist(name); } +void Library::importPlaylist(QString name) { + _playlist_storage->importPlaylist(name); +} + +void Library::importPlaylists(QStringList files) { + foreach (QString name, files) { + importPlaylist(name); + } +} + +void Library::scanAndImportPlaylists(QString dirpath) { + QStringList playlists = _scanner->scanForPlaylists(dirpath); + importPlaylists(playlists); +} + Playlist Library::getCurrentPlaylist() { return _playlist_storage->getCurrentPlaylist(); } @@ -132,3 +159,103 @@ Playlist Library::getCurrentPlaylist() { void Library::saveCurrentPlaylist(const Playlist &playlist) { _playlist_storage->saveCurrentPlaylist(playlist); } + +void Library::_decoded(Track track) { + emit tick(); + addTrack(track); +} + +void Library::_scanned(QStringList files) { + emit allCount(files.count()); + _resolver->decode(files); +} + +void Library::updateTrackMetadata(Track track) { + Track ntrack = _library_storage->updateTrack(track); + // update all playlists + QList playlists = getPlaylistsNames(); + foreach (QString name, playlists) { + Playlist pl = getPlaylist(name); + QList tracks = pl.tracks(); + int pos = tracks.indexOf(ntrack); // comparing using source + tracks.removeOne(ntrack); // comparing using source + tracks.insert(pos, ntrack); + pl.setTracks(tracks); + savePlaylist(pl); + } + _resolver->updateTags(ntrack); +} + +QList Library::searchTracks(QString pattern) { + return _library_storage->searchTracks(pattern); +} + +QList Library::getDirectories() { + return _library_storage->getDirectories(); +} + +int Library::getArtistsCount() { + return _library_storage->getArtistsCount(); +} + +int Library::getAlbumsCount() { + return _library_storage->getAlbumsCount(); +} + +int Library::getTracksCount() { + return _library_storage->getTracksCount(); +} + +void Library::updateAll() { + QList directories = _library_storage->getDirectories(); + updateDirectories(directories); +} + +void Library::updateDirectories(QList directories) { + foreach (QString directory, directories) { + _library_storage->checkTracksFrom(directory); + addDirectory(directory, false); + } +} + +void Library::deleteDirectories(QList directories) { + foreach (QString directory, directories) { + _library_storage->deleteTracksFrom(directory); + } +} + +void Library::updatePlaylists() { + emit started(); + QList playlists = getPlaylistsNames(); + emit allCount(playlists.count()); + foreach (QString name, playlists) { + Playlist playlist = getPlaylist(name); + QList tracks = playlist.tracks(); + QList ntracks; + foreach (const Track &track, tracks) { + if (QFile::exists(track.source())) { + ntracks.append(track); + } + } + playlist.setTracks(ntracks); + savePlaylist(playlist); + emit tick(); + } + emit done(); +} + +void Library::removeFromFavorites(Track track) { + _library_storage->removeFromFavorites(track); +} + +bool Library::isFavorite(Track track) { + return _library_storage->isFavorite(track); +} + +LastPlayed Library::getLastPlayedForCurPlaylist() { + return _playlist_storage->getLastPlayedForCurPlaylist(); +} + +void Library::saveLastPlayedForCurPlaylist(LastPlayed lastplayed) { + _playlist_storage->saveLastPlayedForCurPlaylist(lastplayed); +}