void ImportIconsWizard::menuSelection(MythUIButtonListItem *item) { if (!item) return; SearchEntry entry = item->GetData().value<SearchEntry>(); LOG(VB_GENERAL, LOG_INFO, QString("Menu Selection: %1 %2 %3") .arg(entry.strID) .arg(entry.strName) .arg(entry.strLogo)); enableControls(STATE_SEARCHING); CSVEntry entry2 = (*m_missingIter); m_strMatches += QString("%1,%2,%3,%4,%5,%6,%7,%8,%9\n") .arg(escape_csv(entry.strID)) .arg(escape_csv(entry2.strName)) .arg(escape_csv(entry2.strXmlTvId)) .arg(escape_csv(entry2.strCallsign)) .arg(escape_csv(entry2.strTransportId)) .arg(escape_csv(entry2.strAtscMajorChan)) .arg(escape_csv(entry2.strAtscMinorChan)) .arg(escape_csv(entry2.strNetworkId)) .arg(escape_csv(entry2.strServiceId)); if (checkAndDownload(entry.strLogo, entry2.strChanId)) { m_statusText->SetText(tr("Icon for %1 was downloaded successfully.") .arg(entry2.strName)); } else { m_statusText->SetText(tr("Failed to download the icon for %1.") .arg(entry2.strName)); } if (m_missingMaxCount > 1) { m_missingCount++; m_missingIter++; if (!doLoad()) { if (!m_strMatches.isEmpty()) askSubmit(m_strMatches); else Close(); } } else { enableControls(STATE_DISABLED); SetFocusWidget(m_iconsList); if (!m_strMatches.isEmpty()) askSubmit(m_strMatches); else Close(); } }
void ImportIconsWizard::manualSearch() { QString str = m_manualEdit->GetText(); if (!search(escape_csv(str))) m_statusText->SetText(tr("No matches found for %1") .arg(str)); else m_statusText->Reset(); }
bool ImportIconsWizard::search(const QString& strParam) { QString strParam1 = QUrl::toPercentEncoding(strParam); bool retVal = false; enableControls(STATE_SEARCHING); QUrl url(m_url+"/search"); CSVEntry entry2 = (*m_missingIter); QString channelcsv = QString("%1,%2,%3,%4,%5,%6,%7,%8\n") .arg(escape_csv(entry2.strName)) .arg(escape_csv(entry2.strXmlTvId)) .arg(escape_csv(entry2.strCallsign)) .arg(escape_csv(entry2.strTransportId)) .arg(escape_csv(entry2.strAtscMajorChan)) .arg(escape_csv(entry2.strAtscMinorChan)) .arg(escape_csv(entry2.strNetworkId)) .arg(escape_csv(entry2.strServiceId)); QString message = QObject::tr("Searching for icons for channel %1") .arg(entry2.strName); OpenBusyPopup(message); QString str = wget(url,"s="+strParam1+"&csv="+channelcsv); m_listSearch.clear(); m_iconsList->Reset(); if (str.isEmpty() || str.startsWith("#") || str.startsWith("Error", Qt::CaseInsensitive)) { LOG(VB_GENERAL, LOG_ERR, QString("Error from search : %1").arg(str)); retVal = false; } else { LOG(VB_CHANNEL, LOG_INFO, QString("Icon Import: Working search : %1").arg(str)); QStringList strSplit = str.split("\n"); // HACK HACK HACK -- begin // This is needed since the user can't escape out of the progress dialog // and the result set may contain thousands of channels. if (strSplit.size() > 150) { LOG(VB_GENERAL, LOG_WARNING, QString("Warning: Result set contains %1 items, " "truncating to the first %2 results") .arg(strSplit.size()).arg(150)); while (strSplit.size() > 150) strSplit.removeLast(); } // HACK HACK HACK -- end QString prevIconName; int namei = 1; for (int x = 0; x < strSplit.size(); ++x) { QString row = strSplit[x]; if (row != "#" ) { QStringList ret = extract_csv(row); LOG(VB_CHANNEL, LOG_INFO, QString("Icon Import: search : %1 %2 %3") .arg(ret[0]).arg(ret[1]).arg(ret[2])); SearchEntry entry; entry.strID = ret[0]; entry.strName = ret[1]; entry.strLogo = ret[2]; m_listSearch.append(entry); MythUIButtonListItem *item; if (prevIconName == entry.strName) { QString newname = QString("%1 (%2)").arg(entry.strName) .arg(namei); item = new MythUIButtonListItem(m_iconsList, newname, qVariantFromValue(entry)); namei++; } else { item = new MythUIButtonListItem(m_iconsList, entry.strName, qVariantFromValue(entry)); namei=1; } QString iconname = entry.strName; item->SetImage(entry.strLogo, "icon", false); item->SetText(iconname, "iconname"); prevIconName = entry.strName; } } retVal = true; } enableControls(STATE_NORMAL, retVal); CloseBusyPopup(); return retVal; }
bool ImportIconsWizard::initialLoad(QString name) { QString dirpath = GetConfDir(); QDir configDir(dirpath); if (!configDir.exists() && !configDir.mkdir(dirpath)) { LOG(VB_GENERAL, LOG_ERR, QString("Could not create %1").arg(dirpath)); } m_strChannelDir = QString("%1/%2").arg(configDir.absolutePath()) .arg("/channels"); QDir strChannelDir(m_strChannelDir); if (!strChannelDir.exists() && !strChannelDir.mkdir(m_strChannelDir)) { LOG(VB_GENERAL, LOG_ERR, QString("Could not create %1").arg(m_strChannelDir)); } m_strChannelDir += "/"; bool closeDialog = false; QString querystring("SELECT chanid, name, xmltvid, callsign," "dtv_multiplex.transportid, atsc_major_chan, " "atsc_minor_chan, dtv_multiplex.networkid, " "channel.serviceid, channel.mplexid," "dtv_multiplex.mplexid, channel.icon, channel.visible " "FROM channel LEFT JOIN dtv_multiplex " "ON channel.mplexid = dtv_multiplex.mplexid " "WHERE "); if (!name.isEmpty()) querystring.append("name=\"" + name + "\""); else querystring.append("channel.visible"); querystring.append(" ORDER BY name"); MSqlQuery query(MSqlQuery::InitCon()); query.prepare(querystring); m_listEntries.clear(); m_nCount=0; m_nMaxCount=0; m_missingMaxCount=0; if (query.exec() && query.size() > 0) { m_progressDialog = new MythUIProgressDialog(tr("Initializing, please wait..."), m_popupStack, "IconImportInitProgress"); if (m_progressDialog->Create()) { m_popupStack->AddScreen(m_progressDialog); m_progressDialog->SetTotal(query.size()); QCoreApplication::processEvents(); } else { delete m_progressDialog; m_progressDialog = NULL; } while(query.next()) { CSVEntry entry; QString relativeIconPath = query.value(11).toString(); QString absoluteIconPath = QString("%1%2").arg(m_strChannelDir) .arg(relativeIconPath); if (m_fRefresh && !relativeIconPath.isEmpty() && QFile(absoluteIconPath).exists() && !QImage(absoluteIconPath).isNull()) { LOG(VB_GENERAL, LOG_NOTICE, QString("Icon already exists, skipping (%1)").arg(absoluteIconPath)); } else { entry.strChanId=query.value(0).toString(); entry.strName=query.value(1).toString(); entry.strXmlTvId=query.value(2).toString(); entry.strCallsign=query.value(3).toString(); entry.strTransportId=query.value(4).toString(); entry.strAtscMajorChan=query.value(5).toString(); entry.strAtscMinorChan=query.value(6).toString(); entry.strNetworkId=query.value(7).toString(); entry.strServiceId=query.value(8).toString(); entry.strIconCSV= QString("%1,%2,%3,%4,%5,%6,%7,%8,%9\n"). arg(escape_csv(entry.strChanId)). arg(escape_csv(entry.strName)). arg(escape_csv(entry.strXmlTvId)). arg(escape_csv(entry.strCallsign)). arg(escape_csv(entry.strTransportId)). arg(escape_csv(entry.strAtscMajorChan)). arg(escape_csv(entry.strAtscMinorChan)). arg(escape_csv(entry.strNetworkId)). arg(escape_csv(entry.strServiceId)); entry.strNameCSV=escape_csv(entry.strName); LOG(VB_CHANNEL, LOG_INFO, QString("chanid %1").arg(entry.strIconCSV)); m_listEntries.append(entry); } m_nMaxCount++; if (m_progressDialog) { m_progressDialog->SetProgress(m_nMaxCount); QCoreApplication::processEvents(); } } if (m_progressDialog) { m_progressDialog->Close(); m_progressDialog = NULL; } } m_iter = m_listEntries.begin(); m_progressDialog = new MythUIProgressDialog( tr("Downloading, please wait..."), m_popupStack, "IconImportInitProgress"); if (m_progressDialog->Create()) { m_popupStack->AddScreen(m_progressDialog); m_progressDialog->SetTotal(m_listEntries.size()); QCoreApplication::processEvents(); } else { delete m_progressDialog; m_progressDialog = NULL; } /*: %1 is the current channel position, * %2 is the total number of channels, */ QString downloadMessage = tr("Downloading %1 of %2"); while (!closeDialog && (m_iter != m_listEntries.end())) { QString message = downloadMessage.arg(m_nCount+1) .arg(m_listEntries.size()); LOG(VB_GENERAL, LOG_NOTICE, message); if (m_missingEntries.size() > 0) { message.append("\n"); message.append(tr("Could not find %n icon(s).", "", m_missingEntries.size())); } if (!findmissing((*m_iter).strIconCSV)) { m_missingEntries.append((*m_iter)); m_missingMaxCount++; } m_nCount++; m_iter++; if (m_progressDialog) { m_progressDialog->SetMessage(message); m_progressDialog->SetProgress(m_nCount); QCoreApplication::processEvents(); } } if (m_progressDialog) { m_progressDialog->Close(); m_progressDialog = NULL; } if (m_missingEntries.size() == 0 || closeDialog) return false; if (m_nMaxCount <= 0) return false; return true; }