okra pushed a commit to branch master.

http://git.enlightenment.org/apps/ephoto.git/commit/?id=49f792d9621521d537baa3b9acf82cb45a3f5382

commit 49f792d9621521d537baa3b9acf82cb45a3f5382
Author: Stephen Houston <[email protected]>
Date:   Fri Aug 5 21:26:21 2016 -0500

    Ephoto: Support symlinked dirs.
---
 src/bin/ephoto_directory_browser.c | 33 ++++++++++++++++++++++-----------
 src/bin/ephoto_main.c              |  9 ++++++++-
 src/bin/ephoto_thumb_browser.c     |  2 +-
 3 files changed, 31 insertions(+), 13 deletions(-)

diff --git a/src/bin/ephoto_directory_browser.c 
b/src/bin/ephoto_directory_browser.c
index 93b12a7..bfb659e 100644
--- a/src/bin/ephoto_directory_browser.c
+++ b/src/bin/ephoto_directory_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);
diff --git a/src/bin/ephoto_main.c b/src/bin/ephoto_main.c
index ac94f41..ef6e37d 100644
--- a/src/bin/ephoto_main.c
+++ b/src/bin/ephoto_main.c
@@ -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;
diff --git a/src/bin/ephoto_thumb_browser.c b/src/bin/ephoto_thumb_browser.c
index aa72ff2..14c748f 100644
--- a/src/bin/ephoto_thumb_browser.c
+++ b/src/bin/ephoto_thumb_browser.c
@@ -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;
 

-- 


Reply via email to