Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as C++ by cppmaniac ( 17 years ago )
#include "utils.h"
#include <QDBusReply>
#include <QList>
#include <QDBusConnectionInterface>

bool ExecChecker::amarokExec&#40;&#41;
{
   QDBusInterface inter("org.kde.amarok","/Player");
   return inter.isValid();
}
void ExecChecker::startAmarok()
{
   KProcess proc;
   proc.setProgram("amarok");
   proc.start();
   proc.waitForFinished();
}
AmarokListener::AmarokListener ( QObject*)
{
   QDBusConnection conn=QDBusConnection::sessionBus();
   QDBusConnectionInterface*iface=conn.interface();
   this->connect(iface,SIGNAL(serviceOwnerChanged(QString,QString,QString)),this,SLOT(onServiceUnreg(QString,QString,QString)));
}
void AmarokListener::onServiceUnreg(QString name,QString old,QString nw)
{
   if(name=="org.kde.amarok"){
     if(old==""){
       emit amarokShutup();
     }
     else if(nw==""){
       emit amarokShutdown();
     }
     
   }
   
   
}
AmarokInterface::AmarokInterface(QObject*)
{
   QDBusConnection conn=QDBusConnection::sessionBus();
   tracklist=new QDBusInterface("org.kde.amarok","/TrackList");
   player=new QDBusInterface("org.kde.amarok","/Player");
   conn.connect("org.kde.amarok",
                "/Player",
                "org.freedesktop.MediaPlayer",
                "StatusChange",
                this,
                SLOT(onStatusChange(QList<int> )));
  
   conn.connect("org.kde.amarok",
                "/Player",
                "org.freedesktop.MediaPlayer",
                "TrackChange",
                this,
                SLOT(onTrackChange(QMap<QString,QVariant> )));
}
AmarokInterface::~AmarokInterface()
{
   if(player)
     delete player;
   if(tracklist)
     delete tracklist;
}
void AmarokInterface::play()
{
   player->call("PlayPause");
}
void AmarokInterface::stop()
{
   player->call("Stop");
}
void AmarokInterface::next()
{
   player->call("Next");
}
void AmarokInterface::prev()
{
   player->call("Prev");
}
bool AmarokInterface::isPlaying()
{
   int val=3;//error code
   QDBusReply<QDBusArgument> rep=player->call("GetStatus");
   if(rep.isValid()){
     QDBusArgument arg=rep.value();
     arg.beginArray();
     arg>>val;
     
   }
   
   return val==0;
}
int AmarokInterface::getPosition()
{
   int val=0;
   QDBusReply<int>rep=player->call("PositionGet");
   if(rep.isValid()){
     val=rep.value();
   }
   return val/1000;
}
int AmarokInterface::getTotalTime()
{
   int total=0;
   QDBusReply<int>rep=tracklist->call("GetCurrentTrack");
   if(rep.isValid()){
     int curr=rep.value();
     
     QDBusReply< QMap<QString,QVariant> >map=tracklist->callWithArgumentList(QDBus::Block,
              "GetMetadata",QList<QVariant>()<<curr);
     if(map.isValid()){
       total=(map.value())["time"].toInt();
     }
   }
   return total;
}
void AmarokInterface::setPosition(int pos)
{
   player->callWithArgumentList(QDBus::Block,"PositionSet",QList<QVariant>()<<pos);
}
void AmarokInterface::onStatusChange(QList<int> rez)
{
   emit statusChange(rez[0],rez[1],rez[2],rez[3]);//rez[0]==0->playing rez[0]==1->pause rez[0]==2->stop
}
void AmarokInterface::onTrackChange(QMap<QString,QVariant>)
{
   emit trackChange();
}

 

Revise this Paste

Your Name: Code Language: