2020-06-30 Fred Gleason <fredg@paravelsystems.com>

* Added a 'RDFeed::publicUrl()' static method.
	* Added a 'Public URL' column in the 'List Feeds' dialog in
	rdadmin(1).
	* Removed the 'Superfeed' and 'Description' columns from the
	main window of rdcastmanager(1).
	* Added a 'Public URL' column and a 'Copy URL to Clipboard'
	button to the main window of rdcastmanager(1).

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason 2020-06-30 15:15:19 -04:00
parent 85791995c7
commit 4f96349789
20 changed files with 194 additions and 49 deletions

View File

@ -20051,3 +20051,11 @@
devices to fail to be properly restored by the connection watchdog.
2020-06-11 Fred Gleason <fredg@paravelsystems.com>
* Incremented the package version to 3.4.0rss0.
2020-06-30 Fred Gleason <fredg@paravelsystems.com>
* Added a 'RDFeed::publicUrl()' static method.
* Added a 'Public URL' column in the 'List Feeds' dialog in
rdadmin(1).
* Removed the 'Superfeed' and 'Description' columns from the
main window of rdcastmanager(1).
* Added a 'Public URL' column and a 'Copy URL to Clipboard'
button to the main window of rdcastmanager(1).

View File

@ -1664,6 +1664,12 @@ QString RDFeed::imageFilename(int feed_id,int img_id,const QString &ext)
}
QString RDFeed::publicUrl(const QString &base_url,const QString &keyname)
{
return base_url+"/"+keyname+"."+RD_RSS_XML_FILE_EXTENSION;
}
unsigned RDFeed::CreateCast(QString *filename,int bytes,int msecs) const
{
QString sql;

View File

@ -154,6 +154,7 @@ class RDFeed : public QObject
QString *err_msg,const QString &exemplar="");
static QString errorString(RDFeed::Error err);
static QString imageFilename(int feed_id,int img_id,const QString &ext);
static QString publicUrl(const QString &base_url,const QString &keyname);
signals:
void postProgressChanged(int step);

View File

