nikawhite pushed a commit to branch master.

http://git.enlightenment.org/tools/eflete.git/commit/?id=d38cb1ebc1e095737528acc9767f2b4ed286ab66

commit d38cb1ebc1e095737528acc9767f2b4ed286ab66
Author: Mykyta Biliavskyi <m.biliavs...@samsung.com>
Date:   Tue Aug 9 16:43:00 2016 +0300

    Project manager: add submodule project_manager_import_edc.
    
    New submodule response to import edc project into Eflete.
    Used ecore_exe_pipe with monitoring returned status from edje_cc app.
---
 src/bin/Makefile.am                                |   1 +
 src/bin/project_manager/project_manager.c          |  81 +++-------------
 .../project_manager/project_manager_import_edc.c   | 102 +++++++++++++++++++++
 src/bin/project_manager/project_manager_private.h  |   6 +-
 4 files changed, 117 insertions(+), 73 deletions(-)

diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am
index f8cb0cd..ee69ca8 100644
--- a/src/bin/Makefile.am
+++ b/src/bin/Makefile.am
@@ -67,6 +67,7 @@ libete_a_SOURCES = \
 ../../src/bin/project_manager/project_manager.c \
 ../../src/bin/project_manager/project_manager_open.c \
 ../../src/bin/project_manager/project_manager_import_edj.c \
+../../src/bin/project_manager/project_manager_import_edc.c \
 ../../src/bin/project_manager/project_manager_export_resources.c \
 ../../src/bin/project_manager/resource_manager.c \
 ../../src/bin/logger/logger.c \
diff --git a/src/bin/project_manager/project_manager.c 
b/src/bin/project_manager/project_manager.c
index 1d853d0..6a93791 100644
--- a/src/bin/project_manager/project_manager.c
+++ b/src/bin/project_manager/project_manager.c
@@ -558,68 +558,6 @@ _exe_data(void *data __UNUSED__,
    return ECORE_CALLBACK_PASS_ON;
 }
 
