diff options
| author | Remko Tronçon <git@el-tramo.be> | 2010-08-20 20:02:51 (GMT) | 
|---|---|---|
| committer | Remko Tronçon <git@el-tramo.be> | 2010-08-20 20:02:51 (GMT) | 
| commit | 7d40d96d71678af014877369a1f431e72dd69b5d (patch) | |
| tree | eeb3fa95211c61f9e46572693df82aa1529da55d | |
| parent | b620cf7471f80361522dd2232c54068bce4a42be (diff) | |
| download | swift-7d40d96d71678af014877369a1f431e72dd69b5d.zip swift-7d40d96d71678af014877369a1f431e72dd69b5d.tar.bz2  | |
Comply to FreeDesktop.org standard for storing data files.
Resolves: #526
| -rw-r--r-- | Slimber/MainController.cpp | 2 | ||||
| -rw-r--r-- | Swiften/Application/SConscript | 4 | ||||
| -rw-r--r-- | Swiften/Application/UnixApplicationPathProvider.cpp | 66 | ||||
| -rw-r--r-- | Swiften/Application/UnixApplicationPathProvider.h | 46 | 
4 files changed, 75 insertions, 43 deletions
diff --git a/Slimber/MainController.cpp b/Slimber/MainController.cpp index 5c624a2..a557a07 100644 --- a/Slimber/MainController.cpp +++ b/Slimber/MainController.cpp @@ -35,7 +35,7 @@ MainController::MainController(Menulet* menulet) : menulet(menulet) {  			boost::bind(&MainController::handleServicesChanged, this));  	vCardCollection = new FileVCardCollection( -			PlatformApplicationPathProvider("Slimber").getSettingsDir()); +			PlatformApplicationPathProvider("Slimber").getDataDir());  	server = new Server(5222, 5562, linkLocalServiceBrowser, vCardCollection);  	server->onStopped.connect( diff --git a/Swiften/Application/SConscript b/Swiften/Application/SConscript index 2eacc80..7b25a97 100644 --- a/Swiften/Application/SConscript +++ b/Swiften/Application/SConscript @@ -17,6 +17,10 @@ elif swiften_env["PLATFORM"] == "win32" :  	sources += [  			"WindowsApplicationPathProvider.cpp"  		] +else : +	sources += [ +			"UnixApplicationPathProvider.cpp" +		]  objects = swiften_env.StaticObject(sources)  swiften_env.Append(SWIFTEN_OBJECTS = [objects]) diff --git a/Swiften/Application/UnixApplicationPathProvider.cpp b/Swiften/Application/UnixApplicationPathProvider.cpp new file mode 100644 index 0000000..b474ecf --- /dev/null +++ b/Swiften/Application/UnixApplicationPathProvider.cpp @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include "Swiften/Application/UnixApplicationPathProvider.h" + +#include <boost/filesystem/convenience.hpp> + +namespace Swift { + +UnixApplicationPathProvider::UnixApplicationPathProvider(const String& name) : ApplicationPathProvider(name) { +	resourceDirs.push_back(getExecutableDir() / "../resources"); // Development +	char* xdgDataDirs = getenv("XDG_DATA_DIRS"); +	if (xdgDataDirs) { +		std::vector<String> dataDirs = String(xdgDataDirs).split(':'); +		if (!dataDirs.empty()) { +			foreach(const String& dir, dataDirs) { +				resourceDirs.push_back(boost::filesystem::path(dir.getUTF8String()) / "swift"); +			} +			return; +		} +	} +	resourceDirs.push_back("/usr/local/share/swift"); +	resourceDirs.push_back("/usr/share/swift"); +} + +boost::filesystem::path UnixApplicationPathProvider::getHomeDir() const { +	return boost::filesystem::path(getenv("HOME")); +} + +boost::filesystem::path UnixApplicationPathProvider::getDataDir() const { +	char* xdgDataHome = getenv("XDG_DATA_HOME"); +	String dataDir; +	if (xdgDataHome) { +		dataDir = String(xdgDataHome); +	} + +	boost::filesystem::path dataPath = (dataDir.isEmpty() ?  +			getHomeDir() / ".local" / "share"  +			: boost::filesystem::path(dataDir.getUTF8String())) / getApplicationName().getLowerCase().getUTF8String(); + +	try { +		boost::filesystem::create_directories(dataPath); +	} +	catch (const boost::filesystem::filesystem_error& e) { +		std::cerr << "ERROR: " << e.what() << std::endl; +	} +	return dataPath; +} + +boost::filesystem::path UnixApplicationPathProvider::getExecutableDir() const { +	ByteArray path; +	path.resize(4096); +	size_t size = readlink("/proc/self/exe", path.getData(), path.getSize()); +	if (size > 0) { +		path.resize(size); +		return boost::filesystem::path(path.toString().getUTF8Data()).parent_path(); +	} +	else { +		return boost::filesystem::path(); +	} +} + +} diff --git a/Swiften/Application/UnixApplicationPathProvider.h b/Swiften/Application/UnixApplicationPathProvider.h index 5dd5aa5..c1bfd95 100644 --- a/Swiften/Application/UnixApplicationPathProvider.h +++ b/Swiften/Application/UnixApplicationPathProvider.h @@ -17,49 +17,11 @@  namespace Swift {  	class UnixApplicationPathProvider : public ApplicationPathProvider {  		public: -			UnixApplicationPathProvider(const String& name) : ApplicationPathProvider(name) { -				resourceDirs.push_back(getExecutableDir() / "../resources"); // Development -				char* xdgDataDirs = getenv("XDG_DATA_DIRS"); -				if (xdgDataDirs) { -					std::vector<String> dataDirs = String(xdgDataDirs).split(':'); -					if (!dataDirs.empty()) { -						foreach(const String& dir, dataDirs) { -							resourceDirs.push_back(boost::filesystem::path(dir.getUTF8String()) / "swift"); -						} -						return; -					} -				} -				resourceDirs.push_back("/usr/local/share/swift"); -				resourceDirs.push_back("/usr/share/swift"); -			} - -			virtual boost::filesystem::path getHomeDir() const { -				return boost::filesystem::path(getenv("HOME")); -			} +			UnixApplicationPathProvider(const String& name); -			boost::filesystem::path getDataDir() const { -				boost::filesystem::path result(getHomeDir() / ("." + getApplicationName().getLowerCase().getUTF8String())); -				try { -					boost::filesystem::create_directory(result); -				} -				catch (const boost::filesystem::filesystem_error& e) { -					std::cerr << "ERROR: " << e.what() << std::endl; -				} -				return result; -			} - -			virtual boost::filesystem::path getExecutableDir() const { -				ByteArray path; -				path.resize(4096); -				size_t size = readlink("/proc/self/exe", path.getData(), path.getSize()); -				if (size > 0) { -					path.resize(size); -					return boost::filesystem::path(path.toString().getUTF8Data()).parent_path(); -				} -				else { -					return boost::filesystem::path(); -				} -			} +			virtual boost::filesystem::path getHomeDir() const; +			boost::filesystem::path getDataDir() const; +			virtual boost::filesystem::path getExecutableDir() const;  			virtual std::vector<boost::filesystem::path> getResourceDirs() const {  				return resourceDirs;  | 
 Swift