~ubuntu-branches/ubuntu/raring/thunar-media-tags-plugin/raring

« back to all changes in this revision

Viewing changes to .pc/02_port-to-exo-1.patch/thunar-plugin/tag-renamer.c

  • Committer: Package Import Robot
  • Author(s): Yves-Alexis Perez
  • Date: 2011-11-30 22:20:30 UTC
  • mfrom: (1.1.5) (1.2.5 sid)
  • Revision ID: package-import@ubuntu.com-20111130222030-5pjt5dulv5rnriql
Tags: 0.2.0-1
* New upstream release.
* debian/patches:
  - 01_port-to-thunarx-2 and 02_port-to-exo-1,
    03_fix-crash-with-ogg-video-files and 04_fix-implicit-dso-linkin
    dropped, included upstream.
* debian/rules:
  - drop xdt-autogen rules, not needed anymore.
  - use dh9 and dpkg-dev 1.16.1 hardening rules.
  - switch to multiarch paths.
* debian/compat bumped to 9 for hardening support.
* debian/control:
  - update debhelper build-dep for hardening support
  - add dpkg-dev build-dep for hardening support
  - drop build-deps for autoreconf.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* $Id: tag-renamer.c 1450 2006-06-17 19:10:02Z jannis $ */
2
 
/*-
3
 
 * Copyright (c) 2006 Jannis Pohlmann <jannis@xfce.org>
4
 
 *
5
 
 * This program is free software; you can redistribute it and/or 
6
 
 * modify it under the terms of the GNU General Public License as 
7
 
 * published by the Free Software Foundation; either version 2 of the 
8
 
 * License, or (at your option) any later version.
9
 
 *
10
 
 * This program is distributed in the hope that it will be useful, but 
11
 
 * WITHOUT ANY WARRANTY; without even the implied warranty of 
12
 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
13
 
 * General Public License for more details.
14
 
 *
15
 
 * You should have received a copy of the GNU General Public License 
16
 
 * along with this program; if not, write to the Free Software 
17
 
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 
18
 
 * MA 02111-1307 USA.
19
 
 */
20
 
 
21
 
#ifdef HAVE_CONFIG_H
22
 
#include <config.h>
23
 
#endif
24
 
 
25
 
#ifdef HAVE_MEMORY_H
26
 
#include <memory.h>
27
 
#endif
28
 
#ifdef HAVE_STRING_H
29
 
#include <string.h>
30
 
#endif
31
 
 
32
 
#include <taglib/tag_c.h>
33
 
 
34
 
#include <exo/exo.h>
35
 
 
36
 
#include <tag-renamer.h>
37
 
#include <audio-tags-page.h>
38
 
#include <media-tags-provider.h>
39
 
 
40
 
 
41
 
 
42
 
static GType tag_renamer_format_type;
43
 
 
44
 
 
45
 
 
46
 
GType
47
 
tag_renamer_format_get_type (void)
48
 
{
49
 
  return tag_renamer_format_type;
50
 
}
51
 
 
52
 
 
53
 
 
54
 
void
55
 
tag_renamer_register_enum_types (ThunarxProviderPlugin *plugin)
56
 
{
57
 
  static const GEnumValue tag_renamer_format_values[] =
58
 
  {
59
 
    { TAG_RENAMER_FORMAT_TITLE,                  "TAG_RENAMER_FORMAT_TITLE",                  N_ ("Title"),  },
60
 
    { TAG_RENAMER_FORMAT_ARTIST_TITLE,           "TAG_RENAMER_FORMAT_ARTIST_TITLE",           N_ ("Artist - Title"), },
61
 
    { TAG_RENAMER_FORMAT_TRACK_TITLE,            "TAG_RENAMER_FORMAT_TRACK_TITLE",            N_ ("Track - Title"), },
62
 
    { TAG_RENAMER_FORMAT_TRACK_ARTIST_TITLE,     "TAG_RENAMER_FORMAT_TRACK_ARTIST_TITLE",     N_ ("Track - Artist - Title"), },
63
 
    { TAG_RENAMER_FORMAT_TRACK_DOT_TITLE,        "TAG_RENAMER_FORMAT_TRACK_DOT_TITLE",        N_ ("Track. Title"), },
64
 
    { TAG_RENAMER_FORMAT_TRACK_DOT_ARTIST_TITLE, "TAG_RENAMER_FORMAT_TRACK_DOT_ARTIST_TITLE", N_ ("Track. Artist - Title"), },
65
 
    { TAG_RENAMER_FORMAT_ARTIST_TRACK_TITLE,     "TAG_RENAMER_FORMAT_ARTIST_TRACK_TITLE",     N_ ("Artist - Track - Title"), },
66
 
    { 0,                                         NULL,                                        NULL, },
67
 
  };
68
 
 
69
 
  tag_renamer_format_type = thunarx_provider_plugin_register_enum (plugin, "TagRenamerFormat", tag_renamer_format_values);
70
 
}
71
 
 
72
 
 
73
 
 
74
 
