From 0b1ccdee4ab77ba429a42bb5f7879928211ede56 Mon Sep 17 00:00:00 2001 From: Plamen Petrov Date: Sat, 2 Feb 2008 00:50:34 +0200 Subject: [PATCH] KmkExtPlayer module base finished - need to do error checking --- src/kmkexternalplayer.cpp | 320 ++++++++++++++++++++++++++++++++++++++++++++-- src/kmkexternalplayer.h | 9 +- 2 files changed, 320 insertions(+), 9 deletions(-) diff --git a/src/kmkexternalplayer.cpp b/src/kmkexternalplayer.cpp index eea1107..18fa699 100644 --- a/src/kmkexternalplayer.cpp +++ b/src/kmkexternalplayer.cpp @@ -23,17 +23,32 @@ #include "kmkexternalplayer.h" +#include +#include +#include +#include #include "kmkglobalsettings.h" +#define EP "KmkExtPlayer: " + KmkExtPlayer::KmkExtPlayer( QWidget* parent, const char* name ) + :QObject( parent, name ) { + s = new KmkGlobalSettings; + Q_CHECK_PTR( s ); + + s->readSettings( kapp->config() ); + if( s->dbg() & KMK_DBG_CONFIG ) kdDebug() << EP"constructor: read config, now will use it..." << endl; + handleConfigChange(); + if( s->dbg() & KMK_DBG_CONFIG ) kdDebug() << EP"constructor: done." << endl; } KmkExtPlayer::~KmkExtPlayer() { - + if( s->dbg() & KMK_DBG_CONFIG ) kdDebug() << EP"destructor: deleting config object..." << endl; + delete s; } /** This method is equivalent to hitting the "PLAY" button @@ -41,7 +56,44 @@ KmkExtPlayer::~KmkExtPlayer() */ void KmkExtPlayer::play() { - + if( s->dbg() & KMK_DBG_EXT_PLAYER ) kdDebug() << EP"play: processing request..." << endl; + QProcess* ext_prog = new QProcess( this, "qproc_by_play"); + ext_prog->clearArguments(); + switch(currentPlayerType){ + case xmms : + ext_prog->addArgument( "xmms" ); + ext_prog->addArgument( "--play" ); + break; + case amarok : + ext_prog->addArgument( "amarok" ); + ext_prog->addArgument( "--play" ); + break; + case audacious : + ext_prog->addArgument( "audacious" ); + ext_prog->addArgument( "--play" ); + break; +/* case mplayer : + ext_prog->addArgument( "mplayer" ); + ext_prog->addArgument( "-p" ); + break; +*/ + default : + ext_prog->addArgument( "true" ); + break; + } + if( s->dbg() & KMK_DBG_EXT_PLAYER ) + { + kdDebug() << EP"play: will start the following:" << endl; + QStringList list = ext_prog->arguments(); + QStringList::Iterator it = list.begin(); + while( it != list.end() ) { + kdDebug() << EP"play: " << *it << endl; + ++it; + } + } + ext_prog->launch( "" ); + delete ext_prog; + if( s->dbg() & KMK_DBG_EXT_PLAYER ) kdDebug() << EP"play: done!" << endl; } /** This method is equivalent to hitting the "PAUSE" button @@ -49,7 +101,44 @@ void KmkExtPlayer::play() */ void KmkExtPlayer::pause() { - + if( s->dbg() & KMK_DBG_EXT_PLAYER ) kdDebug() << EP"pause: processing request..." << endl; + QProcess* ext_prog = new QProcess( this, "qproc_by_pause"); + ext_prog->clearArguments(); + switch(currentPlayerType){ + case xmms : + ext_prog->addArgument( "xmms" ); + ext_prog->addArgument( "--play-pause" ); + break; + case amarok : + ext_prog->addArgument( "amarok" ); + ext_prog->addArgument( "--play-pause" ); + break; + case audacious : + ext_prog->addArgument( "audacious" ); + ext_prog->addArgument( "--play-pause" ); + break; +/* case mplayer : + ext_prog->addArgument( "mplayer" ); + ext_prog->addArgument( "-p" ); + break; +*/ + default : + ext_prog->addArgument( "true" ); + break; + } + if( s->dbg() & KMK_DBG_EXT_PLAYER ) + { + kdDebug() << EP"pause: will start the following:" << endl; + QStringList list = ext_prog->arguments(); + QStringList::Iterator it = list.begin(); + while( it != list.end() ) { + kdDebug() << EP"pause: " << *it << endl; + ++it; + } + } + ext_prog->launch( "" ); + delete ext_prog; + if( s->dbg() & KMK_DBG_EXT_PLAYER ) kdDebug() << EP"pause: done!" << endl; } /** This method is equivalent to hitting the "STOP" button @@ -57,7 +146,44 @@ void KmkExtPlayer::pause() */ void KmkExtPlayer::stop() { - + if( s->dbg() & KMK_DBG_EXT_PLAYER ) kdDebug() << EP"stop: processing request..." << endl; + QProcess* ext_prog = new QProcess( this, "qproc_by_stop"); + ext_prog->clearArguments(); + switch(currentPlayerType){ + case xmms : + ext_prog->addArgument( "xmms" ); + ext_prog->addArgument( "--stop" ); + break; + case amarok : + ext_prog->addArgument( "amarok" ); + ext_prog->addArgument( "--stop" ); + break; + case audacious : + ext_prog->addArgument( "audacious" ); + ext_prog->addArgument( "--stop" ); + break; +/* case mplayer : + ext_prog->addArgument( "mplayer" ); + ext_prog->addArgument( "-p" ); + break; +*/ + default : + ext_prog->addArgument( "true" ); + break; + } + if( s->dbg() & KMK_DBG_EXT_PLAYER ) + { + kdDebug() << EP"stop: will start the following:" << endl; + QStringList list = ext_prog->arguments(); + QStringList::Iterator it = list.begin(); + while( it != list.end() ) { + kdDebug() << EP"stop: " << *it << endl; + ++it; + } + } + ext_prog->launch( "" ); + delete ext_prog; + if( s->dbg() & KMK_DBG_EXT_PLAYER ) kdDebug() << EP"stop: done!" << endl; } /** This method is equivalent to hitting the "NEXT/FORWARD" button @@ -65,7 +191,44 @@ void KmkExtPlayer::stop() */ void KmkExtPlayer::next() { - + if( s->dbg() & KMK_DBG_EXT_PLAYER ) kdDebug() << EP"next: processing request..." << endl; + QProcess* ext_prog = new QProcess( this, "qproc_by_next"); + ext_prog->clearArguments(); + switch(currentPlayerType){ + case xmms : + ext_prog->addArgument( "xmms" ); + ext_prog->addArgument( "--fwd" ); + break; + case amarok : + ext_prog->addArgument( "amarok" ); + ext_prog->addArgument( "--next" ); + break; + case audacious : + ext_prog->addArgument( "audacious" ); + ext_prog->addArgument( "--fwd" ); + break; +/* case mplayer : + ext_prog->addArgument( "mplayer" ); + ext_prog->addArgument( "-p" ); + break; +*/ + default : + ext_prog->addArgument( "true" ); + break; + } + if( s->dbg() & KMK_DBG_EXT_PLAYER ) + { + kdDebug() << EP"next: will start the following:" << endl; + QStringList list = ext_prog->arguments(); + QStringList::Iterator it = list.begin(); + while( it != list.end() ) { + kdDebug() << EP"next: " << *it << endl; + ++it; + } + } + ext_prog->launch( "" ); + delete ext_prog; + if( s->dbg() & KMK_DBG_EXT_PLAYER ) kdDebug() << EP"next: done!" << endl; } /** This method is equivalent to hitting the "PREVIOUS/BACKWARDS" button @@ -73,7 +236,44 @@ void KmkExtPlayer::next() */ void KmkExtPlayer::previous() { - + if( s->dbg() & KMK_DBG_EXT_PLAYER ) kdDebug() << EP"previous: processing request..." << endl; + QProcess* ext_prog = new QProcess( this, "qproc_by_previous"); + ext_prog->clearArguments(); + switch(currentPlayerType){ + case xmms : + ext_prog->addArgument( "xmms" ); + ext_prog->addArgument( "--rew" ); + break; + case amarok : + ext_prog->addArgument( "amarok" ); + ext_prog->addArgument( "--previous" ); + break; + case audacious : + ext_prog->addArgument( "audacious" ); + ext_prog->addArgument( "--rew" ); + break; +/* case mplayer : + ext_prog->addArgument( "mplayer" ); + ext_prog->addArgument( "-p" ); + break; +*/ + default : + ext_prog->addArgument( "true" ); + break; + } + if( s->dbg() & KMK_DBG_EXT_PLAYER ) + { + kdDebug() << EP"previous: will start the following:" << endl; + QStringList list = ext_prog->arguments(); + QStringList::Iterator it = list.begin(); + while( it != list.end() ) { + kdDebug() << EP"previous: " << *it << endl; + ++it; + } + } + ext_prog->launch( "" ); + delete ext_prog; + if( s->dbg() & KMK_DBG_EXT_PLAYER ) kdDebug() << EP"previous: done!" << endl; } /** This method take care of passing the @param playlist_file file @@ -83,7 +283,53 @@ void KmkExtPlayer::previous() */ void KmkExtPlayer::playPlaylist( const QString& playlist_file ) { - Q_UNUSED( playlist_file ); + if( s->dbg() & KMK_DBG_EXT_PLAYER ) kdDebug() << EP"playPlaylist: processing request..." << endl; + QProcess* ext_prog = new QProcess( this, "qproc_by_playPlaylist"); + ext_prog->clearArguments(); + switch(currentPlayerType){ + case xmms : + ext_prog->addArgument( "xmms" ); + ext_prog->addArgument( "--play" ); + ext_prog->addArgument( playlist_file ); + break; + case amarok : + ext_prog->addArgument( "amarok" ); + ext_prog->addArgument( "--load" ); + ext_prog->addArgument( playlist_file ); + break; + case audacious : + ext_prog->addArgument( "audacious" ); + ext_prog->addArgument( "--play" ); + ext_prog->addArgument( playlist_file ); + break; +/* case mplayer : + ext_prog->addArgument( "mplayer" ); + ext_prog->addArgument( "-p" ); + break; +*/ + default : + ext_prog->addArgument( "true" ); + break; + } + if( s->dbg() & KMK_DBG_EXT_PLAYER ) + { + kdDebug() << EP"playPlaylist: will start the following:" << endl; + QStringList list = ext_prog->arguments(); + QStringList::Iterator it = list.begin(); + while( it != list.end() ) { + kdDebug() << EP"playPlaylist: " << *it << endl; + ++it; + } + } + ext_prog->launch( "" ); + if (currentPlayerType == amarok) //amarok need special treatment... + { + kdDebug() << EP"playPlaylist: setting up AMARAOK workaround/time trickery..." << endl; + QTimer::singleShot( 2000, this, SLOT(call_play()) ); + kdDebug() << EP"playPlaylist: AMAROK shit (call it with play command after 2000ms) is done!" << endl; + } + delete ext_prog; + if( s->dbg() & KMK_DBG_EXT_PLAYER ) kdDebug() << EP"playPlaylist: done!" << endl; } /** This method take care of passing the @param playlist_file file @@ -92,7 +338,47 @@ void KmkExtPlayer::playPlaylist( const QString& playlist_file ) */ void KmkExtPlayer::addPlaylist( const QString& playlist_file ) { - Q_UNUSED( playlist_file ); + if( s->dbg() & KMK_DBG_EXT_PLAYER ) kdDebug() << EP"addPlaylist: processing request..." << endl; + QProcess* ext_prog = new QProcess( this, "qproc_by_addPlaylist"); + ext_prog->clearArguments(); + switch(currentPlayerType){ + case xmms : + ext_prog->addArgument( "xmms" ); + ext_prog->addArgument( "--enqueue" ); + ext_prog->addArgument( playlist_file ); + break; + case amarok : + ext_prog->addArgument( "amarok" ); + ext_prog->addArgument( "--enqueue" ); + ext_prog->addArgument( playlist_file ); + break; + case audacious : + ext_prog->addArgument( "audacious" ); + ext_prog->addArgument( "--enqueue" ); + ext_prog->addArgument( playlist_file ); + break; +/* case mplayer : + ext_prog->addArgument( "mplayer" ); + ext_prog->addArgument( "-p" ); + break; +*/ + default : + ext_prog->addArgument( "true" ); + break; + } + if( s->dbg() & KMK_DBG_EXT_PLAYER ) + { + kdDebug() << EP"addPlaylist: will start the following:" << endl; + QStringList list = ext_prog->arguments(); + QStringList::Iterator it = list.begin(); + while( it != list.end() ) { + kdDebug() << EP"addPlaylist: " << *it << endl; + ++it; + } + } + ext_prog->launch( "" ); + delete ext_prog; + if( s->dbg() & KMK_DBG_EXT_PLAYER ) kdDebug() << EP"addPlaylist: done!" << endl; } /** Whenever the config settings which drive KmkExtPlayer get changed, @@ -100,5 +386,23 @@ void KmkExtPlayer::addPlaylist( const QString& playlist_file ) */ void KmkExtPlayer::handleConfigChange() { + if( s->dbg() & KMK_DBG_CONFIG ) kdDebug() << EP"handleConfigChange: re-reading config..." << endl; + s->readSettings( kapp->config() ); + currentPlayerType = s->extPlayer(); + if( currentPlayerType >= KMK_NUMBER_OF_SUPPORTED_PLAYERS ) + { + if( s->dbg() & KMK_DBG_EXT_PLAYER ) + kdDebug() << EP"handleConfigChange: found invalid player type in config - fixing it..."<< endl; + currentPlayerType = 0; // 0 should be "xmms" + } + if( s->dbg() & KMK_DBG_EXT_PLAYER ) + kdDebug() << EP"handleConfigChange: using [" << kmkExtPlayersNames[s->extPlayer()] + << "] as external player."<< endl; + if( s->dbg() & KMK_DBG_CONFIG ) kdDebug() << EP"handleConfigChange: done!" << endl; +} + +void KmkExtPlayer::call_play() +{ + play(); } diff --git a/src/kmkexternalplayer.h b/src/kmkexternalplayer.h index 5b27879..39219e0 100644 --- a/src/kmkexternalplayer.h +++ b/src/kmkexternalplayer.h @@ -29,13 +29,13 @@ #include "kmkglobalsettings.h" +#define KMK_NUMBER_OF_SUPPORTED_PLAYERS 5 /** * @short supported external player types * * The first one should be equal to 0, so there is mapping between player types * if they are listed in the same order for KmkSettingsDialog::cmb_Player too */ -#define KMK_NUMBER_OF_SUPPORTED_PLAYERS 5 enum KmkExtPlayers { xmms=0, amarok=1, audacious=2, mplayer=3, xmms2=4 }; static const char * kmkExtPlayersNames[] = { @@ -122,6 +122,9 @@ public: */ void handleConfigChange(); +private slots: + void call_play(); + private: /** This is the default destructor */ unsigned short currentPlayerType; @@ -130,6 +133,10 @@ private: * passed to the player, specified by the user. */ QString e_param1, e_param2, e_param3; + + /** This one is used to see + */ + KmkGlobalSettings * s; }; -- 2.11.4.GIT