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