1 #include "playlistmanager.h"
5 PlaylistManager::PlaylistManager(QWidget* parent)
6 : parentWidget (parent)
8 metaInformationResolver = new Phonon::MediaObject(parent);
9 connect(metaInformationResolver, SIGNAL(stateChanged(Phonon::State,Phonon::State)),
10 this, SLOT(metaStateChanged(Phonon::State,Phonon::State)));
13 int PlaylistManager::indexOf(const Phonon::MediaSource &s) const
15 for (int i = 0; i < items.size(); ++i)
17 if (items[i].source == s)
23 void PlaylistManager::parseAndAddFolder(const QString &dir, bool recursive)
26 // filters << "*.mp3";
28 QStringList files = QDir (dir).entryList(filters);
33 qDebug () << "Parsing folder " << dir;
35 //settings.setValue("LastFolder", dir);
36 int index = items.size();
37 foreach (QString string, files)
39 if (string == "." || string == "..")
41 QString fname = dir + "/" + string;
46 parseAndAddFolder(fname, true);
49 qDebug () << "Adding: " << fname;
50 items.append(PlaylistItem (PlaylistItem (fname)));
53 metaInformationResolver->setCurrentSource(items.at(index).source);
54 qDebug () << " SIZE: " << items.size ();
55 emit playlistChanged (index);
58 void PlaylistManager::addStringList(const QStringList& list)
60 int index = items.size();
61 foreach (QString string, list)
63 qDebug () << "Adding " << string;
64 items.append(PlaylistItem (string));
67 metaInformationResolver->setCurrentSource(items.at(index).source);
68 emit playlistChanged(index);
71 void PlaylistManager::metaStateChanged(Phonon::State newState, Phonon::State /* oldState */)
73 if (newState == Phonon::ErrorState)
75 // QMessageBox::warning(this, tr("Error opening files"),
76 // metaInformationResolver->errorString());
77 // while (!items.isEmpty() &&
78 // !(items.takeLast().source == metaInformationResolver->currentSource())) {} /* loop */;
79 int index = indexOf (metaInformationResolver->currentSource());
80 if (index >= 0 && items.size () > index - 1)
81 metaInformationResolver->setCurrentSource(items[index + 1].source);
82 qDebug () << "Error for item " << index;
83 /* int index = sources.indexOf(metaInformationResolver->currentSource());
86 sources.removeAt(index);
87 qDebug () << "Removing invalid file in " << index << ": " << metaInformationResolver->currentSource().fileName();
88 if (sources.size() > index)
90 metaInformationResolver->setCurrentSource(sources.at(index));
91 qDebug () << "Setting new info source " << sources.at(index).fileName();
94 // int index = sources.indexOf(metaInformationResolver->currentSource()) + 1;
95 // sources.removeAt(index - 1);
98 // metaInformationResolver->setCurrentSource(sources.at(0));
103 if (newState != Phonon::StoppedState && newState != Phonon::PausedState)
108 if (metaInformationResolver->currentSource().type() == Phonon::MediaSource::Invalid)
110 int index = indexOf (metaInformationResolver->currentSource());
111 qDebug () << "Reading meta info of " << metaInformationResolver->currentSource().fileName() << " " << index;
113 qDebug () << "Index of this source is " << indexOf(metaInformationResolver->currentSource());
115 QMap<QString, QString> metaData = metaInformationResolver->metaData();
117 /* QString title = metaData.value("TITLE");
119 title = metaInformationResolver->currentSource().fileName();
122 title = metaInformationResolver->currentSource().url().toString();*/
126 items[index].artist = metaData.value("ARTIST");
127 items[index].title = metaData.value("TITLE");
128 items[index].album = metaData.value("ALBUM");
129 if (metaData.isEmpty())
130 qDebug () << "Detected to be empty: " << items[index].uri;
132 items[index].playable = true;
133 emit itemUpdated (index);
134 if (index >= 0 && items.size () > index + 1)
135 metaInformationResolver->setCurrentSource(items[index + 1].source);
138 /*QTableWidgetItem *titleItem = new QTableWidgetItem(title);
139 titleItem->setFlags(titleItem->flags() ^ Qt::ItemIsEditable);
140 QTableWidgetItem *artistItem = new QTableWidgetItem(metaData.value("ARTIST"));
141 artistItem->setFlags(artistItem->flags() ^ Qt::ItemIsEditable);
142 QTableWidgetItem *albumItem = new QTableWidgetItem(metaData.value("ALBUM"));
143 albumItem->setFlags(albumItem->flags() ^ Qt::ItemIsEditable);*/
145 /* int currentRow = musicTable->rowCount();
146 musicTable->insertRow(currentRow);
147 musicTable->setItem(currentRow, 0, artistItem);
148 musicTable->setItem(currentRow, 1, titleItem);
149 musicTable->setItem(currentRow, 2, albumItem);*/
152 /* if (musicTable->selectedItems().isEmpty())
154 musicTable->selectRow(0);
155 qDebug () << "Setting current media " + metaInformationResolver->currentSource().fileName();
156 mediaObject->setCurrentSource(metaInformationResolver->currentSource());
159 Phonon::MediaSource source = metaInformationResolver->currentSource();
160 int index = sources.indexOf(metaInformationResolver->currentSource()) + 1;
161 if (sources.size() > index)
163 metaInformationResolver->setCurrentSource(sources.at(index));
167 musicTable->resizeColumnsToContents();
171 void PlaylistManager::savePlaylist(const QString& filenam)
173 QString filename = filenam;
174 if (filename.isEmpty())
176 if (filename.length() < 4 || filename.right(4).toLower() != ".m3u")
181 f.open(QFile::WriteOnly);
182 for (int i = 0; i < items.size(); ++i)
184 f.write (items[i].uri.toAscii());
191 // QMessageBox::critical(this, "Write error", "Could not write playlist file", QMessageBox::Ok);
195 void PlaylistManager::loadPlaylist(const QString& filename)
197 qDebug () << "Attempting to load playlist: " << filename;
199 if (!f.open (QFile::ReadOnly))
201 QString tmp = f.readAll();
203 QStringList lines = tmp.split("\n");
205 foreach (QString l, lines)
207 if (l.isEmpty() || (!QFileInfo (l).exists() && (l.indexOf("http") != 0)))
211 qDebug () << "Load " << l;
212 items.append(PlaylistItem (l));
214 if (!items.isEmpty())
215 metaInformationResolver->setCurrentSource(items.at(0).source);
216 emit playlistChanged (0);
219 void PlaylistManager::clearPlaylist()
222 emit playlistChanged(0);
223 /* while (musicTable->rowCount())
224 musicTable->removeRow(0);
225 mediaObject->clear();*/
228 QStringList PlaylistManager::playlistStrings() const
231 for (int i = 0; i < items.size (); ++i)
233 qDebug () << "Returning playlist " << ret << " SIZE: " << items.size ();
237 void PlaylistManager::removeItem(int i)
240 emit playlistChanged(i);