Warning, file /plasma/plasma-desktop/solid-device-automounter/lib/AutomounterSettings.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 SPDX-FileCopyrightText: 2009 Trever Fischer <wm161@wm161.net> 0003 SPDX-FileCopyrightText: 2015 Kai Uwe Broulik <kde@privat.broulik.de> 0004 SPDX-FileCopyrightText: 2021 Ismael Asensio <isma.af@gmail.com> 0005 0006 SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 0009 #include "AutomounterSettings.h" 0010 0011 void AutomounterSettings::usrRead() 0012 { 0013 qDeleteAll(m_devices); 0014 m_devices.clear(); 0015 for (const QString &udi : knownDevices()) { 0016 m_devices[udi] = new DeviceSettings(sharedConfig(), udi, this); 0017 } 0018 } 0019 0020 bool AutomounterSettings::usrSave() 0021 { 0022 bool saveOk = true; 0023 for (const auto settings : m_devices.values()) { 0024 saveOk &= settings->save(); 0025 } 0026 return saveOk; 0027 } 0028 0029 bool AutomounterSettings::usrIsSaveNeeded() 0030 { 0031 return isSaveNeeded() || std::any_of(m_devices.cbegin(), m_devices.cend(), [](const DeviceSettings *device) { 0032 return device->isSaveNeeded(); 0033 }); 0034 } 0035 0036 QStringList AutomounterSettings::knownDevices() const 0037 { 0038 return config()->group("Devices").groupList(); 0039 } 0040 0041 bool AutomounterSettings::hasDeviceInfo(const QString &udi) const 0042 { 0043 return m_devices.contains(udi); 0044 } 0045 0046 DeviceSettings *AutomounterSettings::deviceSettings(const QString &udi) const 0047 { 0048 return m_devices.value(udi); 0049 } 0050 0051 bool AutomounterSettings::shouldAutomountDevice(const QString &udi, AutomountType type) const 0052 { 0053 // We auto-mount the device, if: 0054 // 1.) auto-mounting is forced for the specific device, or 0055 // 2.) auto-mounting is enabled 0056 // and auto-mounting on login/attach is configured 0057 // and the device is known, has been seen mounted last, or unknown devices are allowed 0058 0059 switch (type) { 0060 case Login: 0061 if (hasDeviceInfo(udi) && deviceSettings(udi)->mountOnLogin()) { 0062 return true; 0063 } 0064 if (!automountOnLogin()) { 0065 return false; 0066 } 0067 break; 0068 case Attach: 0069 if (hasDeviceInfo(udi) && deviceSettings(udi)->mountOnAttach()) { 0070 return true; 0071 } 0072 if (!automountOnPlugin()) { 0073 return false; 0074 } 0075 break; 0076 } 0077 0078 if (automountUnknownDevices()) { 0079 return true; 0080 } 0081 0082 return hasDeviceInfo(udi) && (deviceSettings(udi)->isKnown() || deviceSettings(udi)->lastSeenMounted()); 0083 } 0084 0085 void AutomounterSettings::setDeviceLastSeenMounted(const QString &udi, bool mounted) 0086 { 0087 if (!m_devices.contains(udi)) { 0088 m_devices[udi] = new DeviceSettings(sharedConfig(), udi, this); 0089 } 0090 if (mounted) { 0091 deviceSettings(udi)->setIsKnown(true); 0092 } 0093 deviceSettings(udi)->setLastSeenMounted(mounted); 0094 } 0095 0096 void AutomounterSettings::setDeviceInfo(const Solid::Device &dev) 0097 { 0098 const QString udi = dev.udi(); 0099 if (!m_devices.contains(udi)) { 0100 m_devices[udi] = new DeviceSettings(sharedConfig(), udi, this); 0101 } 0102 auto settings = deviceSettings(udi); 0103 settings->setName(dev.description()); 0104 settings->setIcon(dev.icon()); 0105 } 0106 0107 void AutomounterSettings::removeDeviceGroup(const QString &udi) 0108 { 0109 if (config()->group("Devices").hasGroup(udi)) { 0110 config()->group("Devices").group(udi).deleteGroup(); 0111 } 0112 }