KNetworkMounts Class
Header: | #include <KNetworkMounts> |
CMake: | find_package(KF6 REQUIRED COMPONENTS CoreAddons) target_link_libraries(mytarget PRIVATE KF6::CoreAddons) |
Since: | 5.85 |
Inherits: | QObject |
Public Types
enum | KNetworkMountOption { LowSideEffectsOptimizations, MediumSideEffectsOptimizations, StrongSideEffectsOptimizations, KDirWatchDontAddWatches, SymlinkPathsUseCache } |
enum | KNetworkMountsType { NfsPaths, SmbPaths, SymlinkDirectory, SymlinkToNetworkMount, Any } |
Public Functions
void | addPath(const QString &path, KNetworkMounts::KNetworkMountsType type) |
QString | canonicalSymlinkPath(const QString &path) |
void | clearCache() |
bool | isEnabled() const |
bool | isOptionEnabled(const KNetworkMounts::KNetworkMountOption option, const bool defaultValue = false) const |
bool | isOptionEnabledForPath(const QString &path, KNetworkMounts::KNetworkMountOption option) |
bool | isSlowPath(const QString &path, KNetworkMounts::KNetworkMountsType type = Any) |
QStringList | paths(KNetworkMounts::KNetworkMountsType type = Any) const |
void | setEnabled(bool value) |
void | setOption(const KNetworkMounts::KNetworkMountOption option, const bool value) |
void | setPaths(const QStringList &paths, KNetworkMounts::KNetworkMountsType type) |
void | sync() |
Static Public Members
KNetworkMounts * | self() |
Detailed Description
Performance control on network mounts.
This class provides methods for deciding whether operations on slow network mounts should be performed or not.
Configuration is read from a configuration file network_mounts in the user's QStandardPaths::ConfigLocation. This file can be filled by using the network mounts performance configuration module or directly via setEnabled, setPaths, addPath and setOption
KNetworkMounts::self()->setEnabled(true); KNetworkMounts::self()->setOption(KNetworkMounts::LowSideEffectsOptimizations, true); KNetworkMounts::self()->addPath(path1, KNetworkMounts::NfsPaths); KNetworkMounts::self()->addPath(path2, KNetworkMounts::NfsPaths); KNetworkMounts::self()->setPaths(listOfPaths, KNetworkMounts::SmbPaths);
Use KNetworkMounts like this to check if the given url is on a configured slow path and the KNetworkMountOption LowSideEffectsOptimizations is enabled:
if (KNetworkMounts::self()->isOptionEnabledForPath(url.toLocalFile(), KNetworkMounts::LowSideEffectsOptimizations)) { // skip operations which are slow on the given url if // KNetworkMountOption LowSideEffectsOptimizations is enabled } else { // given url is not configured being slow or the KNetworkMountOption // LowSideEffectsOptimizations is not enabled }
If called for the first time, this creates a singleton instance and reads the config file. Subsequent calls just use this instance without reading the config file again.
Member Type Documentation
enum KNetworkMounts::KNetworkMountOption
The KNetworkMountOption enum
Constant | Value | Description |
---|---|---|
KNetworkMounts::LowSideEffectsOptimizations | 0 | Don't run KDiskFreeSpaceInfo if slow path. Don't check for manually mounted drives. Don't check with QFileInfo::isWritable if it is writable, if not yet known, return true. Don't check with QFileInfo::isReadable if it is readable, return false. Don't check for desktop files just return false. Ignore .hidden files on slow paths. Don't read mime comment from .desktop or .directory files. Don't get the size with QFileInfo::size, just return 0, if not yet known. Don't determine mime type from file content, use file extension. Don't check for desktop files just return false. Don't call KFileSystemType::fileSystemType to check if the filesystem is slow, just return true. Don't count files/directories in subdirectories. Don't calculate sizes of subdirectories. Avoid check for dir at Kate startup. |
KNetworkMounts::MediumSideEffectsOptimizations | 1 | Don't return project for dir, avoid QFileInfo().absoluteDir(). Don't search for .kateconfig recursively Ignore recent files on slow paths |
KNetworkMounts::StrongSideEffectsOptimizations | 2 | Turn off symbolic link resolution |
KNetworkMounts::KDirWatchDontAddWatches | 3 | Disables dir watching completely for slow paths, avoids stat() calls on added dirs and subdirs |
KNetworkMounts::SymlinkPathsUseCache | 4 | Cache resolved symlink paths |
enum KNetworkMounts::KNetworkMountsType
The KNetworkMountsType enum
Constant | Value | Description |
---|---|---|
KNetworkMounts::NfsPaths | 0 | NFS paths |
KNetworkMounts::SmbPaths | 1 | SMB paths |
KNetworkMounts::SymlinkDirectory | 2 | Paths to directories which contain symbolic links to network mounts |
KNetworkMounts::SymlinkToNetworkMount | 3 | Paths which are symbolic links to network mounts |
KNetworkMounts::Any | 4 | Any slow path type. Do not use with setPaths or addPath |
Member Function Documentation
void KNetworkMounts::addPath(const QString &path, KNetworkMounts::KNetworkMountsType type)
Add a path for which optimizations are to take place
path the path to add
type the type of the path. Do not use Any
See also KNetworkMountsType.
QString KNetworkMounts::canonicalSymlinkPath(const QString &path)
Resolves a path that may contain symbolic links to mounted network shares.
A symlink path is either a directory which contains symbolic links to slow network mounts (SymlinkDirectory) or a direct symbolic link to a slow network mount ( * SymlinkToNfsOrSmbPaths).
Example: There are some Samba shares mounted below /mnt. These are paths of type SmbPaths
/mnt/server1/share1 /mnt/server1/share2 /mnt/server2/share3
A (logged in) user may have symbolic links to them in his home directory below netshares. The directory /home/user/netshares is a SymlinkDirectory:
/home/user/netshares/share1 -> /mnt/server1/share1 /home/user/netshares/share2 -> /mnt/server1/share2 /home/user/netshares/share3 -> /mnt/server2/share3
There is a direct symbolic link from /home/user/share1 to /mnt/server1/share1. This is of type SymlinkToNfsOrSmbPaths:
/home/user/share1 -> /mnt/server1/share1
Both types of symbolic links from symlink paths to the real mounted shares are resolved even if KNetworkMountOption StrongSideEffectsOptimizations is enabled.
If the setup is like above a path
/home/user/netshares/share1/Documents/file.txt
would be resolved to
/mnt/server1/share1/Documents/file.txt
and a path
/home/user/share1/Documents/file.txt
would also be resolved to
/mnt/server1/share1/Documents/file.txt
Resolved paths are cached in a hash.
path the path to resolve
Returns the resolved path or path if path is not a symlink path or no symlink found
See also KNetworkMountsType, clearCache, and isSlowPath.
void KNetworkMounts::clearCache()
Clears the canonical symlink path cache
Call this if directory structures on mounted network drives changed. Don't enable the cache (SymlinkPathsUseCache) if this happens often and the drives are usually accessed via the symlinks. This method exists mainly for the KCM.
See also canonicalSymlinkPath.
bool KNetworkMounts::isEnabled() const
Query if the performance optimizations are switched on
Returns true
if on, false
otherwise
bool KNetworkMounts::isOptionEnabled(const KNetworkMounts::KNetworkMountOption option, const bool defaultValue = false) const
Query a performance option
option the option to query
defaultValue the value to return if the option is not configured
Returns true
if option is on, false
if not
See also KNetworkMountOption.
bool KNetworkMounts::isOptionEnabledForPath(const QString &path, KNetworkMounts::KNetworkMountOption option)
Query if path is configured to be a slow path and option is enabled
path the path to query
option the option to query
Returns true
if path is a configured slow path and option option is enabled
bool KNetworkMounts::isSlowPath(const QString &path, KNetworkMounts::KNetworkMountsType type = Any)
Query if path is configured to be a slow path of type type
path the path to query
type the type to query. If omitted, any type matches
Returns true
if path is a configured slow path of type type
This function is also used to determine the filesystem type in KFileSystemType::fileSystemType (KFileSystemType::Smb or KFileSystemType::Nfs) without an expensive call to stafs(). For this to work the types of paths need to be correctly assigned in setPath or addPath
QStringList KNetworkMounts::paths(KNetworkMounts::KNetworkMountsType type = Any) const
Query the configured paths for which optimizations are to take place
Returns a list of paths
See also setPaths().
[static]
KNetworkMounts *KNetworkMounts::self()
Returns (and creates if necessary) the singleton instance
void KNetworkMounts::setEnabled(bool value)
Switch the performance optimizations on or off
value the value to set
See also isEnabled().
void KNetworkMounts::setOption(const KNetworkMounts::KNetworkMountOption option, const bool value)
Switch a performance option on or off
option the option to change
value the value to set
See also KNetworkMountOption.
void KNetworkMounts::setPaths(const QStringList &paths, KNetworkMounts::KNetworkMountsType type)
Set the paths for which optimizations are to take place
paths the paths to set
type the type of paths. Do not use Any
See also paths() and KNetworkMountsType.
void KNetworkMounts::sync()
Synchronizes to config file
QSettings synchronization also takes place automatically at regular intervals and from QSettings destructor, see QSettings::sync() documentation.
Calls QSettings::sync()