[rhythmbox] chunk-loader: provide chunks as GBytes instances rather than GStrings
- From: Jonathan Matthew <jmatthew src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rhythmbox] chunk-loader: provide chunks as GBytes instances rather than GStrings
- Date: Sun, 21 Apr 2013 08:44:27 +0000 (UTC)
commit f71e871556a11adbd526368e3c1fc69a237abac8
Author: Jonathan Matthew <jonathan d14n org>
Date: Wed Apr 17 08:39:06 2013 +1000
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 6b8354d..cf7d5e3 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 2d3588a..e2e6026 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 5a8f79a..3854c7e 100644
--- a/plugins/magnatune/MagnatuneSource.py
+++ b/plugins/magnatune/MagnatuneSource.py
@@ -306,8 +306,8 @@ class MagnatuneSource(RB.BrowserSource):
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 @@ class MagnatuneSource(RB.BrowserSource):
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", "-")
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]