summaryrefslogtreecommitdiffstats
path: root/playerwidget.cpp
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2017-07-06 10:33:13 +0200
committerArno <arno@disconnect.de>2017-07-06 10:33:13 +0200
commitdbc19ad71cbac5166aa0b82c97b726b464f4fdca (patch)
tree11b6de922f37b830eba36a9961b4deaefd68668c /playerwidget.cpp
parentf9771c52ff6b350c29db70216b79bb4f60081763 (diff)
downloadBeetPlayer-dbc19ad71cbac5166aa0b82c97b726b464f4fdca.tar.gz
BeetPlayer-dbc19ad71cbac5166aa0b82c97b726b464f4fdca.tar.bz2
BeetPlayer-dbc19ad71cbac5166aa0b82c97b726b464f4fdca.zip
Implemented MusicBrainz lookup
Wow, what a convoluted api, to say the least... They have documentation, which is good, but the query syntax definitely needs more explaining, foremost how to encode non-ASCII characters and names with whitspaces... Well, it kinda works, but the Other Albums sections can be waaaaay off...
Diffstat (limited to 'playerwidget.cpp')
-rw-r--r--playerwidget.cpp58
1 files changed, 52 insertions, 6 deletions
diff --git a/playerwidget.cpp b/playerwidget.cpp
index c00db32..6eb5821 100644
--- a/playerwidget.cpp
+++ b/playerwidget.cpp
@@ -3,6 +3,7 @@
#include <QPushButton>
#include <QLabel>
#include <QTextEdit>
+#include <QTextBrowser>
#include <QSlider>
#include <QTreeView>
#include <QSplitter>
@@ -35,11 +36,14 @@
#include "indexerdialog.h"
#include "globals.h"
#include "helper.h"
+#include "webdownloader.h"
PlayerWidget::PlayerWidget(QWidget *parent) : QWidget(parent), mDurSecs(0), mPlayListLength(0){
mStarting = true;
setupGui();
createActions();
+ mWebDownloader = new WebDownloader(this);
+ connect(mWebDownloader, &WebDownloader::done, this, &PlayerWidget::webDlDone);
mStarting = false;
}
@@ -203,7 +207,8 @@ void PlayerWidget::setupGui(){
//misc info
QString leftInfoGBS = QString(tr("%1 Misc. %1")).arg(QChar(0x26A5));
QGroupBox *leftInfoGB = new QGroupBox(leftInfoGBS);
- mLeftTE = new QTextEdit;
+ mLeftTE = new QTextBrowser;
+ mLeftTE->setOpenExternalLinks(true);
mLeftTE->setFont(QFont("courier"));
mLeftTE->setReadOnly(true);
QVBoxLayout *leftInfoL = new QVBoxLayout;
@@ -354,8 +359,10 @@ void PlayerWidget::createActions(){
helpA->setMenu(helpM);
QAction *miscPrintA = new QAction(QIcon(":/clean_tampon.png"), tr("List selected"), this);
connect(miscPrintA, &QAction::triggered, this, &PlayerWidget::printList);
- QAction *miscMusicBrainzA = new QAction(QIcon(":/bizarre_amputee.png"), tr("Search Musicbrainz"), this);
- connect(miscMusicBrainzA, &QAction::triggered, this, &PlayerWidget::searchMusicbrainz);
+ QAction *miscMusicBrainzRightA = new QAction(QIcon(":/bizarre_amputee.png"), tr("Search Musicbrainz"), this);
+ connect(miscMusicBrainzRightA, &QAction::triggered, this, &PlayerWidget::searchMusicbrainzRight);
+ QAction *miscMusicBrainzLeftA = new QAction(QIcon(":/bizarre_amputee.png"), tr("Search Musicbrainz"), this);
+ connect(miscMusicBrainzLeftA, &QAction::triggered, this, &PlayerWidget::searchMusicbrainzLeft);
mView->addAction(addToPlayListA);
mView->addAction(addToPlayListAndClearA);
mView->addAction(Helper::createSeparator(this));
@@ -367,13 +374,14 @@ void PlayerWidget::createActions(){
mView->addAction(mDeleteFilesA);
mView->addAction(Helper::createSeparator(this));
mView->addAction(miscPrintA);
+ mView->addAction(miscMusicBrainzLeftA);
mView->addAction(Helper::createSeparator(this));
mView->addAction(mRefreshA);
mView->addAction(Helper::createSeparator(this));
mView->addAction(randomPlayA);
mPlayListView->addAction(removeFromPlayListA);
mPlayListView->addAction(Helper::createSeparator(this));
- mPlayListView->addAction(miscMusicBrainzA);
+ mPlayListView->addAction(miscMusicBrainzRightA);
mPlayListView->addAction(Helper::createSeparator(this));
mPlayListView->addAction(shufflePlayistA);
mPlayListView->addAction(clearPlayListA);
@@ -959,6 +967,8 @@ void PlayerWidget::addSong(const QModelIndex &idx){
len = Helper::lengthInSeconds(idx.data(FullPathRole).toString());
}
item->setData(len, LengthRole);
+ item->setData(artist, ArtistRole);
+ item->setData(album, AlbumRole);
root->appendRow(item);
mPlayListLength += len;
}
@@ -1179,6 +1189,8 @@ void PlayerWidget::randomPlay(){
item->setIcon(songIcon);
item->setData(randomQ.value(2), FullPathRole);
item->setData(randomQ.value(6), LengthRole);
+ item->setData(randomQ.value(4), ArtistRole);
+ item->setData(randomQ.value(5), AlbumRole);
mPlayListLength += randomQ.value(6).toInt();
root->appendRow(item);
}
@@ -1213,11 +1225,45 @@ void PlayerWidget::printList(){
output.append(t);
}
}
- mLeftTE->setText(output);
+ mLeftTE->clear();
+ mLeftTE->setPlainText(output);
}
-void PlayerWidget::searchMusicbrainz(){
+void PlayerWidget::searchMusicbrainzRight(){
+ QModelIndex idx = mPlayListView->selectionModel()->currentIndex();
+ if(!idx.isValid()){
+ return;
+ }
+ QString artist = idx.data(ArtistRole).toString();
+ QString album = idx.data(AlbumRole).toString();
+ mWebDownloader->fetchData(artist, album);
+}
+
+void PlayerWidget::searchMusicbrainzLeft(){
+ QModelIndex idx = mView->selectionModel()->currentIndex();
+ if(!idx.isValid()){
+ return;
+ }
+ QString artist = idx.data(ArtistRole).toString().toLower();
+ QString album = idx.data(AlbumRole).toString().toLower();
+ mWebDownloader->fetchData(artist, album);
+}
+
+void PlayerWidget::webDlDone(){
+ QString text(tr("<b>Musicbrainz:</b><ul>"));
+ text.append(QString(tr("<li>Artist: %1</li>")).arg(mWebDownloader->artist()));
+ text.append(QString(tr("<li>Album: %1</li>")).arg(mWebDownloader->album()));
+ foreach(QString rg, mWebDownloader->data()){
+ text.append(QString("<li><a href=\"https://musicbrainz.org/release-group/%1\">%1</a></li>").arg(rg));
+ }
+ text.append("</ul>");
+ text.append(tr("<b>Other Albums</b><ul>"));
+ for(QMap<QString, QString>::const_iterator it = mWebDownloader->otherData().constBegin(); it != mWebDownloader->otherData().constEnd(); ++it){
+ text.append(QString("<li><a href=\"https://musicbrainz.org/release-group/%1\">%2</a></li>").arg(it.value()).arg(it.key()));
+ }
+ text.append("</ul>");
+ mLeftTE->setText(text);
}
void PlayerWidget::play(const QString &fullPath){