1
0
mirror of https://github.com/ElvishArtisan/rivendell.git synced 2025-04-17 14:42:36 +02:00

2020-03-12 Fred Gleason <fredg@paravelsystems.com>

* Fixed a bug where '<enclosure>' tags in RSS Superfeeds were rendered
	with an incorrect 'url=' attribute.
	* Added indentation formatting on RSS XML feeds.
This commit is contained in:
Fred Gleason 2020-03-12 13:48:29 -04:00
parent 4aedc573ca
commit 75d2b80025
6 changed files with 64 additions and 36 deletions

@ -19804,3 +19804,7 @@
2020-03-10 Fred Gleason <fredg@paravelsystems.com>
* Removed the 'Source URL' and 'Source Text' controls from the
'Edit Cast' dialog in rdcastmanager(1).
2020-03-12 Fred Gleason <fredg@paravelsystems.com>
* Fixed a bug where '<enclosure>' tags in RSS Superfeeds were rendered
with an incorrect 'url=' attribute.
* Added indentation formatting on RSS XML feeds.

@ -267,13 +267,27 @@ void RDFeed::setChannelLanguage(const QString &str)
}
QString RDFeed::baseUrl() const
QString RDFeed::baseUrl(const QString &subfeed_key_name) const
{
return RDGetSqlValue("FEEDS","KEY_NAME",feed_keyname,"BASE_URL").
toString();
QString key_name=subfeed_key_name;
if(subfeed_key_name.isEmpty()) {
key_name=feed_keyname;
}
return RDGetSqlValue("FEEDS","KEY_NAME",key_name,"BASE_URL").toString();
}
QString RDFeed::baseUrl(int subfeed_feed_id) const
{
int id=subfeed_feed_id;
if(subfeed_feed_id<0) {
id=feed_id;
}
return RDGetSqlValue("FEEDS","ID",id,"BASE_URL").toString();
}
void RDFeed::setBaseUrl(const QString &str) const
{
SetRow("BASE_URL",str);
@ -588,9 +602,9 @@ void RDFeed::setMediaLinkMode(RDFeed::MediaLinkMode mode) const
QString RDFeed::audioUrl(RDFeed::MediaLinkMode mode,
const QString &cgi_hostname,unsigned cast_id)
{
QUrl url(baseUrl());
RDPodcast *cast=new RDPodcast(feed_config,cast_id);
QUrl url(baseUrl(cast->feedId()));
QString ret;
RDPodcast *cast;
switch(mode) {
case RDFeed::LinkNone:
@ -599,8 +613,7 @@ QString RDFeed::audioUrl(RDFeed::MediaLinkMode mode,
case RDFeed::LinkDirect:
cast=new RDPodcast(feed_config,cast_id);
ret=baseUrl()+"/"+cast->audioFilename();
delete cast;
ret=url.toString()+"/"+cast->audioFilename();
break;
case RDFeed::LinkCounted:
@ -609,6 +622,8 @@ QString RDFeed::audioUrl(RDFeed::MediaLinkMode mode,
QString().sprintf("&cast_id=%d",cast_id);
break;
}
delete cast;
return ret;
}
@ -986,7 +1001,8 @@ QString RDFeed::rssXml(QString *err_msg,bool *ok)
"CAST_ORDER,"+ // 15
"REDIRECT_PATH,"+ // 16
"BASE_PREAMBLE,"+ // 17
"AUDIENCE_METRICS "+ // 18
"AUDIENCE_METRICS,"+ // 18
"IS_SUPERFEED "+ // 19
"from FEEDS where "+
"KEY_NAME=\""+RDEscapeString(keyName())+"\"";
q=new RDSqlQuery(sql);
@ -1003,16 +1019,16 @@ QString RDFeed::rssXml(QString *err_msg,bool *ok)
//
// Render Channel XML
//
ret+="<channel>\n";
ret+=" <channel>\n";
ret+=ResolveChannelWildcards(q)+"\r\n";
//
// Render Item XML
//
QString where;
if(isSuperfeed()) {
if(q->value(19).toString()=="Y") {
sql=QString("select ")+
"MEMBER_FEED_ID "+
"MEMBER_FEED_ID "+ // 00
"from SUPERFEED_MAPS where "+
QString().sprintf("FEED_ID=%d",q->value(13).toUInt());
q1=new RDSqlQuery(sql);
@ -1026,36 +1042,38 @@ QString RDFeed::rssXml(QString *err_msg,bool *ok)
where =QString().sprintf("(FEED_ID=%u)&&",q->value(13).toUInt());
}
sql=QString("select ")+
"ITEM_TITLE,"+ // 00
"ITEM_DESCRIPTION,"+ // 01
"ITEM_CATEGORY,"+ // 02
"ITEM_LINK,"+ // 03
"ITEM_AUTHOR,"+ // 04
"ITEM_SOURCE_TEXT,"+ // 05
"ITEM_SOURCE_URL,"+ // 06
"ITEM_COMMENTS,"+ // 07
"AUDIO_FILENAME,"+ // 08
"AUDIO_LENGTH,"+ // 09
"AUDIO_TIME,"+ // 10
"EFFECTIVE_DATETIME,"+ // 11
"ID "+ // 12
"from PODCASTS where "+
"PODCASTS.ITEM_TITLE,"+ // 00
"PODCASTS.ITEM_DESCRIPTION,"+ // 01
"PODCASTS.ITEM_CATEGORY,"+ // 02
"PODCASTS.ITEM_LINK,"+ // 03
"PODCASTS.ITEM_AUTHOR,"+ // 04
"PODCASTS.ITEM_SOURCE_TEXT,"+ // 05
"PODCASTS.ITEM_SOURCE_URL,"+ // 06
"PODCASTS.ITEM_COMMENTS,"+ // 07
"PODCASTS.AUDIO_FILENAME,"+ // 08
"PODCASTS.AUDIO_LENGTH,"+ // 09
"PODCASTS.AUDIO_TIME,"+ // 10
"PODCASTS.EFFECTIVE_DATETIME,"+ // 11
"PODCASTS.ID,"+ // 12
"FEEDS.BASE_URL "+ // 13
"from PODCASTS left join FEEDS "+
"on PODCASTS.FEED_ID=FEEDS.ID where "+
where+
//QString().sprintf("(FEED_ID=%d)&&",q->value(13).toUInt())+
QString().sprintf("(STATUS=%d) ",RDPodcast::StatusActive)+
"order by ORIGIN_DATETIME";
QString().sprintf("(PODCASTS.STATUS=%d) ",RDPodcast::StatusActive)+
"order by PODCASTS.ORIGIN_DATETIME";
if(q->value(15).toString()=="N") {
sql+=" desc";
}
q1=new RDSqlQuery(sql);
while(q1->next()) {
ret+="<item>\r\n";
ret+=" <item>\r\n";
ret+=ResolveItemWildcards(q1,q);
ret+="</item>\r\n";
ret+="\r\n";
ret+=" </item>\r\n";
}
delete q1;
ret+="</channel>\r\n";
ret+=" </channel>\r\n";
ret+="</rss>\r\n";
delete q;
@ -1337,8 +1355,9 @@ unsigned RDFeed::CreateCast(QString *filename,int bytes,int msecs) const
QString RDFeed::ResolveChannelWildcards(RDSqlQuery *chan_q)
{
QString ret=chan_q->value(10).toString();
QString ret=" "+chan_q->value(10).toString();
ret.replace("\n","\r\n ");
ret.replace("%TITLE%",RDXmlEscape(chan_q->value(0).toString()));
ret.replace("%DESCRIPTION%",RDXmlEscape(chan_q->value(1).toString()));
ret.replace("%CATEGORY%",RDXmlEscape(chan_q->value(2).toString()));
@ -1360,7 +1379,9 @@ QString RDFeed::ResolveChannelWildcards(RDSqlQuery *chan_q)
QString RDFeed::ResolveItemWildcards(RDSqlQuery *item_q,RDSqlQuery *chan_q)
{
QString ret=chan_q->value(11).toString();
QString ret=" "+chan_q->value(11).toString();
ret.replace("\n","\r\n ");
ret.replace("%ITEM_TITLE%",RDXmlEscape(item_q->value(0).toString()));
ret.replace("%ITEM_DESCRIPTION%",
RDXmlEscape(item_q->value(1).toString()));
@ -1378,7 +1399,7 @@ QString RDFeed::ResolveItemWildcards(RDSqlQuery *item_q,RDSqlQuery *chan_q)
ret.replace("%ITEM_SOURCE_TEXT%",
RDXmlEscape(chan_q->value(0).toString()));
ret.replace("%ITEM_SOURCE_URL%",
RDXmlEscape(baseUrl()+"/"+keyName()));
RDXmlEscape(item_q->value(13).toString()+"/"+keyName()));
}
ret.replace("%ITEM_COMMENTS%",
RDXmlEscape(item_q->value(7).toString()));

@ -63,7 +63,8 @@ class RDFeed : public QObject
void setChannelWebmaster(const QString &str) const;
QString channelLanguage() const;
void setChannelLanguage(const QString &str);
QString baseUrl() const;
QString baseUrl(const QString &subfeed_key_name) const;
QString baseUrl(int subfeed_feed_id) const;
void setBaseUrl(const QString &str) const;
QString basePreamble() const;
void setBasePreamble(const QString &str) const;

@ -386,7 +386,7 @@ EditFeed::EditFeed(const QString &feed,QWidget *parent)
feed_channel_webmaster_edit->setText(feed_feed->channelWebmaster());
feed_channel_description_edit->setPlainText(feed_feed->channelDescription());
feed_channel_language_edit->setText(feed_feed->channelLanguage());
feed_base_url_edit->setText(feed_feed->baseUrl());
feed_base_url_edit->setText(feed_feed->baseUrl(""));
feed_base_preamble_edit->setText(feed_feed->basePreamble());
feed_purge_url_edit->setText(feed_feed->purgeUrl());
feed_purge_username_edit->setText(feed_feed->purgeUsername());

@ -204,6 +204,7 @@ EditCast::EditCast(unsigned cast_id,QWidget *parent)
cast_report_button=new QPushButton(this);
cast_report_button->setFont(buttonFont());
cast_report_button->setText(tr("Episode\n&Report"));
cast_report_button->setEnabled(cast_feed->audienceMetrics());
connect(cast_report_button,SIGNAL(clicked()),this,SLOT(reportData()));
//

@ -177,6 +177,7 @@ ListCasts::ListCasts(unsigned feed_id,bool is_super,QWidget *parent)
list_report_button=new QPushButton(this);
list_report_button->setFont(buttonFont());
list_report_button->setText(tr("Subscription\n&Report"));
list_report_button->setEnabled(list_feed->audienceMetrics());
connect(list_report_button,SIGNAL(clicked()),this,SLOT(reportData()));
//