1 #include "filestorage.h"
3 #include <QDirIterator>
8 using namespace SomePlayer::Storage;
9 using namespace SomePlayer::DataObjects;
11 FileStorage::FileStorage(QString path) {
13 _meta_regexp.setPattern("#META \\[(\\d+)\\].*::(.+)::,::(.+)::,::(.+)::");
14 _path_regexp.setPattern("#PATH (.+)");
17 QList<Playlist> FileStorage::getPlaylists() {
22 Playlist FileStorage::getPlaylist(QString name) {
23 QFile playlistFile (_path_prefix+"/"+name+"."+_PLAYLIST_FILE_EXTENSION_);
25 playlist.setName("Bad playlist");
26 if (playlistFile.exists()) {
27 playlist.setName(name);
28 playlistFile.open(QFile::ReadOnly);
29 QTextStream stream(&playlistFile);
30 QString buffer = stream.readLine();
32 if (buffer.startsWith(_PLAYLIST_SIGNATURE_)) {
33 while (!stream.atEnd()) {
34 buffer = stream.readLine();
35 if (_meta_regexp.indexIn(buffer) != -1) {
36 int seconds = _meta_regexp.cap(1).toInt();
37 QString artist = _meta_regexp.cap(2);
38 QString album = _meta_regexp.cap(3);
39 QString title = _meta_regexp.cap(4);
40 buffer = stream.readLine();
41 if (_path_regexp.indexIn(buffer) != -1) {
42 QString source = _path_regexp.cap(1);
43 TrackMetadata meta(title, artist, album, seconds);
44 Track track(index++, meta, source);
45 playlist.addTrack(track);
54 QStringList FileStorage::getPlaylistsNames() {
55 QDir directory(_path_prefix);
56 QDirIterator iterator(directory, QDirIterator::FollowSymlinks);
57 QStringList playlistNames;
58 while (iterator.hasNext()) {
59 QString entry = iterator.next();
60 QFileInfo info(entry);
61 QString suffix = info.suffix().toLower();
62 if (suffix == _PLAYLIST_FILE_EXTENSION_) {
63 playlistNames.append(info.fileName()
64 .replace(QString(".%1").arg(_PLAYLIST_FILE_EXTENSION_), "", Qt::CaseInsensitive));
70 void FileStorage::savePlaylist(Playlist playlist) {
71 QString filename = _path_prefix+playlist.name()+_PLAYLIST_FILE_EXTENSION_;
72 QFile playlistFile(filename);
73 if (playlistFile.exists()) {
74 playlistFile.remove();
76 QTextStream stream(&playlistFile);
77 stream << _PLAYLIST_SIGNATURE_ << endl;
78 const QList<Track> &tracks = playlist.tracks();
79 foreach (Track track, tracks) {
80 stream << _PLAYLIST_META_KEYWORD_ << " [" << track.metadata().length() << "],::" << track.metadata().artist()
81 << "::,::" << track.metadata().album() << "::,::" << track.metadata().title() << "::" << endl;
82 stream << _PLAYLIST_PATH_KEYWORD_ << " " << track.source() << endl;
86 void FileStorage::removePlaylist(Playlist playlist) {
87 QString filename = _path_prefix + "/" + playlist.name() + "." + _PLAYLIST_FILE_EXTENSION_;
92 void FileStorage::removePlaylist(QString name) {
93 QString filename = _path_prefix + "/" + name + "." + _PLAYLIST_FILE_EXTENSION_;
98 Playlist FileStorage::getCurrentPlaylist() {
99 return getPlaylist(_CURRENT_PLAYLIST_NAME_);
102 void FileStorage::saveCurrentPlaylist(Playlist playlist) {
103 playlist.setName(_CURRENT_PLAYLIST_NAME_);
104 savePlaylist(playlist);