]> spindle.queued.net Git - midori/commitdiff
Implement '--snapshot' or '-s' command line switch
authorChristian Dywan <christian@twotoasts.de>
Mon, 4 May 2009 00:09:46 +0000 (02:09 +0200)
committerChristian Dywan <christian@twotoasts.de>
Mon, 4 May 2009 00:09:46 +0000 (02:09 +0200)
Calling Midori in the form "midori --snapshot URI" makes a
snapshot of the specified address and saves it to PDF. The format,
path or size can currently not be influenced.
Also note that web pages which look different when printed will
apply their print style.

midori/main.c

index cacdd37a50f4f798975a8289929446241561d425..1b2c781b3e87e70381dda0203af41ae494ee873b 100644 (file)
@@ -35,6 +35,7 @@
 #else
     #define is_writable(_cfg_filename) 1
 #endif
+#include <errno.h>
 #include <stdlib.h>
 #include <string.h>
 #include <glib/gstdio.h>
@@ -1344,6 +1345,31 @@ midori_run_script (const gchar* filename)
     return 1;
 }
 
+static void
+snapshot_load_finished_cb (GtkWidget*      web_view,
+                           WebKitWebFrame* web_frame,
+                           gchar*          filename)
+{
+    GError* error;
+    GtkPrintOperation* operation = gtk_print_operation_new ();
+    GtkPrintOperationAction action = GTK_PRINT_OPERATION_ACTION_EXPORT;
+    GtkPrintOperationResult result;
+
+    gtk_print_operation_set_export_filename (operation, filename);
+    error = NULL;
+    result = webkit_web_frame_print_full (web_frame, operation, action, &error);
+
+    if (error != NULL)
+    {
+        g_error ("%s", error->message);
+        gtk_main_quit ();
+    }
+
+    g_object_unref (operation);
+    g_print (_("Snapshot saved to: %s\n"), filename);
+    gtk_main_quit ();
+}
+
 int
 main (int    argc,
       char** argv)
@@ -1351,6 +1377,7 @@ main (int    argc,
     gchar* webapp;
     gchar* config;
     gboolean run;
+    gchar* snapshot;
     gboolean version;
     gchar** uris;
     MidoriApp* app;
@@ -1364,6 +1391,8 @@ main (int    argc,
        N_("Use FOLDER as configuration folder"), N_("FOLDER") },
        { "run", 'r', 0, G_OPTION_ARG_NONE, &run,
        N_("Run the specified filename as javascript"), NULL },
+       { "snapshot", 's', 0, G_OPTION_ARG_STRING, &snapshot,
+       N_("Take a snapshot of the specified URI"), NULL },
        { "version", 'V', 0, G_OPTION_ARG_NONE, &version,
        N_("Display program version"), NULL },
        { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_STRING_ARRAY, &uris,
@@ -1406,6 +1435,7 @@ main (int    argc,
     webapp = NULL;
     config = NULL;
     run = FALSE;
+    snapshot = NULL;
     version = FALSE;
     uris = NULL;
     error = NULL;
@@ -1439,6 +1469,38 @@ main (int    argc,
         return 0;
     }
 
+    if (snapshot)
+    {
+        GError *error;
+        gchar* filename;
+        gint fd;
+        GtkWidget* web_view;
+
+        fd = g_file_open_tmp ("snapshot-XXXXXX.pdf", &filename, &error);
+        close (fd);
+
+        error = NULL;
+        if (error)
+        {
+            g_error ("%s", error->message);
+            return 1;
+        }
+
+        if (g_unlink (filename) == -1)
+        {
+            g_error ("%s", g_strerror (errno));
+            return 1;
+        }
+
+        web_view = webkit_web_view_new ();
+        g_signal_connect (web_view, "load-finished",
+            G_CALLBACK (snapshot_load_finished_cb), filename);
+        webkit_web_view_open (WEBKIT_WEB_VIEW (web_view), snapshot);
+        gtk_main ();
+        g_free (filename);
+        return 0;
+    }
+
     /* Web Application support */
     if (webapp)
     {