search for mime

SVN revision: 29136
This commit is contained in:
Sebastian Dransfeld 2007-03-25 18:17:34 +00:00
parent 1d90933a3e
commit e3e90a993a
3 changed files with 65 additions and 5 deletions

View File

@ -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;
}

View File

@ -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)
{

View File

@ -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);