@ -45,8 +45,7 @@ ListFeeds::ListFeeds(QWidget *parent)
//
// Fix the Window Size
//
setMinimumWidth(sizeHint().width());
setMinimumHeight(sizeHint().height());
setMinimumSize(sizeHint());
setWindowTitle("RDAdmin - "+tr("Rivendell Feed List"));
@ -93,14 +92,16 @@ ListFeeds::ListFeeds(QWidget *parent)
list_feeds_view->setColumnAlignment(0,Qt::AlignCenter|Qt::AlignVCenter);
list_feeds_view->addColumn(tr("Title"));
list_feeds_view->setColumnAlignment(1,Qt::AlignLeft);
list_feeds_view->addColumn(tr("Public URL"));
list_feeds_view->setColumnAlignment(2,Qt::AlignLeft);
list_feeds_view->addColumn(tr("Superfeed"));
list_feeds_view->setColumnAlignment(2,Qt::AlignCenter|Qt::AlignVCenter);
list_feeds_view->addColumn(tr("AutoPost"));
list_feeds_view->setColumnAlignment(3,Qt::AlignCenter|Qt::AlignVCenter);
list_feeds_view->addColumn(tr("Keep Metadata"));
list_feeds_view->addColumn(tr("AutoPost"));
list_feeds_view->setColumnAlignment(4,Qt::AlignCenter|Qt::AlignVCenter);
list_feeds_view->addColumn(tr("Creation Date"));
list_feeds_view->addColumn(tr("Keep Metadata"));
list_feeds_view->setColumnAlignment(5,Qt::AlignCenter|Qt::AlignVCenter);
list_feeds_view->addColumn(tr("Creation Date"));
list_feeds_view->setColumnAlignment(6,Qt::AlignCenter|Qt::AlignVCenter);
QLabel *list_box_label=new QLabel(list_feeds_view,tr("&Feeds:"),this);
list_box_label->setFont(labelFont());
list_box_label->setGeometry(14,11,85,19);
@ -120,7 +121,7 @@ ListFeeds::~ListFeeds()
QSize ListFeeds::sizeHint() const
{
return QSize(500,280);
return QSize(800,300);
}
@ -329,7 +330,8 @@ void ListFeeds::RefreshList()
"IS_SUPERFEED,"+ // 03
"ENABLE_AUTOPOST,"+ // 04
"KEEP_METADATA,"+ // 05
"ORIGIN_DATETIME "+ // 06
"ORIGIN_DATETIME,"+ // 06
"BASE_URL "+ // 07
"from FEEDS";
q=new RDSqlQuery(sql);
while (q->next()) {
@ -337,10 +339,12 @@ void ListFeeds::RefreshList()
item->setId(q->value(0).toInt());
item->setText(0,q->value(1).toString());
item->setText(1,q->value(2).toString());
item->setText(2,q->value(3).toString());
item->setText(3,q->value(4).toString());
item->setText(4,q->value(5).toString());
item->setText(5,q->value(6).toDateTime().toString("MM/dd/yyyy"));
item->setText(2,RDFeed::publicUrl(q->value(7).toString(),
q->value(1).toString()));
item->setText(3,q->value(3).toString());
item->setText(4,q->value(4).toString());
item->setText(5,q->value(5).toString());
item->setText(6,q->value(6).toDateTime().toString("MM/dd/yyyy"));
}
delete q;
}
@ -357,17 +361,20 @@ void ListFeeds::RefreshItem(RDListViewItem *item)
"IS_SUPERFEED,"+ // 02
"ENABLE_AUTOPOST,"+ // 03
"KEEP_METADATA,"+ // 04
"ORIGIN_DATETIME "+ // 05
"ORIGIN_DATETIME,"+ // 05
"BASE_URL "+ // 06
"from FEEDS where "+
QString().sprintf("ID=%d",item->id());
q=new RDSqlQuery(sql);
if(q->next()) {
item->setText(0,q->value(0).toString());
item->setText(1,q->value(1).toString());
item->setText(2,q->value(2).toString());
item->setText(3,q->value(3).toString());
item->setText(4,q->value(4).toString());
item->setText(5,q->value(5).toDateTime().toString("MM/dd/yyyy"));
item->setText(2,RDFeed::publicUrl(q->value(0).toString(),
q->value(6).toString()));
item->setText(3,q->value(2).toString());
item->setText(4,q->value(3).toString());
item->setText(5,q->value(4).toString());
item->setText(6,q->value(5).toDateTime().toString("MM/dd/yyyy"));
}
delete q;
}

View File

@ -5183,6 +5183,10 @@ Stále ještě jej chcete smazat?</translation>
<source>Deleting remote audio...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Public URL</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListGpis</name>

View File

@ -4997,6 +4997,10 @@ Wollen Sie ihn immernoch löschen?</translation>
<source>Deleting remote audio...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Public URL</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListGpis</name>

View File

@ -5150,6 +5150,10 @@ Do you still want to delete it?</source>
<source>Deleting remote audio...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Public URL</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListGpis</name>

View File

@ -4147,6 +4147,10 @@ Permissions</source>
<source>Deleting remote audio...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Public URL</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListGpis</name>

View File

@ -4854,6 +4854,10 @@ Klikk på &quot;Lisens&quot;-knappen for fleire opplysningar.</translation>
<source>Deleting remote audio...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Public URL</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListGpis</name>

View File

@ -4854,6 +4854,10 @@ Klikk på &quot;Lisens&quot;-knappen for fleire opplysningar.</translation>
<source>Deleting remote audio...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Public URL</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListGpis</name>

View File

@ -4977,6 +4977,10 @@ Você ainda quer Deletar?</translation>
<source>Deleting remote audio...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Public URL</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListGpis</name>

View File

