added remote interface for exporting additional info (sidecars,
authorVladimir Nadvornik <nadvornik@suse.cz>
Mon, 20 Apr 2009 21:34:16 +0000 (21:34 +0000)
committerVladimir Nadvornik <nadvornik@suse.cz>
Mon, 20 Apr 2009 21:34:16 +0000 (21:34 +0000)
destination) to external commands

see the symlink command for an example

http://sourceforge.net/tracker/?func=detail&aid=2488845&group_id=222125&atid=1054680

plugins/symlink/Makefile.am
plugins/symlink/geeqie-symlink [new file with mode: 0755]
plugins/symlink/symlink.desktop
src/remote.c

index 90188c1..952f425 100644 (file)
@@ -1,3 +1,4 @@
+dist_bin_SCRIPTS = geeqie-symlink
 
 qq_desktopdir = $(pkgdatadir)/applications
 qq_desktop_DATA = symlink.desktop
diff --git a/plugins/symlink/geeqie-symlink b/plugins/symlink/geeqie-symlink
new file mode 100755 (executable)
index 0000000..6a8465a
--- /dev/null
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+# This is a helper script that symlinks grouped files
+# it uses geeqie remote connection to get details about grouped files
+
+
+# iterate over files on commandline
+for file in "$@" ; do
+    # we got only one file for each group, typically the main one
+    # get the sidecars:
+    geeqie -r --get-sidecars:"$file" |while read sidecar ; do
+       # the main file is included in the sidecar file list, no special handling is required
+       # get destination path for each sidecar file:
+        geeqie -r --get-destination:"$sidecar" | if read destination ; then
+            ln -s "$sidecar" "$destination"
+        fi
+    done
+done
index 2306651..88bb3da 100644 (file)
@@ -4,11 +4,8 @@ Type=Application
 Name=Symlink
 #Name[cs]=
 
-# FIXME: this can't be an oneliner, it needs to be changed to a full
-# featured script in separate file, with error handling etc.
-# expansion of environment variables directly in Exec is not supported 
-# by the specification and it will be removed
-Exec=ln -s %f "$GEEQIE_DESTINATION"
+# call the helper script
+Exec=geeqie-symlink %f
 
 # Desktop files that are usable only in Geeqie should be marked like this:
 Categories=X-Geeqie;
index 39ae67f..91a1cf8 100644 (file)
@@ -321,6 +321,7 @@ static gboolean remote_client_send(RemoteConnection *rc, const gchar *text)
                                if (buffer[0] == '\n') /* empty line finishes the command */
                                        {
                                        g_free(buffer);
+                                       fflush(stdout);
                                        break;
                                        }
                                buffer[termpos] = '\0';
@@ -528,6 +529,42 @@ static void gr_config_load(const gchar *text, GIOChannel *channel, gpointer data
        g_free(filename);
 }
 
+static void gr_get_sidecars(const gchar *text, GIOChannel *channel, gpointer data)
+{
+       gchar *filename = expand_tilde(text);
+       FileData *fd = file_data_new_simple(filename);
+       
+       GList *work;
+       if (fd->parent) fd = fd->parent;
+
+       g_io_channel_write_chars(channel, fd->path, -1, NULL, NULL);
+       g_io_channel_write_chars(channel, "\n", -1, NULL, NULL);
+
+       work = fd->sidecar_files;
+
+       while (work)
+               {
+               fd = work->data;
+               work = work->next;
+               g_io_channel_write_chars(channel, fd->path, -1, NULL, NULL);
+               g_io_channel_write_chars(channel, "\n", -1, NULL, NULL);
+               }
+       g_free(filename);
+}
+
+static void gr_get_destination(const gchar *text, GIOChannel *channel, gpointer data)
+{
+       gchar *filename = expand_tilde(text);
+       FileData *fd = file_data_new_simple(filename);
+       
+       if (fd->change && fd->change->dest)
+               {
+               g_io_channel_write_chars(channel, fd->change->dest, -1, NULL, NULL);
+               g_io_channel_write_chars(channel, "\n", -1, NULL, NULL);
+               }
+       g_free(filename);
+}
+
 static void gr_file_view(const gchar *text, GIOChannel *channel, gpointer data)
 {
        gchar *filename = expand_tilde(text);
@@ -615,6 +652,8 @@ static RemoteCommandEntry remote_commands[] = {
        { "-t", "--tools-hide",         gr_tools_hide,          FALSE, TRUE,  N_("hide tools") },
        { "-q", "--quit",               gr_quit,                FALSE, FALSE, N_("quit") },
        { NULL, "--config-load:",       gr_config_load,         TRUE,  FALSE, N_("load config file") },
+       { NULL, "--get-sidecars:",      gr_get_sidecars,        TRUE,  FALSE, N_("get list of sidecars of the given file") },
+       { NULL, "--get-destination:",   gr_get_destination,     TRUE,  FALSE, N_("get destination path for the given file") },
        { NULL, "file:",                gr_file_load,           TRUE,  FALSE, N_("open file") },
        { NULL, "view:",                gr_file_view,           TRUE,  FALSE, N_("open file in new window") },
        { NULL, "--list-clear",         gr_list_clear,          FALSE, FALSE, NULL },