[gimp] plug-ins: xdg-email is a runtime dependency.



commit 05f7726eab4e23fde5e604f0d2571ffbaec498af
Author: Jehan <jehan girinstud io>
Date:   Fri May 27 20:50:35 2016 +0200

    plug-ins: xdg-email is a runtime dependency.

 configure.ac           |   25 ++-----
 plug-ins/common/mail.c |  200 +++++++++++++++++++++++++++--------------------
 2 files changed, 122 insertions(+), 103 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 9913437..f6ef129 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1855,26 +1855,15 @@ if test "x$with_sendmail" != "x" && test "x$with_sendmail" != "xno"; then
   fi
 fi
 
-AC_ARG_WITH(xdg_email,[  --with-xdg-email[=DIR]   set xdg-email command location])
-
-have_xdg_email=no
-if test "x$have_sendmail" = xno && test "x$with_xdg_email" != "xno"; then
-  if test "x$with_xdg_email" != "xyes" && test "x$with_sendmail" != "x"; then
-    xdg_email_path=$with_xdg_email
-  else
-    xdg_email_path=$PATH
-  fi
-
-  AC_PATH_PROG(XDG_EMAIL, xdg-email, , $xdg_email_path)
+if test "x$have_sendmail" = xno; then
+  AC_PATH_PROG(XDG_EMAIL, xdg-email)
   if test "x$XDG_EMAIL" != "x"; then
     have_email="yes (xdg-email)"
-    have_xdg_email=yes
-    AC_DEFINE_UNQUOTED(XDG_EMAIL, "$XDG_EMAIL",
-                       [The email composer search tool used by the mail plug-in.])
-  elif test "x$with_xdg_email" != "x"; then
-    AC_MSG_ERROR([
-*** Check for xdg-email failed, though it was explicitly enabled with --with-xdg-email.
-*** If you know where it is installed, you may configure --with-xdg-email=/path/to/bin/.])
+  else
+    # Not having xdg-email at runtime is not a blocker.
+    # But let's inform the builder that for the feature to be available,
+    # xdg-email is a runtime dependency.
+    have_email="needs runtime dependency: xdg-email"
   fi
 fi
 
diff --git a/plug-ins/common/mail.c b/plug-ins/common/mail.c
index 7ef1372..a7ce838 100644
--- a/plug-ins/common/mail.c
+++ b/plug-ins/common/mail.c
@@ -58,32 +58,36 @@ typedef struct
 } m_info;
 
 
-static void               query                (void);
-static void               run                  (const gchar      *name,
-                                                gint              nparams,
-                                                const GimpParam  *param,
-                                                gint             *nreturn_vals,
-                                                GimpParam       **return_vals);
-
-static GimpPDBStatusType  send_image           (const gchar      *filename,
-                                                gint32            image_ID,
-                                                gint32            drawable_ID,
-                                                gint32            run_mode);
-
-static gboolean           send_dialog          (void);
-static void               mail_entry_callback  (GtkWidget        *widget,
-                                                gchar            *data);
-static void               mesg_body_callback   (GtkTextBuffer    *buffer,
-                                                gpointer          data);
-
-static gboolean           valid_file           (const gchar      *filename);
-static void               create_headers       (FILE             *mailpipe);
-static gchar            * find_extension       (const gchar      *filename);
-static gboolean           to64                 (const gchar      *filename,
-                                                FILE             *outfile,
-                                                GError          **error);
-static FILE             * sendmail_pipe        (gchar           **cmd,
-                                                GPid             *pid);
+static void               query                   (void);
+static void               run                     (const gchar      *name,
+                                                   gint              nparams,
+                                                   const GimpParam  *param,
+                                                   gint             *nreturn_vals,
+                                                   GimpParam       **return_vals);
+
+static GimpPDBStatusType  send_image              (const gchar      *filename,
+                                                   gint32            image_ID,
+                                                   gint32            drawable_ID,
+                                                   gint32            run_mode);
+
+static gboolean           send_dialog             (void);
+static void               mail_entry_callback     (GtkWidget        *widget,
+                                                   gchar            *data);
+static void               mesg_body_callback      (GtkTextBuffer    *buffer,
+                                                   gpointer          data);
+
+static gboolean           valid_file              (const gchar      *filename);
+static gchar            * find_extension          (const gchar      *filename);
+
+#ifdef SENDMAIL
+static gchar            * sendmail_content_type   (const gchar *filename)
+static void               sendmail_create_headers (FILE             *mailpipe);
+static gboolean           sendmail_to64           (const gchar      *filename,
+                                                   FILE             *outfile,
+                                                   GError          **error);
+static FILE             * sendmail_pipe           (gchar           **cmd,
+                                                   GPid             *pid);
+#endif
 
 
 const GimpPlugInInfo PLUG_IN_INFO =
