void MediaView::toggleSubscription() { Video *video = playlistModel->activeVideo(); if (!video) return; QString userId = video->getChannelId(); if (userId.isEmpty()) return; bool subscribed = YTChannel::isSubscribed(userId); if (subscribed) { YTChannel::unsubscribe(userId); MainWindow::instance()->showMessage( tr("Unsubscribed from %1").arg(video->getChannelTitle())); } else { YTChannel::subscribe(userId); MainWindow::instance()->showMessage(tr("Subscribed to %1").arg(video->getChannelTitle())); } updateSubscriptionAction(video, !subscribed); }
void MediaView::gotStreamUrl(const QString &streamUrl, const QString &audioUrl) { if (stopped) return; if (streamUrl.isEmpty()) { qWarning() << "Empty stream url"; skip(); return; } Video *video = static_cast<Video *>(sender()); if (!video) { qDebug() << "Cannot get sender in" << __PRETTY_FUNCTION__; return; } video->disconnect(this); currentVideoId = video->getId(); if (audioUrl.isEmpty()) { qDebug() << "Playing" << streamUrl; media->play(streamUrl); } else { qDebug() << "Playing" << streamUrl << audioUrl; media->playSeparateAudioAndVideo(streamUrl, audioUrl); } // ensure we always have videos ahead playlistModel->searchNeeded(); // ensure active item is visible int row = playlistModel->activeRow(); if (row != -1) { QModelIndex index = playlistModel->index(row, 0, QModelIndex()); playlistView->scrollTo(index, QAbstractItemView::EnsureVisible); } #ifdef APP_ACTIVATION if (!Activation::instance().isActivated() && !demoTimer->isActive()) { int ms = (60000 * 5) + (qrand() % (60000 * 5)); demoTimer->start(ms); } #endif #ifdef APP_EXTRA Extra::notify(video->getTitle(), video->getChannelTitle(), video->getFormattedDuration()); #endif ChannelAggregator::instance()->videoWatched(video); }