use the new notification for collections
authorVladimir Nadvornik <nadvornik@suse.cz>
Sat, 7 Jun 2008 10:45:33 +0000 (10:45 +0000)
committerVladimir Nadvornik <nadvornik@suse.cz>
Sat, 7 Jun 2008 10:45:33 +0000 (10:45 +0000)
src/collect-io.c
src/collect-io.h
src/collect.c
src/collect.h
src/main.c
src/utilops.c

index f9d10e3..97a3df4 100644 (file)
@@ -888,7 +888,7 @@ void collect_manager_add(FileData *fd, const gchar *collection)
        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);
                        }
@@ -924,3 +924,26 @@ void collect_manager_flush(void)
        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;
+               }
+
+}
index b9b2cac..fc630b1 100644 (file)
@@ -48,6 +48,7 @@ void collect_manager_remove(FileData *fd, const gchar *collection);
 /* commit pending operations to disk */
 void collect_manager_flush(void);
 
+void collect_manager_notify_cb(FileData *fd, NotifyType type, gpointer data);
 
 
 #endif
index a37a9bc..089d715 100644 (file)
@@ -49,6 +49,8 @@ static void collection_window_update(CollectWindow *cw, CollectInfo *ci);
 
 static void collection_window_close(CollectWindow *cw);
 
+static void collection_notify_cb(FileData *fd, NotifyType type, gpointer data);
+
 /*
  *-------------------------------------------------------------------
  * data, list handling
@@ -214,14 +216,14 @@ GList *collection_list_remove(GList *list, CollectInfo *ci)
        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;
                }
 
@@ -362,6 +364,8 @@ CollectionData *collection_new(const gchar *path)
                untitled_counter++;
                }
 
+       file_data_register_notify_func(collection_notify_cb, cd, NOTIFY_PRIORITY_MEDIUM);
+
        return cd;
 }
 
@@ -373,6 +377,8 @@ void collection_free(CollectionData *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);
 
@@ -681,7 +687,7 @@ gint collection_remove(CollectionData *cd, FileData *fd)
 {
        CollectInfo *ci;
 
-       ci = collection_list_find(cd->list, fd->path);
+       ci = collection_list_find_fd(cd->list, fd);
 
        if (!ci) return FALSE;
 
@@ -734,14 +740,10 @@ void collection_remove_by_info_list(CollectionData *cd, GList *list)
 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);
@@ -760,42 +762,30 @@ void collection_update_geometry(CollectionData *cd)
  *-------------------------------------------------------------------
  */
 
-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
index 15206c1..00b51ea 100644 (file)
@@ -29,7 +29,7 @@ GList *collection_list_sort(GList *list, SortType method);
 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);
@@ -71,9 +71,6 @@ gint collection_rename(CollectionData *cd, FileData *fd);
 
 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);
index 69693ad..0c679ea 100644 (file)
@@ -683,6 +683,7 @@ int main(int argc, char *argv[])
 
        /* register global notify functions */
        file_data_register_notify_func(cache_notify_cb, NULL, NOTIFY_PRIORITY_HIGH);
+       file_data_register_notify_func(collect_manager_notify_cb, NULL, NOTIFY_PRIORITY_LOW);
 
        parse_command_line_for_debug_option(argc, argv);
 
index 355875d..36a7ce3 100644 (file)
@@ -239,28 +239,6 @@ static gint filename_base_length(const gchar *name)
 /* 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);