merge configreader/configprovider into entryprovider
settings-related methods that don't have any relation to entries will be moved to a seperate file settingsprovider
This commit is contained in:
		
							
								
								
									
										59
									
								
								config.h
									
									
									
									
									
								
							
							
						
						
									
										59
									
								
								config.h
									
									
									
									
									
								
							| @@ -1,59 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Copyright (c) 2018-2019 Albert S. <mail at quitesimple dot org> |  | ||||||
|  * |  | ||||||
|  * Permission to use, copy, modify, and distribute this software for any |  | ||||||
|  * purpose with or without fee is hereby granted, provided that the above |  | ||||||
|  * copyright notice and this permission notice appear in all copies. |  | ||||||
|  * |  | ||||||
|  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |  | ||||||
|  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |  | ||||||
|  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |  | ||||||
|  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |  | ||||||
|  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |  | ||||||
|  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |  | ||||||
|  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |  | ||||||
|  */ |  | ||||||
| #ifndef CONFIG_H |  | ||||||
| #define CONFIG_H |  | ||||||
| #include <exception> |  | ||||||
| #include <QFile> |  | ||||||
| #include <QDir> |  | ||||||
| #include <QString> |  | ||||||
| #include <QStringList> |  | ||||||
| #include <QIcon> |  | ||||||
| #include <QKeySequence> |  | ||||||
| class EntryConfig |  | ||||||
| { |  | ||||||
| public: |  | ||||||
| 	QString key; |  | ||||||
| 	QString name; |  | ||||||
| 	QString command; |  | ||||||
| 	QStringList arguments; |  | ||||||
| 	QIcon icon; |  | ||||||
| 	int row=0; |  | ||||||
| 	int col=0; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 	 |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| class ConfigReader |  | ||||||
| { |  | ||||||
| private: |  | ||||||
| 	QStringList configPaths; |  | ||||||
| 	EntryConfig readFromFile(const QString &path); |  | ||||||
| 	EntryConfig readFromDesktopFile(const QString &path); |  | ||||||
| 	QStringList desktopIgnoreArgs; |  | ||||||
| public: |  | ||||||
| 	ConfigReader(QStringList paths); |  | ||||||
| 	QVector<EntryConfig> readConfig(); |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| class ConfigFormatException : public std::runtime_error |  | ||||||
| { |  | ||||||
| public: |  | ||||||
| 	ConfigFormatException() : std::runtime_error("Error in configuration file, misformated line?") {}; |  | ||||||
| 	ConfigFormatException(const std::string &str) : std::runtime_error(str) {}; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| #endif |  | ||||||
| @@ -1,25 +0,0 @@ | |||||||
| #include "configprovider.h" |  | ||||||
|  |  | ||||||
| ConfigProvider::ConfigProvider(QString configDirPath, QSettings &settings) |  | ||||||
| { |  | ||||||
| 	this->settings = &settings; |  | ||||||
| 	this->configDirPath = configDirPath; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| QVector<EntryConfig> ConfigProvider::getUserEntries() |  | ||||||
| { |  | ||||||
| 	ConfigReader reader({this->configDirPath}); |  | ||||||
| 	return reader.readConfig(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| QVector<EntryConfig> ConfigProvider::getSystemEntries() |  | ||||||
| { |  | ||||||
| 	QStringList systemApplicationsPaths = settings->value("sysAppsPaths", "/usr/share/applications/").toStringList(); |  | ||||||
| 	ConfigReader systemConfigReader(systemApplicationsPaths); |  | ||||||
| 	return systemConfigReader.readConfig(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| bool ConfigProvider::singleInstanceMode() |  | ||||||
| { |  | ||||||
| 	return settings->value("singleInstance", true).toBool(); |  | ||||||
| } |  | ||||||
| @@ -1,18 +0,0 @@ | |||||||
| #ifndef CONFIGPROVIDER_H |  | ||||||
| #define CONFIGPROVIDER_H |  | ||||||
| #include <QSettings> |  | ||||||
| #include "config.h" |  | ||||||
|  |  | ||||||
| class ConfigProvider |  | ||||||
| { |  | ||||||
| private: |  | ||||||
| 	QSettings *settings; |  | ||||||
| 	QString configDirPath; |  | ||||||
| public: |  | ||||||
| 	ConfigProvider(QString configDirPath, QSettings &settings); |  | ||||||
| 	QVector<EntryConfig> getUserEntries(); |  | ||||||
| 	QVector<EntryConfig> getSystemEntries(); |  | ||||||
| 	bool singleInstanceMode(); |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| #endif // CONFIGPROVIDER_H |  | ||||||
| @@ -1,32 +1,19 @@ | |||||||
| /*
 | #include "entryprovider.h" | ||||||
|  * Copyright (c) 2018-2020 Albert S. <mail at quitesimple dot org> |  | ||||||
|  * |  | ||||||
|  * Permission to use, copy, modify, and distribute this software for any |  | ||||||
|  * purpose with or without fee is hereby granted, provided that the above |  | ||||||
|  * copyright notice and this permission notice appear in all copies. |  | ||||||
|  * |  | ||||||
|  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |  | ||||||
|  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |  | ||||||
|  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |  | ||||||
|  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |  | ||||||
|  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |  | ||||||
|  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |  | ||||||
|  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |  | ||||||
|  */ |  | ||||||
| #include "config.h" |  | ||||||
| #include <QDirIterator> |  | ||||||
| #include <QDebug> | #include <QDebug> | ||||||
|  | #include <QDirIterator> | ||||||
| #include <QTextStream> | #include <QTextStream> | ||||||
| 
 | 
 | ||||||
| 
 | EntryProvider::EntryProvider(QStringList userEntriesDirsPaths, QStringList systemEntriesDirsPaths) | ||||||
| ConfigReader::ConfigReader(QStringList paths) |  | ||||||
| { | { | ||||||
| 	this->configPaths = paths; | 	this->userEntriesDirsPaths = userEntriesDirsPaths; | ||||||
| 	desktopIgnoreArgs << "%F" << "%f" << "%U" << "%u"; | 	this->systemEntriesDirsPaths = systemEntriesDirsPaths; | ||||||
|  | 	_desktopIgnoreArgs << "%F" | ||||||
|  | 					   << "%f" | ||||||
|  | 					   << "%U" | ||||||
|  | 					   << "%u"; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | EntryConfig EntryProvider::readFromDesktopFile(const QString &path) | ||||||
| EntryConfig ConfigReader::readFromDesktopFile(const QString &path) |  | ||||||
| { | { | ||||||
| 	EntryConfig result; | 	EntryConfig result; | ||||||
| 	QFile file(path); | 	QFile file(path); | ||||||
| @@ -81,7 +68,7 @@ EntryConfig ConfigReader::readFromDesktopFile(const QString &path) | |||||||
| 			{ | 			{ | ||||||
| 				for(QString &arg : arguments) | 				for(QString &arg : arguments) | ||||||
| 				{ | 				{ | ||||||
| 					if(!desktopIgnoreArgs.contains(arg)) | 					if(!_desktopIgnoreArgs.contains(arg)) | ||||||
| 					{ | 					{ | ||||||
| 						result.arguments.append(arg); | 						result.arguments.append(arg); | ||||||
| 					} | 					} | ||||||
| @@ -93,9 +80,10 @@ EntryConfig ConfigReader::readFromDesktopFile(const QString &path) | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* qsrun own's config file */ | /* qsrun own's config file */ | ||||||
| EntryConfig ConfigReader::readFromFile(const QString &path) | EntryConfig EntryProvider::readFromFile(const QString &path) | ||||||
| { | { | ||||||
| 	EntryConfig result; | 	EntryConfig result; | ||||||
|  | 	EntryConfig inheritedConfig; | ||||||
| 	QFile file(path); | 	QFile file(path); | ||||||
| 	if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) | 	if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) | ||||||
| 	{ | 	{ | ||||||
| @@ -169,14 +157,41 @@ EntryConfig ConfigReader::readFromFile(const QString &path) | |||||||
| 			// result.keySequence = sequence;
 | 			// result.keySequence = sequence;
 | ||||||
| 			result.key = splitted[1].toLower(); | 			result.key = splitted[1].toLower(); | ||||||
| 		} | 		} | ||||||
|  | 		if(key == "inherit") | ||||||
|  | 		{ | ||||||
|  | 			inheritedConfig = readFromDesktopFile(resolveEntryPath(splitted[1])); | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 	return result; | 	return result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| QVector<EntryConfig> ConfigReader::readConfig() | QString EntryProvider::resolveEntryPath(QString path) | ||||||
|  | { | ||||||
|  | 	if(path.trimmed().isEmpty()) | ||||||
|  | 	{ | ||||||
|  | 		return {}; | ||||||
|  | 	} | ||||||
|  | 	if(path[0] == '/') | ||||||
|  | 	{ | ||||||
|  | 		return path; | ||||||
|  | 	} | ||||||
|  | 	QStringList paths = this->userEntriesDirsPaths + this->systemEntriesDirsPaths; | ||||||
|  | 	for(QString &configPath : paths) | ||||||
|  | 	{ | ||||||
|  | 		QDir dir(configPath); | ||||||
|  | 		QString desktopFilePath = dir.absoluteFilePath(path); | ||||||
|  | 		if(QFileInfo::exists(desktopFilePath)) | ||||||
|  | 		{ | ||||||
|  | 			return desktopFilePath; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return {}; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | QVector<EntryConfig> EntryProvider::readConfig(QStringList paths) | ||||||
| { | { | ||||||
| 	QVector<EntryConfig> result; | 	QVector<EntryConfig> result; | ||||||
| 	for(QString &configPath : configPaths) | 	for(QString &configPath : paths) | ||||||
| 	{ | 	{ | ||||||
| 		QDirIterator it(configPath, QDirIterator::Subdirectories); | 		QDirIterator it(configPath, QDirIterator::Subdirectories); | ||||||
| 		while(it.hasNext()) | 		while(it.hasNext()) | ||||||
| @@ -189,7 +204,6 @@ QVector<EntryConfig> ConfigReader::readConfig() | |||||||
| 				if(suffix == "desktop") | 				if(suffix == "desktop") | ||||||
| 				{ | 				{ | ||||||
| 					result.append(readFromDesktopFile(path)); | 					result.append(readFromDesktopFile(path)); | ||||||
| 
 |  | ||||||
| 				} | 				} | ||||||
| 				if(suffix == "qsrun") | 				if(suffix == "qsrun") | ||||||
| 				{ | 				{ | ||||||
| @@ -197,8 +211,16 @@ QVector<EntryConfig> ConfigReader::readConfig() | |||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 
 |  | ||||||
| 	} | 	} | ||||||
| 	 |  | ||||||
| 	return result; | 	return result; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | QVector<EntryConfig> EntryProvider::getUserEntries() | ||||||
|  | { | ||||||
|  | 	return readConfig(this->userEntriesDirsPaths); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | QVector<EntryConfig> EntryProvider::getSystemEntries() | ||||||
|  | { | ||||||
|  | 	return readConfig(this->systemEntriesDirsPaths); | ||||||
|  | } | ||||||
							
								
								
									
										46
									
								
								entryprovider.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								entryprovider.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | |||||||
|  | #ifndef ENTRYPROVIDER_H | ||||||
|  | #define ENTRYPROVIDER_H | ||||||
|  | #include <QIcon> | ||||||
|  | #include <QSettings> | ||||||
|  |  | ||||||
|  | class ConfigFormatException : public std::runtime_error | ||||||
|  | { | ||||||
|  |   public: | ||||||
|  | 	ConfigFormatException() : std::runtime_error("Error in configuration file, misformated line?") | ||||||
|  | 	{ | ||||||
|  | 	} | ||||||
|  | 	ConfigFormatException(const std::string &str) : std::runtime_error(str) | ||||||
|  | 	{ | ||||||
|  | 	} | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | class EntryConfig | ||||||
|  | { | ||||||
|  |   public: | ||||||
|  | 	QString key; | ||||||
|  | 	QString name; | ||||||
|  | 	QString command; | ||||||
|  | 	QStringList arguments; | ||||||
|  | 	QIcon icon; | ||||||
|  | 	int row = 0; | ||||||
|  | 	int col = 0; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | class EntryProvider | ||||||
|  | { | ||||||
|  |   protected: | ||||||
|  | 	QStringList _desktopIgnoreArgs; | ||||||
|  | 	QStringList userEntriesDirsPaths; | ||||||
|  | 	QStringList systemEntriesDirsPaths; | ||||||
|  | 	EntryConfig readFromFile(const QString &path); | ||||||
|  | 	EntryConfig readFromDesktopFile(const QString &path); | ||||||
|  | 	QVector<EntryConfig> readConfig(QStringList paths); | ||||||
|  | 	QString resolveEntryPath(QString path); | ||||||
|  |  | ||||||
|  |   public: | ||||||
|  | 	EntryProvider(QStringList userEntriesDirsPaths, QStringList systemEntriesDirsPaths); | ||||||
|  | 	QVector<EntryConfig> getUserEntries(); | ||||||
|  | 	QVector<EntryConfig> getSystemEntries(); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | #endif // ENTRYPROVIDER_H | ||||||
		Fai riferimento in un nuovo problema
	
	Block a user