Ephoto: Eliminate duplicate thumbing.

This commit is contained in:
Stephen okra Houston 2016-03-15 16:45:20 -05:00
parent 96c1afb382
commit 75131514cc
4 changed files with 33 additions and 12 deletions

View File

@ -218,6 +218,7 @@ struct _Ephoto_Event_Entry_Create
Ephoto_Entry *ephoto_entry_new(Ephoto *ephoto, const char *path,
const char *label, Eina_File_Type type);
Eina_Bool ephoto_entry_exists(Ephoto *ephoto, const char *path);
void ephoto_entry_free(Ephoto *ephoto, Ephoto_Entry *entry);
void ephoto_entry_free_listener_add(Ephoto_Entry *entry,
void (*cb) (void *data, const Ephoto_Entry *entry), const void *data);

View File

@ -442,8 +442,8 @@ _ephoto_config_about(Evas_Object *parent)
evas_object_size_hint_weight_set(entry, 0.0, 0.0);
evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
eina_strbuf_append_printf(sbuf,
_("Ephoto is a comprehensive image viewer based on the EFL.<br/>"
"For more information, please visit the Ephoto project page:<br/>"
_("Ephoto is a comprehensive image viewer based on the EFL. For more<br/>"
"information, please visit the Ephoto project page:<br/>"
"<a href=http://www.smhouston.us/ephoto/>"
"http://www.smhouston.us/ephoto/</a><br/><br/>"
"Ephoto also has a page on the Enlightenment wiki:<br/>"

View File

@ -353,6 +353,8 @@ _ephoto_populate_main(void *data, Eio_File *handler EINA_UNUSED,
Ephoto_Entry *e;
Ephoto_Event_Entry_Create *ev;
if (ephoto_entry_exists(ed->ephoto, info->path))
return;
e = ephoto_entry_new(ed->ephoto, info->path, info->path + info->name_start,
info->type);
@ -451,6 +453,7 @@ _ephoto_change_dir(void *data)
{
Ephoto_Dir_Data *ed = data;
ed->ephoto->thumb_entry = NULL;
ed->ephoto->job.change_dir = NULL;
_ephoto_populate_entries(ed);
}
@ -472,15 +475,11 @@ _monitor_cb(void *data, Ecore_File_Monitor *em EINA_UNUSED,
{
if (event == ECORE_FILE_EVENT_CREATED_FILE)
{
Eina_List *l;
Ephoto_Entry *entry;
char buf[PATH_MAX];
EINA_LIST_FOREACH(ephoto->entries, l, entry)
{
if (!strcmp(entry->path, path))
if (ephoto_entry_exists(ephoto, path))
return;
}
snprintf(buf, PATH_MAX, "%s", path);
entry = ephoto_entry_new(ephoto, path, basename(buf),
EINA_FILE_REG);
@ -553,6 +552,9 @@ _monitor_cb(void *data, Ecore_File_Monitor *em EINA_UNUSED,
if (!found)
{
char buf[PATH_MAX];
if (ephoto_entry_exists(ephoto, path))
return;
snprintf(buf, PATH_MAX, "%s", path);
entry = ephoto_entry_new(ephoto, path, basename(buf),
EINA_FILE_REG);
@ -763,6 +765,20 @@ ephoto_entry_new(Ephoto *ephoto, const char *path, const char *label,
return entry;
}
Eina_Bool
ephoto_entry_exists(Ephoto *ephoto, const char *path)
{
Ephoto_Entry *entry;
Eina_List *l;
EINA_LIST_FOREACH(ephoto->entries, l, entry)
{
if (!strcmp(entry->path, path))
return EINA_TRUE;
}
return EINA_FALSE;
}
void
ephoto_entry_free(Ephoto *ephoto, Ephoto_Entry *entry)
{

View File

@ -551,6 +551,8 @@ _monitor_cb(void *data, Ecore_File_Monitor *em EINA_UNUSED,
{
ic = &_ephoto_dir_class;
snprintf(buf, PATH_MAX, "%s", path);
if (ephoto_entry_exists(entry->ephoto, path))
return;
e = ephoto_entry_new(entry->ephoto, path, basename(buf),
EINA_FILE_DIR);
e->genlist = entry->genlist;
@ -662,7 +664,7 @@ _todo_items_process(void *data)
i++;
if (i > TODO_ITEM_MIN_BATCH)
return EINA_TRUE;
if (entry->is_dir)
if (entry->is_dir && !entry->item)
{
const Elm_Genlist_Item_Class *ic;
@ -685,7 +687,7 @@ _todo_items_process(void *data)
entry->genlist = tb->fsel;
}
}
else
else if (!entry->is_dir && !entry->item)
{
const Elm_Gengrid_Item_Class *ic;
@ -3624,6 +3626,8 @@ _top_monitor_cb(void *data, Ecore_File_Monitor *em EINA_UNUSED,
item = elm_genlist_item_next_get(item);
}
snprintf(buf, PATH_MAX, "%s", path);
if (ephoto_entry_exists(tb->ephoto, path))
return;
e = ephoto_entry_new(tb->ephoto, path, basename(buf),
EINA_FILE_DIR);
e->genlist = tb->fsel;
@ -3706,7 +3710,7 @@ ephoto_thumb_browser_insert(Ephoto *ephoto, Ephoto_Entry *entry)
Ephoto_Thumb_Browser *tb =
evas_object_data_get(ephoto->thumb_browser, "thumb_browser");
if (!entry->is_dir)
if (!entry->is_dir && !entry->item)
{
Eina_File *f;
const Elm_Gengrid_Item_Class *ic;