mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2025-06-03 09:32:34 +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:
parent
4aedc573ca
commit
75d2b80025
@ -19804,3 +19804,7 @@
|
|||||||
2020-03-10 Fred Gleason <fredg@paravelsystems.com>
|
2020-03-10 Fred Gleason <fredg@paravelsystems.com>
|
||||||
* Removed the 'Source URL' and 'Source Text' controls from the
|
* Removed the 'Source URL' and 'Source Text' controls from the
|
||||||
'Edit Cast' dialog in rdcastmanager(1).
|
'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").
|
QString key_name=subfeed_key_name;
|
||||||
toString();
|
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
|
void RDFeed::setBaseUrl(const QString &str) const
|
||||||
{
|
{
|
||||||
SetRow("BASE_URL",str);
|
SetRow("BASE_URL",str);
|
||||||
@ -588,9 +602,9 @@ void RDFeed::setMediaLinkMode(RDFeed::MediaLinkMode mode) const
|
|||||||
QString RDFeed::audioUrl(RDFeed::MediaLinkMode mode,
|
QString RDFeed::audioUrl(RDFeed::MediaLinkMode mode,
|
||||||
const QString &cgi_hostname,unsigned cast_id)
|
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;
|
QString ret;
|
||||||
RDPodcast *cast;
|
|
||||||
|
|
||||||
switch(mode) {
|
switch(mode) {
|
||||||
case RDFeed::LinkNone:
|
case RDFeed::LinkNone:
|
||||||
@ -599,8 +613,7 @@ QString RDFeed::audioUrl(RDFeed::MediaLinkMode mode,
|
|||||||
|
|
||||||
case RDFeed::LinkDirect:
|
case RDFeed::LinkDirect:
|
||||||
cast=new RDPodcast(feed_config,cast_id);
|
cast=new RDPodcast(feed_config,cast_id);
|
||||||
ret=baseUrl()+"/"+cast->audioFilename();
|
ret=url.toString()+"/"+cast->audioFilename();
|
||||||
delete cast;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RDFeed::LinkCounted:
|
case RDFeed::LinkCounted:
|
||||||
@ -609,6 +622,8 @@ QString RDFeed::audioUrl(RDFeed::MediaLinkMode mode,
|
|||||||
QString().sprintf("&cast_id=%d",cast_id);
|
QString().sprintf("&cast_id=%d",cast_id);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
delete cast;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -986,7 +1001,8 @@ QString RDFeed::rssXml(QString *err_msg,bool *ok)
|
|||||||
"CAST_ORDER,"+ // 15
|
"CAST_ORDER,"+ // 15
|
||||||
"REDIRECT_PATH,"+ // 16
|
"REDIRECT_PATH,"+ // 16
|
||||||
"BASE_PREAMBLE,"+ // 17
|
"BASE_PREAMBLE,"+ // 17
|
||||||
"AUDIENCE_METRICS "+ // 18
|
"AUDIENCE_METRICS,"+ // 18
|
||||||
|
"IS_SUPERFEED "+ // 19
|
||||||
"from FEEDS where "+
|
"from FEEDS where "+
|
||||||
"KEY_NAME=\""+RDEscapeString(keyName())+"\"";
|
"KEY_NAME=\""+RDEscapeString(keyName())+"\"";
|
||||||
q=new RDSqlQuery(sql);
|
q=new RDSqlQuery(sql);
|
||||||
@ -1003,16 +1019,16 @@ QString RDFeed::rssXml(QString *err_msg,bool *ok)
|
|||||||
//
|
//
|
||||||
// Render Channel XML
|
// Render Channel XML
|
||||||
//
|
//
|
||||||
ret+="<channel>\n";
|
ret+=" <channel>\n";
|
||||||
ret+=ResolveChannelWildcards(q)+"\r\n";
|
ret+=ResolveChannelWildcards(q)+"\r\n";
|
||||||
|
|
||||||
//
|
//
|
||||||
// Render Item XML
|
// Render Item XML
|
||||||
//
|
//
|
||||||
QString where;
|
QString where;
|
||||||
if(isSuperfeed()) {
|
if(q->value(19).toString()=="Y") {
|
||||||
sql=QString("select ")+
|
sql=QString("select ")+
|
||||||
"MEMBER_FEED_ID "+
|
"MEMBER_FEED_ID "+ // 00
|
||||||
"from SUPERFEED_MAPS where "+
|
"from SUPERFEED_MAPS where "+
|
||||||
QString().sprintf("FEED_ID=%d",q->value(13).toUInt());
|
QString().sprintf("FEED_ID=%d",q->value(13).toUInt());
|
||||||
q1=new RDSqlQuery(sql);
|
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());
|
where =QString().sprintf("(FEED_ID=%u)&&",q->value(13).toUInt());
|
||||||
}
|
}
|
||||||
sql=QString("select ")+
|
sql=QString("select ")+
|
||||||
"ITEM_TITLE,"+ // 00
|
"PODCASTS.ITEM_TITLE,"+ // 00
|
||||||
"ITEM_DESCRIPTION,"+ // 01
|
"PODCASTS.ITEM_DESCRIPTION,"+ // 01
|
||||||
"ITEM_CATEGORY,"+ // 02
|
"PODCASTS.ITEM_CATEGORY,"+ // 02
|
||||||
"ITEM_LINK,"+ // 03
|
"PODCASTS.ITEM_LINK,"+ // 03
|
||||||
"ITEM_AUTHOR,"+ // 04
|
"PODCASTS.ITEM_AUTHOR,"+ // 04
|
||||||
"ITEM_SOURCE_TEXT,"+ // 05
|
"PODCASTS.ITEM_SOURCE_TEXT,"+ // 05
|
||||||
"ITEM_SOURCE_URL,"+ // 06
|
"PODCASTS.ITEM_SOURCE_URL,"+ // 06
|
||||||
"ITEM_COMMENTS,"+ // 07
|
"PODCASTS.ITEM_COMMENTS,"+ // 07
|
||||||
"AUDIO_FILENAME,"+ // 08
|
"PODCASTS.AUDIO_FILENAME,"+ // 08
|
||||||
"AUDIO_LENGTH,"+ // 09
|
"PODCASTS.AUDIO_LENGTH,"+ // 09
|
||||||
"AUDIO_TIME,"+ // 10
|
"PODCASTS.AUDIO_TIME,"+ // 10
|
||||||
"EFFECTIVE_DATETIME,"+ // 11
|
"PODCASTS.EFFECTIVE_DATETIME,"+ // 11
|
||||||
"ID "+ // 12
|
"PODCASTS.ID,"+ // 12
|
||||||
"from PODCASTS where "+
|
"FEEDS.BASE_URL "+ // 13
|
||||||
|
"from PODCASTS left join FEEDS "+
|
||||||
|
"on PODCASTS.FEED_ID=FEEDS.ID where "+
|
||||||
where+
|
where+
|
||||||
//QString().sprintf("(FEED_ID=%d)&&",q->value(13).toUInt())+
|
QString().sprintf("(PODCASTS.STATUS=%d) ",RDPodcast::StatusActive)+
|
||||||
QString().sprintf("(STATUS=%d) ",RDPodcast::StatusActive)+
|
"order by PODCASTS.ORIGIN_DATETIME";
|
||||||
"order by ORIGIN_DATETIME";
|
|
||||||
if(q->value(15).toString()=="N") {
|
if(q->value(15).toString()=="N") {
|
||||||
sql+=" desc";
|
sql+=" desc";
|
||||||
}
|
}
|
||||||
q1=new RDSqlQuery(sql);
|
q1=new RDSqlQuery(sql);
|
||||||
while(q1->next()) {
|
while(q1->next()) {
|
||||||
ret+="<item>\r\n";
|
ret+=" <item>\r\n";
|
||||||
ret+=ResolveItemWildcards(q1,q);
|
ret+=ResolveItemWildcards(q1,q);
|
||||||
ret+="</item>\r\n";
|
ret+="\r\n";
|
||||||
|
ret+=" </item>\r\n";
|
||||||
}
|
}
|
||||||
delete q1;
|
delete q1;
|
||||||
|
|
||||||
ret+="</channel>\r\n";
|
ret+=" </channel>\r\n";
|
||||||
ret+="</rss>\r\n";
|
ret+="</rss>\r\n";
|
||||||
delete q;
|
delete q;
|
||||||
|
|
||||||
@ -1337,8 +1355,9 @@ unsigned RDFeed::CreateCast(QString *filename,int bytes,int msecs) const
|
|||||||
|
|
||||||
QString RDFeed::ResolveChannelWildcards(RDSqlQuery *chan_q)
|
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("%TITLE%",RDXmlEscape(chan_q->value(0).toString()));
|
||||||
ret.replace("%DESCRIPTION%",RDXmlEscape(chan_q->value(1).toString()));
|
ret.replace("%DESCRIPTION%",RDXmlEscape(chan_q->value(1).toString()));
|
||||||
ret.replace("%CATEGORY%",RDXmlEscape(chan_q->value(2).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 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_TITLE%",RDXmlEscape(item_q->value(0).toString()));
|
||||||
ret.replace("%ITEM_DESCRIPTION%",
|
ret.replace("%ITEM_DESCRIPTION%",
|
||||||
RDXmlEscape(item_q->value(1).toString()));
|
RDXmlEscape(item_q->value(1).toString()));
|
||||||
@ -1378,7 +1399,7 @@ QString RDFeed::ResolveItemWildcards(RDSqlQuery *item_q,RDSqlQuery *chan_q)
|
|||||||
ret.replace("%ITEM_SOURCE_TEXT%",
|
ret.replace("%ITEM_SOURCE_TEXT%",
|
||||||
RDXmlEscape(chan_q->value(0).toString()));
|
RDXmlEscape(chan_q->value(0).toString()));
|
||||||
ret.replace("%ITEM_SOURCE_URL%",
|
ret.replace("%ITEM_SOURCE_URL%",
|
||||||
RDXmlEscape(baseUrl()+"/"+keyName()));
|
RDXmlEscape(item_q->value(13).toString()+"/"+keyName()));
|
||||||
}
|
}
|
||||||
ret.replace("%ITEM_COMMENTS%",
|
ret.replace("%ITEM_COMMENTS%",
|
||||||
RDXmlEscape(item_q->value(7).toString()));
|
RDXmlEscape(item_q->value(7).toString()));
|
||||||
|
@ -63,7 +63,8 @@ class RDFeed : public QObject
|
|||||||
void setChannelWebmaster(const QString &str) const;
|
void setChannelWebmaster(const QString &str) const;
|
||||||
QString channelLanguage() const;
|
QString channelLanguage() const;
|
||||||
void setChannelLanguage(const QString &str);
|
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;
|
void setBaseUrl(const QString &str) const;
|
||||||
QString basePreamble() const;
|
QString basePreamble() const;
|
||||||
void setBasePreamble(const QString &str) 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_webmaster_edit->setText(feed_feed->channelWebmaster());
|
||||||
feed_channel_description_edit->setPlainText(feed_feed->channelDescription());
|
feed_channel_description_edit->setPlainText(feed_feed->channelDescription());
|
||||||
feed_channel_language_edit->setText(feed_feed->channelLanguage());
|
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_base_preamble_edit->setText(feed_feed->basePreamble());
|
||||||
feed_purge_url_edit->setText(feed_feed->purgeUrl());
|
feed_purge_url_edit->setText(feed_feed->purgeUrl());
|
||||||
feed_purge_username_edit->setText(feed_feed->purgeUsername());
|
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=new QPushButton(this);
|
||||||
cast_report_button->setFont(buttonFont());
|
cast_report_button->setFont(buttonFont());
|
||||||
cast_report_button->setText(tr("Episode\n&Report"));
|
cast_report_button->setText(tr("Episode\n&Report"));
|
||||||
|
cast_report_button->setEnabled(cast_feed->audienceMetrics());
|
||||||
connect(cast_report_button,SIGNAL(clicked()),this,SLOT(reportData()));
|
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=new QPushButton(this);
|
||||||
list_report_button->setFont(buttonFont());
|
list_report_button->setFont(buttonFont());
|
||||||
list_report_button->setText(tr("Subscription\n&Report"));
|
list_report_button->setText(tr("Subscription\n&Report"));
|
||||||
|
list_report_button->setEnabled(list_feed->audienceMetrics());
|
||||||
connect(list_report_button,SIGNAL(clicked()),this,SLOT(reportData()));
|
connect(list_report_button,SIGNAL(clicked()),this,SLOT(reportData()));
|
||||||
|
|
||||||
//
|
//
|
||||||
|
Loading…
x
Reference in New Issue
Block a user