X-Git-Url: http://git.maemo.org/git/?p=someplayer;a=blobdiff_plain;f=src%2Ffilestorage.cpp;h=f32f47d49b97d03b399c6731ad2e580d86df4b1a;hp=27df6053ca006b06fe44b1d1288a86cf14e645cb;hb=a33363a44394be6efff8593737eaa53efd9b6c01;hpb=4e6c2c79b2071319631846dd9459234a27f700de diff --git a/src/filestorage.cpp b/src/filestorage.cpp index 27df605..f32f47d 100644 --- a/src/filestorage.cpp +++ b/src/filestorage.cpp @@ -1,9 +1,17 @@ #include "filestorage.h" +#include +#include +#include +#include +#include using namespace SomePlayer::Storage; +using namespace SomePlayer::DataObjects; FileStorage::FileStorage(QString path) { _path_prefix = path; + _meta_regexp.setPattern("#META \\[(\\d+)\\].*::(.+)::,::(.+)::,::(.+)::"); + _path_regexp.setPattern("#PATH (.+)"); } QList FileStorage::getPlaylists() { @@ -11,19 +19,87 @@ QList FileStorage::getPlaylists() { return stub; } +Playlist FileStorage::getPlaylist(QString name) { + QFile playlistFile (_path_prefix+"/"+name+"."+_PLAYLIST_FILE_EXTENSION_); + Playlist playlist; + playlist.setName("Bad playlist"); + if (playlistFile.exists()) { + playlist.setName(name); + playlistFile.open(QFile::ReadOnly); + QTextStream stream(&playlistFile); + QString buffer = stream.readLine(); + int index = 0; + if (buffer.startsWith(_PLAYLIST_SIGNATURE_)) { + while (!stream.atEnd()) { + buffer = stream.readLine(); + if (_meta_regexp.indexIn(buffer) != -1) { + int seconds = _meta_regexp.cap(1).toInt(); + QString artist = _meta_regexp.cap(2); + QString album = _meta_regexp.cap(3); + QString title = _meta_regexp.cap(4); + buffer = stream.readLine(); + if (_path_regexp.indexIn(buffer) != -1) { + QString source = _path_regexp.cap(1); + TrackMetadata meta(title, artist, album, seconds); + Track track(index++, meta, source); + playlist.addTrack(track); + } + } + } + } + } + return playlist; +} + +QStringList FileStorage::getPlaylistsNames() { + QDir directory(_path_prefix); + QDirIterator iterator(directory, QDirIterator::FollowSymlinks); + QStringList playlistNames; + while (iterator.hasNext()) { + QString entry = iterator.next(); + QFileInfo info(entry); + QString suffix = info.suffix().toLower(); + if (suffix == _PLAYLIST_FILE_EXTENSION_) { + playlistNames.append(info.fileName() + .replace(QString(".%1").arg(_PLAYLIST_FILE_EXTENSION_), "", Qt::CaseInsensitive)); + } + } + return playlistNames; +} + void FileStorage::savePlaylist(Playlist playlist) { + QString filename = _path_prefix+playlist.name()+_PLAYLIST_FILE_EXTENSION_; + QFile playlistFile(filename); + if (playlistFile.exists()) { + playlistFile.remove(); + } + QTextStream stream(&playlistFile); + stream << _PLAYLIST_SIGNATURE_ << endl; + const QList &tracks = playlist.tracks(); + foreach (Track track, tracks) { + stream << _PLAYLIST_META_KEYWORD_ << " [" << track.metadata().length() << "],::" << track.metadata().artist() + << "::,::" << track.metadata().album() << "::,::" << track.metadata().title() << "::" << endl; + stream << _PLAYLIST_PATH_KEYWORD_ << " " << track.source() << endl; + } } void FileStorage::removePlaylist(Playlist playlist) { + QString filename = _path_prefix + "/" + playlist.name() + "." + _PLAYLIST_FILE_EXTENSION_; + QFile file(filename); + file.remove(); } void FileStorage::removePlaylist(QString name) { + QString filename = _path_prefix + "/" + name + "." + _PLAYLIST_FILE_EXTENSION_; + QFile file(filename); + file.remove(); } Playlist FileStorage::getCurrentPlaylist() { - Playlist stub; - return stub; + return getPlaylist(_CURRENT_PLAYLIST_NAME_); } void FileStorage::saveCurrentPlaylist(Playlist playlist) { + playlist.setName(_CURRENT_PLAYLIST_NAME_); + savePlaylist(playlist); }