You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdeutils/superkaramba/src/noatunsensor.cpp

235 lines
5.7 KiB

/***************************************************************************
* Copyright (C) 2003 by Hans Karlsson *
* karlsson.h@home.se *
* *
* 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 option) any later version. *
***************************************************************************/
#include "noatunsensor.h"
NoatunSensor::NoatunSensor( int interval, DCOPClient *c)
: Sensor( interval )
{
client = c;
noatunID = "noatun";
}
NoatunSensor::~NoatunSensor()
{}
void NoatunSensor::update()
{
TQString format;
SensorParams *sp;
Meter *meter;
TQObjectListIt it( *objList );
TQString title;
int songLength = 0;
int currentTime = 0;
bool running = isRunning();
if( running )
{
title = getTitle();
if( title.isEmpty() )
title = "Noatun";
currentTime = getTime();
if( currentTime == -1 )
currentTime = 0;
songLength = getLength();
if( songLength == -1 )
songLength = 0;
}
while (it != 0)
{
sp = (SensorParams*)(*it);
meter = sp->getMeter();
if( running )
{
format = sp->getParam("FORMAT");
if (format.length() == 0 )
{
format = "%title %time / %length";
}
if( format.lower() == "%ms" )
{
meter->setMax( songLength );
meter->setValue( currentTime );
}
else
if ( format.lower() == "%full" )
{
meter->setValue( 1 );
}
else
{
format.replace( TQRegExp("%title", false), title );
format.replace( TQRegExp("%id", false), noatunID );
format.replace( TQRegExp("%length", false), TQTime( 0,0,0 ).
addMSecs( songLength )
.toString( "h:mm:ss" ) );
format.replace( TQRegExp("%time", false), TQTime( 0,0,0 ).
addMSecs( currentTime )
.toString( "h:mm:ss" ) );
format.replace( TQRegExp("%remain", false), TQTime( 0,0,0 ).
addMSecs( songLength )
.addMSecs(-currentTime )
.toString( "h:mm:ss" ) );
meter->setValue(format);
}
}
else
{
meter->setValue("");
}
++it;
}
}
bool NoatunSensor::isRunning()
{
TQRegExp rx("(noatun)|(noatun-\\d+)");
QCStringList list = client->registeredApplications();
TQValueList<TQCString>::iterator it;
it = list.begin();
bool foundNoatun = false;
noatunID = "noatun";
while( foundNoatun == false && it != list.end() )
{
if( rx.search( *it ) != -1 )
{
foundNoatun = true;
noatunID = *it;
}
++it;
}
return ( client->isApplicationRegistered ( noatunID ) );
}
TQString NoatunSensor::getTitle()
{
TQByteArray data, replyData;
TQCString replyType;
TQString result;
TQDataStream arg(data, IO_WriteOnly);
arg << 5;
if (!client->call( noatunID, "Noatun", "title()",
data, replyType, replyData))
{
result = "";
tqDebug("there was some error using DCOP.");
}
else
{
TQDataStream reply(replyData, IO_ReadOnly);
if (replyType == TQSTRING_OBJECT_NAME_STRING)
{
reply >> result;
result.replace( TQRegExp("_")," " );
result.replace( TQRegExp(".mp3$"),"" );
}
else
{
result = "";
tqDebug("title returned an unexpected type of reply!");
}
}
return result;
}
int NoatunSensor::getTime()
{
TQByteArray data, replyData;
TQCString replyType;
int result;
TQDataStream arg(data, IO_WriteOnly);
arg << 5;
if (!client->call( noatunID, "Noatun", "position()",
data, replyType, replyData))
{
result = 0;
tqDebug("there was some error using DCOP.");
}
else
{
TQDataStream reply(replyData, IO_ReadOnly);
if (replyType == "int")
{
reply >> result;
}
else
{
result = 0;
tqDebug("title returned an unexpected type of reply!");
}
}
return result;
}
int NoatunSensor::getLength()
{
TQByteArray data, replyData;
TQCString replyType;
int result;
TQDataStream arg(data, IO_WriteOnly);
arg << 5;
if (!client->call( noatunID, "Noatun", "length()",
data, replyType, replyData))
{
result = 0;
tqDebug("there was some error using DCOP.");
}
else
{
TQDataStream reply(replyData, IO_ReadOnly);
if (replyType == "int")
{
reply >> result;
}
else
{
result = 0;
tqDebug("title returned an unexpected type of reply!");
}
}
return result;
}
void NoatunSensor::setMaxValue( SensorParams *sp)
{
Meter *meter;
meter = sp->getMeter();
TQString f;
f = sp->getParam("FORMAT");
if ( f == "%full" )
meter->setMax( 1 );
}