diff options
Diffstat (limited to 'src/modules/mediaplayer/mp_amarokinterface.cpp')
-rw-r--r-- | src/modules/mediaplayer/mp_amarokinterface.cpp | 189 |
1 files changed, 189 insertions, 0 deletions
diff --git a/src/modules/mediaplayer/mp_amarokinterface.cpp b/src/modules/mediaplayer/mp_amarokinterface.cpp new file mode 100644 index 0000000..5c941d4 --- /dev/null +++ b/src/modules/mediaplayer/mp_amarokinterface.cpp @@ -0,0 +1,189 @@ +//============================================================================= +// +// File : mp_amarokinterface.cpp +// Created on Sun 27 Mar 2005 16:55:09 by Szymon Stefanek +// +// This file is part of the KVIrc IRC client distribution +// Copyright (C) 2005 Szymon Stefanek <pragma at kvirc dot net> +// +// 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 "mp_amarokinterface.h" + +#ifdef COMPILE_KDE_SUPPORT + +#include "kvi_app.h" + +#include "dcopclient.h" +#include "kurl.h" + +#include <qdatastream.h> +#include <qvaluelist.h> + +#include "kvi_locale.h" + +MP_IMPLEMENT_DESCRIPTOR( + KviAmarokInterface, + "amarok", + __tr2qs_ctx( + "An interface to the AmaroK KDE media player." + , + "mediaplayer" + ) +) + + +KviAmarokInterface::KviAmarokInterface() + : KviDCOPHelper(true, "amarok") +{ +} + +KviAmarokInterface::~KviAmarokInterface() +{ +} + +int KviAmarokInterface::detect(bool bStart){ return detectApp("amarok",bStart,95,99); } + +bool KviAmarokInterface::prev(){ return voidRetVoidDCOPCall("player","prev()"); } +bool KviAmarokInterface::next(){ return voidRetVoidDCOPCall("player","next()"); } +bool KviAmarokInterface::play(){ return voidRetVoidDCOPCall("player","play()"); } +bool KviAmarokInterface::stop(){ return voidRetVoidDCOPCall("player","stop()"); } +bool KviAmarokInterface::pause(){ return voidRetVoidDCOPCall("player","pause()"); } +bool KviAmarokInterface::mute(){ return voidRetVoidDCOPCall("player","mute()"); } +bool KviAmarokInterface::quit(){ return voidRetVoidDCOPCall("MainApplication-Interface","quit()"); } + +bool KviAmarokInterface::jumpTo(kvs_int_t &iPos) +{ + return voidRetIntDCOPCall("player","seek(int)",iPos/1000); +} +bool KviAmarokInterface::setVol(kvs_int_t &iVol) +{ + return voidRetIntDCOPCall("player","setVolume(int)",100*iVol/255); +} + +#define MP_DCOP_STRING_CALL(_fncname,_iface,_fnc) \ +QString KviAmarokInterface::_fncname() \ +{ \ + QString ret; \ + if(!stringRetVoidDCOPCall(_iface,_fnc,ret))return false; \ + return ret; \ +} + +MP_DCOP_STRING_CALL(nowPlaying,"player","nowPlaying()") +MP_DCOP_STRING_CALL(artist,"player","artist()") +MP_DCOP_STRING_CALL(title,"player","title()") +MP_DCOP_STRING_CALL(genre,"player","genre()") +MP_DCOP_STRING_CALL(year,"player","year()") +MP_DCOP_STRING_CALL(comment,"player","comment()") +MP_DCOP_STRING_CALL(album,"player","album()") + +int KviAmarokInterface::getVol() +{ + int ret; + if(!intRetVoidDCOPCall("player","getVolume()",ret))return false; + return ret * 255 / 100; +} + +int KviAmarokInterface::sampleRate() +{ + int ret; + if(!intRetVoidDCOPCall("player","sampleRate()",ret))return false; + return ret; +} + +int KviAmarokInterface::length() +{ + int ret; + if(!intRetVoidDCOPCall("player","trackTotalTime()",ret))return false; + return ret * 1000; +} + +int KviAmarokInterface::position() +{ + int ret; + if(!intRetVoidDCOPCall("player","trackCurrentTime()",ret))return false; + return ret * 1000; +} + +bool KviAmarokInterface::getRepeat() +{ + bool ret; + if(!boolRetVoidDCOPCall("player","repeatTrackStatus()",ret))return false; + return ret; +} + +bool KviAmarokInterface::getShuffle() +{ + bool ret; + if(!boolRetVoidDCOPCall("player","randomModeStatus()",ret))return false; + return ret; +} + +bool KviAmarokInterface::setRepeat(bool &bVal) +{ + return voidRetBoolDCOPCall("player","enableRepeatTrack(bool)",bVal); +} + +bool KviAmarokInterface::setShuffle(bool &bVal) +{ + return voidRetBoolDCOPCall("player","enableRandomMode(bool)",bVal); +} + +KviMediaPlayerInterface::PlayerStatus KviAmarokInterface::status() +{ + int ret; + if(!intRetVoidDCOPCall("player","status()",ret))return KviMediaPlayerInterface::Unknown; + switch(ret) + { + case 0: + return KviMediaPlayerInterface::Stopped; + break; + case 1: + return KviMediaPlayerInterface::Paused; + break; + case 2: + return KviMediaPlayerInterface::Playing; + break; + default: + return KviMediaPlayerInterface::Unknown; + break; + } + return KviMediaPlayerInterface::Unknown; +} + +QString KviAmarokInterface::mrl() +{ + QString ret; + if(!stringRetVoidDCOPCall("player","encodedURL()",ret))return false; + KURL url(ret); + return url.prettyURL(); +} + +bool KviAmarokInterface::playMrl(const QString &mrl) +{ + QString title; + QByteArray data, replyData; + KviQCString replyType; + QDataStream arg(data,IO_WriteOnly); + arg << KURL(mrl); + if(!g_pApp->dcopClient()->call(m_szAppId,"playlist","playMedia(KURL)",data,replyType,replyData)) + return false; + return true; +} + + +#endif //COMPILE_KDE_SUPPORT |