Blame SOURCES/brasero-3.8.0-fix-isrc-tag.patch

ca21f1
From 9d5ac84e83fa6ca0cdde289eeeaa20c81a6ee4f6 Mon Sep 17 00:00:00 2001
ca21f1
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20B=C5=BEatek?= <tbzatek@redhat.com>
ca21f1
Date: Wed, 30 Oct 2013 15:55:51 +0000
ca21f1
Subject: [PATCH] Switch BRASERO_TRACK_STREAM_ISRC_TAG from int to string
ca21f1
MIME-Version: 1.0
ca21f1
Content-Type: text/plain; charset=UTF-8
ca21f1
Content-Transfer-Encoding: 8bit
ca21f1
ca21f1
The International Standard Recording Code (ISRC) is a  12
ca21f1
byte string that is created from two uppercase characters
ca21f1
for the country code, followed by three uppercase characā€
ca21f1
ters  for  the owner, followed by two digits for the year
ca21f1
of recording followed by five digits for  the  recording
ca21f1
serial number.
ca21f1
ca21f1
https://bugzilla.gnome.org/show_bug.cgi?id=711162
ca21f1
---
ca21f1
 libbrasero-burn/brasero-tags.h             |  2 +-
ca21f1
 libbrasero-burn/brasero-track-stream-cfg.c | 10 +++++-----
ca21f1
 libbrasero-utils/brasero-io.c              |  4 +++-
ca21f1
 libbrasero-utils/brasero-metadata.c        | 14 +++++++++-----
ca21f1
 libbrasero-utils/brasero-metadata.h        |  2 +-
ca21f1
 plugins/audio2cue/burn-audio2cue.c         |  8 ++++----
ca21f1
 plugins/cdrkit/burn-wodim.c                |  7 +++----
ca21f1
 plugins/cdrtools/burn-cdrecord.c           |  7 +++----
ca21f1
 plugins/transcode/burn-transcode.c         |  8 ++++----
ca21f1
 src/brasero-audio-disc.c                   | 24 +++++++++++++-----------
ca21f1
 src/brasero-multi-song-props.c             |  6 +++---
ca21f1
 src/brasero-multi-song-props.h             |  2 +-
ca21f1
 src/brasero-project-parse.c                | 27 +++++++++++++++------------
ca21f1
 src/brasero-song-properties.c              | 23 ++++++-----------------
ca21f1
 src/brasero-song-properties.h              |  4 ++--
ca21f1
 src/brasero-video-disc.c                   | 23 +++++++++++++----------
ca21f1
 16 files changed, 86 insertions(+), 85 deletions(-)
ca21f1
ca21f1
diff --git a/libbrasero-burn/brasero-tags.h b/libbrasero-burn/brasero-tags.h
ca21f1
index 31a844d..c04f0a9 100644
ca21f1
--- a/libbrasero-burn/brasero-tags.h
ca21f1
+++ b/libbrasero-burn/brasero-tags.h
ca21f1
@@ -56,6 +56,7 @@ G_BEGIN_DECLS
ca21f1
 #define BRASERO_TRACK_STREAM_COMPOSER_TAG		"track::stream::info::composer"
ca21f1
 #define BRASERO_TRACK_STREAM_ARTIST_TAG			"track::stream::info::artist"
ca21f1
 #define BRASERO_TRACK_STREAM_ALBUM_TAG			"track::stream::info::album"
ca21f1
+#define BRASERO_TRACK_STREAM_ISRC_TAG			"track::stream::info::isrc"
ca21f1
 #define BRASERO_TRACK_STREAM_THUMBNAIL_TAG		"track::stream::snapshot"
ca21f1
 #define BRASERO_TRACK_STREAM_MIME_TAG			"track::stream::mime"
ca21f1
 
ca21f1
@@ -63,7 +64,6 @@ G_BEGIN_DECLS
ca21f1
  * Int
ca21f1
  */
ca21f1
 
ca21f1
-#define BRASERO_TRACK_STREAM_ISRC_TAG			"track::stream::info::isrc"
ca21f1
 
