1 | /* This file is part of the KDE libraries |
2 | SPDX-FileCopyrightText: 2000-2005 David Faure <faure@kde.org> |
3 | SPDX-FileCopyrightText: 2003 Leo Savernik <l.savernik@aon.at> |
4 | |
5 | Moved from ktar.h by Roberto Teixeira <maragato@kde.org> |
6 | |
7 | SPDX-License-Identifier: LGPL-2.0-or-later |
8 | */ |
9 | #ifndef KARCHIVEDIRECTORY_H |
10 | #define KARCHIVEDIRECTORY_H |
11 | |
12 | #include <sys/stat.h> |
13 | #include <sys/types.h> |
14 | |
15 | #include <QDate> |
16 | #include <QString> |
17 | #include <QStringList> |
18 | |
19 | #include <karchiveentry.h> |
20 | |
21 | class KArchiveDirectoryPrivate; |
22 | class KArchiveFile; |
23 | /** |
24 | * @class KArchiveDirectory karchivedirectory.h KArchiveDirectory |
25 | * |
26 | * Represents a directory entry in a KArchive. |
27 | * @short A directory in an archive. |
28 | * |
29 | * @see KArchive |
30 | * @see KArchiveFile |
31 | */ |
32 | class KARCHIVE_EXPORT KArchiveDirectory : public KArchiveEntry |
33 | { |
34 | public: |
35 | /** |
36 | * Creates a new directory entry. |
37 | * @param archive the entries archive |
38 | * @param name the name of the entry |
39 | * @param access the permissions in unix format |
40 | * @param date the date (in seconds since 1970) |
41 | * @param user the user that owns the entry |
42 | * @param group the group that owns the entry |
43 | * @param symlink the symlink, or QString() |
44 | */ |
45 | KArchiveDirectory(KArchive *archive, |
46 | const QString &name, |
47 | int access, |
48 | const QDateTime &date, |
49 | const QString &user, |
50 | const QString &group, |
51 | const QString &symlink); |
52 | |
53 | ~KArchiveDirectory() override; |
54 | |
55 | /** |
56 | * Returns a list of sub-entries. |
57 | * Note that the list is not sorted, it's even in random order (due to using a hashtable). |
58 | * Use sort() on the result to sort the list by filename. |
59 | * |
60 | * @return the names of all entries in this directory (filenames, no path). |
61 | */ |
62 | QStringList entries() const; |
63 | |
64 | /** |
65 | * Returns the entry in the archive with the given name. |
66 | * The entry could be a file or a directory, use isFile() to find out which one it is. |
67 | * @param name may be "test1", "mydir/test3", "mydir/mysubdir/test3", etc. |
68 | * @return a pointer to the entry in the directory, or a null pointer if there is no such entry. |
69 | */ |
70 | const KArchiveEntry *entry(const QString &name) const; |
71 | |
72 | /** |
73 | * Returns the file entry in the archive with the given name. |
74 | * If the entry exists and is a file, a KArchiveFile is returned. |
75 | * Otherwise, a null pointer is returned. |
76 | * This is a convenience method for entry(), when we know the entry is expected to be a file. |
77 | * |
78 | * @param name may be "test1", "mydir/test3", "mydir/mysubdir/test3", etc. |
79 | * @return a pointer to the file entry in the directory, or a null pointer if there is no such file entry. |
80 | * @since 5.3 |
81 | */ |
82 | const KArchiveFile *file(const QString &name) const; |
83 | |
84 | /** |
85 | * @internal |
86 | * Adds a new entry to the directory. |
87 | * Note: this can delete the entry if another one with the same name is already present |
88 | */ |
89 | void addEntry(KArchiveEntry *); // KF6 TODO: return bool |
90 | |
91 | /** |
92 | * @internal |
93 | * Adds a new entry to the directory. |
94 | * @return whether the entry was added or not. Non added entries are deleted |
95 | */ |
96 | bool addEntryV2(KArchiveEntry *); // KF6 TODO: merge with the one above |
97 | |
98 | /** |
99 | * @internal |
100 | * Removes an entry from the directory. |
101 | */ |
102 | void removeEntry(KArchiveEntry *); // KF6 TODO: return bool since it can fail |
103 | |
104 | /** |
105 | * Checks whether this entry is a directory. |
106 | * @return true, since this entry is a directory |
107 | */ |
108 | bool isDirectory() const override; |
109 | |
110 | /** |
111 | * Extracts all entries in this archive directory to the directory |
112 | * @p dest. |
113 | * @param dest the directory to extract to |
114 | * @param recursive if set to true, subdirectories are extracted as well |
115 | * @return true on success, false if the directory (dest + '/' + name()) couldn't be created |
116 | */ |
117 | bool copyTo(const QString &dest, bool recursive = true) const; |
118 | |
119 | protected: |
120 | void virtual_hook(int id, void *data) override; |
121 | |
122 | private: |
123 | friend class KArchiveDirectoryPrivate; |
124 | KArchiveDirectoryPrivate *const d; |
125 | }; |
126 | |
127 | #endif |
128 | |