// feedlistview.cpp // // RDTableView widget for RSS feeds // // (C) Copyright 2021-2023 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 // published by the Free Software Foundation. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public // License along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // #include #include #include #include "rdfeedlistmodel.h" #include "rdreport.h" #include "feedlistview.h" #include "rdtextfile.h" FeedListView::FeedListView(QWidget *parent) :RDTableView(parent) { d_mouse_row=-1; // // Mouse menu // d_mouse_menu=new QMenu(this); d_front_item_report_action=d_mouse_menu-> addAction(tr("Generate Item Report [Front]"),this,SLOT(generateFrontItemReportData())); d_front_item_report_action->setCheckable(false); d_back_item_report_action=d_mouse_menu-> addAction(tr("Generate Item Report [Back]"),this,SLOT(generateBackItemReportData())); d_back_item_report_action->setCheckable(false); d_mouse_menu->addSeparator(); d_front_raw_xml_action=d_mouse_menu-> addAction(tr("View Raw XML [Front]"),this,SLOT(viewFrontRawXmlData())); d_front_raw_xml_action->setCheckable(false); d_back_raw_xml_action=d_mouse_menu-> addAction(tr("View Raw XML [Back]"),this,SLOT(viewBackRawXmlData())); d_back_raw_xml_action->setCheckable(false); d_mouse_menu->addSeparator(); d_bluebrry_validate_action=d_mouse_menu-> addAction(tr("Validate with Bluebrry"),this,SLOT(validateBluebrryData())); connect(d_mouse_menu,SIGNAL(aboutToShow()), this,SLOT(aboutToShowMenuData())); } FeedListView::~FeedListView() { for(int i=0;i=mod->rowCount())) { d_front_item_report_action->setEnabled(false); d_back_item_report_action->setEnabled(false); } else { d_front_item_report_action->setEnabled(true); d_back_item_report_action->setEnabled(true); } } void FeedListView::generateFrontItemReportData() { QDateTime now=QDateTime::currentDateTime(); bool ok=false; QList front_ids; QString err_msg; QString output_filename="report.html"; RDFeedListModel *m=(RDFeedListModel *)model(); QString keyname=m->data(m->index(d_mouse_row,0)).toString(); RDFeed *feed=new RDFeed(keyname,rda->config(),this); if(feed->frontActiveCasts(&front_ids,&err_msg)) { QString xml=feed->rssXml(&err_msg,now,&ok,&front_ids); d_xslt_engines. push_back(new RDXsltEngine("/usr/share/rivendell/rss-front-item-report.xsl",this)); if(d_xslt_engines.back()->transformXml(&output_filename,xml,&err_msg)) { RDWebBrowser("file://"+output_filename); } else { QMessageBox::warning(this,"RDAdmin - "+tr("Error"),err_msg); } } else { QMessageBox::warning(this,"RDAdmin - "+tr("Error"), tr("Error accessing from XML data.")+"\n"+ "["+err_msg+"]"); } delete feed; } void FeedListView::generateBackItemReportData() { QDateTime now=QDateTime::currentDateTime(); bool ok=false; QList back_ids; QString err_msg; QString output_filename="report.html"; RDFeedListModel *m=(RDFeedListModel *)model(); QString keyname=m->data(m->index(d_mouse_row,0)).toString(); RDFeed *feed=new RDFeed(keyname,rda->config(),this); if(feed->backActiveCasts(&back_ids,&err_msg)) { QString xml=feed->rssXml(&err_msg,now,&ok,&back_ids); d_xslt_engines. push_back(new RDXsltEngine("/usr/share/rivendell/rss-back-item-report.xsl",this)); if(d_xslt_engines.back()->transformXml(&output_filename,xml,&err_msg)) { RDWebBrowser("file://"+output_filename); } else { QMessageBox::warning(this,"RDAdmin - "+tr("Error"),err_msg); } } else { QMessageBox::warning(this,"RDAdmin - "+tr("Error"), tr("Error accessing from XML data.")+"\n"+ "["+err_msg+"]"); } delete feed; } void FeedListView::viewFrontRawXmlData() { QDateTime now=QDateTime::currentDateTime(); QList front_ids; QString err_msg; RDFeedListModel *m=(RDFeedListModel *)model(); QString keyname=m->data(m->index(d_mouse_row,0)).toString(); RDFeed *feed=new RDFeed(keyname,rda->config(),this); QByteArray xml; if(feed->rssFrontXml(&xml,&err_msg)) { RDTextFile(xml,true); } else { QMessageBox::warning(this,"RDAdmin - "+tr("Error"), tr("Error accessing from XML data.")+"\n"+ "["+err_msg+"]"); } delete feed; } void FeedListView::viewBackRawXmlData() { QDateTime now=QDateTime::currentDateTime(); bool ok=false; QList back_ids; QString err_msg; QString output_filename="report.html"; RDFeedListModel *m=(RDFeedListModel *)model(); QString keyname=m->data(m->index(d_mouse_row,0)).toString(); RDFeed *feed=new RDFeed(keyname,rda->config(),this); if(feed->backActiveCasts(&back_ids,&err_msg)) { QString xml=feed->rssXml(&err_msg,now,&ok,&back_ids); RDTextFile(xml,true); } else { QMessageBox::warning(this,"RDAdmin - "+tr("Error"), tr("Error accessing from XML data.")+"\n"+ "["+err_msg+"]"); } delete feed; } void FeedListView::validateBluebrryData() { RDFeedListModel *m=(RDFeedListModel *)model(); QString keyname=m->data(m->index(d_mouse_row,0)).toString(); RDFeed *feed=new RDFeed(keyname,rda->config(),this); QString url=QString("https://www.castfeedvalidator.com/validate.php?url=")+ feed->publicUrl(feed->baseUrl(""),feed->keyName()); RDWebBrowser(url); delete feed; } void FeedListView::mousePressEvent(QMouseEvent *e) { if(e->button()==Qt::RightButton) { d_mouse_row=indexAt(e->pos()).row(); if((d_mouse_row>=0)&&(d_mouse_rowrowCount())) { d_mouse_menu->popup(e->globalPos()); } else { d_mouse_row=-1; } } QTableView::mousePressEvent(e); }