@@ -120,13 +124,38 @@ query (void)
     { GIMP_PDB_INT32,    "encapsulation", "ignored" }
   };
 
-#if defined XDG_EMAIL || defined SENDMAIL
+#ifndef SENDMAIL /* xdg-email */
+  /* check if xdg-email is installed
+   * TODO: allow setting the location of the executable in preferences
+   */
+  gchar    *argv[]         = { "xdg-email", "--version", NULL };
+  gboolean  have_xdg_email = FALSE;
+
+  if (g_spawn_sync (NULL,
+                    argv,
+                    NULL,
+                    G_SPAWN_STDERR_TO_DEV_NULL |
+                    G_SPAWN_SEARCH_PATH,
+                    NULL,
+                    NULL,
+                    NULL,
+                    NULL,
+                    NULL,
+                    NULL))
+    {
+      have_xdg_email = TRUE;
+    }
+
+  if (! have_xdg_email)
+    return;
+#endif
+
   gimp_install_procedure (PLUG_IN_PROC,
                           N_("Send the image by email"),
-#ifdef XDG_EMAIL
-                          "The preferred email composer is used to send emails and must be properly 
configured.",
-#else /* sendmail */
+#ifdef SENDMAIL
                           "Sendmail is used to send emails and must be properly configured.",
+#else /* xdg-email */
+                          "The preferred email composer is used to send emails and must be properly 
configured.",
 #endif
                           "Adrian Likins, Reagan Blundell",
                           "Adrian Likins, Reagan Blundell, Daniel Risacher, "
@@ -141,7 +170,6 @@ query (void)
   gimp_plugin_menu_register (PLUG_IN_PROC, "<Image>/File/Send");
   gimp_plugin_icon_register (PLUG_IN_PROC, GIMP_ICON_TYPE_ICON_NAME,
                              (const guint8 *) GTK_STOCK_EDIT);
-#endif
 }
 
 static void
