Warning, file /network/smb4k/core/smb4kprofilemanager.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002     This class manages the profiles that were defined by the user.
0003 
0004     SPDX-FileCopyrightText: 2014-2023 Alexander Reinholdt <alexander.reinholdt@kdemail.net>
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 // application specific includes
0009 #include "smb4kprofilemanager.h"
0010 #include "smb4ksettings.h"
0011 
0012 // Qt includes
0013 #include <QApplication>
0014 #include <QPointer>
0015 
0016 class Smb4KProfileManagerPrivate
0017 {
0018 public:
0019     QString activeProfile;
0020     QStringList profiles;
0021     bool useProfiles;
0022 };
0023 
0024 class Smb4KProfileManagerStatic
0025 {
0026 public:
0027     Smb4KProfileManager instance;
0028 };
0029 
0030 Q_GLOBAL_STATIC(Smb4KProfileManagerStatic, p);
0031 
0032 Smb4KProfileManager::Smb4KProfileManager(QObject *parent)
0033     : QObject(parent)
0034     , d(new Smb4KProfileManagerPrivate)
0035 {
0036     d->useProfiles = Smb4KSettings::useProfiles();
0037 
0038     if (d->useProfiles) {
0039         d->profiles = Smb4KSettings::profilesList();
0040         d->activeProfile = !Smb4KSettings::activeProfile().isEmpty() ? Smb4KSettings::activeProfile() : d->profiles.first();
0041     } else {
0042         d->profiles.clear();
0043         d->activeProfile.clear();
0044     }
0045 
0046     connect(Smb4KSettings::self(), SIGNAL(configChanged()), this, SLOT(slotConfigChanged()));
0047 }
0048 
0049 Smb4KProfileManager::~Smb4KProfileManager()
0050 {
0051 }
0052 
0053 Smb4KProfileManager *Smb4KProfileManager::self()
0054 {
0055     return &p->instance;
0056 }
0057 
0058 void Smb4KProfileManager::setActiveProfile(const QString &name)
0059 {
0060     if (d->useProfiles) {
0061         if (name != d->activeProfile) {
0062             Q_EMIT aboutToChangeProfile();
0063             d->activeProfile = name;
0064             Smb4KSettings::setActiveProfile(d->activeProfile);
0065             Q_EMIT activeProfileChanged(d->activeProfile);
0066         }
0067     } else {
0068         if (!d->activeProfile.isEmpty()) {
0069             Q_EMIT aboutToChangeProfile();
0070             d->activeProfile.clear();
0071             Smb4KSettings::setActiveProfile(d->activeProfile);
0072             Q_EMIT activeProfileChanged(d->activeProfile);
0073         }
0074     }
0075 
0076     Smb4KSettings::self()->save();
0077 }
0078 
0079 QString Smb4KProfileManager::activeProfile() const
0080 {
0081     return d->activeProfile;
0082 }
0083 
0084 QStringList Smb4KProfileManager::profilesList() const
0085 {
0086     return d->useProfiles ? d->profiles : QStringList();
0087 }
0088 
0089 bool Smb4KProfileManager::useProfiles() const
0090 {
0091     return d->useProfiles;
0092 }
0093 
0094 void Smb4KProfileManager::migrateProfile(const QString &oldName, const QString &newName)
0095 {
0096     if (oldName == QStringLiteral("*")) {
0097         // All profiles to new profile name
0098         for (int i = 0; i < d->profiles.size(); i++) {
0099             QString tempOldName = d->profiles.at(i);
0100             d->profiles[i] = newName;
0101             Q_EMIT profileMigrated(tempOldName, newName);
0102         }
0103         setActiveProfile(newName);
0104     } else {
0105         // Old profile name to new profile name
0106         for (int i = 0; i < d->profiles.size(); i++) {
0107             if (d->profiles.at(i) == oldName) {
0108                 d->profiles[i] = newName;
0109             }
0110         }
0111 
0112         Q_EMIT profileMigrated(oldName, newName);
0113 
0114         if (d->activeProfile == oldName) {
0115             setActiveProfile(newName);
0116         }
0117     }
0118 
0119     Smb4KSettings::setProfilesList(d->profiles);
0120     Q_EMIT profilesListChanged(d->profiles);
0121 }
0122 
0123 void Smb4KProfileManager::removeProfile(const QString &name)
0124 {
0125     int index = d->profiles.indexOf(name);
0126 
0127     if (index != -1) {
0128         d->profiles.removeAt(index);
0129     }
0130 
0131     Q_EMIT profileRemoved(name);
0132 
0133     if (name == d->activeProfile) {
0134         setActiveProfile(!d->profiles.isEmpty() ? d->profiles.first() : QString());
0135     }
0136 
0137     // NOTE: Since this function is called BEFORE the new profiles list
0138     // is stored by the configuration dialog, we need to set the new list
0139     // here, because we are emitting the signal and we cannot be sure
0140     // that the user always uses Smb4KProfileManager::profilesList()
0141     // instead of Smb4KSettings::profilesList().
0142     Smb4KSettings::setProfilesList(d->profiles);
0143 
0144     Q_EMIT profilesListChanged(d->profiles);
0145 }
0146 
0147 void Smb4KProfileManager::slotConfigChanged()
0148 {
0149     // FIXME: Do we need to emit the signals here?
0150     if (d->useProfiles != Smb4KSettings::useProfiles()) {
0151         d->useProfiles = Smb4KSettings::useProfiles();
0152         Q_EMIT profileUsageChanged(d->useProfiles);
0153     }
0154 
0155     if (d->profiles != Smb4KSettings::profilesList()) {
0156         d->profiles = Smb4KSettings::profilesList();
0157         Q_EMIT profilesListChanged(d->profiles);
0158     }
0159 
0160     if (!Smb4KSettings::activeProfile().isEmpty() && d->profiles.contains(Smb4KSettings::activeProfile())) {
0161         setActiveProfile(Smb4KSettings::activeProfile());
0162     } else {
0163         setActiveProfile(d->profiles.first());
0164     }
0165 }