/* Property identifiers */
75
 
enum
76
 
{
77
 
  PROP_0,
78
 
  PROP_FORMAT,
79
 
  PROP_REPLACE_SPACES,
80
 
  PROP_LOWERCASE,
81
 
  PROP_TITLE,
82
 
};
83
 
 
84
 
 
85
 
 
86
 
static void   tag_renamer_class_init          (TagRenamerClass *klass);
87
 
static void   tag_renamer_init                (TagRenamer      *tag_renamer);
88
 
static void   tag_renamer_finalize            (GObject         *object);
89
 
static void   tag_renamer_get_property        (GObject         *object,
90
 
                                               guint            prop_id,
91
 
                                               GValue          *value,
92
 
                                               GParamSpec      *pspec);
93
 
static void   tag_renamer_set_property        (GObject         *object,
94
 
                                               guint            prop_id,
95
 
                                               const GValue    *value,
96
 
                                               GParamSpec      *pspec);
97
 
static void   tag_renamer_realize             (GtkWidget       *widget);
98
 
static gchar *tag_renamer_process             (ThunarxRenamer  *renamer,
99
 
                                               ThunarxFileInfo *file,
100
 
                                               const gchar     *text,
101
 
                                               guint            index);
102
 
static GList *tag_renamer_get_actions         (ThunarxRenamer  *renamer,
103
 
                                               GtkWindow       *window,
104
 
                                               GList           *files);
105
 
static void   tag_renamer_edit_tags_activated (GtkAction       *action,
106
 
                                               ThunarxFileInfo *file);
107
 
 
108
 
 
109
 
 
110
 
struct _TagRenamerClass
111
 
{
112
 
  ThunarxRenamerClass __parent__;
113
 
};
114
 
 
115
 
struct _TagRenamer
116
 
{
117
 
  ThunarxRenamer __parent__;
118
 
 
119
 
  /* Widgets */
120
 
  GtkTooltips     *tooltips;
121
 
 
122
 
  /* Properties */
123
 
  TagRenamerFormat format;
124
 
  gboolean         replace_spaces;
125
 
  gboolean         lowercase;
126
 
  gchar           *artist;
127
 
  gchar           *title;
128
 
};
129
 
 
130
 
 
131
 
 
132
 
THUNARX_DEFINE_TYPE (TagRenamer, tag_renamer, THUNARX_TYPE_RENAMER);
133
 
 
134
 
 
135
 
 
136
 
static void
137
 
tag_renamer_class_init (TagRenamerClass *klass)
138
 
{
139
 
  ThunarxRenamerClass *thunarxrenamer_class;
140
 
  GtkWidgetClass      *gtkwidget_class;
141
 
  GObjectClass        *gobject_class;
142
 
 
143
 
  gobject_class = G_OBJECT_CLASS (klass);
144
 
  gobject_class->finalize = tag_renamer_finalize;
145
 
  gobject_class->get_property = tag_renamer_get_property;
146
 
  gobject_class->set_property = tag_renamer_set_property;
147
 
  
148
 
  gtkwidget_class = GTK_WIDGET_CLASS (klass);
149
 
  gtkwidget_class->realize = tag_renamer_realize;
150
 
 
151
 
  thunarxrenamer_class = THUNARX_RENAMER_CLASS (klass);
152
 
  thunarxrenamer_class->process = tag_renamer_process;
153
 
  thunarxrenamer_class->get_actions = tag_renamer_get_actions;
154
 
 
155
 
  /**
156
 
   * TagRenamer:format:
157
 
   *
158
 
   * Naming format used for renaming the selected files.
159
 
   **/
160
 
  g_object_class_install_property (gobject_class,
161
 
                                   PROP_FORMAT,
162
 
                                   g_param_spec_enum ("format",
163
 
                                                      "format",
164
 
                                                      "format",
165
 
                                                      TYPE_TAG_RENAMER_FORMAT,
166
 
                                                      TAG_RENAMER_FORMAT_TRACK_TITLE,
167
 
                                                      G_PARAM_READWRITE));
168
 
 
169
 
  /**
170
 
   * TagRenamer:replace-spaces:
171
 
   *
172
 
   * Whether spaces should be replaced with _ or not
173
 
   **/
174
 
  g_object_class_install_property (gobject_class,
175
 
                                   PROP_REPLACE_SPACES,
176
 
                                   g_param_spec_boolean ("replace-spaces",
177
 
                                                         "replace-spaces",
178
 
                                                         "replace-spaces",
179
 
                                                         FALSE,
180
 
                                                         G_PARAM_READWRITE));
181
 
 
182
 
  /**
183
 
   * TagRenamer:lowercase:
184
 
   *
185
 
   * Whether all chars will be converted to lowercase.
186
 
   **/
187
 
  g_object_class_install_property (gobject_class,
188
 
                                   PROP_LOWERCASE,
189
 
                                   g_param_spec_boolean ("lowercase",
190
 
                                                         "lowercase",
191
 
                                                         "lowercase",
192
 
                                                         FALSE,
193
 
                                                         G_PARAM_READWRITE));
194
 
 
195
 
}
196
 
 
197
 
 
198
 
 
199
 
