summaryrefslogtreecommitdiffstats
path: root/juk/musicbrainzquery.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'juk/musicbrainzquery.cpp')
-rw-r--r--juk/musicbrainzquery.cpp120
1 files changed, 120 insertions, 0 deletions
diff --git a/juk/musicbrainzquery.cpp b/juk/musicbrainzquery.cpp
new file mode 100644
index 00000000..84bb38d7
--- /dev/null
+++ b/juk/musicbrainzquery.cpp
@@ -0,0 +1,120 @@
+/***************************************************************************
+ begin : Tue Aug 3 2004
+ copyright : (C) 2004 by Scott Wheeler
+ email : wheeler@kde.org
+***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#include "musicbrainzquery.h"
+
+#if HAVE_MUSICBRAINZ
+
+#include "trackpickerdialog.h"
+#include "tag.h"
+#include "collectionlist.h"
+#include "tagtransactionmanager.h"
+
+#include <kmainwindow.h>
+#include <kapplication.h>
+#include <kstatusbar.h>
+#include <klocale.h>
+#include <kdebug.h>
+
+#include <qfileinfo.h>
+
+MusicBrainzLookup::MusicBrainzLookup(const FileHandle &file) :
+ KTRMLookup(file.absFilePath()),
+ m_file(file)
+{
+ message(i18n("Querying MusicBrainz server..."));
+}
+
+void MusicBrainzLookup::recognized()
+{
+ KTRMLookup::recognized();
+ confirmation();
+ delete this;
+}
+
+void MusicBrainzLookup::unrecognized()
+{
+ KTRMLookup::unrecognized();
+ message(i18n("No matches found."));
+ delete this;
+}
+
+void MusicBrainzLookup::collision()
+{
+ KTRMLookup::collision();
+ confirmation();
+ delete this;
+}
+
+void MusicBrainzLookup::error()
+{
+ KTRMLookup::error();
+ message(i18n("Error connecting to MusicBrainz server."));
+ delete this;
+}
+
+void MusicBrainzLookup::message(const QString &s) const
+{
+ KMainWindow *w = static_cast<KMainWindow *>(kapp->mainWidget());
+ w->statusBar()->message(QString("%1 (%2)").arg(s).arg(m_file.fileInfo().fileName()), 3000);
+}
+
+void MusicBrainzLookup::confirmation()
+{
+ // Here we do a bit of queuing to make sure that we don't pop up multiple
+ // instances of the confirmation dialog at once.
+
+ static QValueList< QPair<FileHandle, KTRMResultList> > queue;
+
+ if(results().isEmpty())
+ return;
+
+ if(!queue.isEmpty()) {
+ queue.append(qMakePair(m_file, results()));
+ return;
+ }
+
+ queue.append(qMakePair(m_file, results()));
+
+ while(!queue.isEmpty()) {
+ QPair<FileHandle, KTRMResultList> item = queue.first();
+ FileHandle file = item.first;
+ KTRMResultList results = item.second;
+ TrackPickerDialog dialog(file.fileInfo().fileName(), results);
+
+ if(dialog.exec() == QDialog::Accepted && !dialog.result().isEmpty()) {
+ KTRMResult result = dialog.result();
+ Tag *tag = TagTransactionManager::duplicateTag(file.tag());
+
+ if(!result.title().isEmpty())
+ tag->setTitle(result.title());
+ if(!result.artist().isEmpty())
+ tag->setArtist(result.artist());
+ if(!result.album().isEmpty())
+ tag->setAlbum(result.album());
+ if(result.track() != 0)
+ tag->setTrack(result.track());
+ if(result.year() != 0)
+ tag->setYear(result.year());
+
+ PlaylistItem *item = CollectionList::instance()->lookup(file.absFilePath());
+ TagTransactionManager::instance()->changeTagOnItem(item, tag);
+ TagTransactionManager::instance()->commit();
+ }
+ queue.pop_front();
+ }
+}
+
+#endif