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