nikawhite pushed a commit to branch master.

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

commit 2dae2c31b5e50c432fc21cdd0a6a71b870bacd89
Author: Mykyta Biliavskyi <m.biliavs...@samsung.com>
Date:   Tue Aug 9 18:04:37 2016 +0300

    Project manager: update functionality for export group source.
    
    Moved to use Ecore_Thread.
---
 src/bin/project_manager/project_manager.c          | 124 ++--------------
 .../project_manager/project_manager_export_edc.c   | 160 ++++++++++++++++++++-
 src/bin/project_manager/project_manager_private.h  |  12 +-
 3 files changed, 184 insertions(+), 112 deletions(-)

diff --git a/src/bin/project_manager/project_manager.c 
b/src/bin/project_manager/project_manager.c
index a2ce354..75d9857 100644
--- a/src/bin/project_manager/project_manager.c
+++ b/src/bin/project_manager/project_manager.c
@@ -889,7 +889,7 @@ _external_resources_export(Eina_List *resources, const char 
*dst)
    eina_strbuf_free(buf);
 }
 
-static void
+void
 _external_resource_export(Eina_List *resources, Eina_Stringshare *name, const 
char *dst)
 {
    Eina_Strbuf *buf;
@@ -917,107 +917,6 @@ _external_resource_export(Eina_List *resources, 
Eina_Stringshare *name, const ch
    eina_strbuf_free(buf);
 }
 
-static void *
-_group_source_code_export(void *data, Eina_Thread *thread __UNUSED__)
-{
-   Eina_Stringshare *code;
-   FILE *f;
-   Group *group = (Group *)data;
-   Part *part;
-   State *state;
-   Eina_List *l, *ls;
-   Eina_Stringshare *resource;
-   Resource *res;
-   Eina_Strbuf *buf;
-   char *name;
-
-   PROGRESS_SEND(_("Generate group '%s' source code ..."), group->name);
-
-   name = strdup(group->name);
-   string_char_replace(name, '/', '_');
-   buf = eina_strbuf_new();
-   eina_strbuf_append_printf(buf, "%s/%s", worker.path, name);
-   ecore_file_mkdir(eina_strbuf_string_get(buf));
-   eina_strbuf_reset(buf);
-
-   /* create and open file for collect the group source code */
-   eina_strbuf_append_printf(buf, "%s/%s/generated.edc", worker.path, name);
-   f = fopen(eina_strbuf_string_get(buf), "w");
-   if (!f)
-     {
-        ERR("Could't open file '%s'", eina_strbuf_string_get(buf))
-        END_SEND(PM_PROJECT_ERROR);
-        goto exit;
-     }
-
-   /* get the full source code of given project */
-   THREAD_CONTEXT_SWITCH_BEGIN;
-   code = edje_edit_source_generate(group->edit_object);
-   THREAD_CONTEXT_SWITCH_END;
-
-   fputs(code, f);
-   edje_edit_string_free(code);
-   fclose(f);
-
-   /* export images and fonts in accordance with parts  */
-   EINA_LIST_FOREACH(group->parts, l, part)
-     {
-        if (part->type == EDJE_PART_TYPE_IMAGE)
-          {
-             PROGRESS_SEND(_("Export images ..."));
-             eina_strbuf_reset(buf);
-             eina_strbuf_append_printf(buf, "%s/%s/images/", worker.path, 
name);
-             ecore_file_mkdir(eina_strbuf_string_get(buf));
-             EINA_LIST_FOREACH(part->states, ls, state)
-               {
-                  resource = edje_edit_state_image_get(group->edit_object, 
part->name, state->name, state->val);
-                  PROGRESS_SEND(_("Export image '%s'"), resource);
-                  _external_resource_export(worker.project->images, resource, 
eina_strbuf_string_get(buf));
-                  eina_stringshare_del(resource);
-               }
-          }
-        if (part->type == EDJE_PART_TYPE_TEXT)
-          {
-             PROGRESS_SEND(_("Export fonts ..."));
-             eina_strbuf_reset(buf);
-             eina_strbuf_append_printf(buf, "%s/%s/fonts/", worker.path, name);
-             ecore_file_mkdir(eina_strbuf_string_get(buf));
-             EINA_LIST_FOREACH(part->states, ls, state)
-               {
-                  resource = edje_edit_state_font_get(group->edit_object, 
part->name, state->name, state->val);
-                  Eina_Stringshare *font_res = 
edje_edit_font_path_get(group->edit_object, resource);
-                  PROGRESS_SEND(_("Export font '%s'"), font_res);
-                  _external_resource_export(worker.project->fonts, font_res, 
eina_strbuf_string_get(buf));
-                  eina_stringshare_del(resource);
-                  eina_stringshare_del(font_res);
-               }
-          }
-     }
-   PROGRESS_SEND(_("Export sounds ..."));
-   EINA_LIST_FOREACH(group->programs, l, res)
-     {
-        resource = edje_edit_program_sample_name_get(group->edit_object, 
res->name);
-        if (!resource) continue;
-
-        eina_strbuf_reset(buf);
-        eina_strbuf_append_printf(buf, "%s/%s/sounds/", worker.path, name);
-        ecore_file_mkdir(eina_strbuf_string_get(buf));
-        PROGRESS_SEND(_("Export sound '%s'"), res->name);
-        _external_resource_export(worker.project->sounds, resource, 
eina_strbuf_string_get(buf));
-        eina_stringshare_del(resource);
-     }
-
-   eina_strbuf_reset(buf);
-   eina_strbuf_append_printf(buf, "%s/%s/build.sh", worker.path, name);
-   _build_script_write(eina_strbuf_string_get(buf));
-
-   END_SEND(PM_PROJECT_SUCCESS);
-exit:
-   eina_strbuf_free(buf);
-   free(name);
-   return NULL;
-}
-
 void
 pm_group_source_code_export(Project *project,
                             Group *group,
@@ -1030,17 +929,22 @@ pm_group_source_code_export(Project *project,
    assert(group != 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;
+   ptd->group = group;
+   eina_lock_new(&ptd->mutex);
 
-   if (!eina_thread_create(&worker.thread, EINA_THREAD_URGENT, -1,
-                           (void *)_group_source_code_export, (void *)group))
-     {
-        ERR("System error: can't create thread");
-        abort();
-     }
+   ecore_thread_feedback_run(_group_source_code_export_feedback_job, 
_group_source_code_export_feedback_cb,
+                             _group_source_code_export_end_cb, 
_group_source_code_export_cancel_cb, ptd,
+                             true);
 }
 
+
 void
 pm_project_source_code_export(Project *project,
                               const char *path,
diff --git a/src/bin/project_manager/project_manager_export_edc.c 
b/src/bin/project_manager/project_manager_export_edc.c
index 145958c..7a9d831 100644
--- a/src/bin/project_manager/project_manager_export_edc.c
+++ b/src/bin/project_manager/project_manager_export_edc.c
@@ -19,7 +19,7 @@
 #include "project_manager.h"
 #include "project_manager_private.h"
 
-/* Export source from a single group */
+/* Export source from a project */
 
 void
 _project_source_code_export_cancel_cb(void *data, Ecore_Thread *th __UNUSED__)
@@ -129,3 +129,161 @@ _project_source_code_export_feedback_job(void *data, 
Ecore_Thread *th)
    eina_strbuf_free(buf);
    eina_lock_release(&ptd->mutex);
 }
+
+
+
+/* Export source from a project */
+void
+_group_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
+_group_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
+_group_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
+_group_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 *code;
+   FILE *f;
+   Group *group = ptd->group;
+   Part *part;
+   State *state;
+   Eina_List *l, *ls;
+   Eina_Stringshare *resource;
+   Resource *res;
+   Eina_Strbuf *buf;
+   char *name;
+
+   message = eina_stringshare_printf(_("Generate group '%s' source code ..."), 
group->name);
+   ecore_thread_feedback(th, message);
+
+   name = strdup(group->name);
+   string_char_replace(name, '/', '_');
+   buf = eina_strbuf_new();
+   eina_strbuf_append_printf(buf, "%s/%s", ptd->path, name);
+   ecore_file_mkdir(eina_strbuf_string_get(buf));
+   eina_strbuf_reset(buf);
+
+   /* create and open file for collect the group source code */
+   eina_strbuf_append_printf(buf, "%s/%s/generated.edc", ptd->path, name);
+   f = fopen(eina_strbuf_string_get(buf), "w");
+   if (!f)
+     {
+        ERR("Could't open file '%s'", eina_strbuf_string_get(buf));
+        eina_lock_release(&ptd->mutex);
+        ecore_thread_cancel(th);
+        eina_strbuf_free(buf);
+        free(name);
+        return;
+     }
+
+   /* get the full source code of given project */
+   ecore_thread_main_loop_begin();
+   code = edje_edit_source_generate(group->edit_object);
+   ecore_thread_main_loop_end();
+
+   fputs(code, f);
+   edje_edit_string_free(code);
+   fclose(f);
+
+   /* export images and fonts in accordance with parts  */
+   EINA_LIST_FOREACH(group->parts, l, part)
+     {
+        if (part->type == EDJE_PART_TYPE_IMAGE)
+          {
+             message = eina_stringshare_printf(_("Export images ..."));
+             ecore_thread_feedback(th, message);
+
+             eina_strbuf_reset(buf);
+             eina_strbuf_append_printf(buf, "%s/%s/images/", ptd->path, name);
+             EINA_LIST_FOREACH(part->states, ls, state)
+               {
+                  resource = edje_edit_state_image_get(group->edit_object, 
part->name, state->name, state->val);
+                  message = eina_stringshare_printf(_("Export image '%s'"), 
resource);
+                  ecore_thread_feedback(th, message);
+
+                  _external_resource_export(ptd->project->images, resource, 
eina_strbuf_string_get(buf));
+                  eina_stringshare_del(resource);
+               }
+          }
+        if (part->type == EDJE_PART_TYPE_TEXT)
+          {
+             message = eina_stringshare_printf(_("Export fonts ..."));
+             ecore_thread_feedback(th, message);
+
+             eina_strbuf_reset(buf);
+             eina_strbuf_append_printf(buf, "%s/%s/fonts/", ptd->path, name);
+             EINA_LIST_FOREACH(part->states, ls, state)
+               {
+                  resource = edje_edit_state_font_get(group->edit_object, 
part->name, state->name, state->val);
+                  Eina_Stringshare *font_res = 
edje_edit_font_path_get(group->edit_object, resource);
+
+                  message = eina_stringshare_printf(_("Export font '%s'"), 
font_res);
+                  ecore_thread_feedback(th, message);
+
+                  _external_resource_export(ptd->project->fonts, font_res, 
eina_strbuf_string_get(buf));
+                  eina_stringshare_del(resource);
+                  eina_stringshare_del(font_res);
+               }
+          }
+     }
+   message = eina_stringshare_printf(_("Export sounds ..."));
+   ecore_thread_feedback(th, message);
+
+   EINA_LIST_FOREACH(group->programs, l, res)
+     {
+        resource = edje_edit_program_sample_name_get(group->edit_object, 
res->name);
+        if (!resource) continue;
+
+        eina_strbuf_reset(buf);
+        eina_strbuf_append_printf(buf, "%s/%s/sounds/", ptd->path, name);
+        message = eina_stringshare_printf(_("Export sound '%s'"), res->name);
+        ecore_thread_feedback(th, message);
+
+        _external_resource_export(ptd->project->sounds, resource, 
eina_strbuf_string_get(buf));
+        eina_stringshare_del(resource);
+     }
+
+   eina_strbuf_reset(buf);
+   eina_strbuf_append_printf(buf, "%s/%s/build.sh", ptd->path, name);
+   _build_script_write(eina_strbuf_string_get(buf));
+   eina_lock_release(&ptd->mutex);
+   eina_strbuf_free(buf);
+   free(name);
+   return;
+}
+
+
diff --git a/src/bin/project_manager/project_manager_private.h 
b/src/bin/project_manager/project_manager_private.h
index 53dd9a3..731fe91 100644
--- a/src/bin/project_manager/project_manager_private.h
+++ b/src/bin/project_manager/project_manager_private.h
@@ -163,10 +163,15 @@ 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
+ * Exported files will be stored on dst destination
  */
 void _external_resources_export(Eina_List *resources, const char *dst);
 
+/* Export only one resource from  resources list into file.
+ * Exported file will be store on dst destination
+ */
+void _external_resource_export(Eina_List *resources, Eina_Stringshare *name, 
const char *dst);
+
 /* Prepare build.sh script, that contanin
  * instructions howto compile edc source back to edj file
  */
@@ -205,4 +210,9 @@ 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);
+
+void _group_source_code_export_feedback_job(void *data, Ecore_Thread *th);
+void _group_source_code_export_feedback_cb(void *data, Ecore_Thread *th, void 
*msg_data);
+void _group_source_code_export_end_cb(void *data, Ecore_Thread *th);
+void _group_source_code_export_cancel_cb(void *data, Ecore_Thread *th);
 #endif

-- 


Reply via email to