summaryrefslogtreecommitdiff
path: root/devel/gvfs/files/patch-daemon_gvfsbackendcdda.c
blob: 2c12869ae40107854366ed094d5a5ea3392c1fb4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
--- daemon/gvfsbackendcdda.c.orig	2012-05-15 18:01:50 +0000
+++ daemon/gvfsbackendcdda.c
@@ -55,7 +55,12 @@
 #include "gvfsjobenumerate.h"
 
 #define DO_NOT_WANT_PARANOIA_COMPATIBILITY
-#include <cdio/paranoia.h>
+#define HAVE_PARANOIA_NEW_INCLUDES
+#ifdef HAVE_PARANOIA_NEW_INCLUDES
+  #include <cdio/paranoia/paranoia.h>
+#else
+  #include <cdio/paranoia.h>
+#endif
 #include <cdio/cdio.h>
 
 /* TODO:
@@ -158,6 +163,16 @@ release_metadata (GVfsBackendCdda *cdda_
   cdda_backend->tracks = NULL;
 }
 
+static char *
+cdtext_string_to_utf8 (const char *string)
+{
+  if (string == NULL)
+    return NULL;
+
+  /* CD-text doesn't specify encoding. In case outside ascii, assume latin-1. */
+  return g_convert (string, -1, "UTF-8", "ISO-8859-1", NULL, NULL, NULL);
+}
+
 static void
 fetch_metadata (GVfsBackendCdda *cdda_backend)
 {
@@ -169,11 +184,22 @@ fetch_metadata (GVfsBackendCdda *cdda_ba
   if (!cdio)
     return;
 
-  cdtext = cdio_get_cdtext(cdio, 0);
+#if LIBCDIO_VERSION_NUM >= 84
+  cdtext = cdio_get_cdtext (cdio);
+#else
+  cdtext = cdio_get_cdtext (cdio, 0);
+#endif /* LIBCDIO_VERSION_NUM >= 84 */
+
   if (cdtext) {
-    cdda_backend->album_title = g_strdup (cdtext_get (CDTEXT_TITLE, cdtext));
-    cdda_backend->album_artist = g_strdup (cdtext_get (CDTEXT_PERFORMER, cdtext));
-    cdda_backend->genre = g_strdup (cdtext_get (CDTEXT_GENRE, cdtext));
+#if LIBCDIO_VERSION_NUM >= 84
+    cdda_backend->album_title = cdtext_string_to_utf8 (cdtext_get_const (cdtext, CDTEXT_FIELD_TITLE, 0));
+    cdda_backend->album_artist = cdtext_string_to_utf8 (cdtext_get_const (cdtext, CDTEXT_FIELD_PERFORMER, 0));
+    cdda_backend->genre = cdtext_string_to_utf8 (cdtext_get_const (cdtext, CDTEXT_FIELD_GENRE, 0));
+#else
+    cdda_backend->album_title = cdtext_string_to_utf8 (cdtext_get_const (CDTEXT_TITLE, cdtext));
+    cdda_backend->album_artist = cdtext_string_to_utf8 (cdtext_get_const (CDTEXT_PERFORMER, cdtext));
+    cdda_backend->genre = cdtext_string_to_utf8 (cdtext_get_const (CDTEXT_GENRE, cdtext));
+#endif /* LIBCDIO_VERSION_NUM >= 84 */
   }
 
   cdtrack = cdio_get_first_track_num(cdio);
@@ -182,10 +208,17 @@ fetch_metadata (GVfsBackendCdda *cdda_ba
   for ( ; cdtrack < last_cdtrack; cdtrack++ ) {
     GVfsBackendCddaTrack *track;
     track = g_new0 (GVfsBackendCddaTrack, 1);
-    cdtext = cdio_get_cdtext(cdio, cdtrack);
+#if LIBCDIO_VERSION_NUM < 84
+    cdtext = cdio_get_cdtext (cdio, cdtrack);
+#endif /* LIBCDIO_VERSION_NUM < 84 */
     if (cdtext) {
-      track->title = g_strdup (cdtext_get (CDTEXT_TITLE, cdtext));
-      track->artist = g_strdup (cdtext_get (CDTEXT_PERFORMER, cdtext));
+#if LIBCDIO_VERSION_NUM >= 84
+      track->title = cdtext_string_to_utf8 (cdtext_get_const (cdtext, CDTEXT_FIELD_TITLE, cdtrack));
+      track->artist = cdtext_string_to_utf8 (cdtext_get_const (cdtext, CDTEXT_FIELD_PERFORMER, cdtrack));
+#else
+      track->title = cdtext_string_to_utf8 (cdtext_get_const (CDTEXT_TITLE, cdtext));
+      track->artist = cdtext_string_to_utf8 (cdtext_get_const (CDTEXT_PERFORMER, cdtext));
+#endif /* LIBCDIO_VERSION_NUM >= 84 */
     }
     track->duration = cdio_get_track_sec_count (cdio, cdtrack) / CDIO_CD_FRAMES_PER_SEC;
 
@@ -961,8 +994,10 @@ do_query_info (GVfsBackend *backend,
       g_file_info_set_display_name (info, _("Audio Disc")); /* TODO: fill in from metadata */
       g_file_info_set_file_type (info, G_FILE_TYPE_DIRECTORY);
       g_file_info_set_content_type (info, "inode/directory");
-      SET_INFO ("xattr::org.gnome.audio.title", cdda_backend->album_title);
-      SET_INFO ("xattr::org.gnome.audio.artist", cdda_backend->album_artist);
+      if (cdda_backend->album_title)
+        SET_INFO ("xattr::org.gnome.audio.title", cdda_backend->album_title);
+      if (cdda_backend->album_artist)
+        SET_INFO ("xattr::org.gnome.audio.artist", cdda_backend->album_artist);
       SET_INFO ("xattr::org.gnome.audio.genre", cdda_backend->genre);
       g_file_info_set_size (info, 0);
       icon = g_themed_icon_new ("folder");