static void 
200
 
tag_renamer_init (TagRenamer *tag_renamer)
201
 
{
202
 
  AtkRelationSet *relations;
203
 
  AtkRelation    *relation;
204
 
  AtkObject      *object;
205
 
  GtkWidget      *table;
206
 
  GtkWidget      *label;
207
 
  GtkWidget      *combo;
208
 
  GtkWidget      *button;
209
 
  GEnumClass     *klass;
210
 
  gint            n;
211
 
 
212
 
  /* Allocate shared tooltips */
213
 
  tag_renamer->tooltips = gtk_tooltips_new ();
214
 
  exo_gtk_object_ref_sink (GTK_OBJECT (tag_renamer->tooltips));
215
 
 
216
 
  table = gtk_table_new (2, 3, FALSE);
217
 
  gtk_table_set_row_spacings (GTK_TABLE (table), 6);
218
 
  gtk_table_set_col_spacings (GTK_TABLE (table), 12);
219
 
  gtk_box_pack_start (GTK_BOX (tag_renamer), table, FALSE, FALSE, 0);
220
 
  gtk_widget_show (table);
221
 
 
222
 
  /* Format label */
223
 
  label = gtk_label_new_with_mnemonic (_("_Format:"));
224
 
  gtk_misc_set_alignment (GTK_MISC (label), 0.05f,  0.5f);
225
 
  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_FILL, 0, 0, 0);
226
 
  gtk_widget_show (label);
227
 
 
228
 
  /* Format combo box */
229
 
  combo = gtk_combo_box_new_text ();
230
 
  klass = g_type_class_ref (TYPE_TAG_RENAMER_FORMAT);
231
 
  for (n = 0; n < klass->n_values; ++n)
232
 
    gtk_combo_box_append_text (GTK_COMBO_BOX (combo), _(klass->values[n].value_nick));
233
 
  exo_mutual_binding_new (G_OBJECT (tag_renamer), "format", G_OBJECT (combo), "active");
234
 
  gtk_table_attach (GTK_TABLE (table), combo, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
235
 
  gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo);
236
 
  g_type_class_unref (klass);
237
 
  gtk_widget_show (combo);
238
 
 
239
 
  /* Set Atk label relation for the combo box */
240
 
  object = gtk_widget_get_accessible (combo);
241
 
  relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label));
242
 
  relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR);
243
 
  atk_relation_set_add (relations, relation);
244
 
  g_object_unref (G_OBJECT (relation));
245
 
 
246
 
  button = gtk_check_button_new_with_mnemonic (_("_Underscores"));
247
 
  exo_mutual_binding_new (G_OBJECT (button), "active", G_OBJECT (tag_renamer), "replace-spaces");
248
 
  gtk_tooltips_set_tip (tag_renamer->tooltips, button, _("Activating this option will replace all spaces in the target filename "
249
 
        "with underscores."), NULL);
250
 
  gtk_table_attach (GTK_TABLE (table), button, 2, 3, 0, 1, GTK_FILL, 0, 0, 0);
251
 
  gtk_widget_show (button);
252
 
 
253
 
  button = gtk_check_button_new_with_mnemonic (_("_Lowercase"));
