edi/src/lib/edi_create.c

58 lines
1.5 KiB
C

#ifdef HAVE_CONFIG
# include "config.h"
#endif
#include <stdlib.h>
#include <sys/wait.h>
#include "Edi.h"
#include "edi_private.h"
static Eina_Bool
_edi_create_project_done(void *data, int type EINA_UNUSED, void *event EINA_UNUSED)
{
Edi_Create *create;
create = (Edi_Create *)data;
ecore_event_handler_del(create->handler);
create->callback(create->path, EINA_TRUE);
free(create->path);
free(data);
return ECORE_CALLBACK_DONE; // or ECORE_CALLBACK_PASS_ON
}
EAPI void
edi_create_project(const char *path, const char *name, const char *url,
const char *user, const char *email, Edi_Create_Cb func)
{
char script[PATH_MAX], fullpath[PATH_MAX];
char *cmd;
int cmdlen;
Edi_Create *data;
Ecore_Event_Handler *handler;
data = calloc(1, sizeof(Edi_Create));
handler = ecore_event_handler_add(ECORE_EXE_EVENT_DEL, _edi_create_project_done, data);
snprintf(script, sizeof(script), "%s/skeleton/eflprj", elm_app_data_dir_get()
);
snprintf(fullpath, sizeof(fullpath), "%s/%s", path, name);
data->path = strdup(fullpath);
data->callback = func;
data->handler = handler;
cmdlen = strlen(script) + 19 + strlen(path) + strlen(name) + strlen(url) + strlen(user) + strlen(email);
cmd = malloc(sizeof(char) * cmdlen);
snprintf(cmd, cmdlen, "%s \"%s\" \"%s\" \"%s\" \"%s\" \"%s\"",
script, fullpath, name, user, email, url);
INF("Creating project \"%s\" at path %s for %s<%s>\n", name, fullpath, user, email);
ecore_exe_run(cmd, data);
free(cmd);
}