Author: peter
Date: 2007-01-16 21:12:42 +0000 (Tue, 16 Jan 2007)
New Revision: 24514

Modified:
   squeeze/trunk/libsqueeze/archive-support.c
   squeeze/trunk/libsqueeze/archive.c
   squeeze/trunk/libsqueeze/archive.h
Log:
remove form archive tries to be better in sync with real archive


Modified: squeeze/trunk/libsqueeze/archive-support.c
===================================================================
--- squeeze/trunk/libsqueeze/archive-support.c  2007-01-16 20:52:50 UTC (rev 
24513)
+++ squeeze/trunk/libsqueeze/archive-support.c  2007-01-16 21:12:42 UTC (rev 
24514)
@@ -230,23 +230,17 @@
 {
        if(support->remove)
        {
-               gchar *path;
-               LSQArchiveIter *entry, *child;
+               const gchar *path;
                GSList *iter, *del = iter = g_slist_copy(files);
                /* TODO: is add children really nesecery? */
                lsq_archive_add_children(archive, files);
                while(iter)
                {
-                       path = g_strdup((const gchar*)iter->data);
-               //      *strrchr(path, '/') = '\0';
-                       entry = lsq_archive_get_iter(archive, path);
-                       g_free(path);
-                       child = lsq_archive_get_iter(archive, (const 
gchar*)iter->data);
-                       lsq_archive_iter_del_child(archive, entry, child);
+                       path = (const gchar*)iter->data;
+                       lsq_archive_del_file(archive, path);
                        iter = g_slist_next(iter);
                }
                g_slist_free(del);
-               g_debug("removed");
                lsq_archive_set_status(archive, LSQ_ARCHIVESTATUS_REMOVE);
                archive->support = support;
                return support->remove(archive, files);

Modified: squeeze/trunk/libsqueeze/archive.c
===================================================================
--- squeeze/trunk/libsqueeze/archive.c  2007-01-16 20:52:50 UTC (rev 24513)
+++ squeeze/trunk/libsqueeze/archive.c  2007-01-16 21:12:42 UTC (rev 24514)
@@ -534,7 +534,6 @@
 LSQArchiveIter *
 lsq_archive_get_iter(const LSQArchive *archive, const gchar *path)
 {
-
        if(!path)
                return (LSQArchiveIter *)archive->root_entry;
 
@@ -586,7 +585,6 @@
 
        while(iter[1]) /* next iter must exist */
        {
-               g_debug(*iter);
                if((*iter)[0])
                {
                        entry = lsq_archive_iter_get_child(archive, entry, 
*iter);
@@ -1019,15 +1017,66 @@
 }
 
 /** 
- * gboolean 
- * lsq_archive_iter_del_child(const LSQArchive *, LSQArchiveIter *, 
LSQArchiveIter *)
- *
- * delete a child (if it can be found)
  **/
 gboolean
-lsq_archive_iter_del_child(LSQArchive *archive, LSQArchiveIter *parent, 
LSQArchiveIter *child)
+lsq_archive_del_file(LSQArchive *archive, const gchar *path)
 {
-       return lsq_archive_entry_del_child(archive, parent, child->filename);
+       if(!path)
+               return FALSE;
+
+       gchar **buf = g_strsplit_set(path, "/\n", -1);
+       gchar **iter = buf;
+       LSQArchiveIter *entry = (LSQArchiveIter *)archive->root_entry;
+       GSList *prev_iter, *stack_iter, *stack = NULL;
+
+       if(path[0] == '/' && lsq_archive_iter_get_child(archive, 
archive->root_entry, "/"))
+       {
+               g_free(iter[0]);
+               iter[0] = strdup("/");
+       }
+
+       while(*iter)
+       {
+               if((*iter)[0])
+               {
+                       entry = lsq_archive_iter_get_child(archive, entry, 
*iter);
+                       if(!entry)
+                       {
+                               g_slist_free(stack);
+                               g_strfreev(buf);
+                               return FALSE;
+                       }
+                       stack = g_slist_prepend(stack, entry);
+               }
+               iter++;
+       }
+
+       g_strfreev(buf);
+
+       stack_iter = g_slist_next(stack);
+       prev_iter = stack;
+
+       while(stack_iter)
+       {
+               entry = (LSQEntry*)stack_iter->data;
+
+               if(entry->props || lsq_archive_iter_n_children(archive, entry) 
> 1)
+                       break;
+
+               prev_iter = stack_iter;
+               stack_iter = g_slist_next(stack_iter);
+       }
+
+       if(!stack_iter)
+       {
+               entry = archive->root_entry;
+       }
+
+       gboolean result = lsq_archive_entry_del_child(archive, entry, 
((LSQEntry*)prev_iter->data)->filename);
+
+       g_slist_free(stack);
+
+       return result;
 }
 
 /**

Modified: squeeze/trunk/libsqueeze/archive.h
===================================================================
--- squeeze/trunk/libsqueeze/archive.h  2007-01-16 20:52:50 UTC (rev 24513)
+++ squeeze/trunk/libsqueeze/archive.h  2007-01-16 21:12:42 UTC (rev 24514)
@@ -121,7 +121,6 @@
 LSQArchiveIter     *lsq_archive_iter_nth_child(LSQArchive *, LSQArchiveIter *, 
guint);
 LSQArchiveIter     *lsq_archive_iter_add_child(LSQArchive *, LSQArchiveIter *, 
const gchar *);
 LSQArchiveIter     *lsq_archive_iter_get_child(const LSQArchive *, const 
LSQArchiveIter *, const gchar *);
-gboolean            lsq_archive_iter_del_child(LSQArchive *, LSQArchiveIter *, 
LSQArchiveIter *);
 
 /* void            lsq_archive_iter_set_filename(LSQArchive *, LSQArchiveIter 
*, const gchar *); */
 void                lsq_archive_iter_set_mime(LSQArchive *, LSQArchiveIter *, 
ThunarVfsMimeInfo *) G_GNUC_INTERNAL;
@@ -136,6 +135,7 @@
 void                lsq_archive_iter_get_icon_name(const LSQArchive *, const 
LSQArchiveIter *, GValue *, GtkIconTheme *icon_theme);
 
 LSQArchiveIter     *lsq_archive_add_file(LSQArchive *, const gchar *) 
G_GNUC_INTERNAL;
+gboolean            lsq_archive_del_file(LSQArchive *, const gchar *);
 LSQArchiveIter     *lsq_archive_get_iter(const LSQArchive *, const gchar *);
 GType               lsq_archive_get_entry_property_type(LSQArchive *, guint);
 const gchar        *lsq_archive_get_entry_property_name(LSQArchive *, guint);

_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to