1 /*
2     This file is part of the KDE project
3     SPDX-FileCopyrightText: 2009 Tobias Koenig <tokoe@kde.org>
4     SPDX-FileCopyrightText: 2014 David Faure <faure@kde.org>
5 
6     SPDX-License-Identifier: LGPL-2.0-or-later
7 */
8 
9 #ifndef TRASHSIZECACHE_H
10 #define TRASHSIZECACHE_H
11 
12 #include <QString>
13 
14 #include <KConfig>
15 
16 class QFileInfo;
17 
18 /**
19  * @short A class that encapsulates the directory size cache.
20  *
21  * The directory size cache is used to speed up the determination of the trash size.
22  *
23  * Since version 1.0, http://standards.freedesktop.org/trash-spec/trashspec-latest.html specifies this cache
24  * as a standard way to cache this information.
25  *
26  */
27 class TrashSizeCache
28 {
29 public:
30     struct SizeAndModTime {
31         qint64 size;
32         qint64 mtime;
33     };
34 
35     /**
36      * Creates a new trash size cache object for the given trash @p path.
37      */
38     explicit TrashSizeCache(const QString &path);
39 
40     /**
41      * Adds a directory to the cache.
42      * @param directoryName fileId of the directory
43      * @param directorySize size in bytes
44      */
45     void add(const QString &directoryName, qint64 directorySize);
46 
47     /**
48      * Removes a directory from the cache.
49      */
50     void remove(const QString &directoryName);
51 
52     /**
53      * Renames a directory in the cache.
54      */
55     void rename(const QString &oldDirectoryName, const QString &newDirectoryName);
56 
57     /**
58      * Sets the trash size to 0 bytes.
59      */
60     void clear();
61 
62     /**
63      * Calculates and returns the current trash size.
64      */
65     qint64 calculateSize();
66 
67     /**
68      * Calculates and returns the current trash size and its last modification date
69      */
70     SizeAndModTime calculateSizeAndLatestModDate();
71 
72 private:
73     QString mTrashSizeCachePath;
74     QString mTrashPath;
75     QFileInfo getTrashFileInfo(const QString &fileName);
76 };
77 
78 #endif
79