[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [amarok/spotify] src/core-impl/collections/spotifycollection: spotify: download a ZIP instead of a s
From: Edward Hades <edward.hades () gmail ! com>
Date: 2012-10-29 14:08:42
Message-ID: 20121029140842.68D9BA6078 () git ! kde ! org
[Download RAW message or body]
Git commit 38d1ade7ab4db9c512abc9652c0fbd9d396a7db2 by Edward Hades.
Committed on 29/10/2012 at 15:07.
Pushed by hades into branch 'spotify'.
spotify: download a ZIP instead of a single binary
Also: unpack the ZIP, set permissions, and set LD_LIBRARY_PATH before
trying to execute the resolver binary.
M +3 -0 src/core-impl/collections/spotifycollection/SpotifyCollection.cpp
M +6 -0 src/core-impl/collections/spotifycollection/SpotifyConfig.cpp
M +2 -1 src/core-impl/collections/spotifycollection/SpotifyConfig.h
M +21 -9 src/core-impl/collections/spotifycollection/SpotifySettings.cpp
M +2 -0 src/core-impl/collections/spotifycollection/support/Controller.cpp
M +3 -0 src/core-impl/collections/spotifycollection/support/Controller.h
http://commits.kde.org/amarok/38d1ade7ab4db9c512abc9652c0fbd9d396a7db2
diff --git a/src/core-impl/collections/spotifycollection/SpotifyCollection.cpp \
b/src/core-impl/collections/spotifycollection/SpotifyCollection.cpp index \
a73cfd3..4ec1f39 100644
--- a/src/core-impl/collections/spotifycollection/SpotifyCollection.cpp
+++ b/src/core-impl/collections/spotifycollection/SpotifyCollection.cpp
@@ -69,6 +69,9 @@ namespace Collections
m_config.load();
m_controller = The::SpotifyController( m_config.resolverPath() );
+#ifdef Q_OS_LINUX
+ m_controller->environment().insert("LD_LIBRARY_PATH", \
SpotifyConfig::resolverDownloadPath()); +#endif
Q_ASSERT( m_controller != 0 );
diff --git a/src/core-impl/collections/spotifycollection/SpotifyConfig.cpp \
b/src/core-impl/collections/spotifycollection/SpotifyConfig.cpp index \
a778403..697181f 100644
--- a/src/core-impl/collections/spotifycollection/SpotifyConfig.cpp
+++ b/src/core-impl/collections/spotifycollection/SpotifyConfig.cpp
@@ -183,4 +183,10 @@ SpotifyConfig::defaultResolverName()
return QString("spotify_resolver_%1").arg(supportedPlatformName());
}
+const QString
+SpotifyConfig::resolverDownloadPath()
+{
+ return KStandardDirs::locateLocal( "data", "amarok" );
+}
+
#include "SpotifyConfig.moc"
diff --git a/src/core-impl/collections/spotifycollection/SpotifyConfig.h \
b/src/core-impl/collections/spotifycollection/SpotifyConfig.h index 298a811..05373f2 \
100644
--- a/src/core-impl/collections/spotifycollection/SpotifyConfig.h
+++ b/src/core-impl/collections/spotifycollection/SpotifyConfig.h
@@ -33,6 +33,7 @@ public:
static const char *configSectionName() { return "Collection_Spotify"; }
static const QString supportedPlatformName();
static const QString defaultResolverName();
+ static const QString resolverDownloadPath();
const QString username() const { return m_username; }
void setUsername( const QString& username ) { m_username = username; }
@@ -43,7 +44,7 @@ public:
const QString resolverPath() const { return m_resolverPath; }
void setResolverPath( const QString& path ) { m_resolverPath = path; }
- const QString resolverDownloadUrl() const { return m_resolverDownloadUrl + \
defaultResolverName(); } + const QString resolverDownloadUrl() const { return \
m_resolverDownloadUrl + defaultResolverName() + ".zip"; }
bool highQuality() const { return m_highQuality; }
void setHighQuality( const bool highquality ) { m_highQuality = highquality; }
diff --git a/src/core-impl/collections/spotifycollection/SpotifySettings.cpp \
b/src/core-impl/collections/spotifycollection/SpotifySettings.cpp index \
6221d55..036cccb 100644
--- a/src/core-impl/collections/spotifycollection/SpotifySettings.cpp
+++ b/src/core-impl/collections/spotifycollection/SpotifySettings.cpp
@@ -25,8 +25,11 @@
#include <KLocale>
#include <KMessageBox>
+#include <KZip>
+#include <QBuffer>
#include <QFile>
+#include <QScopedPointer>
#include <QtGlobal>
SpotifySettings::SpotifySettings( QWidget* parent, const QVariantList& args )
@@ -232,20 +235,29 @@ SpotifySettings::slotDownloadFinished()
m_configWidget->progDownload->hide();
- QFile file( m_config.resolverPath() );
- if( !file.open( QIODevice::WriteOnly ) )
+ QByteArray data( m_downloadReply->readAll() );
+ QScopedPointer<QBuffer> data_buffer(new QBuffer(&data));
+
+ KZip archive( data_buffer.data() );
+ if( !archive.open( QIODevice::ReadOnly ) || !archive.directory() )
{
- KMessageBox::error( this, i18n( "Failed to open file '%1' to write." ).arg( \
m_config.resolverPath() ) ); + KMessageBox::error( this, i18n( "Failed to read \
data from the downloaded file. " + "Please try \
again later." ) ); slotCancel();
+ return;
}
- else
- {
- file.write( m_downloadReply->readAll() );
- // Set execution permission
- file.setPermissions( file.permissions() | QFile::ExeUser );
- file.close();
+ archive.directory()->copyTo( SpotifyConfig::resolverDownloadPath() );
+
+ QFile file( m_config.resolverPath() );
+ if( !file.exists() )
+ {
+ KMessageBox::error( this, i18n( "Failed to extract the Spotify resolver to \
%1 " + "Please check if the path is \
writeable." ).arg( SpotifyConfig::resolverDownloadPath() ) ); + slotCancel();
+ return;
}
+ file.setPermissions( file.permissions() | QFile::ExeUser );
// Notify controller to load the resolver
Spotify::Controller* controller = The::SpotifyController();
diff --git a/src/core-impl/collections/spotifycollection/support/Controller.cpp \
b/src/core-impl/collections/spotifycollection/support/Controller.cpp index \
00adffe..d3b5962 100644
--- a/src/core-impl/collections/spotifycollection/support/Controller.cpp
+++ b/src/core-impl/collections/spotifycollection/support/Controller.cpp
@@ -68,6 +68,7 @@ namespace Spotify
{
Controller::Controller( const QString& exec )
: QObject(0)
+, m_procEnv( QProcessEnvironment::systemEnvironment() )
, m_filePath( exec )
, m_lastUsername( QString() )
, m_msgSize( 0 )
@@ -463,6 +464,7 @@ Controller::startProcess()
debug() << "Starting " << resolverPath();
QString runPath = resolverPath();
+ m_proc.setProcessEnvironment( m_procEnv );
m_proc.start( runPath );
m_loaded = true;
diff --git a/src/core-impl/collections/spotifycollection/support/Controller.h \
b/src/core-impl/collections/spotifycollection/support/Controller.h index \
2b58b3c..5f78f0f 100644
--- a/src/core-impl/collections/spotifycollection/support/Controller.h
+++ b/src/core-impl/collections/spotifycollection/support/Controller.h
@@ -27,6 +27,7 @@
#include "core/interfaces/Logger.h"
#include <QProcess>
+#include <QProcessEnvironment>
#include <QVariantMap>
#include <qjson/parser.h>
#include <qjson/serializer.h>
@@ -68,6 +69,7 @@ public:
virtual QString name() const { return m_name; }
virtual QString resolverPath() const { return m_filePath; }
virtual void setFilePath( const QString& resolverPath ) { m_filePath = \
resolverPath; } + virtual QProcessEnvironment& environment() { return m_procEnv; }
virtual void login(const QString& username, const QString& password, const bool \
highQuality = false); virtual bool loggedIn() const { return m_loggedIn; }
virtual bool running() const;
@@ -209,6 +211,7 @@ private:
// Members
QProcess m_proc;
+ QProcessEnvironment m_procEnv;
QString m_name;
QString m_filePath;
QString m_lastUsername;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic