From f71e871556a11adbd526368e3c1fc69a237abac8 Mon Sep 17 00:00:00 2001 From: Jonathan Matthew Date: Wed, 17 Apr 2013 08:39:06 +1000 Subject: [PATCH] chunk-loader: provide chunks as GBytes instances rather than GStrings We don't want chunks to be interpreted as utf8 strings in python. --- lib/rb-chunk-loader.c | 13 +++++++------ lib/rb-chunk-loader.h | 2 +- plugins/magnatune/MagnatuneSource.py | 6 +++--- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/lib/rb-chunk-loader.c b/lib/rb-chunk-loader.c index 6b8354d55..cf7d5e326 100644 --- a/lib/rb-chunk-loader.c +++ b/lib/rb-chunk-loader.c @@ -46,7 +46,6 @@ struct _RBChunkLoaderPrivate char *uri; gssize chunk_size; guint8 *chunk; - GString chunk_string; guint64 total; GError *error; @@ -107,8 +106,13 @@ stream_read_async_cb (GObject *obj, GAsyncResult *res, gpointer data) loader->priv->callback (loader, NULL, 0, loader->priv->callback_data); cleanup (loader); } else { - loader->priv->chunk_string.len = done; - loader->priv->callback (loader, &loader->priv->chunk_string, loader->priv->total, loader->priv->callback_data); + GBytes *bytes; + + bytes = g_bytes_new_take (loader->priv->chunk, done); + loader->priv->callback (loader, bytes, loader->priv->total, loader->priv->callback_data); + g_bytes_unref (bytes); + + loader->priv->chunk = g_malloc0 (loader->priv->chunk_size+1); g_input_stream_read_async (G_INPUT_STREAM (loader->priv->stream), loader->priv->chunk, loader->priv->chunk_size, @@ -185,9 +189,6 @@ rb_chunk_loader_start (RBChunkLoader *loader, const char *uri, gssize chunk_size loader->priv->uri = g_strdup (uri); loader->priv->chunk_size = chunk_size; loader->priv->chunk = g_malloc0 (chunk_size+1); - loader->priv->chunk_string.str = (gchar *)loader->priv->chunk; - loader->priv->chunk_string.len = 0; - loader->priv->chunk_string.allocated_len = chunk_size; loader->priv->cancel = g_cancellable_new (); diff --git a/lib/rb-chunk-loader.h b/lib/rb-chunk-loader.h index 2d3588a46..e2e602616 100644 --- a/lib/rb-chunk-loader.h +++ b/lib/rb-chunk-loader.h @@ -43,7 +43,7 @@ typedef struct _RBChunkLoader RBChunkLoader; typedef struct _RBChunkLoaderClass RBChunkLoaderClass; typedef struct _RBChunkLoaderPrivate RBChunkLoaderPrivate; -typedef void (*RBChunkLoaderCallback) (RBChunkLoader *loader, GString *data, goffset total, gpointer user_data); +typedef void (*RBChunkLoaderCallback) (RBChunkLoader *loader, GBytes *data, goffset total, gpointer user_data); struct _RBChunkLoader { diff --git a/plugins/magnatune/MagnatuneSource.py b/plugins/magnatune/MagnatuneSource.py index 5a8f79afb..3854c7e75 100644 --- a/plugins/magnatune/MagnatuneSource.py +++ b/plugins/magnatune/MagnatuneSource.py @@ -306,8 +306,8 @@ def download_finished(copy, success, self): def load_catalogue(): - def catalogue_chunk_cb(loader, data, total, parser): - if data is None: + def catalogue_chunk_cb(loader, chunk, total, parser): + if chunk is None: error = loader.get_error() if error: # report error somehow? @@ -334,7 +334,7 @@ def catalogue_chunk_cb(loader, data, total, parser): self.__download_album(uri, name[12:]) else: # hack around some weird chars that show up in the catalogue for some reason - data = str(data.str) + data = chunk.get_data().decode('utf-8', errors='replace') data = data.replace("\x19", "'") data = data.replace("\x13", "-")