Enlightenment CVS committal Author : chaos Project : e17 Module : apps/evfs
Dir : e17/apps/evfs/src/bin Modified Files: Makefile.am evfs_metadata.c evfs_server_handle.c Log Message: * eet->sqlite3, step 1 =================================================================== RCS file: /cvs/e/e17/apps/evfs/src/bin/Makefile.am,v retrieving revision 1.19 retrieving revision 1.20 diff -u -3 -r1.19 -r1.20 --- Makefile.am 20 Jun 2006 16:35:34 -0000 1.19 +++ Makefile.am 19 Jul 2006 16:27:10 -0000 1.20 @@ -29,7 +29,7 @@ evfscopy.c -evfs_LDADD = $(top_builddir)/src/lib/libevfs.la @ecore_libs@ @xml2_libs@ @eet_libs@ +evfs_LDADD = $(top_builddir)/src/lib/libevfs.la @ecore_libs@ @xml2_libs@ @eet_libs@ @SQLITE_LIBS@ evfscat_LDADD = $(top_builddir)/src/lib/libevfs.la @ecore_libs@ @xml2_libs@ @eet_libs@ =================================================================== RCS file: /cvs/e/e17/apps/evfs/src/bin/evfs_metadata.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -3 -r1.11 -r1.12 --- evfs_metadata.c 17 Jul 2006 05:51:25 -0000 1.11 +++ evfs_metadata.c 19 Jul 2006 16:27:10 -0000 1.12 @@ -15,6 +15,8 @@ #include <Evas.h> #include <limits.h> +#include <sqlite3.h> + #define EVFS_METADATA_GROUP_LIST "/evfs/group/list" #define EVFS_METADATA_BASE_DATA "block" @@ -22,6 +24,7 @@ * TODO * * * Handle recursive (i.e. nested) files + * * Make db access async - use callback properly, and don't block */ static int evfs_metadata_state = 0; @@ -35,8 +38,95 @@ static char* homedir; static char metadata_file[PATH_MAX]; +static char metadata_db[PATH_MAX]; static Eet_File* _evfs_metadata_eet; +static sqlite3 *db; +static int _evfs_metadata_db_wait = 0; +static Ecore_DList* evfs_metdata_db_results = NULL; + +/*DB Helper types*/ +typedef struct { + char* name; + char* value; +} evfs_metadata_db_item; + +typedef struct { + int fieldcount; + evfs_metadata_db_item** fields; +} evfs_metadata_db_result; + + + + +/*DB Helper functions*/ +void evfs_metadata_db_results_init() +{ + if (evfs_metdata_db_results) { + ecore_dlist_destroy(evfs_metdata_db_results); + evfs_metdata_db_results = NULL; + } + + evfs_metdata_db_results = ecore_dlist_new(); +} + +void evfs_metadata_db_results_free() +{ + evfs_metadata_db_result* result; + ecore_dlist_goto_first(evfs_metdata_db_results); + + while ( (result = ecore_dlist_remove_first(evfs_metdata_db_results))) { + int i; + evfs_metadata_db_item* item; + + for (i=0;i<result->fieldcount;i++) { + item = result->fields[i]; + if (item->name) free(item->name); + if (item->value) free(item->value); + free(item); + } + free(result->fields); + free(result); + } + ecore_dlist_destroy(evfs_metdata_db_results); + evfs_metdata_db_results = NULL; + +} + +void evfs_metadata_db_response_block() +{ + while (_evfs_metadata_db_wait) { + usleep(2000); + } +} + +void evfs_metadata_db_response_setup() +{ + _evfs_metadata_db_wait = 1; +} + +static int evfs_metadata_db_callback(void *NotUsed, int argc, char **argv, char **azColName){ + int i; + evfs_metadata_db_result* result; + + result = calloc(1, sizeof(evfs_metadata_db_result)); + result->fields = calloc(argc, sizeof(evfs_metadata_db_item*)); + result->fieldcount = argc; + + for(i=0; i<argc; i++){ + evfs_metadata_db_item* item = calloc(1, sizeof(evfs_metadata_db_item)); + item->name = strdup(azColName[i]); + item->value = strdup(argv[i]); + result->fields[i] = item; + } + + ecore_dlist_append(evfs_metdata_db_results, result); + + _evfs_metadata_db_wait = 0; + return 0; +} +/*-------------*/ + Eet_Data_Descriptor* _evfs_metadata_edd_create(char* desc, int size) { Eet_Data_Descriptor* edd; @@ -62,7 +152,6 @@ { Evas_List* l; evfs_metadata_group_header* g; - int ret; printf("Printing group list:\n"); for (l = metadata_root->group_list; l; ) { @@ -80,7 +169,6 @@ { Evas_List* l; evfs_metadata_group_header* g; - int ret; printf("Printing group list:\n"); for (l = groups->groups; l; ) { @@ -178,10 +266,6 @@ char* data; int size; int ret; - evfs_filereference* ref; - evfs_metadata_file_groups* groups; - char** ret_list; - int i; if (!evfs_metadata_state) { evfs_metadata_state++; @@ -226,6 +310,7 @@ } snprintf(metadata_file, PATH_MAX, "%s/.e/evfs/evfs_metadata.eet", homedir); + snprintf(metadata_db, PATH_MAX, "%s/.e/evfs/evfs_metadata.db", homedir); if (stat(metadata_file, &config_dir_stat)) { printf("Making new metadata file..\n"); @@ -269,6 +354,14 @@ eet_close(_evfs_metadata_eet); } + + ret = sqlite3_open(metadata_db, &db); + if( ret ){ + fprintf(stderr, "Can't open metadata database: %s\n", sqlite3_errmsg(db)); + sqlite3_close(db); + exit(1); + } + /*ref = calloc(1, sizeof(evfs_filereference)); ref->plugin_uri= strdup("file"); ref->path = strdup("/home/chaos/sakura3x3840.jpg"); @@ -289,7 +382,32 @@ } Evas_List* evfs_metadata_groups_get() { - return metadata_root->group_list; + int ret; + char* errMsg = 0; + evfs_metadata_db_result* result; + Evas_List* ret_list = NULL; + + evfs_metadata_db_response_setup(); + evfs_metadata_db_results_init(); + + ret = sqlite3_exec(db, "select name from MetaGroup where parent = 0", + evfs_metadata_db_callback, 0,&errMsg); + + evfs_metadata_db_response_block(); + + /*Print results*/ + ecore_dlist_goto_first(evfs_metdata_db_results); + + while ( (result = ecore_dlist_remove_first(evfs_metdata_db_results))) { + int i; + evfs_metadata_db_item* item; + item = result->fields[0]; + ret_list = evas_list_append(ret_list, strdup(item->value)); + } + + evfs_metadata_db_results_free(); + + return ret_list; } void evfs_metadata_file_set_key_value_edd(evfs_filereference* ref, char* key, =================================================================== RCS file: /cvs/e/e17/apps/evfs/src/bin/evfs_server_handle.c,v retrieving revision 1.59 retrieving revision 1.60 diff -u -3 -r1.59 -r1.60 --- evfs_server_handle.c 17 Jul 2006 14:45:09 -0000 1.59 +++ evfs_server_handle.c 19 Jul 2006 16:27:10 -0000 1.60 @@ -598,8 +598,9 @@ { Evas_List* group_list; - group_list = evfs_metadata_groups_get(); - evfs_group_list_event_create(client, command, group_list); + if ( (group_list = evfs_metadata_groups_get())) { + evfs_group_list_event_create(client, command, group_list); + } } void evfs_handle_metadata_file_group_add(evfs_client* client, evfs_command* command) ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs