File indexing completed on 2024-05-12 16:21:31

0001 /**
0002  * SPDX-FileCopyrightText: 2021 Bart De Vries <bart@mogwai.be>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  */
0006 
0007 #pragma once
0008 
0009 #include <QFile>
0010 #include <QObject>
0011 #include <QString>
0012 #include <QUrl>
0013 
0014 #include <KFormat>
0015 
0016 #include "error.h"
0017 
0018 class StorageManager : public QObject
0019 {
0020     Q_OBJECT
0021 
0022     Q_PROPERTY(int storageMoveProgress MEMBER m_storageMoveProgress NOTIFY storageMoveProgressChanged)
0023     Q_PROPERTY(int storageMoveTotal MEMBER m_storageMoveTotal NOTIFY storageMoveTotalChanged)
0024     Q_PROPERTY(QString storagePath READ storagePath NOTIFY storagePathChanged)
0025     Q_PROPERTY(qint64 enclosureDirSize READ enclosureDirSize NOTIFY enclosureDirSizeChanged)
0026     Q_PROPERTY(qint64 imageDirSize READ imageDirSize NOTIFY imageDirSizeChanged)
0027     Q_PROPERTY(QString formattedEnclosureDirSize READ formattedEnclosureDirSize NOTIFY enclosureDirSizeChanged)
0028     Q_PROPERTY(QString formattedImageDirSize READ formattedImageDirSize NOTIFY imageDirSizeChanged)
0029 
0030 public:
0031     static StorageManager &instance()
0032     {
0033         static StorageManager _instance;
0034         return _instance;
0035     }
0036 
0037     static const int maxFilenameLength = 200;
0038 
0039     QString storagePath() const;
0040     Q_INVOKABLE void setStoragePath(QUrl url);
0041 
0042     QString imageDirPath() const;
0043     QString imagePath(const QString &url) const;
0044 
0045     QString enclosureDirPath() const;
0046     QString enclosureDirPath(const QString &feedname) const;
0047     QString enclosurePath(const QString &name, const QString &url, const QString &feedname) const;
0048 
0049     qint64 enclosureDirSize() const;
0050     qint64 imageDirSize() const;
0051     QString formattedEnclosureDirSize() const;
0052     QString formattedImageDirSize() const;
0053 
0054     void removeImage(const QString &url);
0055     Q_INVOKABLE void clearImageCache();
0056 
0057     QString passwordFilePath(const QString &username) const;
0058 
0059     QString sanitizedFilePath(const QString &path) const;
0060 
0061 Q_SIGNALS:
0062     void error(Error::Type type, const QString &url, const QString &id, const int errorId, const QString &errorString, const QString &title);
0063 
0064     void storagePathChanged(QString path);
0065     void storageMoveStarted();
0066     void storageMoveFinished();
0067     void storageMoveProgressChanged(int progress);
0068     void storageMoveTotalChanged(int nrOfFeeds);
0069     void cancelStorageMove();
0070 
0071     void enclosureDirSizeChanged();
0072     void imageDirSizeChanged();
0073 
0074 private:
0075     StorageManager();
0076 
0077     qint64 dirSize(const QString &path) const;
0078 
0079     int m_storageMoveProgress;
0080     int m_storageMoveTotal;
0081     KFormat m_kformat;
0082 };