From 69e253649e1d5066407f2dcbc89565fbb6d530c2 Mon Sep 17 00:00:00 2001 From: Fred Gleason Date: Thu, 21 May 2020 16:29:59 -0400 Subject: [PATCH] 2020-05-21 Fred Gleason * Fixed bugs in the podcasting system that caused corrupt URLs to be generated for GUID and image tags for items contained in a superfeed. * Commented out file posting code in the web version of RDCastManager. * Disabled the 'Post from Cart/Cut', 'Post from File', 'Edit' and 'Delete' buttons when showing a superfeed in the 'Podcast List' dialog of rdcastmanager(1). --- ChangeLog | 9 +++ lib/rdfeed.cpp | 119 +++++++++++++++------------- lib/rdfeed.h | 4 +- rdcastmanager/list_casts.cpp | 17 ++-- web/rdcastmanager/rdcastmanager.cpp | 3 +- 5 files changed, 87 insertions(+), 65 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6b8ce067..684fcea2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -19984,3 +19984,12 @@ 2020-05-21 Fred Gleason * Added a check to verify correct size of imported images in 'RDFeed::importImageFile()'. +2020-05-21 Fred Gleason + * Fixed bugs in the podcasting system that caused corrupt URLs + to be generated for GUID and image tags for items contained in + a superfeed. + * Commented out file posting code in the web version of + RDCastManager. + * Disabled the 'Post from Cart/Cut', 'Post from File', 'Edit' and + 'Delete' buttons when showing a superfeed in the 'Podcast List' + dialog of rdcastmanager(1). diff --git a/lib/rdfeed.cpp b/lib/rdfeed.cpp index d6cc21bd..6e74b843 100644 --- a/lib/rdfeed.cpp +++ b/lib/rdfeed.cpp @@ -44,16 +44,6 @@ #include "rdupload.h" #include "rdwavefile.h" -// -// Default XML Templates -// -/* -#define DEFAULT_HEADER_XML "\n" - -#define DEFAULT_CHANNEL_XML "%TITLE%\n%DESCRIPTION%\n%CATEGORY%\n%LINK%\n%LANGUAGE%\n%COPYRIGHT%\n%BUILD_DATE%\n%PUBLISH_DATE%\n%EDITOR%\n%WEBMASTER%\n%GENERATOR%\n" - -#define DEFAULT_ITEM_XML "%ITEM_TITLE%\n%ITEM_LINK%\n%ITEM_GUID%\n%ITEM_DESCRIPTION%\n%ITEM_AUTHOR%\n%ITEM_COMMENTS%\n%ITEM_SOURCE_TEXT%\n\n%ITEM_CATEGORY%\n%ITEM_PUBLISH_DATE%" -*/ size_t __RDFeed_Readfunction_Callback(char *buffer,size_t size,size_t nitems, void *userdata) { @@ -1116,6 +1106,12 @@ unsigned RDFeed::postCut(RDUser *user,RDStation *station, emit postProgressChanged(3); unlink(tmpfile); delete upload; + + // + // Set default cast parameters + // + cast->setItemAuthor(user->emailContact()); + cast->setItemImageId(defaultItemImageId()); delete cast; if(!audienceMetrics()) { @@ -1129,8 +1125,9 @@ unsigned RDFeed::postCut(RDUser *user,RDStation *station, } -unsigned RDFeed::postFile(RDStation *station,const QString &srcfile,Error *err, - bool log_debug,RDConfig *config) +unsigned RDFeed::postFile(RDUser *user,RDStation *station, + const QString &srcfile,Error *err,bool log_debug, + RDConfig *config) { QString err_msg; QString sql; @@ -1236,10 +1233,17 @@ unsigned RDFeed::postFile(RDStation *station,const QString &srcfile,Error *err, return 0; } delete upload; - delete cast; + unlink(QString(tmpfile)+".wav"); unlink(tmpfile); + // + // Set default cast parameters + // + cast->setItemAuthor(user->emailContact()); + cast->setItemImageId(defaultItemImageId()); + delete cast; + if(!audienceMetrics()) { emit postProgressChanged(4); postXml(&err_msg); @@ -1357,26 +1361,27 @@ QString RDFeed::rssXml(QString *err_msg,bool *ok) where =QString().sprintf("(PODCASTS.FEED_ID=%u)&&",q->value(18).toUInt()); } sql=QString("select ")+ - "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.ITEM_EXPLICIT,"+ // 08 - "PODCASTS.AUDIO_FILENAME,"+ // 09 - "PODCASTS.AUDIO_LENGTH,"+ // 10 - "PODCASTS.AUDIO_TIME,"+ // 11 - "PODCASTS.EFFECTIVE_DATETIME,"+ // 12 - "PODCASTS.ID,"+ // 13 - "FEEDS.BASE_URL,"+ // 14 - "FEED_IMAGES.ID,"+ // 15 - "FEED_IMAGES.WIDTH,"+ // 16 - "FEED_IMAGES.HEIGHT,"+ // 17 - "FEED_IMAGES.DESCRIPTION,"+ // 18 - "FEED_IMAGES.FILE_EXTENSION "+ // 19 + "PODCASTS.FEED_ID,"+ // 00 + "PODCASTS.ITEM_TITLE,"+ // 01 + "PODCASTS.ITEM_DESCRIPTION,"+ // 02 + "PODCASTS.ITEM_CATEGORY,"+ // 03 + "PODCASTS.ITEM_LINK,"+ // 04 + "PODCASTS.ITEM_AUTHOR,"+ // 05 + "PODCASTS.ITEM_SOURCE_TEXT,"+ // 06 + "PODCASTS.ITEM_SOURCE_URL,"+ // 07 + "PODCASTS.ITEM_COMMENTS,"+ // 08 + "PODCASTS.ITEM_EXPLICIT,"+ // 09 + "PODCASTS.AUDIO_FILENAME,"+ // 10 + "PODCASTS.AUDIO_LENGTH,"+ // 11 + "PODCASTS.AUDIO_TIME,"+ // 12 + "PODCASTS.EFFECTIVE_DATETIME,"+ // 13 + "PODCASTS.ID,"+ // 14 + "FEEDS.BASE_URL,"+ // 15 + "FEED_IMAGES.ID,"+ // 16 + "FEED_IMAGES.WIDTH,"+ // 17 + "FEED_IMAGES.HEIGHT,"+ // 18 + "FEED_IMAGES.DESCRIPTION,"+ // 19 + "FEED_IMAGES.FILE_EXTENSION "+ // 20 "from PODCASTS left join FEEDS "+ "on PODCASTS.FEED_ID=FEEDS.ID "+ "left join FEED_IMAGES "+ @@ -1770,57 +1775,57 @@ QString RDFeed::ResolveItemWildcards(const QString &tmplt,RDSqlQuery *item_q, QString ret=" "+tmplt; ret.replace("\n","\r\n "); - ret.replace("%ITEM_TITLE%",RDXmlEscape(item_q->value(0).toString())); + ret.replace("%ITEM_TITLE%",RDXmlEscape(item_q->value(1).toString())); ret.replace("%ITEM_DESCRIPTION%", - RDXmlEscape(item_q->value(1).toString())); - ret.replace("%ITEM_CATEGORY%", RDXmlEscape(item_q->value(2).toString())); - ret.replace("%ITEM_LINK%",RDXmlEscape(item_q->value(3).toString())); - ret.replace("%ITEM_AUTHOR%",RDXmlEscape(item_q->value(4).toString())); + ret.replace("%ITEM_CATEGORY%", + RDXmlEscape(item_q->value(3).toString())); + ret.replace("%ITEM_LINK%",RDXmlEscape(item_q->value(4).toString())); + ret.replace("%ITEM_AUTHOR%",RDXmlEscape(item_q->value(5).toString())); if(chan_q->value(1).toString()=="Y") { // Audience Metrics ret.replace("%ITEM_SOURCE_TEXT%", - RDXmlEscape(item_q->value(5).toString())); - ret.replace("%ITEM_SOURCE_URL%", RDXmlEscape(item_q->value(6).toString())); + ret.replace("%ITEM_SOURCE_URL%", + RDXmlEscape(item_q->value(7).toString())); } else { ret.replace("%ITEM_SOURCE_TEXT%", RDXmlEscape(chan_q->value(0).toString())); ret.replace("%ITEM_SOURCE_URL%", - RDXmlEscape(item_q->value(14).toString()+"/"+keyName())); + RDXmlEscape(item_q->value(15).toString()+"/"+keyName())); } ret.replace("%ITEM_COMMENTS%", - RDXmlEscape(item_q->value(7).toString())); + RDXmlEscape(item_q->value(8).toString())); QString explicit_str="false"; - if(item_q->value(8).toString()=="Y") { + if(item_q->value(9).toString()=="Y") { explicit_str="true"; } ret.replace("%ITEM_EXPLICIT%",explicit_str); if(chan_q->value(23).toString()=="Y") { ret.replace("%ITEM_AUDIO_URL%", RDXmlEscape(audioUrl(RDFeed::LinkCounted,feed_cgi_hostname, - item_q->value(13).toUInt()))); + item_q->value(14).toUInt()))); } else { ret.replace("%ITEM_AUDIO_URL%", RDXmlEscape(audioUrl(RDFeed::LinkDirect,feed_cgi_hostname, - item_q->value(13).toUInt()))); + item_q->value(14).toUInt()))); } - ret.replace("%ITEM_AUDIO_LENGTH%",item_q->value(10).toString()); + ret.replace("%ITEM_AUDIO_LENGTH%",item_q->value(11).toString()); ret.replace("%ITEM_AUDIO_TIME%", - RDGetTimeLength(item_q->value(11).toInt(),false,false)); + RDGetTimeLength(item_q->value(12).toInt(),false,false)); ret.replace("%ITEM_AUDIO_SECONDS%", - QString().sprintf("%d",item_q->value(11).toInt()/1000)); - ret.replace("%ITEM_PUBLISH_DATE%",item_q->value(12).toDateTime(). + QString().sprintf("%d",item_q->value(12).toInt()/1000)); + ret.replace("%ITEM_PUBLISH_DATE%",item_q->value(13).toDateTime(). toString("ddd, d MMM yyyy hh:mm:ss ")+"GMT"); - ret.replace("%ITEM_GUID%",RDPodcast::guid(chan_q->value(17).toString(), - item_q->value(9).toString(), - chan_q->value(16).toUInt(), - item_q->value(13).toUInt())); - ret.replace("%ITEM_IMAGE_URL%",chan_q->value(17).toString()+"/"+ - RDFeed::imageFilename(chan_q->value(18).toInt(), - item_q->value(15).toInt(), - item_q->value(19).toString())); + ret.replace("%ITEM_GUID%",RDPodcast::guid(item_q->value(15).toString(), + item_q->value(10).toString(), + item_q->value(0).toUInt(), + item_q->value(14).toUInt())); + ret.replace("%ITEM_IMAGE_URL%",item_q->value(15).toString()+"/"+ + RDFeed::imageFilename(item_q->value(0).toInt(), + item_q->value(16).toInt(), + item_q->value(20).toString())); return ret; } diff --git a/lib/rdfeed.h b/lib/rdfeed.h index 8bb2db39..698b2a77 100644 --- a/lib/rdfeed.h +++ b/lib/rdfeed.h @@ -145,8 +145,8 @@ class RDFeed : public QObject unsigned postCut(RDUser *user,RDStation *station, const QString &cutname,Error *err,bool log_debug, RDConfig *config); - unsigned postFile(RDStation *station,const QString &srcfile,Error *err, - bool log_debug,RDConfig *config); + unsigned postFile(RDUser *user,RDStation *station,const QString &srcfile, + Error *err,bool log_debug,RDConfig *config); int totalPostSteps() const; QString rssXml(QString *err_msg,bool *ok=NULL); RDRssSchemas *rssSchemas() const; diff --git a/rdcastmanager/list_casts.cpp b/rdcastmanager/list_casts.cpp index 5f43f857..034a90bd 100644 --- a/rdcastmanager/list_casts.cpp +++ b/rdcastmanager/list_casts.cpp @@ -145,6 +145,7 @@ ListCasts::ListCasts(unsigned feed_id,bool is_super,QWidget *parent) list_cart_button=new QPushButton(this); list_cart_button->setFont(buttonFont()); list_cart_button->setText(tr("Post From\nCar&t/Cut")); + list_cart_button->setDisabled(list_feed->isSuperfeed()); connect(list_cart_button,SIGNAL(clicked()),this,SLOT(addCartData())); // @@ -153,6 +154,7 @@ ListCasts::ListCasts(unsigned feed_id,bool is_super,QWidget *parent) list_file_button=new QPushButton(this); list_file_button->setFont(buttonFont()); list_file_button->setText(tr("Post From\n&File")); + list_file_button->setDisabled(list_feed->isSuperfeed()); connect(list_file_button,SIGNAL(clicked()),this,SLOT(addFileData())); // @@ -253,7 +255,7 @@ void ListCasts::addFileData() return; } RDFeed::Error err; - unsigned cast_id=list_feed->postFile(rda->station(),srcfile,&err, + unsigned cast_id=list_feed->postFile(rda->user(),rda->station(),srcfile,&err, rda->config()->logXloadDebugData(),rda->config()); if(err!=RDFeed::ErrorOk) { QMessageBox::warning(this,"RDCastManager - "+tr("Posting Error"), @@ -366,10 +368,15 @@ void ListCasts::doubleClickedData(Q3ListViewItem *item,const QPoint &pt, void ListCasts::userChangedData() { - list_cart_button->setEnabled(rda->user()->addPodcast()&&(list_encoder_id>=0)); - list_file_button->setEnabled(rda->user()->addPodcast()&&(list_encoder_id>=0)); - list_edit_button->setEnabled(rda->user()->editPodcast()); - list_delete_button->setEnabled(rda->user()->deletePodcast()); + bool is_superfeed=list_feed->isSuperfeed(); + + list_cart_button->setEnabled(rda->user()->addPodcast()&& + (list_encoder_id>=0)&&(!is_superfeed)); + list_file_button->setEnabled(rda->user()->addPodcast()&& + (list_encoder_id>=0)&&(!is_superfeed)); + list_edit_button->setEnabled(rda->user()->editPodcast()&&(!is_superfeed)); + list_delete_button-> + setEnabled(rda->user()->deletePodcast()&&(!is_superfeed)); } diff --git a/web/rdcastmanager/rdcastmanager.cpp b/web/rdcastmanager/rdcastmanager.cpp index f05d60a2..d57ba28f 100644 --- a/web/rdcastmanager/rdcastmanager.cpp +++ b/web/rdcastmanager/rdcastmanager.cpp @@ -1569,6 +1569,7 @@ void MainObject::ServeSubscriptionReport() void MainObject::PostEpisode() { + /* QString media_file; GetContext(); @@ -1609,7 +1610,7 @@ void MainObject::PostEpisode() Exit(0); } ServeEditCast(cast_id); - + */ Exit(0); }