From e3e90a993adf620c56cbac6bc4857f22c9409a0e Mon Sep 17 00:00:00 2001 From: Sebastian Dransfeld Date: Sun, 25 Mar 2007 18:17:34 +0000 Subject: [PATCH] search for mime SVN revision: 29136 --- legacy/efreet/src/bin/ef_cache.c | 12 ++++++ legacy/efreet/src/lib/efreet_utils.c | 56 +++++++++++++++++++++++++--- legacy/efreet/src/lib/efreet_utils.h | 2 + 3 files changed, 65 insertions(+), 5 deletions(-) diff --git a/legacy/efreet/src/bin/ef_cache.c b/legacy/efreet/src/bin/ef_cache.c index c2856e0fc4..e783a3584c 100644 --- a/legacy/efreet/src/bin/ef_cache.c +++ b/legacy/efreet/src/bin/ef_cache.c @@ -4,6 +4,7 @@ static int timer(void *data) { + Ecore_List *list; Efreet_Desktop *desktop; double start; @@ -17,6 +18,17 @@ timer(void *data) desktop = efreet_util_desktop_wm_class_find("Mozilla-firefox-bin", NULL); printf("Mozilla-firefox-bin: %p %.3f\n", desktop, (ecore_time_get() - start)); + list = efreet_util_desktop_mime_list("application/ogg"); + if (list) + { + ecore_list_goto_first(list); + while ((desktop = ecore_list_next(list))) + { + printf("application/ogg: %s\n", desktop->name); + } + ecore_list_destroy(list); + } + return 0; } diff --git a/legacy/efreet/src/lib/efreet_utils.c b/legacy/efreet/src/lib/efreet_utils.c index 2999e111ff..99eee75772 100644 --- a/legacy/efreet/src/lib/efreet_utils.c +++ b/legacy/efreet/src/lib/efreet_utils.c @@ -2,9 +2,10 @@ #include "Efreet.h" #include "efreet_private.h" -typedef struct _Efreet_Cache_Fill Efreet_Cache_Fill; -typedef struct _Efreet_Cache_Fill_Dir Efreet_Cache_Fill_Dir; -typedef struct _Efreet_Cache_Search Efreet_Cache_Search; +typedef struct _Efreet_Cache_Fill Efreet_Cache_Fill; +typedef struct _Efreet_Cache_Fill_Dir Efreet_Cache_Fill_Dir; +typedef struct _Efreet_Cache_Search Efreet_Cache_Search; +typedef struct _Efreet_Cache_Search_Mime Efreet_Cache_Search_Mime; struct _Efreet_Cache_Fill { @@ -21,12 +22,19 @@ struct _Efreet_Cache_Fill_Dir struct _Efreet_Cache_Search { - const char *what1; - const char *what2; + const char *what1; + const char *what2; +}; + +struct _Efreet_Cache_Search_Mime +{ + Ecore_List *list; + const char *mime; }; static int _efreet_util_cache_fill(void *data); static void _efreet_util_cache_dir_free(void *data); +static void _efreet_util_cache_search_mime(void *value, void *data); static int _efreet_util_cache_search_wm_class(const void *value, const void *data); static int _efreet_util_cache_search_name(const void *value, const void *data); static int _efreet_util_cache_search_generic_name(const void *value, const void *data); @@ -160,6 +168,20 @@ efreet_util_path_to_file_id(const char *path) return file_id; } +Ecore_List * +efreet_util_desktop_mime_list(const char *mime) +{ + Efreet_Cache_Search_Mime search; + + search.list = ecore_list_new(); + search.mime = mime; + + ecore_hash_for_each_node(desktop_by_exec, _efreet_util_cache_search_mime, &search); + + if (ecore_list_is_empty(search.list)) IF_FREE_LIST(search.list); + return search.list; +} + Efreet_Desktop * efreet_util_desktop_wm_class_find(const char *wmname, const char *wmclass) { @@ -374,6 +396,30 @@ _efreet_util_cache_dir_free(void *data) free(dir); } +static void +_efreet_util_cache_search_mime(void *value, void *data) +{ + Ecore_Hash_Node *node; + Efreet_Cache_Search_Mime *search; + Efreet_Desktop *desktop; + const char *mime; + + node = value; + search = data; + desktop = node->value; + + if (!desktop->mime_types) return; + ecore_list_goto_first(desktop->mime_types); + while ((mime = ecore_list_next(desktop->mime_types))) + { + if (!strcmp(search->mime, mime)) + { + ecore_list_append(search->list, desktop); + break; + } + } +} + static int _efreet_util_cache_search_wm_class(const void *value, const void *data) { diff --git a/legacy/efreet/src/lib/efreet_utils.h b/legacy/efreet/src/lib/efreet_utils.h index 616838cade..75ada6d290 100644 --- a/legacy/efreet/src/lib/efreet_utils.h +++ b/legacy/efreet/src/lib/efreet_utils.h @@ -5,6 +5,8 @@ char *efreet_util_path_in_default(const char *section, const char *path); const char *efreet_util_path_to_file_id(const char *path); +Ecore_List *efreet_util_desktop_mime_list(const char *mime); + Efreet_Desktop *efreet_util_desktop_wm_class_find(const char *wmname, const char *wmclass); Efreet_Desktop *efreet_util_desktop_file_id_find(const char *file_id); Efreet_Desktop *efreet_util_desktop_exec_find(const char *exec);