-static void *
-_project_import_edc(void *data,
-                    Eina_Thread *thread __UNUSED__)
-{
-//   Eina_Bool send_end_child;
-   Eina_Bool send_end = (data) ? (*(Eina_Bool *)data) : true;
-
-   Eina_Tmpstr *tmp_dirname;
-   Ecore_Event_Handler *cb_msg_stdout = NULL,
-                       *cb_msg_stderr = NULL;
-   int edje_cc_res = 0, waitpid_res = 0;
-
-   PROGRESS_SEND(_("Start import '%s' file as new project"), worker.edc);
-   PROGRESS_SEND(_("Creating a specifiec file and folders"));
-   if (worker.func_progress)
-     {
-        cb_msg_stdout = ecore_event_handler_add(ECORE_EXE_EVENT_DATA, 
_exe_data, NULL);
-        cb_msg_stderr = ecore_event_handler_add(ECORE_EXE_EVENT_ERROR, 
_exe_data, NULL);
-     }
-   eina_file_mkdtemp("eflete_build_XXXXXX", &tmp_dirname);
-   worker.edj = eina_stringshare_printf("%s/out.edj", tmp_dirname);
-   Edje_Exe_Data *edje_cc_data = mem_malloc(sizeof(Edje_Exe_Data));
-   edje_cc_data->cmd = eina_stringshare_printf("edje_cc -v %s %s %s",
-                                               worker.edc,
-                                               worker.edj,
-                                               worker.build_options);
-   edje_cc_data->flags  = ECORE_EXE_PIPE_READ |
-      ECORE_EXE_PIPE_READ_LINE_BUFFERED |
-      ECORE_EXE_PIPE_ERROR |
-      ECORE_EXE_PIPE_ERROR_LINE_BUFFERED;
-   THREAD_TESTCANCEL;
-   ecore_main_loop_thread_safe_call_sync(_ecore_exe_edje_exe, edje_cc_data);
-   THREAD_TESTCANCEL;
-   waitpid_res = waitpid(edje_cc_data->exe_pid, &edje_cc_res, 0);
-   eina_stringshare_del(edje_cc_data->cmd);
-   free(edje_cc_data);
-   if (worker.func_progress)
-     {
-        ecore_event_handler_del(cb_msg_stdout);
-        ecore_event_handler_del(cb_msg_stderr);
-     }
-
-   if ((waitpid_res == -1) ||
-       (WIFEXITED(edje_cc_res) && (WEXITSTATUS(edje_cc_res) != 0 )))
-     {
-        END_SEND(PM_PROJECT_ERROR);
-        return NULL;
-     }
-
-//   send_end_child = false;
-//   _project_import_edj(&send_end_child, NULL);
-
-   PROGRESS_SEND(_("Removing temporary files..."));
-   ecore_file_recursive_rm(tmp_dirname);
-   eina_tmpstr_del(tmp_dirname);
-   PROGRESS_SEND(_("Done."));
-
-   if (send_end) END_SEND(PM_PROJECT_SUCCESS)
-
-   return NULL;
-}
-
 void
 pm_project_import_edc(const char *name,
                       const char *path,
@@ -633,15 +571,18 @@ pm_project_import_edc(const char *name,
    assert(path != NULL);
    assert(edc != NULL);
 
-   WORKER_CREATE(func_progress, func_end, data, NULL,
-                 name, path, NULL, edc, import_options, NULL);
+   Project_Thread *ptd;
+   ptd = mem_calloc(1, sizeof(Project_Thread));
+   ptd->func_progress = func_progress;
+   ptd->func_end = func_end;
+   ptd->data = (void *)data;
+   ptd->result = PM_PROJECT_LAST;
+   ptd->name = eina_stringshare_add(name);
+   ptd->path = eina_stringshare_add(path);
+   ptd->edc = eina_stringshare_add(edc);
+   ptd->build_options = eina_stringshare_add(import_options);
 
-   if (!eina_thread_create(&worker.thread, EINA_THREAD_URGENT, -1,
-                           (void *)_project_import_edc, NULL))
-     {
-        ERR("System error: can't create thread");
-        abort();
-     }
+   _project_import_edc(ptd);
 }
 
 Eina_Bool
diff --git a/src/bin/project_manager/project_manager_import_edc.c 
b/src/bin/project_manager/project_manager_import_edc.c
new file mode 100644
index 0000000..88434bb
--- /dev/null
+++ b/src/bin/project_manager/project_manager_import_edc.c
@@ -0,0 +1,102 @@
+/*
+ * Efl Edje Theme Editor
+ * Copyright (C) 2013-2016 Samsung Electronics.
+ *
+ * This file is part of Edje Theme Editor.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; If not, see www.gnu.org/licenses/lgpl.html.
+ */
+#include "project_manager.h"
+#include "project_manager_private.h"
+
+
+static Eina_Bool
+_data_from_edje_cc(void *data __UNUSED__,
+                   int type __UNUSED__,
+                   void *event_info)
+{
+   int i = 0;
+   Ecore_Exe_Event_Data *edje_cc_msg = (Ecore_Exe_Event_Data *)event_info;
+   Edje_Exe_Data *edje_cc_data = (Edje_Exe_Data*)data;
+   Project_Thread *ptd = (Project_Thread *)edje_cc_data->data;
+   if (!edje_cc_msg) return ECORE_CALLBACK_DONE;
+
+   for (i = 0; edje_cc_msg->lines[i].line != NULL; i++)
+         ptd->func_progress(NULL, edje_cc_msg->lines[i].line);
+
+   return ECORE_CALLBACK_DONE;
+}
+
+static Eina_Bool
+_finish_from_edje_cc(void *data,
+                     int type __UNUSED__,
+                     void *event_info __UNUSED__)
+{
+   Edje_Exe_Data *edje_cc_data = (Edje_Exe_Data *)data;
+   Project_Thread *ptd = (Project_Thread *)edje_cc_data->data;
+   Ecore_Exe_Event_Del *edje_cc_exit = (Ecore_Exe_Event_Del *)event_info;
+
+   eina_stringshare_del(edje_cc_data->cmd);
+   free(edje_cc_data);
+   if (edje_cc_exit->exit_code != 0)
+     {
+        ptd->result = PM_PROJECT_ERROR;
+        _end_send(ptd);
+        return ECORE_CALLBACK_DONE;
+     }
+
+   if (ptd->func_progress)
+     {
+        Eina_Stringshare *msg = eina_stringshare_printf(_("Data for importing 
prepared"));
+        ptd->func_progress(NULL, msg);
+        eina_stringshare_del(msg);
+     }
+
+   _project_import_edj(ptd);
+
+   return ECORE_CALLBACK_DONE;
+}
+
+void
+_project_import_edc(Project_Thread *ptd)
+{
+   assert(ptd != NULL);
+
+   Eina_Stringshare *msg = eina_stringshare_printf(_("Start import '%s' file 
as new project"), ptd->edc);
+   ptd->func_progress(NULL, msg);
+   eina_stringshare_del(msg);
+
+   eina_file_mkdtemp("eflete_build_XXXXXX", &ptd->tmp_dirname);
+   ptd->edj = eina_stringshare_printf("%s/out.edj", ptd->tmp_dirname);
+   Edje_Exe_Data *edje_cc_data = mem_malloc(sizeof(Edje_Exe_Data));
+   edje_cc_data->cmd = eina_stringshare_printf("edje_cc -v %s %s %s",
+                                               ptd->edc,
+                                               ptd->edj,
+                                               ptd->build_options);
+   edje_cc_data->flags  = ECORE_EXE_PIPE_READ |
+      ECORE_EXE_PIPE_READ_LINE_BUFFERED |
+      ECORE_EXE_PIPE_ERROR |
+      ECORE_EXE_PIPE_ERROR_LINE_BUFFERED;
+   edje_cc_data->data = (void *)ptd;
+
+   edje_cc_data->exe_cmd = ecore_exe_pipe_run(edje_cc_data->cmd, 
edje_cc_data->flags, NULL);
+   edje_cc_data->exe_pid = ecore_exe_pid_get(edje_cc_data->exe_cmd);
+
+   ptd->data_handler = ecore_event_handler_add(ECORE_EXE_EVENT_DATA, 
_data_from_edje_cc, edje_cc_data);
+   ptd->error_handler = ecore_event_handler_add(ECORE_EXE_EVENT_ERROR, 
_data_from_edje_cc, edje_cc_data);
+   ptd->del_handler = ecore_event_handler_add(ECORE_EXE_EVENT_DEL, 
_finish_from_edje_cc, edje_cc_data);
+
+
+   return;
+}
+
diff --git a/src/bin/project_manager/project_manager_private.h 
b/src/bin/project_manager/project_manager_private.h
index 425c5fa..db642cc 100644
--- a/src/bin/project_manager/project_manager_private.h
+++ b/src/bin/project_manager/project_manager_private.h
@@ -180,14 +180,14 @@ void _resources_export_cancel_cb(void *data, Ecore_Thread 
*th);
 
 /*------- Open Project functions --------*/
 void _project_open_cancel_cb(void *data, Ecore_Thread *th);
-
 void _project_open_end_cb(void *data, Ecore_Thread *th);
-
 void _project_open_feedback_cb(void *data, Ecore_Thread *th, void *msg_data);
-
 void _project_open_feedback_job(void *data, Ecore_Thread *th);
 
 /*------- Import form edj functions -----*/
 void _project_import_edj(void *data);
 
+/*------- Import form edc functions -----*/
+void _project_import_edc(Project_Thread *ptd);
+
 #endif

-- 


Reply via email to