diff options
| author | 2011-04-09 13:21:02 +0000 | |
|---|---|---|
| committer | 2011-04-09 13:21:02 +0000 | |
| commit | b7c12a21c3fdeb4a9487d25461dd1afa0fd101f3 (patch) | |
| tree | 7bb5ca7e8e3ac0af6f872fa6c9daf9d99543789c /src/modules | |
| parent | more work on #934: added export to html (wip) and improved the whole stuff (diff) | |
| download | KVIrc-b7c12a21c3fdeb4a9487d25461dd1afa0fd101f3.tar.gz KVIrc-b7c12a21c3fdeb4a9487d25461dd1afa0fd101f3.tar.bz2 KVIrc-b7c12a21c3fdeb4a9487d25461dd1afa0fd101f3.zip | |
add Spotify interface (wip)
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@5767 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/modules')
| -rw-r--r-- | src/modules/mediaplayer/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/modules/mediaplayer/MpSpotifyInterface.cpp | 153 | ||||
| -rw-r--r-- | src/modules/mediaplayer/MpSpotifyInterface.h | 61 | ||||
| -rw-r--r-- | src/modules/mediaplayer/libkvimediaplayer.cpp | 2 |
4 files changed, 217 insertions, 0 deletions
diff --git a/src/modules/mediaplayer/CMakeLists.txt b/src/modules/mediaplayer/CMakeLists.txt index 746132d46..f63257ea0 100644 --- a/src/modules/mediaplayer/CMakeLists.txt +++ b/src/modules/mediaplayer/CMakeLists.txt @@ -8,6 +8,7 @@ SET(kvimediaplayer_SRCS MpXmmsInterface.cpp MpAmipInterface.cpp MpMprisInterface.cpp + MpSpotifyInterface.cpp ) # After this call, files will be moc'ed to moc_kvi_*.cpp diff --git a/src/modules/mediaplayer/MpSpotifyInterface.cpp b/src/modules/mediaplayer/MpSpotifyInterface.cpp new file mode 100644 index 000000000..de20e11bf --- /dev/null +++ b/src/modules/mediaplayer/MpSpotifyInterface.cpp @@ -0,0 +1,153 @@ +//=============================================================================
+//
+// File : MpSpotifyInterface.cpp
+// Creation date : Sat 09 Apr 2011 10:38:12 by David López
+//
+// This file is part of the KVIrc IRC client distribution
+// Copyright (C) 2011 David López <grannost at gmail dot com>
+//
+// 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 opinion) any later version.
+//
+// This program is distributed in the HOPE that it will be USEFUL,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, write to the Free Software Foundation,
+// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+//=============================================================================
+
+#include "MpSpotifyInterface.h"
+#include "KviOptions.h"
+
+#if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW)
+
+#include <QTextCodec>
+
+#include "KviLocale.h"
+#include "KviModule.h"
+
+#include <windows.h>
+
+static HWND find_spotify(KviSpotifyInterface * i)
+{
+ HWND hWnd = FindWindow("SpotifyMainWindow",NULL);
+ if(!hWnd)
+ {
+ // try to start the process ?
+ i->setLastError(__tr2qs_ctx("Spotify is not running","mediaplayer"));
+ }
+ return hWnd;
+}
+
+MP_IMPLEMENT_DESCRIPTOR(
+ KviSpotifyInterface,
+ "spotify",
+ __tr2qs_ctx(
+ "An interface to the Spotify music streaming service.\n" \
+ "It is only available for certain countries in Europe.\n" \
+ "You can download it from http://www.spotify.com.\n"
+ ,
+ "mediaplayer"
+ )
+)
+
+KviSpotifyInterface::KviSpotifyInterface()
+: MpInterface()
+{
+}
+
+KviSpotifyInterface::~KviSpotifyInterface()
+{
+}
+
+QString KviSpotifyInterface::get_window_title() {
+ HWND hSpotify;
+ QString szReturn;
+ if (!(hSpotify = find_spotify(this)))return QString("");
+
+ QByteArray nowPlaying = QByteArray((GetWindowTextLength(hSpotify) + 1)
+ * sizeof(wchar_t), 0);
+
+ if (GetWindowTextW(hSpotify, (LPWSTR)nowPlaying.data(), nowPlaying.size())) {
+ szReturn = QString::fromWCharArray((wchar_t *)nowPlaying.data());
+ if (szReturn == "Spotify")
+ return QString("");
+ return szReturn.replace(QString("Spotify - "), QString(""));
+ } else
+ szReturn = QString("");
+}
+
+MpInterface::PlayerStatus KviSpotifyInterface::status() {
+ if (get_window_title() == QString(""))
+ return MpInterface::Stopped;
+ else
+ return MpInterface::Playing;
+}
+
+int KviSpotifyInterface::detect(bool bStart)
+{
+ if(find_spotify(this))return 100;
+ return 0;
+}
+
+QString KviSpotifyInterface::nowPlaying()
+{
+ return get_window_title().replace(QString("\u2013"), QString("-"));
+}
+
+QString KviSpotifyInterface::artist()
+{
+ QString title = get_window_title();
+ int pos = title.indexOf(QString(" \u2013 "));
+ if (pos != 1)return title.left(pos);
+ else return title;
+}
+
+QString KviSpotifyInterface::title()
+{
+ QString title = get_window_title();
+ int pos = title.indexOf(QString(" \u2013 "));
+ if (pos != 1)return title.right(title.length() - (pos + 3));
+ else return title;
+}
+
+bool KviSpotifyInterface::show()
+{
+ HWND hSpotify = find_spotify(this);
+ if(hSpotify)
+ {
+ ShowWindow(hSpotify, SW_SHOW);
+ return true;
+ }
+ return false;
+}
+
+bool KviSpotifyInterface::minimize()
+{
+ HWND hSpotify = find_spotify(this);
+ if(hSpotify)
+ {
+ ShowWindow(hSpotify, SW_SHOWMINIMIZED);
+ return true;
+ }
+ return false;
+}
+
+bool KviSpotifyInterface::hide()
+{
+ HWND hSpotify = find_spotify(this);
+ if(hSpotify)
+ {
+ ShowWindow(hSpotify, SW_HIDE);
+ return true;
+ }
+ return false;
+}
+
+#endif //COMPILE_ON_WINDOWS
diff --git a/src/modules/mediaplayer/MpSpotifyInterface.h b/src/modules/mediaplayer/MpSpotifyInterface.h new file mode 100644 index 000000000..8b116b7c8 --- /dev/null +++ b/src/modules/mediaplayer/MpSpotifyInterface.h @@ -0,0 +1,61 @@ +#ifndef _MP_SPOTIFYINTERFACE_H_
+#define _MP_SPOTIFYINTERFACE_H_
+//=============================================================================
+//
+// File : MpSpotifyInterface.h
+// Creation date : Sat 09 Apr 2011 10:38:12 by David López
+//
+// This file is part of the KVIrc IRC client distribution
+// Copyright (C) 2011 David López <grannost at gmail dot com>
+//
+// 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 opinion) any later version.
+//
+// This program is distributed in the HOPE that it will be USEFUL,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, write to the Free Software Foundation,
+// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+//=============================================================================
+
+#include "kvi_settings.h"
+
+#if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW)
+
+ #include "MpInterface.h"
+
+ class KviSpotifyInterface : public MpInterface
+ {
+ public:
+ KviSpotifyInterface();
+ ~KviSpotifyInterface();
+ public:
+ virtual int detect(bool bStart);
+ virtual QString nowPlaying();
+ virtual QString artist();
+ virtual QString title();
+ virtual bool show();
+ virtual bool minimize();
+ virtual bool hide();
+ virtual bool prev() { notImplemented(); };
+ virtual bool next() { notImplemented(); };
+ virtual bool play() { notImplemented(); };
+ virtual bool stop() { notImplemented(); };
+ virtual bool pause() { notImplemented(); };
+ virtual QString mrl() { notImplemented(); };
+ virtual MpInterface::PlayerStatus status();
+ protected:
+ QString get_window_title();
+ };
+
+ MP_DECLARE_DESCRIPTOR(KviSpotifyInterface)
+
+#endif //COMPILE_ON_WINDOWS
+
+#endif //!_MP_SPOTIFYINTERFACE_H_
diff --git a/src/modules/mediaplayer/libkvimediaplayer.cpp b/src/modules/mediaplayer/libkvimediaplayer.cpp index 65ff41137..bf3ad6227 100644 --- a/src/modules/mediaplayer/libkvimediaplayer.cpp +++ b/src/modules/mediaplayer/libkvimediaplayer.cpp @@ -29,6 +29,7 @@ #include "MpMprisInterface.h" #include "MpWinampInterface.h" #include "MpXmmsInterface.h" +#include "MpSpotifyInterface.h" #include "KviModule.h" #include "KviOptions.h" @@ -1626,6 +1627,7 @@ static bool mediaplayer_module_init( KviModule * m ) #if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW) g_pDescriptorList->append(MP_CREATE_DESCRIPTOR(MpAmipInterface)); g_pDescriptorList->append(MP_CREATE_DESCRIPTOR(KviWinampInterface)); + g_pDescriptorList->append(MP_CREATE_DESCRIPTOR(KviSpotifyInterface)); #endif g_pMPInterface = 0; |
