lets make some XXX notes about monitoring non-existant dirs.

SVN revision: 79123
This commit is contained in:
Carsten Haitzler 2012-11-11 21:34:49 +00:00
parent b4490d909e
commit 6475821a07
1 changed files with 42 additions and 20 deletions

View File

@ -201,11 +201,8 @@ icon_changes_cb(void *data __UNUSED__, Ecore_File_Monitor *em __UNUSED__,
static void
icon_changes_monitor_add(const char *path)
{
Eina_Iterator *it;
Eina_File_Direct_Info *info;
Ecore_File_Monitor *mon;
if (!ecore_file_is_dir(path)) return;
if (eina_hash_find(change_monitors, path)) return;
/* TODO: Check for symlink and monitor the real path */
mon = ecore_file_monitor_add(path,
@ -213,18 +210,31 @@ icon_changes_monitor_add(const char *path)
NULL);
if (mon)
eina_hash_add(change_monitors, path, mon);
}
static void
icon_changes_listen_recursive(const char *path, Eina_Bool base)
{
Eina_Iterator *it;
Eina_File_Direct_Info *info;
if ((!ecore_file_is_dir(path)) && (base))
{
// XXX: if it doesn't exist... walk the parent dirs back down
// to this path until we find one that doesn't exist, then
// monitor its parent, and treat it specially as it needs
// to look for JUST the creation of this specific child
// and when this child is created, replace this monitor with
// monitoring the next specific child dir down until we are
// monitoring the original path again.
}
desktop_changes_monitor_add(path);
it = eina_file_stat_ls(path);
if (!it) return;
EINA_ITERATOR_FOREACH(it, info)
{
if (info->type != EINA_FILE_DIR) continue;
/* TODO: Check for symlink and monitor the real path */
mon = ecore_file_monitor_add(info->path,
icon_changes_cb,
NULL);
if (mon)
eina_hash_add(change_monitors, info->path, mon);
icon_changes_listen_recursive(info->path, EINA_FALSE);
}
eina_iterator_free(it);
}
@ -237,23 +247,25 @@ icon_changes_listen(void)
char buf[PATH_MAX];
const char *dir;
icon_changes_monitor_add(efreet_icon_deprecated_user_dir_get());
icon_changes_monitor_add(efreet_icon_user_dir_get());
icon_changes_listen_recursive(efreet_icon_deprecated_user_dir_get(), EINA_TRUE);
icon_changes_listen_recursive(efreet_icon_user_dir_get(), EINA_TRUE);
EINA_LIST_FOREACH(icon_extra_dirs, l, dir)
icon_changes_monitor_add(dir);
{
icon_changes_listen_recursive(dir, EINA_TRUE);
}
xdg_dirs = efreet_data_dirs_get();
EINA_LIST_FOREACH(xdg_dirs, l, dir)
{
snprintf(buf, sizeof(buf), "%s/icons", dir);
icon_changes_monitor_add(buf);
icon_changes_listen_recursive(buf, EINA_TRUE);
}
#ifndef STRICT_SPEC
EINA_LIST_FOREACH(xdg_dirs, l, dir)
{
snprintf(buf, sizeof(buf), "%s/pixmaps", dir);
icon_changes_monitor_add(buf);
icon_changes_listen_recursive(buf, EINA_TRUE);
}
#endif
@ -313,19 +325,28 @@ desktop_changes_monitor_add(const char *path)
}
static void
desktop_changes_listen_recursive(const char *path)
desktop_changes_listen_recursive(const char *path, Eina_Bool base)
{
Eina_Iterator *it;
Eina_File_Direct_Info *info;
if ((!ecore_file_is_dir(path)) && (base))
{
// XXX: if it doesn't exist... walk the parent dirs back down
// to this path until we find one that doesn't exist, then
// monitor its parent, and treat it specially as it needs
// to look for JUST the creation of this specific child
// and when this child is created, replace this monitor with
// monitoring the next specific child dir down until we are
// monitoring the original path again.
}
desktop_changes_monitor_add(path);
it = eina_file_stat_ls(path);
if (!it) return;
EINA_ITERATOR_FOREACH(it, info)
{
if (info->type != EINA_FILE_DIR) continue;
desktop_changes_listen_recursive(info->path);
desktop_changes_listen_recursive(info->path, EINA_FALSE);
}
eina_iterator_free(it);
}
@ -338,12 +359,13 @@ desktop_changes_listen(void)
EINA_LIST_FOREACH(desktop_system_dirs, l, path)
{
if (ecore_file_is_dir(path))
desktop_changes_listen_recursive(path);
desktop_changes_listen_recursive(path, EINA_TRUE);
}
EINA_LIST_FOREACH(desktop_extra_dirs, l, path)
desktop_changes_monitor_add(path);
{
desktop_changes_listen_recursive(path, EINA_TRUE);
}
}
static void