Ephoto: Support symlinked dirs.

master
Stephen Houston 6 years ago
parent ccbc11373c
commit 49f792d962
  1. 33
      src/bin/ephoto_directory_browser.c
  2. 9
      src/bin/ephoto_main.c
  3. 2
      src/bin/ephoto_thumb_browser.c

@ -391,11 +391,13 @@ _check_for_subdirs(Ephoto_Entry *entry)
return EINA_FALSE;
EINA_ITERATOR_FOREACH(ls, info)
{
if (info->type == EINA_FILE_DIR)
{
eina_iterator_free(ls);
return EINA_TRUE;
}
if (info->type != EINA_FILE_DIR && info->type != EINA_FILE_LNK)
continue;
if (info->type == EINA_FILE_LNK && !ecore_file_is_dir(
ecore_file_realpath(info->path)))
continue;
eina_iterator_free(ls);
return EINA_TRUE;
}
eina_iterator_free(ls);
return EINA_FALSE;
@ -729,7 +731,7 @@ _monitor_cb(void *data, int type,
return ECORE_CALLBACK_PASS_ON;
if (type == EIO_MONITOR_DIRECTORY_CREATED)
{
if (!ecore_file_is_dir(ev->filename))
if (!ecore_file_is_dir(ecore_file_realpath(ev->filename)))
return ECORE_CALLBACK_PASS_ON;
if (ephoto_entry_exists(entry->ephoto, ev->filename))
return ECORE_CALLBACK_PASS_ON;
@ -833,7 +835,7 @@ _monitor_cb(void *data, int type,
}
else if (type == EIO_MONITOR_DIRECTORY_MODIFIED)
{
if (!ecore_file_is_dir(ev->filename))
if (!ecore_file_is_dir(ecore_file_realpath(ev->filename)))
return ECORE_CALLBACK_PASS_ON;
if ((elm_genlist_item_expanded_get(entry->item) == EINA_TRUE))
{
@ -874,7 +876,7 @@ _top_monitor_cb(void *data, int type,
return ECORE_CALLBACK_PASS_ON;
if (type == EIO_MONITOR_DIRECTORY_CREATED)
{
if (!ecore_file_is_dir(ev->filename))
if (!ecore_file_is_dir(ecore_file_realpath(ev->filename)))
return ECORE_CALLBACK_PASS_ON;
if (ephoto_entry_exists(db->ephoto, ev->filename))
return ECORE_CALLBACK_PASS_ON;
@ -924,7 +926,7 @@ _top_monitor_cb(void *data, int type,
}
else if (type == EIO_MONITOR_DIRECTORY_MODIFIED)
{
if (!ecore_file_is_dir(ev->filename))
if (!ecore_file_is_dir(ecore_file_realpath(ev->filename)))
return ECORE_CALLBACK_PASS_ON;
item = elm_genlist_first_item_get(db->fsel);
while (item)
@ -1068,6 +1070,11 @@ _ephoto_dir_entry_create(void *data, int type EINA_UNUSED, void *event)
db->todo_items = eina_list_append(db->todo_items, e);
db->animator.count++;
}
else if (ecore_file_is_dir(ecore_file_realpath(e->path)))
{
db->todo_items = eina_list_append(db->todo_items, e);
db->animator.count++;
}
if (!db->animator.todo_items)
db->animator.todo_items = ecore_animator_add(_todo_items_process, db);
@ -1185,8 +1192,12 @@ ephoto_directory_browser_initialize_structure(Ephoto *ephoto)
cur = next;
EINA_ITERATOR_FOREACH(it, finfo)
{
if (finfo->type == EINA_FILE_DIR &&
strncmp(finfo->path + finfo->name_start, ".", 1))
if (finfo->type != EINA_FILE_DIR && finfo->type != EINA_FILE_LNK)
continue;
if (finfo->type == EINA_FILE_LNK && !ecore_file_is_dir(
ecore_file_realpath(finfo->path)))
continue;
if (strncmp(finfo->path + finfo->name_start, ".", 1))
{
Ephoto_Entry *entry = ephoto_entry_new(db->ephoto, finfo->path,
finfo->path+finfo->name_start, finfo->type);

@ -741,6 +741,10 @@ _ephoto_populate_filter(void *data, Eio_File *handler EINA_UNUSED,
{
return EINA_TRUE;
}
else if (info->type == EINA_FILE_LNK && !ed->thumbs_only)
{
return ecore_file_is_dir(ecore_file_realpath(info->path));
}
if (!ed->dirs_only)
return _ephoto_eina_file_direct_info_image_useful(info);
else
@ -1065,7 +1069,10 @@ ephoto_entry_new(Ephoto *ephoto, const char *path, const char *label,
entry->basename = ecore_file_file_get(entry->path);
entry->label = eina_stringshare_add(label);
if (type == EINA_FILE_DIR)
entry->is_dir = EINA_TRUE;
entry->is_dir = EINA_TRUE;
else if (type == EINA_FILE_LNK && ecore_file_is_dir(
ecore_file_realpath(entry->path)))
entry->is_dir = EINA_TRUE;
else
entry->is_dir = EINA_FALSE;
return entry;

@ -1417,7 +1417,7 @@ _ephoto_thumb_entry_create(void *data, int type EINA_UNUSED, void *event)
Ephoto_Entry *e;
e = ev->entry;
if (!e->is_dir)
if (!e->is_dir && !ecore_file_is_dir(ecore_file_realpath(e->path)))
{
Eina_File *f;

Loading…
Cancel
Save