2021-01-25 Fred Gleason <fredg@paravelsystems.com>

* Refactored the 'List Feed' dialog in rdadmin(1) to use the
	model-based API.

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason 2021-01-25 12:13:26 -05:00
parent 9d5d446c2a
commit 44b9c6848a
16 changed files with 252 additions and 466 deletions

View File

@ -20895,3 +20895,6 @@
* Added 'RDFeedListModel' class
* Refactored the top-level window in rdcastmanager(1) to use the
model-based API.
2021-01-25 Fred Gleason <fredg@paravelsystems.com>
* Refactored the 'List Feed' dialog in rdadmin(1) to use the
model-based API.

View File

@ -25,9 +25,10 @@
#include "rdfeedlistmodel.h"
#include "rdpodcast.h"
RDFeedListModel::RDFeedListModel(QObject *parent)
RDFeedListModel::RDFeedListModel(bool is_admin,QObject *parent)
: QAbstractItemModel(parent)
{
d_is_admin=is_admin;
d_font_metrics=NULL;
d_bold_font_metrics=NULL;
@ -51,13 +52,17 @@ RDFeedListModel::RDFeedListModel(QObject *parent)
d_alignments.push_back(center);
d_headers.push_back(tr("Auto Post")); // 04
d_alignments.push_back(right);
d_alignments.push_back(center);
d_headers.push_back(tr("Superfeed")); // 05
d_alignments.push_back(center);
d_headers.push_back(tr("Public URL")); // 06
d_alignments.push_back(left);
if(d_is_admin) {
changeUser();
}
}
@ -414,10 +419,17 @@ void RDFeedListModel::changeUser()
RDSqlQuery *q=NULL;
QString filter_sql="where ";
sql=QString("select ")+
"KEY_NAME "+ // 00
"from FEED_PERMS where "+
"USER_NAME=\""+RDEscapeString(rda->user()->name())+"\"";
if(d_is_admin) {
sql=QString("select ")+
"KEY_NAME "+ // 00
"from FEEDS";
}
else {
sql=QString("select ")+
"KEY_NAME "+ // 00
"from FEED_PERMS where "+
"USER_NAME=\""+RDEscapeString(rda->user()->name())+"\"";
}
q=new RDSqlQuery(sql);
while(q->next()) {
filter_sql+="(KEY_NAME=\""+RDEscapeString(q->value(0).toString())+"\")||";
@ -529,12 +541,12 @@ void RDFeedListModel::updateRow(int row,RDSqlQuery *q)
d_feed_ids[row]=q->value(0).toUInt();
d_key_names[row]=q->value(1).toString();
d_texts[row][0]=keyname; // Key Name
if(q->value(11).isNull()) {
if(q->value(12).isNull()) {
d_icons[row][0]=rda->iconEngine()->
applicationIcon(RDIconEngine::RdCastManager,32);
}
else {
d_icons[row][0]=QImage::fromData(q->value(11).toByteArray());
d_icons[row][0]=QImage::fromData(q->value(12).toByteArray());
}
d_texts[row][1]=q->value(2); // Title
if(q->value(3).toString()=="Y") {
@ -543,10 +555,10 @@ void RDFeedListModel::updateRow(int row,RDSqlQuery *q)
else {
d_texts[row][2]="0 / 0"; // Casts
}
d_texts[row][3]=q->value(6).toDate().toString("MM/dd/yyyy"); // Creation Date
d_texts[row][4]=q->value(3).toString(); // Superfeed
d_texts[row][5]=q->value(4).toString(); // Autopost
d_texts[row][6]=RDFeed::publicUrl(q->value(5).toString(),keyname);
d_texts[row][3]=q->value(7).toDate().toString("MM/dd/yyyy"); // Creation Date
d_texts[row][4]=q->value(3).toString(); // Autopost
d_texts[row][5]=q->value(4).toString(); // Superfeed
d_texts[row][6]=RDFeed::publicUrl(q->value(6).toString(),keyname);
//
// Cast Attributes
@ -560,13 +572,13 @@ void RDFeedListModel::updateRow(int row,RDSqlQuery *q)
}
do {
if(q->value(7).isNull()) {
if(q->value(8).isNull()) {
return; // No casts!
}
// Process
total_casts++;
d_cast_ids[row].push_back(q->value(7).toUInt());
switch((RDPodcast::Status)q->value(9).toUInt()) {
d_cast_ids[row].push_back(q->value(8).toUInt());
switch((RDPodcast::Status)q->value(10).toUInt()) {
case RDPodcast::StatusPending:
d_cast_icons[row].push_back(rda->iconEngine()->
listIcon(RDIconEngine::BlueBall));
@ -584,9 +596,9 @@ void RDFeedListModel::updateRow(int row,RDSqlQuery *q)
break;
}
d_cast_texts[row].push_back(list);
d_cast_texts[row].back()[1]=q->value(8); // Item Title
d_cast_texts[row].back()[1]=q->value(9); // Item Title
d_cast_texts[row].back()[3]=
q->value(10).toDateTime().toString("MM/dd/yyyy");
q->value(11).toDateTime().toString("MM/dd/yyyy");
} while(q->next()&&(q->value(1).toString()==keyname));
q->previous();
@ -606,15 +618,17 @@ QString RDFeedListModel::sqlFields() const
"FEEDS.ID,"+ // 00
"FEEDS.KEY_NAME,"+ // 01
"FEEDS.CHANNEL_TITLE,"+ // 02
"FEEDS.IS_SUPERFEED,"+ // 03
"FEEDS.ID,"+ // 04
"FEEDS.BASE_URL,"+ // 05
"FEEDS.ORIGIN_DATETIME,"+ // 06
"PODCASTS.ID,"+ // 07
"PODCASTS.ITEM_TITLE,"+ // 08
"PODCASTS.STATUS,"+ // 09
"PODCASTS.ORIGIN_DATETIME,"+ // 10
"FEED_IMAGES.DATA "+ // 11
"FEEDS.ENABLE_AUTOPOST,"+ // 03
"FEEDS.IS_SUPERFEED,"+ // 04
"FEEDS.ID,"+ // 05
"FEEDS.BASE_URL,"+ // 06
"FEEDS.ORIGIN_DATETIME,"+ // 07
"PODCASTS.ID,"+ // 08
"PODCASTS.ITEM_TITLE,"+ // 09
"PODCASTS.STATUS,"+ // 10
"PODCASTS.ORIGIN_DATETIME,"+ // 11
"FEED_IMAGES.DATA "+ // 12
"from FEEDS left join FEED_IMAGES "+
"on FEEDS.CHANNEL_IMAGE_ID=FEED_IMAGES.ID left join PODCASTS "+
"on FEEDS.ID=PODCASTS.FEED_ID ";

View File

@ -36,7 +36,7 @@ class RDFeedListModel : public QAbstractItemModel
{
Q_OBJECT
public:
RDFeedListModel(QObject *parent=0);
RDFeedListModel(bool is_admin,QObject *parent=0);
~RDFeedListModel();
QPalette palette();
void setPalette(const QPalette &pal);
@ -95,6 +95,7 @@ class RDFeedListModel : public QAbstractItemModel
QList<QVariant> d_background_colors;
QStringList d_key_names;
QList<unsigned> d_feed_ids;
bool d_is_admin;
};

View File

@ -2,7 +2,7 @@
//
// Add a Rivendell RSS Feed
//
// (C) Copyright 2002-2020 Fred Gleason <fredg@paravelsystems.com>
// (C) Copyright 2002-2021 Fred Gleason <fredg@paravelsystems.com>
//
// 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
@ -125,7 +125,7 @@ void AddFeed::okData()
&err_msg);
if(*feed_id!=0) {
*feed_keyname=feed_keyname_edit->text();
done(0);
done(true);
}
else {
QMessageBox::warning(this,"RDAdmin - "+tr("Add Feed Error"),err_msg);
@ -135,7 +135,7 @@ void AddFeed::okData()
void AddFeed::cancelData()
{
done(-1);
done(false);
}

View File

@ -724,13 +724,13 @@ void EditFeed::okData()
return;
}
done(0);
done(true);
}
void EditFeed::cancelData()
{
done(-1);
done(false);
}

View File

@ -2,7 +2,7 @@
//
// List Rivendell Feeds
//
// (C) Copyright 2002-2020 Fred Gleason <fredg@paravelsystems.com>
// (C) Copyright 2002-2021 Fred Gleason <fredg@paravelsystems.com>
//
// 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
@ -38,11 +38,6 @@
#include "globals.h"
#include "list_feeds.h"
//
// Icons
//
#include "../icons/rdcastmanager-32x32.xpm"
ListFeeds::ListFeeds(QWidget *parent)
: RDDialog(parent)
{
@ -53,11 +48,6 @@ ListFeeds::ListFeeds(QWidget *parent)
setWindowTitle("RDAdmin - "+tr("Rivendell Feed List"));
//
// Create Icons
//
list_rdcastmanager_32x32_map=new QPixmap(rdcastmanager_32x32_xpm);
//
// Add Button
//
@ -110,33 +100,24 @@ ListFeeds::ListFeeds(QWidget *parent)
//
// Group List
//
list_feeds_view=new RDListView(this);
list_feeds_view->setAllColumnsShowFocus(true);
list_feeds_view->setItemMargin(5);
list_feeds_view->addColumn(" ");
list_feeds_view->setColumnAlignment(0,Qt::AlignCenter|Qt::AlignVCenter);
list_feeds_view->addColumn(tr("Key"));
list_feeds_view->setColumnAlignment(1,Qt::AlignCenter|Qt::AlignVCenter);
list_feeds_view->addColumn(tr("Title"));
list_feeds_view->setColumnAlignment(2,Qt::AlignLeft);
list_feeds_view->addColumn(tr("Public URL"));
list_feeds_view->setColumnAlignment(3,Qt::AlignLeft);
list_feeds_view->addColumn(tr("Superfeed"));
list_feeds_view->setColumnAlignment(4,Qt::AlignCenter|Qt::AlignVCenter);
list_feeds_view->addColumn(tr("AutoPost"));
list_feeds_view->setColumnAlignment(5,Qt::AlignCenter|Qt::AlignVCenter);
list_feeds_view->addColumn(tr("Creation Date"));
list_feeds_view->setColumnAlignment(6,Qt::AlignCenter|Qt::AlignVCenter);
list_feeds_view=new QTableView(this);
list_feeds_view->setSelectionBehavior(QAbstractItemView::SelectRows);
list_feeds_view->setSelectionMode(QAbstractItemView::SingleSelection);
list_feeds_view->setShowGrid(false);
list_feeds_view->setSortingEnabled(false);
list_feeds_view->setSortingEnabled(false);
list_feeds_view->setWordWrap(false);
list_feeds_model=new RDFeedListModel(true,this);
list_feeds_model->setFont(font());
list_feeds_model->setPalette(palette());
list_feeds_view->setModel(list_feeds_model);
list_feeds_view->setColumnHidden(2,true);
list_box_label=new QLabel(list_feeds_view,tr("Podcast Feeds"),this);
list_box_label->setFont(bigLabelFont());
connect(list_feeds_view,
SIGNAL(doubleClicked(Q3ListViewItem *,const QPoint &,int)),
this,
SLOT(doubleClickedData(Q3ListViewItem *,const QPoint &,int)));
RefreshList();
connect(list_feeds_model,SIGNAL(modelReset()),this,SLOT(resetModelData()));
connect(list_feeds_view,SIGNAL(doubleClicked(const QModelIndex &)),
this,SLOT(doubleClickedData(const QModelIndex &)));
resetModelData();
}
@ -163,82 +144,71 @@ void ListFeeds::addData()
unsigned id;
QString sql;
AddFeed *add_feed=new AddFeed(&id,&feed,this);
if(add_feed->exec()<0) {
delete add_feed;
return;
AddFeed *ad=new AddFeed(&id,&feed,this);
if(ad->exec()) {
EditFeed *d=new EditFeed(feed,this);
if(d->exec()) {
QModelIndex row=list_feeds_model->addFeed(feed);
if(row.isValid()) {
list_feeds_model->refreshRow(row);
list_feeds_view->selectRow(row.row());
}
}
else {
sql=QString("delete from FEED_PERMS where ")+
"KEY_NAME=\""+RDEscapeString(feed)+"\"";
RDSqlQuery::apply(sql);
sql=QString("delete from FEED_IMAGES where ")+
"FEED_KEY_NAME=\""+RDEscapeString(feed)+"\"";
RDSqlQuery::apply(sql);
sql=QString("delete from FEEDS where ")+
"KEY_NAME=\""+RDEscapeString(feed)+"\"";
RDSqlQuery::apply(sql);
return;
}
delete d;
}
delete add_feed;
add_feed=NULL;
EditFeed *edit_feed=new EditFeed(feed,this);
if(edit_feed->exec()<0) {
sql=QString("delete from FEED_PERMS where ")+
"KEY_NAME=\""+RDEscapeString(feed)+"\"";
RDSqlQuery::apply(sql);
sql=QString("delete from FEED_IMAGES where ")+
"FEED_KEY_NAME=\""+RDEscapeString(feed)+"\"";
RDSqlQuery::apply(sql);
sql=QString("delete from FEEDS where ")+
"KEY_NAME=\""+RDEscapeString(feed)+"\"";
RDSqlQuery::apply(sql);
delete edit_feed;
return;
}
delete edit_feed;
RDListViewItem *item=new RDListViewItem(list_feeds_view);
item->setId(id);
item->setText(1,feed);
RefreshItem(item);
item->setSelected(true);
list_feeds_view->setCurrentItem(item);
list_feeds_view->ensureItemVisible(item);
delete ad;
}
void ListFeeds::editData()
{
RDListViewItem *item=(RDListViewItem *)list_feeds_view->selectedItem();
if(item==NULL) {
QModelIndexList rows=list_feeds_view->selectionModel()->selectedRows();
if(rows.size()!=1) {
return;
}
EditFeed *edit_feed=new EditFeed(item->text(1),this);
edit_feed->exec();
delete edit_feed;
RefreshItem(item);
EditFeed *d=new EditFeed(list_feeds_model->keyName(rows.first()),this);
if(d->exec()) {
list_feeds_model->refreshRow(rows.first());
}
delete d;
}
void ListFeeds::deleteData()
{
RDListViewItem *item=(RDListViewItem *)list_feeds_view->selectedItem();
if(item==NULL) {
return;
}
QString sql;
RDSqlQuery *q;
QString warning;
QString str;
RDFeed *feed;
QString errs;
QModelIndexList rows=list_feeds_view->selectionModel()->selectedRows();
QString feedname=item->text(1);
if(feedname.isEmpty()) {
if(rows.size()!=1) {
return;
}
warning+=tr("Are you sure you want to delete feed")+" \""+feedname+"\"?";
switch(QMessageBox::warning(this,tr("Delete Feed"),warning,
QMessageBox::Yes,QMessageBox::No)) {
case QMessageBox::No:
case QMessageBox::NoButton:
return;
default:
break;
QString feedname=list_feeds_model->keyName(rows.first());
warning+=tr("Are you sure you want to delete feed")+" \""+feedname+"\"?";
if(QMessageBox::warning(this,"RDAdmin - "+tr("Delete Feed"),warning,
QMessageBox::Yes,QMessageBox::No)!=QMessageBox::Yes) {
return;
}
feed=new RDFeed(feedname,rda->config());
@ -248,10 +218,13 @@ void ListFeeds::deleteData()
// First, Delete Remote Audio
//
RDPodcast *cast;
sql=QString().sprintf("select ID from PODCASTS where FEED_ID=%d",item->id());
sql=QString("select ")+
"ID "+ // 00
"from PODCASTS where "+
QString().sprintf("FEED_ID=%u",list_feeds_model->feedId(rows.first()));
q=new RDSqlQuery(sql);
QProgressDialog *pd=new QProgressDialog(tr("Deleting remote audio..."),"",
0,q->size()+1,this);
QProgressDialog *pd=
new QProgressDialog(tr("Deleting remote audio..."),"",0,q->size()+1,this);
pd->setWindowTitle("RDAdmin");
pd->setValue(0);
qApp->processEvents();
@ -276,7 +249,8 @@ void ListFeeds::deleteData()
//
// Delete Cast Entries
//
sql=QString().sprintf("delete from PODCASTS where FEED_ID=%d",item->id());
sql=QString("delete from PODCASTS where ")+
QString().sprintf("FEED_ID=%u",list_feeds_model->feedId(rows.first()));
RDSqlQuery::apply(sql);
//
@ -300,18 +274,16 @@ void ListFeeds::deleteData()
sql=QString("delete from FEEDS where ")+
"KEY_NAME=\""+RDEscapeString(feedname)+"\"";
RDSqlQuery::apply(sql);
item->setSelected(false);
list_feeds_model->removeFeed(feedname);
pd->reset();
delete pd;
delete feed;
delete item;
}
void ListFeeds::doubleClickedData(Q3ListViewItem *item,const QPoint &pt,
int col)
void ListFeeds::doubleClickedData(const QModelIndex &index)
{
editData();
}
@ -323,16 +295,14 @@ void ListFeeds::repostData()
RDSqlQuery *q=NULL;
RDFeed *feed=NULL;
int count;
QModelIndexList rows=list_feeds_view->selectionModel()->selectedRows();
RDListViewItem *item=(RDListViewItem *)list_feeds_view->selectedItem();
if(item==NULL) {
return;
}
QString keyname=item->text(1);
if(keyname.isEmpty()) {
if(rows.size()!=1) {
return;
}
QString keyname=list_feeds_model->keyName(rows.first());
if(QMessageBox::question(this,"RDAdmin - "+tr("Feed Repost"),
tr("This operation will repost all XML, image and")+"\n"+
tr("audio data to the remote archive, and thus may")+"\n"+
@ -401,16 +371,14 @@ void ListFeeds::unpostData()
RDSqlQuery *q=NULL;
RDFeed *feed=NULL;
int count;
QModelIndexList rows=list_feeds_view->selectionModel()->selectedRows();
RDListViewItem *item=(RDListViewItem *)list_feeds_view->selectedItem();
if(item==NULL) {
return;
}
QString keyname=item->text(1);
if(keyname.isEmpty()) {
if(rows.size()!=1) {
return;
}
QString keyname=list_feeds_model->keyName(rows.first());
if(QMessageBox::question(this,"RDAdmin - "+tr("Feed Repost"),
tr("This operation will unpost (remove) all XML, image and")+"\n"+
tr("audio data from the remote archive, and thus may")+"\n"+
@ -482,6 +450,13 @@ void ListFeeds::closeData()
}
void ListFeeds::resetModelData()
{
list_feeds_view->resizeColumnsToContents();
list_feeds_view->resizeRowsToContents();
}
void ListFeeds::resizeEvent(QResizeEvent *e)
{
list_add_button->setGeometry(size().width()-90,30,80,50);
@ -493,81 +468,3 @@ void ListFeeds::resizeEvent(QResizeEvent *e)
list_box_label->setGeometry(14,11,size().width()-28,19);
list_feeds_view->setGeometry(10,30,size().width()-120,size().height()-40);
}
void ListFeeds::RefreshList()
{
QString sql;
RDSqlQuery *q;
RDListViewItem *item;
list_feeds_view->clear();
sql=QString("select ")+
"FEEDS.ID,"+ // 00
"FEEDS.KEY_NAME,"+ // 01
"FEEDS.CHANNEL_TITLE,"+ // 02
"FEEDS.IS_SUPERFEED,"+ // 03
"FEEDS.ENABLE_AUTOPOST,"+ // 04
"FEEDS.ORIGIN_DATETIME,"+ // 05
"FEEDS.BASE_URL,"+ // 06
"FEED_IMAGES.DATA "+ // 07
"from FEEDS left join FEED_IMAGES "+
"on FEEDS.CHANNEL_IMAGE_ID=FEED_IMAGES.ID";
q=new RDSqlQuery(sql);
while (q->next()) {
item=new RDListViewItem(list_feeds_view);
item->setId(q->value(0).toInt());
if(q->value(7).isNull()) {
item->setPixmap(0,*list_rdcastmanager_32x32_map);
}
else {
QImage img=QImage::fromData(q->value(7).toByteArray());
item->setPixmap(0,QPixmap::fromImage(img.scaled(32,32)));
}
item->setText(1,q->value(1).toString());
item->setText(2,q->value(2).toString());
item->setText(3,RDFeed::publicUrl(q->value(6).toString(),
q->value(1).toString()));
item->setText(4,q->value(3).toString());
item->setText(5,q->value(4).toString());
item->setText(6,q->value(5).toDateTime().toString("MM/dd/yyyy"));
}
delete q;
}
void ListFeeds::RefreshItem(RDListViewItem *item)
{
QString sql;
RDSqlQuery *q;
sql=QString("select ")+
"FEEDS.KEY_NAME,"+ // 00
"FEEDS.CHANNEL_TITLE,"+ // 01
"FEEDS.IS_SUPERFEED,"+ // 02
"FEEDS.ENABLE_AUTOPOST,"+ // 03
"FEEDS.ORIGIN_DATETIME,"+ // 04
"FEEDS.BASE_URL,"+ // 05
"FEED_IMAGES.DATA "+ // 06
"from FEEDS left join FEED_IMAGES "+
"on FEEDS.CHANNEL_IMAGE_ID=FEED_IMAGES.ID where "+
QString().sprintf("FEEDS.ID=%d",item->id());
q=new RDSqlQuery(sql);
if(q->next()) {
if(q->value(6).isNull()) {
item->setPixmap(0,*list_rdcastmanager_32x32_map);
}
else {
QImage img=QImage::fromData(q->value(6).toByteArray());
item->setPixmap(0,QPixmap::fromImage(img.scaled(32,32)));
}
item->setText(1,q->value(0).toString());
item->setText(2,q->value(1).toString());
item->setText(3,RDFeed::publicUrl(q->value(5).toString(),
q->value(0).toString()));
item->setText(4,q->value(2).toString());
item->setText(5,q->value(3).toString());
item->setText(6,q->value(4).toDateTime().toString("MM/dd/yyyy"));
}
delete q;
}

View File

@ -1,8 +1,8 @@
// list_feeds.h
//
// List Rivendell Feeds
// List Rivendell RSS Feeds
//
// (C) Copyright 2002-2020 Fred Gleason <fredg@paravelsystems.com>
// (C) Copyright 2002-2021 Fred Gleason <fredg@paravelsystems.com>
//
// 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
@ -21,9 +21,11 @@
#ifndef LIST_FEEDS_H
#define LIST_FEEDS_H
#include <qpushbutton.h>
#include <QPushButton>
#include <QTableView>
#include <rddialog.h>
#include <rdfeedlistmodel.h>
#include <rdlistviewitem.h>
class ListFeeds : public RDDialog
@ -39,20 +41,19 @@ class ListFeeds : public RDDialog
void addData();
void editData();
void deleteData();
void doubleClickedData(Q3ListViewItem *item,const QPoint &pt,int col);
void doubleClickedData(const QModelIndex &index);
void repostData();
void unpostData();
void closeData();
void resetModelData();
protected:
void resizeEvent(QResizeEvent *e);
private:
void RefreshList();
void RefreshItem(RDListViewItem *item);
QPixmap *list_rdcastmanager_32x32_map;
QLabel *list_box_label;
RDListView *list_feeds_view;
QTableView *list_feeds_view;
RDFeedListModel *list_feeds_model;
QPushButton *list_add_button;
QPushButton *list_edit_button;
QPushButton *list_delete_button;

View File

@ -84,11 +84,6 @@ MainWidget::MainWidget(RDConfig *config,RDWidget *parent)
setMinimumSize(sizeHint());
setMaximumSize(sizeHint());
//
// Create And Set Icon
//
setWindowIcon(rda->iconEngine()->applicationIcon(RDIconEngine::RdAdmin,22));
//
// Open the Database
//
@ -99,6 +94,7 @@ MainWidget::MainWidget(RDConfig *config,RDWidget *parent)
exit(1);
}
}
setWindowIcon(rda->iconEngine()->applicationIcon(RDIconEngine::RdAdmin,22));
setWindowTitle(QString("RDAdmin v")+VERSION+" - "+
tr("Host")+": "+rda->config()->stationName());

View File

@ -5325,15 +5325,15 @@ Stále ještě jej chcete smazat?</translation>
</message>
<message>
<source>Key</source>
<translation>Klíč</translation>
<translation type="obsolete">Klíč</translation>
</message>
<message>
<source>Title</source>
<translation>Název</translation>
<translation type="obsolete">Název</translation>
</message>
<message>
<source>AutoPost</source>
<translation>Automatické vyvěšení</translation>
<translation type="obsolete">Automatické vyvěšení</translation>
</message>
<message>
<source>Keep Metadata</source>
@ -5341,7 +5341,7 @@ Stále ještě jej chcete smazat?</translation>
</message>
<message>
<source>Creation Date</source>
<translation>Datum vytvoření</translation>
<translation type="obsolete">Datum vytvoření</translation>
</message>
<message>
<source>&amp;Feeds:</source>
@ -5349,11 +5349,11 @@ Stále ještě jej chcete smazat?</translation>
</message>
<message>
<source>Are you sure you want to delete feed</source>
<translation>Opravdu chcete smazat tento přívod</translation>
<translation type="unfinished">Opravdu chcete smazat tento přívod</translation>
</message>
<message>
<source>Delete Feed</source>
<translation>Smazat přívod</translation>
<translation type="unfinished">Smazat přívod</translation>
</message>
<message>
<source>Deleting Audio...</source>
@ -5367,30 +5367,30 @@ Stále ještě jej chcete smazat?</translation>
<source>Deleting</source>
<translation type="obsolete">Mazání</translation>
</message>
<message>
<source>Superfeed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Failed to delete remote feed XML.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning</source>
<translation type="unfinished">Varování</translation>
</message>
<message>
<source>&amp;Repost</source>
<translation type="unfinished">&amp;Vyvěsit znovu</translation>
</message>
<message>
<source>&amp;Unpost</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Podcast Feeds</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Deleting remote audio...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Public URL</source>
<source>Failed to delete remote feed XML.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Repost</source>
<translation type="unfinished">&amp;Vyvěsit znovu</translation>
</message>
<message>
<source>Feed Repost</source>
<translation type="unfinished"></translation>
@ -5404,11 +5404,11 @@ Stále ještě jej chcete smazat?</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue?</source>
<source>take signficant time to complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>take signficant time to complete.</source>
<source>Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -5419,16 +5419,12 @@ Stále ještě jej chcete smazat?</translation>
<source>Posting item data...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Unpost</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Posting RSS XML data...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unposting RSS XML data...</source>
<source>This operation will unpost (remove) all XML, image and</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -5436,7 +5432,7 @@ Stále ještě jej chcete smazat?</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>This operation will unpost (remove) all XML, image and</source>
<source>Unposting RSS XML data...</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -5447,10 +5443,6 @@ Stále ještě jej chcete smazat?</translation>
<source>Unposting images...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Podcast Feeds</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListGpis</name>

View File

@ -5001,20 +5001,20 @@ Wollen Sie ihn immernoch löschen?</translation>
<source>&amp;Close</source>
<translation type="unfinished">&amp;Schliessen</translation>
</message>
<message>
<source>Key</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Title</source>
<translation type="unfinished">Titel</translation>
<translation type="obsolete">Titel</translation>
</message>
<message>
<source>AutoPost</source>
<source>&amp;Repost</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Creation Date</source>
<source>&amp;Unpost</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Podcast Feeds</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -5026,11 +5026,7 @@ Wollen Sie ihn immernoch löschen?</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Superfeed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Failed to delete remote feed XML.</source>
<source>Deleting remote audio...</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -5038,15 +5034,7 @@ Wollen Sie ihn immernoch löschen?</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Deleting remote audio...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Public URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Repost</source>
<source>Failed to delete remote feed XML.</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -5062,11 +5050,11 @@ Wollen Sie ihn immernoch löschen?</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue?</source>
<source>take signficant time to complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>take signficant time to complete.</source>
<source>Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -5077,16 +5065,12 @@ Wollen Sie ihn immernoch löschen?</translation>
<source>Posting item data...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Unpost</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Posting RSS XML data...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unposting RSS XML data...</source>
<source>This operation will unpost (remove) all XML, image and</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -5094,7 +5078,7 @@ Wollen Sie ihn immernoch löschen?</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>This operation will unpost (remove) all XML, image and</source>
<source>Unposting RSS XML data...</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -5105,10 +5089,6 @@ Wollen Sie ihn immernoch löschen?</translation>
<source>Unposting images...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Podcast Feeds</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListGpis</name>

View File

@ -5276,15 +5276,15 @@ Do you still want to delete it?</source>
</message>
<message>
<source>Key</source>
<translation>Nombre</translation>
<translation type="obsolete">Nombre</translation>
</message>
<message>
<source>Title</source>
<translation>Título</translation>
<translation type="obsolete">Título</translation>
</message>
<message>
<source>AutoPost</source>
<translation>AutoPublicar</translation>
<translation type="obsolete">AutoPublicar</translation>
</message>
<message>
<source>Keep Metadata</source>
@ -5292,7 +5292,7 @@ Do you still want to delete it?</source>
</message>
<message>
<source>Creation Date</source>
<translation>Fecha de creación</translation>
<translation type="obsolete">Fecha de creación</translation>
</message>
<message>
<source>&amp;Feeds:</source>
@ -5300,11 +5300,11 @@ Do you still want to delete it?</source>
</message>
<message>
<source>Are you sure you want to delete feed</source>
<translation>¿Está seguro de borrar el feed </translation>
<translation type="unfinished">¿Está seguro de borrar el feed </translation>
</message>
<message>
<source>Delete Feed</source>
<translation>Eliminar Feed</translation>
<translation type="unfinished">Eliminar Feed</translation>
</message>
<message>
<source>Deleting Audio...</source>
@ -5318,30 +5318,30 @@ Do you still want to delete it?</source>
<source>Deleting</source>
<translation type="obsolete">Borrando</translation>
</message>
<message>
<source>Superfeed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Failed to delete remote feed XML.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning</source>
<translation type="unfinished">Advertencia</translation>
</message>
<message>
<source>&amp;Repost</source>
<translation type="unfinished">&amp;Republicar</translation>
</message>
<message>
<source>&amp;Unpost</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Podcast Feeds</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Deleting remote audio...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Public URL</source>
<source>Failed to delete remote feed XML.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Repost</source>
<translation type="unfinished">&amp;Republicar</translation>
</message>
<message>
<source>Feed Repost</source>
<translation type="unfinished"></translation>
@ -5355,11 +5355,11 @@ Do you still want to delete it?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue?</source>
<source>take signficant time to complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>take signficant time to complete.</source>
<source>Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -5370,16 +5370,12 @@ Do you still want to delete it?</source>
<source>Posting item data...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Unpost</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Posting RSS XML data...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unposting RSS XML data...</source>
<source>This operation will unpost (remove) all XML, image and</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -5387,7 +5383,7 @@ Do you still want to delete it?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This operation will unpost (remove) all XML, image and</source>
<source>Unposting RSS XML data...</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -5398,10 +5394,6 @@ Do you still want to delete it?</source>
<source>Unposting images...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Podcast Feeds</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListGpis</name>

View File

@ -4077,19 +4077,15 @@ Permissions</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Key</source>
<source>&amp;Repost</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Title</source>
<source>&amp;Unpost</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>AutoPost</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Creation Date</source>
<source>Podcast Feeds</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -4101,11 +4097,7 @@ Permissions</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Superfeed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Failed to delete remote feed XML.</source>
<source>Deleting remote audio...</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -4113,15 +4105,7 @@ Permissions</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Deleting remote audio...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Public URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Repost</source>
<source>Failed to delete remote feed XML.</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -4137,11 +4121,11 @@ Permissions</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue?</source>
<source>take signficant time to complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>take signficant time to complete.</source>
<source>Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -4152,16 +4136,12 @@ Permissions</source>
<source>Posting item data...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Unpost</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Posting RSS XML data...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unposting RSS XML data...</source>
<source>This operation will unpost (remove) all XML, image and</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -4169,7 +4149,7 @@ Permissions</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This operation will unpost (remove) all XML, image and</source>
<source>Unposting RSS XML data...</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -4180,10 +4160,6 @@ Permissions</source>
<source>Unposting images...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Podcast Feeds</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListGpis</name>

View File

@ -4858,20 +4858,20 @@ Klikk på &quot;Lisens&quot;-knappen for fleire opplysningar.</translation>
<source>&amp;Close</source>
<translation type="unfinished">&amp;Lukk</translation>
</message>
<message>
<source>Key</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Title</source>
<translation type="unfinished">Tittel</translation>
<translation type="obsolete">Tittel</translation>
</message>
<message>
<source>AutoPost</source>
<source>&amp;Repost</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Creation Date</source>
<source>&amp;Unpost</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Podcast Feeds</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -4883,11 +4883,7 @@ Klikk på &quot;Lisens&quot;-knappen for fleire opplysningar.</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Superfeed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Failed to delete remote feed XML.</source>
<source>Deleting remote audio...</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -4895,15 +4891,7 @@ Klikk på &quot;Lisens&quot;-knappen for fleire opplysningar.</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Deleting remote audio...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Public URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Repost</source>
<source>Failed to delete remote feed XML.</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -4919,11 +4907,11 @@ Klikk på &quot;Lisens&quot;-knappen for fleire opplysningar.</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue?</source>
<source>take signficant time to complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>take signficant time to complete.</source>
<source>Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -4934,16 +4922,12 @@ Klikk på &quot;Lisens&quot;-knappen for fleire opplysningar.</translation>
<source>Posting item data...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Unpost</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Posting RSS XML data...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unposting RSS XML data...</source>
<source>This operation will unpost (remove) all XML, image and</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -4951,7 +4935,7 @@ Klikk på &quot;Lisens&quot;-knappen for fleire opplysningar.</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>This operation will unpost (remove) all XML, image and</source>
<source>Unposting RSS XML data...</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -4962,10 +4946,6 @@ Klikk på &quot;Lisens&quot;-knappen for fleire opplysningar.</translation>
<source>Unposting images...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Podcast Feeds</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListGpis</name>

View File

@ -4858,20 +4858,20 @@ Klikk på &quot;Lisens&quot;-knappen for fleire opplysningar.</translation>
<source>&amp;Close</source>
<translation type="unfinished">&amp;Lukk</translation>
</message>
<message>
<source>Key</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Title</source>
<translation type="unfinished">Tittel</translation>
<translation type="obsolete">Tittel</translation>
</message>
<message>
<source>AutoPost</source>
<source>&amp;Repost</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Creation Date</source>
<source>&amp;Unpost</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Podcast Feeds</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -4883,11 +4883,7 @@ Klikk på &quot;Lisens&quot;-knappen for fleire opplysningar.</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Superfeed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Failed to delete remote feed XML.</source>
<source>Deleting remote audio...</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -4895,15 +4891,7 @@ Klikk på &quot;Lisens&quot;-knappen for fleire opplysningar.</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Deleting remote audio...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Public URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Repost</source>
<source>Failed to delete remote feed XML.</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -4919,11 +4907,11 @@ Klikk på &quot;Lisens&quot;-knappen for fleire opplysningar.</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue?</source>
<source>take signficant time to complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>take signficant time to complete.</source>
<source>Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -4934,16 +4922,12 @@ Klikk på &quot;Lisens&quot;-knappen for fleire opplysningar.</translation>
<source>Posting item data...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Unpost</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Posting RSS XML data...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unposting RSS XML data...</source>
<source>This operation will unpost (remove) all XML, image and</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -4951,7 +4935,7 @@ Klikk på &quot;Lisens&quot;-knappen for fleire opplysningar.</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>This operation will unpost (remove) all XML, image and</source>
<source>Unposting RSS XML data...</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -4962,10 +4946,6 @@ Klikk på &quot;Lisens&quot;-knappen for fleire opplysningar.</translation>
<source>Unposting images...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Podcast Feeds</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListGpis</name>

View File

@ -4981,20 +4981,20 @@ Você ainda quer Deletar?</translation>
<source>&amp;Close</source>
<translation type="unfinished">&amp;Fechar</translation>
</message>
<message>
<source>Key</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Title</source>
<translation type="unfinished">Título</translation>
<translation type="obsolete">Título</translation>
</message>
<message>
<source>AutoPost</source>
<source>&amp;Repost</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Creation Date</source>
<source>&amp;Unpost</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Podcast Feeds</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -5006,11 +5006,7 @@ Você ainda quer Deletar?</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Superfeed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Failed to delete remote feed XML.</source>
<source>Deleting remote audio...</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -5018,15 +5014,7 @@ Você ainda quer Deletar?</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Deleting remote audio...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Public URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Repost</source>
<source>Failed to delete remote feed XML.</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -5042,11 +5030,11 @@ Você ainda quer Deletar?</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue?</source>
<source>take signficant time to complete.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>take signficant time to complete.</source>
<source>Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -5057,16 +5045,12 @@ Você ainda quer Deletar?</translation>
<source>Posting item data...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Unpost</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Posting RSS XML data...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unposting RSS XML data...</source>
<source>This operation will unpost (remove) all XML, image and</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -5074,7 +5058,7 @@ Você ainda quer Deletar?</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>This operation will unpost (remove) all XML, image and</source>
<source>Unposting RSS XML data...</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -5085,10 +5069,6 @@ Você ainda quer Deletar?</translation>
<source>Unposting images...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Podcast Feeds</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ListGpis</name>

View File

@ -88,12 +88,6 @@ MainWidget::MainWidget(RDConfig *c,QWidget *parent)
rda->ripc()->
connectHost("localhost",RIPCD_TCP_PORT,rda->config()->password());
//
// Notifications
//
connect(rda->ripc(),SIGNAL(notificationReceived(RDNotification *)),
this,SLOT(notificationReceivedData(RDNotification *)));
//
// Feed List
//
@ -101,7 +95,7 @@ MainWidget::MainWidget(RDConfig *c,QWidget *parent)
cast_feed_view->setSelectionBehavior(QAbstractItemView::SelectRows);
cast_feed_view->setSortingEnabled(false);
cast_feed_view->setWordWrap(false);
cast_feed_model=new RDFeedListModel(this);
cast_feed_model=new RDFeedListModel(false,this);
cast_feed_model->setFont(font());
cast_feed_model->setPalette(palette());
cast_feed_view->setModel(cast_feed_model);