[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdemultimedia/juk
From: Martin Tobias Holmedahl Sandsmark <sandsmark () iskrembilen ! com>
Date: 2012-02-23 4:55:19
Message-ID: 20120223045519.5B2BDAC895 () svn ! kde ! org
[Download RAW message or body]
SVN commit 1281831 by sandsmark:
Add a GUI to set username/password for last.fm scrobbling in JuK.
FEATURE:
BUG:262194
M +1 -0 CMakeLists.txt
M +10 -0 juk.cpp
M +1 -0 juk.h
M +1 -0 jukui-rtl.rc
M +1 -0 jukui.rc
M +2 -0 main.cpp
A scrobbleconfigdlg.cpp [License: GPL (v2+)]
A scrobbleconfigdlg.h [License: GPL (v2+)]
M +51 -26 scrobbler.cpp
M +5 -2 scrobbler.h
--- trunk/KDE/kdemultimedia/juk/CMakeLists.txt #1281830:1281831
@@ -76,6 +76,7 @@
playlistsearch.cpp
playlistsplitter.cpp
scrobbler.cpp
+ scrobbleconfigdlg.cpp
searchplaylist.cpp
searchwidget.cpp
slideraction.cpp
--- trunk/KDE/kdemultimedia/juk/juk.cpp #1281830:1281831
@@ -49,6 +49,7 @@
#include "keydialog.h"
#include "tagguesserconfigdlg.h"
#include "filerenamerconfigdlg.h"
+#include "scrobbleconfigdlg.h"
#include "actioncollection.h"
#include "cache.h"
#include "playlistsplitter.h"
@@ -313,6 +314,9 @@
act = collection->addAction("fileRenamerConfig", this, SLOT(slotConfigureFileRenamer()));
act->setText(i18n("&File Renamer..."));
+ act = collection->addAction("scrobblerConfig", this, SLOT(slotConfigureScrobbling()));
+ act->setText(i18n("&Configure scrobbling..."));
+
//////////////////////////////////////////////////
// just in the toolbar
//////////////////////////////////////////////////
@@ -573,6 +577,12 @@
FileRenamerConfigDlg(this).exec();
}
+void JuK::slotConfigureScrobbling()
+{
+ ScrobbleConfigDlg(this).exec();
+}
+
+
void JuK::slotUndo()
{
TagTransactionManager::instance()->undo();
--- trunk/KDE/kdemultimedia/juk/juk.h #1281830:1281831
@@ -73,6 +73,7 @@
void slotEditKeys();
void slotConfigureTagGuesser();
void slotConfigureFileRenamer();
+ void slotConfigureScrobbling();
void slotUndo();
void slotCheckAlbumNextAction(bool albumRandomEnabled);
void slotProcessArgs();
--- trunk/KDE/kdemultimedia/juk/jukui-rtl.rc #1281830:1281831
@@ -72,6 +72,7 @@
<!-- <Action name="saveUpcomingTracks" append="show_merge"/> -->
<Action name="tagGuesserConfig" append="save_merge"/>
<Action name="fileRenamerConfig" append="save_merge"/>
+ <Action name="scrobblerConfig" append="save_merge"/>
<Action name="outputSelect" append="save_merge"/>
</Menu>
</MenuBar>
--- trunk/KDE/kdemultimedia/juk/jukui.rc #1281830:1281831
@@ -74,6 +74,7 @@
<!-- <Action name="saveUpcomingTracks" append="show_merge"/> -->
<Action name="tagGuesserConfig" append="save_merge"/>
<Action name="fileRenamerConfig" append="save_merge"/>
+ <Action name="scrobblerConfig" append="save_merge"/>
<Action name="outputSelect" append="save_merge"/>
</Menu>
</MenuBar>
--- trunk/KDE/kdemultimedia/juk/main.cpp #1281830:1281831
@@ -43,6 +43,7 @@
static const char pascal[] = I18N_NOOP("Gimper of splash screen");
static const char laurent[] = I18N_NOOP("Porting to KDE 4 when no one else was around");
static const char giorgos[] = I18N_NOOP("Badly-needed tag editor bugfixes.");
+static const char sandsmark[] = I18N_NOOP("Last.fm scrobbling support.");
int main(int argc, char *argv[])
{
@@ -69,6 +70,7 @@
aboutData.addCredit(ki18n("Pascal Klein"), ki18n(pascal), "4pascal@tpg.com.au");
aboutData.addCredit(ki18n("Laurent Montel"), ki18n(laurent), "montel@kde.org");
aboutData.addCredit(ki18n("Georg Grabler"), ki18n(georg), "georg@grabler.net");
+ aboutData.addCredit(ki18n("Martin Sandsmark"), ki18n(sandsmark), "martin.sandsmark@kde.org");
KCmdLineArgs::init(argc, argv, &aboutData);
--- trunk/KDE/kdemultimedia/juk/scrobbler.cpp #1281830:1281831
@@ -1,3 +1,18 @@
+/***************************************************************************
+ begin : Tue Feb 21 2012
+ copyright : (C) 2012 by Martin Sandsmark
+ email : martin.sandsmark@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 "scrobbler.h"
#include <kglobal.h>
#include <kconfiggroup.h>
@@ -15,8 +30,8 @@
Scrobbler::Scrobbler(QObject* parent): QObject(parent)
{
KConfigGroup config(KGlobal::config(), "Scrobbling");
- m_sessionKey = config.readEntry("SessionKey", "");//TODO: use kwallet
- if (m_sessionKey.isEmpty())
+ QString sessionKey = config.readEntry("SessionKey", "");//TODO: use kwallet
+ if (sessionKey.isEmpty())
getAuthToken();
}
@@ -43,17 +58,8 @@
params["api_sig"] = md5(s.toUtf8());
}
-
-void Scrobbler::getAuthToken()
+void Scrobbler::getAuthToken(QString username, QString password)
{
- kDebug() << "Getting new auth token...";
-
- KConfigGroup config(KGlobal::config(), "Scrobbling");
- QString username = config.readEntry("Username", "");//TODO: use kwallet
- QString password = config.readEntry("Password", "");//TODO: use kwallet
- if (username.isEmpty() || password.isEmpty())
- return;
-
QByteArray authToken = md5((username + md5(password.toUtf8() )).toUtf8());
QMap<QString, QString> params;
@@ -74,39 +80,57 @@
connect(reply, SIGNAL(finished()), this, SLOT(handleAuthenticationReply()));
}
+void Scrobbler::getAuthToken()
+{
+ kDebug() << "Getting new auth token...";
+
+ KConfigGroup config(KGlobal::config(), "Scrobbling");
+ QString username = config.readEntry("Username", "");//TODO: use kwallet
+ QString password = config.readEntry("Password", "");//TODO: use kwallet
+ if (username.isEmpty() || password.isEmpty())
+ return;
+
+ getAuthToken(username, password);
+}
+
void Scrobbler::handleAuthenticationReply()
{
QNetworkReply* reply = qobject_cast<QNetworkReply*>(sender());
- qWarning() << "got authentication reply";
+ kDebug() << "got authentication reply";
if (reply->error() != QNetworkReply::NoError) {
- qWarning() << reply->errorString();
+ emit invalidAuth();
+ kWarning() << "Error while getting authentication reply" << reply->errorString();
return;
}
QDomDocument doc;
QByteArray data = reply->readAll();
- qWarning() << data;
doc.setContent(data);
QDomElement el = doc.documentElement();
- m_sessionKey = el.firstChildElement("session").firstChildElement("key").text();
+ QString sessionKey = el.firstChildElement("session").firstChildElement("key").text();
+ if (sessionKey.isEmpty()) {
+ emit invalidAuth();
+ kWarning() << "Unable to get session key" << data;
+ return;
+ }
KConfigGroup config(KGlobal::config(), "Scrobbling");
- config.writeEntry("SessionKey", m_sessionKey);
- return;
+ config.writeEntry("SessionKey", sessionKey);
+ emit validAuth();
}
void Scrobbler::nowPlaying(const FileHandle& file)
{
- if (m_sessionKey.isEmpty()) {
+ KConfigGroup config(KGlobal::config(), "Scrobbling");
+ QString sessionKey = config.readEntry("SessionKey", "");//TODO: use kwallet
+ if (sessionKey.isEmpty()) {
getAuthToken();
return;
}
- qWarning() << "Now playing" << file.tag()->title();
-
QMap<QString, QString> params;
params["method"] = "track.updateNowPlaying";
- params["sk"] = m_sessionKey;
+ params["sk"] = sessionKey;
params["track"] = file.tag()->title();
params["artist"] = file.tag()->artist();
@@ -123,16 +147,18 @@
void Scrobbler::scrobble()
{
- if (m_sessionKey.isEmpty()) {
+ KConfigGroup config(KGlobal::config(), "Scrobbling");
+ QString sessionKey = config.readEntry("SessionKey", "");//TODO: use kwallet
+ if (sessionKey.isEmpty()) {
getAuthToken();
return;
}
- qWarning() << "Scrobbling" << m_file.tag()->title();
+ kDebug() << "Scrobbling" << m_file.tag()->title();
QMap<QString, QString> params;
params["method"] = "track.scrobble";
- params["sk"] = m_sessionKey;
+ params["sk"] = sessionKey;
params["timestamp"] = QString::number(m_startedPlaying);
@@ -167,7 +193,6 @@
{
QNetworkReply* reply = qobject_cast<QNetworkReply*>(sender());
QByteArray data = reply->readAll();
- qWarning() << data;
if (data.contains("code=\"9\"")) // We need a new token
getAuthToken();
}
--- trunk/KDE/kdemultimedia/juk/scrobbler.h #1281830:1281831
@@ -35,12 +35,16 @@
public slots:
void nowPlaying(const FileHandle&);
void scrobble();
+ void getAuthToken(QString username, QString password);
private slots:
- void getAuthToken();
void handleAuthenticationReply();
void handleResults();
+ void getAuthToken();
+signals:
+ void invalidAuth();
+ void validAuth();
private:
void sign(QMap<QString, QString> &request);
@@ -49,7 +53,6 @@
FileHandle m_file;
qint64 m_startedPlaying;
- QString m_sessionKey;
};
#endif /* SCROBBLER_H */
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic