2020-02-23 Fred Gleason <fredg@paravelsystems.com>

* Implemented superfeed in 'rdfeed.xml'.
This commit is contained in:
Fred Gleason 2020-02-23 17:24:48 -05:00
parent a2f571f759
commit 4f6c0eb2c9
30 changed files with 345 additions and 145 deletions

View File

@ -19589,3 +19589,5 @@
2020-02-21 Fred Gleason <fredg@paravelsystems.com> 2020-02-21 Fred Gleason <fredg@paravelsystems.com>
* Tweaked controls to be disabled for superfeeds in the 'Edit Feed' * Tweaked controls to be disabled for superfeeds in the 'Edit Feed'
dialog in rdadmin(1). dialog in rdadmin(1).
2020-02-23 Fred Gleason <fredg@paravelsystems.com>
* Implemented superfeed in 'rdfeed.xml'.

View File

@ -52,7 +52,6 @@ EXTRA_DIST = audio_cards.txt\
extended_panels.txt\ extended_panels.txt\
feed_perms.txt\ feed_perms.txt\
feeds.txt\ feeds.txt\
feeds_key_names.txt\
gpio_events.txt\ gpio_events.txt\
gpis.txt\ gpis.txt\
gpos.txt\ gpos.txt\
@ -100,6 +99,7 @@ EXTRA_DIST = audio_cards.txt\
stack_lines.txt\ stack_lines.txt\
stack_sched_codes.txt\ stack_sched_codes.txt\
stations.txt\ stations.txt\
superfeed_maps.txt\
switcher_nodes.txt\ switcher_nodes.txt\
system.txt\ system.txt\
triggers.txt\ triggers.txt\

View File

@ -1,10 +0,0 @@
FEED_KEY_NAMES Table Layout for Rivendell
The FEED_KEY_NAMES table the mappings of actual RSS feeds with super
feeds.
FIELD NAME TYPE REMARKS
---------------------------------------------------------------
ID int(10) unsigned Primary key, auto increment
KEY_NAME varchar(8)
MEMBER_KEY_NAME varchar(8)

View File

@ -0,0 +1,12 @@
SUPERFEED_MAPS Table Layout for Rivendell
The SUPERFEED_MAPS table contains the mappings of actual RSS feeds with super
feeds.
FIELD NAME TYPE REMARKS
------------------------------------------------------------------
ID int(10) unsigned Primary key, auto increment
FEED_ID int(10) unsigned From FEEDS.ID
MEMBER_FEED_ID int(10) unsigned From FEEDS.ID
KEY_NAME varchar(8) From FEEDS.KEY_NAME
MEMBER_KEY_NAME varchar(8) From FEEDS.KEY_NAME

View File

@ -48,21 +48,39 @@ QString RDCastSearchString(const QString &filter,bool unexp_only,
return ret; return ret;
} }
QString RDCastSearch(int feed_id,const QString &filter,bool unexp_only,
bool active_only)
{
QString ret=QString().sprintf("where (FEED_ID=%d)",feed_id);
ret+=RDCastSearchString(filter,unexp_only,active_only);
return ret; QString RDCastSearch(const QString &keyname,bool is_super,const QString &filter,
}
QString RDCastSearch(const QString &keyname,const QString &filter,
bool unexp_only,bool active_only) bool unexp_only,bool active_only)
{ {
QString ret=QString("where (KEY_NAME=\"")+ QString sql;
RDSqlQuery *q;
QString ret=QString("where (.KEY_NAME=\"")+
RDEscapeString(keyname)+"\")"; RDEscapeString(keyname)+"\")";
if(is_super) {
ret="where ";
sql=QString("select ")+
"MEMBER_FEED_ID "+ // 00
"from SUPERFEED_MAPS where "+
"KEY_NAME=\""+RDEscapeString(keyname)+"\"";
q=new RDSqlQuery(sql);
while(q->next()) {
ret+=QString().sprintf("PODCASTS.FEED_ID=%u || ",q->value(0).toUInt());
}
delete q;
ret=ret.left(ret.length()-3);
}
else {
sql=QString("select ")+
"ID "+ // 00
"from FEEDS where "+
"KEY_NAME=\""+RDEscapeString(keyname)+"\"";
q=new RDSqlQuery(sql);
if(q->first()) {
ret=QString().sprintf("where PODCASTS.FEED_ID=%u ",q->value(0).toUInt());
}
delete q;
}
ret+=RDCastSearchString(filter,unexp_only,active_only); ret+=RDCastSearchString(filter,unexp_only,active_only);
return ret; return ret;

View File

@ -2,7 +2,7 @@
// //
// SQL search clause for RDCastManager // SQL search clause for RDCastManager
// //
// (C) Copyright 2009,2016 Fred Gleason <fredg@paravelsystems.com> // (C) Copyright 2009-2020 Fred Gleason <fredg@paravelsystems.com>
// //
// This program is free software; you can redistribute it and/or modify // 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 // it under the terms of the GNU General Public License version 2 as
@ -21,9 +21,7 @@
#ifndef RDCASTSEARCH_H #ifndef RDCASTSEARCH_H
#define RDCASTSEARCH_H #define RDCASTSEARCH_H
QString RDCastSearch(int feed_id,const QString &filter,bool unexp_only, QString RDCastSearch(const QString &keyname,bool is_super,const QString &filter,
bool active_only);
QString RDCastSearch(const QString &keyname,const QString &filter,
bool unexp_only,bool active_only); bool unexp_only,bool active_only);

View File

@ -129,6 +129,24 @@ void RDFeed::setIsSuperfeed(bool state) const
} }
QStringList RDFeed::isSubfeedOf() const
{
QStringList ret;
QString sql=QString("select ")+
"KEY_NAME "+ // 00
"from SUPERFEED_MAPS where "+
"MEMBER_KEY_NAME=\""+RDEscapeString(keyName())+"\"";
RDSqlQuery *q=new RDSqlQuery(sql);
while(q->next()) {
ret.push_back(q->value(0).toString());
}
delete q;
return ret;
}
bool RDFeed::audienceMetrics() const bool RDFeed::audienceMetrics() const
{ {
return RDBool(RDGetSqlValue("FEEDS","KEY_NAME",feed_keyname, return RDBool(RDGetSqlValue("FEEDS","KEY_NAME",feed_keyname,
@ -636,6 +654,19 @@ bool RDFeed::postXml(QString *err_msg)
} }
curl_easy_cleanup(curl); curl_easy_cleanup(curl);
//
// Update Enclosing Superfeeds
//
QStringList superfeeds=isSubfeedOf();
for(int i=0;i<superfeeds.size();i++) {
QString err_msg2;
RDFeed *feed=new RDFeed(superfeeds.at(i),feed_config,this);
if(!feed->postXml(&err_msg2)) {
*err_msg+="\n"+err_msg2;
}
delete feed;
}
return ret; return ret;
} }
@ -958,6 +989,22 @@ QString RDFeed::rssXml(QString *err_msg,bool *ok)
// //
// Render Item XML // Render Item XML
// //
QString where;
if(isSuperfeed()) {
sql=QString("select ")+
"MEMBER_FEED_ID "+
"from SUPERFEED_MAPS where "+
QString().sprintf("FEED_ID=%d",q->value(13).toUInt());
q1=new RDSqlQuery(sql);
while(q1->next()) {
where+=QString().sprintf("(FEED_ID=%u) || ",q1->value(0).toUInt());
}
delete q1;
where=("("+where.left(where.length()-4)+") && ");
}
else {
where =QString().sprintf("(FEED_ID=%u)&&",q->value(13).toUInt());
}
sql=QString("select ")+ sql=QString("select ")+
"ITEM_TITLE,"+ // 00 "ITEM_TITLE,"+ // 00
"ITEM_DESCRIPTION,"+ // 01 "ITEM_DESCRIPTION,"+ // 01
@ -973,7 +1020,8 @@ QString RDFeed::rssXml(QString *err_msg,bool *ok)
"EFFECTIVE_DATETIME,"+ // 11 "EFFECTIVE_DATETIME,"+ // 11
"ID "+ // 12 "ID "+ // 12
"from PODCASTS where "+ "from PODCASTS where "+
QString().sprintf("(FEED_ID=%d)&&",q->value(13).toUInt())+ where+
//QString().sprintf("(FEED_ID=%d)&&",q->value(13).toUInt())+
QString().sprintf("(STATUS=%d) ",RDPodcast::StatusActive)+ QString().sprintf("(STATUS=%d) ",RDPodcast::StatusActive)+
"order by ORIGIN_DATETIME"; "order by ORIGIN_DATETIME";
if(q->value(15).toString()=="N") { if(q->value(15).toString()=="N") {
@ -1116,14 +1164,19 @@ unsigned RDFeed::create(const QString &keyname,bool enable_users,
// Duplicate member feed references // Duplicate member feed references
// //
if(q->value(0).toString()=="Y") { if(q->value(0).toString()=="Y") {
sql=QString("select MEMBER_KEY_NAME ")+ sql=QString("select ")+
"from FEED_KEY_NAMES where "+ "MEMBER_KEY_NAME,"+ // 00
"FEED_ID,"+ // 01
"MEMBER_FEED_ID "+ // 02
"from SUPERFEED_MAPS where "+
"KEY_NAME=\""+RDEscapeString(exemplar)+"\""; "KEY_NAME=\""+RDEscapeString(exemplar)+"\"";
q1=new RDSqlQuery(sql); q1=new RDSqlQuery(sql);
while(q1->next()) { while(q1->next()) {
sql=QString("insert into FEED_KEY_NAMES set ")+ sql=QString("insert into SUPERFEED_MAPS set ")+
"KEY_NAME=\""+RDEscapeString(keyname)+"\","+ "KEY_NAME=\""+RDEscapeString(keyname)+"\","+
"MEMBER_KEY_NAME=\""+RDEscapeString(q1->value(0).toString())+"\""; "MEMBER_KEY_NAME=\""+RDEscapeString(q1->value(0).toString())+"\","+
QString().sprintf("FEED_ID=%u,",q1->value(1).toUInt())+
QString().sprintf("MEMBER_FEED_ID=%u",q1->value(2).toUInt());
RDSqlQuery::apply(sql); RDSqlQuery::apply(sql);
} }
delete q1; delete q1;

View File

@ -46,6 +46,7 @@ class RDFeed : public QObject
bool exists() const; bool exists() const;
bool isSuperfeed() const; bool isSuperfeed() const;
void setIsSuperfeed(bool state) const; void setIsSuperfeed(bool state) const;
QStringList isSubfeedOf() const;
bool audienceMetrics() const; bool audienceMetrics() const;
void setAudienceMetrics(bool state); void setAudienceMetrics(bool state);
QString channelTitle() const; QString channelTitle() const;

View File

@ -2,7 +2,7 @@
// //
// Abstract a Rivendell Podcast Entry // Abstract a Rivendell Podcast Entry
// //
// (C) Copyright 2002-2007,2016-2017 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 // 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 // it under the terms of the GNU General Public License version 2 as
@ -66,8 +66,6 @@ class RDPodcast
void setShelfLife(unsigned days) const; void setShelfLife(unsigned days) const;
RDPodcast::Status status() const; RDPodcast::Status status() const;
void setStatus(RDPodcast::Status status); void setStatus(RDPodcast::Status status);
//QString audioUploadCommand(const QString &srcfile) const;
//QString audioPurgeCommand() const;
bool removeAudio(RDFeed *feed,QString *err_text,bool log_debug) const; bool removeAudio(RDFeed *feed,QString *err_text,bool log_debug) const;
static QString guid(const QString &url,const QString &filename, static QString guid(const QString &url,const QString &filename,
unsigned feed_id,unsigned cast_id); unsigned feed_id,unsigned cast_id);

View File

@ -162,7 +162,7 @@ EditFeed::EditFeed(const QString &feed,QWidget *parent)
feed_purge_url_edit=new QLineEdit(this); feed_purge_url_edit=new QLineEdit(this);
feed_purge_url_edit->setMaxLength(255); feed_purge_url_edit->setMaxLength(255);
feed_purge_url_label= feed_purge_url_label=
new QLabel(feed_purge_url_edit,tr("Audio Upload URL:"),this); new QLabel(feed_purge_url_edit,tr("Upload URL")+":",this);
feed_purge_url_label->setFont(labelFont()); feed_purge_url_label->setFont(labelFont());
feed_purge_url_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); feed_purge_url_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
@ -194,7 +194,7 @@ EditFeed::EditFeed(const QString &feed,QWidget *parent)
// //
feed_format_edit=new QLineEdit(this); feed_format_edit=new QLineEdit(this);
feed_format_edit->setReadOnly(true); feed_format_edit->setReadOnly(true);
feed_format_label=new QLabel(feed_format_edit,tr("Upload Format:"),this); feed_format_label=new QLabel(feed_format_edit,tr("Audio Format:"),this);
feed_format_label->setFont(labelFont()); feed_format_label->setFont(labelFont());
feed_format_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); feed_format_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
feed_format_button=new QPushButton(this); feed_format_button=new QPushButton(this);
@ -232,7 +232,7 @@ EditFeed::EditFeed(const QString &feed,QWidget *parent)
feed_base_url_edit=new QLineEdit(this); feed_base_url_edit=new QLineEdit(this);
feed_base_url_edit->setMaxLength(255); feed_base_url_edit->setMaxLength(255);
feed_base_url_label= feed_base_url_label=
new QLabel(feed_base_url_edit,tr("Audio Download URL:"),this); new QLabel(feed_base_url_edit,tr("Download URL")+":",this);
feed_base_url_label->setFont(labelFont()); feed_base_url_label->setFont(labelFont());
feed_base_url_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); feed_base_url_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
@ -465,34 +465,34 @@ void EditFeed::isSuperfeedChangedData(int n)
feed_redirect_url_label->setEnabled(redirected); feed_redirect_url_label->setEnabled(redirected);
feed_redirect_url_edit->setEnabled(redirected); feed_redirect_url_edit->setEnabled(redirected);
feed_base_url_edit->setDisabled(redirected||superfeed); feed_base_url_edit->setDisabled(redirected);
feed_purge_url_edit->setDisabled(redirected||superfeed); feed_purge_url_edit->setDisabled(redirected);
feed_purge_username_label->setDisabled(redirected||superfeed); feed_purge_username_label->setDisabled(redirected);
feed_purge_username_edit->setDisabled(redirected||superfeed); feed_purge_username_edit->setDisabled(redirected);
feed_purge_password_label->setDisabled(redirected||superfeed); feed_purge_password_label->setDisabled(redirected);
feed_purge_password_edit->setDisabled(redirected||superfeed); feed_purge_password_edit->setDisabled(redirected);
feed_max_shelf_life_spin->setDisabled(redirected||superfeed); feed_max_shelf_life_spin->setDisabled(redirected||superfeed);
feed_autopost_box->setDisabled(redirected||superfeed); feed_autopost_box->setDisabled(redirected||superfeed);
feed_keep_metadata_box->setDisabled(redirected||superfeed); feed_keep_metadata_box->setDisabled(redirected);
feed_keep_metadata_label->setDisabled(redirected);
feed_format_edit->setDisabled(redirected||superfeed); feed_format_edit->setDisabled(redirected||superfeed);
feed_normalize_box->setDisabled(redirected||superfeed); feed_normalize_box->setDisabled(redirected||superfeed);
feed_extension_edit->setDisabled(redirected||superfeed); feed_extension_edit->setDisabled(redirected||superfeed);
feed_castorder_box->setDisabled(redirected||superfeed); feed_castorder_box->setDisabled(redirected);
feed_format_button->setDisabled(redirected||superfeed); feed_format_button->setDisabled(redirected||superfeed);
feed_base_url_label->setDisabled(redirected||superfeed); feed_base_url_label->setDisabled(redirected);
feed_base_preamble_label->setDisabled(redirected||superfeed); feed_base_preamble_label->setDisabled(redirected);
feed_purge_url_label->setDisabled(redirected||superfeed); feed_purge_url_label->setDisabled(redirected);
feed_max_shelf_life_label->setDisabled(redirected||superfeed); feed_max_shelf_life_label->setDisabled(redirected||superfeed);
feed_max_shelf_life_unit_label->setDisabled(redirected||superfeed); feed_max_shelf_life_unit_label->setDisabled(redirected||superfeed);
feed_autopost_label->setDisabled(redirected||superfeed); feed_autopost_label->setDisabled(redirected||superfeed);
feed_keep_metadata_label->setDisabled(redirected||superfeed);
feed_format_label->setDisabled(redirected||superfeed); feed_format_label->setDisabled(redirected||superfeed);
feed_normalize_check_label->setDisabled(redirected||superfeed); feed_normalize_check_label->setDisabled(redirected||superfeed);
feed_normalize_unit_label->setDisabled(redirected||superfeed); feed_normalize_unit_label->setDisabled(redirected||superfeed);
feed_castorder_label->setDisabled(redirected||superfeed); feed_castorder_label->setDisabled(redirected);
feed_extension_label->setDisabled(redirected||superfeed); feed_extension_label->setDisabled(redirected||superfeed);
feed_channel_section_groupbox->setDisabled(redirected||superfeed); feed_channel_section_groupbox->setDisabled(redirected);
feed_normalize_label-> feed_normalize_label->
setDisabled(redirected||superfeed||(!feed_normalize_box->isChecked())); setDisabled(redirected||superfeed||(!feed_normalize_box->isChecked()));

View File

@ -23,6 +23,8 @@
#include <rddb.h> #include <rddb.h>
#include <rdescape_string.h> #include <rdescape_string.h>
#include <qmap.h>
#include "edit_superfeed.h" #include "edit_superfeed.h"
EditSuperfeed::EditSuperfeed(RDFeed *feed,QWidget *parent) EditSuperfeed::EditSuperfeed(RDFeed *feed,QWidget *parent)
@ -72,7 +74,9 @@ EditSuperfeed::EditSuperfeed(RDFeed *feed,QWidget *parent)
// //
// Populate Fields // Populate Fields
// //
sql=QString("select MEMBER_KEY_NAME from FEED_KEY_NAMES where ")+ sql=QString("select ")+
"MEMBER_KEY_NAME "+ // 00
"from SUPERFEED_MAPS where "+
"KEY_NAME=\""+RDEscapeString(feed_feed->keyName())+"\""; "KEY_NAME=\""+RDEscapeString(feed_feed->keyName())+"\"";
q=new RDSqlQuery(sql); q=new RDSqlQuery(sql);
while(q->next()) { while(q->next()) {
@ -114,19 +118,34 @@ void EditSuperfeed::okData()
RDSqlQuery *q; RDSqlQuery *q;
QString sql; QString sql;
//
// Feed ID Map
//
QMap<QString,unsigned> feed_ids;
sql=QString("select KEY_NAME,ID from FEEDS");
q=new RDSqlQuery(sql);
while(q->next()) {
feed_ids[q->value(0).toString()]=q->value(1).toUInt();
}
delete q;
// //
// Add New Groups // Add New Groups
// //
for(unsigned i=0;i<feed_host_sel->destCount();i++) { for(unsigned i=0;i<feed_host_sel->destCount();i++) {
sql=QString("select MEMBER_KEY_NAME from FEED_KEY_NAMES where ")+ sql=QString("select ")+
"MEMBER_KEY_NAME " // 00
"from SUPERFEED_MAPS where "+
"KEY_NAME=\""+RDEscapeString(feed_feed->keyName())+"\" && " "KEY_NAME=\""+RDEscapeString(feed_feed->keyName())+"\" && "
"MEMBER_KEY_NAME=\""+RDEscapeString(feed_host_sel->destText(i))+"\""; "MEMBER_KEY_NAME=\""+RDEscapeString(feed_host_sel->destText(i))+"\"";
q=new RDSqlQuery(sql); q=new RDSqlQuery(sql);
if(q->size()==0) { if(q->size()==0) {
delete q; delete q;
sql=QString("insert into FEED_KEY_NAMES (KEY_NAME,MEMBER_KEY_NAME) ")+ sql=QString("insert into SUPERFEED_MAPS set ")+
"values (\""+RDEscapeString(feed_feed->keyName())+ "KEY_NAME=\""+RDEscapeString(feed_feed->keyName())+"\","+
"\",\""+RDEscapeString(feed_host_sel->destText(i))+"\")"; "MEMBER_KEY_NAME=\""+RDEscapeString(feed_host_sel->destText(i))+"\","+
QString().sprintf("FEED_ID=%u,",feed_ids.value(feed_feed->keyName()))+
QString().sprintf("MEMBER_FEED_ID=%u",feed_ids.value(feed_host_sel->destText(i)));
q=new RDSqlQuery(sql); q=new RDSqlQuery(sql);
} }
delete q; delete q;
@ -135,7 +154,7 @@ void EditSuperfeed::okData()
// //
// Delete Old Groups // Delete Old Groups
// //
sql=QString("delete from FEED_KEY_NAMES where ")+ sql=QString("delete from SUPERFEED_MAPS where ")+
"KEY_NAME=\""+RDEscapeString(feed_feed->keyName())+"\""; "KEY_NAME=\""+RDEscapeString(feed_feed->keyName())+"\"";
for(unsigned i=0;i<feed_host_sel->destCount();i++) { for(unsigned i=0;i<feed_host_sel->destCount();i++) {
sql+=QString(" && MEMBER_KEY_NAME<>\"")+ sql+=QString(" && MEMBER_KEY_NAME<>\"")+

View File

@ -260,12 +260,14 @@ void ListFeeds::deleteData()
// //
sql=QString("delete from FEED_PERMS where ")+ sql=QString("delete from FEED_PERMS where ")+
"KEY_NAME=\""+RDEscapeString(feedname)+"\""; "KEY_NAME=\""+RDEscapeString(feedname)+"\"";
q=new RDSqlQuery(sql); RDSqlQuery::apply(sql);
delete q; sql=QString("delete from SUPERFEED_MAPS where ")+
"KEY_NAME=\""+RDEscapeString(feedname)+"\" || "+
"MEMBER_KEY_NAME=\""+RDEscapeString(feedname)+"\"";
RDSqlQuery::apply(sql);
sql=QString("delete from FEEDS where ")+ sql=QString("delete from FEEDS where ")+
"KEY_NAME=\""+RDEscapeString(feedname)+"\""; "KEY_NAME=\""+RDEscapeString(feedname)+"\"";
q=new RDSqlQuery(sql); RDSqlQuery::apply(sql);
delete q;
RDDeleteFeedLog(feedname); RDDeleteFeedLog(feedname);
item->setSelected(false); item->setSelected(false);

View File

@ -1473,7 +1473,7 @@ files, causing any whose files remain to be imported again.</source>
</message> </message>
<message> <message>
<source>Audio Upload URL:</source> <source>Audio Upload URL:</source>
<translation>Adresa (URL) nahrání zvuku:</translation> <translation type="obsolete">Adresa (URL) nahrání zvuku:</translation>
</message> </message>
<message> <message>
<source>Username:</source> <source>Username:</source>
@ -1485,7 +1485,7 @@ files, causing any whose files remain to be imported again.</source>
</message> </message>
<message> <message>
<source>Upload Format:</source> <source>Upload Format:</source>
<translation>Formát nahrání:</translation> <translation type="obsolete">Formát nahrání:</translation>
</message> </message>
<message> <message>
<source>S&amp;et</source> <source>S&amp;et</source>
@ -1505,7 +1505,7 @@ files, causing any whose files remain to be imported again.</source>
</message> </message>
<message> <message>
<source>Audio Download URL:</source> <source>Audio Download URL:</source>
<translation>Adresa (URL) stažení zvuku:</translation> <translation type="obsolete">Adresa (URL) stažení zvuku:</translation>
</message> </message>
<message> <message>
<source>Keep Expired Metadata</source> <source>Keep Expired Metadata</source>
@ -1645,6 +1645,18 @@ Feeds</source>
<source>Audio Upload URL has unsupported scheme!</source> <source>Audio Upload URL has unsupported scheme!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Audio Format:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Upload URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Download URL</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>EditFeedPerms</name> <name>EditFeedPerms</name>

View File

@ -1375,10 +1375,6 @@ files, causing any whose files remain to be imported again.</source>
<source>Description:</source> <source>Description:</source>
<translation type="unfinished">Beschreibung:</translation> <translation type="unfinished">Beschreibung:</translation>
</message> </message>
<message>
<source>Audio Upload URL:</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Username:</source> <source>Username:</source>
<translation type="unfinished">Benutzername:</translation> <translation type="unfinished">Benutzername:</translation>
@ -1387,10 +1383,6 @@ files, causing any whose files remain to be imported again.</source>
<source>Password:</source> <source>Password:</source>
<translation type="unfinished">Passwort:</translation> <translation type="unfinished">Passwort:</translation>
</message> </message>
<message>
<source>Upload Format:</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>S&amp;et</source> <source>S&amp;et</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -1407,10 +1399,6 @@ files, causing any whose files remain to be imported again.</source>
<source>dBFS</source> <source>dBFS</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Audio Download URL:</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Keep Expired Metadata</source> <source>Keep Expired Metadata</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -1540,6 +1528,18 @@ Feeds</source>
<source>Audio Upload URL has unsupported scheme!</source> <source>Audio Upload URL has unsupported scheme!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Audio Format:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Upload URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Download URL</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>EditFeedPerms</name> <name>EditFeedPerms</name>

View File

@ -1471,7 +1471,7 @@ files, causing any whose files remain to be imported again.</source>
</message> </message>
<message> <message>
<source>Audio Upload URL:</source> <source>Audio Upload URL:</source>
<translation>URL subida audio:</translation> <translation type="obsolete">URL subida audio:</translation>
</message> </message>
<message> <message>
<source>Username:</source> <source>Username:</source>
@ -1483,7 +1483,7 @@ files, causing any whose files remain to be imported again.</source>
</message> </message>
<message> <message>
<source>Upload Format:</source> <source>Upload Format:</source>
<translation>Formato de subida:</translation> <translation type="obsolete">Formato de subida:</translation>
</message> </message>
<message> <message>
<source>S&amp;et</source> <source>S&amp;et</source>
@ -1503,7 +1503,7 @@ files, causing any whose files remain to be imported again.</source>
</message> </message>
<message> <message>
<source>Audio Download URL:</source> <source>Audio Download URL:</source>
<translation>URL descarga audio:</translation> <translation type="obsolete">URL descarga audio:</translation>
</message> </message>
<message> <message>
<source>Keep Expired Metadata</source> <source>Keep Expired Metadata</source>
@ -1648,6 +1648,18 @@ Feeds</source>
<source>Audio Upload URL has unsupported scheme!</source> <source>Audio Upload URL has unsupported scheme!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Audio Format:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Upload URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Download URL</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>EditFeedPerms</name> <name>EditFeedPerms</name>

View File

@ -1047,10 +1047,6 @@ files, causing any whose files remain to be imported again.</source>
<source>Description:</source> <source>Description:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Audio Upload URL:</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Username:</source> <source>Username:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -1059,10 +1055,6 @@ files, causing any whose files remain to be imported again.</source>
<source>Password:</source> <source>Password:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Upload Format:</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>S&amp;et</source> <source>S&amp;et</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -1079,10 +1071,6 @@ files, causing any whose files remain to be imported again.</source>
<source>dBFS</source> <source>dBFS</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Audio Download URL:</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Keep Expired Metadata</source> <source>Keep Expired Metadata</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -1212,6 +1200,18 @@ Feeds</source>
<source>Audio Upload URL has unsupported scheme!</source> <source>Audio Upload URL has unsupported scheme!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Audio Format:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Upload URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Download URL</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>EditFeedPerms</name> <name>EditFeedPerms</name>

View File

@ -1337,10 +1337,6 @@ files, causing any whose files remain to be imported again.</source>
<source>Description:</source> <source>Description:</source>
<translation type="unfinished">Skildring:</translation> <translation type="unfinished">Skildring:</translation>
</message> </message>
<message>
<source>Audio Upload URL:</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Username:</source> <source>Username:</source>
<translation type="unfinished">Brukarnamn:</translation> <translation type="unfinished">Brukarnamn:</translation>
@ -1349,10 +1345,6 @@ files, causing any whose files remain to be imported again.</source>
<source>Password:</source> <source>Password:</source>
<translation type="unfinished">Passord:</translation> <translation type="unfinished">Passord:</translation>
</message> </message>
<message>
<source>Upload Format:</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>S&amp;et</source> <source>S&amp;et</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -1369,10 +1361,6 @@ files, causing any whose files remain to be imported again.</source>
<source>dBFS</source> <source>dBFS</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Audio Download URL:</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Keep Expired Metadata</source> <source>Keep Expired Metadata</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -1502,6 +1490,18 @@ Feeds</source>
<source>Audio Upload URL has unsupported scheme!</source> <source>Audio Upload URL has unsupported scheme!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Audio Format:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Upload URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Download URL</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>EditFeedPerms</name> <name>EditFeedPerms</name>

View File

@ -1337,10 +1337,6 @@ files, causing any whose files remain to be imported again.</source>
<source>Description:</source> <source>Description:</source>
<translation type="unfinished">Skildring:</translation> <translation type="unfinished">Skildring:</translation>
</message> </message>
<message>
<source>Audio Upload URL:</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Username:</source> <source>Username:</source>
<translation type="unfinished">Brukarnamn:</translation> <translation type="unfinished">Brukarnamn:</translation>
@ -1349,10 +1345,6 @@ files, causing any whose files remain to be imported again.</source>
<source>Password:</source> <source>Password:</source>
<translation type="unfinished">Passord:</translation> <translation type="unfinished">Passord:</translation>
</message> </message>
<message>
<source>Upload Format:</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>S&amp;et</source> <source>S&amp;et</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -1369,10 +1361,6 @@ files, causing any whose files remain to be imported again.</source>
<source>dBFS</source> <source>dBFS</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Audio Download URL:</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Keep Expired Metadata</source> <source>Keep Expired Metadata</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -1502,6 +1490,18 @@ Feeds</source>
<source>Audio Upload URL has unsupported scheme!</source> <source>Audio Upload URL has unsupported scheme!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Audio Format:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Upload URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Download URL</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>EditFeedPerms</name> <name>EditFeedPerms</name>

View File

@ -1347,10 +1347,6 @@ files, causing any whose files remain to be imported again.</source>
<source>Description:</source> <source>Description:</source>
<translation type="unfinished">Descrição: </translation> <translation type="unfinished">Descrição: </translation>
</message> </message>
<message>
<source>Audio Upload URL:</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Username:</source> <source>Username:</source>
<translation type="unfinished">Usuário:</translation> <translation type="unfinished">Usuário:</translation>
@ -1359,10 +1355,6 @@ files, causing any whose files remain to be imported again.</source>
<source>Password:</source> <source>Password:</source>
<translation type="unfinished">Senha:</translation> <translation type="unfinished">Senha:</translation>
</message> </message>
<message>
<source>Upload Format:</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>S&amp;et</source> <source>S&amp;et</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -1379,10 +1371,6 @@ files, causing any whose files remain to be imported again.</source>
<source>dBFS</source> <source>dBFS</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Audio Download URL:</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Keep Expired Metadata</source> <source>Keep Expired Metadata</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -1512,6 +1500,18 @@ Feeds</source>
<source>Audio Upload URL has unsupported scheme!</source> <source>Audio Upload URL has unsupported scheme!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Audio Format:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Upload URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Download URL</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>EditFeedPerms</name> <name>EditFeedPerms</name>

View File

@ -40,10 +40,11 @@
#include "../icons/greenball.xpm" #include "../icons/greenball.xpm"
#include "../icons/whiteball.xpm" #include "../icons/whiteball.xpm"
ListCasts::ListCasts(unsigned feed_id,QWidget *parent) ListCasts::ListCasts(unsigned feed_id,bool is_super,QWidget *parent)
: RDDialog(parent) : RDDialog(parent)
{ {
list_feed_id=feed_id; list_feed_id=feed_id;
list_is_superfeed=is_super;
// //
// Fix the Window Size // Fix the Window Size
@ -125,10 +126,14 @@ ListCasts::ListCasts(unsigned feed_id,QWidget *parent)
list_casts_view->setColumnAlignment(4,Qt::AlignRight); list_casts_view->setColumnAlignment(4,Qt::AlignRight);
list_casts_view->addColumn(tr("Description")); list_casts_view->addColumn(tr("Description"));
list_casts_view->setColumnAlignment(5,Qt::AlignLeft); list_casts_view->setColumnAlignment(5,Qt::AlignLeft);
list_casts_view->addColumn(tr("Feed"));
list_casts_view->setColumnAlignment(6,Qt::AlignLeft);
list_casts_view->addColumn(tr("Category")); list_casts_view->addColumn(tr("Category"));
list_casts_view->setColumnAlignment(6,Qt::AlignCenter);
list_casts_view->addColumn(tr("Link"));
list_casts_view->setColumnAlignment(7,Qt::AlignCenter); list_casts_view->setColumnAlignment(7,Qt::AlignCenter);
list_casts_view->addColumn(tr("Link"));
list_casts_view->setColumnAlignment(8,Qt::AlignCenter);
connect(list_casts_view, connect(list_casts_view,
SIGNAL(doubleClicked(Q3ListViewItem *,const QPoint &,int)), SIGNAL(doubleClicked(Q3ListViewItem *,const QPoint &,int)),
this, this,
@ -427,7 +432,8 @@ void ListCasts::RefreshList()
list_casts_view->clear(); list_casts_view->clear();
sql=QString("select ID from PODCASTS ")+ sql=QString("select ID from PODCASTS ")+
RDCastSearch(list_feed_id,list_filter_edit->text(), RDCastSearch(list_feed->keyName(),list_is_superfeed,
list_filter_edit->text(),
list_unexpired_check->isChecked(), list_unexpired_check->isChecked(),
list_active_check->isChecked())+ list_active_check->isChecked())+
" order by ORIGIN_DATETIME"; " order by ORIGIN_DATETIME";
@ -446,9 +452,19 @@ void ListCasts::RefreshItem(RDListViewItem *item)
QString sql; QString sql;
RDSqlQuery *q; RDSqlQuery *q;
sql=QString().sprintf("select STATUS,ITEM_TITLE,ORIGIN_DATETIME,SHELF_LIFE,\ sql=QString("select ")+
AUDIO_TIME,ITEM_DESCRIPTION,ITEM_CATEGORY,ITEM_LINK \ "PODCASTS.STATUS,"+ // 00
from PODCASTS where ID=%d",item->id()); "PODCASTS.ITEM_TITLE,"+ // 01
"PODCASTS.ORIGIN_DATETIME,"+ // 02
"PODCASTS.SHELF_LIFE,"+ // 03
"PODCASTS.AUDIO_TIME,"+ // 04
"PODCASTS.ITEM_DESCRIPTION,"+ // 05
"FEEDS.KEY_NAME,"+ // 06
"PODCASTS.ITEM_CATEGORY,"+ // 07
"PODCASTS.ITEM_LINK "+ // 08
"from PODCASTS left join FEEDS "+
"on PODCASTS.FEED_ID=FEEDS.ID where "+
QString().sprintf("PODCASTS.ID=%d",item->id());
q=new RDSqlQuery(sql); q=new RDSqlQuery(sql);
if(q->first()) { if(q->first()) {
switch((RDPodcast::Status)q->value(0).toUInt()) { switch((RDPodcast::Status)q->value(0).toUInt()) {
@ -478,6 +494,7 @@ void ListCasts::RefreshItem(RDListViewItem *item)
item->setText(5,q->value(5).toString()); item->setText(5,q->value(5).toString());
item->setText(6,q->value(6).toString()); item->setText(6,q->value(6).toString());
item->setText(7,q->value(7).toString()); item->setText(7,q->value(7).toString());
item->setText(8,q->value(8).toString());
} }
delete q; delete q;
} }

View File

@ -32,7 +32,7 @@ class ListCasts : public RDDialog
{ {
Q_OBJECT Q_OBJECT
public: public:
ListCasts(unsigned feed_id,QWidget *parent=0); ListCasts(unsigned feed_id,bool is_super,QWidget *parent=0);
~ListCasts(); ~ListCasts();
QSize sizeHint() const; QSize sizeHint() const;
QSizePolicy sizePolicy() const; QSizePolicy sizePolicy() const;
@ -78,6 +78,7 @@ class ListCasts : public RDDialog
QCheckBox *list_active_check; QCheckBox *list_active_check;
QProgressDialog *list_progress_dialog; QProgressDialog *list_progress_dialog;
RDFeed *list_feed; RDFeed *list_feed;
bool list_is_superfeed;
}; };

View File

@ -2,7 +2,7 @@
// //
// A PodCast Management Utility for Rivendell. // A PodCast Management Utility for Rivendell.
// //
// (C) Copyright 2002-2019 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 // 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 // it under the terms of the GNU General Public License version 2 as
@ -110,15 +110,22 @@ MainWidget::MainWidget(RDConfig *c,QWidget *parent)
SLOT(feedDoubleclickedData(Q3ListViewItem *,const QPoint &,int))); SLOT(feedDoubleclickedData(Q3ListViewItem *,const QPoint &,int)));
cast_feed_list->addColumn(""); cast_feed_list->addColumn("");
cast_feed_list->setColumnAlignment(0,Qt::AlignCenter); cast_feed_list->setColumnAlignment(0,Qt::AlignCenter);
cast_feed_list->addColumn(tr("Key Name")); cast_feed_list->addColumn(tr("Key Name"));
cast_feed_list->setColumnAlignment(1,Qt::AlignHCenter); cast_feed_list->setColumnAlignment(1,Qt::AlignHCenter);
cast_feed_list->addColumn(tr("Feed Name")); cast_feed_list->addColumn(tr("Feed Name"));
cast_feed_list->setColumnAlignment(2,Qt::AlignLeft); cast_feed_list->setColumnAlignment(2,Qt::AlignLeft);
cast_feed_list->addColumn(tr("Description"));
cast_feed_list->setColumnAlignment(3,Qt::AlignLeft); cast_feed_list->addColumn(tr("Superfeed"));
cast_feed_list->addColumn(tr("Casts"));
cast_feed_list->setColumnAlignment(3,Qt::AlignCenter); cast_feed_list->setColumnAlignment(3,Qt::AlignCenter);
cast_feed_list->addColumn(tr("Description"));
cast_feed_list->setColumnAlignment(4,Qt::AlignLeft);
cast_feed_list->addColumn(tr("Casts"));
cast_feed_list->setColumnAlignment(5,Qt::AlignCenter);
// //
// Open Button // Open Button
// //
@ -169,7 +176,7 @@ void MainWidget::openData()
if(item==NULL) { if(item==NULL) {
return; return;
} }
ListCasts *casts=new ListCasts(item->id(),this); ListCasts *casts=new ListCasts(item->id(),item->text(3)=="Y",this);
casts->exec(); casts->exec();
RefreshItem(item); RefreshItem(item);
delete casts; delete casts;
@ -208,14 +215,15 @@ void MainWidget::RefreshItem(RDListViewItem *item)
sql=QString("select ")+ sql=QString("select ")+
"CHANNEL_TITLE,"+ // 00 "CHANNEL_TITLE,"+ // 00
"CHANNEL_DESCRIPTION,"+ // 01 "IS_SUPERFEED,"+ // 01
"ID "+ // 02 "CHANNEL_DESCRIPTION,"+ // 02
"ID "+ // 03
"from FEEDS where "+ "from FEEDS where "+
"KEY_NAME=\""+RDEscapeString(item->text(1))+"\""; "KEY_NAME=\""+RDEscapeString(item->text(1))+"\"";
q=new RDSqlQuery(sql); q=new RDSqlQuery(sql);
while(q->next()) { while(q->next()) {
sql=QString().sprintf("select STATUS from PODCASTS where FEED_ID=%u", sql=QString().sprintf("select STATUS from PODCASTS where FEED_ID=%u",
q->value(2).toUInt()); q->value(3).toUInt());
q1=new RDSqlQuery(sql); q1=new RDSqlQuery(sql);
while(q1->next()) { while(q1->next()) {
total++; total++;
@ -238,7 +246,8 @@ void MainWidget::RefreshItem(RDListViewItem *item)
} }
item->setText(2,q->value(0).toString()); item->setText(2,q->value(0).toString());
item->setText(3,q->value(1).toString()); item->setText(3,q->value(1).toString());
item->setText(4,QString().sprintf("%d / %d",active,total)); item->setText(4,q->value(2).toString());
item->setText(5,QString().sprintf("%d / %d",active,total));
} }
delete q; delete q;
} }

View File

@ -297,6 +297,10 @@ Podcast trotzdem löschen?</translation>
</source> </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Feed</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>MainWidget</name> <name>MainWidget</name>
@ -354,6 +358,10 @@ přívod</translation>
<source>Unknown command option</source> <source>Unknown command option</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Superfeed</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>PickReportDates</name> <name>PickReportDates</name>

View File

@ -286,6 +286,10 @@ Podcast trotzdem löschen?</translation>
</source> </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Feed</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>MainWidget</name> <name>MainWidget</name>
@ -343,6 +347,10 @@ Feed</translation>
<source>Unknown command option</source> <source>Unknown command option</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Superfeed</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>PickReportDates</name> <name>PickReportDates</name>

View File

@ -237,6 +237,10 @@ Suscripción</translation>
</source> </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Feed</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>MainWidget</name> <name>MainWidget</name>
@ -293,6 +297,10 @@ Feed</source>
<source>Unknown command option</source> <source>Unknown command option</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Superfeed</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>PickReportDates</name> <name>PickReportDates</name>

View File

@ -232,6 +232,10 @@ Car&amp;t/Cut</source>
</source> </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Feed</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>MainWidget</name> <name>MainWidget</name>
@ -280,6 +284,10 @@ Feed</source>
<source>Unknown command option</source> <source>Unknown command option</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Superfeed</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>PickReportDates</name> <name>PickReportDates</name>

View File

@ -285,6 +285,10 @@ Vil du halda fram med å sletta podkasten?</translation>
</source> </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Feed</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>MainWidget</name> <name>MainWidget</name>
@ -342,6 +346,10 @@ straum</translation>
<source>Unknown command option</source> <source>Unknown command option</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Superfeed</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>PickReportDates</name> <name>PickReportDates</name>

View File

@ -285,6 +285,10 @@ Vil du halda fram med å sletta podkasten?</translation>
</source> </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Feed</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>MainWidget</name> <name>MainWidget</name>
@ -342,6 +346,10 @@ straum</translation>
<source>Unknown command option</source> <source>Unknown command option</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Superfeed</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>PickReportDates</name> <name>PickReportDates</name>

View File

@ -251,6 +251,10 @@ Continuar deletando cast?</translation>
</source> </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Feed</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>MainWidget</name> <name>MainWidget</name>
@ -308,6 +312,10 @@ Feed</translation>
<source>Unknown command option</source> <source>Unknown command option</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Superfeed</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>PickReportDates</name> <name>PickReportDates</name>

View File

@ -560,7 +560,7 @@ void MainObject::ServeListCasts()
"ITEM_CATEGORY,"+ // 05 "ITEM_CATEGORY,"+ // 05
"AUDIO_TIME "+ // 06 "AUDIO_TIME "+ // 06
"from PODCASTS "+ "from PODCASTS "+
RDCastSearch(cast_feed_id,filter,unexp_only,active_only)+ RDCastSearch(cast_key_name,false,filter,unexp_only,active_only)+
" order by ORIGIN_DATETIME desc"; " order by ORIGIN_DATETIME desc";
q=new RDSqlQuery(sql); q=new RDSqlQuery(sql);
while(q->next()) { while(q->next()) {