void Downloader::finishedLoadingImage(Image *image) { if (m_cancelled) return; log("Received image '"+image->url()+"'"); if (m_quit) { QStringList paths = image->path(m_filename, m_location); for (QString path : paths) { path = (m_location.endsWith('/') ? m_location.left(m_location.length() - 1) : m_location) + "/" + (path.startsWith('/') ? path.right(path.length() - 1) : path); QFile f(QDir::toNativeSeparators(path)); if (f.open(QFile::WriteOnly)) { f.write(image->data()); f.close(); log("Saved to '"+path+"'"); } } } else emit finishedImage(image); if (--m_waiting > 0) { loadNext(); return; } if (m_quit) returnString("Downloaded images successfully."); }
void Image::loadImage(bool inMemory, bool force) { if (m_loadingImage) return; if (m_loadedImage && !force) { emit finishedImage(QNetworkReply::NoError, ""); return; } if (m_fileSize > MAX_LOAD_FILESIZE && inMemory) { emit finishedImage(static_cast<QNetworkReply::NetworkError>(500), ""); return; } if (m_loadImage != nullptr) m_loadImage->deleteLater(); if (force) setUrl(fileUrl().toString()); m_loadImage = m_parentSite->get(m_parentSite->fixUrl(m_url), m_parent, "image", this); m_loadImage->setParent(this); m_loadingImage = true; m_loadedImage = false; m_data.clear(); if (inMemory) { connect(m_loadImage, &QNetworkReply::downloadProgress, this, &Image::downloadProgressImageInMemory); connect(m_loadImage, &QNetworkReply::finished, this, &Image::finishedImageInMemory); } else { connect(m_loadImage, &QNetworkReply::downloadProgress, this, &Image::downloadProgressImageBasic); connect(m_loadImage, &QNetworkReply::finished, this, &Image::finishedImageBasic); } }
void Image::finishedImageS(bool inMemory) { m_loadingImage = false; // Aborted if (m_loadImage->error() == QNetworkReply::OperationCanceledError) { m_loadImage->deleteLater(); m_loadImage = nullptr; if (m_fileSize > MAX_LOAD_FILESIZE) { emit finishedImage(static_cast<QNetworkReply::NetworkError>(500), ""); } else { emit finishedImage(QNetworkReply::OperationCanceledError, ""); } return; } QUrl redir = m_loadImage->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl(); if (!redir.isEmpty()) { m_loadImage->deleteLater(); m_loadImage = nullptr; m_url = redir.toString(); loadImage(); return; } if (m_loadImage->error() == QNetworkReply::ContentNotFoundError) { bool sampleFallback = m_settings->value("Save/samplefallback", true).toBool(); QString newext = m_extensionRotator != nullptr ? m_extensionRotator->next() : ""; bool shouldFallback = sampleFallback && !m_sampleUrl.isEmpty(); bool isLast = newext.isEmpty() || (shouldFallback && m_tryingSample); if (!isLast || (shouldFallback && !m_tryingSample)) { if (isLast) { setUrl(m_sampleUrl.toString()); m_tryingSample = true; log(QStringLiteral("Image not found. New try with its sample...")); } else { m_url = setExtension(m_url, newext); log(QStringLiteral("Image not found. New try with extension %1 (%2)...").arg(newext, m_url)); } loadImage(); return; } else { log(QStringLiteral("Image not found.")); } } else if (inMemory) { m_data.append(m_loadImage->readAll()); if (m_fileSize <= 0) { m_fileSize = m_data.size(); } } QNetworkReply::NetworkError error = m_loadImage->error(); QString errorString = m_loadImage->errorString(); m_loadedImage = (error == QNetworkReply::ContentNotFoundError || error == QNetworkReply::NoError); m_loadImageError = error; m_loadImage->deleteLater(); m_loadImage = nullptr; emit finishedImage(m_loadImageError, errorString); }