X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Flibrary.cpp;h=58dbf24c91b8f79c824203f97fa02d99ca53efd3;hb=6d75a8b2ab5c0addae2c5baad06687e8f4fc088d;hp=bfd8a1d2359f02f4c87bdf90501e45c8979ca647;hpb=4e6c2c79b2071319631846dd9459234a27f700de;p=someplayer diff --git a/src/library.cpp b/src/library.cpp index bfd8a1d..58dbf24 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -1,11 +1,40 @@ +/* + * SomePlayer - An alternate music player for Maemo 5 + * Copyright (C) 2010 Nikolay (somebody) Tischenko + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + #include "library.h" using namespace SomePlayer::DataObjects; using namespace SomePlayer::Storage; -Library::Library(QString databasePath, QString playlistsPath) { +#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)), 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(_decoded(Track))); } Library::~Library() { @@ -13,19 +42,22 @@ Library::~Library() { delete _playlist_storage; } -void Library::addDirectory(QString path) { - /// TODO: implement this +void Library::addDirectory(QString path, bool async) { + _scanner->init(path); + if (async) _scanner->start(QThread::LowestPriority); + else _scanner->run(); } void Library::addFile(QString path) { - /// TODO: implement this + QStringList files(path); + _resolver->decode(files); } QList Library::getArtists() { return _library_storage->getArtists(); } -QList Library::getAlbumsForArtist(QString artist) { +QMap Library::getAlbumsForArtist(QString artist) { return _library_storage->getAlbumsForArtist(artist); } @@ -57,12 +89,16 @@ void Library::removeTrack(Track track) { _library_storage->removeTrack(track); } +void Library::addTrack(Track track) { + _library_storage->addTrack(track); +} + void Library::addToFavorites(Track track) { _library_storage->addToFavorites(track); } -void Library::updateTrack(Track track) { - _library_storage->updateTrack(track); +void Library::updateTrackCount(Track track) { + _library_storage->updateTrackCount(track); } @@ -72,19 +108,114 @@ QList Library::getPlaylists() { return _playlist_storage->getPlaylists(); } -void Library::savePlaylist(Playlist playlist) { +QStringList Library::getPlaylistsNames() { + return _playlist_storage->getPlaylistsNames(); +} + +Playlist Library::getPlaylist(QString name) { + return _playlist_storage->getPlaylist(name); +} + +void Library::savePlaylist(const Playlist &playlist) { _playlist_storage->savePlaylist(playlist); } -void Library::removePlaylist(Playlist playlist) { +void Library::removePlaylist(const Playlist &playlist) { _playlist_storage->removePlaylist(playlist); } +void Library::removePlaylist(QString name) { + _playlist_storage->removePlaylist(name); +} Playlist Library::getCurrentPlaylist() { return _playlist_storage->getCurrentPlaylist(); } -void Library::saveCurrentPlaylist(Playlist playlist) { +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::search(QString pattern) { + return _library_storage->search(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(); +}