void run() { bool ok = false; RemoteFile *rf = new RemoteFile(m_dlInfo->m_url, false, false, 0); ok = rf->SaveAs(m_dlInfo->m_privData); delete rf; if (!ok) m_dlInfo->m_errorCode = QNetworkReply::UnknownNetworkError; m_parent->downloadFinished(m_dlInfo); }
bool AlbumArt::draw(QPainter *p, const QColor &back) { if (needsUpdate()) { QImage art; QString imageFilename = gPlayer->getCurrentMetadata()->getAlbumArtFile(m_currImageType); if (imageFilename.startsWith("myth://")) { RemoteFile *rf = new RemoteFile(imageFilename, false, false, 0); QByteArray data; bool ret = rf->SaveAs(data); delete rf; if (ret) art.loadFromData(data); } else if (!imageFilename.isEmpty()) art.load(imageFilename); if (art.isNull()) { m_cursize = m_size; m_image = QImage(); } else { m_image = art.scaled(m_size, Qt::KeepAspectRatio, Qt::SmoothTransformation); } } if (m_image.isNull()) { drawWarning(p, back, m_size, QObject::tr("?"), 100); return true; } // Paint the image p->fillRect(0, 0, m_size.width(), m_size.height(), back); p->drawImage((m_size.width() - m_image.width()) / 2, (m_size.height() - m_image.height()) / 2, m_image); // Store our new size m_cursize = m_size; return true; }
QPixmap *MythUIHelper::LoadScalePixmap(QString filename, bool fromcache) { LOG(VB_GUI | VB_FILE, LOG_INFO, LOC + QString("LoadScalePixmap(%1)").arg(filename)); if (filename.isEmpty()) return NULL; if (!FindThemeFile(filename) && (!filename.startsWith("myth:"))) { LOG(VB_GENERAL, LOG_ERR, LOC + QString("LoadScalePixmap(%1)") .arg(filename) + "Unable to find image file"); return NULL; } QPixmap *ret = NULL; QImage tmpimage; int width, height; float wmult, hmult; GetScreenSettings(width, wmult, height, hmult); if (filename.startsWith("myth://")) { RemoteFile *rf = new RemoteFile(filename, false, false, 0); QByteArray data; bool loaded = rf->SaveAs(data); delete rf; if (loaded) { tmpimage.loadFromData(data); } else { LOG(VB_GENERAL, LOG_ERR, LOC + QString("LoadScalePixmap(%1): failed to load remote image") .arg(filename)); } } else { tmpimage.load(filename); } if (width != d->m_baseWidth || height != d->m_baseHeight) { if (tmpimage.isNull()) { LOG(VB_GENERAL, LOG_ERR, LOC + QString("LoadScalePixmap(%1) failed to load image") .arg(filename)); return NULL; } QImage tmp2 = tmpimage.scaled((int)(tmpimage.width() * wmult), (int)(tmpimage.height() * hmult), Qt::IgnoreAspectRatio, Qt::SmoothTransformation); ret = new QPixmap(QPixmap::fromImage(tmp2)); } else { ret = new QPixmap(QPixmap::fromImage(tmpimage)); if (!ret->width() || !ret->height()) { LOG(VB_GENERAL, LOG_ERR, LOC + QString("LoadScalePixmap(%1) invalid image dimensions") .arg(filename)); delete ret; return NULL; } } return ret; }
MetadataLookupList MetadataDownload::readNFO(QString NFOpath, MetadataLookup* lookup) { MetadataLookupList list; LOG(VB_GENERAL, LOG_INFO, QString("Matching NFO file found. Parsing %1 for metadata...") .arg(NFOpath)); if (lookup->GetType() == kMetadataVideo) { QByteArray nforaw; QDomElement item; if (NFOpath.startsWith("myth://")) { RemoteFile *rf = new RemoteFile(NFOpath); if (rf && rf->Open()) { bool loaded = rf->SaveAs(nforaw); if (loaded) { QDomDocument doc; if (doc.setContent(nforaw, true)) { lookup->SetStep(kLookupData); item = doc.documentElement(); } else LOG(VB_GENERAL, LOG_ERR, QString("PIRATE ERROR: Invalid NFO file found.")); } rf->Close(); } delete rf; rf = NULL; } else { QFile file(NFOpath); if (file.open(QIODevice::ReadOnly)) { nforaw = file.readAll(); QDomDocument doc; if (doc.setContent(nforaw, true)) { lookup->SetStep(kLookupData); item = doc.documentElement(); } else LOG(VB_GENERAL, LOG_ERR, QString("PIRATE ERROR: Invalid NFO file found.")); file.close(); } } MetadataLookup *tmp = ParseMetadataMovieNFO(item, lookup); list.append(tmp); } return list; }
MetadataLookupList MetadataDownload::readMXML(QString MXMLpath, MetadataLookup* lookup, bool passseas) { MetadataLookupList list; LOG(VB_GENERAL, LOG_INFO, QString("Matching MXML file found. Parsing %1 for metadata...") .arg(MXMLpath)); if (lookup->GetType() == kMetadataVideo) { QByteArray mxmlraw; QDomElement item; if (MXMLpath.startsWith("myth://")) { RemoteFile *rf = new RemoteFile(MXMLpath); if (rf && rf->Open()) { bool loaded = rf->SaveAs(mxmlraw); if (loaded) { QDomDocument doc; if (doc.setContent(mxmlraw, true)) { lookup->SetStep(kLookupData); QDomElement root = doc.documentElement(); item = root.firstChildElement("item"); } else LOG(VB_GENERAL, LOG_ERR, QString("Corrupt or invalid MXML file.")); } rf->Close(); } delete rf; rf = NULL; } else { QFile file(MXMLpath); if (file.open(QIODevice::ReadOnly)) { mxmlraw = file.readAll(); QDomDocument doc; if (doc.setContent(mxmlraw, true)) { lookup->SetStep(kLookupData); QDomElement root = doc.documentElement(); item = root.firstChildElement("item"); } else LOG(VB_GENERAL, LOG_ERR, QString("Corrupt or invalid MXML file.")); file.close(); } } MetadataLookup *tmp = ParseMetadataItem(item, lookup, passseas); list.append(tmp); } return list; }
bool PreviewGenerator::RemotePreviewRun(void) { QStringList strlist = "QUERY_GENPIXMAP"; programInfo.ToStringList(strlist); strlist.push_back(timeInSeconds ? "s" : "f"); encodeLongLong(strlist, captureTime); if (outFileName.isEmpty()) { strlist.push_back("<EMPTY>"); } else { QFileInfo fi(outFileName); strlist.push_back(fi.fileName()); } strlist.push_back(QString::number(outSize.width())); strlist.push_back(QString::number(outSize.height())); bool ok = false; if (createSockets) { if (!RemotePreviewSetup()) { VERBOSE(VB_IMPORTANT, LOC_ERR + "Failed to open sockets."); return false; } if (serverSock) { serverSock->writeStringList(strlist); ok = serverSock->readStringList(strlist, false); } RemotePreviewTeardown(); } else { ok = gContext->SendReceiveStringList(strlist); } if (!ok || strlist.empty() || (strlist[0] != "OK")) { if (!ok) { VERBOSE(VB_IMPORTANT, LOC_ERR + "Remote Preview failed due to communications error."); } else if (strlist.size() > 1) { VERBOSE(VB_IMPORTANT, LOC_ERR + "Remote Preview failed, reason given: " <<strlist[1]); } else { VERBOSE(VB_IMPORTANT, LOC_ERR + "Remote Preview failed due to an uknown error."); } return false; } if (outFileName.isEmpty()) return true; // find file, copy/move to output file name & location... QString url = QString::null; QString fn = QFileInfo(outFileName).fileName(); QByteArray data; ok = false; QStringList fileNames; fileNames.push_back(CreateAccessibleFilename(programInfo.pathname, fn)); fileNames.push_back(CreateAccessibleFilename(programInfo.pathname, "")); QStringList::const_iterator it = fileNames.begin(); for ( ; it != fileNames.end() && (!ok || data.isEmpty()); ++it) { data.resize(0); url = *it; RemoteFile *rf = new RemoteFile(url, false, 0); ok = rf->SaveAs(data); delete rf; } if (ok && data.size()) { QFile file(outFileName); ok = file.open(IO_Raw|IO_WriteOnly); if (!ok) { VERBOSE(VB_IMPORTANT, QString("Failed to open: '%1'") .arg(outFileName)); } off_t offset = 0; size_t remaining = (ok) ? data.size() : 0; uint failure_cnt = 0; while ((remaining > 0) && (failure_cnt < 5)) { ssize_t written = file.writeBlock(data.data() + offset, remaining); if (written < 0) { failure_cnt++; usleep(50000); continue; } failure_cnt = 0; offset += written; remaining -= written; } if (ok && !remaining) { VERBOSE(VB_PLAYBACK, QString("Saved: '%1'") .arg(outFileName)); } } return ok && data.size(); }
bool PixmapChannel::CacheChannelIcon(void) { if (icon.isEmpty()) return false; m_localIcon = icon; // Is icon local? if (QFile(icon).exists()) return true; QString localDirStr = QString("%1/channels").arg(GetConfDir()); QDir localDir(localDirStr); if (!localDir.exists() && !localDir.mkdir(localDirStr)) { VERBOSE(VB_IMPORTANT, QString("Icons directory is missing and could " "not be created: %1").arg(localDirStr)); icon.clear(); return false; } // Has it been saved to the local cache? m_localIcon = QString("%1/%2").arg(localDirStr) .arg(QFileInfo(icon).fileName()); if (QFile(m_localIcon).exists()) return true; // Get address of master backed QString url = gCoreContext->GetMasterHostPrefix(); if (url.length() < 1) { icon.clear(); return false; } url.append(icon); QUrl qurl = url; if (qurl.host().isEmpty()) { icon.clear(); return false; } RemoteFile *rf = new RemoteFile(url, false, false, 0); QByteArray data; bool ret = rf->SaveAs(data); delete rf; if (ret && data.size()) { QImage image; image.loadFromData(data); //if (image.loadFromData(data) && image.width() > 0 if (image.save(m_localIcon)) { VERBOSE(VB_GENERAL, QString("Caching channel icon %1").arg(m_localIcon)); return true; } else VERBOSE(VB_GENERAL, QString("Failed to save to %1").arg(m_localIcon)); } // if we get here then the icon is set in the db but couldn't be found // anywhere so maybe we should remove it from the DB? icon.clear(); return false; }