@@ -254,7 +282,7 @@ send_image (const gchar *filename,
   GimpPDBStatusType  status = GIMP_PDB_SUCCESS;
   gchar             *ext;
   gchar             *tmpname;
-#ifdef XDG_EMAIL
+#ifndef SENDMAIL /* xdg-email */
   gchar             *mailcmd[9];
   gchar             *filepath = NULL;
   GFile             *tmp_dir  = NULL;
@@ -283,7 +311,7 @@ send_image (const gchar *filename,
       goto error;
     }
 
-#ifdef XDG_EMAIL
+#ifndef SENDMAIL /* xdg-email */
   /* From xdg-email doc:
    * "Some e-mail applications require the file to remain present
    * after xdg-email returns."
@@ -336,7 +364,7 @@ send_image (const gchar *filename,
                                mail_info.filename, NULL);
   g_rename (tmpname, filepath);
 
-  mailcmd[0] = XDG_EMAIL;
+  mailcmd[0] = "xdg-email";
   mailcmd[1] = "--attach";
   mailcmd[2] = filepath;
   mailcmd[3] = "--subject";
@@ -347,7 +375,7 @@ send_image (const gchar *filename,
   mailcmd[8] = NULL;
 
   if (! g_spawn_async (NULL, mailcmd, NULL,
-                       G_SPAWN_DEFAULT,
+                       G_SPAWN_SEARCH_PATH,
                        NULL, NULL, NULL, &error))
     {
       g_message ("%s", error->message);
@@ -561,51 +589,6 @@ valid_file (const gchar *filename)
 }
 
 static gchar *
-find_content_type (const gchar *filename)
-{
-  /* This function returns a MIME Content-type: value based on the
-     filename it is given.  */
-  const gchar *type_mappings[20] =
-  {
-    "gif" , "image/gif",
-    "jpg" , "image/jpeg",
-    "jpeg", "image/jpeg",
-    "tif" , "image/tiff",
-    "tiff", "image/tiff",
-    "png" , "image/png",
-    "g3"  , "image/g3fax",
-    "ps"  , "application/postscript",
-    "eps" , "application/postscript",
-    NULL, NULL
-  };
-
-  gchar *ext;
-  gint   i;
-
-  ext = find_extension (filename);
-
-  if (!ext)
-    {
-      return g_strdup ("application/octet-stream");
-    }
-
-  i = 0;
-  ext += 1;
-
-  while (type_mappings[i])
-    {
-      if (g_ascii_strcasecmp (ext, type_mappings[i]) == 0)
-        {
-          return g_strdup (type_mappings[i + 1]);
-        }
-
-      i += 2;
-    }
-
-  return g_strdup_printf ("image/x-%s", ext);
-}
-
-static gchar *
 find_extension (const gchar *filename)
 {
   gchar *filename_copy;
@@ -665,8 +648,54 @@ mesg_body_callback (GtkTextBuffer *buffer,
   mesg_body = gtk_text_buffer_get_text (buffer, &start_iter, &end_iter, FALSE);
 }
 
+#ifdef SENDMAIL
+static gchar *
+sendmail_content_type (const gchar *filename)
+{
+  /* This function returns a MIME Content-type: value based on the
+     filename it is given.  */
+  const gchar *type_mappings[20] =
+  {
+    "gif" , "image/gif",
+    "jpg" , "image/jpeg",
+    "jpeg", "image/jpeg",
+    "tif" , "image/tiff",
+    "tiff", "image/tiff",
+    "png" , "image/png",
+    "g3"  , "image/g3fax",
+    "ps"  , "application/postscript",
+    "eps" , "application/postscript",
+    NULL, NULL
+  };
+
+  gchar *ext;
+  gint   i;
+
+  ext = find_extension (filename);
+
+  if (!ext)
+    {
+      return g_strdup ("application/octet-stream");
+    }
+
+  i = 0;
+  ext += 1;
+
+  while (type_mappings[i])
+    {
+      if (g_ascii_strcasecmp (ext, type_mappings[i]) == 0)
+        {
+          return g_strdup (type_mappings[i + 1]);
+        }
+
+      i += 2;
+    }
+
+  return g_strdup_printf ("image/x-%s", ext);
+}
+
 static void
-create_headers (FILE *mailpipe)
+sendmail_create_headers (FILE *mailpipe)
 {
   /* create all the mail header stuff. Feel free to add your own */
   /* It is advisable to leave the X-Mailer header though, as     */
@@ -695,7 +724,7 @@ create_headers (FILE *mailpipe)
   fprintf (mailpipe, "\n\n");
 
   {
-    gchar *content = find_content_type (mail_info.filename);
+    gchar *content = sendmail_content_type (mail_info.filename);
 
     fprintf (mailpipe, "--GUMP-MIME-boundary\n");
     fprintf (mailpipe, "Content-type: %s\n", content);
@@ -709,9 +738,9 @@ create_headers (FILE *mailpipe)
 }
 
 static gboolean
-to64 (const gchar  *filename,
-      FILE         *outfile,
-      GError      **error)
+sendmail_to64 (const gchar  *filename,
+               FILE         *outfile,
+               GError      **error)
 {
   GMappedFile  *infile;
   const guchar *in;
@@ -766,3 +795,4 @@ sendmail_pipe (gchar **cmd,
 
   return fdopen (fd, "wb");
 }
+#endif


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]