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; }
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; }
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); }
static void remmina_main_import_file_list(RemminaMain *remminamain, GSList *files) { GtkWidget *dlg; GSList *element; gchar *path; RemminaFilePlugin *plugin; GString *err; RemminaFile *remminafile = NULL; gboolean imported; err = g_string_new(NULL); imported = FALSE; for (element = files; element; element = element->next) { path = (gchar*) element->data; plugin = remmina_plugin_manager_get_import_file_handler(path); if (plugin && (remminafile = plugin->import_func(path)) != NULL && remmina_file_get_string(remminafile, "name")) { remmina_file_generate_filename(remminafile); remmina_file_save_all(remminafile); imported = TRUE; } else { g_string_append(err, path); g_string_append_c(err, '\n'); } if (remminafile) { remmina_file_free(remminafile); remminafile = NULL; } g_free(path); } g_slist_free(files); if (err->len > 0) { dlg = gtk_message_dialog_new(GTK_WINDOW(remminamain), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Unable to import:\n%s"), err->str); g_signal_connect(G_OBJECT(dlg), "response", G_CALLBACK(gtk_widget_destroy), NULL); gtk_widget_show(dlg); } g_string_free(err, TRUE); if (imported) { remmina_main_load_files(remminamain, 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; }
static void remmina_file_editor_on_default(GtkWidget* button, RemminaFileEditor* gfe) { RemminaFile* gf; GtkWidget* dialog; remmina_file_editor_update(gfe); gf = remmina_file_dup(gfe->priv->remmina_file); remmina_file_set_filename(gf, remmina_pref_file); /* Clear properties that should never be default */ remmina_file_set_string(gf, "name", NULL); remmina_file_set_string(gf, "server", NULL); remmina_file_set_string(gf, "password", NULL); remmina_file_save_all(gf); remmina_file_free(gf); dialog = gtk_message_dialog_new(GTK_WINDOW(gfe), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, _("Default settings saved.")); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); }
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); }
static void remmina_file_editor_destroy(GtkWidget* widget, gpointer data) { remmina_file_free(REMMINA_FILE_EDITOR(widget)->priv->remmina_file); g_hash_table_destroy(REMMINA_FILE_EDITOR(widget)->priv->setting_widgets); g_free(REMMINA_FILE_EDITOR(widget)->priv); }