24 #include <QTextStream> 26 #include <QStandardPaths> 37 return basePath + QDir::separator() +
"profiles";
42 QString profileName = defaultProfile.isEmpty() ?
defaultProfileName() : defaultProfile;
58 mRootProfilePath = rootProfileLocation;
63 mSettings.reset(
new QSettings( settingsFile(), QSettings::IniFormat ) );
68 mWatchProfiles = enabled;
69 if ( mWatchProfiles && !mRootProfilePath.isEmpty() && QDir( mRootProfilePath ).exists() )
71 mWatcher.reset(
new QFileSystemWatcher() );
72 mWatcher->addPath( mRootProfilePath );
73 connect( mWatcher.get(), &QFileSystemWatcher::directoryChanged,
this, [
this]
86 return static_cast< bool >( mWatcher.get() );
91 return !mRootProfilePath.isEmpty();
96 QString defaultName = QStringLiteral(
"default" );
102 if ( !mSettings->contains( QStringLiteral(
"/core/defaultProfile" ) ) || globalSettings.
value( QStringLiteral(
"overrideLocalProfile" ),
false,
QgsSettings::Core ).toBool() )
104 return globalSettings.
value( QStringLiteral(
"defaultProfile" ), defaultName,
QgsSettings::Core ).toString();
106 return mSettings->value( QStringLiteral(
"/core/defaultProfile" ), defaultName ).toString();
111 mSettings->setValue( QStringLiteral(
"/core/defaultProfile" ), name );
122 return QDir( mRootProfilePath ).entryList( QDir::Dirs | QDir::NoDotAndDotDot );
132 QString profilePath = mRootProfilePath + QDir::separator() + name;
142 QDir folder( mRootProfilePath + QDir::separator() + name );
143 if ( !folder.exists() )
145 QDir().mkpath( folder.absolutePath() );
148 QFile qgisPrivateDbFile( folder.absolutePath() + QDir::separator() +
"qgis.db" );
151 if ( !qgisPrivateDbFile.exists() )
155 QFile masterFile( qgisMasterDbFileName );
158 masterFile.copy( qgisPrivateDbFile.fileName() );
172 QDir folder( mRootProfilePath + QDir::separator() + name );
175 bool deleted = folder.removeRecursively();
178 error.
append( ( tr(
"Unable to fully delete user profile folder" ) ) );
187 QString QgsUserProfileManager::settingsFile()
const 189 return mRootProfilePath + QDir::separator() +
"profiles.ini";
194 return mUserProfile.get();
199 QString path = QDir::toNativeSeparators( QCoreApplication::applicationFilePath() );
200 QStringList arguments;
201 arguments << QCoreApplication::arguments();
205 arguments.removeFirst();
207 arguments << QStringLiteral(
"--profile" ) << name;
208 QgsDebugMsg( QStringLiteral(
"Starting instance from %1 with %2" ).arg( path ).arg( arguments.join(
" " ) ) );
209 QProcess::startDetached( path, arguments, QDir::toNativeSeparators( QCoreApplication::applicationDirPath() ) );
214 if ( ! mUserProfile.get() )
bool profileExists(const QString &name) const
Check if a profile exists.
static QString resolveProfilesFolder(const QString &basePath=QString())
Resolves the profiles folder for the given path.
void profilesChanged()
Emitted when the list of profiles is changed.
static QString qgisMasterDatabaseFilePath()
Returns the path to the master qgis.db file.
This class is a composition of two QSettings instances:
QgsUserProfile * userProfile()
The currently active user profile.
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
User profile contains information about the user profile folders on the machine.
QgsError createUserProfile(const QString &name)
Create a user profile given by the name.
bool rootLocationIsSet() const
Check if the root location has been set for the manager.
void setDefaultFromActive()
Set the default profile name from the current active profile.
QString defaultProfileName() const
Returns the name of the default profile that has been set in .default.
QStringList allProfiles() const
Returns a list of all found profile names.
void append(const QString &message, const QString &tag)
Append new error message.
bool isNewProfileNotificationEnabled() const
Returns whether the manager is watching for the creation of new user profiles and emitting the profil...
bool isEmpty() const
Test if any error is set.
void setNewProfileNotificationEnabled(bool enabled)
Sets whether the manager should watch for the creation of new user profiles and emit the profilesChan...
void setRootLocation(const QString &rootProfileLocation)
Set the root profile location for the profile manager.
void loadUserProfile(const QString &name)
Starts a new instance of QGIS for the given profile.
void initSettings() const
Init the settings from the user folder.
QgsError is container for error messages (report).
QgsUserProfile * getProfile(const QString &defaultProfile="default", bool createNew=true, bool initSettings=true)
Returns the profile from the given root profile location.
void setActiveUserProfile(const QString &profile)
Sets the active profile in the manager.
QgsUserProfile * profileForName(const QString &name) const
Returns the profile found for a given name.
void setDefaultProfileName(const QString &name)
Sets the default profile name.
QgsUserProfileManager(const QString &rootLocation=QString(), QObject *parent=nullptr)
User profile manager used to manage user profiles for the instance of QGIS.
QgsError deleteProfile(const QString &name)
Deletes a profile from the root profiles folder.