[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