ca21f1
 /**
ca21f1
  * This tag (for sessions) is used to set an estimated size, used to determine
ca21f1
diff --git a/libbrasero-burn/brasero-track-stream-cfg.c b/libbrasero-burn/brasero-track-stream-cfg.c
ca21f1
index 9d53dd6..2699b6f 100644
ca21f1
--- a/libbrasero-burn/brasero-track-stream-cfg.c
ca21f1
+++ b/libbrasero-burn/brasero-track-stream-cfg.c
ca21f1
@@ -299,11 +299,11 @@ brasero_track_stream_cfg_results_cb (GObject *obj,
ca21f1
 		brasero_track_tag_add_string (BRASERO_TRACK (obj),
ca21f1
 					      BRASERO_TRACK_STREAM_COMPOSER_TAG,
ca21f1
 					      g_file_info_get_attribute_string (info, BRASERO_IO_COMPOSER));
ca21f1
-	if (g_file_info_get_attribute_int32 (info, BRASERO_IO_ISRC)
ca21f1
-	&& !brasero_track_tag_lookup_int (BRASERO_TRACK (obj), BRASERO_TRACK_STREAM_ISRC_TAG))
ca21f1
-		brasero_track_tag_add_int (BRASERO_TRACK (obj),
ca21f1
-					   BRASERO_TRACK_STREAM_ISRC_TAG,
ca21f1
-					   g_file_info_get_attribute_int32 (info, BRASERO_IO_ISRC));
ca21f1
+	if (g_file_info_get_attribute_string (info, BRASERO_IO_ISRC)
ca21f1
+	&& !brasero_track_tag_lookup_string (BRASERO_TRACK (obj), BRASERO_TRACK_STREAM_ISRC_TAG))
ca21f1
+		brasero_track_tag_add_string (BRASERO_TRACK (obj),
ca21f1
+					      BRASERO_TRACK_STREAM_ISRC_TAG,
ca21f1
+					      g_file_info_get_attribute_string (info, BRASERO_IO_ISRC));
ca21f1
 
ca21f1
 	/* Start monitoring it */
ca21f1
 	file = g_file_new_for_uri (uri);
ca21f1
diff --git a/libbrasero-utils/brasero-io.c b/libbrasero-utils/brasero-io.c
ca21f1
index 6124848..5619359 100644
ca21f1
--- a/libbrasero-utils/brasero-io.c
ca21f1
+++ b/libbrasero-utils/brasero-io.c
ca21f1
@@ -836,7 +836,6 @@ static void
ca21f1
 brasero_io_set_metadata_attributes (GFileInfo *info,
ca21f1
 				    BraseroMetadataInfo *metadata)
