nikawhite pushed a commit to branch master.

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

commit 9cb767792cfa6d9ca2681fd0e4e85f5e869f78db
Author: Mykyta Biliavskyi <m.biliavs...@samsung.com>
Date:   Tue Aug 9 17:46:15 2016 +0300

    Project manager: add submodule project_manager_export_edc.
    
    New submodule works on exporting current project to edc format.
    Based on Ecore_Thread.
---
 src/bin/Makefile.am                                |   1 +
 src/bin/project_manager/project_manager.c          | 108 +++--------------
 .../project_manager/project_manager_export_edc.c   | 131 +++++++++++++++++++++
 src/bin/project_manager/project_manager_private.h  |  15 +++
 4 files changed, 165 insertions(+), 90 deletions(-)

diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am
index ee69ca8..ae766c2 100644
--- a/src/bin/Makefile.am
+++ b/src/bin/Makefile.am
@@ -69,6 +69,7 @@ libete_a_SOURCES = \
 ../../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/project_manager_export_edc.c \
 ../../src/bin/project_manager/resource_manager.c \
 ../../src/bin/logger/logger.c \
 ../../src/bin/config/config.c \
diff --git a/src/bin/project_manager/project_manager.c 
b/src/bin/project_manager/project_manager.c
index 39b6cae..a2ce354 100644
--- a/src/bin/project_manager/project_manager.c
+++ b/src/bin/project_manager/project_manager.c
@@ -208,7 +208,7 @@ _ecore_exe_edje_exe(void *data)
    return NULL;
 }
 
