From 77f0a29c0b4762168289325d66e5df8fa8cb214e Mon Sep 17 00:00:00 2001 From: "Javier S. Pedro" Date: Tue, 18 Aug 2009 13:16:40 +0200 Subject: [PATCH] load/save implemented using gnomevfs --- debian/changelog | 7 +++-- debian/links | 1 + gui/Makefile | 2 +- gui/save.c | 79 +++++++++++++++++++++++++++++++++++++++++++----------- 4 files changed, 70 insertions(+), 19 deletions(-) diff --git a/debian/changelog b/debian/changelog index 9379f0d..42eb1f6 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,11 @@ drnoksnes (0.9.4) unstable; urgency=low - * GUI select rom file chooser fixes: more extensions, remembers path. + * GUI select rom file chooser fixes: more extensions, remembers path. + * Partial support in cmdline for mouse/superscope. + * GUI support for pause/resume. + * GUI support for snapshots. - -- Javier S. Pedro Mon, 17 Aug 2009 12:31:52 +0200 + -- Javier S. Pedro Tue, 18 Aug 2009 02:40:22 +0200 drnoksnes (0.9.3) unstable; urgency=low diff --git a/debian/links b/debian/links index 92bb2e9..74d7682 100644 --- a/debian/links +++ b/debian/links @@ -1,2 +1,3 @@ /usr/bin/osso_games_startup usr/bin/drnoksnes_startup /usr/bin/osso_games_startup.launch usr/bin/drnoksnes_startup.launch +/usr/games/drnoksnes usr/bin/drnoksnes diff --git a/gui/Makefile b/gui/Makefile index 1fdba15..85c5ec9 100644 --- a/gui/Makefile +++ b/gui/Makefile @@ -1,4 +1,4 @@ -PKGS:=gtk+-2.0 hildon-1 hildon-fm-2 gconf-2.0 +PKGS:=gtk+-2.0 hildon-1 hildon-fm-2 gconf-2.0 gnome-vfs-2.0 CPPFLAGS:=$(shell pkg-config --cflags $(PKGS)) CFLAGS?=-g -Os -Wall CFLAGS+=-fpic -shared diff --git a/gui/save.c b/gui/save.c index b026d95..9b87c19 100644 --- a/gui/save.c +++ b/gui/save.c @@ -24,17 +24,38 @@ #include #include +#include +#include +#include +#include #include #include "plugin.h" -static gchar * cur_save_filename = NULL; +static gchar * cur_save_uri = NULL; + +// Pulling nearly all of gnomevfs just to copy a file. *sigh*. +static void copy_file(const char * source_uri, const char * dest_uri) +{ + GnomeVFSURI* src = gnome_vfs_uri_new(source_uri); + GnomeVFSURI* dst = gnome_vfs_uri_new(dest_uri); + GnomeVFSResult res; + + res = gnome_vfs_xfer_uri(src, dst, + GNOME_VFS_XFER_TARGET_DEFAULT_PERMS, + GNOME_VFS_XFER_ERROR_MODE_ABORT, + GNOME_VFS_XFER_OVERWRITE_MODE_REPLACE, + NULL, NULL); + + gnome_vfs_uri_unref(src); + gnome_vfs_uri_unref(dst); +} void save_clear() { - if (cur_save_filename) { - g_free(cur_save_filename); - cur_save_filename = NULL; + if (cur_save_uri) { + g_free(cur_save_uri); + cur_save_uri = NULL; } } @@ -42,46 +63,72 @@ static gchar * show_dialog(GtkWindow* parent, GtkFileChooserAction action) { GtkWidget * dialog; GtkFileFilter * filter; - gchar * filename = NULL; + gchar * uri = NULL; filter = gtk_file_filter_new(); gtk_file_filter_add_pattern(filter, "*.snsg"); dialog = hildon_file_chooser_dialog_new_with_properties(GTK_WINDOW(parent), - "action", action, "filter", filter, NULL); + "action", action, "local-only", FALSE, "filter", filter, NULL); // TODO Default path gtk_widget_show_all(GTK_WIDGET(dialog)); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) { - filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog)); } gtk_widget_destroy(dialog); - return filename; + return uri; } void save_load(GtkWindow* parent) { - gchar * filename = show_dialog(parent, GTK_FILE_CHOOSER_ACTION_OPEN); + gchar * uri = show_dialog(parent, GTK_FILE_CHOOSER_ACTION_OPEN); + + if (uri) { + gchar * frz_file = game_state_get_frz_file(); + gchar * frz_uri = gnome_vfs_get_uri_from_local_path(frz_file); + copy_file(uri, frz_uri); + g_free(frz_uri); + g_free(frz_file); + } - // TODO: Something + if (cur_save_uri) { + g_free(cur_save_uri); + } + cur_save_uri = uri; } void save_save(GtkWindow* parent) { - if (!cur_save_filename) { + if (cur_save_uri) { + gchar * frz_file = game_state_get_frz_file(); + gchar * frz_uri = gnome_vfs_get_uri_from_local_path(frz_file); + copy_file(frz_uri, cur_save_uri); + g_free(frz_uri); + g_free(frz_file); + } else { save_save_as(parent); } - - // TODO: Something again } void save_save_as(GtkWindow* parent) { - gchar * filename = show_dialog(parent, GTK_FILE_CHOOSER_ACTION_SAVE); - - // TODO: Something again + gchar * uri = show_dialog(parent, GTK_FILE_CHOOSER_ACTION_SAVE); + + if (uri) { + gchar * frz_file = game_state_get_frz_file(); + gchar * frz_uri = gnome_vfs_get_uri_from_local_path(frz_file); + copy_file(frz_uri, uri); + g_free(frz_uri); + g_free(frz_file); + + if (cur_save_uri) { + g_free(cur_save_uri); + } + cur_save_uri = uri; + } } -- 1.7.9.5