File indexing completed on 2024-05-12 05:35:55

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(QStringLiteral("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(QStringLiteral("Devices")).hasGroup(udi)) {
0110         config()->group(QStringLiteral("Devices")).group(udi).deleteGroup();
0111     }
0112 }