libgpod/libgpod-0.6.0-photoremove.p...

80 lines
2.7 KiB
Diff

Index: ChangeLog
===================================================================
--- ChangeLog (revision 1778)
+++ ChangeLog (revision 1785)
@@ -1,5 +1,21 @@
-====== libgpod 0.6.0 ======
+2007-11-14 Christophe <teuf@gnome.org>
+ * src/itdb_photoalbum.c: use g_list_remove all instead of an
+ inefficient combination of g_list_find + g_list_remove
+
+2007-11-14 Jorg Schuler <jcsjcs at users.sourceforge.net>
+
+ * src/itdb_photoalbum.c (itdb_photodb_photoalbum_remove): make
+ sure same photo isn't freed multiple times if it was added in an
+ album multiple times.
+
+2007-11-13 Christophe Fergeau <teuf@gnome.org>
+
+ * src/itdb_photoalbum.c: fix bug in itdb_photodb_photoalbum_remove,
+ when removing all the photos from the photodatabase, we were
+ erasing elements and iterating over the list at the same time,
+ which resulted in the function not working properly
+
2007-11-10 Christophe Fergeau <teuf@gnome.org>
* Makefile.am: add README.SysInfo to EXTRADIST
Index: src/itdb_photoalbum.c
===================================================================
--- src/itdb_photoalbum.c (revision 1778)
+++ src/itdb_photoalbum.c (revision 1785)
@@ -1,4 +1,4 @@
-/* Time-stamp: <2007-11-03 20:27:36 jcs>
+/*
|
| Copyright (C) 2002-2006 Jorg Schuler <jcsjcs at users sourceforge net>
| Part of the gtkpod project.
@@ -615,10 +615,7 @@
for (it = db->photoalbums; it != NULL; it = it->next)
{
Itdb_PhotoAlbum *_album = it->data;
- while (g_list_find (_album->members, photo))
- {
- _album->members = g_list_remove (_album->members, photo);
- }
+ _album->members = g_list_remove_all (_album->members, photo);
}
/* Remove the photo from the image list */
db->photos = g_list_remove (db->photos, photo);
@@ -678,8 +675,6 @@
Itdb_PhotoAlbum *album,
gboolean remove_pics)
{
- GList *it;
-
g_return_if_fail (db);
g_return_if_fail (album);
@@ -687,11 +682,16 @@
* and remove them from the database */
if (remove_pics)
{
- for (it = album->members; it != NULL; it = it->next )
+ /* we can't iterate over album->members because
+ itdb_photodb_remove_photo() modifies album->members in
+ a not easily predicable way (e.g. @photo may exist in the
+ album several times). Therefore we remove photos until
+ album->members is empty. */
+ while (album->members)
{
- Itdb_Artwork *photo = it->data;
- itdb_photodb_remove_photo (db, NULL, photo);
- }
+ Itdb_Artwork *photo = album->members->data;
+ itdb_photodb_remove_photo (db, NULL, photo);
+ }
}
db->photoalbums = g_list_remove (db->photoalbums, album);
itdb_photodb_photoalbum_free (album);