1/*
2 This file is part of the KDE libraries
3 SPDX-FileCopyrightText: 2000, 2006 David Faure <faure@kde.org>
4
5 SPDX-License-Identifier: LGPL-2.0-or-later
6*/
7
8#ifndef DIRECTORYSIZEJOB_H
9#define DIRECTORYSIZEJOB_H
10
11#include "job_base.h"
12#include "kiocore_export.h"
13#include <kfileitem.h>
14
15namespace KIO
16{
17class DirectorySizeJobPrivate;
18/*!
19 * \class KIO::DirectorySizeJob
20 * \inheaderfile KIO/DirectorySizeJob
21 * \inmodule KIOCore
22 *
23 * \brief Computes a directory size.
24 *
25 * Similar to "du", but doesn't give the same results
26 * since we simply sum up the dir and file sizes, whereas du speaks disk blocks.
27 *
28 * \sa KIO::directorySize.
29 */
30class KIOCORE_EXPORT DirectorySizeJob : public KIO::Job
31{
32 Q_OBJECT
33
34public:
35 ~DirectorySizeJob() override;
36
37public:
38 /*!
39 * Returns the size we found
40 */
41 KIO::filesize_t totalSize() const;
42
43 /*!
44 * Returns the total number of files (counting symlinks to files, sockets
45 * and character devices as files) in this directory and all sub-directories
46 */
47 KIO::filesize_t totalFiles() const;
48
49 /*!
50 * Returns the total number of sub-directories found (not including the
51 * directory the search started from and treating symlinks to directories
52 * as directories)
53 */
54 KIO::filesize_t totalSubdirs() const;
55
56protected Q_SLOTS:
57 void slotResult(KJob *job) override;
58
59protected:
60 KIOCORE_NO_EXPORT explicit DirectorySizeJob(DirectorySizeJobPrivate &dd);
61
62private:
63 Q_DECLARE_PRIVATE(DirectorySizeJob)
64};
65
66/*!
67 * \relates KIO::DirectorySizeJob
68 *
69 * Computes a directory size (by doing a recursive listing).
70 * Connect to the result signal (this is the preferred solution to avoid blocking the GUI),
71 * or use exec() for a synchronous (blocking) calculation.
72 *
73 * This one lists a single directory.
74 */
75KIOCORE_EXPORT DirectorySizeJob *directorySize(const QUrl &directory);
76
77/*!
78 * \relates KIO::DirectorySizeJob
79 *
80 * Computes a directory size (by doing a recursive listing).
81 * Connect to the result signal (this is the preferred solution to avoid blocking the GUI),
82 * or use exec() for a synchronous (blocking) calculation.
83 *
84 * This one lists the items from \a lstItems.
85 * The reason we asks for items instead of just urls, is so that
86 * we directly know if the item is a file or a directory,
87 * and in case of a file, we already have its size.
88 */
89KIOCORE_EXPORT DirectorySizeJob *directorySize(const KFileItemList &lstItems);
90
91}
92
93#endif
94

source code of kio/src/core/directorysizejob.h