File indexing completed on 2023-10-03 03:19:55

0001 /*
0002     This file is part of the KDE libraries
0003     SPDX-FileCopyrightText: 2000-2005 David Faure <faure@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-only
0006 */
0007 #ifndef KIO_GLOBAL_H
0008 #define KIO_GLOBAL_H
0009 
0010 #include "kiocore_export.h"
0011 
0012 #include <QFile> // for QFile::Permissions
0013 #include <QString>
0014 
0015 #include <KJob>
0016 
0017 #include "jobtracker.h" // for source compat
0018 #include "metadata.h" // for source compat
0019 
0020 class QUrl;
0021 
0022 class QTime;
0023 
0024 #if defined(Q_OS_WIN) && defined(Q_CC_MSVC)
0025 // on windows ssize_t is not defined, only SSIZE_T exists
0026 #include <basetsd.h>
0027 typedef SSIZE_T ssize_t;
0028 #endif
0029 
0030 /**
0031  * @short A namespace for KIO globals
0032  *
0033  */
0034 namespace KIO
0035 {
0036 /// 64-bit file offset
0037 typedef qlonglong fileoffset_t;
0038 /// 64-bit file size
0039 typedef qulonglong filesize_t;
0040 
0041 /**
0042  * Converts @p size from bytes to the string representation.
0043  *
0044  * @param  size  size in bytes
0045  * @return converted size as a string - e.g. 123.4 KiB , 12.0 MiB
0046  */
0047 KIOCORE_EXPORT QString convertSize(KIO::filesize_t size);
0048 
0049 /**
0050  * Converts a size to a string representation
0051  * Not unlike QString::number(...)
0052  *
0053  * @param size size in bytes
0054  * @return  converted size as a string - e.g. 123456789
0055  */
0056 KIOCORE_EXPORT QString number(KIO::filesize_t size);
0057 
0058 /**
0059  * Converts size from kibi-bytes (2^10) to the string representation.
0060  *
0061  * @param  kibSize  size in kibi-bytes (2^10)
0062  * @return converted size as a string - e.g. 123.4 KiB , 12.0 MiB
0063  */
0064 KIOCORE_EXPORT QString convertSizeFromKiB(KIO::filesize_t kibSize);
0065 
0066 /**
0067  * Calculates remaining time in seconds from total size, processed size and speed.
0068  *
0069  * @param  totalSize      total size in bytes
0070  * @param  processedSize  processed size in bytes
0071  * @param  speed          speed in bytes per second
0072  * @return calculated remaining time in seconds
0073  */
0074 KIOCORE_EXPORT unsigned int calculateRemainingSeconds(KIO::filesize_t totalSize, KIO::filesize_t processedSize, KIO::filesize_t speed);
0075 
0076 /**
0077  * Convert @p seconds to a string representing number of days, hours, minutes and seconds
0078  *
0079  * @param  seconds number of seconds to convert
0080  * @return string representation in a locale depending format
0081  */
0082 KIOCORE_EXPORT QString convertSeconds(unsigned int seconds);
0083 
0084 #if KIOCORE_ENABLE_DEPRECATED_SINCE(3, 4)
0085 /**
0086  * Calculates remaining time from total size, processed size and speed.
0087  *
0088  * @param  totalSize      total size in bytes
0089  * @param  processedSize  processed size in bytes
0090  * @param  speed          speed in bytes per second
0091  * @return calculated remaining time
0092  * @deprecated Since 3.4, use calculateRemainingSeconds() instead, as QTime is limited to 23:59:59
0093  */
0094 KIOCORE_EXPORT
0095 KIOCORE_DEPRECATED_VERSION(3, 4, "Use KIO::calculateRemainingSeconds(KIO::filesize_t, KIO::filesize_t, KIO::filesize_t")
0096 QTime calculateRemaining(KIO::filesize_t totalSize, KIO::filesize_t processedSize, KIO::filesize_t speed);
0097 #endif
0098 
0099 /**
0100  * Helper for showing information about a set of files and directories
0101  * @param items the number of items (= @p files + @p dirs + number of symlinks :)
0102  * @param files the number of files
0103  * @param dirs the number of dirs
0104  * @param size the sum of the size of the @p files
0105  * @param showSize whether to show the size in the result
0106  * @return the summary string
0107  */
0108 KIOCORE_EXPORT QString itemsSummaryString(uint items, uint files, uint dirs, KIO::filesize_t size, bool showSize);
0109 
0110 /**
0111  * Encodes (from the text displayed to the real filename)
0112  * This translates '/' into a "unicode fraction slash", QChar(0x2044).
0113  * Used by KIO::link, for instance.
0114  * @param str the file name to encode
0115  * @return the encoded file name
0116  */
0117 KIOCORE_EXPORT QString encodeFileName(const QString &str);
0118 /**
0119  * Decodes (from the filename to the text displayed)
0120  * This doesn't do anything anymore, it used to do the opposite of encodeFileName
0121  * when encodeFileName was using %2F for '/'.
0122  * @param str the file name to decode
0123  * @return the decoded file name
0124  */
0125 KIOCORE_EXPORT QString decodeFileName(const QString &str);
0126 
0127 #if KIOCORE_ENABLE_DEPRECATED_SINCE(5, 61)
0128 /**
0129  * Given a directory path and a filename (which usually exists already),
0130  * this function returns a suggested name for a file that doesn't exist
0131  * in that directory. The existence is only checked for local urls though.
0132  * The suggested file name is of the form "foo 1", "foo 2" etc.
0133  * @since 5.0
0134  * @deprecated since 5.61, use KFileUtils::suggestName() from KCoreAddons
0135  */
0136 KIOCORE_EXPORT
0137 KIOCORE_DEPRECATED_VERSION(5, 61, "Use KFileUtils::suggestName(const QUrl &, const QString &) from KCoreAddons")
0138 QString suggestName(const QUrl &baseURL, const QString &oldName);
0139 #endif
0140 
0141 /**
0142  * Error codes that can be emitted by KIO.
0143  */
0144 enum Error {
0145     ERR_CANNOT_OPEN_FOR_READING = KJob::UserDefinedError + 1,
0146     ERR_CANNOT_OPEN_FOR_WRITING = KJob::UserDefinedError + 2,
0147     ERR_CANNOT_LAUNCH_PROCESS = KJob::UserDefinedError + 3,
0148     ERR_INTERNAL = KJob::UserDefinedError + 4,
0149     ERR_MALFORMED_URL = KJob::UserDefinedError + 5,
0150     ERR_UNSUPPORTED_PROTOCOL = KJob::UserDefinedError + 6,
0151     ERR_NO_SOURCE_PROTOCOL = KJob::UserDefinedError + 7,
0152     ERR_UNSUPPORTED_ACTION = KJob::UserDefinedError + 8,
0153     ERR_IS_DIRECTORY = KJob::UserDefinedError + 9, ///< ... where a file was expected
0154     ERR_IS_FILE = KJob::UserDefinedError + 10, ///< ... where a directory was expected (e.g.\ listing)
0155     ERR_DOES_NOT_EXIST = KJob::UserDefinedError + 11,
0156     ERR_FILE_ALREADY_EXIST = KJob::UserDefinedError + 12,
0157     ERR_DIR_ALREADY_EXIST = KJob::UserDefinedError + 13,
0158     ERR_UNKNOWN_HOST = KJob::UserDefinedError + 14,
0159     ERR_ACCESS_DENIED = KJob::UserDefinedError + 15,
0160     ERR_WRITE_ACCESS_DENIED = KJob::UserDefinedError + 16,
0161     ERR_CANNOT_ENTER_DIRECTORY = KJob::UserDefinedError + 17,
0162     ERR_PROTOCOL_IS_NOT_A_FILESYSTEM = KJob::UserDefinedError + 18,
0163     ERR_CYCLIC_LINK = KJob::UserDefinedError + 19,
0164     ERR_USER_CANCELED = KJob::KilledJobError,
0165     ERR_CYCLIC_COPY = KJob::UserDefinedError + 21,
0166 #if KIOCORE_ENABLE_DEPRECATED_SINCE(5, 0)
0167     ERR_COULD_NOT_CREATE_SOCKET ///< @deprecated Since 5.0, use ERR_CANNOT_CREATE_SOCKET
0168         KIOCORE_ENUMERATOR_DEPRECATED_VERSION_BELATED(5, 82, 5, 0, "Use ERR_CANNOT_CREATE_SOCKET.") = KJob::UserDefinedError + 22,
0169 #endif
0170     ERR_CANNOT_CREATE_SOCKET = KJob::UserDefinedError + 22,
0171 #if KIOCORE_ENABLE_DEPRECATED_SINCE(5, 0)
0172     ERR_COULD_NOT_CONNECT ///< @deprecated Since 5.0, use ERR_CANNOT_CONNECT
0173         KIOCORE_ENUMERATOR_DEPRECATED_VERSION_BELATED(5, 82, 5, 0, "Use ERR_CANNOT_CONNECT.") = KJob::UserDefinedError + 23,
0174 #endif
0175     ERR_CANNOT_CONNECT = KJob::UserDefinedError + 23,
0176     ERR_CONNECTION_BROKEN = KJob::UserDefinedError + 24,
0177     ERR_NOT_FILTER_PROTOCOL = KJob::UserDefinedError + 25,
0178 #if KIOCORE_ENABLE_DEPRECATED_SINCE(5, 0)
0179     ERR_COULD_NOT_MOUNT ///< @deprecated Since 5.0, use ERR_CANNOT_MOUNT
0180         KIOCORE_ENUMERATOR_DEPRECATED_VERSION_BELATED(5, 82, 5, 0, "Use ERR_CANNOT_MOUNT.") = KJob::UserDefinedError + 26,
0181 #endif
0182     ERR_CANNOT_MOUNT = KJob::UserDefinedError + 26,
0183 #if KIOCORE_ENABLE_DEPRECATED_SINCE(5, 0)
0184     ERR_COULD_NOT_UNMOUNT ///< @deprecated Since 5.0, use ERR_CANNOT_UNMOUNT
0185         KIOCORE_ENUMERATOR_DEPRECATED_VERSION_BELATED(5, 82, 5, 0, "Use ERR_CANNOT_UNMOUNT.") = KJob::UserDefinedError + 27,
0186 #endif
0187     ERR_CANNOT_UNMOUNT = KJob::UserDefinedError + 27,
0188 #if KIOCORE_ENABLE_DEPRECATED_SINCE(5, 0)
0189     ERR_COULD_NOT_READ ///< @deprecated Since 5.0, use ERR_CANNOT_READ
0190         KIOCORE_ENUMERATOR_DEPRECATED_VERSION_BELATED(5, 82, 5, 0, "Use ERR_CANNOT_READ.") = KJob::UserDefinedError + 28,
0191 #endif
0192     ERR_CANNOT_READ = KJob::UserDefinedError + 28,
0193 #if KIOCORE_ENABLE_DEPRECATED_SINCE(5, 0)
0194     ERR_COULD_NOT_WRITE ///< @deprecated Since 5.0, use ERR_CANNOT_WRITE
0195         KIOCORE_ENUMERATOR_DEPRECATED_VERSION_BELATED(5, 82, 5, 0, "Use ERR_CANNOT_WRITE.") = KJob::UserDefinedError + 29,
0196 #endif
0197     ERR_CANNOT_WRITE = KJob::UserDefinedError + 29,
0198 #if KIOCORE_ENABLE_DEPRECATED_SINCE(5, 0)
0199     ERR_COULD_NOT_BIND ///< @deprecated Since 5.0, use ERR_CANNOT_BIND
0200         KIOCORE_ENUMERATOR_DEPRECATED_VERSION_BELATED(5, 82, 5, 0, "Use ERR_CANNOT_BIND.") = KJob::UserDefinedError + 30,
0201 #endif
0202     ERR_CANNOT_BIND = KJob::UserDefinedError + 30,
0203 #if KIOCORE_ENABLE_DEPRECATED_SINCE(5, 0)
0204     ERR_COULD_NOT_LISTEN ///< @deprecated Since 5.0, use ERR_CANNOT_LISTEN
0205         KIOCORE_ENUMERATOR_DEPRECATED_VERSION_BELATED(5, 82, 5, 0, "Use ERR_CANNOT_LISTEN.") = KJob::UserDefinedError + 31,
0206 #endif
0207     ERR_CANNOT_LISTEN = KJob::UserDefinedError + 31,
0208 #if KIOCORE_ENABLE_DEPRECATED_SINCE(5, 0)
0209     ERR_COULD_NOT_ACCEPT ///< @deprecated Since 5.0, use ERR_CANNOT_ACCEPT
0210         KIOCORE_ENUMERATOR_DEPRECATED_VERSION_BELATED(5, 82, 5, 0, "Use ERR_CANNOT_ACCEPT.") = KJob::UserDefinedError + 32,
0211 #endif
0212     ERR_CANNOT_ACCEPT = KJob::UserDefinedError + 32,
0213 #if KIOCORE_ENABLE_DEPRECATED_SINCE(5, 0)
0214     ERR_COULD_NOT_LOGIN ///< @deprecated Since 5.0, use ERR_CANNOT_LOGIN
0215         KIOCORE_ENUMERATOR_DEPRECATED_VERSION_BELATED(5, 82, 5, 0, "Use ERR_CANNOT_LOGIN.") = KJob::UserDefinedError + 33,
0216 #endif
0217     ERR_CANNOT_LOGIN = KJob::UserDefinedError + 33,
0218 #if KIOCORE_ENABLE_DEPRECATED_SINCE(5, 0)
0219     ERR_COULD_NOT_STAT ///< @deprecated Since 5.0, use ERR_CANNOT_STAT
0220         KIOCORE_ENUMERATOR_DEPRECATED_VERSION_BELATED(5, 82, 5, 0, "Use ERR_CANNOT_STAT.") = KJob::UserDefinedError + 34,
0221 #endif
0222     ERR_CANNOT_STAT = KJob::UserDefinedError + 34,
0223 #if KIOCORE_ENABLE_DEPRECATED_SINCE(5, 0)
0224     ERR_COULD_NOT_CLOSEDIR ///< @deprecated Since 5.0, use ERR_CANNOT_CLOSEDIR
0225         KIOCORE_ENUMERATOR_DEPRECATED_VERSION_BELATED(5, 82, 5, 0, "Use ERR_CANNOT_CLOSEDIR.") = KJob::UserDefinedError + 35,
0226 #endif
0227     ERR_CANNOT_CLOSEDIR = KJob::UserDefinedError + 35,
0228 #if KIOCORE_ENABLE_DEPRECATED_SINCE(5, 0)
0229     ERR_COULD_NOT_MKDIR ///< @deprecated Since 5.0, use ERR_CANNOT_MKDIR
0230         KIOCORE_ENUMERATOR_DEPRECATED_VERSION_BELATED(5, 82, 5, 0, "Use ERR_CANNOT_AUTHENTICATE.") = KJob::UserDefinedError + 37,
0231 #endif
0232     ERR_CANNOT_MKDIR = KJob::UserDefinedError + 37,
0233 #if KIOCORE_ENABLE_DEPRECATED_SINCE(5, 0)
0234     ERR_COULD_NOT_RMDIR ///< @deprecated Since 5.0, use ERR_CANNOT_RMDIR
0235         KIOCORE_ENUMERATOR_DEPRECATED_VERSION_BELATED(5, 82, 5, 0, "Use ERR_CANNOT_RMDIR.") = KJob::UserDefinedError + 38,
0236 #endif
0237     ERR_CANNOT_RMDIR = KJob::UserDefinedError + 38,
0238     ERR_CANNOT_RESUME = KJob::UserDefinedError + 39,
0239     ERR_CANNOT_RENAME = KJob::UserDefinedError + 40,
0240     ERR_CANNOT_CHMOD = KJob::UserDefinedError + 41,
0241     ERR_CANNOT_DELETE = KJob::UserDefinedError + 42,
0242     // The text argument is the protocol that the dead worker supported.
0243     // This means for example: file, ftp, http, ...
0244     ERR_WORKER_DIED = KJob::UserDefinedError + 43, ///< @since 5.96
0245 #if KIOCORE_ENABLE_DEPRECATED_SINCE(5, 96)
0246     ERR_SLAVE_DIED ///< @deprecated Since 5.96, use ERR_WORKER_DIED
0247         KIOCORE_ENUMERATOR_DEPRECATED_VERSION(5, 96, "Use ERR_WORKER_DIED.") = ERR_WORKER_DIED,
0248 #endif
0249     ERR_OUT_OF_MEMORY = KJob::UserDefinedError + 44,
0250     ERR_UNKNOWN_PROXY_HOST = KJob::UserDefinedError + 45,
0251 #if KIOCORE_ENABLE_DEPRECATED_SINCE(5, 0)
0252     ERR_COULD_NOT_AUTHENTICATE ///< @deprecated Since 5.0, use ERR_CANNOT_AUTHENTICATE
0253         KIOCORE_ENUMERATOR_DEPRECATED_VERSION_BELATED(5, 82, 5, 0, "Use ERR_CANNOT_AUTHENTICATE.") = KJob::UserDefinedError + 46,
0254 #endif
0255     ERR_CANNOT_AUTHENTICATE = KJob::UserDefinedError + 46,
0256     ERR_ABORTED = KJob::UserDefinedError + 47, ///< Action got aborted from application side
0257     ERR_INTERNAL_SERVER = KJob::UserDefinedError + 48,
0258     ERR_SERVER_TIMEOUT = KJob::UserDefinedError + 49,
0259     ERR_SERVICE_NOT_AVAILABLE = KJob::UserDefinedError + 50,
0260     ERR_UNKNOWN = KJob::UserDefinedError + 51,
0261     // (was a warning) ERR_CHECKSUM_MISMATCH = 52,
0262     ERR_UNKNOWN_INTERRUPT = KJob::UserDefinedError + 53,
0263     ERR_CANNOT_DELETE_ORIGINAL = KJob::UserDefinedError + 54,
0264     ERR_CANNOT_DELETE_PARTIAL = KJob::UserDefinedError + 55,
0265     ERR_CANNOT_RENAME_ORIGINAL = KJob::UserDefinedError + 56,
0266     ERR_CANNOT_RENAME_PARTIAL = KJob::UserDefinedError + 57,
0267     ERR_NEED_PASSWD = KJob::UserDefinedError + 58,
0268     ERR_CANNOT_SYMLINK = KJob::UserDefinedError + 59,
0269     ERR_NO_CONTENT = KJob::UserDefinedError + 60, ///< Action succeeded but no content will follow.
0270     ERR_DISK_FULL = KJob::UserDefinedError + 61,
0271     ERR_IDENTICAL_FILES = KJob::UserDefinedError + 62, ///< src==dest when moving/copying
0272     /**
0273      * For worker specified errors that can be
0274      * rich text.  Email links will be handled
0275      * by the standard email app and all hrefs
0276      * will be handled by the standard browser.
0277      * <a href="exec:/khelpcenter ?" will be
0278      * forked.
0279      * @since 5.96
0280      */
0281     ERR_WORKER_DEFINED = KJob::UserDefinedError + 63,
0282 #if KIOCORE_ENABLE_DEPRECATED_SINCE(5, 96)
0283     /**
0284      * For slave specified errors that can be
0285      * rich text.  Email links will be handled
0286      * by the standard email app and all hrefs
0287      * will be handled by the standard browser.
0288      * <a href="exec:/khelpcenter ?" will be
0289      * forked.
0290      * @deprecated Since 5.96, use ERR_WORKER_DEFINED
0291      */
0292     ERR_SLAVE_DEFINED KIOCORE_ENUMERATOR_DEPRECATED_VERSION(5, 96, "Use ERR_WORKER_DEFINED.") = ERR_WORKER_DEFINED,
0293 #endif
0294     ERR_UPGRADE_REQUIRED = KJob::UserDefinedError + 64, ///< A transport upgrade is required to access this
0295     ///< object.  For instance, TLS is demanded by
0296     ///< the server in order to continue.
0297     ERR_POST_DENIED = KJob::UserDefinedError + 65, ///< Issued when trying to POST data to a certain Ports
0298 #if KIOCORE_ENABLE_DEPRECATED_SINCE(5, 0)
0299     ERR_COULD_NOT_SEEK ///< @deprecated Since 5.0, use ERR_CANNOT_SEEK
0300         KIOCORE_ENUMERATOR_DEPRECATED_VERSION_BELATED(5, 82, 5, 0, "Use ERR_CANNOT_SEEK.") = KJob::UserDefinedError + 66,
0301 #endif
0302     // see job.cpp
0303     ERR_CANNOT_SEEK = KJob::UserDefinedError + 66,
0304     ERR_CANNOT_SETTIME = KJob::UserDefinedError + 67, ///< Emitted by setModificationTime
0305     ERR_CANNOT_CHOWN = KJob::UserDefinedError + 68,
0306     ERR_POST_NO_SIZE = KJob::UserDefinedError + 69,
0307     ERR_DROP_ON_ITSELF = KJob::UserDefinedError + 70, ///< from KIO::DropJob, @since 5.6
0308     ERR_CANNOT_MOVE_INTO_ITSELF = KJob::UserDefinedError + 71, ///< emitted by KIO::move, @since 5.18
0309     // TODO KF6 remove reference to slavebase
0310     ERR_PASSWD_SERVER = KJob::UserDefinedError + 72, ///< returned by WorkerBase::openPasswordDialog and SlaveBase::openPasswordDialogV2, @since 5.24
0311     ERR_CANNOT_CREATE_WORKER = KJob::UserDefinedError + 73, ///< used by Slave::createSlave, @since 5.96
0312 #if KIOCORE_ENABLE_DEPRECATED_SINCE(5, 96)
0313     ERR_CANNOT_CREATE_SLAVE ///< used by Slave::createSlave, @since 5.30 @deprecated Since 5.96, use ERR_CANNOT_CREATE_WORKER
0314         KIOCORE_ENUMERATOR_DEPRECATED_VERSION(5, 96, "Use ERR_CANNOT_CREATE_WORKER.") = ERR_CANNOT_CREATE_WORKER,
0315 #endif
0316     ERR_FILE_TOO_LARGE_FOR_FAT32 = KJob::UserDefinedError + 74, ///< @since 5.54
0317     ERR_OWNER_DIED ///< Value used between kuiserver and views when the job owner disappears unexpectedly. It should not be emitted by workers. @since 5.54
0318     = KJob::UserDefinedError + 75,
0319     ERR_PRIVILEGE_NOT_REQUIRED = KJob::UserDefinedError + 76, ///< used by file ioworker, @since 5.60
0320     ERR_CANNOT_TRUNCATE = KJob::UserDefinedError + 77, // used by FileJob::truncate, @since 5.66
0321     /**
0322      * Indicates failure to create a symlink due to the underlying filesystem (FAT/ExFAT)
0323      * not supporting them. Used by e.g. CopyJob.
0324      * @since 5.88
0325      */
0326     ERR_SYMLINKS_NOT_SUPPORTED = KJob::UserDefinedError + 78,
0327 
0328     /**
0329      * Moving files/dirs to the Trash failed due to size constraints.
0330      *
0331      * @since 5.100
0332      */
0333     ERR_TRASH_FILE_TOO_LARGE = KJob::UserDefinedError + 79,
0334 };
0335 
0336 /**
0337  * Specifies how to use the cache.
0338  * @see parseCacheControl()
0339  * @see getCacheControlString()
0340  */
0341 enum CacheControl {
0342     CC_CacheOnly, ///< Fail request if not in cache
0343     CC_Cache, ///< Use cached entry if available
0344     CC_Verify, ///< Validate cached entry with remote site if expired
0345     CC_Refresh, ///< Always validate cached entry with remote site
0346     CC_Reload, ///< Always fetch from remote site.
0347 };
0348 
0349 /**
0350  * Specifies privilege file operation status.
0351  * @since 5.43
0352  */
0353 enum PrivilegeOperationStatus {
0354     OperationAllowed = 1,
0355     OperationCanceled,
0356     OperationNotAllowed,
0357 };
0358 
0359 /**
0360  * Describes the fields that a stat command will retrieve
0361  * @see UDSEntry
0362  * @see StatDetails
0363  * @since 5.69
0364  */
0365 enum StatDetail {
0366     /// No field returned, useful to check if a file exists
0367     StatNoDetails = 0x0,
0368     /// Filename, access, type, size, linkdest
0369     StatBasic = 0x1,
0370     /// uid, gid
0371     StatUser = 0x2,
0372     /// atime, mtime, btime
0373     StatTime = 0x4,
0374     /// Resolve symlinks
0375     StatResolveSymlink = 0x8,
0376     /// ACL data
0377     StatAcl = 0x10,
0378     /// dev, inode
0379     StatInode = 0x20,
0380     /// Recursive size
0381     /// @since 5.70
0382     StatRecursiveSize = 0x40,
0383     /// MIME type
0384     /// @since 5.82
0385     StatMimeType = 0x80,
0386 
0387     /// Default StatDetail flag when creating a @c StatJob.
0388     /// Equivalent to setting <tt>StatBasic | StatUser | StatTime | StatAcl | StatResolveSymlink</tt>
0389     StatDefaultDetails = StatBasic | StatUser | StatTime | StatAcl | StatResolveSymlink,
0390 };
0391 /**
0392  * Stores a combination of #StatDetail values.
0393  */
0394 Q_DECLARE_FLAGS(StatDetails, StatDetail)
0395 
0396 Q_DECLARE_OPERATORS_FOR_FLAGS(KIO::StatDetails)
0397 
0398 /**
0399  * Parses the string representation of the cache control option.
0400  *
0401  * @param cacheControl the string representation
0402  * @return the cache control value
0403  * @see getCacheControlString()
0404  */
0405 KIOCORE_EXPORT KIO::CacheControl parseCacheControl(const QString &cacheControl);
0406 
0407 /**
0408  * Returns a string representation of the given cache control method.
0409  *
0410  * @param cacheControl the cache control method
0411  * @return the string representation
0412  * @see parseCacheControl()
0413  */
0414 KIOCORE_EXPORT QString getCacheControlString(KIO::CacheControl cacheControl);
0415 
0416 /**
0417  * Return the "favicon" (see http://www.favicon.com) for the given @p url,
0418  * if available. Does NOT attempt to download the favicon, it only returns
0419  * one that is already available.
0420  *
0421  * If unavailable, returns QString().
0422  * Use KIO::FavIconRequestJob instead of this method if you can wait
0423  * for the favicon to be downloaded.
0424  *
0425  * @param url the URL of the favicon
0426  * @return the path to the icon (to be passed to QIcon()), or QString()
0427  *
0428  * @since 5.0
0429  */
0430 KIOCORE_EXPORT QString favIconForUrl(const QUrl &url);
0431 
0432 /**
0433  * Converts KIO file permissions from mode_t to QFile::Permissions format.
0434  *
0435  * This is a convenience function for converting KIO permissions parameter from
0436  * mode_t to QFile::Permissions.
0437  *
0438  * @param permissions KIO file permissions.
0439  *
0440  * @return -1 if @p permissions is -1, otherwise its OR'ed QFile::Permission equivalent.
0441  * @since 4.12
0442  */
0443 KIOCORE_EXPORT QFile::Permissions convertPermissions(int permissions);
0444 
0445 /**
0446  * Return the icon name for a URL.
0447  * Most of the time this returns the MIME type icon,
0448  * but also has fallback to favicon and protocol-specific icon.
0449  *
0450  * Pass this to QIcon::fromTheme().
0451  *
0452  * @since 5.0
0453  */
0454 KIOCORE_EXPORT QString iconNameForUrl(const QUrl &url);
0455 
0456 /**
0457  * This function is useful to implement the "Up" button in a file manager for example.
0458  *
0459  * @return a URL that is a level higher
0460  *
0461  * @since 5.0
0462  */
0463 KIOCORE_EXPORT QUrl upUrl(const QUrl &url);
0464 
0465 }
0466 #endif