Enlightenment CVS committal

Author  : chaos
Project : e17
Module  : apps/evfs

Dir     : e17/apps/evfs/src/bin


Modified Files:
        evfs_metadata_db.c evfs_server_handle.c evfs_worker.c 


Log Message:
* Allow persistence of search vfolders

===================================================================
RCS file: /cvs/e/e17/apps/evfs/src/bin/evfs_metadata_db.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -3 -r1.11 -r1.12
--- evfs_metadata_db.c  24 Aug 2007 00:49:46 -0000      1.11
+++ evfs_metadata_db.c  26 Aug 2007 13:08:36 -0000      1.12
@@ -10,8 +10,9 @@
  * * Make a 'bulk-run' function to avoid the endless repeated sqlite3_exec
  */
 
-#define EVFS_METADATA_DB_CONFIG_LATEST 4
+#define EVFS_METADATA_DB_CONFIG_LATEST 6
 static char metadata_db[PATH_MAX];
+static int loc_init = 0;
 static char* homedir;
 static Ecore_Hash* db_upgrade_hash = NULL;
 
@@ -146,6 +147,24 @@
        return evfs_metadata_db_version_bump(db, "5");
 }
 
+int evfs_metadata_db_upgrade_5_6(sqlite3* db)
+{
+       int ret;
+       char* errMsg = 0;
+
+       printf("Performing upgrade from v.5 to v.6\n");
+
+       ret = sqlite3_exec(db, 
+       "create table VfolderSearch (id integer primary key AUTOINCREMENT, name 
varchar(255));",
+       NULL, 0,&errMsg);
+
+       ret = sqlite3_exec(db, 
+       "create table VfolderSearchComponent (id integer primary key 
AUTOINCREMENT, vfolderSearch int, rtype char, rkey varchar(255), rvalue 
varchar(255));",
+       NULL, 0,&errMsg);
+
+       return evfs_metadata_db_version_bump(db, "6");
+}
+
 int evfs_metadata_db_version_bump(sqlite3* db, char* ver)
 {
        int ret;
@@ -160,15 +179,23 @@
 }
 /*---*/
 
+void evfs_metadata_db_location_init()
+{
+       if (!loc_init) {
+               loc_init =1 ;
+               homedir = strdup(getenv("HOME"));
+               snprintf(metadata_db, PATH_MAX, "%s/.e/evfs/evfs_metadata.db", 
homedir);
+       }
+}
+
 void evfs_metadata_db_init(sqlite3** db)
 {
        struct stat config_dir_stat;
        int ret;
        int ver;
        int runs = 0;
-       
-       homedir = strdup(getenv("HOME"));
-       snprintf(metadata_db, PATH_MAX, "%s/.e/evfs/evfs_metadata.db", homedir);
+
+       evfs_metadata_db_location_init();
 
        db_upgrade_hash = ecore_hash_new(ecore_direct_hash, 
ecore_direct_compare);
        ecore_hash_set(db_upgrade_hash, (int*)0, evfs_metadata_db_upgrade_0_1);
@@ -176,6 +203,7 @@
        ecore_hash_set(db_upgrade_hash, (int*)2, evfs_metadata_db_upgrade_2_3);
        ecore_hash_set(db_upgrade_hash, (int*)3, evfs_metadata_db_upgrade_3_4);
        ecore_hash_set(db_upgrade_hash, (int*)4, evfs_metadata_db_upgrade_4_5);
+       ecore_hash_set(db_upgrade_hash, (int*)5, evfs_metadata_db_upgrade_5_6);
        
        /*Check if we need to seed the DB*/
        if (stat(metadata_db, &config_dir_stat)) {
@@ -220,6 +248,28 @@
        printf("DB Init complete..\n");
 }
 
+sqlite3* evfs_metadata_db_connect()
+{
+       sqlite3* db;
+       int ret;
+       
+       evfs_metadata_db_location_init();
+       
+       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);
+       }
+
+       return db;
+}
+
+sqlite3* evfs_metadata_db_close(sqlite3* db)
+{
+       sqlite3_close(db);
+}
+
 int evfs_metadata_db_upgrade_check(sqlite3* db, int startmode) 
 {
        char query[1024];
@@ -317,6 +367,7 @@
                printf("id_for_file: sqlite error (%s)\n", file_path);
                file = 0;
        }
+       free(file_path);
 
        return file;
 }
@@ -380,3 +431,72 @@
        if (errMsg) printf("ERROR: %s\n", errMsg);              
 }
 