254
 
  exo_mutual_binding_new (G_OBJECT (button), "active", G_OBJECT (tag_renamer), "lowercase");
255
 
  gtk_tooltips_set_tip (tag_renamer->tooltips, button, _("If you activate this, the resulting filename will only contain lowercase letters."), NULL);
256
 
  gtk_table_attach (GTK_TABLE (table), button, 2, 3, 1, 2, GTK_FILL, 0, 0, 0);
257
 
  gtk_widget_show (button);
258
 
 
259
 
  /* TODO add entry for custom format here */
260
 
 
261
 
  /* Set initial values */
262
 
  tag_renamer->artist = g_strdup ("");
263
 
  tag_renamer->title = g_strdup ("");
264
 
  tag_renamer_set_artist (tag_renamer, _("Unknown Artist"));
265
 
  tag_renamer_set_title (tag_renamer, _("Unknown Title"));
266
 
}
267
 
 
268
 
 
269
 
 
270
 
static void
271
 
tag_renamer_finalize (GObject *object)
272
 
{
273
 
  TagRenamer *tag_renamer = TAG_RENAMER (object);
274
 
 
275
 
  /* release the tooltips */
276
 
  g_object_unref (G_OBJECT (tag_renamer->tooltips));
277
 
 
278
 
  /* Free strings */
279
 
  g_free (tag_renamer->artist);
280
 
  g_free (tag_renamer->title);
281
 
 
282
 
  (*G_OBJECT_CLASS (tag_renamer_parent_class)->finalize) (object);
283
 
}
284
 
 
285
 
 
286
 
 
287
 
static void
288
 
tag_renamer_get_property (GObject    *object,
289
 
                          guint       prop_id,
290
 
                          GValue     *value,
291
 
                          GParamSpec *pspec)
292
 
{
293
 
  TagRenamer *tag_renamer = TAG_RENAMER (object);
294
 
 
295
 
  switch (prop_id)
296
 
    {
297
 
    case PROP_FORMAT:
298
 
      g_value_set_enum (value, tag_renamer_get_format (tag_renamer));
299
 
      break;
300
 
 
301
 
    case PROP_REPLACE_SPACES:
302
 
      g_value_set_boolean (value, tag_renamer_get_replace_spaces (tag_renamer));
303
 
      break;
304
 
 
305
 
    case PROP_LOWERCASE:
306
 
      g_value_set_boolean (value, tag_renamer_get_lowercase (tag_renamer));
307
 
      break;
308
 
 
309
 
    default:
310
 
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
311
 
      break;
312
 
    }    
313
 
}
314
 
 
315
 
 
316
 
 
317
 
static void
318
 
tag_renamer_set_property (GObject      *object,
319
 
                          guint         prop_id,
320
 
                          const GValue *value,
321
 
                          GParamSpec   *pspec)
322
 
{
323
 
  TagRenamer *tag_renamer = TAG_RENAMER (object);
324
 
 
325
 
  switch (prop_id)
326
 
    {
327
 
    case PROP_FORMAT:
328
 
      tag_renamer_set_format (tag_renamer, g_value_get_enum (value));
329
 
      break;
330
 
 
331
 
    case PROP_REPLACE_SPACES:
332
 
      tag_renamer_set_replace_spaces (tag_renamer, g_value_get_boolean (value));
333
 
      break;
334
 
 
335
 
    case PROP_LOWERCASE:
336
 
      tag_renamer_set_lowercase (tag_renamer, g_value_get_boolean (value));
337
 
      break;
338
 
 
339
 
    default:
340
 
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
341
 
      break;
342
 
    }
343
 
}
344
 
 
345
 
 
346
 
 
347
 
static void
348
 
tag_renamer_realize (GtkWidget *widget)
349
 
{
350
 
  /* Realize the widget */
351
 
  (*GTK_WIDGET_CLASS (tag_renamer_parent_class)->realize) (widget);
352
 
}
353
 
 
354
 
 
355
 
 
356
 
static gchar*
357
 
tag_renamer_process (ThunarxRenamer  *renamer,
358
 
                     ThunarxFileInfo *file,
359
 
                     const gchar     *text,
360
 
                     guint            index)
361
 