ca21f1
 {
ca21f1
-	g_file_info_set_attribute_int32 (info, BRASERO_IO_ISRC, metadata->isrc);
ca21f1
 	g_file_info_set_attribute_uint64 (info, BRASERO_IO_LEN, metadata->len);
ca21f1
 
ca21f1
 	if (metadata->type)
ca21f1
@@ -857,6 +856,9 @@ brasero_io_set_metadata_attributes (GFileInfo *info,
ca21f1
 	if (metadata->composer)
ca21f1
 		g_file_info_set_attribute_string (info, BRASERO_IO_COMPOSER, metadata->composer);
ca21f1
 
ca21f1
+	if (metadata->isrc)
ca21f1
+		g_file_info_set_attribute_string (info, BRASERO_IO_ISRC, metadata->isrc);
ca21f1
+
ca21f1
 	g_file_info_set_attribute_boolean (info, BRASERO_IO_HAS_AUDIO, metadata->has_audio);
ca21f1
 	if (metadata->has_audio) {
ca21f1
 		if (metadata->channels)
ca21f1
diff --git a/libbrasero-utils/brasero-metadata.c b/libbrasero-utils/brasero-metadata.c
ca21f1
index 7f10088..1943368 100644
ca21f1
--- a/libbrasero-utils/brasero-metadata.c
ca21f1
+++ b/libbrasero-utils/brasero-metadata.c
ca21f1
@@ -186,6 +186,9 @@ brasero_metadata_info_clear (BraseroMetadataInfo *info)
ca21f1
 	if (info->musicbrainz_id)
ca21f1
 		g_free (info->musicbrainz_id);
ca21f1
 
ca21f1
+	if (info->isrc)
ca21f1
+		g_free (info->isrc);
ca21f1
+
ca21f1
 	if (info->silences) {
ca21f1
 		g_slist_foreach (info->silences, (GFunc) g_free, NULL);
ca21f1
 		g_slist_free (info->silences);
ca21f1
@@ -216,7 +219,6 @@ brasero_metadata_info_copy (BraseroMetadataInfo *dest,
ca21f1
 	dest->has_dts = src->has_dts;
ca21f1
 	dest->rate = src->rate;
ca21f1
 	dest->channels = src->channels;
ca21f1
-	dest->isrc = src->isrc;
ca21f1
 	dest->len = src->len;
ca21f1
 	dest->is_seekable = src->is_seekable;
ca21f1
 	dest->has_audio = src->has_audio;
ca21f1
@@ -243,6 +245,9 @@ brasero_metadata_info_copy (BraseroMetadataInfo *dest,
ca21f1
 	if (src->musicbrainz_id)
ca21f1
 		dest->musicbrainz_id = g_strdup (src->musicbrainz_id);
ca21f1
 
ca21f1
+	if (src->isrc)
ca21f1
+		dest->isrc = g_strdup (src->isrc);
ca21f1
+
ca21f1
 	if (src->snapshot) {
ca21f1
 		dest->snapshot = src->snapshot;
ca21f1
 		g_object_ref (dest->snapshot);
ca21f1
@@ -943,11 +948,10 @@ foreach_tag (const GstTagList *list,
ca21f1
 		gst_tag_list_get_string (list, tag, &(self->composer));
ca21f1
 	}
ca21f1
 */	else if (!strcmp (tag, GST_TAG_ISRC)) {
ca21f1
-		gchar *isrc = NULL;
ca21f1
-		gst_tag_list_get_string (list, tag, &isrc);
ca21f1
+		if (priv->info->isrc)
ca21f1
+			g_free (priv->info->isrc);
ca21f1
 
ca21f1
-		if (isrc)
ca21f1
-			priv->info->isrc = (int) g_ascii_strtoull (isrc, NULL, 10);
ca21f1
+		gst_tag_list_get_string (list, tag, &(priv->info->isrc));
ca21f1
 	}
ca21f1
 	else if (!strcmp (tag, GST_TAG_MUSICBRAINZ_TRACKID)) {
ca21f1
 		gst_tag_list_get_string (list, tag, &(priv->info->musicbrainz_id));
ca21f1
diff --git a/libbrasero-utils/brasero-metadata.h b/libbrasero-utils/brasero-metadata.h
ca21f1
index 8799642..eca95b4 100644
ca21f1
--- a/libbrasero-utils/brasero-metadata.h
ca21f1
+++ b/libbrasero-utils/brasero-metadata.h
ca21f1
@@ -69,7 +69,7 @@ typedef struct {
ca21f1
 	gchar *genre;
ca21f1
 	gchar *composer;
ca21f1
 	gchar *musicbrainz_id;
ca21f1
-	int isrc;
ca21f1
+	gchar *isrc;
ca21f1
 	guint64 len;
ca21f1
 
ca21f1
 	gint channels;
ca21f1
diff --git a/plugins/audio2cue/burn-audio2cue.c b/plugins/audio2cue/burn-audio2cue.c
ca21f1
index 2601533..78c21f9 100644
ca21f1
--- a/plugins/audio2cue/burn-audio2cue.c
ca21f1
+++ b/plugins/audio2cue/burn-audio2cue.c
ca21f1
@@ -455,7 +455,6 @@ brasero_audio2cue_create_thread (gpointer data)
ca21f1
 	tracks = NULL;
ca21f1
 	brasero_job_get_tracks (data, &tracks);
ca21f1
 	for (; tracks; tracks = tracks->next) {
ca21f1
-		int isrc;
ca21f1
 		guint64 gap;
ca21f1
 		guint64 len;
ca21f1
 		gchar *string;
ca21f1
@@ -463,6 +462,7 @@ brasero_audio2cue_create_thread (gpointer data)
ca21f1
 		BraseroTrack *track;
ca21f1
 		const gchar *performer;
ca21f1
 		const gchar *songwriter;
ca21f1
+		const gchar *isrc;
ca21f1
 
ca21f1
 		track = tracks->data;
ca21f1
 
ca21f1
@@ -527,9 +527,9 @@ brasero_audio2cue_create_thread (gpointer data)
ca21f1
 			g_free (line);
ca21f1
 		}
ca21f1
 
ca21f1
-		isrc = brasero_track_tag_lookup_int (track, BRASERO_TRACK_STREAM_ISRC_TAG);
ca21f1
-		if (isrc > 0) {
ca21f1
-			line = g_strdup_printf ("\tISRC %i\n", isrc);
ca21f1
+		isrc = brasero_track_tag_lookup_string (track, BRASERO_TRACK_STREAM_ISRC_TAG);
ca21f1
+		if (isrc) {
ca21f1
+			line = g_strdup_printf ("\tISRC \"%s\"\n", isrc);
ca21f1
 			if (write (fd_out, line, strlen (line)) < 0) {
ca21f1
 				int err_saved = errno;
ca21f1
 				priv->error = g_error_new_literal (BRASERO_BURN_ERROR,
ca21f1
diff --git a/plugins/cdrkit/burn-wodim.c b/plugins/cdrkit/burn-wodim.c
ca21f1
index c0477c8..be7e5b9 100644
ca21f1
--- a/plugins/cdrkit/burn-wodim.c
ca21f1
+++ b/plugins/cdrkit/burn-wodim.c
ca21f1
@@ -438,7 +438,6 @@ brasero_wodim_write_inf (BraseroWodim *wodim,
ca21f1
 			 GError **error)
ca21f1
 {
ca21f1
 	gint fd;
ca21f1
-	int isrc;
ca21f1
 	gint size;
ca21f1
         int errsv;
ca21f1
 	gchar *path;
ca21f1
@@ -514,9 +513,9 @@ brasero_wodim_write_inf (BraseroWodim *wodim,
ca21f1
 		goto error;
ca21f1
 
ca21f1
 	/* ISRC */
ca21f1
-	isrc = brasero_track_tag_lookup_int (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_ISRC_TAG);
ca21f1
-	if (isrc > 0)
ca21f1
-		string = g_strdup_printf ("ISRC=\t%i\n", isrc);
ca21f1
+	info = brasero_track_tag_lookup_string (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_ISRC_TAG);
ca21f1
+	if (info)
ca21f1
+		string = g_strdup_printf ("ISRC=\t%s\n", info);
ca21f1
 	else
ca21f1
 		string = g_strdup ("ISRC=\t\n");
ca21f1
 	size = strlen (string);
ca21f1
diff --git a/plugins/cdrtools/burn-cdrecord.c b/plugins/cdrtools/burn-cdrecord.c
ca21f1
index 92c23b3..89ba629 100644
ca21f1
--- a/plugins/cdrtools/burn-cdrecord.c
ca21f1
+++ b/plugins/cdrtools/burn-cdrecord.c
ca21f1
@@ -424,7 +424,6 @@ brasero_cdrecord_write_inf (BraseroCDRecord *cdrecord,
ca21f1
 			    GError **error)
ca21f1
 {
ca21f1
 	gint fd;
ca21f1
-	int isrc;
ca21f1
         int errsv;
ca21f1
 	gint size;
ca21f1
 	gchar *path;
ca21f1
@@ -503,9 +502,9 @@ brasero_cdrecord_write_inf (BraseroCDRecord *cdrecord,
ca21f1
 		goto error;
ca21f1
 
ca21f1
 	/* ISRC */
ca21f1
-	isrc = brasero_track_tag_lookup_int (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_ISRC_TAG);
ca21f1
-	if (isrc > 0)
ca21f1
-		string = g_strdup_printf ("ISRC=\t%i\n", isrc);
ca21f1
+	info = brasero_track_tag_lookup_string (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_ISRC_TAG);
ca21f1
+	if (info)
ca21f1
+		string = g_strdup_printf ("ISRC=\t%s\n", info);
ca21f1
 	else
ca21f1
 		string = g_strdup ("ISRC=\t\n");
ca21f1
 	size = strlen (string);
ca21f1
diff --git a/plugins/transcode/burn-transcode.c b/plugins/transcode/burn-transcode.c
ca21f1
index 6861168..b93d17a 100644
ca21f1
--- a/plugins/transcode/burn-transcode.c
ca21f1
+++ b/plugins/transcode/burn-transcode.c
ca21f1
@@ -1396,13 +1396,13 @@ foreach_tag (const GstTagList *list,
ca21f1
 		}
ca21f1
 	}
ca21f1
 	else if (!strcmp (tag, GST_TAG_ISRC)) {
ca21f1
-		if (!brasero_track_tag_lookup_int (track, BRASERO_TRACK_STREAM_ISRC_TAG)) {
ca21f1
+		if (!brasero_track_tag_lookup_string (track, BRASERO_TRACK_STREAM_ISRC_TAG)) {
ca21f1
 			gchar *isrc = NULL;
ca21f1
 
ca21f1
 			gst_tag_list_get_string (list, tag, &isrc);
ca21f1
-			brasero_track_tag_add_int (track,
ca21f1
-						   BRASERO_TRACK_STREAM_ISRC_TAG,
ca21f1
-						   (int) g_ascii_strtoull (isrc, NULL, 10));
ca21f1
+			brasero_track_tag_add_string (track,
ca21f1
+						      BRASERO_TRACK_STREAM_ISRC_TAG,
ca21f1
+						      isrc);
ca21f1
 		}
ca21f1
 	}
ca21f1
 	else if (!strcmp (tag, GST_TAG_PERFORMER)) {
ca21f1
diff --git a/src/brasero-audio-disc.c b/src/brasero-audio-disc.c
ca21f1
index e2c49b8..b0dce92 100644
ca21f1
--- a/src/brasero-audio-disc.c
ca21f1
+++ b/src/brasero-audio-disc.c
ca21f1
@@ -1477,7 +1477,6 @@ static void
ca21f1
 brasero_audio_disc_edit_multi_song_properties (BraseroAudioDisc *disc,
ca21f1
 					       GList *list)
ca21f1
 {
ca21f1
-	gint isrc;
ca21f1
 	gint64 gap;
ca21f1
 	GList *copy;
ca21f1
 	GList *item;
ca21f1
@@ -1487,6 +1486,7 @@ brasero_audio_disc_edit_multi_song_properties (BraseroAudioDisc *disc,
ca21f1
 	gchar *artist = NULL;
ca21f1
 	GtkResponseType result;
ca21f1
 	gchar *composer = NULL;
ca21f1
+	gchar *isrc = NULL;
ca21f1
 
ca21f1
 	model = gtk_tree_view_get_model (GTK_TREE_VIEW (disc->priv->tree));
ca21f1
 	toplevel = gtk_widget_get_toplevel (GTK_WIDGET (disc));
ca21f1
@@ -1550,10 +1550,10 @@ brasero_audio_disc_edit_multi_song_properties (BraseroAudioDisc *disc,
ca21f1
                                                       BRASERO_TRACK_STREAM_COMPOSER_TAG,
ca21f1
                                                       composer);
ca21f1
 
ca21f1
-		if (isrc > 0)
ca21f1
-                        brasero_track_tag_add_int (BRASERO_TRACK (track),
ca21f1
-                                                   BRASERO_TRACK_STREAM_ISRC_TAG,
ca21f1
-                                                   isrc);
ca21f1
+		if (isrc)
ca21f1
+                        brasero_track_tag_add_string (BRASERO_TRACK (track),
ca21f1
+                                                      BRASERO_TRACK_STREAM_ISRC_TAG,
ca21f1
+                                                      isrc);
ca21f1
 
ca21f1
                 if (gap > -1)
ca21f1
                         brasero_track_stream_set_boundaries (BRASERO_TRACK_STREAM (track),
ca21f1
@@ -1564,6 +1564,7 @@ brasero_audio_disc_edit_multi_song_properties (BraseroAudioDisc *disc,
ca21f1
 	g_list_free (copy);
ca21f1
 	g_free (artist);
ca21f1
 	g_free (composer);
ca21f1
+	g_free (isrc);
ca21f1
 
ca21f1
 	gtk_widget_destroy (props);
ca21f1
 }
ca21f1
@@ -1573,7 +1574,6 @@ brasero_audio_disc_edit_single_song_properties (BraseroAudioDisc *disc,
ca21f1
 						GtkTreePath *treepath)
ca21f1
 {
ca21f1
 	gint64 gap;
ca21f1
-	gint isrc;
ca21f1
 	gint64 end;
ca21f1
 	gint64 start;
ca21f1
 	guint track_num;
ca21f1
@@ -1586,6 +1586,7 @@ brasero_audio_disc_edit_single_song_properties (BraseroAudioDisc *disc,
ca21f1
 	gchar *title;
ca21f1
 	gchar *artist;
ca21f1
 	gchar *composer;
ca21f1
+	gchar *isrc;
ca21f1
 	GtkTreeIter iter;
ca21f1
 
ca21f1
 	model = gtk_tree_view_get_model (GTK_TREE_VIEW (disc->priv->tree));
ca21f1
@@ -1607,7 +1608,7 @@ brasero_audio_disc_edit_single_song_properties (BraseroAudioDisc *disc,
ca21f1
 					   brasero_track_tag_lookup_string (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_ARTIST_TAG),
ca21f1
 					   brasero_track_tag_lookup_string (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_TITLE_TAG),
ca21f1
 					   brasero_track_tag_lookup_string (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_COMPOSER_TAG),
ca21f1
-					   brasero_track_tag_lookup_int (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_ISRC_TAG),
ca21f1
+					   brasero_track_tag_lookup_string (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_ISRC_TAG),
ca21f1
 					   length,
ca21f1
 					   brasero_track_stream_get_start (BRASERO_TRACK_STREAM (track)),
ca21f1
 					   brasero_track_stream_get_end (BRASERO_TRACK_STREAM (track)),
ca21f1
@@ -1657,10 +1658,10 @@ brasero_audio_disc_edit_single_song_properties (BraseroAudioDisc *disc,
ca21f1
 					      BRASERO_TRACK_STREAM_COMPOSER_TAG,
ca21f1
 					      composer);
ca21f1
 
ca21f1
-	if (isrc > 0)
ca21f1
-		brasero_track_tag_add_int (BRASERO_TRACK (track),
ca21f1
-					   BRASERO_TRACK_STREAM_ISRC_TAG,
ca21f1
-					   isrc);
ca21f1
+	if (isrc)
ca21f1
+		brasero_track_tag_add_string (BRASERO_TRACK (track),
ca21f1
+					      BRASERO_TRACK_STREAM_ISRC_TAG,
ca21f1
+					      isrc);
ca21f1
 
ca21f1
 	if (end - start + BRASERO_SECTORS_TO_DURATION (gap) < BRASERO_MIN_STREAM_LENGTH)
ca21f1
 		brasero_audio_disc_short_track_dialog (disc);
ca21f1
@@ -1668,6 +1669,7 @@ brasero_audio_disc_edit_single_song_properties (BraseroAudioDisc *disc,
ca21f1
 	g_free (title);
ca21f1
 	g_free (artist);
ca21f1
 	g_free (composer);
ca21f1
+	g_free (isrc);
ca21f1
 	gtk_widget_destroy (props);
ca21f1
 }
ca21f1
 
ca21f1
diff --git a/src/brasero-multi-song-props.c b/src/brasero-multi-song-props.c
ca21f1
index be2704e..823e22a 100644
ca21f1
--- a/src/brasero-multi-song-props.c
ca21f1
+++ b/src/brasero-multi-song-props.c
ca21f1
@@ -77,7 +77,7 @@ void
ca21f1
 brasero_multi_song_props_get_properties (BraseroMultiSongProps *self,
ca21f1
 					 gchar **artist,
ca21f1
 					 gchar **composer,
ca21f1
-					 gint *isrc,
ca21f1
+					 gchar **isrc,
ca21f1
 					 gint64 *gap)
ca21f1
 {
ca21f1
 	const gchar *text;
ca21f1
@@ -103,9 +103,9 @@ brasero_multi_song_props_get_properties (BraseroMultiSongProps *self,
ca21f1
 	if (isrc) {
ca21f1
 		text = gtk_entry_get_text (GTK_ENTRY (priv->isrc));
ca21f1
 		if (text && strcmp (text, _("<Keep current values>")))
ca21f1
-			*isrc = (gint) g_strtod (text, NULL);
ca21f1
+			*isrc = g_strdup (text);
ca21f1
 		else
ca21f1
-			*isrc = -1;
ca21f1
+			*isrc = NULL;
ca21f1
 	}
ca21f1
 
ca21f1
 	if (gap)
ca21f1
diff --git a/src/brasero-multi-song-props.h b/src/brasero-multi-song-props.h
ca21f1
index b7f4500..de34a73 100644
ca21f1
--- a/src/brasero-multi-song-props.h
ca21f1
+++ b/src/brasero-multi-song-props.h
ca21f1
@@ -70,7 +70,7 @@ void
ca21f1
 brasero_multi_song_props_get_properties (BraseroMultiSongProps *props,
ca21f1
 					 gchar **artist,
ca21f1
 					 gchar **composer,
ca21f1
-					 gint *isrc,
ca21f1
+					 gchar **isrc,
ca21f1
 					 gint64 *gap);
ca21f1
 
ca21f1
 G_END_DECLS
ca21f1
diff --git a/src/brasero-project-parse.c b/src/brasero-project-parse.c
ca21f1
index 5359678..b2a58a1 100644
ca21f1
--- a/src/brasero-project-parse.c
ca21f1
+++ b/src/brasero-project-parse.c
ca21f1
@@ -330,18 +330,22 @@ _read_audio_track (xmlDocPtr project,
ca21f1
         		g_free (unescaped_composer);
ca21f1
 		}
ca21f1
 		else if (!xmlStrcmp (uris->name, (const xmlChar *) "isrc")) {
ca21f1
-			gchar *isrc;
ca21f1
+			xmlChar *isrc;
ca21f1
+                        gchar *unescaped_isrc;
ca21f1
 
ca21f1
-			isrc = (gchar *) xmlNodeListGetString (project,
ca21f1
-							       uris->xmlChildrenNode,
ca21f1
-							       1);
ca21f1
+			isrc = xmlNodeListGetString (project,
ca21f1
+						     uris->xmlChildrenNode,
ca21f1
+						     1);
ca21f1
 			if (!isrc)
ca21f1
 				goto error;
ca21f1
 
ca21f1
-                        brasero_track_tag_add_int (BRASERO_TRACK (track),
ca21f1
-                                                   BRASERO_TRACK_STREAM_ISRC_TAG,
ca21f1
-                                                   (gint) g_ascii_strtod (isrc, NULL));
ca21f1
+			unescaped_isrc = g_uri_unescape_string ((char *) isrc, NULL);
ca21f1
 			g_free (isrc);
ca21f1
+
ca21f1
+                        brasero_track_tag_add_string (BRASERO_TRACK (track),
ca21f1
+                                                      BRASERO_TRACK_STREAM_ISRC_TAG,
ca21f1
+                                                      unescaped_isrc);
ca21f1
+        		g_free (unescaped_isrc);
ca21f1
 		}
ca21f1
 		else if (uris->type == XML_ELEMENT_NODE)
ca21f1
 			goto error;
ca21f1
@@ -626,7 +630,6 @@ _save_audio_track_xml (xmlTextWriter *project,
ca21f1
 	xmlChar *escaped;
ca21f1
 	gchar *start;
ca21f1
 	gint success;
ca21f1
-	gchar *isrc;
ca21f1
 	gchar *uri;
ca21f1
 	gchar *end;
ca21f1
 
ca21f1
@@ -709,13 +712,13 @@ _save_audio_track_xml (xmlTextWriter *project,
ca21f1
 			return FALSE;
ca21f1
 	}
ca21f1
 
ca21f1
-	if (brasero_track_tag_lookup_int (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_ISRC_TAG)) {
ca21f1
-		isrc = g_strdup_printf ("%d", brasero_track_tag_lookup_int (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_ISRC_TAG));
ca21f1
+	if (brasero_track_tag_lookup_string (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_ISRC_TAG)) {
ca21f1
+		escaped = (unsigned char *) g_uri_escape_string (brasero_track_tag_lookup_string (BRASERO_TRACK (track), BRASERO_TRACK_STREAM_ISRC_TAG), NULL, FALSE);
ca21f1
 		success = xmlTextWriterWriteElement (project,
ca21f1
 						     (xmlChar *) "isrc",
ca21f1
-						     (xmlChar *) isrc);
ca21f1
+						     escaped);
ca21f1
 
ca21f1
-		g_free (isrc);
ca21f1
+		g_free (escaped);
ca21f1
 		if (success == -1)
ca21f1
 			return FALSE;
ca21f1
 	}
ca21f1
diff --git a/src/brasero-song-properties.c b/src/brasero-song-properties.c
ca21f1
index ebbdc32..b8c8de2 100644
ca21f1
--- a/src/brasero-song-properties.c
ca21f1
+++ b/src/brasero-song-properties.c
ca21f1
@@ -307,7 +307,7 @@ brasero_song_props_get_properties (BraseroSongProps *self,
ca21f1
 				   gchar **artist,
ca21f1
 				   gchar **title,
ca21f1
 				   gchar **composer,
ca21f1
-				   gint *isrc,
ca21f1
+				   gchar **isrc,
ca21f1
 				   gint64 *start,
ca21f1
 				   gint64 *end,
ca21f1
 				   gint64 *gap)
ca21f1
@@ -333,15 +333,8 @@ brasero_song_props_get_properties (BraseroSongProps *self,
ca21f1
 			*composer = NULL;
ca21f1
 	}
ca21f1
 
ca21f1
-	if (isrc) {
ca21f1
-		const gchar *string;
ca21f1
-
ca21f1
-		string = brasero_song_props_get_entry_value (GTK_ENTRY (self->priv->isrc));
ca21f1
-		if (string)
ca21f1
-			*isrc = (gint) g_strtod (string, NULL);
ca21f1
-		else
ca21f1
-			*isrc = 0;
ca21f1
-	}
ca21f1
+	if (isrc)
ca21f1
+		*isrc = brasero_song_props_get_entry_value (GTK_ENTRY (self->priv->isrc));
ca21f1
 
ca21f1
 	if (start)
ca21f1
 		*start = brasero_time_button_get_value (BRASERO_TIME_BUTTON (self->priv->start));
ca21f1
@@ -357,7 +350,7 @@ brasero_song_props_set_properties (BraseroSongProps *self,
ca21f1
 				   const gchar *artist,
ca21f1
 				   const gchar *title,
ca21f1
 				   const gchar *composer,
ca21f1
-				   gint isrc,
ca21f1
+				   const gchar *isrc,
ca21f1
 				   gint64 length,
ca21f1
 				   gint64 start,
ca21f1
 				   gint64 end,
ca21f1
@@ -391,12 +384,8 @@ brasero_song_props_set_properties (BraseroSongProps *self,
ca21f1
 		gtk_entry_set_text (GTK_ENTRY (self->priv->title), title);
ca21f1
 	if (composer)
ca21f1
 		gtk_entry_set_text (GTK_ENTRY (self->priv->composer), composer);
ca21f1
-
ca21f1
-	if (isrc) {
ca21f1
-		string = g_strdup_printf ("%i", isrc);
ca21f1
-		gtk_entry_set_text (GTK_ENTRY (self->priv->isrc), string);
ca21f1
-		g_free (string);
ca21f1
-	}
ca21f1
+	if (isrc)
ca21f1
+		gtk_entry_set_text (GTK_ENTRY (self->priv->isrc), isrc);
ca21f1
 
ca21f1
 	if (gap > 0) {
ca21f1
 		secs = gap / GST_SECOND;
ca21f1
diff --git a/src/brasero-song-properties.h b/src/brasero-song-properties.h
ca21f1
index edb0ddb..997a49e 100644
ca21f1
--- a/src/brasero-song-properties.h
ca21f1
+++ b/src/brasero-song-properties.h
ca21f1
@@ -60,7 +60,7 @@ brasero_song_props_get_properties (BraseroSongProps *self,
ca21f1
 				   gchar **artist,
ca21f1
 				   gchar **title,
ca21f1
 				   gchar **composer,
ca21f1
-				   gint *isrc,
ca21f1
+				   gchar **isrc,
ca21f1
 				   gint64 *start,
ca21f1
 				   gint64 *end,
ca21f1
 				   gint64 *gap);
ca21f1
@@ -70,7 +70,7 @@ brasero_song_props_set_properties (BraseroSongProps *self,
ca21f1
 				   const gchar *artist,
ca21f1
 				   const gchar *title,
ca21f1
 				   const gchar *composer,
ca21f1
-				   gint isrc,
ca21f1
+				   const gchar *isrc,
ca21f1
 				   gint64 length,
ca21f1
 				   gint64 start,
ca21f1
 				   gint64 end,
ca21f1
diff --git a/src/brasero-video-disc.c b/src/brasero-video-disc.c
ca21f1
index 3fa1134..d7c15b2 100644
ca21f1
--- a/src/brasero-video-disc.c
ca21f1
+++ b/src/brasero-video-disc.c
ca21f1
@@ -623,7 +623,6 @@ static void
ca21f1
 brasero_video_disc_edit_song_properties_list (BraseroVideoDisc *self,
ca21f1
 					      GList *list)
ca21f1
 {
ca21f1
-	gint isrc;
ca21f1
 	GList *item;
ca21f1
 	GList *copy;
ca21f1
 	GtkWidget *props;
ca21f1
@@ -631,6 +630,7 @@ brasero_video_disc_edit_song_properties_list (BraseroVideoDisc *self,
ca21f1
 	GtkTreeModel *model;
ca21f1
 	gchar *artist = NULL;
ca21f1
 	gchar *composer = NULL;
ca21f1
+	gchar *isrc = NULL;
ca21f1
 	GtkResponseType result;
ca21f1
 	BraseroVideoDiscPrivate *priv;
ca21f1
 
ca21f1
@@ -688,14 +688,15 @@ brasero_video_disc_edit_song_properties_list (BraseroVideoDisc *self,
ca21f1
 					      BRASERO_TRACK_STREAM_COMPOSER_TAG,
ca21f1
 					      composer);
ca21f1
 
ca21f1
-		brasero_track_tag_add_int (track,
ca21f1
-					   BRASERO_TRACK_STREAM_ISRC_TAG,
ca21f1
-					   isrc);
ca21f1
+		brasero_track_tag_add_string (track,
ca21f1
+					      BRASERO_TRACK_STREAM_ISRC_TAG,
ca21f1
+					      isrc);
ca21f1
 	}
ca21f1
 
ca21f1
 	g_list_free (copy);
ca21f1
 	g_free (artist);
ca21f1
 	g_free (composer);
ca21f1
+	g_free (isrc);
ca21f1
 end:
ca21f1
 
ca21f1
 	gtk_widget_destroy (props);
ca21f1
@@ -705,12 +706,12 @@ static void
ca21f1
 brasero_video_disc_edit_song_properties_file (BraseroVideoDisc *self,
ca21f1
 					      BraseroTrack *track)
ca21f1
 {
ca21f1
-	gint isrc;
ca21f1
 	gint64 end;
ca21f1
 	gint64 start;
ca21f1
 	gchar *title;
ca21f1
 	gchar *artist;
ca21f1
 	gchar *composer;
ca21f1
+	gchar *isrc;
ca21f1
 	GtkWidget *props;
ca21f1
 	guint64 length = 0;
ca21f1
 	GtkWidget *toplevel;
ca21f1
@@ -726,7 +727,7 @@ brasero_video_disc_edit_song_properties_file (BraseroVideoDisc *self,
ca21f1
 					   brasero_track_tag_lookup_string (track, BRASERO_TRACK_STREAM_ARTIST_TAG),
ca21f1
 					   brasero_track_tag_lookup_string (track, BRASERO_TRACK_STREAM_TITLE_TAG),
ca21f1
 					   brasero_track_tag_lookup_string (track, BRASERO_TRACK_STREAM_COMPOSER_TAG),
ca21f1
-					   brasero_track_tag_lookup_int (track, BRASERO_TRACK_STREAM_ISRC_TAG),
ca21f1
+					   brasero_track_tag_lookup_string (track, BRASERO_TRACK_STREAM_ISRC_TAG),
ca21f1
 					   length,
ca21f1
 					   brasero_track_stream_get_start (BRASERO_TRACK_STREAM (track)),
ca21f1
 					   brasero_track_stream_get_end (BRASERO_TRACK_STREAM (track)),
ca21f1
@@ -774,10 +775,12 @@ brasero_video_disc_edit_song_properties_file (BraseroVideoDisc *self,
ca21f1
 		g_free (composer);
ca21f1
 	}
ca21f1
 
ca21f1
-	if (isrc)
ca21f1
-		brasero_track_tag_add_int (track,
ca21f1
-					   BRASERO_TRACK_STREAM_ISRC_TAG,
ca21f1
-					   isrc);
ca21f1
+	if (isrc) {
ca21f1
+		brasero_track_tag_add_string (track,
ca21f1
+					      BRASERO_TRACK_STREAM_ISRC_TAG,
ca21f1
+					      isrc);
ca21f1
+		g_free (isrc);
ca21f1
+	}
ca21f1
 
ca21f1
 	brasero_track_stream_set_boundaries (BRASERO_TRACK_STREAM (track),
ca21f1
 					     start,
ca21f1
-- 
ca21f1
1.8.4.2
ca21f1