void IPTVChannelFetcher::run(void) { _thread_running = true; // Step 1/4 : Get info from DB QString url = CardUtil::GetVideoDevice(_cardid); if (_stop_now || url.isEmpty()) { LOG(VB_CHANNEL, LOG_INFO, "Playlist URL was empty"); _thread_running = false; _stop_now = true; return; } LOG(VB_CHANNEL, LOG_INFO, QString("Playlist URL: %1").arg(url)); // Step 2/4 : Download if (_scan_monitor) { _scan_monitor->ScanPercentComplete(5); _scan_monitor->ScanAppendTextToLog(tr("Downloading Playlist")); } QString playlist = DownloadPlaylist(url, true); if (_stop_now || playlist.isEmpty()) { if (playlist.isNull() && _scan_monitor) { _scan_monitor->ScanAppendTextToLog( QCoreApplication::translate("(Common)", "Error")); _scan_monitor->ScanPercentComplete(100); _scan_monitor->ScanErrored(tr("Downloading Playlist Failed")); } _thread_running = false; _stop_now = true; return; } // Step 3/4 : Process if (_scan_monitor) { _scan_monitor->ScanPercentComplete(35); _scan_monitor->ScanAppendTextToLog(tr("Processing Playlist")); } const fbox_chan_map_t channels = ParsePlaylist(playlist, this); // Step 4/4 : Finish up if (_scan_monitor) _scan_monitor->ScanAppendTextToLog(tr("Adding Channels")); SetTotalNumChannels(channels.size()); LOG(VB_CHANNEL, LOG_INFO, QString("Found %1 channels") .arg(channels.size())); fbox_chan_map_t::const_iterator it = channels.begin(); for (uint i = 1; it != channels.end(); ++it, ++i) { QString channum = it.key(); QString name = (*it).m_name; QString xmltvid = (*it).m_xmltvid.isEmpty() ? "" : (*it).m_xmltvid; //: %1 is the channel number, %2 is the channel name QString msg = tr("Channel #%1 : %2").arg(channum).arg(name); LOG(VB_CHANNEL, LOG_INFO, QString("Handling channel %1 %2") .arg(channum).arg(name)); int chanid = ChannelUtil::GetChanID(_sourceid, channum); if (chanid <= 0) { if (_scan_monitor) { _scan_monitor->ScanAppendTextToLog( tr("Adding %1").arg(msg)); } chanid = ChannelUtil::CreateChanID(_sourceid, channum); ChannelUtil::CreateChannel( 0, _sourceid, chanid, name, name, channum, 0, 0, 0, false, false, false, QString::null, QString::null, "Default", xmltvid); ChannelUtil::CreateIPTVTuningData(chanid, (*it).m_tuning); } else { if (_scan_monitor) { _scan_monitor->ScanAppendTextToLog( tr("Updating %1").arg(msg)); } ChannelUtil::UpdateChannel( 0, _sourceid, chanid, name, name, channum, 0, 0, 0, false, false, false, QString::null, QString::null, "Default", xmltvid); ChannelUtil::UpdateIPTVTuningData(chanid, (*it).m_tuning); } SetNumChannelsInserted(i); } if (_scan_monitor) { _scan_monitor->ScanAppendTextToLog(tr("Done")); _scan_monitor->ScanAppendTextToLog(""); _scan_monitor->ScanPercentComplete(100); _scan_monitor->ScanComplete(); } _thread_running = false; _stop_now = true; }
void IPTVChannelFetcher::RunScan(void) { _thread_running = true; // Step 1/4 : Get info from DB QString url = CardUtil::GetVideoDevice(_cardid); if (_stop_now || url.isEmpty()) { _thread_running = false; return; } VERBOSE(VB_CHANNEL, QString("Playlist URL: %1").arg(url)); // Step 2/4 : Download if (_scan_monitor) { _scan_monitor->ScanPercentComplete(5); _scan_monitor->ScanAppendTextToLog(QObject::tr("Downloading Playlist")); } QString playlist = DownloadPlaylist(url, true); if (_stop_now || playlist.isEmpty()) { _thread_running = false; return; } // Step 3/4 : Process if (_scan_monitor) { _scan_monitor->ScanPercentComplete(35); _scan_monitor->ScanAppendTextToLog(QObject::tr("Processing Playlist")); } const fbox_chan_map_t channels = ParsePlaylist(playlist, this); // Step 4/4 : Finish up if (_scan_monitor) _scan_monitor->ScanAppendTextToLog(QObject::tr("Adding Channels")); SetTotalNumChannels(channels.size()); fbox_chan_map_t::const_iterator it = channels.begin(); for (uint i = 1; it != channels.end(); ++it, ++i) { QString channum = it.key(); QString name = (*it).m_name; QString xmltvid = (*it).m_xmltvid.isEmpty() ? "" : (*it).m_xmltvid; QString msg = QObject::tr("Channel #%1 : %2").arg(channum).arg(name); int chanid = ChannelUtil::GetChanID(_sourceid, channum); if (chanid <= 0) { if (_scan_monitor) { _scan_monitor->ScanAppendTextToLog( QObject::tr("Adding %1").arg(msg)); } chanid = ChannelUtil::CreateChanID(_sourceid, channum); ChannelUtil::CreateChannel( 0, _sourceid, chanid, name, name, channum, 0, 0, 0, false, false, false, QString::null, QString::null, "Default", xmltvid); } else { if (_scan_monitor) { _scan_monitor->ScanAppendTextToLog( QObject::tr("Updating %1").arg(msg)); } ChannelUtil::UpdateChannel( 0, _sourceid, chanid, name, name, channum, 0, 0, 0, false, false, false, QString::null, QString::null, "Default", xmltvid); } SetNumChannelsInserted(i); } if (_scan_monitor) { _scan_monitor->ScanAppendTextToLog(QObject::tr("Done")); _scan_monitor->ScanAppendTextToLog(""); _scan_monitor->ScanPercentComplete(100); _scan_monitor->ScanComplete(); } _thread_running = false; }