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.
tderadio/src/radiostation.cpp

217 lines
6.3 KiB

/***************************************************************************
radiostation.cpp - description
-------------------
begin : Sat Feb 2 2002
copyright : (C) 2002 by Martin Witte / Frank Schwanz
email : witte@kawo1.rwth-aachen.de / schwanz@fh-brandenburg.de
***************************************************************************/
/***************************************************************************
* *
* 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 "include/radiostation.h"
#include "include/radiostation-config.h"
#include <unistd.h>
#include <time.h>
#include <fcntl.h>
extern const char *StationNameElement;
extern const char *StationShortNameElement;
extern const char *StationIconStringElement;
extern const char *StationVolumePresetElement;
extern const char *StationIDElement;
const char *StationNameElement = "name";
const char *StationShortNameElement = "shortname";
const char *StationIconStringElement = "icon";
const char *StationVolumePresetElement = "volumepreset";
const char *StationIDElement = "stationID";
const char *dev_urandom_radiostations = "/dev/urandom";
/////////////////////////////////////////////////////////////////////////////
TQDict<RadioStation> *RadioStation::stationClassRegistry = 0;
/////////////////////////////////////////////////////////////////////////////
KDE_EXPORT RegisterStationClass registerStationClass;
extern "C" const KDE_EXPORT UndefinedRadioStation undefinedRadioStation (registerStationClass);
/////////////////////////////////////////////////////////////////////////////
RadioStation::RadioStation(RegisterStationClass, const TQString &classname)
: m_stationID(TQString()), // mark this station as a prototype station
// so that we can create later a real stationID
m_name(TQString()),
m_shortName(TQString()),
m_initialVolume(-1),
m_iconName(TQString())
{
if (! stationClassRegistry)
stationClassRegistry = new TQDict<RadioStation>;
stationClassRegistry->insert(classname, this);
}
RadioStation::RadioStation()
: m_name(TQString()),
m_shortName(TQString()),
m_initialVolume(-1),
m_iconName(TQString())
{
generateNewStationID();
}
RadioStation::RadioStation(const TQString &name, const TQString &shortName)
: m_name(name),
m_shortName(shortName),
m_initialVolume(-1),
m_iconName(TQString())
{
generateNewStationID();
}
RadioStation::RadioStation(const RadioStation &s)
: m_stationID(s.m_stationID),
m_name(s.m_name),
m_shortName(s.m_shortName),
m_initialVolume(s.m_initialVolume),
m_iconName(s.m_iconName)
{
// create a real stationID if "s" is a prototype
if (m_stationID.isNull())
generateNewStationID();
}
RadioStation::~RadioStation()
{
}
void RadioStation::copyDescriptionFrom(const RadioStation &rs)
{
m_name = rs.m_name;
m_shortName = rs.m_shortName;
m_iconName = rs.m_iconName;
m_stationID = rs.m_stationID;
}
void RadioStation::generateNewStationID()
{
const int buffersize = 32;
unsigned char buffer[buffersize];
TQString stime, srandom = TQString();
stime.setNum(time(NULL));
int fd = open (dev_urandom_radiostations, O_RDONLY);
read(fd, buffer, buffersize);
close(fd);
for (int i = 0; i < buffersize; ++i)
srandom += TQString().sprintf("%02X", (unsigned int)buffer[i]);
m_stationID = stime + srandom;
}
RadioStation const *RadioStation::getStationClass(const TQString &classname)
{
if (stationClassRegistry)
return stationClassRegistry->find(classname);
else
return NULL;
}
bool RadioStation::setProperty(const TQString &pn, const TQString &val)
{
bool retval = false;
if (pn == StationIDElement) {
m_stationID = val;
retval = true;
} else if (pn == StationNameElement) {
m_name = val;
retval = true;
} else if (pn == StationShortNameElement) {
m_shortName = val;
retval = true;
} else if (pn == StationIconStringElement) {
m_iconName = val;
retval = true;
} else if (pn == StationVolumePresetElement) {
float x = val.toFloat(&retval);
if (retval)
m_initialVolume = x;
}
return retval;
}
TQString RadioStation::getProperty(const TQString &pn) const
{
if (pn == StationIDElement) {
return m_stationID;
} else if (pn == StationNameElement) {
return m_name;
} else if (pn == StationShortNameElement) {
return m_shortName;
} else if (pn == StationIconStringElement) {
return m_iconName;
} else if (pn == StationVolumePresetElement) {
return TQString().setNum(m_initialVolume);
} else {
return TQString();
}
}
TQStringList RadioStation::getPropertyNames() const
{
TQStringList l;
l.push_back(StationIDElement);
l.push_back(StationNameElement);
l.push_back(StationShortNameElement);
l.push_back(StationIconStringElement);
l.push_back(StationVolumePresetElement);
return l;
}
bool RadioStation::operator == (const RadioStation &x) const
{
return m_stationID == x.m_stationID &&
m_name == x.m_name &&
m_shortName == x.m_shortName &&
m_initialVolume == x.m_initialVolume &&
m_iconName == x.m_iconName;
}
/////////////////////////////////////////////////////////////////////////
int UndefinedRadioStation::compare(const RadioStation &_s) const
{
UndefinedRadioStation const *s = dynamic_cast<UndefinedRadioStation const*>(&_s);
if (!s)
return -1;
return 0;
}
RadioStationConfig *UndefinedRadioStation::createEditor() const
{
return new UndefinedRadioStationConfig(NULL);
}