{
362
 
  TagRenamer *tag_renamer = TAG_RENAMER (renamer);
363
 
 
364
 
  TagLib_File                  *taglib_file;
365
 
  TagLib_Tag                   *taglib_tag;
366
 
  const TagLib_AudioProperties *taglib_properties;
367
 
 
368
 
  gchar *result = NULL;
369
 
  gchar *filename;
370
 
  gchar *artist;
371
 
  gchar *title;
372
 
  guint  track_num;
373
 
  gchar *track;
374
 
  gchar *uri;
375
 
  
376
 
  /* Strip of the file:// from the URI */
377
 
  uri = thunarx_file_info_get_uri (file);
378
 
  filename = g_filename_from_uri (uri, NULL, NULL);
379
 
 
380
 
  /* Return if URI could not be resolved */
381
 
  if (G_UNLIKELY (filename == NULL))
382
 
    return g_strdup (text);
383
 
 
384
 
  /* Load taglib file */
385
 
  taglib_file = taglib_file_new (filename);
386
 
 
387
 
  /* Don't change anything if taglib file could not be allocated */
388
 
  if (G_UNLIKELY (taglib_file == NULL))
389
 
    {
390
 
      g_free (filename);
391
 
      return g_strdup (text);
392
 
    }
393
 
 
394
 
  /* Load tag info */
395
 
  taglib_tag = taglib_file_tag (taglib_file);
396
 
 
397
 
  /* Abort if tag info could not be loaded */
398
 
  if (G_UNLIKELY (taglib_tag == NULL))
399
 
    {
400
 
      taglib_file_free (taglib_file);
401
 
      g_free (filename);
402
 
      return g_strdup (text);
403
 
    }
404
 
 
405
 
  /* Load tag properties */
406
 
  taglib_properties = taglib_file_audioproperties (taglib_file);
407
 
 
408
 
  /* Get tag values */
409
 
  artist = g_strdup (taglib_tag_artist (taglib_tag));
410
 
  title = g_strdup (taglib_tag_title (taglib_tag));
411
 
  track_num = taglib_tag_track (taglib_tag);
412
 
 
413
 
  /* Strip additional whitespace from the tags */
414
 
  g_strstrip (artist);
415
 
  g_strstrip (title);
416
 
 
417
 
  /* Replace missing artist tag */
418
 
  if (G_UNLIKELY (g_utf8_strlen (artist, -1) == 0))
419
 
    artist = g_strdup (tag_renamer_get_artist (tag_renamer));
420
 
 
421
 
  /* Replace missing song title tag */
422
 
  if (G_UNLIKELY (g_utf8_strlen (title, -1) == 0))
423
 
    title = g_strdup (tag_renamer_get_title (tag_renamer));
424
 
 
425
 
  if (track_num == 0)
426
 
    track = g_strdup ("00");
427
 
  else
428
 
    track = g_strdup_printf ("%02d", taglib_tag_track (taglib_tag));
429
 
 
430
 
  /* Replace special chars with underscores */
431
 
  artist = g_strdelimit (artist, G_DIR_SEPARATOR_S, '_');
432
 
  title = g_strdelimit (title, G_DIR_SEPARATOR_S, '_');
433
 
  track = g_strdelimit (track, G_DIR_SEPARATOR_S, '_');
434
 
 
435
 
  switch (tag_renamer_get_format (tag_renamer))
436
 
    {
437
 
    case TAG_RENAMER_FORMAT_TRACK_DOT_TITLE:
438
 
      result = g_strconcat (track, ". ", title, NULL);
439
 
      break;
440
 
 
441
 
    case TAG_RENAMER_FORMAT_TRACK_DOT_ARTIST_TITLE:
442
 
      result = g_strconcat (track, ". ", artist, " - ", title, NULL);
443
 
      break;
444
 
 
445
 
    case TAG_RENAMER_FORMAT_TRACK_TITLE:
446
 
      result = g_strconcat (track, " - ", title, NULL);
447
 
      break;
448
 
 
449
 
    case TAG_RENAMER_FORMAT_TRACK_ARTIST_TITLE:
450
 
      result = g_strconcat (track, " - ", artist, " - ", title, NULL);
451
 
      break;
452
 
 
453
 
    case TAG_RENAMER_FORMAT_TITLE:
454
 
      result = g_strconcat (title, NULL);
455
 
      break;
456
 
 
457
 
    case TAG_RENAMER_FORMAT_ARTIST_TITLE:
458
 
      result = g_strconcat (artist, " - ", title, NULL);
459
 
      break;
460
 
 
461
 
    case TAG_RENAMER_FORMAT_ARTIST_TRACK_TITLE:
462
 
      result = g_strconcat (artist, " - ", track, " - ", title, NULL);
463
 
      break;
464
 
    
465
 
    default:
466
 
      result = g_strdup (text);
467
 
      break;
468
 
    }
469
 
 
470
 
  /* Replace spaces if requested */
471
 
  if (tag_renamer_get_replace_spaces (tag_renamer))
472
 
    result = g_strdelimit (result, " ", '_');
473
 
  
474
 
  /* Convert to lowercase if requested */
475
 
  if (tag_renamer_get_lowercase (tag_renamer))
476
 
  {
477
 
    gchar *tmp = result;
478
 
    result = g_utf8_strdown (result, -1);
479
 
    g_free (tmp);
480
 
  }
481
 
  
482
 
  /* Free strings */
483
 
  g_free (track);
484
 
  g_free (title);
485
 
  g_free (artist);
486
 
  g_free (filename);
487
 
  g_free (uri);
488
 
 
489
 
  /* Free tag info strings */
490
 
  taglib_tag_free_strings ();
491
 
 
492
 
  /* Destroy the taglib file */
493
 
  taglib_file_free (taglib_file);
494
 
 
495
 
  return result;
496
 
}
497
 
 
498
 
 
499
 
 
500
 