+
+int evfs_metadata_db_vfolder_search_create(sqlite3* db, char* name)
+{
+       char query[PATH_MAX];
+       int ret;
+       int vfo = 0;
+       sqlite3_stmt *pStmt;
+
+       snprintf(query, sizeof(query), "select id from VFolderSearch where name 
= ?");
+       ret = sqlite3_prepare(db, query, -1, &pStmt, 0);
+
+       if (ret == SQLITE_OK) {
+               sqlite3_bind_text(pStmt, 1, name, strlen(name), SQLITE_STATIC);
+               
+               ret = sqlite3_step(pStmt);
+               if (ret == SQLITE_ROW)  {
+                       vfo = sqlite3_column_int(pStmt,0);
+
+                       sqlite3_reset(pStmt);
+                       sqlite3_finalize(pStmt);
+               } else {
+                       sqlite3_reset(pStmt);
+                       sqlite3_finalize(pStmt);
+                       
+                       snprintf(query, sizeof(query), "insert into 
VFolderSearch (name) values(?);");
+                       ret = sqlite3_prepare(db, query, -1, &pStmt, 0);
+                       sqlite3_bind_text(pStmt, 1, name, strlen(name), 
SQLITE_STATIC);
+
+                       if (sqlite3_step(pStmt) == SQLITE_DONE) {
+                               vfo = (int)sqlite3_last_insert_rowid(db);
+                       } else {
+                               vfo = 0;
+                       }
+                               
+                       sqlite3_reset(pStmt);
+                       sqlite3_finalize(pStmt);
+               }
+       } else {
+               sqlite3_reset(pStmt);
+               sqlite3_finalize(pStmt);
+               
+               printf("id_for_file: sqlite error (%s)\n", name);
+               vfo = 0;
+       }
+
+       return vfo;
+}
+
+void evfs_metadata_db_vfolder_search_entry_add(sqlite3* db, int id, 
EvfsVfolderEntry* entry) 
+{
+       char query[PATH_MAX];
+       int ret;
+       sqlite3_stmt *pStmt;
+
+       snprintf(query, sizeof(query),
+               "insert into VfolderSearchComponent (vfolderSearch, rtype, 
rkey, rvalue) values (%d, '%c', ?, ?);", id, entry->type);
+       ret = sqlite3_prepare(db, query, -1, &pStmt, 0);
+
+       if (ret == SQLITE_OK) {
+               sqlite3_bind_text(pStmt, 1, entry->name, strlen(entry->name), 
SQLITE_STATIC);
+               sqlite3_bind_text(pStmt, 2, entry->value, strlen(entry->value), 
SQLITE_STATIC);
+               
+               if (sqlite3_step(pStmt) != SQLITE_DONE) {
+                       printf("evfs_metadata_db_vfolder_search_entry_add: 
sqlite3 error\n");
+               }
+               sqlite3_reset(pStmt);
+               sqlite3_finalize(pStmt);
+       }
+}
===================================================================
RCS file: /cvs/e/e17/apps/evfs/src/bin/evfs_server_handle.c,v
retrieving revision 1.85
retrieving revision 1.86
diff -u -3 -r1.85 -r1.86
--- evfs_server_handle.c        22 Aug 2007 09:52:47 -0000      1.85
+++ evfs_server_handle.c        26 Aug 2007 13:08:36 -0000      1.86
@@ -13,6 +13,8 @@
 #include <Ecore_Desktop.h>
 #include <Efreet.h>
 #include <Efreet_Mime.h>
+#include <sqlite3.h>
+#include "evfs_metadata_db.h"
 
 /*---------------------------------------------------*/
 /*Move these functions somewhere*/
@@ -766,8 +768,27 @@
                printf("EVFS: Mime not currently handled for plugin != file\n");
                /*TODO: Transfer file local, then mime? Ugh*/
        } else {
-               char* mime = 
efreet_mime_type_get(evfs_command_first_file_get(command)->path);
+               const char* mime = 
efreet_mime_type_get(evfs_command_first_file_get(command)->path);
                printf("%s\n", mime);
        }
 }
 
+void evfs_handle_vfolder_create(evfs_client* client, evfs_command* command)
+{
+       int id;
+       sqlite3* db;
+       Evas_List* l;
+       EvfsVfolderEntry* e;
+       printf("Creating a vfolder called '%s'\n", command->file_command->ref);
+       
+       db = evfs_metadata_db_connect();
+       id = evfs_metadata_db_vfolder_search_create(db, 
command->file_command->ref);
+
+       for (l=command->entries;l;) {
+               e=l->data;
+               evfs_metadata_db_vfolder_search_entry_add(db, id, e);
+               l=l->next;
+       }
+       
+       evfs_metadata_db_close(db);
+}
===================================================================
RCS file: /cvs/e/e17/apps/evfs/src/bin/evfs_worker.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- evfs_worker.c       22 Aug 2007 10:23:16 -0000      1.8
+++ evfs_worker.c       26 Aug 2007 13:08:36 -0000      1.9
@@ -47,9 +47,12 @@
 #include <signal.h>
 #include <errno.h>
 #include <dirent.h>
+#include <sqlite3.h>
+#include "evfs_metadata_db.h"
 
 static evfs_client* worker_client;
 static evfs_server* server;
+static sqlite3* worker_db = NULL;
 Ecore_Event_Handler* server_data;
 Ecore_Ipc_Server* iserver;
 
@@ -59,6 +62,12 @@
 int evfs_handle_command(evfs_client * client, evfs_command * command);
 void evfs_load_plugins();
 
+
+sqlite3* evfs_worker_db_get() 
+{
+       return worker_db;
+}
+
 int ecore_timer_enterer(__UNUSED__ void *data)
 {
    incoming_command_cb(NULL);
@@ -168,6 +177,10 @@
        evfs_handle_mime_request(client,command);
        break;
 
+     case EVFS_CMD_VFOLDER_CREATE:
+       evfs_handle_vfolder_create(client,command);
+       break;
+
      default:
         printf("Warning - unhandled command %d\n", command->type);
         break;
@@ -514,6 +527,7 @@
    evfs_trash_initialise();
    evfs_operation_initialise();
    evfs_metadata_initialise_worker();
+   worker_db = evfs_metadata_db_connect();
 
    /*Add a timer, to make sure our event loop keeps going.  Kinda hacky */
    server->tmr = ecore_timer_add(0.01, ecore_timer_enterer, NULL);



-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to