diff --git a/ChangeLog b/ChangeLog index 84a7f4f6..9b94f9f0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -20051,3 +20051,11 @@ devices to fail to be properly restored by the connection watchdog. 2020-06-11 Fred Gleason * Incremented the package version to 3.4.0rss0. +2020-06-30 Fred Gleason + * 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). diff --git a/lib/rdfeed.cpp b/lib/rdfeed.cpp index 54335551..912c494d 100644 --- a/lib/rdfeed.cpp +++ b/lib/rdfeed.cpp @@ -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; diff --git a/lib/rdfeed.h b/lib/rdfeed.h index 698b2a77..a456dcf4 100644 --- a/lib/rdfeed.h +++ b/lib/rdfeed.h @@ -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); diff --git a/rdadmin/list_feeds.cpp b/rdadmin/list_feeds.cpp index b0f7bf76..09536364 100644 --- a/rdadmin/list_feeds.cpp +++ b/rdadmin/list_feeds.cpp @@ -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; } diff --git a/rdadmin/rdadmin_cs.ts b/rdadmin/rdadmin_cs.ts index e2975aa1..50e1721c 100644 --- a/rdadmin/rdadmin_cs.ts +++ b/rdadmin/rdadmin_cs.ts @@ -5183,6 +5183,10 @@ Stále ještě jej chcete smazat? Deleting remote audio... + + Public URL + + ListGpis diff --git a/rdadmin/rdadmin_de.ts b/rdadmin/rdadmin_de.ts index a43304e0..f061cfb3 100644 --- a/rdadmin/rdadmin_de.ts +++ b/rdadmin/rdadmin_de.ts @@ -4997,6 +4997,10 @@ Wollen Sie ihn immernoch löschen? Deleting remote audio... + + Public URL + + ListGpis diff --git a/rdadmin/rdadmin_es.ts b/rdadmin/rdadmin_es.ts index 6e377f7a..828c5473 100644 --- a/rdadmin/rdadmin_es.ts +++ b/rdadmin/rdadmin_es.ts @@ -5150,6 +5150,10 @@ Do you still want to delete it? Deleting remote audio... + + Public URL + + ListGpis diff --git a/rdadmin/rdadmin_fr.ts b/rdadmin/rdadmin_fr.ts index 2f929175..9daafd48 100644 --- a/rdadmin/rdadmin_fr.ts +++ b/rdadmin/rdadmin_fr.ts @@ -4147,6 +4147,10 @@ Permissions Deleting remote audio... + + Public URL + + ListGpis diff --git a/rdadmin/rdadmin_nb.ts b/rdadmin/rdadmin_nb.ts index 9a5dcd26..2f97f657 100644 --- a/rdadmin/rdadmin_nb.ts +++ b/rdadmin/rdadmin_nb.ts @@ -4854,6 +4854,10 @@ Klikk på "Lisens"-knappen for fleire opplysningar. Deleting remote audio... + + Public URL + + ListGpis diff --git a/rdadmin/rdadmin_nn.ts b/rdadmin/rdadmin_nn.ts index 9a5dcd26..2f97f657 100644 --- a/rdadmin/rdadmin_nn.ts +++ b/rdadmin/rdadmin_nn.ts @@ -4854,6 +4854,10 @@ Klikk på "Lisens"-knappen for fleire opplysningar. Deleting remote audio... + + Public URL + + ListGpis diff --git a/rdadmin/rdadmin_pt_BR.ts b/rdadmin/rdadmin_pt_BR.ts index d2492187..f634903a 100644 --- a/rdadmin/rdadmin_pt_BR.ts +++ b/rdadmin/rdadmin_pt_BR.ts @@ -4977,6 +4977,10 @@ Você ainda quer Deletar? Deleting remote audio... + + Public URL + + ListGpis diff --git a/rdcastmanager/rdcastmanager.cpp b/rdcastmanager/rdcastmanager.cpp index cd90e212..5ed0aa9c 100644 --- a/rdcastmanager/rdcastmanager.cpp +++ b/rdcastmanager/rdcastmanager.cpp @@ -19,9 +19,11 @@ // #include +#include #include #include +#include #include #include @@ -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; } diff --git a/rdcastmanager/rdcastmanager.h b/rdcastmanager/rdcastmanager.h index 8dab8c46..cf35e33f 100644 --- a/rdcastmanager/rdcastmanager.h +++ b/rdcastmanager/rdcastmanager.h @@ -2,7 +2,7 @@ // // A RSS Feed Management Utility for Rivendell. // -// (C) Copyright 2002-2018 Fred Gleason +// (C) Copyright 2002-2020 Fred Gleason // // 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; }; diff --git a/rdcastmanager/rdcastmanager_cs.ts b/rdcastmanager/rdcastmanager_cs.ts index 2bef01d1..53065815 100644 --- a/rdcastmanager/rdcastmanager_cs.ts +++ b/rdcastmanager/rdcastmanager_cs.ts @@ -334,7 +334,7 @@ Podcast trotzdem löschen? Description - Popis + Popis Casts @@ -367,7 +367,16 @@ přívod - Superfeed + Public URL + + + + Copy URL to +Clipboard + + + + [superfeed] diff --git a/rdcastmanager/rdcastmanager_de.ts b/rdcastmanager/rdcastmanager_de.ts index 0a902e19..11083f7e 100644 --- a/rdcastmanager/rdcastmanager_de.ts +++ b/rdcastmanager/rdcastmanager_de.ts @@ -323,7 +323,7 @@ Podcast trotzdem löschen? Description - Beschreibung + Beschreibung Casts @@ -356,7 +356,16 @@ Feed - Superfeed + Public URL + + + + Copy URL to +Clipboard + + + + [superfeed] diff --git a/rdcastmanager/rdcastmanager_es.ts b/rdcastmanager/rdcastmanager_es.ts index d522e6ab..e389a4a6 100644 --- a/rdcastmanager/rdcastmanager_es.ts +++ b/rdcastmanager/rdcastmanager_es.ts @@ -274,7 +274,7 @@ Suscripción Description - Descripción + Descripción Casts @@ -306,7 +306,16 @@ Feed - Superfeed + Public URL + + + + Copy URL to +Clipboard + + + + [superfeed] diff --git a/rdcastmanager/rdcastmanager_fr.ts b/rdcastmanager/rdcastmanager_fr.ts index e2f14fc0..87cde746 100644 --- a/rdcastmanager/rdcastmanager_fr.ts +++ b/rdcastmanager/rdcastmanager_fr.ts @@ -251,10 +251,6 @@ Car&t/Cut Feed Name - - Description - - Casts @@ -285,7 +281,16 @@ Feed - Superfeed + Public URL + + + + Copy URL to +Clipboard + + + + [superfeed] diff --git a/rdcastmanager/rdcastmanager_nb.ts b/rdcastmanager/rdcastmanager_nb.ts index aa004812..a5e45716 100644 --- a/rdcastmanager/rdcastmanager_nb.ts +++ b/rdcastmanager/rdcastmanager_nb.ts @@ -322,7 +322,7 @@ Vil du halda fram med å sletta podkasten? Description - Skildring + Skildring Casts @@ -355,7 +355,16 @@ straum - Superfeed + Public URL + + + + Copy URL to +Clipboard + + + + [superfeed] diff --git a/rdcastmanager/rdcastmanager_nn.ts b/rdcastmanager/rdcastmanager_nn.ts index aa004812..a5e45716 100644 --- a/rdcastmanager/rdcastmanager_nn.ts +++ b/rdcastmanager/rdcastmanager_nn.ts @@ -322,7 +322,7 @@ Vil du halda fram med å sletta podkasten? Description - Skildring + Skildring Casts @@ -355,7 +355,16 @@ straum - Superfeed + Public URL + + + + Copy URL to +Clipboard + + + + [superfeed] diff --git a/rdcastmanager/rdcastmanager_pt_BR.ts b/rdcastmanager/rdcastmanager_pt_BR.ts index 4e0031cb..813854da 100644 --- a/rdcastmanager/rdcastmanager_pt_BR.ts +++ b/rdcastmanager/rdcastmanager_pt_BR.ts @@ -288,7 +288,7 @@ Continuar deletando cast? Description - Descrição + Descrição Casts @@ -321,7 +321,16 @@ Feed - Superfeed + Public URL + + + + Copy URL to +Clipboard + + + + [superfeed]