static GList*
501
 
tag_renamer_get_actions (ThunarxRenamer *renamer,
502
 
                         GtkWindow      *window,
503
 
                         GList          *files)
504
 
{
505
 
  GtkAction       *action;
506
 
  GList           *file;
507
 
  GList           *actions = NULL;
508
 
  ThunarxFileInfo *info;
509
 
 
510
 
  if (g_list_length (files) != 1)
511
 
    return NULL;
512
 
 
513
 
  file = g_list_first (files);
514
 
 
515
 
  if (G_UNLIKELY (file == NULL))
516
 
    return NULL;
517
 
 
518
 
  info = THUNARX_FILE_INFO (file->data);
519
 
 
520
 
  if (G_LIKELY (media_tags_get_audio_file_supported (info)))
521
 
    {
522
 
      /* Edit tags action */
523
 
      action = gtk_action_new ("edit-tags", _("Edit _Tags"), _("Edit ID3/OGG tags of this file."), GTK_STOCK_EDIT);
524
 
      g_object_set_data_full (G_OBJECT (action), "window", g_object_ref (G_OBJECT (window)), (GDestroyNotify)g_object_unref);
525
 
      g_signal_connect (G_OBJECT (action), "activate", G_CALLBACK (tag_renamer_edit_tags_activated), info);
526
 
      actions = g_list_prepend (actions, action);
527
 
    }
528
 
 
529
 
  return actions;
530
 
}
531
 
 
532
 
 
533
 
 
534
 
/**
535
 
 * tag_renamer_new:
536
 
 *
537
 
 * Allocates a new #TagRenamer instance.
538
 
 *
539
 
 * Return value: the newly allocated #TagRenamer.
540
 
 **/
541
 
TagRenamer*
542
 
tag_renamer_new (void)
543
 
{
544
 
  return g_object_new (TYPE_TAG_RENAMER,
545
 
                       "name", _("Audio Tags"),
546
 
                       NULL);
547
 
}
548
 
 
549
 
 
550
 
 
551
 
/**
552
 
 * tag_renamer_get_format:
553
 
 * @tag_renamer : a #TagRenamer.
554
 
 *
555
 
 * Returns the current #TagRenamerFormat
556
 
 * for the @tag_renamer.
557
 
 *
558
 
 * Return value: the current naming format of @tag_renamer.
559
 
 **/
560
 
TagRenamerFormat
561
 
tag_renamer_get_format (TagRenamer *tag_renamer)
562
 
{
563
 
  g_return_val_if_fail (IS_TAG_RENAMER (tag_renamer), TAG_RENAMER_FORMAT_TRACK_TITLE);
564
 
  return tag_renamer->format;
565
 
}
566
 
 
567
 
 
568
 
 
569
 
/**
570
 
 * tag_renamer_set_format:
571
 
 * @tag_renamer : a #TagRenamer.
572
 
 * @format      : the new #TagRenamerFormat.
573
 
 *
574
 
 * Sets the #TagRenamerFormat of the @tag_renamer
575
 
 * to the specified @format.
576
 
 **/
577
 
void
578
 
tag_renamer_set_format (TagRenamer      *tag_renamer,
579
 
                        TagRenamerFormat format)
580
 
