cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=e7550e7bbf88ef5d5a61fef8879db60ff57a9b1f

commit e7550e7bbf88ef5d5a61fef8879db60ff57a9b1f
Author: Mykyta Biliavskyi <[email protected]>
Date:   Tue Jun 17 17:08:23 2014 +0200

    edje: Edje_Edit - add edje_edit_without_source save function.
    
    Summary:
    Add function, which provide fast save group(s) back into edj file,
    bypassing the source code generation.
    
    Reviewers: raster, seoz, cedric, Hermet, reutskiy.v.v
    
    CC: cedric, reutskiy.v.v
    
    Differential Revision: https://phab.enlightenment.org/D1053
    
    Signed-off-by: Cedric BAIL <[email protected]>
---
 src/lib/edje/Edje_Edit.h | 22 +++++++++++++++++++
 src/lib/edje/edje_edit.c | 56 ++++++++++++++++++++++++++++++++++++++++++------
 2 files changed, 71 insertions(+), 7 deletions(-)

diff --git a/src/lib/edje/Edje_Edit.h b/src/lib/edje/Edje_Edit.h
index 58cffcf..2d4c5e7 100644
--- a/src/lib/edje/Edje_Edit.h
+++ b/src/lib/edje/Edje_Edit.h
@@ -197,6 +197,28 @@ EAPI Eina_Bool edje_edit_save(Evas_Object *obj);
  */
 EAPI Eina_Bool edje_edit_save_all(Evas_Object *obj);
 
+/** Save the group(s) back to the file, without generation source code.
+ *
+ * This function saves changes in group(s) back into the edj file. Process of
+ * saving takes a bit time in compare with @edje_edit_save and 
@edje_edit_save_all,
+ * because this function DOES NOT generate source code for groups.
+ *
+ * @note With using this function all source code will be erased. And DOES NOT
+ * generated new code. In attempt to decompile edj file, wich was saved with
+ * using this functions will unpacked only resources(like fonts, images, 
sounds).
+ * If needed saving source code into file, please use  @edje_edit_save or
+ * @edje_edit_save_all.
+
+ * @param obj Object to save back to the file it was loaded from.
+ * @param current_group EINA_TRUE if needed save only group which loaded with 
obj,
+ * or EINA_FALSE for save all groups, which exists in edj file.
+ *
+ * @return EINA_TRUE if successful, EINA_FALSE otherwise.
+ *
+ */
+EAPI Eina_Bool
+edje_edit_without_source_save(Evas_Object *obj, Eina_Bool current_group);
+
 /** Print on standard output many information about the internal status
  * of the edje object.
  *
diff --git a/src/lib/edje/edje_edit.c b/src/lib/edje/edje_edit.c
index 8b466eb..34cef5b 100644
--- a/src/lib/edje/edje_edit.c
+++ b/src/lib/edje/edje_edit.c
@@ -10132,7 +10132,7 @@ save_free_source:
 }
 
 Eina_Bool
-_edje_edit_internal_save(Evas_Object *obj, int current_only)
+_edje_edit_internal_save(Evas_Object *obj, int current_only, Eina_Bool 
generate_source)
 {
    Edje_File *ef;
    Eet_File *eetf;
@@ -10269,10 +10269,11 @@ _edje_edit_internal_save(Evas_Object *obj, int 
current_only)
            eina_hash_del(eed->program_scripts, &ps->id, ps);
      }
 
-   if (!_edje_edit_source_save(eetf, obj))
-     {
-       eet_close(eetf);
-       return EINA_FALSE;
+   if (generate_source)
+     if (!_edje_edit_source_save(eetf, obj))
+       {
+          eet_close(eetf);
+          return EINA_FALSE;
      }
 
    eet_close(eetf);
@@ -10292,13 +10293,54 @@ _edje_edit_internal_save(Evas_Object *obj, int 
current_only)
 EAPI Eina_Bool
 edje_edit_save(Evas_Object *obj)
 {
-   return _edje_edit_internal_save(obj, 1);
+   return _edje_edit_internal_save(obj, 1, EINA_TRUE);
 }
 
 EAPI Eina_Bool
 edje_edit_save_all(Evas_Object *obj)
 {
-   return _edje_edit_internal_save(obj, 0);
+   return _edje_edit_internal_save(obj, 0, EINA_TRUE);
+}
+
+EAPI Eina_Bool
+edje_edit_without_source_save(Evas_Object *obj, Eina_Bool current_group)
+{
+   GET_ED_OR_RETURN(EINA_FALSE);
+   Eet_File *eetf = NULL;
+   SrcFile_List *sfl = NULL;
+
+   if (!_edje_edit_internal_save(obj, current_group, EINA_FALSE))
+     {
+        ERR("Unable save binary data into file");
+        return EINA_FALSE;
+     }
+
+   sfl = _alloc(sizeof(SrcFile_List));
+   if (!sfl)
+     {
+        ERR("Unable to create file list");
+        return EINA_FALSE;
+     }
+   sfl->list = NULL;
+   eetf = eet_open(ed->file->path, EET_FILE_MODE_READ_WRITE);
+   if (!eetf)
+     {
+        ERR("Error. Unable to open \"%s\" for cleaning source", 
ed->file->path);
+        free(sfl);
+        return EINA_FALSE;
+     }
+   source_edd();
+   if (eet_data_write(eetf, _srcfile_list_edd, "edje_sources", sfl, 1) <= 0)
+    {
+       ERR("Unable to clean edc source from edj file");
+       free(sfl);
+       eet_close(eetf);
+       return EINA_FALSE;
+    }
+
+   free(sfl);
+   eet_close(eetf);
+   return EINA_TRUE;
 }
 
 EAPI void

-- 


Reply via email to