[libdmapsharing] Use GByteArray for DPAP thumbnail to couple thumbnail size with data Signed-off-by: W. Michael Petul
- From: W. Michael Petullo <wmpetullo src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libdmapsharing] Use GByteArray for DPAP thumbnail to couple thumbnail size with data Signed-off-by: W. Michael Petul
- Date: Tue, 25 Jan 2011 03:02:36 +0000 (UTC)
commit b194ce2baab01847fb5f7084d964061190cbeb38
Author: W. Michael Petullo <mike flyn org>
Date: Mon Jan 24 16:50:57 2011 -0600
Use GByteArray for DPAP thumbnail to couple thumbnail size with data
Signed-off-by: W. Michael Petullo <mike flyn org>
libdmapsharing/dpap-connection.c | 11 +++++++----
libdmapsharing/dpap-record.c | 9 ---------
libdmapsharing/dpap-share.c | 15 +++++++++++----
tests/dpapview.vala | 4 ++--
tests/test-dpap-record.c | 20 +++++---------------
tests/vala-dpap-record.vala | 21 ++++++++++-----------
6 files changed, 35 insertions(+), 45 deletions(-)
---
diff --git a/libdmapsharing/dpap-connection.c b/libdmapsharing/dpap-connection.c
index 6a91c46..f593beb 100644
--- a/libdmapsharing/dpap-connection.c
+++ b/libdmapsharing/dpap-connection.c
@@ -52,7 +52,7 @@ handle_mlcl (DMAPConnection *connection, DMAPRecordFactory *factory, GNode *n, i
const gchar *format = NULL;
const gchar *comments = NULL;
const gchar *thumbnail = NULL;
- const gchar *ptr = NULL;
+ const GByteArray *ptr = NULL;
gint creation_date = 0;
gint filesize = 0;
gint large_filesize = 0;
@@ -113,8 +113,8 @@ handle_mlcl (DMAPConnection *connection, DMAPRecordFactory *factory, GNode *n, i
}
if (filesize) {
- ptr = g_new (gchar, filesize);
- memcpy (ptr, thumbnail, filesize);
+ ptr = g_byte_array_sized_new (filesize);
+ g_byte_array_append (ptr, thumbnail, filesize);
}
g_object_set (record,
@@ -122,7 +122,6 @@ handle_mlcl (DMAPConnection *connection, DMAPRecordFactory *factory, GNode *n, i
"aspect-ratio", aspect_ratio,
"creation-date", creation_date,
"format", format,
- "filesize", filesize,
"large-filesize", large_filesize,
"pixel-height", height,
"pixel-width", width,
@@ -131,6 +130,10 @@ handle_mlcl (DMAPConnection *connection, DMAPRecordFactory *factory, GNode *n, i
"thumbnail", ptr,
NULL);
+ if (ptr) {
+ g_byte_array_unref (ptr);
+ }
+
_return:
return record;
}
diff --git a/libdmapsharing/dpap-record.c b/libdmapsharing/dpap-record.c
index b4c5da6..6070839 100644
--- a/libdmapsharing/dpap-record.c
+++ b/libdmapsharing/dpap-record.c
@@ -87,15 +87,6 @@ dpap_record_init (DPAPRecordIface *iface)
G_PARAM_READWRITE));
g_object_interface_install_property (iface,
- g_param_spec_int ("filesize",
- "Photo file size",
- "Photo file size",
- 0,
- G_MAXINT,
- 0,
- G_PARAM_READWRITE));
-
- g_object_interface_install_property (iface,
g_param_spec_int ("creation-date",
"Photo creation date",
"Photo creation date",
diff --git a/libdmapsharing/dpap-share.c b/libdmapsharing/dpap-share.c
index 8835e94..e0ad031 100644
--- a/libdmapsharing/dpap-share.c
+++ b/libdmapsharing/dpap-share.c
@@ -411,9 +411,10 @@ add_entry_to_mlcl (gpointer id,
g_warning ("Format requested but not available");
}
if (_dmap_share_client_requested (mb->bits, PHOTO_IMAGEFILESIZE)) {
+ GByteArray *thumbnail = NULL;
gint filesize = 0;
- g_object_get (record, "filesize", &filesize, NULL);
- dmap_structure_add (mlit, DMAP_CC_PIFS, filesize);
+ g_object_get (record, "thumbnail", &thumbnail, NULL);
+ dmap_structure_add (mlit, DMAP_CC_PIFS, thumbnail ? thumbnail->len : 0);
}
if (_dmap_share_client_requested (mb->bits, PHOTO_IMAGELARGEFILESIZE)) {
gint large_filesize = 0;
@@ -447,9 +448,15 @@ add_entry_to_mlcl (gpointer id,
if (_dmap_share_client_requested (mb->bits, PHOTO_FILEDATA)) {
size_t size = 0;
unsigned char *data = NULL;
+ GByteArray *thumbnail = NULL;
if (_dmap_share_client_requested (mb->bits, PHOTO_THUMB)) {
- g_object_get (record, "thumbnail", &data, NULL);
- g_object_get (record, "filesize", &size, NULL);
+ g_object_get (record, "thumbnail", &thumbnail, NULL);
+ if (thumbnail) {
+ data = thumbnail->data;
+ size = thumbnail->len;
+ } else {
+ data = size = 0;
+ }
} else {
/* Should be PHOTO_HIRES */
char *location = NULL;
diff --git a/tests/dpapview.vala b/tests/dpapview.vala
index 79394ba..388d676 100644
--- a/tests/dpapview.vala
+++ b/tests/dpapview.vala
@@ -32,10 +32,10 @@ private class DPAPViewer {
db.foreach ((k, v) => {
Gdk.Pixbuf pixbuf = null;
- if (((ValaDPAPRecord) v).filesize > 0) {
+ if (((ValaDPAPRecord) v).thumbnail != null) {
string path;
int fd = GLib.FileUtils.open_tmp ("dpapview.XXXXXX", out path);
- GLib.FileUtils.set_data (path, ((ValaDPAPRecord) v).thumbnail);
+ GLib.FileUtils.set_data (path, ((ValaDPAPRecord) v).thumbnail.data);
GLib.FileUtils.close (fd);
pixbuf = new Gdk.Pixbuf.from_file (path);
GLib.FileUtils.unlink (path);
diff --git a/tests/test-dpap-record.c b/tests/test-dpap-record.c
index f02aafe..30dbb71 100644
--- a/tests/test-dpap-record.c
+++ b/tests/test-dpap-record.c
@@ -21,7 +21,6 @@
#include "test-dpap-record.h"
struct TestDPAPRecordPrivate {
- gint filesize;
gint largefilesize;
gint pixelheight;
gint pixelwidth;
@@ -33,12 +32,11 @@ struct TestDPAPRecordPrivate {
char *filename;
char *format;
char *comments;
- unsigned char *thumbnail;
+ GByteArray *thumbnail;
};
enum {
PROP_0,
- PROP_FILESIZE,
PROP_LARGE_FILESIZE,
PROP_CREATION_DATE,
PROP_RATING,
@@ -60,9 +58,6 @@ test_dpap_record_set_property (GObject *object,
TestDPAPRecord *record = TEST_DPAP_RECORD (object);
switch (prop_id) {
- case PROP_FILESIZE:
- record->priv->filesize = g_value_get_int (value);
- break;
case PROP_LARGE_FILESIZE:
record->priv->largefilesize = g_value_get_int (value);
break;
@@ -113,9 +108,6 @@ test_dpap_record_get_property (GObject *object,
TestDPAPRecord *record = TEST_DPAP_RECORD (object);
switch (prop_id) {
- case PROP_FILESIZE:
- g_value_set_int (value, record->priv->filesize);
- break;
case PROP_LARGE_FILESIZE:
g_value_set_int (value, record->priv->largefilesize);
break;
@@ -186,13 +178,11 @@ test_dpap_record_class_init (TestDPAPRecordClass *klass)
gobject_class->get_property = test_dpap_record_get_property;
gobject_class->finalize = test_dpap_record_finalize;
- g_object_class_override_property (gobject_class, PROP_FILESIZE, "filesize");
g_object_class_override_property (gobject_class, PROP_LARGE_FILESIZE, "large-filesize");
g_object_class_override_property (gobject_class, PROP_CREATION_DATE, "creation-date");
g_object_class_override_property (gobject_class, PROP_RATING, "rating");
g_object_class_override_property (gobject_class, PROP_LOCATION, "location");
g_object_class_override_property (gobject_class, PROP_FILENAME, "filename");
- g_object_class_override_property (gobject_class, PROP_FILESIZE, "filesize");
g_object_class_override_property (gobject_class, PROP_ASPECT_RATIO, "aspect-ratio");
g_object_class_override_property (gobject_class, PROP_PIXEL_HEIGHT, "pixel-height");
g_object_class_override_property (gobject_class, PROP_PIXEL_WIDTH, "pixel-width");
@@ -233,7 +223,7 @@ test_dpap_record_finalize (GObject *object)
g_free (record->priv->filename);
g_free (record->priv->format);
g_free (record->priv->comments);
- g_free (record->priv->thumbnail);
+ g_byte_array_unref (record->priv->thumbnail);
G_OBJECT_CLASS (test_dpap_record_parent_class)->finalize (object);
}
@@ -276,13 +266,13 @@ test_dpap_record_new (void)
/* Normally, this data is scaled down to thumbnail size. I have not
* done this here because I don't want any external dependencies.
- * In many cases the ImageMagick library is a good solution.
+ * In many cases the VIPS library is a good solution.
*/
path = g_strdup_printf ("%s/media/test.jpeg", g_get_current_dir ());
g_file_get_contents (path, (gchar **) &thumbnail, &size, &error);
g_free (path);
- record->priv->filesize = size;
- record->priv->thumbnail = thumbnail;
+ record->priv->thumbnail = g_byte_array_sized_new (size);
+ g_byte_array_append (record->priv->thumbnail, thumbnail, size);
return record;
}
diff --git a/tests/vala-dpap-record.vala b/tests/vala-dpap-record.vala
index c4185e6..6f3c921 100644
--- a/tests/vala-dpap-record.vala
+++ b/tests/vala-dpap-record.vala
@@ -26,8 +26,7 @@ private class ValaDPAPRecord : GLib.Object, DMAP.Record, DPAP.Record {
private string _aspect_ratio;
private string _format;
private string _comments;
- private uint8[] _thumbnail;
- private int _filesize;
+ GLib.ByteArray _thumbnail;
private int _large_filesize;
private int _pixel_height;
private int _pixel_width;
@@ -54,9 +53,12 @@ private class ValaDPAPRecord : GLib.Object, DMAP.Record, DPAP.Record {
set { _format = value; }
}
- public uint8[] thumbnail {
+ public GLib.ByteArray thumbnail {
get { return _thumbnail; }
- set { _thumbnail = value; }
+ set { /* C implementations just use g_byte_array_ref (value); */
+ _thumbnail = new GLib.ByteArray ();
+ _thumbnail.append (value.data);
+ }
}
public string comments {
@@ -64,11 +66,6 @@ private class ValaDPAPRecord : GLib.Object, DMAP.Record, DPAP.Record {
set { _comments = value; }
}
- public int filesize {
- get { return _filesize; }
- set { _filesize = value; }
- }
-
public int large_filesize {
get { return _large_filesize; }
set { _large_filesize = value; }
@@ -119,8 +116,10 @@ private class ValaDPAPRecord : GLib.Object, DMAP.Record, DPAP.Record {
_creation_date = 0;
string path = GLib.Environment.get_current_dir () + "/media/test.jpeg";
- GLib.FileUtils.get_data (path, out _thumbnail);
- _filesize = _thumbnail.length;
+ uint8[] data;
+ GLib.FileUtils.get_data (path, out data);
+ _thumbnail = new GLib.ByteArray ();
+ _thumbnail.append (data);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]