|
From: Enlightenment C. <no...@cv...> - 2006-04-21 15:11:27
|
Enlightenment CVS committal
Author : chaos
Project : e17
Module : apps/evfs
Dir : e17/apps/evfs/src/common
Modified Files:
evfs_cleanup.c evfs_common.c evfs_event_helper.c evfs_io.c
Log Message:
Ok, lotsa changes:
* Abstracted out the plugin architecture. Two plugins types now: Filesystem, and metadata provider
* Added audio tagger metadata provider (based on e_taggerd by CodeWarrior). Be warned - metadata provider file type is hardcoded to go to this plugin for now - more later, including libextract)
* A few bug fixes, whatever ended up in this commit cycle
===================================================================
RCS file: /cvs/e/e17/apps/evfs/src/common/evfs_cleanup.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -3 -r1.15 -r1.16
--- evfs_cleanup.c 8 Feb 2006 10:15:29 -0000 1.15
+++ evfs_cleanup.c 21 Apr 2006 15:10:16 -0000 1.16
@@ -128,6 +128,26 @@
}
void
+evfs_cleanup_metadata_event(evfs_event* event)
+{
+ evfs_meta_obj* obj;
+ Evas_List* l = event->meta->meta_list;
+
+ for (; l ;) {
+ obj = l->data;
+ l = evas_list_remove(event->meta->meta_list, obj);
+
+ free(obj->key);
+ free(obj->value);
+ free(obj);
+ }
+ evas_list_free(event->meta->meta_list);
+ free(event->meta);
+
+ /*FIXME - id if client, free hash*/
+}
+
+void
evfs_cleanup_event(evfs_event * event)
{
evfs_cleanup_command(&event->resp_command, EVFS_CLEANUP_PRESERVE_COMMAND);
@@ -149,6 +169,8 @@
case EVFS_EV_OPERATION:
evfs_cleanup_operation_event(event);
break;
+ case EVFS_EV_METADATA:
+ evfs_cleanup_metadata_event(event);
}
free(event);
===================================================================
RCS file: /cvs/e/e17/apps/evfs/src/common/evfs_common.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- evfs_common.c 12 Mar 2006 05:27:33 -0000 1.3
+++ evfs_common.c 21 Apr 2006 15:10:16 -0000 1.4
@@ -1,5 +1,11 @@
#include "evfs.h"
+evfs_plugin*
+evfs_meta_plugin_get_for_type(evfs_server* server, char* mime)
+{
+ return ecore_hash_get(server->plugin_meta_hash, mime);
+}
+
evfs_plugin *
evfs_get_plugin_for_uri(evfs_server * server, char *uri_base)
{
===================================================================
RCS file: /cvs/e/e17/apps/evfs/src/common/evfs_event_helper.c,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -3 -r1.25 -r1.26
--- evfs_event_helper.c 5 Apr 2006 02:22:48 -0000 1.25
+++ evfs_event_helper.c 21 Apr 2006 15:10:16 -0000 1.26
@@ -144,3 +144,18 @@
/*Destroy */
evfs_cleanup_event(event);
}
+
+void
+evfs_meta_data_event_create(evfs_client* client,evfs_command* command, Evas_List* ret_list)
+{
+ evfs_event *event = NEW(evfs_event);
+
+ event->type = EVFS_EV_METADATA;
+ event->meta = calloc(1, sizeof(evfs_event_meta));
+ event->meta->meta_list = ret_list;
+
+ evfs_write_event(client, command, event);
+
+ /*Destroy */
+ evfs_cleanup_event(event);
+}
===================================================================
RCS file: /cvs/e/e17/apps/evfs/src/common/evfs_io.c,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -3 -r1.52 -r1.53
--- evfs_io.c 5 Apr 2006 05:39:04 -0000 1.52
+++ evfs_io.c 21 Apr 2006 15:10:16 -0000 1.53
@@ -7,6 +7,9 @@
static Eet_Data_Descriptor *_evfs_progress_event_edd;
static Eet_Data_Descriptor *_evfs_operation_edd;
static Eet_Data_Descriptor *_evfs_filemonitor_edd;
+static Eet_Data_Descriptor *_evfs_metalist_edd;
+static Eet_Data_Descriptor *_evfs_metaobj_edd;
+
Eet_Data_Descriptor *
evfs_io_filereference_edd_get()
@@ -79,6 +82,45 @@
EET_DATA_DESCRIPTOR_ADD_BASIC(_evfs_progress_event_edd, evfs_event_progress,
"type", type, EET_T_INT);
+
+ /*Meta obj eet*/
+ _evfs_metaobj_edd = eet_data_descriptor_new("evfs_meta_obj",
+ sizeof(evfs_meta_obj),
+ (void *(*)(void *))evas_list_next,
+ (void *(*)(void *, void *))evas_list_append,
+ (void *(*)(void *))evas_list_data,
+ (void *(*)(void *))evas_list_free,
+ (void (*)
+ (void *,
+ int (*)(void *, const char *, void *, void *),
+ void *))evas_hash_foreach, (void *(*)(void *,
+ const char
+ *,
+ void *))
+ evas_hash_add, (void (*)(void *))evas_hash_free);
+
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_evfs_metaobj_edd, evfs_meta_obj, "key", key, EET_T_STRING);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_evfs_metaobj_edd, evfs_meta_obj, "value", value, EET_T_STRING);
+
+ /*Meta list eet*/
+ _evfs_metalist_edd = eet_data_descriptor_new("evfs_metalist",
+ sizeof(evfs_event_meta),
+ (void *(*)(void *))evas_list_next,
+ (void *(*)(void *, void *))evas_list_append,
+ (void *(*)(void *))evas_list_data,
+ (void *(*)(void *))evas_list_free,
+ (void (*)
+ (void *,
+ int (*)(void *, const char *, void *, void *),
+ void *))evas_hash_foreach, (void *(*)(void *,
+ const char
+ *,
+ void *))
+ evas_hash_add, (void (*)(void *))evas_hash_free);
+
+ EET_DATA_DESCRIPTOR_ADD_LIST(_evfs_metalist_edd, evfs_event_meta, "evfs_event_meta", meta_list,
+ _evfs_metaobj_edd);
+
/*Evfs_operation eet */
_evfs_operation_edd =
eet_data_descriptor_new("evfs_operation", sizeof(evfs_operation),
@@ -248,6 +290,26 @@
event->data.size));
}
+void evfs_write_meta_event(evfs_client * client, evfs_command * command,
+ evfs_event * event)
+{
+ int size_ret = 0;
+ char *data;
+
+ data =
+ eet_data_descriptor_encode(_evfs_metalist_edd, event->meta,
+ &size_ret);
+
+ evfs_write_ecore_ipc_client_message(client->client,
+ ecore_ipc_message_new(EVFS_EV_REPLY,
+ EVFS_EV_PART_METALIST,
+ client->id, 0, 0,
+ data, size_ret));
+
+ free(data);
+
+}
+
void
evfs_write_progress_event(evfs_client * client, evfs_command * command,
evfs_event * event)
@@ -256,11 +318,6 @@
evfs_filereference *ref;
char *data;
- if (event->progress->type == EVFS_PROGRESS_TYPE_DONE)
- {
- printf("Sendign Done!\n");
- }
-
data =
eet_data_descriptor_encode(_evfs_progress_event_edd, event->progress,
&size_ret);
@@ -347,6 +404,9 @@
case EVFS_EV_FILE_PROGRESS:
evfs_write_progress_event(client, command, event);
break;
+ case EVFS_EV_METADATA:
+ evfs_write_meta_event(client,command,event);
+ break;
case EVFS_EV_FILE_OPEN:
printf("Open event send\n");
@@ -420,6 +480,33 @@
}
break;
+
+ case EVFS_EV_PART_METALIST:
+ {
+ evfs_meta_obj* obj;
+ Evas_List* l;
+
+ evfs_event_meta* meta =
+ eet_data_descriptor_decode(_evfs_metalist_edd, msg->data,
+ msg->len);
+
+ /*Now we have to push this list to a hash..*/
+ event->meta = meta;
+ event->meta->meta_hash = ecore_hash_new(ecore_str_hash, ecore_str_compare);
+
+ for (l = event->meta->meta_list; l; ) {
+ obj = l->data;
+ l = evas_list_remove(event->meta->meta_list, l->data);
+
+ ecore_hash_set(event->meta->meta_hash, obj->key, obj->value);
+ free(obj);
+
+ }
+ evas_list_free(event->meta->meta_list);
+
+ }
+ break;
+
case EVFS_EV_PART_DATA:
{
event->data.size = msg->len;
@@ -558,6 +645,7 @@
case EVFS_CMD_FILE_OPEN:
case EVFS_CMD_FILE_READ:
case EVFS_CMD_DIRECTORY_CREATE:
+ case EVFS_CMD_METADATA_RETRIEVE:
case EVFS_CMD_PING:
evfs_write_file_command(conn, command);
break;
@@ -592,6 +680,7 @@
case EVFS_CMD_FILE_OPEN:
case EVFS_CMD_FILE_READ:
case EVFS_CMD_DIRECTORY_CREATE:
+ case EVFS_CMD_METADATA_RETRIEVE:
case EVFS_CMD_PING:
evfs_write_file_command_client(client, command);
break;
|