StreamsPage::StreamsPage(QWidget *p) : StackedPageWidget(p) { qRegisterMetaType<StreamItem>("StreamItem"); qRegisterMetaType<QList<StreamItem> >("QList<StreamItem>"); browse=new StreamsBrowsePage(this); addWidget(browse); connect(browse, SIGNAL(close()), this, SIGNAL(close())); connect(browse, SIGNAL(searchForStreams()), this, SLOT(searchForStreams())); search=new StreamSearchPage(this); addWidget(search); connect(search, SIGNAL(close()), this, SLOT(closeSearch())); disconnect(browse, SIGNAL(add(const QStringList &, int, quint8)), MPDConnection::self(), SLOT(add(const QStringList &, int, quint8))); disconnect(search, SIGNAL(add(const QStringList &, int, quint8)), MPDConnection::self(), SLOT(add(const QStringList &, int, quint8))); connect(browse, SIGNAL(add(const QStringList &, int, quint8)), PlayQueueModel::self(), SLOT(addItems(const QStringList &, int, quint8))); connect(search, SIGNAL(add(const QStringList &, int, quint8)), PlayQueueModel::self(), SLOT(addItems(const QStringList &, int, quint8))); connect(StreamsModel::self()->addToFavouritesAct(), SIGNAL(triggered()), this, SLOT(addToFavourites())); connect(search, SIGNAL(addToFavourites(QList<StreamItem>)), browse, SLOT(addToFavourites(QList<StreamItem>))); }
void StreamSearchPage::addToFavourites() { QModelIndexList selected = view->selectedIndexes(); QList<const StreamsModel::Item *> items; for (const QModelIndex &i: selected) { QModelIndex mapped=proxy.mapToSource(i); const StreamsModel::Item *item=static_cast<const StreamsModel::Item *>(mapped.internalPointer()); if (!item->isCategory() && item->parent && !item->parent->isFavourites()) { items.append(item); } } QList<StreamItem> itemsToAdd; for (const StreamsModel::Item *item: items) { itemsToAdd.append(StreamItem(item->url, item->modifiedName())); } emit addToFavourites(itemsToAdd); }