gint remmina_file_manager_iterate(GFunc func, gpointer user_data) { gchar dirname[MAX_PATH_LEN]; gchar filename[MAX_PATH_LEN]; GDir* dir; const gchar* name; RemminaFile* remminafile; gint n; g_snprintf(dirname, MAX_PATH_LEN, "%s/.remmina", g_get_home_dir()); dir = g_dir_open(dirname, 0, NULL); if (dir == NULL) return 0; n = 0; while ((name = g_dir_read_name(dir)) != NULL) { if (!g_str_has_suffix(name, ".remmina")) continue; g_snprintf(filename, MAX_PATH_LEN, "%s/%s", dirname, name); remminafile = remmina_file_load(filename); if (remminafile) { (*func)(remminafile, user_data); remmina_file_free(remminafile); n++; } } g_dir_close(dir); return n; }
GNode* remmina_file_manager_get_group_tree(void) { gchar dirname[MAX_PATH_LEN]; gchar filename[MAX_PATH_LEN]; GDir* dir; const gchar* name; RemminaFile* remminafile; const gchar* group; GNode* root; root = g_node_new(NULL); g_snprintf(dirname, MAX_PATH_LEN, "%s/.remmina", g_get_home_dir()); dir = g_dir_open(dirname, 0, NULL); if (dir == NULL) return root; while ((name = g_dir_read_name(dir)) != NULL) { if (!g_str_has_suffix(name, ".remmina")) continue; g_snprintf(filename, MAX_PATH_LEN, "%s/%s", dirname, name); remminafile = remmina_file_load(filename); group = remmina_file_get_string(remminafile, "group"); remmina_file_manager_add_group(root, group); remmina_file_free(remminafile); } g_dir_close(dir); return root; }
static void remmina_main_action_tools_export(GtkAction *action, RemminaMain *remminamain) { RemminaFilePlugin *plugin; RemminaFile *remminafile; GtkWidget *dialog; if (remminamain->priv->selected_filename == NULL) return; remminafile = remmina_file_load(remminamain->priv->selected_filename); if (remminafile == NULL) return; plugin = remmina_plugin_manager_get_export_file_handler(remminafile); if (plugin) { dialog = gtk_file_chooser_dialog_new(plugin->export_hints, GTK_WINDOW(remminamain), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { plugin->export_func(remminafile, gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog))); } gtk_widget_destroy(dialog); } else { dialog = gtk_message_dialog_new(GTK_WINDOW(remminamain), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("This protocol does not support exporting.")); g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(gtk_widget_destroy), NULL); gtk_widget_show(dialog); } remmina_file_free(remminafile); }
RemminaFile* remmina_file_copy(const gchar *filename) { RemminaFile *remminafile; remminafile = remmina_file_load(filename); remmina_file_generate_filename(remminafile); return remminafile; }
RemminaFile* remmina_file_manager_load_file(const gchar* filename) { RemminaFile* remminafile = NULL; RemminaFilePlugin* plugin; gchar* p; if ((p = strrchr(filename, '.')) != NULL && g_strcmp0(p + 1, "remmina") == 0) { remminafile = remmina_file_load(filename); } else { plugin = remmina_plugin_manager_get_import_file_handler(filename); if (plugin) { remminafile = plugin->import_func(filename); } } return remminafile; }
RemminaFile* remmina_file_new(void) { RemminaFile *remminafile; /* Try to load from the preference file for default settings first */ remminafile = remmina_file_load(remmina_pref_file); if (remminafile) { g_free(remminafile->filename); remminafile->filename = NULL; } else { remminafile = remmina_file_new_empty(); } return remminafile; }
gboolean remmina_external_tools_launcher(const gchar* filename,const gchar* scriptname) { RemminaFile *remminafile; gchar launcher[MAX_PATH_LEN]; g_snprintf(launcher, MAX_PATH_LEN, "%s/.remmina/external_tools/launcher.sh", g_get_home_dir()); remminafile = remmina_file_load(filename); GHashTableIter iter; const gchar *key, *value; g_hash_table_iter_init(&iter, remminafile->settings); while (g_hash_table_iter_next(&iter, (gpointer*) &key, (gpointer*) &value)) { const char *env_format = "%s=%s"; const size_t len = strlen(key) +strlen(value) + strlen(env_format); char *env = (char *) malloc(len); if (env == NULL) { return -1; } int retval = snprintf(env, len, env_format, key,value); if (retval < 0 || (size_t) retval >= len) { /* Handle error */ } if (putenv(env) != 0) { free(env); } } const size_t cmdlen = strlen(launcher) +strlen(scriptname) + 2; gchar *cmd = (gchar *)malloc(cmdlen); g_snprintf(cmd, cmdlen, "%s %s", launcher, scriptname); system(cmd); free(cmd); return TRUE; }
gchar* remmina_file_manager_get_groups(void) { gchar dirname[MAX_PATH_LEN]; gchar filename[MAX_PATH_LEN]; GDir* dir; const gchar* name; RemminaFile* remminafile; RemminaStringArray* array; const gchar* group; gchar* groups; array = remmina_string_array_new(); g_snprintf(dirname, MAX_PATH_LEN, "%s/.remmina", g_get_home_dir()); dir = g_dir_open(dirname, 0, NULL); if (dir == NULL) return 0; while ((name = g_dir_read_name(dir)) != NULL) { if (!g_str_has_suffix(name, ".remmina")) continue; g_snprintf(filename, MAX_PATH_LEN, "%s/%s", dirname, name); remminafile = remmina_file_load(filename); group = remmina_file_get_string(remminafile, "group"); if (group && remmina_string_array_find(array, group) < 0) { remmina_string_array_add(array, group); } remmina_file_free(remminafile); } g_dir_close(dir); remmina_string_array_sort(array); groups = remmina_string_array_to_string(array); remmina_string_array_free(array); return groups; }
void remmina_file_delete(const gchar *filename) { RemminaSecretPlugin *plugin; RemminaFile *remminafile; gint i; remminafile = remmina_file_load(filename); if (remminafile) { plugin = remmina_plugin_manager_get_secret_plugin(); if (plugin) { for (i = 0; remmina_system_settings[i].setting; i++) { if (remmina_system_settings[i].encrypted) { plugin->delete_password(remminafile, remmina_system_settings[i].setting); } } } remmina_file_free(remminafile); } g_unlink(filename); }