Enlightenment CVS committal
Author : lordchaos
Project : e17
Module : proto
Dir : e17/proto/entropy/src
Modified Files:
entropy_config.c
Log Message:
* Begin the slow, yet necessary migration from ecore_config -> eet
* Support multiple application binding per mimetype
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/entropy/src/entropy_config.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- entropy_config.c 26 Feb 2006 04:49:43 -0000 1.8
+++ entropy_config.c 16 Mar 2006 12:22:01 -0000 1.9
@@ -4,39 +4,303 @@
#include <sys/stat.h>
#include <unistd.h>
#include "entropy_gui.h"
+#include <Eet.h>
+#include <stdarg.h>
+
+static Entropy_Config* _Entropy_Config = NULL;
#define HEADER_CONFIG_MAX 2048
+static Eet_Data_Descriptor *_entropy_config_mimes_edd;
+static Eet_Data_Descriptor *_entropy_config_mime_binding_edd;
+static Eet_Data_Descriptor *_entropy_config_mime_binding_action_edd;
+
+
+Entropy_Config_Mime_Binding*
+entropy_config_mime_binding_for_type_get(char* type)
+{
+ Entropy_Config_Mime_Binding* rbinding = NULL;
+ Entropy_Config_Mime_Binding* binding = NULL;
+
+ Evas_List* l;
+
+ /*Do a scan for now, we should dynamically load this into a hash*/
+ for (l = _Entropy_Config->Config_Mimes->mime_bindings; l; ) {
+ binding = l->data;
+
+ if (!strcmp(binding->mime_type, type)) {
+ rbinding = binding;
+ }
+
+ l = l->next;
+
+ }
+
+
+ return rbinding;
+}
-entropy_config* entropy_config_init(entropy_core* core) {
- entropy_config* config = entropy_malloc(sizeof(entropy_config));
+void
+entropy_config_mimes_print(Entropy_Config_Mime* mimes)
+{
+ Entropy_Config_Mime_Binding* binding;
+ Entropy_Config_Mime_Binding_Action* action;
+ Evas_List* l, *l2;
+
+ for (l = mimes->mime_bindings; l; ) {
+ binding = l->data;
+
+ printf("MIME Type: '%s' ->\n", binding->mime_type);
+ for (l2 = binding->actions; l2; ) {
+ action = l2->data;
+
+ printf(" %s, %s, %s\n", action->app_description,
action->executable, action->args);
+
+ l2 = l2->next;
+ }
+
+ l = l->next;
+ }
+}
+
+Entropy_Config_Mime_Binding*
+entropy_config_binding_new(char* mime_type,
Entropy_Config_Mime_Binding_Action* action1, ...)
+{
+ va_list args;
+ Entropy_Config_Mime_Binding_Action* action;
+ Entropy_Config_Mime_Binding* binding =
calloc(1,sizeof(Entropy_Config_Mime_Binding));
+
+ va_start(args, action1);
+ for (action = action1; action; action = va_arg(args,
Entropy_Config_Mime_Binding_Action*)) {
+ binding->actions = evas_list_append(binding->actions, action);
+ }
+
+ va_end(args);
+
+ binding->mime_type = strdup(mime_type);
+
+ return binding;
+}
+
+
+Entropy_Config_Mime_Binding_Action*
+entropy_config_binding_action_new(char* description, char* executable, char*
args)
+{
+ Entropy_Config_Mime_Binding_Action* action =
calloc(1,sizeof(Entropy_Config_Mime_Binding_Action));
+
+ action->app_description = strdup(description);
+ action->executable = strdup(executable);
+ action->args = strdup(args);
+
+ return action;
+}
+
+Entropy_Config* entropy_config_init(entropy_core* core) {
struct stat config_dir_stat;
int i;
+ Eet_File* conf_file;
+ Entropy_Config_Mime* mimes = calloc(1,sizeof(Entropy_Config_Mime));
+
+
+ if (_Entropy_Config) return _Entropy_Config;
+
+ _Entropy_Config = entropy_malloc(sizeof(Entropy_Config));
+
i = strlen(entropy_core_home_dir_get()) + strlen("/.e/apps/entropy") +
2;
- config->config_dir = entropy_malloc(i * sizeof(char));
- snprintf(config->config_dir, i, "%s/%s", entropy_core_home_dir_get(),
"/.e/apps/entropy");
+ _Entropy_Config->config_dir = entropy_malloc(i * sizeof(char));
+ snprintf(_Entropy_Config->config_dir, i, "%s/%s",
entropy_core_home_dir_get(), "/.e/apps/entropy");
+
+ printf("Config dir is: '%s'\n", _Entropy_Config->config_dir);
+
+ _Entropy_Config->config_dir_and_file =
entropy_malloc((strlen(_Entropy_Config->config_dir) * sizeof(char)) + (13 *
sizeof(char)));
+ snprintf(_Entropy_Config->config_dir_and_file,
strlen(_Entropy_Config->config_dir) + 13, "%s/%s",
+ _Entropy_Config->config_dir, "entropy.cfg");
+
+ _Entropy_Config->config_dir_and_file_eet =
entropy_malloc((strlen(_Entropy_Config->config_dir) * sizeof(char)) + (16 *
sizeof(char)));
+ snprintf(_Entropy_Config->config_dir_and_file_eet,
strlen(_Entropy_Config->config_dir) + 16, "%s/%s",
+ _Entropy_Config->config_dir, "eetentropy.cfg");
+
+ /*Build the EDDs*/
+ _entropy_config_mime_binding_action_edd =
+ eet_data_descriptor_new("entropy_config_mime_binding_action",
sizeof(Entropy_Config_Mime_Binding_Action),
+ (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(_entropy_config_mime_binding_action_edd,
Entropy_Config_Mime_Binding_Action,
+ "app_description", app_description,
EET_T_STRING);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_entropy_config_mime_binding_action_edd,
Entropy_Config_Mime_Binding_Action,
+ "executable", executable, EET_T_STRING);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_entropy_config_mime_binding_action_edd,
Entropy_Config_Mime_Binding_Action,
+ "args", args, EET_T_STRING);
+
+
+ _entropy_config_mime_binding_edd =
+ eet_data_descriptor_new("entropy_config_mime_binding",
sizeof(Entropy_Config_Mime_Binding),
+ (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(_entropy_config_mime_binding_edd,
Entropy_Config_Mime_Binding,
+ "mime_type", mime_type, EET_T_STRING);
+ EET_DATA_DESCRIPTOR_ADD_LIST(_entropy_config_mime_binding_edd,
Entropy_Config_Mime_Binding, "actions", actions,
+ _entropy_config_mime_binding_action_edd);
+
+
+ _entropy_config_mimes_edd =
+ eet_data_descriptor_new("entropy_config_mime",
sizeof(Entropy_Config_Mime),
+ (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(_entropy_config_mimes_edd,
Entropy_Config_Mime, "mime_bindings", mime_bindings,
+ _entropy_config_mime_binding_edd);
+
+
+
- printf("Config dir is: '%s'\n", config->config_dir);
- config->config_dir_and_file =
entropy_malloc((strlen(config->config_dir) * sizeof(char)) + (13 *
sizeof(char)));
- snprintf(config->config_dir_and_file, strlen(config->config_dir) + 13,
"%s/%s", config->config_dir, "entropy.cfg");
+ mimes->mime_bindings = evas_list_append(mimes->mime_bindings,
+ entropy_config_binding_new("image/jpeg",
+ entropy_config_binding_action_new("Exhibit
(Single File)", "exhibit", "\%pf"),
+ entropy_config_binding_action_new("Exhibit
(Directory)", "exhibit", "\%p"),
+ NULL
+ ));
+ mimes->mime_bindings = evas_list_append(mimes->mime_bindings,
+ entropy_config_binding_new("image/png",
+ entropy_config_binding_action_new("Exhibit
(Single File)", "exhibit", "\%pf"),
+ entropy_config_binding_action_new("Exhibit
(Directory)", "exhibit", "\%p"),
+ NULL
+ ));
+
+ mimes->mime_bindings = evas_list_append(mimes->mime_bindings,
+ entropy_config_binding_new("image/gif",
+ entropy_config_binding_action_new("Exhibit
(Single File)", "exhibit", "\%pf"),
+ entropy_config_binding_action_new("Exhibit
(Directory)", "exhibit", "\%p"),
+ NULL
+ ));
+
+ mimes->mime_bindings = evas_list_append(mimes->mime_bindings,
+ entropy_config_binding_new("text/csrc",
+ entropy_config_binding_action_new("Gvim",
"gvim", "\%pf"),
+ NULL
+ ));
+
+ mimes->mime_bindings = evas_list_append(mimes->mime_bindings,
+ entropy_config_binding_new("text/html",
+ entropy_config_binding_action_new("Firefox",
"firefox", "\%pf"),
+ NULL
+ ));
+
+ mimes->mime_bindings = evas_list_append(mimes->mime_bindings,
+ entropy_config_binding_new("audio/x-mp3",
+ entropy_config_binding_action_new("Xmms",
"xmms", "\%pf"),
+ entropy_config_binding_action_new("Mpg123 (via
eVFS)", "evfscat \"%u\" | mpg123 -", ""),
+ NULL
+ ));
+
+ mimes->mime_bindings = evas_list_append(mimes->mime_bindings,
+ entropy_config_binding_new("video/x-ms-wmv",
+ entropy_config_binding_action_new("MPlayer",
"mplayer", "\%pf"),
+ entropy_config_binding_action_new("MPlayer (via
evfs)", "evfscat \"%u\" | mplayer -cache 4096 -", ""),
+ entropy_config_binding_action_new("Xine",
"xine", "%pf"),
+ NULL
+ ));
+
+ mimes->mime_bindings = evas_list_append(mimes->mime_bindings,
+ entropy_config_binding_new("video/mpeg",
+ entropy_config_binding_action_new("MPlayer",
"mplayer", "\%pf"),
+ entropy_config_binding_action_new("MPlayer (via
evfs)", "evfscat \"%u\" | mplayer -cache 4096 -", ""),
+ entropy_config_binding_action_new("Xine",
"xine", "%pf"),
+ NULL
+ ));
+
+ mimes->mime_bindings = evas_list_append(mimes->mime_bindings,
+ entropy_config_binding_new("video/x-msvideo",
+ entropy_config_binding_action_new("MPlayer",
"mplayer", "\%pf"),
+ entropy_config_binding_action_new("MPlayer (via
evfs)", "evfscat \"%u\" | mplayer -cache 4096 -", ""),
+ entropy_config_binding_action_new("Xine",
"xine", "%pf"),
+ NULL
+ ));
+
+ /*ecore_list_append(mime_type_actions, "application/msword:abiword");
+ ecore_list_append(mime_type_actions,
"application/vnd.ms-excel:gnumeric");*/
+
+ conf_file = eet_open(_Entropy_Config->config_dir_and_file_eet,
EET_FILE_MODE_WRITE);
+ if (conf_file) {
+ char* data;
+ int size_ret;
+ int ok;
+
+ printf("Conf file loaded to: %p\n", conf_file);
+
+ data =
+ eet_data_descriptor_encode(_entropy_config_mimes_edd, mimes,
&size_ret);
+
+ printf("Write data: %p\n", data);
+
+ if ( !(ok = eet_write(conf_file, "/config_action", data,
+ size_ret, 0))) {
+ printf("Error writing data!\n");
+
+ }
+
+ free(data);
+ eet_close(conf_file);
+
+ conf_file = eet_open(_Entropy_Config->config_dir_and_file_eet,
EET_FILE_MODE_READ);
+
+
+ data = eet_read(conf_file, "/config_action", &size_ret);
+ printf("Data is %p\n", data);
+
+ _Entropy_Config->Config_Mimes =
eet_data_descriptor_decode(_entropy_config_mimes_edd, data, size_ret);
+
+ }
+
+ /*Print them out..*/
+ entropy_config_mimes_print(_Entropy_Config->Config_Mimes);
- //printf ("Config dir set to '%s'\n", config->config_dir);
- //printf ("Config file at '%s'\n", config->config_dir_and_file);
//Does the config dir exist?
- if (stat(config->config_dir, &config_dir_stat)) {
+ if (stat(_Entropy_Config->config_dir, &config_dir_stat)) {
//Make the dir..
- mkdir(config->config_dir, 0777);
+ mkdir(_Entropy_Config->config_dir, 0777);
}
//Init ecore_config
ecore_config_init("entropy_config");
- ecore_config_file_load(config->config_dir_and_file);
+ ecore_config_file_load(_Entropy_Config->config_dir_and_file);
- return config;
+ return _Entropy_Config;
}
int entropy_config_int_get(char* module, char* key) {
@@ -88,7 +352,7 @@
-void entropy_config_destroy(entropy_config* config) {
+void entropy_config_destroy(Entropy_Config* config) {
//printf("Saving config to '%s'\n", config->config_dir_and_file);
ecore_config_file_save(config->config_dir_and_file);
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs