Esempio n. 1
0
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.");
}
Esempio n. 2
0
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);
	}
}
Esempio n. 3
0
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);
}