annotate common/xdg.h @ 60:223487a685b1 release-2.0

Added tag 2.0.0 for changeset 92b0be5ce4b0
author David Demelier <markand@malikania.fr>
date Tue, 01 Mar 2016 08:53:05 +0100
parents 1158cffe5a5e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * Xdg.h -- XDG directory specifications
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2013, 2014, 2015 David Demelier <markand@malikania.fr>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #ifndef _IRCCD_XDG_H_
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #define _IRCCD_XDG_H_
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 * @file Xdg.h
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 * @brief Read XDG standard specifications
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 #include <vector>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 #include <string>
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
29
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 namespace irccd {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
31
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 * @class Xdg
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 * @brief XDG specifications
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 * Read and get XDG directories. This file contains exports thingies so it can
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 * compiles successfully on Windows but its usage is discouraged.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 class Xdg {
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 public:
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 * list of directories.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 using List = std::vector<std::string>;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
45
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 private:
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 std::string m_configHome;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 std::string m_dataHome;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 std::string m_cacheHome;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 std::string m_runtimeDir;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 List m_configDirs;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 List m_dataDirs;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
53
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 public:
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 * Open an xdg instance and load directories.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 * @throw std::runtime_error on failures
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 Xdg();
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
61
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 * Get the config directory. ${XDG_CONFIG_HOME} or ${HOME}/.config
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 * @return the config directory
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 const std::string &configHome() const noexcept;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
68
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 * Get the data directory. ${XDG_DATA_HOME} or ${HOME}/.local/share
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 * @return the data directory
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 const std::string &dataHome() const noexcept;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
75
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 * Get the cache directory. ${XDG_CACHE_HOME} or ${HOME}/.cache
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 * @return the cache directory
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 const std::string &cacheHome() const noexcept;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
82
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 * Get the runtime directory. ${XDG_RUNTIME_DIR} must be set,
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 * if not, it throws an exception.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 * The XDG standard says that application should handle XDG_RUNTIME_DIR by
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 * themselves.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 * @return the runtime directory
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 * @throw std::runtime_error on error
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 const std::string &runtimeDir() const;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
94
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 * Get the standard config directories. ${XDG_CONFIG_DIRS} or { "/etc/xdg" }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 * @return the list of config directories
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 const List &configDirs() const noexcept;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
101
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 /**
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 * Get the data directories. ${XDG_DATA_DIRS} or { "/usr/local/share", "/usr/share" }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 * @return the list of data directories
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 const List &dataDirs() const noexcept;
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 };
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
109
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
110 } // !irccd
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
111
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 #endif // !_IRCCD_XDG_H_