@ -19,9 +19,11 @@
//
#include <qapplication.h>
#include <qclipboard.h>
#include <qtranslator.h>
#include <qmessagebox.h>
#include <rdconf.h>
#include <rdescape_string.h>
#include <rdpodcast.h>
@ -104,6 +106,8 @@ MainWidget::MainWidget(RDConfig *c,QWidget *parent)
cast_feed_list=new RDListView(this);
cast_feed_list->setAllColumnsShowFocus(true);
cast_feed_list->setItemMargin(5);
connect(cast_feed_list,SIGNAL(clicked(Q3ListViewItem *)),
this,SLOT(feedClickedData(Q3ListViewItem *)));
connect(cast_feed_list,
SIGNAL(doubleClicked(Q3ListViewItem *,const QPoint &,int)),
this,
@ -112,28 +116,35 @@ MainWidget::MainWidget(RDConfig *c,QWidget *parent)
cast_feed_list->setColumnAlignment(0,Qt::AlignCenter);
cast_feed_list->addColumn(tr("Key Name"));
cast_feed_list->setColumnAlignment(1,Qt::AlignHCenter);
cast_feed_list->setColumnAlignment(1,Qt::AlignLeft);
cast_feed_list->addColumn(tr("Feed Name"));
cast_feed_list->setColumnAlignment(2,Qt::AlignLeft);
cast_feed_list->addColumn(tr("Superfeed"));
cast_feed_list->addColumn(tr("Casts"));
cast_feed_list->setColumnAlignment(3,Qt::AlignCenter);
cast_feed_list->addColumn(tr("Description"));
cast_feed_list->addColumn(tr("Public URL"));
cast_feed_list->setColumnAlignment(4,Qt::AlignLeft);
cast_feed_list->addColumn(tr("Casts"));
cast_feed_list->setColumnAlignment(5,Qt::AlignCenter);
//
// Open Button
//
cast_open_button=new QPushButton(this);
cast_open_button->setFont(buttonFont());
cast_open_button->setText(tr("&View\nFeed"));
cast_open_button->setDisabled(true);
connect(cast_open_button,SIGNAL(clicked()),this,SLOT(openData()));
//
// Copy Button
//
cast_copy_button=new QPushButton(this);
cast_copy_button->setFont(buttonFont());
cast_copy_button->setText(tr("Copy URL to\nClipboard"));
cast_copy_button->setDisabled(true);
connect(cast_copy_button,SIGNAL(clicked()),this,SLOT(copyData()));
//
// Close Button
//
@ -170,6 +181,13 @@ void MainWidget::userChangedData()
}
void MainWidget::feedClickedData(Q3ListViewItem *item)
{
cast_open_button->setDisabled(item==NULL);
cast_copy_button->setDisabled(item==NULL);
}
void MainWidget::openData()
{
RDListViewItem *item=(RDListViewItem *)cast_feed_list->selectedItem();
@ -183,6 +201,16 @@ void MainWidget::openData()
}
void MainWidget::copyData()
{
RDListViewItem *item=(RDListViewItem *)cast_feed_list->selectedItem();
if(item==NULL) {
return;
}
QApplication::clipboard()->setText(item->text(4));
}
void MainWidget::feedDoubleclickedData(Q3ListViewItem *,const QPoint &,int)
{
openData();
@ -200,6 +228,7 @@ void MainWidget::resizeEvent(QResizeEvent *e)
if(cast_resize) {
cast_feed_list->setGeometry(10,10,size().width()-20,size().height()-70);
cast_open_button->setGeometry(10,size().height()-55,80,50);
cast_copy_button->setGeometry(120,size().height()-55,100,50);
cast_close_button->setGeometry(size().width()-90,size().height()-55,80,50);
}
}
@ -214,16 +243,16 @@ void MainWidget::RefreshItem(RDListViewItem *item)
int total=0;
sql=QString("select ")+
"CHANNEL_TITLE,"+ // 00
"IS_SUPERFEED,"+ // 01
"CHANNEL_DESCRIPTION,"+ // 02
"ID "+ // 03
"CHANNEL_TITLE,"+ // 00
"IS_SUPERFEED,"+ // 01
"ID,"+ // 02
"BASE_URL "+ // 03
"from FEEDS where "+
"KEY_NAME=\""+RDEscapeString(item->text(1))+"\"";
q=new RDSqlQuery(sql);
while(q->next()) {
sql=QString().sprintf("select STATUS from PODCASTS where FEED_ID=%u",
q->value(3).toUInt());
q->value(2).toUInt());
q1=new RDSqlQuery(sql);
while(q1->next()) {
total++;
@ -245,9 +274,13 @@ void MainWidget::RefreshItem(RDListViewItem *item)
item->setPixmap(0,*cast_redx_map);
}
item->setText(2,q->value(0).toString());
item->setText(3,q->value(1).toString());
item->setText(4,q->value(2).toString());
item->setText(5,QString().sprintf("%d / %d",active,total));
if(RDBool(q->value(1).toString())) {
item->setText(3,tr("[superfeed]"));
}
else {
item->setText(3,QString().sprintf("%d / %d",active,total));
}
item->setText(4,RDFeed::publicUrl(q->value(3).toString(),item->text(1)));
}
delete q;
}

