'everything' files: show recent files only on input. cleanup

SVN revision: 48058
This commit is contained in:
Hannes Janetzek 2010-04-16 18:36:28 +00:00
parent 6cf35e63f2
commit 91f8efd638
1 changed files with 23 additions and 41 deletions

View File

@ -15,16 +15,13 @@ struct _Plugin
{ {
Evry_Plugin base; Evry_Plugin base;
Eina_List *files;
const char *directory; const char *directory;
/* all files of directory */ const char *input;
Eina_List *files;
/* current list of files */
Eina_List *cur;
Eina_Bool command; Eina_Bool command;
Eina_Bool parent; Eina_Bool parent;
Eina_Bool hist_added;
const char *input;
Ecore_Thread *thread; Ecore_Thread *thread;
Eina_Bool cleanup; Eina_Bool cleanup;
}; };
@ -46,7 +43,6 @@ static Evry_Action *act2 = NULL;
static E_Module *module = NULL; static E_Module *module = NULL;
static Eina_Bool active = EINA_FALSE; static Eina_Bool active = EINA_FALSE;
static const char *mime_folder = NULL;
static void _cleanup(Evry_Plugin *plugin); static void _cleanup(Evry_Plugin *plugin);
@ -177,20 +173,6 @@ _append_file(Plugin *p, Evry_Item_File *file)
return 0; return 0;
} }
static const char *
_item_id(const char *path)
{
const char *s1, *s2, *s3;
s1 = s2 = s3 = path;
while (s1 && ++s1 && (s1 = strchr(s1, '/')))
{
s3 = s2;
s2 = s1;
}
return s3;
}
static void static void
_scan_cancel_func(void *data) _scan_cancel_func(void *data)
{ {
@ -263,7 +245,6 @@ _scan_end_func(void *data)
else else
file->mime = eina_stringshare_add("None"); file->mime = eina_stringshare_add("None");
item->context = eina_stringshare_ref(file->mime); item->context = eina_stringshare_ref(file->mime);
/* item->id = eina_stringshare_add(_item_id(path)); */
item->id = eina_stringshare_ref(file->path); item->id = eina_stringshare_ref(file->path);
item->label = eina_stringshare_add(filename); item->label = eina_stringshare_add(filename);
@ -365,7 +346,7 @@ _hist_items_add_cb(const Eina_Hash *hash, const void *key, void *data, void *fda
History_Entry *he = data; History_Entry *he = data;
History_Item *hi; History_Item *hi;
Plugin *p = fdata; Plugin *p = fdata;
Eina_List *l; Eina_List *l, *ll;
Evry_Item_File *file; Evry_Item_File *file;
const char *label; const char *label;
@ -374,6 +355,11 @@ _hist_items_add_cb(const Eina_Hash *hash, const void *key, void *data, void *fda
if (hi->plugin != p->base.name) if (hi->plugin != p->base.name)
continue; continue;
/* filter out files that we already have from history */
EINA_LIST_FOREACH(p->files, ll, file)
if (!strcmp(file->path,key))
return EINA_TRUE;
if (!ecore_file_exists(key)) if (!ecore_file_exists(key))
continue; continue;
@ -396,7 +382,10 @@ _hist_items_add_cb(const Eina_Hash *hash, const void *key, void *data, void *fda
EVRY_ITEM(file)->id = eina_stringshare_ref(file->path); EVRY_ITEM(file)->id = eina_stringshare_ref(file->path);
evry_util_file_detail_set(file); evry_util_file_detail_set(file);
if (ecore_file_is_dir(file->path))
EVRY_ITEM(file)->browseable = EINA_TRUE;
p->files = eina_list_append(p->files, file); p->files = eina_list_append(p->files, file);
break; break;
} }
@ -432,30 +421,32 @@ _fetch(Evry_Plugin *plugin, const char *input)
_read_directory(p); _read_directory(p);
p->command = EINA_TRUE; p->command = EINA_TRUE;
return 0; return 0;
} }
/* add recent files */
if (!p->hist_added)
eina_hash_foreach(evry_hist->subjects, _hist_items_add_cb, p);
p->hist_added = EINA_TRUE;
} }
if (!p->parent && !p->files) /* clear command items */
eina_hash_foreach(evry_hist->subjects, _hist_items_add_cb, p);
if (!p->parent && !input && p->command) if (!p->parent && !input && p->command)
{ {
p->command = EINA_FALSE; p->command = EINA_FALSE;
EINA_LIST_FREE(p->files, file) EINA_LIST_FREE(p->files, file)
evry_item_free(EVRY_ITEM(file)); evry_item_free(EVRY_ITEM(file));
eina_stringshare_del(p->directory); eina_stringshare_del(p->directory);
p->directory = eina_stringshare_add(e_user_homedir_get()); p->directory = eina_stringshare_add(e_user_homedir_get());
_read_directory(p); _read_directory(p);
return 0; return 0;
} }
if (input) if (input)
{ {
/* skip command prefix */
if (p->command) if (p->command)
p->input = eina_stringshare_add(input + 1); p->input = eina_stringshare_add(input + 1);
else else
@ -599,8 +590,7 @@ module_shutdown(void)
/***************************************************************************/ /***************************************************************************/
/**/
/* module setup */
EAPI E_Module_Api e_modapi = EAPI E_Module_Api e_modapi =
{ {
E_MODULE_API_VERSION, E_MODULE_API_VERSION,
@ -615,8 +605,6 @@ e_modapi_init(E_Module *m)
if (e_datastore_get("everything_loaded")) if (e_datastore_get("everything_loaded"))
active = module_init(); active = module_init();
mime_folder = eina_stringshare_add("inode/directory");
e_module_delayed_set(m, 1); e_module_delayed_set(m, 1);
return m; return m;
@ -628,8 +616,6 @@ e_modapi_shutdown(E_Module *m)
if (active && e_datastore_get("everything_loaded")) if (active && e_datastore_get("everything_loaded"))
module_shutdown(); module_shutdown();
eina_stringshare_del(mime_folder);
module = NULL; module = NULL;
return 1; return 1;
@ -640,7 +626,3 @@ e_modapi_save(E_Module *m)
{ {
return 1; return 1;
} }
/**/
/***************************************************************************/