{
581
 
  g_return_if_fail (IS_TAG_RENAMER (tag_renamer));
582
 
 
583
 
  /* Check if we already use that format */
584
 
  if (G_UNLIKELY (tag_renamer->format == format))
585
 
    return;
586
 
 
587
 
  /* Apply the new format */
588
 
  tag_renamer->format = format;
589
 
 
590
 
  /* Notify listeners */
591
 
  g_object_notify (G_OBJECT (tag_renamer), "format");
592
 
 
593
 
  /* Emit the "changed" signal */
594
 
  thunarx_renamer_changed (THUNARX_RENAMER (tag_renamer));
595
 
}
596
 
 
597
 
 
598
 
 
599
 
/**
600
 
 * tag_renamer_get_replace_spaces:
601
 
 * @tag_renamer : a #TagRenamer.
602
 
 *
603
 
 * Returns whether spaces are going to be replaced with underscores or not.
604
 
 *
605
 
 * Return value: whether spaces are going to be replaced or not.
606
 
 **/
607
 
gboolean
608
 
tag_renamer_get_replace_spaces (TagRenamer *tag_renamer)
609
 
{
610
 
  g_return_val_if_fail (IS_TAG_RENAMER (tag_renamer), FALSE);
611
 
  return tag_renamer->replace_spaces;
612
 
}
613
 
 
614
 
 
615
 
 
616
 
/**
617
 
 * tag_renamer_set_replace_spaces:
618
 
 * @tag_renamer : a #TagRenamer.
619
 
 * @replace     : a boolean flag.
620
 
 *
621
 
 * Sets whether spaces are going to be replaced with underscores or not.
622
 
 **/
623
 
void
624
 
tag_renamer_set_replace_spaces (TagRenamer *tag_renamer,
625
 
                                gboolean    replace)
626
 
{
627
 
  g_return_if_fail (IS_TAG_RENAMER (tag_renamer));
628
 
 
629
 
  /* Abort if flag is already set */
630
 
  if (G_UNLIKELY (tag_renamer->replace_spaces == replace))
631
 
    return;
632
 
 
633
 
  /* Apply the new setting */
634
 
  tag_renamer->replace_spaces = replace;
635
 
 
636
 
  /* Notify listeners */
637
 
  g_object_notify (G_OBJECT (tag_renamer), "replace-spaces");
638
 
 
639
 
  /* Emit the "changed" signal */
640
 
  thunarx_renamer_changed (THUNARX_RENAMER (tag_renamer));
641
 
}
642
 
 
643
 
 
644
 
 
645
 
/**
646
 
 * tag_renamer_get_lowercase:
647
 
 * @tag_renamer : a #TagRenamer.
648
 
 *
649
 
 * Returns whether the resulting filename will be completely lowercase.
650
 
 *
651
 
 * Return value: whether all letters will be lowercase.
652
 
 **/
653
 
gboolean
654
 
tag_renamer_get_lowercase (TagRenamer *tag_renamer)
655
 
{
656
 
  g_return_val_if_fail (IS_TAG_RENAMER (tag_renamer), FALSE);
657
 
  return tag_renamer->lowercase;
658
 
}
659
 
 
660
 
 
661
 
 
662
 
/**
663
 
 * tag_renamer_set_lowercase:
664
 
 * @tag_renamer : a #TagRenamer.
665
 
 * @lowercase     : a boolean flag.
666
 
 *
667
 
 * Sets whether all letters are going to be converted to lowercase.
668
 
 **/
669
 
void
670
 
tag_renamer_set_lowercase (TagRenamer *tag_renamer,
671
 
                           gboolean    lowercase)
672
 
{
673
 
  g_return_if_fail (IS_TAG_RENAMER (tag_renamer));
674
 
 
675
 
  /* Abort if flag is already set */
676
 
  if (G_UNLIKELY (tag_renamer->lowercase == lowercase))
677
 
    return;
678
 
 
679
 
  /* Apply the new setting */
680
 
  tag_renamer->lowercase = lowercase;
681
 
 
682
 
  /* Notify listeners */
683
 
  g_object_notify (G_OBJECT (tag_renamer), "lowercase");
684
 
 
685
 
  /* Emit the "changed" signal */
686
 
  thunarx_renamer_changed (THUNARX_RENAMER (tag_renamer));
687
 
}
688
 
 
689
 
 
690
 
 
691
 
