cw = collection_window_find_by_path(collection);
if (cw)
{
- if (collection_list_find(cw->cd->list, fd->path) == NULL)
+ if (collection_list_find_fd(cw->cd->list, fd) == NULL)
{
collection_add(cw->cd, fd, FALSE);
}
DEBUG_1("collection manager flushing");
while (collect_manager_process_cb(NULL));
}
+
+void collect_manager_notify_cb(FileData *fd, NotifyType type, gpointer data)
+{
+
+ if (!fd->change) return;
+
+ switch(fd->change->type)
+ {
+ case FILEDATA_CHANGE_MOVE:
+ collect_manager_moved(fd);
+ break;
+ case FILEDATA_CHANGE_COPY:
+ break;
+ case FILEDATA_CHANGE_RENAME:
+ collect_manager_moved(fd);
+ break;
+ case FILEDATA_CHANGE_DELETE:
+ break;
+ case FILEDATA_CHANGE_UNSPECIFIED:
+ break;
+ }
+
+}
static void collection_window_close(CollectWindow *cw);
+static void collection_notify_cb(FileData *fd, NotifyType type, gpointer data);
+
/*
*-------------------------------------------------------------------
* data, list handling
return list;
}
-CollectInfo *collection_list_find(GList *list, const gchar *path)
+CollectInfo *collection_list_find_fd(GList *list, FileData *fd)
{
GList *work = list;
while (work)
{
CollectInfo *ci = work->data;
- if (strcmp(ci->fd->path, path) == 0) return ci;
+ if (ci->fd == fd) return ci;
work = work->next;
}
untitled_counter++;
}
+ file_data_register_notify_func(collection_notify_cb, cd, NOTIFY_PRIORITY_MEDIUM);
+
return cd;
}
collection_load_stop(cd);
collection_list_free(cd->list);
+
+ file_data_unregister_notify_func(collection_notify_cb, cd);
collection_list = g_list_remove(collection_list, cd);
{
CollectInfo *ci;
- ci = collection_list_find(cd->list, fd->path);
+ ci = collection_list_find_fd(cd->list, fd);
if (!ci) return FALSE;
gint collection_rename(CollectionData *cd, FileData *fd)
{
CollectInfo *ci;
- const gchar *source = fd->change->source;
-// const gchar *dest = fd->change->dest;
- ci = collection_list_find(cd->list, source);
+ ci = collection_list_find_fd(cd->list, fd);
if (!ci) return FALSE;
-// g_free(ci->path);
-// ci->path = g_strdup(dest); FIXME
cd->changed = TRUE;
collection_window_update(collection_window_find(cd), ci);
*-------------------------------------------------------------------
*/
-void collection_maint_removed(FileData *fd)
+static void collection_notify_cb(FileData *fd, NotifyType type, gpointer data)
{
- GList *work;
+ CollectionData *cd = data;
- work = collection_list;
- while (work)
+ if (!fd->change) return;
+
+ switch(fd->change->type)
{
- CollectionData *cd = work->data;
- work = work->next;
-
- while (collection_remove(cd, fd));
- }
-#if 0
- /* Do we really need to do this? removed files are
- * automatically ignored when loading a collection.
- */
- collect_manager_moved(fd, NULL);
-#endif
-}
-
-void collection_maint_renamed(FileData *fd)
-{
- GList *work;
-
- work = collection_list;
- while (work)
- {
- CollectionData *cd = work->data;
- work = work->next;
-
- while (collection_rename(cd, fd));
+ case FILEDATA_CHANGE_MOVE:
+ case FILEDATA_CHANGE_RENAME:
+ collection_rename(cd, fd);
+ break;
+ case FILEDATA_CHANGE_COPY:
+ break;
+ case FILEDATA_CHANGE_DELETE:
+ while (collection_remove(cd, fd));
+ break;
+ case FILEDATA_CHANGE_UNSPECIFIED:
+ break;
}
- collect_manager_moved(fd);
}
+
/*
*-------------------------------------------------------------------
* window key presses
GList *collection_list_add(GList *list, CollectInfo *ci, SortType method);
GList *collection_list_insert(GList *list, CollectInfo *ci, CollectInfo *insert_ci, SortType method);
GList *collection_list_remove(GList *list, CollectInfo *ci);
-CollectInfo *collection_list_find(GList *list, const gchar *path);
+CollectInfo *collection_list_find_fd(GList *list, FileData *fd);
GList *collection_list_to_filelist(GList *list);
CollectionData *collection_new(const gchar *path);
void collection_update_geometry(CollectionData *cd);
-void collection_maint_removed(FileData *fd);
-void collection_maint_renamed(FileData *fd);
-
CollectWindow *collection_window_new(const gchar *path);
void collection_window_close_by_collection(CollectionData *cd);
CollectWindow *collection_window_find(CollectionData *cd);
/* FIXME this is a temporary solution */
void file_data_notify_ci(FileData *fd)
{
- FileDataChangeType type = fd->change->type;
- switch (type)
- {
- case FILEDATA_CHANGE_MOVE:
- collection_maint_renamed(fd);
-
- break;
- case FILEDATA_CHANGE_COPY:
- break;
- case FILEDATA_CHANGE_RENAME:
- collection_maint_renamed(fd);
-
- break;
- case FILEDATA_CHANGE_DELETE:
-
- collection_maint_removed(fd);
- break;
- case FILEDATA_CHANGE_UNSPECIFIED:
- /* FIXME */
- break;
- }
-
/* this is the new way: */
file_data_send_notification(fd, NOTIFY_TYPE_CHANGE);