Пример #1
0
	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, &param] (Media::IRadioStationProvider *prov, const QModelIndex& srcIdx)
				{
					if (auto station = prov->GetRadioStation (srcIdx, param))
						player->SetRadioStation (station);
				});
	}
Пример #2
0
	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);
	}