-static Eina_Bool
+Eina_Bool
 _build_script_write(const char *path)
 {
    FILE *f;
@@ -864,7 +864,7 @@ pm_project_resource_export(Project *pro __UNUSED__, const 
char* dir_path __UNUSE
    return false;
 }
 
-static void
+void
 _external_resources_export(Eina_List *resources, const char *dst)
 {
    Eina_Strbuf *buf;
@@ -1041,84 +1041,6 @@ pm_group_source_code_export(Project *project,
      }
 }
 
-static Eina_Bool
-_project_src_export(const char *path)
-{
-   char *code;
-   Eina_Strbuf *buf;
-   FILE *f;
-
-   buf = eina_strbuf_new();
-   /* create a folder for collect the source files */
-   ecore_file_mkdir(path);
-   eina_strbuf_reset(buf);
-
-   /* create and open edc file for print the source code of collection 
(project) */
-   eina_strbuf_append_printf(buf, "%s/generated.edc", path);
-   f = fopen(eina_strbuf_string_get(buf), "w");
-   if (!f)
-     {
-        ERR("Could't open file '%s'", eina_strbuf_string_get(buf))
-        return false;
-     }
-   eina_strbuf_reset(buf);
-
-   /* get the full source code of given project */
-   THREAD_CONTEXT_SWITCH_BEGIN;
-   code = edje_edit_full_source_generate(worker.project->global_object);
-   THREAD_CONTEXT_SWITCH_END;
-
-   fputs(code, f);
-   free(code);
-   if (f) fclose(f);
-
-   /* export resource */
-   if (worker.project->images)
-     {
-        eina_strbuf_append_printf(buf, "%s/images/", path);
-        ecore_file_mkdir(eina_strbuf_string_get(buf));
-        _external_resources_export(worker.project->images, 
eina_strbuf_string_get(buf));
-        eina_strbuf_reset(buf);
-     }
-   if (worker.project->sounds)
-     {
-        eina_strbuf_append_printf(buf, "%s/sounds/", path);
-        ecore_file_mkdir(eina_strbuf_string_get(buf));
-        _external_resources_export(worker.project->sounds, 
eina_strbuf_string_get(buf));
-        eina_strbuf_reset(buf);
-     }
-   if (worker.project->fonts)
-     {
-        eina_strbuf_append_printf(buf, "%s/fonts/", path);
-        ecore_file_mkdir(eina_strbuf_string_get(buf));
-        _external_resources_export(worker.project->fonts, 
eina_strbuf_string_get(buf));
-        eina_strbuf_reset(buf);
-     }
-
-   eina_strbuf_reset(buf);
-   eina_strbuf_append_printf(buf, "%s/build.sh", path);
-   _build_script_write(eina_strbuf_string_get(buf));
-
-   eina_strbuf_free(buf);
-   return true;
-}
-
-static void *
-_source_code_export(void *data __UNUSED__, Eina_Thread *thread __UNUSED__)
-{
-   Eina_Strbuf *buf;
-
-   PROGRESS_SEND(_("Generate source code ..."));
-   buf = eina_strbuf_new();
-   eina_strbuf_append_printf(buf, "%s/%s", worker.path, worker.project->name);
-   if (_project_src_export(eina_strbuf_string_get(buf)))
-     END_SEND(PM_PROJECT_SUCCESS)
-   else
-     END_SEND(PM_PROJECT_ERROR)
-   eina_strbuf_free(buf);
-   return NULL;
-}
-
 void
 pm_project_source_code_export(Project *project,
                               const char *path,
@@ -1129,15 +1051,21 @@ pm_project_source_code_export(Project *project,
    assert(project != NULL);
    assert(path != NULL);
 
-   WORKER_CREATE(func_progress, func_end, data, project,
-                 NULL, path, NULL, NULL, data, NULL);
+   Project_Thread *ptd;
+   ptd = mem_calloc(1, sizeof(Project_Thread));
+   ptd->path = eina_stringshare_add(path);
+   ptd->project = project;
+   ptd->func_progress = func_progress;
+   ptd->func_end = func_end;
+   ptd->data = (void *)data;
+   eina_lock_new(&ptd->mutex);
+
+   ecore_thread_feedback_run(_project_source_code_export_feedback_job,
+                             _project_source_code_export_feedback_cb,
+                             _project_source_code_export_end_cb,
+                             _project_source_code_export_cancel_cb, ptd,
+                             true);
 
-   if (!eina_thread_create(&worker.thread, EINA_THREAD_URGENT, -1,
-                           (void *)_source_code_export, NULL))
-     {
-        ERR("System error: can't create thread");
-        abort();
-     }
 }
 
 static void *
@@ -1154,11 +1082,12 @@ _release_export(void *data __UNUSED__,
    PROGRESS_SEND(_("Export to file '%s'"), worker.edj);
 
    eina_file_mkdtemp("eflete_build_XXXXXX", &tmp_dirname);
-   if (!_project_src_export(tmp_dirname))
+/*   if (!_project_src_export(tmp_dirname))
      {
         END_SEND(PM_PROJECT_ERROR)
         goto exit0;
      }
+     */
    if (worker.func_progress)
      {
         cb_msg_stdout = ecore_event_handler_add(ECORE_EXE_EVENT_DATA, 
_exe_data, NULL);
@@ -1196,7 +1125,6 @@ _release_export(void *data __UNUSED__,
 
 exit1:
    eina_strbuf_free(cmd);
-exit0:
    ecore_file_recursive_rm(tmp_dirname);
    eina_tmpstr_del(tmp_dirname);
    return NULL;
diff --git a/src/bin/project_manager/project_manager_export_edc.c 
b/src/bin/project_manager/project_manager_export_edc.c
new file mode 100644
index 0000000..145958c
--- /dev/null
+++ b/src/bin/project_manager/project_manager_export_edc.c
@@ -0,0 +1,131 @@
+/*
+ * 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"
+
+/* Export source from a single group */
+
+void
+_project_source_code_export_cancel_cb(void *data, Ecore_Thread *th __UNUSED__)
+{
+   Project_Thread *ptd = (Project_Thread *)data;
+   ptd->result = PM_PROJECT_ERROR;
+   _end_send(ptd);
+}
+
+void
+_project_source_code_export_end_cb(void *data,
+                                   Ecore_Thread *th __UNUSED__)
+{
+   Project_Thread *ptd = (Project_Thread *)data;
+   ptd->result = PM_PROJECT_SUCCESS;
+   _end_send(ptd);
+}
+
+void
+_project_source_code_export_feedback_cb(void *data,
+                                        Ecore_Thread *th __UNUSED__,
+                                        void *msg_data)
+{
+   Project_Thread *ptd = (Project_Thread *)data;
+   Eina_Stringshare *message = (Eina_Stringshare *)msg_data;
+   assert(message != NULL);
+
+   ptd->func_progress(NULL, message);
+   eina_stringshare_del(message);
+}
+
+void
+_project_source_code_export_feedback_job(void *data, Ecore_Thread *th)
+{
+   Project_Thread *ptd = (Project_Thread *)data;
+   if (!eina_lock_take(&ptd->mutex))
+     {
+       ERR("Failed access data");
+       ecore_thread_cancel(th);
+       return;
+     }
+
+   Eina_Stringshare *message = eina_stringshare_printf(_("Generate source code 
..."));
+   ecore_thread_feedback(th, message);
+
+   Eina_Stringshare *path  =  eina_stringshare_printf("%s/%s", ptd->path, 
ptd->project->name);
+
+   char *code;
+   Eina_Strbuf *buf;
+   FILE *f;
+
+   buf = eina_strbuf_new();
+   /* create a folder for collect the source files */
+   ecore_file_mkdir(path);
+   eina_strbuf_reset(buf);
+
+   /* create and open edc file for print the source code of collection 
(project) */
+   eina_strbuf_append_printf(buf, "%s/generated.edc", path);
+   f = fopen(eina_strbuf_string_get(buf), "w");
+   if (!f)
+     {
+        ERR("Could't open file '%s'", eina_strbuf_string_get(buf));
+        eina_strbuf_free(buf);
+        eina_lock_release(&ptd->mutex);
+        ecore_thread_cancel(th);
+        return;
+     }
+   eina_strbuf_reset(buf);
+
+   /* get the full source code of given project */
+   TODO("Move this into thread, because it is really laggy");
+   ecore_thread_main_loop_begin();
+   code = edje_edit_full_source_generate(ptd->project->global_object);
+   ecore_thread_main_loop_end();
+
+   fputs(code, f);
+   free(code);
+   if (f) fclose(f);
+
+   /* export resource */
+   if (ptd->project->images)
+     {
+        eina_strbuf_append_printf(buf, "%s/images/", path);
+        ecore_file_mkdir(eina_strbuf_string_get(buf));
+        _external_resources_export(ptd->project->images, 
eina_strbuf_string_get(buf));
+        eina_strbuf_reset(buf);
+     }
+   if (ptd->project->sounds)
+     {
+        eina_strbuf_append_printf(buf, "%s/sounds/", path);
+        ecore_file_mkdir(eina_strbuf_string_get(buf));
+        _external_resources_export(ptd->project->sounds, 
eina_strbuf_string_get(buf));
+        eina_strbuf_reset(buf);
+     }
+   if (ptd->project->fonts)
+     {
+        eina_strbuf_append_printf(buf, "%s/fonts/", path);
+        ecore_file_mkdir(eina_strbuf_string_get(buf));
+        _external_resources_export(ptd->project->fonts, 
eina_strbuf_string_get(buf));
+        eina_strbuf_reset(buf);
+     }
+
+   eina_strbuf_reset(buf);
+   eina_strbuf_append_printf(buf, "%s/build.sh", path);
+   _build_script_write(eina_strbuf_string_get(buf));
+
+   eina_strbuf_free(buf);
+   eina_lock_release(&ptd->mutex);
+}
diff --git a/src/bin/project_manager/project_manager_private.h 
b/src/bin/project_manager/project_manager_private.h
index 451b2b1..53dd9a3 100644
--- a/src/bin/project_manager/project_manager_private.h
+++ b/src/bin/project_manager/project_manager_private.h
@@ -162,6 +162,16 @@ void _copy_meta_data_to_pro(Project_Thread *ptd);
  */
 Project *_project_files_create(Project_Thread *ptd);
 
+/* Export all items inside list resources into files.
+ * Exported files will be storet on dst destination
+ */
+void _external_resources_export(Eina_List *resources, const char *dst);
+
+/* Prepare build.sh script, that contanin
+ * instructions howto compile edc source back to edj file
+ */
+Eina_Bool _build_script_write(const char *path);
+
 /*------- Group tree load functions ---------*/
 void _gm_group_load_cancel_cb(void *data, Ecore_Thread *th);
 void _gm_group_load_end_cb(void *data, Ecore_Thread *th);
@@ -190,4 +200,9 @@ void _project_import_edj(void *data);
 /*------- Import form edc functions -----*/
 void _project_import_edc(Project_Thread *ptd);
 
+/*------- Export source -----------------*/
+void _project_source_code_export_cancel_cb(void *data, Ecore_Thread *th);
+void _project_source_code_export_end_cb(void *data, Ecore_Thread *th);
+void _project_source_code_export_feedback_cb(void *data, Ecore_Thread *th, 
void *msg_data);
+void _project_source_code_export_feedback_job(void *data, Ecore_Thread *th);
 #endif

-- 


Reply via email to