void RadioManager::Handle (const QModelIndex& index, Player *player) { if (const auto pileObj = index.data (RadioWidgetRole::PileObject).value<QObject*> ()) return HandlePile (pileObj); QString param; switch (static_cast<Media::RadioType> (index.data (Media::RadioItemRole::ItemType).toInt ())) { case Media::RadioType::None: return; case Media::RadioType::Predefined: case Media::RadioType::CustomAddableStreams: case Media::RadioType::RadioAction: break; case Media::RadioType::SimilarArtists: param = QInputDialog::getText (0, tr ("Similar artists radio"), tr ("Enter artist name for which to tune the similar artists radio station:")); if (param.isEmpty ()) return; break; case Media::RadioType::GlobalTag: param = QInputDialog::getText (0, tr ("Global tag radio"), tr ("Enter global tag name:")); if (param.isEmpty ()) return; break; case Media::RadioType::TracksList: case Media::RadioType::SingleTrack: case Media::RadioType::TracksRoot: { QList<AudioSource> sources; for (const auto& info : GetSources (index)) { const auto& url = info.Other_ ["URL"].toUrl (); player->PrepareURLInfo (url, MediaInfo::FromAudioInfo (info)); sources << url; } player->Enqueue (sources, Player::EnqueueNone); return; } } WithSourceProv (index, [player, ¶m] (Media::IRadioStationProvider *prov, const QModelIndex& srcIdx) { if (auto station = prov->GetRadioStation (srcIdx, param)) player->SetRadioStation (station); }); }
void RadioManager::Handle (const QModelIndex& index, Player *player) { const auto item = StationsModel_->itemFromIndex (index); if (const auto pileObj = item->data (RadioWidgetRole::PileObject).value<QObject*> ()) return HandlePile (item, pileObj); const auto root = GetRootItem (item); if (!Root2Prov_.contains (root)) { qWarning () << Q_FUNC_INFO << "unknown provider for index" << index; return; } QString param; switch (item->data (Media::RadioItemRole::ItemType).toInt ()) { case Media::RadioType::None: return; case Media::RadioType::Predefined: break; case Media::RadioType::SimilarArtists: param = QInputDialog::getText (0, tr ("Similar artists radio"), tr ("Enter artist name for which to tune the similar artists radio station:")); if (param.isEmpty ()) return; break; case Media::RadioType::GlobalTag: param = QInputDialog::getText (0, tr ("Global tag radio"), tr ("Enter global tag name:")); if (param.isEmpty ()) return; break; case Media::RadioType::TracksList: case Media::RadioType::SingleTrack: { const auto& infosVar = item->data (Media::RadioItemRole::TracksInfos); QList<AudioSource> sources; for (const auto& info : infosVar.value<QList<Media::AudioInfo>> ()) { const auto& url = info.Other_ ["URL"].toUrl (); if (!url.isValid ()) { qWarning () << Q_FUNC_INFO << "ignoring invalid URL" << info.Other_; continue; } player->PrepareURLInfo (url, MediaInfo::FromAudioInfo (info)); sources << url; } player->Enqueue (sources, false); return; } } if (auto station = Root2Prov_ [root]->GetRadioStation (item, param)) player->SetRadioStation (station); }