2018-07-20 Fred Gleason <fredg@paravelsystems.com>

* Removed the Auxiliary Fields from the podcasting system.
	* Fixed a regression in the RDFeed system that caused segfaults
	when accessing channel XML.
This commit is contained in:
Fred Gleason 2018-07-20 13:04:44 -04:00
parent c2f11d76be
commit 0dc7a4e698
36 changed files with 222 additions and 2761 deletions

View File

@ -17197,3 +17197,7 @@
2018-07-19 Fred Gleason <fredg@paravelsystems.com>
* Added a 'CAST_DOWNLOADS' table to the database.
* Incremented the database version to 294.
2018-07-20 Fred Gleason <fredg@paravelsystems.com>
* Removed the Auxiliary Fields from the podcasting system.
* Fixed a regression in the RDFeed system that caused segfaults
when accessing channel XML.

View File

@ -103,7 +103,6 @@ dist_librd_la_SOURCES = dbversion.h\
rdconf.cpp rdconf.h\
rdconfig.cpp rdconfig.h\
rdcopyaudio.cpp rdcopyaudio.h\
rdcreateauxfieldstable.cpp rdcreateauxfieldstable.h\
rdcueedit.cpp rdcueedit.h\
rdcueeditdialog.cpp rdcueeditdialog.h\
rdcut.cpp rdcut.h\

View File

@ -1,32 +0,0 @@
// rdrdcreateauxfieldstable.cpp
//
// Create a new, empty Rivendell log table.
//
// (C) Copyright 2002-2003,2016-2017 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 <rddb.h>
void RDCreateAuxFieldsTable(QString keyname,RDConfig *config)
{
keyname.replace(" ","_");
QString sql=QString("create table if not exists `")+
keyname+"_FIELDS` (CAST_ID int unsigned not null primary key) "+
config->createTablePostfix();
RDSqlQuery *q=new RDSqlQuery(sql);
delete q;
}

View File

@ -1,31 +0,0 @@
// rdrdcreateauxfieldstable.h
//
// Create a new, empty Rivendell log table.
//
// (C) Copyright 2002-2003,2016-2017 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.
//
#ifndef RDRDCREATEAUXFIELDSTABLE_H
#define RDRDCREATEAUXFIELDSTABLE_H
#include <qstring.h>
#include <rdconfig.h>
void RDCreateAuxFieldsTable(QString keyname,RDConfig *config);
#endif // RDRDCREATEAUXFIELDSTABLE_H

View File

@ -76,19 +76,23 @@ void RDIncrementCastCount(QString keyname,unsigned cast_id)
"FEED_KEY_NAME=\""+RDEscapeString(keyname)+"\" && "+
QString().sprintf("(CAST_ID=%u)&&",cast_id)+
"(ACCESS_DATE=\""+RDEscapeString(now.toString("yyyy-MM-dd"))+"\")";
printf("SQL1: %s\n",(const char *)sql);
q=new RDSqlQuery(sql);
if(q->first()) {
sql=QString("update CAST_DOWNLOADS set ")+
QString().sprintf("ACCESS_COUNT=%u where ",q->value(0).toUInt()+1)+
"FEED_KEY_NAME=\""+RDEscapeString(keyname)+"\" && "+
QString().sprintf("(CAST_ID=%u)&&",cast_id)+
"(ACCESS_DATE=\""+RDEscapeString(now.toString("yyyy-MM-dd"))+"\")";
}
else {
sql=QString("insert into CAST_DOWNLOADS set ")+
"FEED_KEY_NAME=\""+RDEscapeString(keyname)+"\","+
QString().sprintf("CAST_ID=%u,",cast_id)+
"ACCESS_DATE=\""+RDEscapeString(now.toString("yyyy-MM-dd"))+"\","+
"ACCESS_COUNT=1";
}
printf("SQL2: %s\n",(const char *)sql);
RDSqlQuery::apply(sql);
delete q;
}

View File

@ -43,9 +43,7 @@ all:
bin_PROGRAMS = rdadmin
dist_rdadmin_SOURCES = add_aux_field.cpp add_aux_field.h\
add_encoder.cpp add_encoder.h\
add_feed.cpp add_feed.h\
dist_rdadmin_SOURCES = add_feed.cpp add_feed.h\
add_group.cpp add_group.h\
add_hostvar.cpp add_hostvar.h\
add_matrix.cpp add_matrix.h\
@ -57,13 +55,11 @@ dist_rdadmin_SOURCES = add_aux_field.cpp add_aux_field.h\
add_user.cpp add_user.h\
autofill_carts.cpp autofill_carts.h\
edit_audios.cpp edit_audios.h\
edit_aux_field.cpp edit_aux_field.h\
edit_backup.cpp edit_backup.h\
edit_cartslots.cpp edit_cartslots.h\
edit_channelgpios.cpp edit_channelgpios.h\
edit_decks.cpp edit_decks.h\
edit_dropbox.cpp edit_dropbox.h\
edit_encoder.cpp edit_encoder.h\
edit_endpoint.cpp edit_endpoint.h\
edit_feed.cpp edit_feed.h\
edit_feed_perms.cpp edit_feed_perms.h\
@ -99,9 +95,7 @@ dist_rdadmin_SOURCES = add_aux_field.cpp add_aux_field.h\
help_audios.cpp help_audios.h\
importfields.cpp importfields.h\
info_dialog.cpp info_dialog.h\
list_aux_fields.cpp list_aux_fields.h\
list_dropboxes.cpp list_dropboxes.h\
list_encoders.cpp list_encoders.h\
list_endpoints.cpp list_endpoints.h\
list_feeds.cpp list_feeds.h\
list_gpis.cpp list_gpis.h\
@ -126,9 +120,7 @@ dist_rdadmin_SOURCES = add_aux_field.cpp add_aux_field.h\
view_adapters.cpp view_adapters.h\
view_node_info.cpp view_node_info.h
nodist_rdadmin_SOURCES = moc_add_aux_field.cpp\
moc_add_encoder.cpp\
moc_add_feed.cpp\
nodist_rdadmin_SOURCES = moc_add_feed.cpp\
moc_add_group.cpp\
moc_add_hostvar.cpp\
moc_add_matrix.cpp\
@ -140,13 +132,11 @@ nodist_rdadmin_SOURCES = moc_add_aux_field.cpp\
moc_add_user.cpp\
moc_autofill_carts.cpp\
moc_edit_audios.cpp\
moc_edit_aux_field.cpp\
moc_edit_backup.cpp\
moc_edit_cartslots.cpp\
moc_edit_channelgpios.cpp\
moc_edit_decks.cpp\
moc_edit_dropbox.cpp\
moc_edit_encoder.cpp\
moc_edit_endpoint.cpp\
moc_edit_feed.cpp\
moc_edit_feed_perms.cpp\
@ -181,9 +171,7 @@ nodist_rdadmin_SOURCES = moc_add_aux_field.cpp\
moc_help_audios.cpp\
moc_importfields.cpp\
moc_info_dialog.cpp\
moc_list_aux_fields.cpp\
moc_list_dropboxes.cpp\
moc_list_encoders.cpp\
moc_list_endpoints.cpp\
moc_list_feeds.cpp\
moc_list_gpis.cpp\

View File

@ -1,172 +0,0 @@
// add_aux_field.cpp
//
// Add an Auxiliary Field for an RSS Feed
//
// (C) Copyright 2002-2007,2016 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 <qmessagebox.h>
#include <rdescape_string.h>
#include <rddb.h>
#include <add_aux_field.h>
AddAuxField::AddAuxField(unsigned feed_id,unsigned *field_id,QWidget *parent)
: QDialog(parent,"",true)
{
add_feed_id=feed_id;
add_field_id=field_id;
setCaption(tr("Add Aux Field"));
//
// Fix the Window Size
//
setMinimumWidth(sizeHint().width());
setMaximumWidth(sizeHint().width());
setMinimumHeight(sizeHint().height());
setMaximumHeight(sizeHint().height());
//
// Create Fonts
//
QFont bold_font=QFont("Helvetica",12,QFont::Bold);
bold_font.setPixelSize(12);
QFont font=QFont("Helvetica",12,QFont::Normal);
font.setPixelSize(12);
//
// Variable Name
//
add_varname_edit=new QLineEdit(this);
add_varname_edit->setGeometry(165,10,130,20);
add_varname_edit->setMaxLength(11);
QLabel *label=
new QLabel(add_varname_edit,tr("Variable Name: "),this);
label->setGeometry(10,13,105,20);
label->setFont(bold_font);
label->setAlignment(AlignRight);
label=new QLabel(add_varname_edit,tr("%AUX_"),this);
label->setGeometry(120,13,45,20);
label->setFont(font);
label->setAlignment(AlignRight);
label=new QLabel(add_varname_edit,tr("%"),this);
label->setGeometry(295,13,30,20);
label->setFont(font);
label->setAlignment(AlignLeft);
//
// Caption
//
add_caption_edit=new QLineEdit(this);
add_caption_edit->setGeometry(120,37,sizeHint().width()-130,20);
add_caption_edit->setMaxLength(64);
label=new QLabel(add_caption_edit,tr("Caption: "),this);
label->setGeometry(10,37,105,20);
label->setFont(bold_font);
label->setAlignment(AlignRight);
//
// Ok Button
//
QPushButton *button=new QPushButton(this);
button->setGeometry(sizeHint().width()-180,sizeHint().height()-60,80,50);
button->setDefault(true);
button->setFont(bold_font);
button->setText(tr("&OK"));
connect(button,SIGNAL(clicked()),this,SLOT(okData()));
//
// Cancel Button
//
button=new QPushButton(this);
button->setGeometry(sizeHint().width()-90,sizeHint().height()-60,
80,50);
button->setFont(bold_font);
button->setText(tr("&Cancel"));
connect(button,SIGNAL(clicked()),this,SLOT(cancelData()));
}
QSize AddAuxField::sizeHint() const
{
return QSize(400,127);
}
QSizePolicy AddAuxField::sizePolicy() const
{
return QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
}
void AddAuxField::okData()
{
QString sql;
RDSqlQuery *q;
sql=QString().sprintf("select ID from AUX_METADATA \
where (FEED_ID=%u)&&(VAR_NAME=\"%%AUX_%s%%\")",
add_feed_id,(const char *)add_varname_edit->text());
q=new RDSqlQuery(sql);
if(q->first()) {
delete q;
QMessageBox::warning(this,tr("Name Exists"),
tr("That variable name already exists!"));
return;
}
delete q;
sql=QString().sprintf("insert into AUX_METADATA set VAR_NAME=\"%%AUX_%s%%\",\
CAPTION=\"%s\",FEED_ID=%u",
(const char *)RDEscapeString(add_varname_edit->text()),
(const char *)RDEscapeString(add_caption_edit->text()),
add_feed_id);
q=new RDSqlQuery(sql);
delete q;
sql=QString().sprintf("select ID from AUX_METADATA \
where (FEED_ID=%u)&&(VAR_NAME=\"%%AUX_%s%%\")",
add_feed_id,
(const char *)RDEscapeString(add_varname_edit->
text()));
q=new RDSqlQuery(sql);
if(q->first()) {
*add_field_id=q->value(0).toUInt();
}
delete q;
sql=QString().sprintf("select KEY_NAME from FEEDS where ID=%u",add_feed_id);
q=new RDSqlQuery(sql);
if(q->first()) {
QString keyname=q->value(0).toString();
delete q;
keyname.replace(" ","_");
sql=QString().sprintf("alter table %s_FIELDS add column AUX_%s char(255)",
(const char *)keyname,
(const char *)RDEscapeString(add_varname_edit->
text()));
q=new RDSqlQuery(sql);
}
delete q;
done(0);
}
void AddAuxField::cancelData()
{
done(-1);
}

View File

@ -1,52 +0,0 @@
// add_aux_field.h
//
// Add an Auxiliary Field for an RSS Feed
//
// (C) Copyright 2002-2007,2016 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.
//
#ifndef ADD_AUX_FIELD_H
#define ADD_AUX_FIELD_H
#include <qdialog.h>
#include <qsqldatabase.h>
#include <qlabel.h>
#include <qpushbutton.h>
#include <qlineedit.h>
#include <qcombobox.h>
class AddAuxField : public QDialog
{
Q_OBJECT
public:
AddAuxField(unsigned feed_id,unsigned *field_id,QWidget *parent=0);
QSize sizeHint() const;
QSizePolicy sizePolicy() const;
private slots:
void okData();
void cancelData();
private:
QLineEdit *add_varname_edit;
QLineEdit *add_caption_edit;
unsigned add_feed_id;
unsigned *add_field_id;
};
#endif // ADD_AUX_FIELD

View File

