diff --git a/src/lib/edi_create.c b/src/lib/edi_create.c index d404b6c..3ba1be4 100644 --- a/src/lib/edi_create.c +++ b/src/lib/edi_create.c @@ -65,6 +65,7 @@ _edi_create_filter_file(Edi_Create *create, const char *path) const char *template; int length; + create->filters++; // TODO speed this up - pre-cache this filter! template = "sed -i \"s|\\${edi_name}|%s|g;s|\\${Edi_Name}|%s|g;s|\\${EDI_NAME}|%s|g;s|\\${Edi_User}|%s|ig;s|\\${Edi_Email}|%s|g;s|\\${Edi_Url}|$%s|g;s|\\${Edi_Year}|%d|g\" %s"; length = strlen(template) + (strlen(create->name) * 3) + strlen(create->user) + strlen(create->email) + strlen(create->url) + strlen(path) + 4 - 16 + 1; @@ -86,7 +87,8 @@ _edi_create_filter_file(Edi_Create *create, const char *path) free((void *) path); } -static void _edi_create_free_data() +static void +_edi_create_free_data() { Edi_Create *create; @@ -102,6 +104,12 @@ static void _edi_create_free_data() free(create); } +static void +_edi_create_done_cb(void *data EINA_UNUSED, Eio_File *file EINA_UNUSED) +{ + // we're using the filter processes to determine when we're done +} + static Eina_Bool _edi_create_project_done(void *data, int type EINA_UNUSED, void *event EINA_UNUSED) { @@ -116,6 +124,28 @@ _edi_create_project_done(void *data, int type EINA_UNUSED, void *event EINA_UNUS return ECORE_CALLBACK_DONE; // or ECORE_CALLBACK_PASS_ON } +static Eina_Bool +_edi_create_filter_file_done(void *data, int type EINA_UNUSED, void *event EINA_UNUSED) +{ + Edi_Create *create; + Ecore_Event_Handler *handler; + + create = (Edi_Create *)data; + + if (--create->filters > 0) + return ECORE_CALLBACK_PASS_ON; + + ecore_event_handler_del(create->handler); + + handler = ecore_event_handler_add(ECORE_EXE_EVENT_DEL, _edi_create_project_done, data); + create->handler = handler; + + chdir(create->path); + ecore_exe_run("git init && git add .", data); + + return ECORE_CALLBACK_PASS_ON; +} + static void _edi_create_move_done_cb(void *data, Eio_File *file EINA_UNUSED) { @@ -161,22 +191,6 @@ _edi_create_notify_cb(void *d, Eio_File *handler EINA_UNUSED, const Eio_Progress } } -static void -_edi_create_done_cb(void *d, Eio_File *file EINA_UNUSED) -{ - Edi_Create *data; - Ecore_Event_Handler *handler; - - data = (Edi_Create *) d; - - handler = ecore_event_handler_add(ECORE_EXE_EVENT_DEL, _edi_create_project_done, data); - data->handler = handler; - - chdir(data->path); - ecore_exe_run("git init && git add .", data); -} - - static void _edi_create_error_cb(void *data EINA_UNUSED, Eio_File *handler EINA_UNUSED, int error) @@ -191,6 +205,7 @@ edi_create_efl_project(const char *parentdir, const char *name, const char *url, { char source[PATH_MAX], dest[PATH_MAX]; Edi_Create *data; + Ecore_Event_Handler *handler; snprintf(source, sizeof(source), "%s/skeleton/eflproject", elm_app_data_dir_get()); snprintf(dest, sizeof(dest), "%s/%s", parentdir, name); @@ -207,6 +222,10 @@ edi_create_efl_project(const char *parentdir, const char *name, const char *url, data->callback = func; _edi_create_data = data; + data->filters = 0; + handler = ecore_event_handler_add(ECORE_EXE_EVENT_DEL, _edi_create_filter_file_done, data); + data->handler = handler; + eio_dir_copy(source, dest, NULL, _edi_create_notify_cb, _edi_create_done_cb, _edi_create_error_cb, data); } diff --git a/src/lib/edi_create.h b/src/lib/edi_create.h index 7800451..2ec2ef4 100644 --- a/src/lib/edi_create.h +++ b/src/lib/edi_create.h @@ -21,6 +21,8 @@ typedef struct _Edi_Create Edi_Create_Cb callback; Ecore_Event_Handler *handler; + + int filters; } Edi_Create; /**