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()
{
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