@ -1,145 +0,0 @@
// add_encoder.cpp
//
// Add a Rivendell Encoder
//
// (C) Copyright 2002,2016-2018 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 <qdialog.h>
#include <qstring.h>
#include <qpushbutton.h>
#include <qlabel.h>
#include <qmessagebox.h>
#include <qdatetime.h>
#include <rddb.h>
#include <rdescape_string.h>
#include <rdcreateauxfieldstable.h>
#include <edit_encoder.h>
#include <add_encoder.h>
AddEncoder::AddEncoder(QString *encname,const QString &stationname,
QWidget *parent)
: QDialog(parent,"",true)
{
encoder_name=encname;
encoder_stationname=stationname;
//
// Fix the Window Size
//
setMinimumWidth(sizeHint().width());
setMaximumWidth(sizeHint().width());
setMinimumHeight(sizeHint().height());
setMaximumHeight(sizeHint().height());
setCaption(tr("Add Encoder"));
//
// Create Fonts
//
QFont font=QFont("Helvetica",12,QFont::Bold);
font.setPixelSize(12);
QFont user_font=QFont("Helvetica",12,QFont::Normal);
user_font.setPixelSize(12);
//
// Encoder Name
//
encoder_name_edit=new QLineEdit(this);
encoder_name_edit->setGeometry(145,11,sizeHint().width()-150,19);
encoder_name_edit->setMaxLength(32);
QLabel *label=new QLabel(encoder_name_edit,tr("&New Encoder Name:"),this);
label->setGeometry(10,11,130,19);
label->setFont(font);
label->setAlignment(AlignRight|AlignVCenter|ShowPrefix);
//
// Ok Button
//
QPushButton *ok_button=new QPushButton(this);
ok_button->setGeometry(sizeHint().width()-180,sizeHint().height()-60,80,50);
ok_button->setDefault(true);
ok_button->setFont(font);
ok_button->setText(tr("&OK"));
connect(ok_button,SIGNAL(clicked()),this,SLOT(okData()));
//
// Cancel Button
//
QPushButton *cancel_button=new QPushButton(this);
cancel_button->setGeometry(sizeHint().width()-90,sizeHint().height()-60,
80,50);
cancel_button->setFont(font);
cancel_button->setText(tr("&Cancel"));
connect(cancel_button,SIGNAL(clicked()),this,SLOT(cancelData()));
}
AddEncoder::~AddEncoder()
{
delete encoder_name_edit;
}
QSize AddEncoder::sizeHint() const
{
return QSize(250,124);
}
QSizePolicy AddEncoder::sizePolicy() const
{
return QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
}
void AddEncoder::okData()
{
QString sql;
RDSqlQuery *q;
sql=QString("select NAME from ENCODERS where ")+
"(NAME=\""+RDEscapeString(encoder_name_edit->text())+"\")&&"+
"(STATION_NAME=\""+RDEscapeString(encoder_stationname)+"\")";
q=new RDSqlQuery(sql);
if(q->first()) {
QMessageBox::warning(this,tr("Add Encoder Error"),
tr("A encoder with that name already exists!"));
delete q;
return;
}
delete q;
//
// Create Encoder
//
sql=QString("insert into ENCODERS set ")+
"NAME=\""+RDEscapeString(encoder_name_edit->text())+"\""+
"STATION_NAME=\""+RDEscapeString(encoder_stationname)+"\"";
q=new RDSqlQuery(sql);
delete q;
*encoder_name=encoder_name_edit->text();
done(0);
}
void AddEncoder::cancelData()
{
done(-1);
}

View File

@ -1,48 +0,0 @@
// add_encoder.h
//
// Add a Rivendell Encoder
//
// (C) Copyright 2008,2016 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.
//
#ifndef ADD_ENCODER_H
#define ADD_ENCODER_H
#include <qdialog.h>
#include <qcheckbox.h>
#include <qlineedit.h>
class AddEncoder : public QDialog
{
Q_OBJECT
public:
AddEncoder(QString *encname,const QString &stationname,QWidget *parent=0);
~AddEncoder();
QSize sizeHint() const;
QSizePolicy sizePolicy() const;
private slots:
void okData();
void cancelData();
private:
QLineEdit *encoder_name_edit;
QString *encoder_name;
QString encoder_stationname;
};
#endif // ADD_ENCODER_H

View File

@ -27,7 +27,6 @@
#include <rddb.h>
#include <rdapplication.h>
#include <rdcreateauxfieldstable.h>
#include <rdescape_string.h>
#include <rdfeedlog.h>
#include <rdtextvalidator.h>
@ -173,7 +172,6 @@ void AddFeed::okData()
"ITEM_XML=\""+RDEscapeString(DEFAULT_ITEM_XML)+"\"";
q=new RDSqlQuery(sql);
delete q;
RDCreateAuxFieldsTable(feed_keyname_edit->text(),rda->config());
sql=QString("select ID from FEEDS where ")+
"KEY_NAME=\""+RDEscapeString(feed_keyname_edit->text())+"\"";
q=new RDSqlQuery(sql);

View File

@ -1,139 +0,0 @@
// edit_aux_field.cpp
//
// Edit an Auxiliary Field for an RSS Feed
//
// (C) Copyright 2002-2007,2016 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 <qmessagebox.h>
#include <rddb.h>
#include <rdescape_string.h>
#include <edit_aux_field.h>
EditAuxField::EditAuxField(unsigned feed_id,QWidget *parent)
: QDialog(parent,"",true)
{
QString sql;
RDSqlQuery *q;
edit_field_id=feed_id;
setCaption(tr("Edit Auxiliary Metadata Fields"));
//
// Fix the Window Size
//
setMinimumWidth(sizeHint().width());
setMaximumWidth(sizeHint().width());
setMinimumHeight(sizeHint().height());
setMaximumHeight(sizeHint().height());
//
// Create Fonts
//
QFont bold_font=QFont("Helvetica",12,QFont::Bold);
bold_font.setPixelSize(12);
QFont font=QFont("Helvetica",12,QFont::Normal);
font.setPixelSize(12);
//
// Variable Name
//
edit_varname_edit=new QLineEdit(this);
edit_varname_edit->setGeometry(120,10,130,20);
edit_varname_edit->setReadOnly(true);
QLabel *label=
new QLabel(edit_varname_edit,tr("Variable Name: "),this);
label->setGeometry(10,13,105,20);
label->setFont(bold_font);
label->setAlignment(AlignRight);
//
// Variable Name
//
edit_caption_edit=new QLineEdit(this);
edit_caption_edit->setGeometry(120,37,sizeHint().width()-130,20);
edit_caption_edit->setMaxLength(64);
label=new QLabel(edit_caption_edit,tr("Caption: "),this);
label->setGeometry(10,37,105,20);
label->setFont(bold_font);
label->setAlignment(AlignRight);
//
// Ok Button
//
QPushButton *button=new QPushButton(this);
button->setGeometry(sizeHint().width()-180,sizeHint().height()-60,80,50);
button->setDefault(true);
button->setFont(bold_font);
button->setText(tr("&OK"));
connect(button,SIGNAL(clicked()),this,SLOT(okData()));
//
// Cancel Button
//
button=new QPushButton(this);
button->setGeometry(sizeHint().width()-90,sizeHint().height()-60,
80,50);
button->setFont(bold_font);
button->setText(tr("&Cancel"));
connect(button,SIGNAL(clicked()),this,SLOT(cancelData()));
//
// Load Data
//
sql=QString().sprintf("select VAR_NAME,CAPTION from AUX_METADATA \
where ID=%u",edit_field_id);
q=new RDSqlQuery(sql);
if(q->first()) {
edit_varname_edit->setText(q->value(0).toString());
edit_caption_edit->setText(q->value(1).toString());
}
delete q;
}
QSize EditAuxField::sizeHint() const
{
return QSize(400,127);
}
QSizePolicy EditAuxField::sizePolicy() const
{
return QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
}
void EditAuxField::okData()
{
QString sql;
RDSqlQuery *q;
sql=QString("update AUX_METADATA set ")+
"CAPTION=\""+RDEscapeString(edit_caption_edit->text())+"\" where "+
QString().sprintf("ID=%u",edit_field_id);
q=new RDSqlQuery(sql);
delete q;
done(0);
}
void EditAuxField::cancelData()
{
done(-1);
}

View File

@ -1,51 +0,0 @@
// edit_aux_field.h
//
// Edit an Auxiliary Field for an RSS Feed
//
// (C) Copyright 2002-2007,2016 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.
//
#ifndef EDIT_AUX_FIELD_H
#define EDIT_AUX_FIELD_H
#include <qdialog.h>
#include <qsqldatabase.h>
#include <qlabel.h>
#include <qpushbutton.h>
#include <qlineedit.h>
#include <qcombobox.h>
class EditAuxField : public QDialog
{
Q_OBJECT
public:
EditAuxField(unsigned field_id,QWidget *parent=0);
QSize sizeHint() const;
QSizePolicy sizePolicy() const;
private slots:
void okData();
void cancelData();
private:
QLineEdit *edit_varname_edit;
QLineEdit *edit_caption_edit;
unsigned edit_field_id;
};
#endif // EDIT_AUX_FIELD

View File

@ -1,216 +0,0 @@
// edit_encoder.cpp
//
// Edit a Rivendell Encoder
//
// (C) Copyright 2008,2016 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 <qmessagebox.h>
#include <rdescape_string.h>
#include <rddb.h>
#include <edit_encoder.h>
EditEncoder::EditEncoder(int encoder_id,QWidget *parent)
: QDialog(parent,"",true)
{
QString sql;
QSqlQuery *q;
edit_encoder_id=encoder_id;
setCaption(tr("RDAdmin - Edit Encoder"));
//
// Fix the Window Size
//
setMinimumWidth(sizeHint().width());
setMaximumWidth(sizeHint().width());
setMinimumHeight(sizeHint().height());
setMaximumHeight(sizeHint().height());
//
// Create Fonts
//
QFont bold_font=QFont("Helvetica",12,QFont::Bold);
bold_font.setPixelSize(12);
QFont font=QFont("Helvetica",12,QFont::Normal);
font.setPixelSize(12);
//
// Name
//
QLabel *label=new QLabel(tr("Name:"),this);
label->setGeometry(10,10,95,20);
label->setFont(bold_font);
label->setAlignment(AlignRight|AlignVCenter);
QLabel *name_label=new QLabel(this);
name_label->setGeometry(110,10,sizeHint().width()-120,20);
name_label->setFont(font);
name_label->setAlignment(AlignLeft|AlignVCenter);
//
// Default Extension
//
edit_extension_edit=new QLineEdit(this);
edit_extension_edit->setGeometry(130,32,80,20);
label=new QLabel(edit_extension_edit,tr("Default Extension:"),this);
label->setGeometry(10,32,115,20);
label->setAlignment(AlignRight|AlignVCenter);
label->setFont(bold_font);
//
// Command Line
//
edit_commandline_edit=new QLineEdit(this);
edit_commandline_edit->setGeometry(130,54,sizeHint().width()-140,20);
label=new QLabel(edit_commandline_edit,tr("Command Line:"),this);
label->setGeometry(10,54,115,20);
label->setAlignment(AlignRight|AlignVCenter);
label->setFont(bold_font);
//
// Channels
//
edit_channel_edit=new RDIntegerEdit(tr("Allow Channels"),1,2,this);
edit_channel_edit->setGeometry(50,82,120,180);
//
// Sample Rates
//
edit_samprate_edit=new RDIntegerEdit(tr("Allow Sample Rates"),
4000,192000,this);
edit_samprate_edit->setGeometry(190,82,120,180);
//
// Bit Rates
//
edit_bitrate_edit=new RDIntegerEdit(tr("Allow Bit Rates"),0,1000000,this);
edit_bitrate_edit->setGeometry(330,82,120,180);
//
// Ok Button
//
QPushButton *button=new QPushButton(this,"ok_button");
button->setGeometry(sizeHint().width()-180,sizeHint().height()-60,80,50);
button->setDefault(true);
button->setFont(bold_font);
button->setText(tr("&OK"));
connect(button,SIGNAL(clicked()),this,SLOT(okData()));
//
// Cancel Button
//
button=new QPushButton(this,"cancel_button");
button->setGeometry(sizeHint().width()-90,sizeHint().height()-60,
80,50);
button->setFont(bold_font);
button->setText(tr("&Cancel"));
connect(button,SIGNAL(clicked()),this,SLOT(cancelData()));
//
// Load Data
//
sql=QString().sprintf("select NAME,DEFAULT_EXTENSION,COMMAND_LINE \
from ENCODERS where ID=%d",
encoder_id);
q=new RDSqlQuery(sql);
if(q->first()) {
name_label->setText(q->value(0).toString());
edit_extension_edit->setText(q->value(1).toString());
edit_commandline_edit->setText(q->value(2).toString());
}
delete q;
LoadList("CHANNELS",edit_channel_edit);
LoadList("SAMPLERATES",edit_samprate_edit);
LoadList("BITRATES",edit_bitrate_edit);
}
QSize EditEncoder::sizeHint() const
{
return QSize(500,332);
}
QSizePolicy EditEncoder::sizePolicy() const
{
return QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
}
void EditEncoder::okData()
{
QString sql;
RDSqlQuery *q;
sql=QString("update ENCODERS set ")+
"DEFAULT_EXTENSION=\""+RDEscapeString(edit_extension_edit->text())+"\","+
"COMMAND_LINE=\""+RDEscapeString(edit_commandline_edit->text())+"\"";
q=new RDSqlQuery(sql);
delete q;
SaveList("CHANNELS",edit_channel_edit);
SaveList("SAMPLERATES",edit_samprate_edit);
SaveList("BITRATES",edit_bitrate_edit);
done(0);
}
void EditEncoder::cancelData()
{
done(1);
}
void EditEncoder::LoadList(const QString &paramname,RDIntegerEdit *edit)
{
QString sql;
RDSqlQuery *q;
std::vector<int> values;
sql=QString("select ")+
paramname+" from `ENCODER_"+paramname+"` where "+
QString().sprintf("ENCODER_ID=%d ",edit_encoder_id)+
"order by "+paramname;
q=new RDSqlQuery(sql);
while(q->next()) {
values.push_back(q->value(0).toInt());
}
delete q;
edit->setValues(&values);
}
void EditEncoder::SaveList(const QString &paramname,RDIntegerEdit *edit)
{
QString sql;
RDSqlQuery *q;
std::vector<int> values;
sql=QString("delete from `ENCODER_")+paramname+"` where "+
QString().sprintf("ENCODER_ID=%d",edit_encoder_id);
q=new RDSqlQuery(sql);
delete q;
edit->values(&values);
for(unsigned i=0;i<values.size();i++) {
sql=QString("insert into `ENCODER_")+paramname+"` set "+
QString().sprintf("ENCODER_ID=%d,",edit_encoder_id)+
paramname+QString().sprintf("=%d",values[i]);
q=new RDSqlQuery(sql);
delete q;
}
}

