rimmed pushed a commit to branch master. http://git.enlightenment.org/tools/eflete.git/commit/?id=76066c1f4d2018a4e78616b9bd1cf527b71279d1
commit 76066c1f4d2018a4e78616b9bd1cf527b71279d1 Author: Vyacheslav Reutskiy <v.reuts...@samsung.com> Date: Tue Apr 19 14:51:26 2016 +0300 project_manager: open the .pro file once for given project Change-Id: I695e6f9d54f26dd38d7c7a19ed0d914358e8fa2f --- src/bin/project_manager/project_manager.c | 47 ++++++++----------------------- src/bin/project_manager/project_manager.h | 2 ++ 2 files changed, 13 insertions(+), 36 deletions(-) diff --git a/src/bin/project_manager/project_manager.c b/src/bin/project_manager/project_manager.c index 59ec058..2300d39 100644 --- a/src/bin/project_manager/project_manager.c +++ b/src/bin/project_manager/project_manager.c @@ -18,6 +18,7 @@ */ #define _GNU_SOURCE #include "project_manager.h" +#include <fcntl.h> #ifndef _WIN32 #include <sys/wait.h> #else @@ -181,20 +182,6 @@ _pm_project_descriptor_shutdown(void) eed_project = NULL; } -static Eina_Bool -_pm_project_descriptor_data_write(const char *path, Project *project) -{ - Eina_Bool ok = false; - - Eet_File *ef = eet_open(path, EET_FILE_MODE_READ_WRITE); - if (ef) - ok = eet_data_write(ef, eed_project, PROJECT_FILE_KEY, - project, compess_level); - eet_close(ef); - - return ok; -} - static void _progress_send(void *data) { @@ -289,16 +276,17 @@ _project_files_create(void) pro->widgets = worker.widgets; pro_path = eina_stringshare_printf("%s/%s.pro", folder_path, worker.name); + pro->ef = eet_open(pro_path, EET_FILE_MODE_READ_WRITE); ecore_file_mkdir(pro->develop_path); MKDIR(images); MKDIR(sounds); MKDIR(fonts); eina_stringshare_del(folder_path); - if (!_pm_project_descriptor_data_write(pro_path, pro)) + + if (!eet_data_write(pro->ef, eed_project, PROJECT_FILE_KEY, pro, compess_level)) error = true; - DBG("Create a specific project file '%s': %s", pro_path, - error ? "failsed" : "success"); + DBG("Create a specific project file '%s': %s", pro_path, error ? "failsed" : "success"); THREAD_TESTCANCEL; _pm_project_descriptor_shutdown(); eina_stringshare_del(pro_path); @@ -651,7 +639,6 @@ _project_open(void *data, worker.project = eet_data_read(ef, eed_project, PROJECT_FILE_KEY); _pm_project_descriptor_shutdown(); - eet_close(ef); if (!worker.project) { eina_stringshare_del(path); @@ -659,6 +646,7 @@ _project_open(void *data, return NULL; } + worker.project->ef = ef; worker.project->pro_path = eina_stringshare_add(path); /* updating .dev file path */ @@ -879,6 +867,7 @@ pm_project_close(Project *project) free(project->enventor); #endif /* HAVE_ENVENTOR */ + eet_close(project->ef); free(project); evas_object_smart_callback_call(ap.win, SIGNAL_PROJECT_CLOSED, NULL); @@ -896,17 +885,12 @@ pm_project_meta_data_get(Project *project, char *tmp; assert(project != NULL); + assert(project->ef != NULL); - Eet_File *ef = eet_open(project->pro_path, EET_FILE_MODE_READ); - if (!ef) - { - ERR("Can't open proect file \"%s\" for read", project->pro_path); - return; - } #define DATA_READ(DATA, KEY) \ if (DATA) \ { \ - tmp = eet_read(ef, KEY, NULL); \ + tmp = eet_read(project->ef, KEY, NULL); \ *DATA = eina_stringshare_add(tmp); \ free(tmp); \ } @@ -917,8 +901,6 @@ pm_project_meta_data_get(Project *project, DATA_READ(license, PROJECT_KEY_LICENSE); DATA_READ(comment, PROJECT_KEY_COMMENT); - eet_close(ef); - #undef DATA_READ } @@ -934,20 +916,15 @@ pm_project_meta_data_set(Project *project, Eina_Bool res; assert(project != NULL); + assert(project->ef != NULL); res = true; - Eet_File *ef = eet_open(project->pro_path, EET_FILE_MODE_READ_WRITE); - if (!ef) - { - ERR("Can't open proect file \"%s\" for write", project->pro_path); - return false; - } #define DATA_WRITE(DATA, KEY) \ if (DATA) \ { \ size = (strlen(DATA) + 1) * sizeof(char); \ - bytes = eet_write(ef, KEY, DATA, size, compess_level); \ + bytes = eet_write(project->ef, KEY, DATA, size, compess_level); \ if (bytes <= 0 ) res = false; \ } @@ -957,8 +934,6 @@ pm_project_meta_data_set(Project *project, DATA_WRITE(license, PROJECT_KEY_LICENSE); DATA_WRITE(comment, PROJECT_KEY_COMMENT); - eet_close(ef); - #undef DATA_WRITE return res; } diff --git a/src/bin/project_manager/project_manager.h b/src/bin/project_manager/project_manager.h index e22f909..2658fea 100644 --- a/src/bin/project_manager/project_manager.h +++ b/src/bin/project_manager/project_manager.h @@ -59,6 +59,8 @@ struct _Project Eina_Stringshare *name; /** project path */ Eina_Stringshare *pro_path; + /** the .pro file descriptor */ + Eet_File *ef; /** this is worrking file, all changes are happened in this file. */ Eina_Stringshare *dev; /** ecore evas buffer for project objects */ --