Jannis Pohlmann wrote:
> Hi all,
Hey Jannis,
> Benny, I didn't make the plugin resistent, as there seem to be no
> problems unloading TagLib, as far as I can see.
Probably, tho I'm not sure about the taglib_tag_free_strings() function,
looks like TagLib allocates static data.
> There still may be memory leaks I have not yet detected, so feel free
> to send a mail or file a bug report on BerliOS.
Attached is a patch to fix a few mem leaks. It also uses shorter labels
for the check buttons, otherwise the widget gets too large (IMHO). And
it strips additional whitespace from ID3.
The renamer works like a charm, good work.
> Thanks - and have fun,
> Jannis
Benedikt
PS: Can you please renamer the ThunarSbrTagRenamer and
ThunarSbrTagRenamerProvider classes, else we may run into name conflicts
later. At best, external plugins shouldn't use the "Thunar" name prefix
for GTypes.
--- thunar-sbr-tag-renamer.c.orig Thu Mar 23 15:50:34 2006
+++ thunar-sbr-tag-renamer.c Thu Mar 23 16:02:31 2006
@@ -232,7 +232,7 @@
tag_renamer->tooltips = gtk_tooltips_new ();
exo_gtk_object_ref_sink (GTK_OBJECT (tag_renamer->tooltips));
- table = gtk_table_new (4, 3, FALSE);
+ table = gtk_table_new (2, 3, FALSE);
gtk_table_set_row_spacings (GTK_TABLE (table), 6);
gtk_table_set_col_spacings (GTK_TABLE (table), 12);
gtk_box_pack_start (GTK_BOX (tag_renamer), table, FALSE, FALSE, 0);
@@ -262,14 +262,14 @@
atk_relation_set_add (relations, relation);
g_object_unref (G_OBJECT (relation));
- button = gtk_check_button_new_with_mnemonic (_("_Replace spaces with underscores"));
+ button = gtk_check_button_new_with_mnemonic (_("Use _underscores"));
exo_mutual_binding_new (G_OBJECT (button), "active", G_OBJECT (tag_renamer), "replace-spaces");
gtk_tooltips_set_tip (tag_renamer->tooltips, button, _("Activating this option will replace all spaces in the target filename "
"with underscores."), NULL);
gtk_table_attach (GTK_TABLE (table), button, 2, 3, 0, 1, GTK_FILL, 0, 0, 0);
gtk_widget_show (button);
- button = gtk_check_button_new_with_mnemonic (_("Convert to _lowercase"));
+ button = gtk_check_button_new_with_mnemonic (_("Use _lowercase"));
exo_mutual_binding_new (G_OBJECT (button), "active", G_OBJECT (tag_renamer), "lowercase");
gtk_tooltips_set_tip (tag_renamer->tooltips, button, _("If you activate this, the resulting filename will not contain any "
"uppercase letters."), NULL);
@@ -310,6 +310,9 @@
{
ThunarSbrTagRenamer *tag_renamer = THUNAR_SBR_TAG_RENAMER (object);
+ /* release the tooltips */
+ g_object_unref (G_OBJECT (tag_renamer->tooltips));
+
/* Free strings */
g_free (tag_renamer->artist);
g_free (tag_renamer->title);
@@ -422,9 +425,12 @@
gchar *title;
guint track_num;
gchar *track;
+ gchar *uri;
/* Strip of the file:// from the URI */
- filename = g_filename_from_uri (thunarx_file_info_get_uri (file), NULL, NULL);
+ uri = thunarx_file_info_get_uri (file);
+ filename = g_filename_from_uri (uri, NULL, NULL);
+ g_free (uri);
/* Return if URI could not be resolved */
if (G_UNLIKELY (filename == NULL))
@@ -435,14 +441,21 @@
/* Don't change anything if taglib file could not be allocated */
if (G_UNLIKELY (taglib_file == NULL))
- return g_strdup (text);
+ {
+ g_free (filename);
+ return g_strdup (text);
+ }
/* Load tag info */
taglib_tag = taglib_file_tag (taglib_file);
/* Abort if tag info could not be loaded */
if (G_UNLIKELY (taglib_tag == NULL))
- return g_strdup (text);
+ {
+ taglib_file_free (taglib_file);
+ g_free (filename);
+ return g_strdup (text);
+ }
/* Load tag properties */
taglib_properties = taglib_file_audioproperties (taglib_file);
@@ -452,6 +465,10 @@
title = g_strdup (taglib_tag_title (taglib_tag));
track_num = taglib_tag_track (taglib_tag);
+ /* stip additional whitespace from the tags */
+ g_strstrip (artist);
+ g_strstrip (title);
+
/* Replace missing artist tag */
if (G_UNLIKELY (g_utf8_strlen (artist, -1) == 0))
artist = g_strdup (thunar_sbr_tag_renamer_get_artist (tag_renamer));
@@ -466,9 +483,9 @@
track = g_strdup_printf ("%02d", taglib_tag_track (taglib_tag));
/* Replace special chars with underscores */
- artist = g_strdelimit (artist, "/", '_');
- title = g_strdelimit (title, "/", '_');
- track = g_strdelimit (track, "/", '_');
+ artist = g_strdelimit (artist, G_DIR_SEPARATOR_S, '_');
+ title = g_strdelimit (title, G_DIR_SEPARATOR_S, '_');
+ track = g_strdelimit (track, G_DIR_SEPARATOR_S, '_');
switch (thunar_sbr_tag_renamer_get_scheme (tag_renamer))
{
_______________________________________________
Thunar-dev mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/thunar-dev