mirror of https://github.com/KDE/kasts.git
Change paths where images and enclosures are saved
Images are now stored in the cache directory in a dedicated subdir called "images". Enclosures are stored in the data directory in a dedicated subdir "enclosures".
This commit is contained in:
parent
f061b9a00e
commit
75f8f93da7
|
@ -48,7 +48,7 @@ Enclosure::Enclosure(Entry *entry)
|
|||
|
||||
void Enclosure::download()
|
||||
{
|
||||
EnclosureDownloadJob *downloadJob = new EnclosureDownloadJob(m_url, m_entry->title());
|
||||
EnclosureDownloadJob *downloadJob = new EnclosureDownloadJob(m_url, path(), m_entry->title());
|
||||
downloadJob->start();
|
||||
|
||||
m_downloadProgress = 0;
|
||||
|
@ -101,5 +101,5 @@ void Enclosure::deleteFile()
|
|||
|
||||
QString Enclosure::path() const
|
||||
{
|
||||
return Fetcher::instance().filePath(m_url);
|
||||
return Fetcher::instance().enclosurePath(m_url);
|
||||
}
|
||||
|
|
|
@ -12,9 +12,10 @@
|
|||
#include "enclosuredownloadjob.h"
|
||||
#include "fetcher.h"
|
||||
|
||||
EnclosureDownloadJob::EnclosureDownloadJob(const QString& url, const QString& title, QObject *parent)
|
||||
EnclosureDownloadJob::EnclosureDownloadJob(const QString& url, const QString& filename, const QString& title, QObject *parent)
|
||||
: KJob(parent)
|
||||
, m_url(url)
|
||||
, m_filename(filename)
|
||||
, m_title(title)
|
||||
{
|
||||
setCapabilities(Killable);
|
||||
|
@ -27,7 +28,7 @@ void EnclosureDownloadJob::start()
|
|||
|
||||
void EnclosureDownloadJob::startDownload()
|
||||
{
|
||||
m_reply = Fetcher::instance().download(m_url);
|
||||
m_reply = Fetcher::instance().download(m_url, m_filename);
|
||||
|
||||
Q_EMIT description(this, i18n("Downloading %1", m_title));
|
||||
|
||||
|
|
|
@ -13,13 +13,14 @@ class EnclosureDownloadJob : public KJob
|
|||
{
|
||||
|
||||
public:
|
||||
explicit EnclosureDownloadJob(const QString &url, const QString &title, QObject *parent = nullptr);
|
||||
explicit EnclosureDownloadJob(const QString &url, const QString &filename, const QString &title, QObject *parent = nullptr);
|
||||
|
||||
void start() override;
|
||||
bool doKill() override;
|
||||
|
||||
private:
|
||||
QString m_url;
|
||||
QString m_filename;
|
||||
QString m_title;
|
||||
QNetworkReply *m_reply = nullptr;
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#include <QDebug>
|
||||
#include <QFile>
|
||||
#include <QFileInfo>
|
||||
#include <QDir>
|
||||
#include <QNetworkAccessManager>
|
||||
#include <QNetworkReply>
|
||||
#include <QStandardPaths>
|
||||
|
@ -213,27 +214,27 @@ void Fetcher::processEnclosure(Syndication::EnclosurePtr enclosure, Syndication:
|
|||
Database::instance().execute(query);
|
||||
}
|
||||
|
||||
QString Fetcher::image(const QString &url)
|
||||
QString Fetcher::image(const QString& url) const
|
||||
{
|
||||
QString path = filePath(url);
|
||||
QString path = imagePath(url);
|
||||
if (QFileInfo::exists(path)) {
|
||||
if (QFileInfo(path).size() != 0 )
|
||||
return path;
|
||||
}
|
||||
|
||||
download(url);
|
||||
download(url, path);
|
||||
|
||||
return QLatin1String("");
|
||||
}
|
||||
|
||||
QNetworkReply *Fetcher::download(QString url)
|
||||
QNetworkReply *Fetcher::download(const QString &url, const QString &filePath) const
|
||||
{
|
||||
QNetworkRequest request((QUrl(url)));
|
||||
QNetworkReply *reply = get(request);
|
||||
connect(reply, &QNetworkReply::finished, this, [=]() {
|
||||
if (reply->isOpen()) {
|
||||
QByteArray data = reply->readAll();
|
||||
QFile file(filePath(url));
|
||||
QFile file(filePath);
|
||||
file.open(QIODevice::WriteOnly);
|
||||
file.write(data);
|
||||
file.close();
|
||||
|
@ -248,16 +249,28 @@ QNetworkReply *Fetcher::download(QString url)
|
|||
|
||||
void Fetcher::removeImage(const QString &url)
|
||||
{
|
||||
qDebug() << filePath(url);
|
||||
QFile(filePath(url)).remove();
|
||||
qDebug() << imagePath(url);
|
||||
QFile(imagePath(url)).remove();
|
||||
}
|
||||
|
||||
QString Fetcher::filePath(const QString &url)
|
||||
QString Fetcher::imagePath(const QString &url) const
|
||||
{
|
||||
return QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + QStringLiteral("/") + QString::fromStdString(QCryptographicHash::hash(url.toUtf8(), QCryptographicHash::Md5).toHex().toStdString());
|
||||
QString path = QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QStringLiteral("/images/");
|
||||
// Create path in cache if it doesn't exist yet
|
||||
QFileInfo().absoluteDir().mkpath(path);
|
||||
return path + QString::fromStdString(QCryptographicHash::hash(url.toUtf8(), QCryptographicHash::Md5).toHex().toStdString());
|
||||
}
|
||||
|
||||
QNetworkReply *Fetcher::get(QNetworkRequest &request)
|
||||
|
||||
QString Fetcher::enclosurePath(const QString &url) const
|
||||
{
|
||||
QString path = QStandardPaths::writableLocation(QStandardPaths::DataLocation) + QStringLiteral("/enclosures/");
|
||||
// Create path in cache if it doesn't exist yet
|
||||
QFileInfo().absoluteDir().mkpath(path);
|
||||
return path + QString::fromStdString(QCryptographicHash::hash(url.toUtf8(), QCryptographicHash::Md5).toHex().toStdString());
|
||||
}
|
||||
|
||||
QNetworkReply *Fetcher::get(QNetworkRequest &request) const
|
||||
{
|
||||
request.setRawHeader("User-Agent", "Alligator/0.1; Syndication");
|
||||
return manager->get(request);
|
||||
|
|
|
@ -22,11 +22,12 @@ public:
|
|||
}
|
||||
Q_INVOKABLE void fetch(const QString &url);
|
||||
Q_INVOKABLE void fetchAll();
|
||||
Q_INVOKABLE QString image(const QString &url);
|
||||
Q_INVOKABLE QString image(const QString &url) const;
|
||||
void removeImage(const QString &url);
|
||||
Q_INVOKABLE QNetworkReply *download(QString url);
|
||||
QNetworkReply *get(QNetworkRequest &request);
|
||||
QString filePath(const QString &url);
|
||||
Q_INVOKABLE QNetworkReply *download(const QString &url, const QString &fileName) const;
|
||||
QNetworkReply *get(QNetworkRequest &request) const;
|
||||
QString imagePath(const QString &url) const;
|
||||
QString enclosurePath(const QString &url) const;
|
||||
|
||||
private:
|
||||
Fetcher();
|
||||
|
@ -45,5 +46,5 @@ Q_SIGNALS:
|
|||
void feedDetailsUpdated(const QString &url, const QString &name, const QString &image, const QString &link, const QString &description, const QDateTime &lastUpdated);
|
||||
void error(const QString &url, int errorId, const QString &errorString);
|
||||
void entryAdded(const QString &feedurl, const QString &id);
|
||||
void downloadFinished(QString url);
|
||||
void downloadFinished(QString url) const;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue