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); } }
RemminaFilePlugin* remmina_plugin_manager_get_export_file_handler(RemminaFile *remminafile) { RemminaFilePlugin *plugin; gint i; for (i = 0; i < remmina_plugin_table->len; i++) { plugin = (RemminaFilePlugin *) g_ptr_array_index(remmina_plugin_table, i); if (plugin->type != REMMINA_PLUGIN_TYPE_FILE) continue; if (plugin->export_test_func(remminafile)) { return plugin; } } return NULL; }
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; }