View File

@ -1,57 +0,0 @@
// edit_encoder.h
//
// Edit a Rivendell Encoder
//
// (C) Copyright 2008,2016 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.
//
#ifndef EDIT_ENCODER_H
#define EDIT_ENCODER_H
#include <qdialog.h>
#include <qlabel.h>
#include <qpushbutton.h>
#include <qlineedit.h>
#include <qcombobox.h>
#include <rdintegeredit.h>
class EditEncoder : public QDialog
{
Q_OBJECT
public:
EditEncoder(int encoder_id,QWidget *parent=0);
QSize sizeHint() const;
QSizePolicy sizePolicy() const;
private slots:
void okData();
void cancelData();
private:
void LoadList(const QString &paramname,RDIntegerEdit *edit);
void SaveList(const QString &paramname,RDIntegerEdit *edit);
QLineEdit *edit_extension_edit;
QLineEdit *edit_commandline_edit;
RDIntegerEdit *edit_channel_edit;
RDIntegerEdit *edit_samprate_edit;
RDIntegerEdit *edit_bitrate_edit;
int edit_encoder_id;
};
#endif // EDIT_ENCODER

View File

@ -33,7 +33,6 @@
#include "edit_feed.h"
#include "globals.h"
#include "list_aux_fields.h"
EditFeed::EditFeed(const QString &feed,QWidget *parent)
: QDialog(parent,"",true)
@ -406,24 +405,13 @@ EditFeed::EditFeed(const QString &feed,QWidget *parent)
// Item XML
//
feed_item_xml_edit=new QTextEdit(this);
feed_item_xml_edit->
setGeometry(615,270,365,176);
feed_item_xml_edit->setGeometry(615,270,365,250);
feed_item_xml_label=new QLabel(feed_item_xml_edit,tr("Item XML:"),this);
feed_item_xml_label->setGeometry(520,270,90,19);
feed_item_xml_label->setFont(font);
feed_item_xml_label->
setAlignment(AlignRight|AlignVCenter|ShowPrefix);
//
// Metadata Button
//
feed_metadata_button=new QPushButton(this);
feed_metadata_button->setGeometry(615,460,150,50);
feed_metadata_button->setDefault(true);
feed_metadata_button->setFont(font);
feed_metadata_button->setText(tr("&Define Auxiliary\nMetadata Fields"));
connect(feed_metadata_button,SIGNAL(clicked()),this,SLOT(editData()));
//
// Ok Button
//
@ -549,15 +537,6 @@ void EditFeed::normalizeCheckData(bool state)
feed_normalize_unit_label->setEnabled(state);
}
void EditFeed::editData()
{
ListAuxFields *lf=new ListAuxFields(feed_feed->id(),this);
lf->exec();
delete lf;
}
void EditFeed::redirectToggledData(bool state)
{
if(state) {
@ -669,7 +648,6 @@ void EditFeed::RedirectChanged(bool state)
feed_extension_edit->setDisabled(state);
feed_castorder_box->setDisabled(state);
feed_format_button->setDisabled(state);
feed_metadata_button->setDisabled(state);
feed_channel_title_label->setDisabled(state);
feed_channel_category_label->setDisabled(state);
feed_channel_link_label->setDisabled(state);

View File

@ -48,7 +48,6 @@ class EditFeed : public QDialog
void purgeUsernameChangedData(const QString &username);
void setFormatData();
void normalizeCheckData(bool state);
void editData();
void redirectToggledData(bool state);
void okData();
void cancelData();
@ -92,8 +91,6 @@ class EditFeed : public QDialog
QLabel *feed_redirect_label;
QLineEdit *feed_redirect_edit;
QPushButton *feed_format_button;
QPushButton *feed_metadata_button;
QLabel *feed_channel_title_label;
QLabel *feed_channel_category_label;
QLabel *feed_channel_link_label;

View File

@ -34,7 +34,6 @@
#include "edit_replicator.h"
#include "globals.h"
#include "list_aux_fields.h"
EditReplicator::EditReplicator(const QString &repl_name,QWidget *parent)
: QDialog(parent,"",true)

View File

@ -43,7 +43,6 @@
#include "edit_cartslots.h"
#include "edit_decks.h"
#include "list_dropboxes.h"
#include "list_encoders.h"
#include "list_hostvars.h"
#include "edit_jack.h"
#include "list_matrices.h"

View File

@ -1,238 +0,0 @@
// list_aux_fields.cpp
//
// List Auxiliary Fields for an RSS Feed
//
// (C) Copyright 2002-2007,2016 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 <qdialog.h>
#include <qstring.h>
#include <qtextedit.h>
#include <qpainter.h>
#include <qmessagebox.h>
#include <rddb.h>
#include <list_aux_fields.h>
#include <edit_aux_field.h>
#include <add_aux_field.h>
ListAuxFields::ListAuxFields(unsigned feed_id,QWidget *parent)
: QDialog(parent,"",true)
{
list_feed_id=feed_id;
setCaption(tr("Auxiliary Metadata Fields"));
//
// Fix the Window Size
//
setMinimumWidth(sizeHint().width());
setMaximumWidth(sizeHint().width());
setMinimumHeight(sizeHint().height());
setMaximumHeight(sizeHint().height());
//
// Create Fonts
//
QFont bold_font=QFont("Helvetica",12,QFont::Bold);
bold_font.setPixelSize(12);
QFont font=QFont("Helvetica",12,QFont::Normal);
font.setPixelSize(12);
//
// Fields List Box
//
list_list_view=new QListView(this);
list_list_view->
setGeometry(10,24,sizeHint().width()-20,sizeHint().height()-94);
QLabel *label=new QLabel(list_list_view,tr("Auxiliary Metadata Fields"),this);
label->setFont(bold_font);
label->setGeometry(14,5,sizeHint().width()-28,19);
list_list_view->setAllColumnsShowFocus(true);
list_list_view->setItemMargin(5);
list_list_view->addColumn(tr("Var Name"));
list_list_view->setColumnAlignment(0,Qt::AlignHCenter);
list_list_view->addColumn(tr("Caption"));
list_list_view->setColumnAlignment(1,Qt::AlignLeft);
connect(list_list_view,
SIGNAL(doubleClicked(QListViewItem *,const QPoint &,int)),
this,
SLOT(doubleClickedData(QListViewItem *,const QPoint &,int)));
//
// Add Button
//
QPushButton *button=new QPushButton(this);
button->setGeometry(10,sizeHint().height()-60,80,50);
button->setFont(bold_font);
button->setText(tr("&Add"));
connect(button,SIGNAL(clicked()),this,SLOT(addData()));
//
// Edit Button
//
button=new QPushButton(this);
button->setGeometry(100,sizeHint().height()-60,80,50);
button->setFont(bold_font);
button->setText(tr("&Edit"));
connect(button,SIGNAL(clicked()),this,SLOT(editData()));
//
// Delete Button
//
button=new QPushButton(this);
button->setGeometry(190,sizeHint().height()-60,80,50);
button->setFont(bold_font);
button->setText(tr("&Delete"));
connect(button,SIGNAL(clicked()),this,SLOT(deleteData()));
//
// Close Button
//
button=new QPushButton(this);
button->setGeometry(sizeHint().width()-90,sizeHint().height()-60,
80,50);
button->setFont(bold_font);
button->setText(tr("&Close"));
connect(button,SIGNAL(clicked()),this,SLOT(closeData()));
RefreshList();
}
QSize ListAuxFields::sizeHint() const
{
return QSize(400,250);
}
QSizePolicy ListAuxFields::sizePolicy() const
{
return QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
}
void ListAuxFields::addData()
{
unsigned field_id=0;
AddAuxField *af=new AddAuxField(list_feed_id,&field_id,this);
if(af->exec()==0) {
RDListViewItem *item=new RDListViewItem(list_list_view);
item->setId(field_id);
RefreshItem(item);
list_list_view->setSelected(item,true);
list_list_view->ensureItemVisible(item);
}
delete af;
}
void ListAuxFields::editData()
{
RDListViewItem *item=(RDListViewItem *)list_list_view->selectedItem();
if(item==NULL) {
return;
}
EditAuxField *ef=new EditAuxField(item->id(),this);
if(ef->exec()==0) {
RefreshItem(item);
}
delete ef;
}
void ListAuxFields::deleteData()
{
QString sql;
RDSqlQuery *q;
RDListViewItem *item=(RDListViewItem *)list_list_view->selectedItem();
if(item==NULL) {
return;
}
if(QMessageBox::question(this,tr("Warning"),
tr("This will delete all data associated with this field!\nAre you sure you want to continue?"),QMessageBox::Yes,QMessageBox::No)==QMessageBox::No) {
return;
}
sql=QString().sprintf("select KEY_NAME from FEEDS where ID=%d",list_feed_id);
q=new RDSqlQuery(sql);
if(q->first()) {
QString keyname=q->value(0).toString();
delete q;
keyname.replace(" ","_");
QString varname=item->text(0).mid(1,item->text(0).length()-2);
sql=QString("alter table `")+
keyname+"_FIELDS` drop column "+varname;
q=new RDSqlQuery(sql);
}
delete q;
sql=QString().sprintf("delete from AUX_METADATA where ID=%d",item->id());
q=new RDSqlQuery(sql);
delete q;
delete item;
}
void ListAuxFields::doubleClickedData(QListViewItem *item,const QPoint &pt,
int col)
{
editData();
}
void ListAuxFields::closeData()
{
done(0);
}
void ListAuxFields::RefreshList()
{
QString sql;
RDSqlQuery *q;
RDListViewItem *item;
list_list_view->clear();
sql=QString().sprintf("select ID,VAR_NAME,CAPTION from AUX_METADATA \
where FEED_ID=%u order by CAPTION",list_feed_id);
q=new RDSqlQuery(sql);
while(q->next()) {
item=new RDListViewItem(list_list_view);
item->setId(q->value(0).toInt());
item->setText(0,q->value(1).toString());
item->setText(1,q->value(2).toString());
}
delete q;
}
void ListAuxFields::RefreshItem(RDListViewItem *item)
{
QString sql;
RDSqlQuery *q;
sql=QString().sprintf("select VAR_NAME,CAPTION from AUX_METADATA \
where ID=%d",item->id());
q=new RDSqlQuery(sql);
if(q->first()) {
item->setText(0,q->value(0).toString());
item->setText(1,q->value(1).toString());
}
delete q;
}

View File

@ -1,55 +0,0 @@
// list_aux_fields.h
//
// List Auxiliary Fields for an RSS Feed
//
// (C) Copyright 2002-2007,2016 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.
//
#ifndef LIST_AUX_FIELDS_H
#define LIST_AUX_FIELDS_H
#include <qdialog.h>
#include <qsqldatabase.h>
#include <qlabel.h>
#include <qpushbutton.h>
#include <qlistview.h>
#include <rdlistviewitem.h>
class ListAuxFields : public QDialog
{
Q_OBJECT
public:
ListAuxFields(unsigned feed_id,QWidget *parent=0);
QSize sizeHint() const;
QSizePolicy sizePolicy() const;
private slots:
void addData();
void editData();
void deleteData();
void doubleClickedData(QListViewItem *item,const QPoint &pt,int col);
void closeData();
private:
void RefreshList();
void RefreshItem(RDListViewItem *item);
QListView *list_list_view;
unsigned list_feed_id;
};
#endif // LIST_AUX_FIELDS_H

View File

@ -1,305 +0,0 @@
// list_encoders.cpp
//
// List a Rivendell Encoders
//
// (C) Copyright 2008,2016 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 <qdialog.h>
#include <qstring.h>
#include <qtextedit.h>
#include <qpainter.h>
#include <qmessagebox.h>
#include <rd.h>
#include <rddb.h>
#include <rdescape_string.h>
#include <list_encoders.h>
#include <edit_encoder.h>
#include <add_encoder.h>
ListEncoders::ListEncoders(const QString &stationname,QWidget *parent)
: QDialog(parent,"",true)
{
list_stationname=stationname;
setCaption(tr("RDAdmin - List Encoders"));
//
// Fix the Window Size
//
setMinimumWidth(sizeHint().width());
setMinimumHeight(sizeHint().height());
//
// Create Fonts
//
QFont bold_font=QFont("Helvetica",12,QFont::Bold);
bold_font.setPixelSize(12);
QFont font=QFont("Helvetica",12,QFont::Normal);
font.setPixelSize(12);
//
// Encoders List Box
//
list_list_view=new RDListView(this);
list_list_label=
new QLabel(list_list_view,tr("Encoders on")+" "+stationname,this);
list_list_label->setFont(bold_font);
list_list_view->setAllColumnsShowFocus(true);
list_list_view->setItemMargin(5);
list_list_view->addColumn(tr("Format Name"));
list_list_view->setColumnAlignment(0,Qt::AlignHCenter);
list_list_view->addColumn(tr("Extension"));
list_list_view->setColumnAlignment(1,Qt::AlignHCenter);
list_list_view->addColumn(tr("Valid Channels"));
list_list_view->setColumnAlignment(2,Qt::AlignLeft);
list_list_view->addColumn(tr("Valid Sample Rates"));
list_list_view->setColumnAlignment(3,Qt::AlignLeft);
list_list_view->addColumn(tr("Valid Bit Rates"));
list_list_view->setColumnAlignment(4,Qt::AlignLeft);
connect(list_list_view,
SIGNAL(doubleClicked(QListViewItem *,const QPoint &,int)),
this,SLOT(doubleClickedData(QListViewItem *,const QPoint &,int)));
//
// Add Button
//
list_add_button=new QPushButton(this);
list_add_button->setFont(bold_font);
list_add_button->setText(tr("&Add"));
connect(list_add_button,SIGNAL(clicked()),this,SLOT(addData()));
//
// Edit Button
//
list_edit_button=new QPushButton(this);
list_edit_button->setFont(bold_font);
list_edit_button->setText(tr("&Edit"));
connect(list_edit_button,SIGNAL(clicked()),this,SLOT(editData()));
//
// Delete Button
//
list_delete_button=new QPushButton(this);
list_delete_button->setFont(bold_font);
list_delete_button->setText(tr("&Delete"));
connect(list_delete_button,SIGNAL(clicked()),this,SLOT(deleteData()));
//
// Close Button
//
list_close_button=new QPushButton(this);
list_close_button->setDefault(true);
list_close_button->setFont(bold_font);
list_close_button->setText(tr("&Close"));
connect(list_close_button,SIGNAL(clicked()),this,SLOT(closeData()));
RefreshList();
}
QSize ListEncoders::sizeHint() const
{
return QSize(600,375);
}
QSizePolicy ListEncoders::sizePolicy() const
{
return QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
}
void ListEncoders::resizeEvent(QResizeEvent *e)
{
list_list_label->setGeometry(14,5,size().width()-20,19);
list_list_view->setGeometry(10,24,size().width()-20,size().height()-94);
list_add_button->setGeometry(10,size().height()-60,80,50);
list_edit_button->setGeometry(100,size().height()-60,80,50);
list_delete_button->setGeometry(190,size().height()-60,80,50);
list_close_button->setGeometry(size().width()-90,size().height()-60,80,50);
}
void ListEncoders::addData()
{
QString name;
QString sql;
RDSqlQuery *q;
RDSqlQuery *q1;
AddEncoder *ad=new AddEncoder(&name,list_stationname,this);
if(ad->exec()==0) {
sql=QString("select ID from ENCODERS where ")+
"(NAME=\""+RDEscapeString(name)+"\")&&"+
"(STATION_NAME=\""+RDEscapeString(list_stationname)+"\")";
q=new RDSqlQuery(sql);
if(q->first()) {
EditEncoder *ee=new EditEncoder(q->value(0).toInt());
if(ee->exec()==0) {
RDListViewItem *item=new RDListViewItem(list_list_view);
item->setId(q->value(0).toInt());
item->setText(0,name);
RefreshItem(item);
list_list_view->ensureItemVisible(item);
}
else {
sql=QString("delete from ENCODERS where ")+
"(NAME=\""+RDEscapeString(name)+"\")&&"+
"(STATION_NAME=\""+RDEscapeString(list_stationname)+"\")";
q1=new RDSqlQuery(sql);
delete q1;
}
delete ee;
}
delete q;
}
else {
sql=QString("delete from ENCODERS where ")+
"(NAME=\""+RDEscapeString(name)+"\")&&"+
"(STATION_NAME=\""+RDEscapeString(list_stationname)+"\")";
q1=new RDSqlQuery(sql);
delete q1;
}
delete ad;
}
void ListEncoders::editData()
{
RDListViewItem *item;
if((item=(RDListViewItem *)list_list_view->selectedItem())==NULL) {
return;
}
EditEncoder *ee=new EditEncoder(item->id());
if(ee->exec()==0) {
RefreshItem(item);
}
delete ee;
}
void ListEncoders::doubleClickedData(QListViewItem *item,const QPoint &pt,
int col)
{
editData();
}
void ListEncoders::deleteData()
{
QString sql;
RDSqlQuery *q;
QString feedlist;
RDListViewItem *item;
if((item=(RDListViewItem *)list_list_view->selectedItem())==NULL) {
return;
}
if(QMessageBox::question(this,tr("RDAdmin - Delete Encoder"),
tr("Are you sure you want to delete this encoder?"),
QMessageBox::Yes,QMessageBox::No)==QMessageBox::No) {
return;
}
sql=QString().sprintf("select KEY_NAME,CHANNEL_TITLE from FEEDS \
where UPLOAD_FORMAT=%d",item->id());
q=new RDSqlQuery(sql);
while(q->next()) {
feedlist+=(q->value(0).toString()+" - "+q->value(1).toString());
}
delete q;
if(!feedlist.isEmpty()) {
if(QMessageBox::warning(this,tr("RDAdmin - List Encoders"),
tr("This encoder is in use by the following RSS feeds:\n\n")+feedlist+tr("\n\nDo you still want to delete it?"),QMessageBox::Yes,QMessageBox::No)==QMessageBox::No) {
return;
}
}
sql=QString().sprintf("delete from ENCODERS where ID=%d",item->id());
q=new RDSqlQuery(sql);
delete q;
delete item;
}
void ListEncoders::closeData()
{
done(0);
}
void ListEncoders::RefreshList()
{
QString sql;
RDSqlQuery *q;
RDListViewItem *item=NULL;
sql=QString("select ID,NAME,COMMAND_LINE from ENCODERS where ")+
"STATION_NAME=\""+RDEscapeString(list_stationname)+"\"";
q=new RDSqlQuery(sql);
while(q->next()) {
item=new RDListViewItem(list_list_view);
item->setId(q->value(0).toInt());
item->setText(0,q->value(1).toString());
RefreshItem(item);
}
delete q;
}
void ListEncoders::RefreshItem(RDListViewItem *item)
{
QString sql;
RDSqlQuery *q;
sql=QString().sprintf("select DEFAULT_EXTENSION from ENCODERS \
where ID=%d",item->id());
q=new RDSqlQuery(sql);
if(q->first()) {
item->setText(1,q->value(0).toString());
}
delete q;
item->setText(2,BuildList(item->id(),"CHANNELS"));
item->setText(3,BuildList(item->id(),"SAMPLERATES"));
item->setText(4,BuildList(item->id(),"BITRATES"));
}
QString ListEncoders::BuildList(int encoder_id,const QString &paramname)
{
QString sql;
RDSqlQuery *q;
QString ret;
sql=QString("select ")+
paramname+" from `ENCODER_"+paramname+"` where "+
QString().sprintf("ENCODER_ID=%d",encoder_id)+
"order by "+paramname;
q=new RDSqlQuery(sql);
while(q->next()) {
ret=ret+QString().sprintf("%d,",q->value(0).toInt());
}
delete q;
if(ret.isEmpty()) {
ret=tr("[none]");
}
else {
ret=ret.left(ret.length()-1);
}
return ret;
}

View File

@ -1,65 +0,0 @@
// list_encoders.h
//
// List Rivendell Encoders
//
// (C) Copyright 2008,2016 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.
//
#ifndef LIST_ENCODERS_H
#define LIST_ENCODERS_H
#include <qdialog.h>
#include <qsqldatabase.h>
#include <qlabel.h>
#include <qpushbutton.h>
#include <rdlistviewitem.h>
#include <rduser.h>
#include <rdmatrix.h>
class ListEncoders : public QDialog
{
Q_OBJECT
public:
ListEncoders(const QString &stationname,QWidget *parent=0);
QSize sizeHint() const;
QSizePolicy sizePolicy() const;
protected:
void resizeEvent(QResizeEvent *e);
private slots:
void addData();
void editData();
void doubleClickedData(QListViewItem *item,const QPoint &pt,int col);
void deleteData();
void closeData();
private:
void RefreshList();
void RefreshItem(RDListViewItem *item);
QString BuildList(int encoder_id,const QString &paramname);
QString list_stationname;
QLabel *list_list_label;
RDListView *list_list_view;
QPushButton *list_add_button;
QPushButton *list_edit_button;
QPushButton *list_delete_button;
QPushButton *list_close_button;
};
#endif // LIST_ENCODERS_H

View File

@ -173,8 +173,6 @@ void ListFeeds::addData()
q=new RDSqlQuery(sql);
delete q;
RDDeleteFeedLog(feed);
feed.replace(" ","_");
rda->dropTable(feed+"_FIELDS");
delete edit_feed;
return;
}
@ -274,8 +272,6 @@ void ListFeeds::deleteData()
q=new RDSqlQuery(sql);
delete q;
RDDeleteFeedLog(feedname);
feedname.replace(" ","_");
rda->dropTable(feedname+"_FIELDS");
item->setSelected(false);
pd->reset();

View File

@ -20,8 +20,6 @@
TEMPLATE = app
x11 {
SOURCES += add_aux_field.cpp
SOURCES += add_encoder.cpp
SOURCES += add_feed.cpp
SOURCES += add_group.cpp
SOURCES += add_hostvar.cpp
@ -33,12 +31,10 @@ x11 {
SOURCES += add_user.cpp
SOURCES += autofill_carts.cpp
SOURCES += edit_audios.cpp
SOURCES += edit_aux_field.cpp
SOURCES += edit_backup.cpp
SOURCES += edit_cartslots.cpp
SOURCES += edit_decks.cpp
SOURCES += edit_dropbox.cpp
SOURCES += edit_encoder.cpp
SOURCES += edit_endpoint.cpp
SOURCES += edit_feed.cpp
SOURCES += edit_feed_perms.cpp
@ -67,9 +63,7 @@ x11 {
SOURCES += edit_user_perms.cpp
SOURCES += edit_vguest_resource.cpp
SOURCES += info_dialog.cpp
SOURCES += list_aux_fields.cpp
SOURCES += list_dropboxes.cpp
SOURCES += list_encoders.cpp
SOURCES += list_endpoints.cpp
SOURCES += list_feeds.cpp
SOURCES += list_gpis.cpp
@ -93,8 +87,6 @@ x11 {
}
x11 {
HEADERS += add_aux_field.h
HEADERS += add_encoder.h
HEADERS += add_feed.h
HEADERS += add_group.h
HEADERS += add_hostvar.h
@ -106,12 +98,10 @@ x11 {
HEADERS += add_user.h
HEADERS += autofill_carts.h
HEADERS += edit_audios.h
HEADERS += edit_aux_field.h
HEADERS += edit_backup.h
HEADERS += edit_cartslots.h
HEADERS += edit_decks.h
HEADERS += edit_dropbox.h
HEADERS += edit_encoder.h
HEADERS += edit_endpoint.h
HEADERS += edit_feed.h
HEADERS += edit_feed_perms.h
@ -140,9 +130,7 @@ x11 {
HEADERS += edit_user_perms.h
HEADERS += edit_vguest_resource.h
HEADERS += info_dialog.h
HEADERS += list_aux_fields.h
HEADERS += list_dropboxes.h
HEADERS += list_encoders.h
HEADERS += list_endpoints.h
HEADERS += list_feeds.h
HEADERS += list_gpis.h

View File

@ -164,66 +164,50 @@ a záloha původní databáze uložena v </translation>
<name>AddAuxField</name>
<message>
<source>Add Aux Field</source>
<translation>Přidat pomocné pole</translation>
<translation type="obsolete">Přidat pomocné pole</translation>
</message>
<message>
<source>Variable Name: </source>
<translation>Název proměnné: </translation>
<translation type="obsolete">Název proměnné: </translation>
</message>
<message>
<source>%AUX_</source>
<translation>%AUX_</translation>
<translation type="obsolete">%AUX_</translation>
</message>
<message>
<source>%</source>
<translation>%</translation>
<translation type="obsolete">%</translation>
</message>
<message>
<source>Caption: </source>
<translation>Popisek: </translation>
<translation type="obsolete">Popisek: </translation>
</message>
<message>
<source>&amp;OK</source>
<translation>&amp;OK</translation>
<translation type="obsolete">&amp;OK</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation>Z&amp;rušit</translation>
<translation type="obsolete">Z&amp;rušit</translation>
</message>
<message>
<source>Name Exists</source>
<translation>Název existuje</translation>
<translation type="obsolete">Název existuje</translation>
</message>
<message>
<source>That variable name already exists!</source>
<translation>Proměnná s tímto názvem již existuje!</translation>
<translation type="obsolete">Proměnná s tímto názvem již existuje!</translation>
</message>
</context>
<context>
<name>AddEncoder</name>
<message>
<source>Add Encoder</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;New Encoder Name:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished">&amp;OK</translation>
<translation type="obsolete">&amp;OK</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished">Z&amp;rušit</translation>
</message>
<message>
<source>Add Encoder Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>A encoder with that name already exists!</source>
<translation type="unfinished"></translation>
<translation type="obsolete">Z&amp;rušit</translation>
</message>
</context>
<context>
@ -775,23 +759,23 @@ a záloha původní databáze uložena v </translation>
<name>EditAuxField</name>
<message>
<source>Edit Auxiliary Metadata Fields</source>
<translation>Upravit pole pomocných popisných dat</translation>
<translation type="obsolete">Upravit pole pomocných popisných dat</translation>
</message>
<message>
<source>Variable Name: </source>
<translation>Název proměnné: </translation>
<translation type="obsolete">Název proměnné: </translation>
</message>
<message>
<source>Caption: </source>
<translation>Popisek: </translation>
<translation type="obsolete">Popisek: </translation>
</message>
<message>
<source>&amp;OK</source>
<translation>&amp;OK</translation>
<translation type="obsolete">&amp;OK</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation>Z&amp;rušit</translation>
<translation type="obsolete">Z&amp;rušit</translation>
</message>
</context>
<context>
@ -1309,39 +1293,39 @@ files, causing any whose files remain to be imported again.</source>
<name>EditEncoder</name>
<message>
<source>RDAdmin - Edit Encoder</source>
<translation>RDAdmin - Upravit kodér</translation>
<translation type="obsolete">RDAdmin - Upravit kodér</translation>
</message>
<message>
<source>Name:</source>
<translation>Název:</translation>
<translation type="obsolete">Název:</translation>
</message>
<message>
<source>Allow Channels</source>
<translation>Povolit kanály</translation>
<translation type="obsolete">Povolit kanály</translation>
</message>
<message>
<source>Allow Sample Rates</source>
<translation>Povolit vzorkovací kmitočty</translation>
<translation type="obsolete">Povolit vzorkovací kmitočty</translation>
</message>
<message>
<source>Allow Bit Rates</source>
<translation>Povolit datové toky</translation>
<translation type="obsolete">Povolit datové toky</translation>
</message>
<message>
<source>&amp;OK</source>
<translation>&amp;OK</translation>
<translation type="obsolete">&amp;OK</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation>Z&amp;rušit</translation>
<translation type="obsolete">Z&amp;rušit</translation>
</message>
<message>
<source>Default Extension:</source>
<translation>Výchozí přípona:</translation>
<translation type="obsolete">Výchozí přípona:</translation>
</message>
<message>
<source>Command Line:</source>
<translation>Příkazový řádek:</translation>
<translation type="obsolete">Příkazový řádek:</translation>
</message>
</context>
<context>
@ -1576,7 +1560,7 @@ files, causing any whose files remain to be imported again.</source>
<message>
<source>&amp;Define Auxiliary
Metadata Fields</source>
<translation>&amp;Vymezit pomocná
<translation type="obsolete">&amp;Vymezit pomocná
pole popisných dat</translation>
</message>
<message>
@ -4465,40 +4449,40 @@ GNU Library General Public License. Klepněte na tlačítko pro zobrazení povol
<name>ListAuxFields</name>
<message>
<source>Auxiliary Metadata Fields</source>
<translation>Pomocná pole s popisnými daty</translation>
<translation type="obsolete">Pomocná pole s popisnými daty</translation>
</message>
<message>
<source>Var Name</source>
<translation>Název proměnné</translation>
<translation type="obsolete">Název proměnné</translation>
</message>
<message>
<source>Caption</source>
<translation>Popisek</translation>
<translation type="obsolete">Popisek</translation>
</message>
<message>
<source>&amp;Add</source>
<translation>&amp;Přidat</translation>
<translation type="obsolete">&amp;Přidat</translation>
</message>
<message>
<source>&amp;Edit</source>
<translation>&amp;Upravit</translation>
<translation type="obsolete">&amp;Upravit</translation>
</message>
<message>
<source>&amp;Delete</source>
<translation>S&amp;mazat</translation>
<translation type="obsolete">S&amp;mazat</translation>
</message>
<message>
<source>&amp;Close</source>
<translation>&amp;Zavřít</translation>
<translation type="obsolete">&amp;Zavřít</translation>
</message>
<message>
<source>Warning</source>
<translation>Varování</translation>
<translation type="obsolete">Varování</translation>
</message>
<message>
<source>This will delete all data associated with this field!
Are you sure you want to continue?</source>
<translation>Toto smaže všechna data spojená s tímto polem!
<translation type="obsolete">Toto smaže všechna data spojená s tímto polem!
Jste si jistý, že chcete pokračovat?</translation>
</message>
</context>
@ -4581,61 +4565,61 @@ Jste si jistý, že chcete pokračovat?</translation>
<name>ListEncoders</name>
<message>
<source>RDAdmin - List Encoders</source>
<translation>RDAdmin - Zobrazit kodéry</translation>
<translation type="obsolete">RDAdmin - Zobrazit kodéry</translation>
</message>
<message>
<source>Format Name</source>
<translation>Název formátu</translation>
<translation type="obsolete">Název formátu</translation>
</message>
<message>
<source>Valid Channels</source>
<translation>Platné kanály</translation>
<translation type="obsolete">Platné kanály</translation>
</message>
<message>
<source>Valid Sample Rates</source>
<translation>Platné vzorkovací kmitočty</translation>
<translation type="obsolete">Platné vzorkovací kmitočty</translation>
</message>
<message>
<source>Valid Bit Rates</source>
<translation>Platné datové toky</translation>
<translation type="obsolete">Platné datové toky</translation>
</message>
<message>
<source>&amp;Edit</source>
<translation>&amp;Upravit</translation>
<translation type="obsolete">&amp;Upravit</translation>
</message>
<message>
<source>&amp;Close</source>
<translation>&amp;Zavřít</translation>
<translation type="obsolete">&amp;Zavřít</translation>
</message>
<message>
<source>[none]</source>
<translation>[žádný]</translation>
<translation type="obsolete">[žádný]</translation>
</message>
<message>
<source>&amp;Add</source>
<translation>&amp;Přidat</translation>
<translation type="obsolete">&amp;Přidat</translation>
</message>
<message>
<source>&amp;Delete</source>
<translation>S&amp;mazat</translation>
<translation type="obsolete">S&amp;mazat</translation>
</message>
<message>
<source>RDAdmin - Delete Encoder</source>
<translation>RDAdmin - Smazat kodér</translation>
<translation type="obsolete">RDAdmin - Smazat kodér</translation>
</message>
<message>
<source>Are you sure you want to delete this encoder?</source>
<translation>Opravdu chcete smazat tento kodér?</translation>
<translation type="obsolete">Opravdu chcete smazat tento kodér?</translation>
</message>
<message>
<source>Extension</source>
<translation>Rozšíření</translation>
<translation type="obsolete">Rozšíření</translation>
</message>
<message>
<source>This encoder is in use by the following RSS feeds:
</source>
<translation>Tento kodér je používán následujícími přívody RSS:
<translation type="obsolete">Tento kodér je používán následujícími přívody RSS:
</translation>
</message>
@ -4643,13 +4627,13 @@ Jste si jistý, že chcete pokračovat?</translation>
<source>
Do you still want to delete it?</source>
<translation>
<translation type="obsolete">
Stále ještě jej chcete smazat?</translation>
</message>
<message>
<source>Encoders on</source>
<translation>Kodéry na</translation>
<translation type="obsolete">Kodéry na</translation>
</message>
</context>
<context>

View File

@ -128,68 +128,24 @@ worden. Aktuelle Version</translation>
</context>
<context>
<name>AddAuxField</name>
<message>
<source>Add Aux Field</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Variable Name: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%AUX_</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Caption: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished">&amp;OK</translation>
<translation type="obsolete">&amp;OK</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished">Abbre&amp;chen</translation>
</message>
<message>
<source>Name Exists</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>That variable name already exists!</source>
<translation type="unfinished"></translation>
<translation type="obsolete">Abbre&amp;chen</translation>
</message>
</context>
<context>
<name>AddEncoder</name>
<message>
<source>Add Encoder</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;New Encoder Name:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished">&amp;OK</translation>
<translation type="obsolete">&amp;OK</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished">Abbre&amp;chen</translation>
</message>
<message>
<source>Add Encoder Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>A encoder with that name already exists!</source>
<translation type="unfinished"></translation>
<translation type="obsolete">Abbre&amp;chen</translation>
</message>
</context>
<context>
@ -739,25 +695,13 @@ worden. Aktuelle Version</translation>
</context>
<context>
<name>EditAuxField</name>
<message>
<source>Edit Auxiliary Metadata Fields</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Variable Name: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Caption: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished">&amp;OK</translation>
<translation type="obsolete">&amp;OK</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished">Abbre&amp;chen</translation>
<translation type="obsolete">Abbre&amp;chen</translation>
</message>
</context>
<context>
@ -1277,39 +1221,31 @@ files, causing any whose files remain to be imported again.</source>
<name>EditEncoder</name>
<message>
<source>RDAdmin - Edit Encoder</source>
<translation>RDAdmin - Encoder editieren</translation>
<translation type="obsolete">RDAdmin - Encoder editieren</translation>
</message>
<message>
<source>Name:</source>
<translation>Name:</translation>
<translation type="obsolete">Name:</translation>
</message>
<message>
<source>Allow Channels</source>
<translation>Kanäle erlauben</translation>
<translation type="obsolete">Kanäle erlauben</translation>
</message>
<message>
<source>Allow Sample Rates</source>
<translation>Sampleraten erlauben</translation>
<translation type="obsolete">Sampleraten erlauben</translation>
</message>
<message>
<source>Allow Bit Rates</source>
<translation>Bitraten erlauben</translation>
<translation type="obsolete">Bitraten erlauben</translation>
</message>
<message>
<source>&amp;OK</source>
<translation>&amp;OK</translation>
<translation type="obsolete">&amp;OK</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation>Abbre&amp;chen</translation>
</message>
<message>
<source>Default Extension:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Command Line:</source>
<translation type="unfinished"></translation>
<translation type="obsolete">Abbre&amp;chen</translation>
</message>
</context>
<context>
@ -1541,11 +1477,6 @@ files, causing any whose files remain to be imported again.</source>
<source>Item XML:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Define Auxiliary
Metadata Fields</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished">&amp;OK</translation>
@ -4411,42 +4342,21 @@ anzeigen</translation>
</context>
<context>
<name>ListAuxFields</name>
<message>
<source>Auxiliary Metadata Fields</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Var Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Caption</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Add</source>
<translation type="unfinished">&amp;Hinzufügen</translation>
<translation type="obsolete">&amp;Hinzufügen</translation>
</message>
<message>
<source>&amp;Edit</source>
<translation type="unfinished">&amp;Editieren</translation>
<translation type="obsolete">&amp;Editieren</translation>
</message>
<message>
<source>&amp;Delete</source>
<translation type="unfinished">&amp;Löschen</translation>
<translation type="obsolete">&amp;Löschen</translation>
</message>
<message>
<source>&amp;Close</source>
<translation type="unfinished">&amp;Schliessen</translation>
</message>
<message>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete all data associated with this field!
Are you sure you want to continue?</source>
<translation type="unfinished"></translation>
<translation type="obsolete">&amp;Schliessen</translation>
</message>
</context>
<context>
@ -4528,61 +4438,61 @@ Are you sure you want to continue?</source>
<name>ListEncoders</name>
<message>
<source>RDAdmin - List Encoders</source>
<translation>RDAdmin Encoder anzeigen</translation>
<translation type="obsolete">RDAdmin Encoder anzeigen</translation>
</message>
<message>
<source>Format Name</source>
<translation>Formatname</translation>
<translation type="obsolete">Formatname</translation>
</message>
<message>
<source>Valid Channels</source>
<translation>Gültige Kanäle</translation>
<translation type="obsolete">Gültige Kanäle</translation>
</message>
<message>
<source>Valid Sample Rates</source>
<translation>Gültige Sampleraten</translation>
<translation type="obsolete">Gültige Sampleraten</translation>
</message>
<message>
<source>Valid Bit Rates</source>
<translation>Gültige Bitraten</translation>
<translation type="obsolete">Gültige Bitraten</translation>
</message>
<message>
<source>&amp;Edit</source>
<translation>&amp;Editieren</translation>
<translation type="obsolete">&amp;Editieren</translation>
</message>
<message>
<source>&amp;Close</source>
<translation>&amp;Schliessen</translation>
<translation type="obsolete">&amp;Schliessen</translation>
</message>
<message>
<source>[none]</source>
<translation>[keine]</translation>
<translation type="obsolete">[keine]</translation>
</message>
<message>
<source>&amp;Add</source>
<translation>&amp;Hinzufügen</translation>
<translation type="obsolete">&amp;Hinzufügen</translation>
</message>
<message>
<source>&amp;Delete</source>
<translation>&amp;Löschen</translation>
<translation type="obsolete">&amp;Löschen</translation>
</message>
<message>
<source>RDAdmin - Delete Encoder</source>
<translation>RDAdmin - Encoder löschen</translation>
<translation type="obsolete">RDAdmin - Encoder löschen</translation>
</message>
<message>
<source>Are you sure you want to delete this encoder?</source>
<translation>Sind Sie sicher, daß sie diesen encoder löschen wollen?</translation>
<translation type="obsolete">Sind Sie sicher, daß sie diesen encoder löschen wollen?</translation>
</message>
<message>
<source>Extension</source>
<translation>Erweiterung</translation>
<translation type="obsolete">Erweiterung</translation>
</message>
<message>
<source>This encoder is in use by the following RSS feeds:
</source>
<translation>Dieser Encoder wird von folgenden RSS-Feeds verwendet:
<translation type="obsolete">Dieser Encoder wird von folgenden RSS-Feeds verwendet:
</translation>
</message>
@ -4590,14 +4500,10 @@ Are you sure you want to continue?</source>
<source>
Do you still want to delete it?</source>
<translation>
<translation type="obsolete">
Wollen Sie ihn immernoch löschen?</translation>
</message>
<message>
<source>Encoders on</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListEndpoints</name>

View File

@ -165,66 +165,58 @@ y un respaldo de la base de datos se guardó en </translation>
<name>AddAuxField</name>
<message>
<source>Add Aux Field</source>
<translation>Añadir Campo Aux</translation>
<translation type="obsolete">Añadir Campo Aux</translation>
</message>
<message>
<source>Variable Name: </source>
<translation>Nombre:</translation>
</message>
<message>
<source>%AUX_</source>
<translation></translation>
</message>
<message>
<source>%</source>
<translation></translation>
<translation type="obsolete">Nombre:</translation>
</message>
<message>
<source>Caption: </source>
<translation>Texto:</translation>
<translation type="obsolete">Texto:</translation>
</message>
<message>
<source>&amp;OK</source>
<translation>&amp;Aceptar</translation>
<translation type="obsolete">&amp;Aceptar</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation>&amp;Cancelar</translation>
<translation type="obsolete">&amp;Cancelar</translation>
</message>
<message>
<source>Name Exists</source>
<translation>El nombre existe</translation>
<translation type="obsolete">El nombre existe</translation>
</message>
<message>
<source>That variable name already exists!</source>
<translation>¡Una variable con ese nombre ya existe!</translation>
<translation type="obsolete">¡Una variable con ese nombre ya existe!</translation>
</message>
</context>
<context>
<name>AddEncoder</name>
<message>
<source>Add Encoder</source>
<translation>Agregar Codificador</translation>
<translation type="obsolete">Agregar Codificador</translation>
</message>
<message>
<source>&amp;New Encoder Name:</source>
<translation>&amp;Nombre:</translation>
<translation type="obsolete">&amp;Nombre:</translation>
</message>
<message>
<source>&amp;OK</source>
<translation>&amp;Aceptar</translation>
<translation type="obsolete">&amp;Aceptar</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation>&amp;Cancelar</translation>
<translation type="obsolete">&amp;Cancelar</translation>
</message>
<message>
<source>Add Encoder Error</source>
<translation>Error añadiendo Codificador</translation>
<translation type="obsolete">Error añadiendo Codificador</translation>
</message>
<message>
<source>A encoder with that name already exists!</source>
<translation>¡Un codificador con ese nombre ya existe!</translation>
<translation type="obsolete">¡Un codificador con ese nombre ya existe!</translation>
</message>
</context>
<context>
@ -775,23 +767,23 @@ y un respaldo de la base de datos se guardó en </translation>
<name>EditAuxField</name>
<message>
<source>Edit Auxiliary Metadata Fields</source>
<translation>Editar campos de metadatos auxiliares</translation>
<translation type="obsolete">Editar campos de metadatos auxiliares</translation>
</message>
<message>
<source>Variable Name: </source>
<translation>Variable: </translation>
<translation type="obsolete">Variable: </translation>
</message>
<message>
<source>Caption: </source>
<translation>Texto: </translation>
<translation type="obsolete">Texto: </translation>
</message>
<message>
<source>&amp;OK</source>
<translation>&amp;Aceptar</translation>
<translation type="obsolete">&amp;Aceptar</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation>&amp;Cancelar</translation>
<translation type="obsolete">&amp;Cancelar</translation>
</message>
</context>
<context>
@ -1303,39 +1295,39 @@ files, causing any whose files remain to be imported again.</source>
<name>EditEncoder</name>
<message>
<source>RDAdmin - Edit Encoder</source>
<translation>RDAdmin - Editar Codificador</translation>
<translation type="obsolete">RDAdmin - Editar Codificador</translation>
</message>
<message>
<source>Name:</source>
<translation>Nombre:</translation>
<translation type="obsolete">Nombre:</translation>
</message>
<message>
<source>Allow Channels</source>
<translation>Canales permitidos</translation>
<translation type="obsolete">Canales permitidos</translation>
</message>
<message>
<source>Allow Sample Rates</source>
<translation>Tasas muest permit</translation>
<translation type="obsolete">Tasas muest permit</translation>
</message>
<message>
<source>Allow Bit Rates</source>
<translation>Tasas bit permitidas</translation>
<translation type="obsolete">Tasas bit permitidas</translation>
</message>
<message>
<source>&amp;OK</source>
<translation>&amp;Aceptar</translation>
<translation type="obsolete">&amp;Aceptar</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation>&amp;Cancelar</translation>
<translation type="obsolete">&amp;Cancelar</translation>
</message>
<message>
<source>Default Extension:</source>
<translation>Extensión por omisión:</translation>
<translation type="obsolete">Extensión por omisión:</translation>
</message>
<message>
<source>Command Line:</source>
<translation>Línea de comandos:</translation>
<translation type="obsolete">Línea de comandos:</translation>
</message>
</context>
<context>
@ -1566,7 +1558,7 @@ files, causing any whose files remain to be imported again.</source>
<message>
<source>&amp;Define Auxiliary
Metadata Fields</source>
<translation>&amp;Definir campos de
<translation type="obsolete">&amp;Definir campos de
metadatos auxiliares</translation>
</message>
<message>
@ -4420,40 +4412,40 @@ PARA UN PROPÓSITO PARTICULAR. Oprima el botón &quot;Ver licencia&quot; para d
<name>ListAuxFields</name>
<message>
<source>Auxiliary Metadata Fields</source>
<translation>Campos de metadatos auxiliares</translation>
<translation type="obsolete">Campos de metadatos auxiliares</translation>
</message>
<message>
<source>Var Name</source>
<translation>Nombre</translation>
<translation type="obsolete">Nombre</translation>
</message>
<message>
<source>Caption</source>
<translation>Texto</translation>
<translation type="obsolete">Texto</translation>
</message>
<message>
<source>&amp;Add</source>
<translation>&amp;Añadir</translation>
<translation type="obsolete">&amp;Añadir</translation>
</message>
<message>
<source>&amp;Edit</source>
<translation>&amp;Editar</translation>
<translation type="obsolete">&amp;Editar</translation>
</message>
<message>
<source>&amp;Delete</source>
<translation>E&amp;liminar</translation>
<translation type="obsolete">E&amp;liminar</translation>
</message>
<message>
<source>&amp;Close</source>
<translation>&amp;Cerrar</translation>
<translation type="obsolete">&amp;Cerrar</translation>
</message>
<message>
<source>Warning</source>
<translation>Advertencia</translation>
<translation type="obsolete">Advertencia</translation>
</message>
<message>
<source>This will delete all data associated with this field!
Are you sure you want to continue?</source>
<translation>¡Esto eliminará todos los datos asociados con este campo!
<translation type="obsolete">¡Esto eliminará todos los datos asociados con este campo!
¿Está seguro de continuar?</translation>
</message>
</context>
@ -4536,61 +4528,61 @@ Are you sure you want to continue?</source>
<name>ListEncoders</name>
<message>
<source>RDAdmin - List Encoders</source>
<translation>RDAdmin - Lista de codificadores</translation>
<translation type="obsolete">RDAdmin - Lista de codificadores</translation>
</message>
<message>
<source>Format Name</source>
<translation>Nombre del formato</translation>
<translation type="obsolete">Nombre del formato</translation>
</message>
<message>
<source>Valid Channels</source>
<translation>Canales válidos</translation>
<translation type="obsolete">Canales válidos</translation>
</message>
<message>
<source>Valid Sample Rates</source>
<translation>Tasas muestra válidas</translation>
<translation type="obsolete">Tasas muestra válidas</translation>
</message>
<message>
<source>Valid Bit Rates</source>
<translation>Tasas de bit válidas</translation>
<translation type="obsolete">Tasas de bit válidas</translation>
</message>
<message>
<source>&amp;Edit</source>
<translation>&amp;Editar</translation>
<translation type="obsolete">&amp;Editar</translation>
</message>
<message>
<source>&amp;Close</source>
<translation>&amp;Cerrar</translation>
<translation type="obsolete">&amp;Cerrar</translation>
</message>
<message>
<source>[none]</source>
<translation>[ninguna]</translation>
<translation type="obsolete">[ninguna]</translation>
</message>
<message>
<source>&amp;Add</source>
<translation>&amp;Agregar</translation>
<translation type="obsolete">&amp;Agregar</translation>
</message>
<message>
<source>&amp;Delete</source>
<translation>E&amp;liminar</translation>
<translation type="obsolete">E&amp;liminar</translation>
</message>
<message>
<source>RDAdmin - Delete Encoder</source>
<translation>RDAdmin - Eliminar codificador</translation>
<translation type="obsolete">RDAdmin - Eliminar codificador</translation>
</message>
<message>
<source>Are you sure you want to delete this encoder?</source>
<translation>¿Está seguro de querer eliminar este codificador?</translation>
<translation type="obsolete">¿Está seguro de querer eliminar este codificador?</translation>
</message>
<message>
<source>Extension</source>
<translation>Extensión</translation>
<translation type="obsolete">Extensión</translation>
</message>
<message>
<source>This encoder is in use by the following RSS feeds:
</source>
<translation>Este codificador está siendo usado por las fuentes RSS:
<translation type="obsolete">Este codificador está siendo usado por las fuentes RSS:
</translation>
</message>
@ -4598,13 +4590,13 @@ Are you sure you want to continue?</source>
<source>
Do you still want to delete it?</source>
<translation>
<translation type="obsolete">
¿Aún desea eliminarlo?</translation>
</message>
<message>
<source>Encoders on</source>
<translation>Codificad. en</translation>
<translation type="obsolete">Codificad. en</translation>
</message>
</context>
<context>

View File

@ -1,70 +1,4 @@
<!DOCTYPE TS><TS>
<context>
<name>AddAuxField</name>
<message>
<source>Add Aux Field</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Variable Name: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%AUX_</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Caption: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Name Exists</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>That variable name already exists!</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AddEncoder</name>
<message>
<source>Add Encoder</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;New Encoder Name:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Add Encoder Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>A encoder with that name already exists!</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AddFeed</name>
<message>
@ -530,29 +464,6 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditAuxField</name>
<message>
<source>Edit Auxiliary Metadata Fields</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Variable Name: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Caption: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditBackup</name>
<message>
@ -1040,45 +951,6 @@ files, causing any whose files remain to be imported again.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditEncoder</name>
<message>
<source>RDAdmin - Edit Encoder</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Name:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Allow Channels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Allow Sample Rates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Allow Bit Rates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default Extension:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Command Line:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditEndpoint</name>
<message>
@ -1308,11 +1180,6 @@ files, causing any whose files remain to be imported again.</source>
<source>Item XML:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Define Auxiliary
Metadata Fields</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished"></translation>
@ -3929,46 +3796,6 @@ PARTICULAR PURPOSE. Touch the &quot;View License&quot; button for details.</sou
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListAuxFields</name>
<message>
<source>Auxiliary Metadata Fields</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Var Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Caption</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Add</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Close</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete all data associated with this field!
Are you sure you want to continue?</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListDropboxes</name>
<message>
@ -4044,77 +3871,6 @@ Are you sure you want to continue?</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListEncoders</name>
<message>
<source>RDAdmin - List Encoders</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Format Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Valid Channels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Valid Sample Rates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Valid Bit Rates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Close</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[none]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Add</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>RDAdmin - Delete Encoder</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Are you sure you want to delete this encoder?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Extension</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This encoder is in use by the following RSS feeds:
</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Do you still want to delete it?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Encoders on</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListEndpoints</name>
<message>

View File

@ -118,68 +118,24 @@ oppdatert til versjon </translation>
</context>
<context>
<name>AddAuxField</name>
<message>
<source>Add Aux Field</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Variable Name: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%AUX_</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Caption: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished">&amp;OK</translation>
<translation type="obsolete">&amp;OK</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished">&amp;Avbryt</translation>
</message>
<message>
<source>Name Exists</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>That variable name already exists!</source>
<translation type="unfinished"></translation>
<translation type="obsolete">&amp;Avbryt</translation>
</message>
</context>
<context>
<name>AddEncoder</name>
<message>
<source>Add Encoder</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;New Encoder Name:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished">&amp;OK</translation>
<translation type="obsolete">&amp;OK</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished">&amp;Avbryt</translation>
</message>
<message>
<source>Add Encoder Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>A encoder with that name already exists!</source>
<translation type="unfinished"></translation>
<translation type="obsolete">&amp;Avbryt</translation>
</message>
</context>
<context>
@ -721,25 +677,13 @@ oppdatert til versjon </translation>
</context>
<context>
<name>EditAuxField</name>
<message>
<source>Edit Auxiliary Metadata Fields</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Variable Name: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Caption: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished">&amp;OK</translation>
<translation type="obsolete">&amp;OK</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished">&amp;Avbryt</translation>
<translation type="obsolete">&amp;Avbryt</translation>
</message>
</context>
<context>
@ -1257,41 +1201,13 @@ files, causing any whose files remain to be imported again.</source>
</context>
<context>
<name>EditEncoder</name>
<message>
<source>RDAdmin - Edit Encoder</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Name:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Allow Channels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Allow Sample Rates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Allow Bit Rates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished">&amp;OK</translation>
<translation type="obsolete">&amp;OK</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished">&amp;Avbryt</translation>
</message>
<message>
<source>Default Extension:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Command Line:</source>
<translation type="unfinished"></translation>
<translation type="obsolete">&amp;Avbryt</translation>
</message>
</context>
<context>
@ -1523,11 +1439,6 @@ files, causing any whose files remain to be imported again.</source>
<source>Item XML:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Define Auxiliary
Metadata Fields</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished">&amp;OK</translation>
@ -4385,42 +4296,21 @@ Klikk på &quot;Lisens&quot;-knappen for fleire opplysningar.</translation>
</context>
<context>
<name>ListAuxFields</name>
<message>
<source>Auxiliary Metadata Fields</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Var Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Caption</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Add</source>
<translation type="unfinished">&amp;Legg til</translation>
<translation type="obsolete">&amp;Legg til</translation>
</message>
<message>
<source>&amp;Edit</source>
<translation type="unfinished">R&amp;ediger</translation>
<translation type="obsolete">R&amp;ediger</translation>
</message>
<message>
<source>&amp;Delete</source>
<translation type="unfinished">&amp;Slett</translation>
<translation type="obsolete">&amp;Slett</translation>
</message>
<message>
<source>&amp;Close</source>
<translation type="unfinished">&amp;Lukk</translation>
</message>
<message>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete all data associated with this field!
Are you sure you want to continue?</source>
<translation type="unfinished"></translation>
<translation type="obsolete">&amp;Lukk</translation>
</message>
</context>
<context>
@ -4500,73 +4390,25 @@ Are you sure you want to continue?</source>
</context>
<context>
<name>ListEncoders</name>
<message>
<source>RDAdmin - List Encoders</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Format Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Extension</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Valid Channels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Valid Sample Rates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Valid Bit Rates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Add</source>
<translation type="unfinished">&amp;Legg til</translation>
<translation type="obsolete">&amp;Legg til</translation>
</message>
<message>
<source>&amp;Edit</source>
<translation type="unfinished">R&amp;ediger</translation>
<translation type="obsolete">R&amp;ediger</translation>
</message>
<message>
<source>&amp;Delete</source>
<translation type="unfinished">&amp;Slett</translation>
<translation type="obsolete">&amp;Slett</translation>
</message>
<message>
<source>&amp;Close</source>
<translation type="unfinished">&amp;Lukk</translation>
</message>
<message>
<source>RDAdmin - Delete Encoder</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Are you sure you want to delete this encoder?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This encoder is in use by the following RSS feeds:
</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Do you still want to delete it?</source>
<translation type="unfinished"></translation>
<translation type="obsolete">&amp;Lukk</translation>
</message>
<message>
<source>[none]</source>
<translation type="unfinished">[ingen]</translation>
</message>
<message>
<source>Encoders on</source>
<translation type="unfinished"></translation>
<translation type="obsolete">[ingen]</translation>
</message>
</context>
<context>

View File

@ -118,68 +118,24 @@ oppdatert til versjon </translation>
</context>
<context>
<name>AddAuxField</name>
<message>
<source>Add Aux Field</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Variable Name: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%AUX_</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Caption: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished">&amp;OK</translation>
<translation type="obsolete">&amp;OK</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished">&amp;Avbryt</translation>
</message>
<message>
<source>Name Exists</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>That variable name already exists!</source>
<translation type="unfinished"></translation>
<translation type="obsolete">&amp;Avbryt</translation>
</message>
</context>
<context>
<name>AddEncoder</name>
<message>
<source>Add Encoder</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;New Encoder Name:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished">&amp;OK</translation>
<translation type="obsolete">&amp;OK</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished">&amp;Avbryt</translation>
</message>
<message>
<source>Add Encoder Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>A encoder with that name already exists!</source>
<translation type="unfinished"></translation>
<translation type="obsolete">&amp;Avbryt</translation>
</message>
</context>
<context>
@ -721,25 +677,13 @@ oppdatert til versjon </translation>
</context>
<context>
<name>EditAuxField</name>
<message>
<source>Edit Auxiliary Metadata Fields</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Variable Name: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Caption: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished">&amp;OK</translation>
<translation type="obsolete">&amp;OK</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished">&amp;Avbryt</translation>
<translation type="obsolete">&amp;Avbryt</translation>
</message>
</context>
<context>
@ -1257,41 +1201,13 @@ files, causing any whose files remain to be imported again.</source>
</context>
<context>
<name>EditEncoder</name>
<message>
<source>RDAdmin - Edit Encoder</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Name:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Allow Channels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Allow Sample Rates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Allow Bit Rates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished">&amp;OK</translation>
<translation type="obsolete">&amp;OK</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished">&amp;Avbryt</translation>
</message>
<message>
<source>Default Extension:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Command Line:</source>
<translation type="unfinished"></translation>
<translation type="obsolete">&amp;Avbryt</translation>
</message>
</context>
<context>
@ -1523,11 +1439,6 @@ files, causing any whose files remain to be imported again.</source>
<source>Item XML:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Define Auxiliary
Metadata Fields</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished">&amp;OK</translation>
@ -4385,42 +4296,21 @@ Klikk på &quot;Lisens&quot;-knappen for fleire opplysningar.</translation>
</context>
<context>
<name>ListAuxFields</name>
<message>
<source>Auxiliary Metadata Fields</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Var Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Caption</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Add</source>
<translation type="unfinished">&amp;Legg til</translation>
<translation type="obsolete">&amp;Legg til</translation>
</message>
<message>
<source>&amp;Edit</source>
<translation type="unfinished">R&amp;ediger</translation>
<translation type="obsolete">R&amp;ediger</translation>
</message>
<message>
<source>&amp;Delete</source>
<translation type="unfinished">&amp;Slett</translation>
<translation type="obsolete">&amp;Slett</translation>
</message>
<message>
<source>&amp;Close</source>
<translation type="unfinished">&amp;Lukk</translation>
</message>
<message>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete all data associated with this field!
Are you sure you want to continue?</source>
<translation type="unfinished"></translation>
<translation type="obsolete">&amp;Lukk</translation>
</message>
</context>
<context>
@ -4500,73 +4390,25 @@ Are you sure you want to continue?</source>
</context>
<context>
<name>ListEncoders</name>
<message>
<source>RDAdmin - List Encoders</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Format Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Extension</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Valid Channels</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Valid Sample Rates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Valid Bit Rates</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Add</source>
<translation type="unfinished">&amp;Legg til</translation>
<translation type="obsolete">&amp;Legg til</translation>
</message>
<message>
<source>&amp;Edit</source>
<translation type="unfinished">R&amp;ediger</translation>
<translation type="obsolete">R&amp;ediger</translation>
</message>
<message>
<source>&amp;Delete</source>
<translation type="unfinished">&amp;Slett</translation>
<translation type="obsolete">&amp;Slett</translation>
</message>
<message>
<source>&amp;Close</source>
<translation type="unfinished">&amp;Lukk</translation>
</message>
<message>
<source>RDAdmin - Delete Encoder</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Are you sure you want to delete this encoder?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This encoder is in use by the following RSS feeds:
</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>
Do you still want to delete it?</source>
<translation type="unfinished"></translation>
<translation type="obsolete">&amp;Lukk</translation>
</message>
<message>
<source>[none]</source>
<translation type="unfinished">[ingen]</translation>
</message>
<message>
<source>Encoders on</source>
<translation type="unfinished"></translation>
<translation type="obsolete">[ingen]</translation>
</message>
</context>
<context>

View File

@ -119,68 +119,16 @@ atualizada para a Versão</translation>
</context>
<context>
<name>AddAuxField</name>
<message>
<source>Add Aux Field</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Variable Name: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%AUX_</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Caption: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished">&amp;Cancelar</translation>
</message>
<message>
<source>Name Exists</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>That variable name already exists!</source>
<translation type="unfinished"></translation>
<translation type="obsolete">&amp;Cancelar</translation>
</message>
</context>
<context>
<name>AddEncoder</name>
<message>
<source>Add Encoder</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;New Encoder Name:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished">&amp;Cancelar</translation>
</message>
<message>
<source>Add Encoder Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>A encoder with that name already exists!</source>
<translation type="unfinished"></translation>
<translation type="obsolete">&amp;Cancelar</translation>
</message>
</context>
<context>
@ -722,25 +670,9 @@ atualizada para a Versão</translation>
</context>
<context>
<name>EditAuxField</name>
<message>
<source>Edit Auxiliary Metadata Fields</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Variable Name: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Caption: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished">&amp;Cancelar</translation>
<translation type="obsolete">&amp;Cancelar</translation>
</message>
</context>
<context>
@ -1260,40 +1192,32 @@ files, causing any whose files remain to be imported again.</source>
<name>EditEncoder</name>
<message>
<source>RDAdmin - Edit Encoder</source>
<translation>RDAdmin - Editar Codificador</translation>
<translation type="obsolete">RDAdmin - Editar Codificador</translation>
</message>
<message>
<source>Name:</source>
<translation>Nome:</translation>
<translation type="obsolete">Nome:</translation>
</message>
<message>
<source>Allow Channels</source>
<translation>Permita Canais</translation>
<translation type="obsolete">Permita Canais</translation>
</message>
<message>
<source>Allow Sample Rates</source>
<translation>Permitir Taxas de Amostragem</translation>
<translation type="obsolete">Permitir Taxas de Amostragem</translation>
</message>
<message>
<source>Allow Bit Rates</source>
<translation>Permitir Taxa de Bits</translation>
<translation type="obsolete">Permitir Taxa de Bits</translation>
</message>
<message>
<source>&amp;OK</source>
<translation>
<translation type="obsolete">
&amp;OK</translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation>&amp;Cancelar</translation>
</message>
<message>
<source>Default Extension:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Command Line:</source>
<translation type="unfinished"></translation>
<translation type="obsolete">&amp;Cancelar</translation>
</message>
</context>
<context>
@ -1525,11 +1449,6 @@ files, causing any whose files remain to be imported again.</source>
<source>Item XML:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Define Auxiliary
Metadata Fields</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished"></translation>
@ -4404,42 +4323,21 @@ FINALIDADE PARTICULAR. Aperte o botão VER LICENÇA para mais detalhes.</transl
</context>
<context>
<name>ListAuxFields</name>
<message>
<source>Auxiliary Metadata Fields</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Var Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Caption</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Add</source>
<translation type="unfinished">&amp;Adicionar</translation>
<translation type="obsolete">&amp;Adicionar</translation>
</message>
<message>
<source>&amp;Edit</source>
<translation type="unfinished">&amp;Editar</translation>
<translation type="obsolete">&amp;Editar</translation>
</message>
<message>
<source>&amp;Delete</source>
<translation type="unfinished">&amp;Deletar</translation>
<translation type="obsolete">&amp;Deletar</translation>
</message>
<message>
<source>&amp;Close</source>
<translation type="unfinished">&amp;Fechar</translation>
</message>
<message>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This will delete all data associated with this field!
Are you sure you want to continue?</source>
<translation type="unfinished"></translation>
<translation type="obsolete">&amp;Fechar</translation>
</message>
</context>
<context>
@ -4521,58 +4419,58 @@ Are you sure you want to continue?</source>
<name>ListEncoders</name>
<message>
<source>RDAdmin - List Encoders</source>
<translation>RDAdmin - Listar Codificadores
<translation type="obsolete">RDAdmin - Listar Codificadores
</translation>
</message>
<message>
<source>Format Name</source>
<translation>Formato</translation>
<translation type="obsolete">Formato</translation>
</message>
<message>
<source>Extension</source>
<translation>Extensão</translation>
<translation type="obsolete">Extensão</translation>
</message>
<message>
<source>Valid Channels</source>
<translation>Canais Válidos</translation>
<translation type="obsolete">Canais Válidos</translation>
</message>
<message>
<source>Valid Sample Rates</source>
<translation>Taxas de Amostragem</translation>
<translation type="obsolete">Taxas de Amostragem</translation>
</message>
<message>
<source>Valid Bit Rates</source>
<translation>Taxa de Bits Válidas</translation>
<translation type="obsolete">Taxa de Bits Válidas</translation>
</message>
<message>
<source>&amp;Add</source>
<translation>&amp;Adicionar</translation>
<translation type="obsolete">&amp;Adicionar</translation>
</message>
<message>
<source>&amp;Edit</source>
<translation>&amp;Editar</translation>
<translation type="obsolete">&amp;Editar</translation>
</message>
<message>
<source>&amp;Delete</source>
<translation>&amp;Deletar</translation>
<translation type="obsolete">&amp;Deletar</translation>
</message>
<message>
<source>&amp;Close</source>
<translation>&amp;Fechar</translation>
<translation type="obsolete">&amp;Fechar</translation>
</message>
<message>
<source>RDAdmin - Delete Encoder</source>
<translation>RDAdmin - Deletar Codificador</translation>
<translation type="obsolete">RDAdmin - Deletar Codificador</translation>
</message>
<message>
<source>Are you sure you want to delete this encoder?</source>
<translation>Tem certeza que quer deletar este codificador?</translation>
<translation type="obsolete">Tem certeza que quer deletar este codificador?</translation>
</message>
<message>
<source>This encoder is in use by the following RSS feeds:
</source>
<translation>Este Codificador está em uso pelo Feed RRS:
<translation type="obsolete">Este Codificador está em uso pelo Feed RRS:
</translation>
</message>
@ -4580,16 +4478,12 @@ Are you sure you want to continue?</source>
<source>
Do you still want to delete it?</source>
<translation>
<translation type="obsolete">
Você ainda quer Deletar?</translation>
</message>
<message>
<source>[none]</source>
<translation>[Nenhum]</translation>
</message>
<message>
<source>Encoders on</source>
<translation type="unfinished"></translation>
<translation type="obsolete">[Nenhum]</translation>
</message>
</context>
<context>

View File

@ -41,9 +41,6 @@
EditCast::EditCast(unsigned cast_id,QWidget *parent)
: QDialog(parent,"",true)
{
QString sql;
RDSqlQuery *q;
RDSqlQuery *q1;
int ypos=0;
cast_cast=new RDPodcast(rda->config(),cast_id);
@ -177,43 +174,7 @@ EditCast::EditCast(unsigned cast_id,QWidget *parent)
cast_item_comments_label->setFont(font);
cast_item_comments_label->setAlignment(AlignRight|AlignVCenter|ShowPrefix);
//
// Auxiliary Fields
//
cast_ypos=233+ypos;
QString keyname=cast_cast->keyName();
keyname.replace(" ","_");
QLabel *label;
sql=QString("select ")+
"VAR_NAME,"+
"CAPTION "+
"from AUX_METADATA where "+
QString().sprintf("FEED_ID=%u ",cast_cast->feedId())+
"order by VAR_NAME";
q=new RDSqlQuery(sql);
while(q->next()) {
cast_aux_varnames.push_back(q->value(0).toString().
mid(1,q->value(0).toString().length()-2));
cast_aux_edits.push_back(new QLineEdit(this));
cast_aux_edits.back()->
setGeometry(115,cast_ypos,sizeHint().width()-125,20);
cast_aux_edits.back()->setMaxLength(255);
sql=QString("select ")+
cast_aux_varnames.back()+" from `"+keyname+"_FIELDS where "+
QString().sprintf("CAST_ID=%u",cast_cast->id());
q1=new RDSqlQuery(sql);
if(q1->first()) {
cast_aux_edits.back()->setText(q1->value(0).toString());
}
delete q1;
label=new QLabel(cast_aux_edits.back(),q->value(1).toString()+":",this);
label->setGeometry(20,cast_ypos,90,20);
label->setFont(font);
label->setAlignment(AlignRight|AlignVCenter|ShowPrefix);
cast_ypos+=22;
}
delete q;
cast_ypos+=3;
//
// Effective DateTime
@ -221,7 +182,7 @@ EditCast::EditCast(unsigned cast_id,QWidget *parent)
cast_item_effective_edit=new QDateTimeEdit(this);
cast_item_effective_edit->
setGeometry(115,cast_ypos,165,20);
label=new QLabel(cast_item_effective_edit,tr("Air Date/Time:"),this);
QLabel *label=new QLabel(cast_item_effective_edit,tr("Air Date/Time:"),this);
label->setGeometry(20,cast_ypos,90,20);
label->setFont(font);
label->setAlignment(AlignRight|AlignVCenter|ShowPrefix);
@ -374,17 +335,17 @@ EditCast::EditCast(unsigned cast_id,QWidget *parent)
addDays(cast_cast->shelfLife()));
expirationSelectedData(cast_item_expiration_box->currentItem());
switch(cast_status) {
case RDPodcast::StatusActive:
cast_item_status_group->setButton(1);
break;
case RDPodcast::StatusActive:
cast_item_status_group->setButton(1);
break;
case RDPodcast::StatusPending:
cast_item_status_group->setButton(0);
break;
case RDPodcast::StatusPending:
cast_item_status_group->setButton(0);
break;
case RDPodcast::StatusExpired:
cast_item_status_group->setDisabled(true);
break;
case RDPodcast::StatusExpired:
cast_item_status_group->setDisabled(true);
break;
}
//
@ -465,9 +426,6 @@ void EditCast::reportData()
void EditCast::okData()
{
QString sql;
RDSqlQuery *q;
cast_cast->setItemTitle(cast_item_title_edit->text());
cast_cast->setItemAuthor(cast_item_author_edit->text());
cast_cast->setItemCategory(cast_item_category_edit->text());
@ -501,17 +459,6 @@ void EditCast::okData()
}
}
QString keyname=cast_cast->keyName();
keyname.replace(" ","_");
for(unsigned i=0;i<cast_aux_varnames.size();i++) {
sql=QString("update `")+keyname+"_FIELDS` set "+
cast_aux_varnames[i]+
"=\"RDEscapeString(cast_aux_edits[i]->text()\" where "+
QString().sprintf("CAST_ID=%u",cast_cast->id());
q=new RDSqlQuery(sql);
delete q;
}
cast_feed->
setLastBuildDateTime(RDLocalToUtc(QDateTime(QDate::currentDate(),
QTime::currentTime())));

View File

@ -2,7 +2,7 @@
//
// Edit a Rivendell Cast
//
// (C) Copyright 2002-2004,2016 Fred Gleason <fredg@paravelsystems.com>
// (C) Copyright 2002-2004,2016-2018 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
@ -73,8 +73,6 @@ class EditCast : public QDialog
QDateEdit *cast_item_expiration_edit;
QDateTimeEdit *cast_item_effective_edit;
QButtonGroup *cast_item_status_group;
std::vector<QString> cast_aux_varnames;
std::vector<QLineEdit *> cast_aux_edits;
int cast_ypos;
RDPodcast::Status cast_status;
};

View File

@ -213,12 +213,7 @@ void MainObject::ServeRss(const char *keyname,bool count)
q1=new RDSqlQuery(sql);
while(q1->next()) {
printf("<item>\n");
printf("%s\n",(const char *)
ResolveAuxWildcards(ResolveItemWildcards(keyname,q1,q),
getenv("QUERY_STRING"),
q->value(13).toUInt(),
q1->value(7).toUInt()));
//printf("%s\n",(const char *)ResolveItemWildcards(q1,q));
printf("%s\n",(const char *)ResolveItemWildcards(keyname,q1,q));
printf("</item>\n");
}
delete q1;
@ -316,43 +311,6 @@ QString MainObject::ResolveItemWildcards(const QString &keyname,
}
QString MainObject::ResolveAuxWildcards(QString xml,QString keyname,
unsigned feed_id,unsigned cast_id)
{
QString sql;
RDSqlQuery *q;
RDSqlQuery *q1;
keyname.replace(" ","_");
sql=QString("select VAR_NAME from AUX_METADATA where ")+
QString().sprintf("FEED_ID=%u",feed_id);
q=new RDSqlQuery(sql);
if(q->size()==0) {
delete q;
return xml;
}
sql="select ";
while(q->next()) {
sql+=q->value(0).toString().mid(1,q->value(0).toString().length()-2);
sql+=",";
}
sql=sql.left(sql.length()-1);
sql+=QString().sprintf(" from %s_FIELDS where CAST_ID=%u",
(const char *)keyname,cast_id);
q->seek(-1);
q1=new RDSqlQuery(sql);
while(q1->next()) {
q->next();
xml.replace(q->value(0).toString(),
RDXmlEscape(q1->value(0).toString()));
}
delete q1;
delete q;
return xml;
}
bool MainObject::ShouldCount(const QString &hdr)
{
bool ret=false;

View File

@ -38,8 +38,6 @@ class MainObject : public QObject
QString ResolveChannelWildcards(RDSqlQuery *chan_q);
QString ResolveItemWildcards(const QString &keyname,
RDSqlQuery *item_q,RDSqlQuery *chan_q);
QString ResolveAuxWildcards(QString xml,QString keyname,unsigned feed_id,
unsigned cast_id);
bool ShouldCount(const QString &hdr);
void Redirect(const QString &url);
};