bool DecoderHandler::next(void) { if (done()) return false; if (m_meta.Format() == "cast") { m_playlist_pos = random() % m_playlist.size(); } else { m_playlist_pos++; } PlayListFileEntry *entry = m_playlist.get(m_playlist_pos); if (QFileInfo(entry->File()).isAbsolute()) m_url = QUrl::fromLocalFile(entry->File()); else m_url.setUrl(entry->File()); LOG(VB_PLAYBACK, LOG_INFO, QString("Now playing '%1'").arg(m_url.toString())); deleteIOFactory(); createIOFactory(m_url); if (! haveIOFactory()) return false; getIOFactory()->addListener(this); getIOFactory()->start(); m_state = ACTIVE; return true; }
int PlayListFile::parse(PlayListFile *pls, QTextStream *stream) { int parsed = 0; QString d = stream->read(); CfgReader cfg; cfg.parse(d.toAscii(), d.length()); int num_entries = cfg.getIntVal("playlist", "numberofentries", -1); // Some pls files have "numberofentries", some has "NumberOfEntries". if (num_entries == -1) num_entries = cfg.getIntVal("playlist", "NumberOfEntries", -1); for (int n = 1; n <= num_entries; n++) { PlayListFileEntry *e = new PlayListFileEntry(); QString t_key = QString("Title%1").arg(n); QString f_key = QString("File%1").arg(n); QString l_key = QString("Length%1").arg(n); e->setFile(cfg.getStrVal("playlist", f_key)); e->setTitle(cfg.getStrVal("playlist", t_key)); e->setLength(cfg.getIntVal("playlist", l_key)); pls->add(e); parsed++; } return parsed; }
bool DecoderHandler::createPlaylistForSingleFile(const QUrl &url) { PlayListFileEntry *entry = new PlayListFileEntry; if (url.scheme() == "file" || QFileInfo(url.toString()).isAbsolute()) entry->setFile(url.toLocalFile()); else entry->setFile(url.toString()); m_playlist.add(entry); return m_playlist.size() > 0; }
bool DecoderHandler::next(void) { if (done()) return false; if (m_meta.Format() == "cast") { m_playlist_pos = random() % m_playlist.size(); } else { m_playlist_pos++; } PlayListFileEntry *entry = m_playlist.get(m_playlist_pos); if (QFileInfo(entry->File()).isAbsolute()) m_url = QUrl::fromLocalFile(entry->File()); else m_url.setUrl(entry->File()); LOG(VB_PLAYBACK, LOG_INFO, QString("Now playing '%1'").arg(m_url.toString())); // we use the avfdecoder for everything except CD tracks if (m_url.toString().endsWith(".cda")) doConnectDecoder(m_url, ".cda"); else { // we don't know what format radio stations are so fake a format // and hope avfdecoder can decode it doConnectDecoder(m_url, ".mp3"); } m_state = ACTIVE; return true; }