/**
692
 
 * tag_renamer_get_artist:
693
 
 * @tag_renamer : a #TagRenamer.
694
 
 *
695
 
 * Returns the artist name to use if the artist tag is missing.
696
 
 *
697
 
 * Return value: default artist name to use if a file lacks of an artist tag.
698
 
 **/
699
 
const gchar*
700
 
tag_renamer_get_artist (TagRenamer *tag_renamer)
701
 
{
702
 
  g_return_val_if_fail (IS_TAG_RENAMER (tag_renamer), _("Unknown Artist"));
703
 
  return tag_renamer->artist;
704
 
}
705
 
 
706
 
 
707
 
 
708
 
/**
709
 
 * tag_renamer_set_artist:
710
 
 * @tag_renamer : a #TagRenamer.
711
 
 * @artist      : a nul-terminated string.
712
 
 *
713
 
 * Sets the artist name to use if a file is missing an artist tag.
714
 
 **/
715
 
void
716
 
tag_renamer_set_artist (TagRenamer  *tag_renamer,
717
 
                        const gchar *artist)
718
 
{
719
 
  g_return_if_fail (IS_TAG_RENAMER (tag_renamer));
720
 
 
721
 
  /* Abort if flag is already set */
722
 
  if (G_UNLIKELY (tag_renamer->artist != NULL))
723
 
    if (G_UNLIKELY (g_utf8_collate (tag_renamer->artist, artist) == 0))
724
 
      return;
725
 
 
726
 
  /* Free old name */
727
 
  if (G_LIKELY (tag_renamer->artist != NULL))
728
 
    g_free (tag_renamer->artist);
729
 
 
730
 
  /* Apply the new setting */
731
 
  tag_renamer->artist = g_strdup (artist);
732
 
 
733
 
  /* Emit the "changed" signal */
734
 
  thunarx_renamer_changed (THUNARX_RENAMER (tag_renamer));
735
 
}
736
 
 
737
 
 
738
 
 
739
 
/**
740
 
 * tag_renamer_get_title:
741
 
 * @tag_renamer : a #TagRenamer.
742
 
 *
743
 
 * Returns the song title to use if the title tag is missing.
744
 
 *
745
 
 * Return value: song title to use if a file lacks of a title tag.
746
 
 **/
747
 
const gchar*
748
 
tag_renamer_get_title (TagRenamer *tag_renamer)
749
 
{
750
 
  g_return_val_if_fail (IS_TAG_RENAMER (tag_renamer), _("Unknown Title"));
751
 
  return tag_renamer->title;
752
 
}
753
 
 
754
 
 
755
 
 
756
 
/**
757
 
 * tag_renamer_set_title:
758
 
 * @tag_renamer : a #TagRenamer.
759
 
 * @title      : a nul-terminated string.
760
 
 *
761
 
 * Sets the song title to use if a file is missing a title tag.
762
 
 **/
763
 
void
764
 
tag_renamer_set_title (TagRenamer  *tag_renamer,
765
 
                       const gchar *title)
766
 
{
767
 
  g_return_if_fail (IS_TAG_RENAMER (tag_renamer));
768
 
 
769
 
  /* Abort if flag is already set */
770
 
  if (G_UNLIKELY (g_utf8_collate (tag_renamer->title, title) == 0))
771
 
    return;
772
 
 
773
 
  /* Free old value */
774
 
  if (G_UNLIKELY (tag_renamer->title != NULL))
775
 
    if (G_LIKELY (tag_renamer->title != NULL))
776
 
      g_free (tag_renamer->title);
777
 
 
778
 
  /* Apply the new setting */
779
 
  tag_renamer->title = g_strdup (title);
780
 
 
781
 
  /* Emit the "changed" signal */
782
 
  thunarx_renamer_changed (THUNARX_RENAMER (tag_renamer));
783
 
}
784
 
 
785
 
 
786
 
 
787
 
static void
788
 
tag_renamer_edit_tags_activated (GtkAction *action, 
789
 
                                 ThunarxFileInfo *file)
790
 
{
791
 
  GtkWindow *window;
792
 
  GtkWidget *dialog;
793
 
 
794
 
  /* Determine the parent window */
795
 
  window = g_object_get_data (G_OBJECT (action), "window");
796
 
  if (G_UNLIKELY (window == NULL))
797
 
    return;
798
 
 
799
 
  dialog = audio_tags_page_dialog_new (window, file);
800
 
 
801
 
  gtk_dialog_run (GTK_DIALOG (dialog));
802
 
  gtk_widget_destroy (dialog);
803
 
}