File indexing completed on 2024-04-21 08:41:48

0001 /*
0002 SPDX-FileCopyrightText: 2016 Jean-Baptiste Mardelle <jb@kdenlive.org>
0003 This file is part of Kdenlive. See www.kdenlive.org.
0004 
0005 SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0006 */
0007 
0008 #pragma once
0009 
0010 #include "ui_managecache_ui.h"
0011 #include "definitions.h"
0012 #include <KIO/DirectorySizeJob>
0013 #include <QDir>
0014 #include <QTreeWidgetItem>
0015 #include <QDialog>
0016 
0017 class KdenliveDoc;
0018 class QPaintEvent;
0019 class QLabel;
0020 class QGridLayout;
0021 class QTreeWidget;
0022 class QPushButton;
0023 class QToolButton;
0024 
0025 /**
0026  * @class ChartWidget
0027  * @brief Chart drawing widget.
0028  *
0029  */
0030 class ChartWidget : public QWidget
0031 {
0032 public:
0033     explicit ChartWidget(QWidget *parent = nullptr);
0034     void setSegments(const QList<int> &segments);
0035     QColor colorAt(int pos) { return m_chartColors.at(pos); };
0036 
0037 protected:
0038     void paintEvent(QPaintEvent *event) override;
0039 
0040 private:
0041     QList<int> m_segments;
0042     QList<QColor> m_chartColors = {QColor(Qt::darkRed), QColor(Qt::darkBlue), QColor(Qt::darkGreen), QColor(Qt::darkMagenta), QColor(Qt::darkYellow)};
0043 };
0044 
0045 /** @class TreeWidgetItem
0046     @brief Manage custom sort order for size.
0047   */
0048 class TreeWidgetItem : public QTreeWidgetItem
0049 {
0050 public:
0051     TreeWidgetItem(QTreeWidget *parent)
0052         : QTreeWidgetItem(parent)
0053     {
0054     }
0055 
0056 private:
0057     bool operator<(const QTreeWidgetItem &other) const override
0058     {
0059         int column = treeWidget()->sortColumn();
0060         switch (column) {
0061             case 1:
0062                 return data(column, Qt::UserRole).toULongLong() < other.data(column, Qt::UserRole).toULongLong();
0063                 break;
0064             case 2:
0065                 return data(column, Qt::UserRole).toDateTime() < other.data(column, Qt::UserRole).toDateTime();
0066                 break;
0067             default:
0068                 return text(column).toLower() < other.text(column).toLower();
0069                 break;
0070         }
0071     }
0072 };
0073 
0074 /** @class TemporaryData
0075     @brief Dialog allowing management of cache data.
0076  */
0077 class TemporaryData : public QDialog, public Ui::ManageCache_UI
0078 {
0079     Q_OBJECT
0080 
0081 public:
0082     explicit TemporaryData(KdenliveDoc *doc, bool currentProjectOnly, QWidget *parent = nullptr);
0083 
0084 private:
0085     KdenliveDoc *m_doc;
0086     ChartWidget *m_currentPie;
0087     ChartWidget *m_globalPie;
0088     bool m_currentProjectOnly;
0089     KIO::filesize_t m_totalCurrent;
0090     KIO::filesize_t m_totalGlobal;
0091     KIO::filesize_t m_totalBackup;
0092     KIO::filesize_t m_totalProxy;
0093     QList<KIO::filesize_t> m_currentSizes;
0094     QStringList m_globalDirectories;
0095     QString m_processingDirectory;
0096     QDir m_globalDir;
0097     QStringList m_proxies;
0098     void updateDataInfo();
0099     void updateGlobalInfo();
0100     void updateTotal();
0101     void processglobalDirectories();
0102     void processBackupDirectories();
0103     void processProxyDirectory();
0104     void deleteCache(QStringList &folders);
0105     /** @brief
0106      * Check if size of cache + backup data exceeds a limit and warn user
0107      **/
0108     void refreshWarningMessage();
0109 
0110 private Q_SLOTS:
0111     void gotPreviewSize(KJob *job);
0112     void gotProxySize(KIO::filesize_t total);
0113     void gotAudioSize(KJob *job);
0114     void gotSequenceSize(KJob *job);
0115     void gotThumbSize(KJob *job);
0116     void gotFolderSize(KJob *job);
0117     void gotBackupSize(KJob *job);
0118     void gotProjectProxySize(KJob *job);
0119     void refreshGlobalPie();
0120     void deletePreview();
0121     void deleteProjectProxy();
0122     void deleteProxy();
0123     void deleteAudio();
0124     void deleteThumbs();
0125     void deleteCurrentCacheData(bool warn = true);
0126     void deleteBackup();
0127     void cleanBackup();
0128     void openCacheFolder();
0129     void deleteSelected();
0130     void cleanCache();
0131     void cleanProxy();
0132     /** @brief
0133      * Cleanup cached data and backup
0134      **/
0135     void slotCleanUp();
0136 
0137 Q_SIGNALS:
0138     void disableProxies();
0139     void disablePreview();
0140 };