57 const gchar *dir =
".remmina";
62 if (g_file_test(
remminadir, G_FILE_TEST_IS_DIR))
66 remminadir = g_build_path(
"/", g_get_home_dir(), dir, NULL);
67 if (g_file_test(
remminadir, G_FILE_TEST_IS_DIR))
71 remminadir = g_build_path(
"/", g_get_user_data_dir(),
"remmina", NULL);
72 if (g_file_test(
remminadir, G_FILE_TEST_IS_DIR))
76 const gchar *
const *dirs = g_get_system_data_dirs();
78 for (i = 0; dirs[i] != NULL; ++i) {
79 remminadir = g_build_path(
"/", dirs[i],
"remmina", NULL);
80 if (g_file_test(
remminadir, G_FILE_TEST_IS_DIR))
85 remminadir = g_build_path(
"/", g_get_user_data_dir(),
"remmina", NULL);
92 GFile *src = g_file_new_for_path(src_path), *dst = g_file_new_for_path(dst_path);
94 const gboolean ok = g_file_copy(src, dst, G_FILE_COPY_NONE, NULL, NULL, NULL, NULL);
104 TRACE_CALL(__func__);
106 const gchar *legacy =
".remmina";
107 const gchar *filename;
110 remminadir = g_build_path(
"/", g_get_user_data_dir(),
"remmina", NULL);
115 cachedir = g_build_path(
"/", g_get_user_cache_dir(),
"remmina", NULL);
116 g_mkdir_with_parents(
cachedir, 0750);
119 remminadir = g_build_path(
"/", g_get_home_dir(), legacy, NULL);
120 if (g_file_test(
remminadir, G_FILE_TEST_IS_DIR)) {
122 while ((filename = g_dir_read_name(dir)) != NULL) {
124 g_build_path(
"/",
remminadir, filename, NULL),
125 g_build_path(
"/", g_get_user_data_dir(),
126 "remmina", filename, NULL));
131 const gchar *
const *dirs = g_get_system_data_dirs();
133 for (i = 0; dirs[i] != NULL; ++i) {
134 remminadir = g_build_path(
"/", dirs[i],
"remmina", NULL);
135 if (g_file_test(
remminadir, G_FILE_TEST_IS_DIR)) {
137 while ((filename = g_dir_read_name(dir)) != NULL) {
139 g_build_path(
"/",
remminadir, filename, NULL),
140 g_build_path(
"/", g_get_user_data_dir(),
141 "remmina", filename, NULL));
153 TRACE_CALL(__func__);
154 gchar filename[MAX_PATH_LEN];
158 gint items_count = 0;
159 gchar *remmina_data_dir;
162 dir = g_dir_open(remmina_data_dir, 0, NULL);
165 while ((name = g_dir_read_name(dir)) != NULL) {
166 if (!g_str_has_suffix(name,
".remmina"))
168 g_snprintf(filename, MAX_PATH_LEN,
"%s/%s",
169 remmina_data_dir, name);
172 (*func)(remminafile, user_data);
179 g_free(remmina_data_dir);
185 TRACE_CALL(__func__);
186 gchar filename[MAX_PATH_LEN];
193 gchar *remmina_data_dir;
198 dir = g_dir_open(remmina_data_dir, 0, NULL);
202 while ((name = g_dir_read_name(dir)) != NULL) {
203 if (!g_str_has_suffix(name,
".remmina"))
205 g_snprintf(filename, MAX_PATH_LEN,
"%s/%s", remmina_data_dir, name);
218 g_free(remmina_data_dir);
224 TRACE_CALL(__func__);
235 if (group == NULL || group[0] ==
'\0')
238 p1 = g_strdup(group);
239 p2 = strchr(p1,
'/');
246 for (child = g_node_first_child(node); child; child = g_node_next_sibling(child)) {
262 data->group = g_strdup_printf(
"%s/%s", ((
RemminaGroupData *)node->data)->group, p1);
264 data->group = g_strdup(p1);
266 child = g_node_insert_data_before(node, child, data);
268 child = g_node_append_data(node, data);
278 TRACE_CALL(__func__);
279 gchar filename[MAX_PATH_LEN];
286 root = g_node_new(NULL);
292 while ((name = g_dir_read_name(dir)) != NULL) {
293 if (!g_str_has_suffix(name,
".remmina"))
309 TRACE_CALL(__func__);
322 for (child = g_node_first_child(node); child; child = g_node_next_sibling(child))
329 TRACE_CALL(__func__);
334 if ((p = strrchr(filename,
'.')) != NULL && g_strcmp0(p + 1,
"remmina") == 0) {
G_BEGIN_DECLS struct _RemminaGroupData RemminaGroupData
RemminaFile * remmina_file_load(const gchar *filename)
void remmina_file_free(RemminaFile *remminafile)
const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)
G_BEGIN_DECLS typedef GPtrArray RemminaStringArray
static gchar * remminadir
typedefG_BEGIN_DECLS struct _RemminaFile RemminaFile
void remmina_file_manager_free_group_tree(GNode *node)
RemminaFilePlugin * remmina_plugin_manager_get_import_file_handler(const gchar *file)
gint remmina_string_array_find(RemminaStringArray *array, const gchar *str)
gchar * remmina_string_array_to_string(RemminaStringArray *array)
static gboolean remmina_file_manager_do_copy(const char *src_path, const char *dst_path)
gchar * remmina_pref_get_value(const gchar *key)
void remmina_file_manager_init(void)
void remmina_string_array_sort(RemminaStringArray *array)
static void remmina_file_manager_add_group(GNode *node, const gchar *group)
void remmina_string_array_free(RemminaStringArray *array)
gchar * remmina_file_get_datadir(void)
RemminaStringArray * remmina_string_array_new(void)
gchar * remmina_file_manager_get_groups(void)
RemminaFile * remmina_file_manager_load_file(const gchar *filename)
RemminaFile *(* import_func)(const gchar *from_file)
void remmina_string_array_add(RemminaStringArray *array, const gchar *str)
GNode * remmina_file_manager_get_group_tree(void)
gint remmina_file_manager_iterate(GFunc func, gpointer user_data)