void DecoderHandler::stop(void) { VERBOSE(VB_PLAYBACK, QString("DecoderHandler: Stopping decoder")); if (m_decoder && m_decoder->isRunning()) { m_decoder->lock(); m_decoder->stop(); m_decoder->unlock(); } if (m_decoder) { m_decoder->lock(); m_decoder->cond()->wakeAll(); m_decoder->unlock(); } if (m_decoder) { m_decoder->wait(); delete m_decoder->input(); delete m_decoder; m_decoder = NULL; } deleteIOFactory(); doOperationStop(); m_state = STOPPED; }
void DecoderHandler::createPlaylistFromRemoteUrl(const QUrl &url) { LOG(VB_NETWORK, LOG_INFO, QString("Retrieving playlist from '%1'").arg(url.toString())); doOperationStart(tr("Retrieving playlist")); QString extension = QFileInfo(url.path()).suffix().toLower(); QString saveFilename = GetConfDir() + "/MythMusic/playlist." + extension; GetMythDownloadManager()->queueDownload(url.toString(), saveFilename, this); //TODO should find a better way to do this QTime time; time.start(); while (m_state == LOADING) { if (time.elapsed() > 30000) { doOperationStop(); GetMythDownloadManager()->cancelDownload(url.toString()); LOG(VB_GENERAL, LOG_ERR, QString("DecoderHandler:: Timed out trying to download playlist from: %1") .arg(url.toString())); m_state = STOPPED; } qApp->processEvents(); usleep(500); } }
void DecoderIOFactoryShoutCast::stop(void) { if (m_timer) m_timer->disconnect(); doOperationStop(); }
void DecoderHandler::stop(void) { LOG(VB_PLAYBACK, LOG_INFO, QString("DecoderHandler: Stopping decoder")); if (m_decoder && m_decoder->isRunning()) { m_decoder->lock(); m_decoder->stop(); m_decoder->unlock(); } if (m_decoder) { m_decoder->lock(); m_decoder->cond()->wakeAll(); m_decoder->unlock(); } if (m_decoder) { m_decoder->wait(); //delete m_decoder->input(); // TODO: need to sort out who is responsible for the input delete m_decoder; m_decoder = NULL; } deleteIOFactory(); doOperationStop(); m_state = STOPPED; }
void DecoderHandler::doStart(bool result) { doOperationStop(); QUrl url; if (QFileInfo(m_meta->Filename()).isAbsolute()) url = QUrl::fromLocalFile(m_meta->Filename()); else url.setUrl(m_meta->Filename()); if (m_state == LOADING && result) { for (int ii = 0; ii < m_playlist.size(); ii++) LOG(VB_PLAYBACK, LOG_INFO, QString("Track %1 = %2") .arg(ii) .arg(m_playlist.get(ii)->File())); next(); } else { if (m_state == STOPPED) { doFailed(url, "Could not get playlist"); } } }
void DecoderHandler::stop(void) { LOG(VB_PLAYBACK, LOG_INFO, QString("DecoderHandler: Stopping decoder")); if (m_decoder && m_decoder->isRunning()) { m_decoder->lock(); m_decoder->stop(); m_decoder->unlock(); } if (m_decoder) { m_decoder->lock(); m_decoder->cond()->wakeAll(); m_decoder->unlock(); } if (m_decoder) { m_decoder->wait(); delete m_decoder; m_decoder = nullptr; } doOperationStop(); m_state = STOPPED; }
void DecoderIOFactoryShoutCast::stop(void) { if (m_timer) m_timer->disconnect(); doOperationStop(); Metadata mdata(getMetadata()); mdata.setTitle("Stopped"); mdata.setArtist(""); mdata.setLength(-1); DecoderHandlerEvent ev(DecoderHandlerEvent::Meta, mdata); dispatch(ev); }
void DecoderHandler::customEvent(QEvent *event) { if (DecoderHandlerEvent *dhe = dynamic_cast<DecoderHandlerEvent*>(event)) { // Proxy all DecoderHandlerEvents return dispatch(*dhe); } else if (event->type() == MythEvent::MythEventMessage) { MythEvent *me = (MythEvent *)event; QStringList tokens = me->Message().split(" ", QString::SkipEmptyParts); if (tokens.isEmpty()) return; if (tokens[0] == "DOWNLOAD_FILE") { QStringList args = me->ExtraDataList(); if (tokens[1] == "UPDATE") { } else if (tokens[1] == "FINISHED") { QString downloadUrl = args[0]; int fileSize = args[2].toInt(); int errorCode = args[4].toInt(); QString filename = args[1]; if ((errorCode != 0) || (fileSize == 0)) { LOG(VB_GENERAL, LOG_ERR, QString("DecoderHandler: failed to download playlist from '%1'") .arg(downloadUrl)); QUrl url(downloadUrl); m_state = STOPPED; doOperationStop(); doFailed(url, "Could not get playlist"); } else { QUrl fileUrl(filename); createPlaylistFromFile(fileUrl); } } } } }
bool DecoderHandler::createPlaylistFromRemoteUrl(const QUrl &url) { VERBOSE(VB_NETWORK, QString("Retrieving playlist from '%1'").arg(url.toString())); doOperationStart("Retrieving playlist"); QByteArray data; if (!GetMythDownloadManager()->download(url, &data)) return false; doOperationStop(); QTextStream stream(&data, QIODevice::ReadOnly); bool result = PlayListFile::parse(&m_playlist, &stream) > 0; return result; }