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.
217 lines
6.3 KiB
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);
|
|
}
|