Cache certain stream listings

This commit is contained in:
craig.p.drummond
2013-07-04 19:48:59 +00:00
committed by craig.p.drummond
parent d84576859d
commit baea85455a
6 changed files with 242 additions and 82 deletions

View File

@@ -56,6 +56,7 @@ StreamsPage::StreamsPage(QWidget *p)
exportAction = ActionCollection::get()->createAction("exportstreams", i18n("Export Favourite Streams"), "document-export");
addAction = ActionCollection::get()->createAction("addstream", i18n("Add New Stream To Favourites"), Icons::self()->addRadioStreamIcon);
addToFavouritesAction = ActionCollection::get()->createAction("addtofavourites", i18n("Add Stream To Favourites"), Icons::self()->addRadioStreamIcon);
reloadAction = ActionCollection::get()->createAction("reloadstreams", i18n("Reload"), Icon("view-refresh"));
editAction = ActionCollection::get()->createAction("editstream", i18n("Edit"), Icons::self()->editIcon);
Action *settingsAct = new Action(i18n("Digitally Imported Settings"), this);
replacePlayQueue->setDefaultAction(StdActions::self()->replacePlayQueueAction);
@@ -65,6 +66,7 @@ StreamsPage::StreamsPage(QWidget *p)
connect(view, SIGNAL(itemsSelected(bool)), SLOT(controlActions()));
connect(addAction, SIGNAL(triggered(bool)), this, SLOT(add()));
connect(addToFavouritesAction, SIGNAL(triggered(bool)), this, SLOT(addToFavourites()));
connect(reloadAction, SIGNAL(triggered(bool)), this, SLOT(reload()));
connect(editAction, SIGNAL(triggered(bool)), this, SLOT(edit()));
connect(importAction, SIGNAL(triggered(bool)), this, SLOT(importXml()));
connect(exportAction, SIGNAL(triggered(bool)), this, SLOT(exportXml()));
@@ -78,6 +80,7 @@ StreamsPage::StreamsPage(QWidget *p)
menu->addAction(addAction);
menu->addAction(StdActions::self()->removeAction);
menu->addAction(editAction);
menu->addAction(reloadAction);
menu->addSeparator();
menu->addAction(importAction);
menu->addAction(exportAction);
@@ -95,6 +98,7 @@ StreamsPage::StreamsPage(QWidget *p)
view->addAction(editAction);
view->addAction(StdActions::self()->removeAction);
view->addAction(addToFavouritesAction);
view->addAction(reloadAction);
proxy.setSourceModel(StreamsModel::self());
view->setModel(&proxy);
view->setDeleteAction(StdActions::self()->removeAction);
@@ -285,6 +289,27 @@ void StreamsPage::addToFavourites()
}
}
void StreamsPage::reload()
{
QModelIndexList selected = view->selectedIndexes();
if (1!=selected.count()) {
return;
}
QModelIndex mapped=proxy.mapToSource(selected.first());
const StreamsModel::Item *item=static_cast<const StreamsModel::Item *>(mapped.internalPointer());
if (!item->isCategory()) {
return;
}
const StreamsModel::CategoryItem *cat=static_cast<const StreamsModel::CategoryItem *>(item);
if (!StreamsModel::self()->isTopLevel(cat)) {
return;
}
if (cat->children.isEmpty() || MessageBox::Yes==MessageBox::questionYesNo(this, i18n("Reload <b>%1</b> streams?").arg(cat->name))) {
StreamsModel::self()->reload(mapped);
}
}
void StreamsPage::removeItems()
{
if (!StreamsModel::self()->isFavoritesWritable()) {
@@ -378,11 +403,13 @@ void StreamsPage::controlActions()
QModelIndexList selected=view->selectedIndexes();
editAction->setEnabled(false);
addToFavouritesAction->setEnabled(false);
if (1==selected.size() && StreamsModel::self()->isFavoritesWritable()) {
reloadAction->setEnabled(false);
if (1==selected.size()) {
const StreamsModel::Item *item=static_cast<const StreamsModel::Item *>(proxy.mapToSource(selected.first()).internalPointer());
if (!item->isCategory() && item->parent && item->parent->isFavourites) {
if (StreamsModel::self()->isFavoritesWritable() && !item->isCategory() && item->parent && item->parent->isFavourites) {
editAction->setEnabled(true);
}
reloadAction->setEnabled(item->isCategory() && StreamsModel::self()->isTopLevel(static_cast<const StreamsModel::CategoryItem *>(item)));
}
StdActions::self()->removeAction->setEnabled(false);
if (!selected.isEmpty() && StreamsModel::self()->isFavoritesWritable()) {