Enlightenment CVS committal

Author  : jlzapata
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_fileman_file.c e_fileman_mime.c e_fileman_mime.h 
        e_fileman_smart.c 


Log Message:
efm:
- actions working, for test cases it only has: "edit with gimp", 
"play with xmms" and "enqueue on xmms". test it :)

===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_fileman_file.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -3 -r1.19 -r1.20
--- e_fileman_file.c    14 Feb 2006 00:40:57 -0000      1.19
+++ e_fileman_file.c    14 Feb 2006 02:32:13 -0000      1.20
@@ -398,6 +398,8 @@
    return 1;
 }
 
+
+/* FIXME get rid of this */
 EAPI int 
 e_fm_file_exec_with(E_Fm_File *file, char* exec_with)
 {
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_fileman_mime.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- e_fileman_mime.c    14 Feb 2006 00:40:57 -0000      1.1
+++ e_fileman_mime.c    14 Feb 2006 02:32:14 -0000      1.2
@@ -70,6 +70,7 @@
 
 static char * _e_fm_mime_suffix_get(char *filename);
 static void _e_fm_mime_action_append(E_Fm_Mime_Entry *entry, char 
*action_name);
+static char *_e_fm_mime_action_tokenizer(Evas_List *files, E_Fm_Mime_Action 
*action);
 
 static int init_count = 0;
 static Evas_List *entries = NULL;
@@ -313,16 +314,112 @@
      file->mime = (E_Fm_Mime_Entry*)entries->data;
 }
 
-/* will call the command of an @action for the list of @files */
-void
+E_Fm_Mime_Action *
+e_fm_mime_action_get_by_label(char *label)
+{
+   Evas_List *l;
+   E_Fm_Mime_Action *action = NULL;
+   
+   for(l = actions; l; l = l->next)
+     {
+       action = (E_Fm_Mime_Action*)l->data;
+       if(!strcmp(label,action->label))
+         break;
+     }
+   return action;
+}
+
+/* will call the command of an @action for the list of E_Fm_Files @files */
+int
 e_fm_mime_action_call(Evas_List *files, E_Fm_Mime_Action *action)
 {
-   printf("executing\n");
+   Ecore_Exe *exe;
+   char *command;
+
+   /* FIXME: use the e app execution mechanisms where possible so we can
+    * collect error output
+    */
+   command = _e_fm_mime_action_tokenizer(files,action);
+   printf("going to execute %s\n", command);
+   exe = ecore_exe_run(command, NULL);
+
+   if (!exe)
+     {
+       e_error_dialog_show(_("Run Error"),
+                           _("Enlightenment was unable to fork a child 
process:\n"
+                             "\n"
+                             "%s\n"
+                             "\n"),
+                           command);
+       return 0;
+     }
+   return 1;
 }
 
 
 /* subsystem functions */
 /***********************/
+static char*
+_e_fm_mime_action_tokenizer(Evas_List *files, E_Fm_Mime_Action *action)
+{
+   char *buf;
+   char *c;
+   int i, bsize,trans;
+   Evas_List *l;
+
+   buf = calloc(PATH_MAX,sizeof(char));
+   bsize = PATH_MAX;
+   i = 0;
+   trans = 0;
+   for(c = action->cmd; *c; c++)
+     {
+       if( i > bsize - 1)
+         {
+            bsize += PATH_MAX;
+            buf = realloc(buf,bsize);
+         }
+       if(trans)
+         {
+            char *astr = NULL;
+            if(*c == 'f')
+              {
+                 int i = 2;
+                 char *f = NULL;
+
+                 astr = calloc(PATH_MAX,sizeof(char));
+                 for(l = files; l; l = l->next)
+                   {
+                      E_Fm_File *file;
+                      
+                      file = (E_Fm_File *)l->data;
+                      sprintf(astr,"%s %s",astr,file->path);
+                      astr = realloc(astr,PATH_MAX*i);
+                      i++;
+                   }
+              }
+            if(!astr)
+              continue;
+            if(bsize < i + strlen(astr))
+              {
+                 bsize += strlen(astr) + 1;
+                 buf = realloc(buf,bsize);
+              }
+            buf[i-1] = '\0';
+            sprintf(buf, "%s%s", buf, astr);
+            i += strlen(astr) - 1;
+            trans = 0;
+            free(astr);
+            continue;
+         }
+       if(*c == '%')
+            trans = 1;
+       else
+            buf[i] = *c;
+       i++;
+     }
+   return buf;
+}
+
 
 static void
 _e_fm_mime_action_append(E_Fm_Mime_Entry *entry, char *action_name)
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_fileman_mime.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- e_fileman_mime.h    14 Feb 2006 00:40:57 -0000      1.1
+++ e_fileman_mime.h    14 Feb 2006 02:32:14 -0000      1.2
@@ -32,12 +32,13 @@
    int  multiple; /* support for multiple files at once */
 };
 
-EAPI int              e_fm_mime_init(void);
-EAPI void             e_fm_mime_shutdwon(void);
-EAPI void             e_fm_mime_set(E_Fm_File *file);
-EAPI void             e_fm_mime_action_call(Evas_List *files, E_Fm_Mime_Action 
*action);
-EAPI E_Fm_Mime_Entry *e_fm_mime_common(E_Fm_Mime_Entry *e1, E_Fm_Mime_Entry 
*e2);
-EAPI E_Fm_Mime_Entry *e_fm_mime_list(Evas_List *mis);
+EAPI int               e_fm_mime_init(void);
+EAPI void              e_fm_mime_shutdwon(void);
+EAPI void              e_fm_mime_set(E_Fm_File *file);
+EAPI int               e_fm_mime_action_call(Evas_List *files, 
E_Fm_Mime_Action *action);
+EAPI E_Fm_Mime_Entry  *e_fm_mime_common(E_Fm_Mime_Entry *e1, E_Fm_Mime_Entry 
*e2);
+EAPI E_Fm_Mime_Entry  *e_fm_mime_list(Evas_List *mis);
+EAPI E_Fm_Mime_Action *e_fm_mime_action_get_by_label(char *label);
 
 
 #endif
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_fileman_smart.c,v
retrieving revision 1.128
retrieving revision 1.129
diff -u -3 -r1.128 -r1.129
--- e_fileman_smart.c   14 Feb 2006 00:40:57 -0000      1.128
+++ e_fileman_smart.c   14 Feb 2006 02:32:14 -0000      1.129
@@ -3893,22 +3893,27 @@
 ;
 }
 
+/* callback when a mime action is clicked on the actions menu */
 static void                
 _e_fm_menu_actions(void *data, E_Menu *m, E_Menu_Item *mi)
 {
    E_Fm_Smart_Data *sd;
    E_Fm_Mime_Action *action;
    Evas_List *l;
+   Evas_List *files = NULL;
 
    sd = data;
    /* search for the action clicked */
-   for(l = sd->selection.mime; l; l = l->next)
+   action = e_fm_mime_action_get_by_label(mi->label);
+     /* get the list of files selected */
+   for(l = sd->selection.icons; l; l = l->next)
      {
-       action = (E_Fm_Mime_Action*)l->data;
-       if(!strcmp(action->label,mi->label))
-         break;
+       E_Fm_Icon *icon;
+
+       icon = (E_Fm_Icon *)l->data;
+       files = evas_list_append(files,icon->file);
      }
    /* execute the action on the files */
-
+   e_fm_mime_action_call(files,action);
 }
 




-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to