Rivendellaudio/lib/rdreplicator.cpp
Fred Gleason 887d297a19 2024-02-05 Fred Gleason <fredg@paravelsystems.com>
* Added a 'REPLICATORS.PROGRAM_CODE' field to the database.
	* Incremented the database version to 372.
	* Added 'RDReplicator::programCode()' and
	'RDReplicator::setProgramCode()' methods.
	* Added a 'Program Code' control to the 'Rivendell Replicators'
	dialog in rdadmin(1).
	* Renamed the 'Citadel X-Digital Portal' replicator to
	'X-Digital National ISCI Model'.
	* Added a 'X-Digital Cue Model' replicator.

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
2024-02-05 17:49:26 -05:00

315 lines
5.9 KiB
C++

// rdreplicator.cpp
//
// Abstract a Rivendell replicator configuration
//
// (C) Copyright 2010-2021 Fred Gleason <fredg@paravelsystems.com>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
// published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public
// License along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
#include "rdconf.h"
#include "rddb.h"
#include "rdescape_string.h"
#include "rdreplicator.h"
RDReplicator::RDReplicator(const QString &name)
{
replicator_name=name;
}
QString RDReplicator::name() const
{
return replicator_name;
}
RDReplicator::Type RDReplicator::type() const
{
return (RDReplicator::Type)GetValue("TYPE_ID").toUInt();
}
void RDReplicator::setType(RDReplicator::Type type) const
{
SetRow("TYPE_ID",(unsigned)type);
}
QString RDReplicator::stationName() const
{
return GetValue("STATION_NAME").toString();
}
void RDReplicator::setStationName(const QString &str)
{
SetRow("STATION_NAME",str);
}
QString RDReplicator::programCode() const
{
return GetValue("PROGRAM_CODE").toString();
}
void RDReplicator::setProgramCode(const QString &str)
{
SetRow("PROGRAM_CODE",str);
}
QString RDReplicator::description() const
{
return GetValue("DESCRIPTION").toString();
}
void RDReplicator::setDescription(const QString &str) const
{
SetRow("DESCRIPTION",str);
}
RDSettings::Format RDReplicator::format() const
{
return (RDSettings::Format)GetValue("FORMAT").toUInt();
}
void RDReplicator::setFormat(RDSettings::Format fmt) const
{
SetRow("FORMAT",(unsigned)fmt);
}
unsigned RDReplicator::channels() const
{
return GetValue("CHANNELS").toUInt();
}
void RDReplicator::setChannels(unsigned chans) const
{
SetRow("CHANNELS",chans);
}
unsigned RDReplicator::sampleRate() const
{
return GetValue("SAMPRATE").toUInt();
}
void RDReplicator::setSampleRate(unsigned rate) const
{
SetRow("SAMPRATE",rate);
}
unsigned RDReplicator::bitRate() const
{
return GetValue("BITRATE").toUInt();
}
void RDReplicator::setBitRate(unsigned rate) const
{
SetRow("BITRATE",rate);
}
unsigned RDReplicator::quality() const
{
return GetValue("QUALITY").toUInt();
}
void RDReplicator::setQuality(unsigned qual) const
{
SetRow("QUALITY",qual);
}
QString RDReplicator::url() const
{
return GetValue("URL").toString();
}
void RDReplicator::setUrl(const QString &str)
{
SetRow("URL",str);
}
QString RDReplicator::urlUsername() const
{
return GetValue("URL_USERNAME").toString();
}
void RDReplicator::setUrlUsername(const QString &str) const
{
SetRow("URL_USERNAME",str);
}
QString RDReplicator::urlPassword() const
{
return QByteArray::fromBase64(GetValue("URL_PASSWORD").toString().toUtf8());
}
void RDReplicator::setUrlPassword(const QString &str) const
{
SetRow("URL_PASSWORD",str.toUtf8().toBase64());
}
bool RDReplicator::enableMetadate() const
{
return RDBool(GetValue("ENABLE_PASSWORD").toString());
}
void RDReplicator::setEnableMetadata(bool state) const
{
SetRow("ENABLE_METADATA",RDYesNo(state));
}
QString RDReplicator::typeString() const
{
return RDReplicator::typeString(type());
}
int RDReplicator::normalizeLevel() const
{
return GetValue("NORMALIZATION_LEVEL").toInt();
}
void RDReplicator::setNormalizeLevel(int lvl) const
{
SetRow("NORMALIZATION_LEVEL",lvl);
}
QString RDReplicator::typeString(RDReplicator::Type type)
{
QString ret="Unknown type";
switch(type) {
case RDReplicator::TypeCitadelXds:
ret="X-Digital National ISCI Model";
break;
case RDReplicator::TypeWw1Ipump:
ret="Westwood One Wegener Portal";
break;
case RDReplicator::TypeXdsCue:
ret="X-Digital Cue Model";
break;
case RDReplicator::TypeLast:
break;
}
return ret;
}
QDate RDReplicator::roundDownToDow(const QDate &date,int dow)
{
return date.addDays(-(date.dayOfWeek()-dow));
}
QDateTime RDReplicator::roundDownToDow(const QDateTime &dt,int dow)
{
QDateTime ret=dt;
ret.setDate(RDReplicator::roundDownToDow(dt.date(),dow));
return ret;
}
QVariant RDReplicator::GetValue(const QString &field) const
{
QVariant ret;
QString sql=QString("select `")+
field+"` from `REPLICATORS` where "+
"`NAME`='"+RDEscapeString(replicator_name)+"'";
RDSqlQuery *q=new RDSqlQuery(sql);
if(q->first()) {
ret=q->value(0);
}
delete q;
return ret;
}
void RDReplicator::SetRow(const QString &param,const QString &value) const
{
QString sql;
sql=QString("update `REPLICATORS` set `")+
param+"`='"+RDEscapeString(value)+"' where "+
"`NAME`='"+RDEscapeString(replicator_name)+"'";
RDSqlQuery::apply(sql);
}
void RDReplicator::SetRow(const QString &param,const QByteArray &value) const
{
QString sql;
if(value.size()==0) {
sql=QString("update `REPLICATORS` set `")+
param+"`=NULL where "+
"`NAME`='"+RDEscapeString(replicator_name)+"'";
}
else {
sql=QString("update `REPLICATORS` set `")+
param+"`='"+RDEscapeString(value)+"' where "+
"`NAME`='"+RDEscapeString(replicator_name)+"'";
}
RDSqlQuery::apply(sql);
}
void RDReplicator::SetRow(const QString &param,int value) const
{
QString sql;
sql=QString("update `REPLICATORS` set `")+
param+QString::asprintf("`=%d where ",value)+
"`NAME`='"+RDEscapeString(replicator_name)+"'";
RDSqlQuery::apply(sql);
}
void RDReplicator::SetRow(const QString &param,unsigned value) const
{
QString sql;
sql=QString("update `REPLICATORS` set `")+
param+QString::asprintf("`=%u where ",value)+
"`NAME`='"+RDEscapeString(replicator_name)+"'";
RDSqlQuery::apply(sql);
}