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 }