View File

@ -2,7 +2,7 @@
//
// A RSS Feed Management Utility for Rivendell.
//
// (C) Copyright 2002-2018 Fred Gleason <fredg@paravelsystems.com>
// (C) Copyright 2002-2020 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
@ -39,7 +39,9 @@ class MainWidget : public RDWidget
private slots:
void openData();
void copyData();
void userChangedData();
void feedClickedData(Q3ListViewItem *item);
void feedDoubleclickedData(Q3ListViewItem *item,const QPoint &pt,int col);
void quitMainWidget();
@ -54,6 +56,7 @@ class MainWidget : public RDWidget
QPixmap *cast_greencheckmark_map;
QPixmap *cast_redx_map;
QPushButton *cast_open_button;
QPushButton *cast_copy_button;
QPushButton *cast_close_button;
bool cast_resize;
};

View File

@ -334,7 +334,7 @@ Podcast trotzdem löschen?</translation>
</message>
<message>
<source>Description</source>
<translation>Popis</translation>
<translation type="obsolete">Popis</translation>
</message>
<message>
<source>Casts</source>
@ -367,7 +367,16 @@ přívod</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Superfeed</source>
<source>Public URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Copy URL to
Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[superfeed]</source>
<translation type="unfinished"></translation>
</message>
</context>

View File

@ -323,7 +323,7 @@ Podcast trotzdem löschen?</translation>
</message>
<message>
<source>Description</source>
<translation>Beschreibung</translation>
<translation type="obsolete">Beschreibung</translation>
</message>
<message>
<source>Casts</source>
@ -356,7 +356,16 @@ Feed</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Superfeed</source>
<source>Public URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Copy URL to
Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[superfeed]</source>
<translation type="unfinished"></translation>
</message>
</context>

View File

@ -274,7 +274,7 @@ Suscripción</translation>
</message>
<message>
<source>Description</source>
<translation>Descripción</translation>
<translation type="obsolete">Descripción</translation>
</message>
<message>
<source>Casts</source>
@ -306,7 +306,16 @@ Feed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Superfeed</source>
<source>Public URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Copy URL to
Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[superfeed]</source>
<translation type="unfinished"></translation>
</message>
</context>

View File

@ -251,10 +251,6 @@ Car&amp;t/Cut</source>
<source>Feed Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Description</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Casts</source>
<translation type="unfinished"></translation>
@ -285,7 +281,16 @@ Feed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Superfeed</source>
<source>Public URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Copy URL to
Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[superfeed]</source>
<translation type="unfinished"></translation>
</message>
</context>

View File

@ -322,7 +322,7 @@ Vil du halda fram med å sletta podkasten?</translation>
</message>
<message>
<source>Description</source>
<translation>Skildring</translation>
<translation type="obsolete">Skildring</translation>
</message>
<message>
<source>Casts</source>
@ -355,7 +355,16 @@ straum</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Superfeed</source>
<source>Public URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Copy URL to
Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[superfeed]</source>
<translation type="unfinished"></translation>
</message>
</context>

View File

@ -322,7 +322,7 @@ Vil du halda fram med å sletta podkasten?</translation>
</message>
<message>
<source>Description</source>
<translation>Skildring</translation>
<translation type="obsolete">Skildring</translation>
</message>
<message>
<source>Casts</source>
@ -355,7 +355,16 @@ straum</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Superfeed</source>
<source>Public URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Copy URL to
Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[superfeed]</source>
<translation type="unfinished"></translation>
</message>
</context>

View File

@ -288,7 +288,7 @@ Continuar deletando cast?</translation>
</message>
<message>
<source>Description</source>
<translation>Descrição</translation>
<translation type="obsolete">Descrição</translation>
</message>
<message>
<source>Casts</source>
@ -321,7 +321,16 @@ Feed</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Superfeed</source>
<source>Public URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Copy URL to
Clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[superfeed]</source>
<translation type="unfinished"></translation>
</message>
</context>