[virt-tools-list] [PATCH virt-viewer 7/7] remote-viewer: learn to connect from file

Marc-André Lureau marcandre.lureau at gmail.com
Fri Nov 23 12:41:12 UTC 2012


---
 src/remote-viewer.c | 25 +++++++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/src/remote-viewer.c b/src/remote-viewer.c
index 72b1ca8..553f251 100644
--- a/src/remote-viewer.c
+++ b/src/remote-viewer.c
@@ -35,6 +35,7 @@
 #include "virt-viewer-session-spice.h"
 #endif
 #include "virt-viewer-app.h"
+#include "virt-viewer-file.h"
 #include "remote-viewer.h"
 
 #ifndef G_VALUE_INIT /* see bug https://bugzilla.gnome.org/show_bug.cgi?id=654793 */
@@ -626,9 +627,13 @@ remote_viewer_start(VirtViewerApp *app)
     RemoteViewer *self = REMOTE_VIEWER(app);
     RemoteViewerPrivate *priv = self->priv;
 #endif
+    GFile *file = NULL;
+    VirtViewerFile *vvfile = NULL;
     gboolean ret = FALSE;
     gchar *guri = NULL;
     gchar *type = NULL;
+    gchar *path = NULL;
+    GError *error = NULL;
 
 #if HAVE_SPICE_GTK
     g_signal_connect(app, "notify", G_CALLBACK(app_notified), self);
@@ -659,7 +664,17 @@ remote_viewer_start(VirtViewerApp *app)
         if (virt_viewer_app_get_title(app) == NULL)
             virt_viewer_app_set_title(app, guri);
 
-        if (virt_viewer_util_extract_host(guri, &type, NULL, NULL, NULL, NULL) < 0 || type == NULL) {
+        file = g_file_new_for_commandline_arg(guri);
+        if (g_file_query_exists(file, NULL)) {
+            path = g_file_get_path(file);
+            vvfile = virt_viewer_file_new(path, &error);
+            if (error) {
+                virt_viewer_app_simple_message_dialog(app, _("Invalid file %s"), guri);
+                g_warning(error->message);
+                goto cleanup;
+            }
+            g_object_get(G_OBJECT(vvfile), "type", &type, NULL);
+        } else if (virt_viewer_util_extract_host(guri, &type, NULL, NULL, NULL, NULL) < 0 || type == NULL) {
             virt_viewer_app_simple_message_dialog(app, _("Cannot determine the connection type from URI"));
             goto cleanup;
         }
@@ -669,6 +684,8 @@ remote_viewer_start(VirtViewerApp *app)
             goto cleanup;
         }
 
+        virt_viewer_session_set_file(virt_viewer_app_get_session(app), vvfile);
+
         if (virt_viewer_app_initial_connect(app) < 0) {
             virt_viewer_app_simple_message_dialog(app, _("Failed to initiate connection"));
             goto cleanup;
@@ -679,7 +696,11 @@ remote_viewer_start(VirtViewerApp *app)
 
     ret = VIRT_VIEWER_APP_CLASS(remote_viewer_parent_class)->start(app);
 
- cleanup:
+cleanup:
+    g_clear_error(&error);
+    g_clear_object(&file);
+    g_clear_object(&vvfile);
+    g_free(path);
     g_free(guri);
     g_free(type);
     return ret;
-- 
1.7.11.7




More information about the virt-tools-list mailing list