1 #include "playlistmanager.h"
4 PlaylistManager::PlaylistManager(QWidget* parent)
5 : parentWidget (parent)
7 metaInformationResolver = new Phonon::MediaObject(parent);
8 connect(metaInformationResolver, SIGNAL(stateChanged(Phonon::State,Phonon::State)),
9 this, SLOT(metaStateChanged(Phonon::State,Phonon::State)));
12 void PlaylistManager::parseAndAddFolder(const QString &dir, bool recursive)
15 // filters << "*.mp3";
17 QStringList files = QDir (dir).entryList(filters);
22 qDebug () << "Parsing folder " << dir;
24 settings.setValue("LastFolder", dir);
25 int index = items.size();
26 foreach (QString string, files)
28 if (string == "." || string == "..")
30 QString fname = dir + "/" + string;
35 parseAndAddFolder(fname, true);
39 items.append(PlaylistItem (PlaylistItem (fname)));
42 metaInformationResolver->setCurrentSource(items.at(index).source);
45 void PlaylistManager::addStringList(const QStringList& list)
47 int index = items.size();
48 foreach (QString string, list)
50 items.append(PlaylistItem (string));
53 metaInformationResolver->setCurrentSource(items.at(index).source);
56 void PlaylistManager::metaStateChanged(Phonon::State newState, Phonon::State /* oldState */)
58 if (newState == Phonon::ErrorState)
60 // QMessageBox::warning(this, tr("Error opening files"),
61 // metaInformationResolver->errorString());
62 while (!items.isEmpty() &&
63 !(items.takeLast().source == metaInformationResolver->currentSource())) {} /* loop */;
64 qDebug () << items.size();
65 /* int index = sources.indexOf(metaInformationResolver->currentSource());
68 sources.removeAt(index);
69 qDebug () << "Removing invalid file in " << index << ": " << metaInformationResolver->currentSource().fileName();
70 if (sources.size() > index)
72 metaInformationResolver->setCurrentSource(sources.at(index));
73 qDebug () << "Setting new info source " << sources.at(index).fileName();
76 // int index = sources.indexOf(metaInformationResolver->currentSource()) + 1;
77 // sources.removeAt(index - 1);
80 // metaInformationResolver->setCurrentSource(sources.at(0));
85 if (newState != Phonon::StoppedState && newState != Phonon::PausedState)
90 if (metaInformationResolver->currentSource().type() == Phonon::MediaSource::Invalid)
92 qDebug () << "Reading meta info of " << metaInformationResolver->currentSource().fileName() << " " << metaInformationResolver->currentSource().type();
94 qDebug () << "Index of this source is " << items.indexOf(metaInformationResolver->currentSource());
96 QMap<QString, QString> metaData = metaInformationResolver->metaData();
98 QString title = metaData.value("TITLE");
100 title = metaInformationResolver->currentSource().fileName();
103 title = metaInformationResolver->currentSource().url().toString();
105 QTableWidgetItem *titleItem = new QTableWidgetItem(title);
106 titleItem->setFlags(titleItem->flags() ^ Qt::ItemIsEditable);
107 QTableWidgetItem *artistItem = new QTableWidgetItem(metaData.value("ARTIST"));
108 artistItem->setFlags(artistItem->flags() ^ Qt::ItemIsEditable);
109 QTableWidgetItem *albumItem = new QTableWidgetItem(metaData.value("ALBUM"));
110 albumItem->setFlags(albumItem->flags() ^ Qt::ItemIsEditable);
112 /* int currentRow = musicTable->rowCount();
113 musicTable->insertRow(currentRow);
114 musicTable->setItem(currentRow, 0, artistItem);
115 musicTable->setItem(currentRow, 1, titleItem);
116 musicTable->setItem(currentRow, 2, albumItem);*/
119 /* if (musicTable->selectedItems().isEmpty())
121 musicTable->selectRow(0);
122 qDebug () << "Setting current media " + metaInformationResolver->currentSource().fileName();
123 mediaObject->setCurrentSource(metaInformationResolver->currentSource());
126 Phonon::MediaSource source = metaInformationResolver->currentSource();
127 int index = sources.indexOf(metaInformationResolver->currentSource()) + 1;
128 if (sources.size() > index)
130 metaInformationResolver->setCurrentSource(sources.at(index));
134 musicTable->resizeColumnsToContents();
138 void PlaylistManager::savePlaylist(const QString& filename)
140 // QString filename = QFileDialog::getSaveFileName(parentWidget, tr("Please select file name"), "", "Playlist Files (*.m3u)");
141 if (filename.isEmpty())
143 if (filename.length() < 4 || filename.right(4).toLower() != ".m3u")
148 f.open(QFile::WriteOnly);
149 for (int i = 0; i < items.size(); ++i)
151 f.write (items[i].uri.toAscii());
158 // QMessageBox::critical(this, "Write error", "Could not write playlist file", QMessageBox::Ok);
162 void PlaylistManager::loadPlaylist(const QString& filename)
164 // QString filename = QFileDialog::getOpenFileName(parentWidget, tr("Select playlist file to load"), "", "*.m3u");
166 f.open (QFile::ReadOnly);
167 QString tmp = f.readAll();
169 QStringList lines = tmp.split("\n");
171 foreach (QString l, lines)
173 if (l.isEmpty() || (!QFileInfo (l).exists() && (l.indexOf("http") != 0)))
175 qDebug () << "not loadable: " << l;\
178 qDebug () << "Load " << l;
179 items.append(PlaylistItem (l));
181 if (!items.isEmpty())
182 metaInformationResolver->setCurrentSource(items.at(0).source);
185 void MainWindow::clearPlaylist()
188 /* while (musicTable->rowCount())
189 musicTable->removeRow(0);
190 mediaObject->clear();*/