bool HTTPLiveStream::WritePlaylist(bool audioOnly, bool writeEndTag) { if (m_streamid == -1) return false; QString outFile = GetPlaylistName(audioOnly); QString tmpFile = outFile + ".tmp"; QFile file(tmpFile); if (!file.open(QIODevice::WriteOnly)) { LOG(VB_RECORD, LOG_ERR, QString("Error opening %1").arg(tmpFile)); return false; } file.write(QString( "#EXTM3U\n" "#EXT-X-ALLOW-CACHE:YES\n" "#EXT-X-TARGETDURATION:%1\n" "#EXT-X-MEDIA-SEQUENCE:%2\n" ).arg(m_segmentSize).arg(m_startSegment).toLatin1()); if (writeEndTag) file.write("#EXT-X-ENDLIST\n"); // Don't write out the current segment until the end unsigned int tmpSegCount = m_segmentCount - 1; unsigned int i = 0; unsigned int segmentid = m_startSegment; if (writeEndTag) ++tmpSegCount; while (i < tmpSegCount) { file.write(QString( "#EXTINF:%1,\n" "%2\n" ).arg(m_segmentSize) .arg(GetFilename(segmentid + i, true, audioOnly, true)).toLatin1()); ++i; } file.close(); if(rename(tmpFile.toLatin1().constData(), outFile.toLatin1().constData()) == -1) { LOG(VB_RECORD, LOG_ERR, LOC + QString("Error renaming %1 to %2").arg(tmpFile).arg(outFile) + ENO); return false; } return true; }
void CSourcesListBox::UpdateDynPlaylist( int nIndex ) { wxString sName = GetPlaylistName( nIndex ); wxString sQuery = LoadDynPlaylist( sName ); sQuery = PromptDynamicPlaylist( sQuery ); if ( sQuery != wxT( "" ) ) { m_SourcesList.Item( nIndex ) = wxT( "[d] " ) + sName; PlaylistToFile( sName, sQuery, MUSIK_SOURCES_PLAYLIST_DYNAMIC ); RealizeDynPlaylist(sQuery,g_thePlaylist); g_PlaylistBox->SetPlaylist(&g_thePlaylist); } }
void CSourcesListBox::UpdateNetStream( int nIndex ) { wxString sName = GetPlaylistName( nIndex ); wxString sUrl; LoadNetStream( sName,sUrl); wxString sAddress = PromptNetStreamAddress(sUrl); if ( sAddress != wxT( "" ) ) { m_SourcesList.Item( nIndex ) = wxT( "[u] " ) + sName; PlaylistToFile( sName, sAddress, MUSIK_SOURCES_NETSTREAM ); MusikSongIdArray urlids; LoadNetStream( sName,sUrl,&urlids); g_thePlaylist = urlids; g_PlaylistBox->SetPlaylist(&g_thePlaylist); } }