[libdmapsharing] More adjustments related to API change
- From: W. Michael Petullo <wmpetullo src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libdmapsharing] More adjustments related to API change
- Date: Wed, 15 Nov 2017 05:17:42 +0000 (UTC)
commit 38b4c1daa03d6190221a4a6b8bacd4801cb60c6a
Author: W. Michael Petullo <mike flyn org>
Date: Wed Nov 15 00:17:26 2017 -0500
More adjustments related to API change
Signed-off-by: W. Michael Petullo <mike flyn org>
README-Porting | 11 +++++---
libdmapsharing/Makefile.am | 6 +++-
libdmapsharing/daap-connection.c | 34 ++++++++++++++++++++------
libdmapsharing/dmap-connection.c | 29 +++++++++++++++--------
libdmapsharing/dmap-mdns-service.c | 8 +++---
libdmapsharing/dmap-share.c | 38 ++++++++++++++++++-----------
libdmapsharing/test-daap-record.c | 11 +++++++-
{tests => libdmapsharing}/test-dmap-db.c | 2 +-
{tests => libdmapsharing}/test-dmap-db.h | 0
libdmapsharing/test-dpap-record.c | 23 +++++++++--------
tests/Makefile.am | 5 +---
tests/test-dmap-client.c | 9 +++++-
tests/test-dmap-container-db.c | 4 +-
tests/test-dmap-container-record.h | 3 +-
tests/test-dmap-server.c | 2 +-
15 files changed, 117 insertions(+), 68 deletions(-)
---
diff --git a/README-Porting b/README-Porting
index 25bedca..f1e8dc1 100644
--- a/README-Porting
+++ b/README-Porting
@@ -36,11 +36,14 @@ implementations of these interfaces should now:
(c) use GArray instead of GByteArray.
-Additionally, the implementation's finalize method should no longer
-explicitly free the object associated with the hash/thumbnail property.
+(4) The "base-uri" property in the DMAPConnection class is now a boxed
+type. The real type is SoupURI.
-(4) The new API replaces the use of GHFunc with DMAPIdRecordFunc and
+(4) The "db" and "container-db" properties in DMAPShare are now handled
+as object types instead of pointer types.
+
+(5) The new API replaces the use of GHFunc with DMAPIdRecordFunc and
DMAPContainerIdFunc.
-(5) The properties contained in a DMAPMdnsService must now be accessed
+(6) The properties contained in a DMAPMdnsService must now be accessed
using g_object_get.
diff --git a/libdmapsharing/Makefile.am b/libdmapsharing/Makefile.am
index 2bcc0f2..fa5e4f8 100644
--- a/libdmapsharing/Makefile.am
+++ b/libdmapsharing/Makefile.am
@@ -30,7 +30,8 @@ libdmapsharing_3_2_la_SOURCES += \
test-daap-record.c \
test-daap-record-factory.c \
test-dpap-record.c \
- test-dpap-record-factory.c
+ test-dpap-record-factory.c \
+ test-dmap-db.c
endif
if USE_HOWL
@@ -120,7 +121,8 @@ noinst_HEADERS = \
test-daap-record-factory.h \
test-daap-record.h \
test-dpap-record-factory.h \
- test-dpap-record.h
+ test-dpap-record.h \
+ test-dmap-db.h
BUILT_SOURCES = dmap-marshal.c dmap-marshal.h dmap-enums.c dmap-enums.h unit-test.stamp
diff --git a/libdmapsharing/daap-connection.c b/libdmapsharing/daap-connection.c
index f6d5259..0958b6e 100644
--- a/libdmapsharing/daap-connection.c
+++ b/libdmapsharing/daap-connection.c
@@ -22,6 +22,7 @@
#include <libdmapsharing/daap-connection.h>
#include <libdmapsharing/dmap-structure.h>
+#include <libdmapsharing/test-dmap-db.h>
#define DAAP_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), DAAP_TYPE_CONNECTION,
DAAPConnectionPrivate))
@@ -220,30 +221,39 @@ START_TEST(daap_connection_new_test)
{
char *str;
int port;
- DMAPDb *db;
- DMAPRecordFactory *factory;
+ DMAPDb *db1, *db2;
+ DMAPRecordFactory *factory1, *factory2;
+
+ db1 = DMAP_DB(test_dmap_db_new());
+ factory1 = DMAP_RECORD_FACTORY(test_daap_record_factory_new());
DAAPConnection *connection = daap_connection_new("foo",
"foo.example.com",
3689,
- NULL,
- NULL);
+ db1,
+ factory1);
g_object_get(connection, "name", &str, NULL);
ck_assert_str_eq("foo", str);
+ g_free(str);
g_object_get(connection, "host", &str, NULL);
ck_assert_str_eq("foo.example.com", str);
+ g_free(str);
g_object_get(connection, "port", &port, NULL);
ck_assert_int_eq(3689, port);
- g_object_get(connection, "db", &db, NULL);
- ck_assert(NULL == db);
+ g_object_get(connection, "db", &db2, NULL);
+ ck_assert(db1 == db2);
+ g_object_unref(db2);
- g_object_get(connection, "factory", &factory, NULL);
- ck_assert(NULL == factory);
+ g_object_get(connection, "factory", &factory2, NULL);
+ ck_assert(factory1 == factory2);
+ g_object_unref(factory2);
+ g_object_unref(db1);
+ g_object_unref(factory1);
g_object_unref(connection);
}
END_TEST
@@ -342,24 +352,31 @@ START_TEST(_handle_mlcl_test)
g_object_get(record, "title", &title, NULL);
ck_assert_str_eq(expected_title, title);
+ g_free(title);
g_object_get(record, "songalbum", &album, NULL);
ck_assert_str_eq(expected_album, album);
+ g_free(album);
g_object_get(record, "songartist", &artist, NULL);
ck_assert_str_eq(expected_artist, artist);
+ g_free(artist);
g_object_get(record, "format", &format, NULL);
ck_assert_str_eq(expected_format, format);
+ g_free(format);
g_object_get(record, "songgenre", &genre, NULL);
ck_assert_str_eq(expected_genre, genre);
+ g_free(genre);
g_object_get(record, "sort-artist", &sort_artist, NULL);
ck_assert_str_eq(expected_sort_artist, sort_artist);
+ g_free(sort_artist);
g_object_get(record, "sort-album", &sort_album, NULL);
ck_assert_str_eq(expected_sort_album, sort_album);
+ g_free(sort_album);
g_object_get(record, "has-video", &has_video, NULL);
ck_assert_int_eq(expected_has_video, has_video);
@@ -407,6 +424,7 @@ START_TEST(_handle_mlcl_bad_code_test)
g_object_get(record, "title", &title, NULL);
ck_assert_str_eq(expected_title, title);
+ g_free(title);
}
END_TEST
diff --git a/libdmapsharing/dmap-connection.c b/libdmapsharing/dmap-connection.c
index 3059f11..c974ee3 100644
--- a/libdmapsharing/dmap-connection.c
+++ b/libdmapsharing/dmap-connection.c
@@ -175,8 +175,7 @@ dmap_connection_class_init (DMAPConnectionClass * klass)
g_param_spec_object ("factory",
"record factory",
"record factory",
- // FIXME: Should be more specific.
- G_TYPE_OBJECT,
+ DMAP_TYPE_RECORD_FACTORY,
G_PARAM_READWRITE
|
G_PARAM_CONSTRUCT_ONLY));
@@ -205,10 +204,11 @@ dmap_connection_class_init (DMAPConnectionClass * klass)
g_object_class_install_property (object_class,
PROP_BASE_URI,
- g_param_spec_pointer ("base-uri",
- "base URI",
- "base URI",
- G_PARAM_READWRITE));
+ g_param_spec_boxed ("base-uri",
+ "base URI",
+ "base URI",
+ SOUP_TYPE_URI,
+ G_PARAM_READWRITE));
g_object_class_install_property (object_class,
PROP_DATABASE_ID,
@@ -1724,11 +1724,17 @@ dmap_connection_set_property (GObject * object,
priv->name = g_value_dup_string (value);
break;
case PROP_DB:
- priv->db = DMAP_DB (g_value_get_object (value));
+ if (priv->db) {
+ g_object_unref(priv->db);
+ }
+ priv->db = DMAP_DB (g_value_dup_object (value));
break;
case PROP_FACTORY:
+ if (priv->record_factory) {
+ g_object_unref(priv->record_factory);
+ }
priv->record_factory =
- DMAP_RECORD_FACTORY (g_value_get_object (value));
+ DMAP_RECORD_FACTORY (g_value_dup_object (value));
break;
case PROP_HOST:
g_free (priv->host);
@@ -1738,7 +1744,10 @@ dmap_connection_set_property (GObject * object,
priv->port = g_value_get_uint (value);
break;
case PROP_BASE_URI:
- priv->base_uri = g_value_get_pointer (value);
+ if (priv->base_uri) {
+ soup_uri_free (priv->base_uri);
+ }
+ priv->base_uri = g_value_get_boxed (value);
break;
case PROP_DATABASE_ID:
priv->database_id = g_value_get_int (value);
@@ -1788,7 +1797,7 @@ dmap_connection_get_property (GObject * object,
g_value_set_uint (value, priv->port);
break;
case PROP_BASE_URI:
- g_value_set_pointer (value, priv->base_uri);
+ g_value_set_boxed (value, priv->base_uri);
break;
case PROP_DATABASE_ID:
g_value_set_int (value, priv->database_id);
diff --git a/libdmapsharing/dmap-mdns-service.c b/libdmapsharing/dmap-mdns-service.c
index 5ee8205..11346f6 100644
--- a/libdmapsharing/dmap-mdns-service.c
+++ b/libdmapsharing/dmap-mdns-service.c
@@ -104,13 +104,13 @@ dmap_mdns_service_get_property (GObject *object,
switch (prop_id) {
case PROP_SERVICE_NAME:
- g_value_set_static_string (value, service->priv->service_name);
+ g_value_set_string (value, service->priv->service_name);
break;
case PROP_NAME:
- g_value_set_static_string (value, service->priv->name);
+ g_value_set_string (value, service->priv->name);
break;
case PROP_HOST:
- g_value_set_static_string (value, service->priv->host);
+ g_value_set_string (value, service->priv->host);
break;
case PROP_PORT:
g_value_set_uint (value, service->priv->port);
@@ -119,7 +119,7 @@ dmap_mdns_service_get_property (GObject *object,
g_value_set_boolean (value, service->priv->password_protected);
break;
case PROP_PAIR:
- g_value_set_static_string (value, service->priv->pair);
+ g_value_set_string (value, service->priv->pair);
break;
case PROP_TRANSPORT_PROTOCOL:
g_value_set_uint (value, service->priv->transport_protocol);
diff --git a/libdmapsharing/dmap-share.c b/libdmapsharing/dmap-share.c
index c1550bb..8cbb0f7 100644
--- a/libdmapsharing/dmap-share.c
+++ b/libdmapsharing/dmap-share.c
@@ -489,17 +489,25 @@ _dmap_share_set_property (GObject * object,
_dmap_share_set_password (share, g_value_get_string (value));
break;
case PROP_DB:
- share->priv->db = (DMAPDb *) g_value_get_pointer (value);
+ if (share->priv->db) {
+ g_object_unref(share->priv->db);
+ }
+ share->priv->db = g_value_dup_object (value);
break;
case PROP_CONTAINER_DB:
- share->priv->container_db =
- (DMAPContainerDb *) g_value_get_pointer (value);
+ if (share->priv->container_db) {
+ g_object_unref(share->priv->container_db);
+ }
+ share->priv->container_db = g_value_dup_object (value);
break;
case PROP_TRANSCODE_MIMETYPE:
/* FIXME: get or dup? */
share->priv->transcode_mimetype = g_value_dup_string (value);
break;
case PROP_TXT_RECORDS:
+ if (share->priv->txt_records) {
+ g_strfreev (share->priv->txt_records);
+ }
share->priv->txt_records = g_value_dup_boxed (value);
break;
default:
@@ -535,10 +543,10 @@ _dmap_share_get_property (GObject * object,
(DMAP_SHARE (object)));
break;
case PROP_DB:
- g_value_set_pointer (value, share->priv->db);
+ g_value_set_object (value, share->priv->db);
break;
case PROP_CONTAINER_DB:
- g_value_set_pointer (value, share->priv->container_db);
+ g_value_set_object (value, share->priv->container_db);
break;
case PROP_TRANSCODE_MIMETYPE:
g_value_set_string (value, share->priv->transcode_mimetype);
@@ -654,20 +662,20 @@ dmap_share_class_init (DMAPShareClass * klass)
G_PARAM_READWRITE));
g_object_class_install_property (object_class,
PROP_DB,
- g_param_spec_pointer ("db",
- "DB",
- "DB object",
- G_PARAM_READWRITE
- |
+ g_param_spec_object ("db",
+ "DB",
+ "DB object",
+ DMAP_TYPE_DB,
+ G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class,
PROP_CONTAINER_DB,
- g_param_spec_pointer ("container-db",
- "Container DB",
- "Container DB object",
- G_PARAM_READWRITE
- |
+ g_param_spec_object ("container-db",
+ "Container DB",
+ "Container DB object",
+ DMAP_TYPE_CONTAINER_DB,
+ G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class,
diff --git a/libdmapsharing/test-daap-record.c b/libdmapsharing/test-daap-record.c
index 1e897d7..0e873ca 100644
--- a/libdmapsharing/test-daap-record.c
+++ b/libdmapsharing/test-daap-record.c
@@ -44,7 +44,7 @@ struct TestDAAPRecordPrivate {
gint8 has_video;
guint64 songalbumid;
DMAPMediaKind mediakind;
- GByteArray *hash;
+ GArray *hash;
};
enum {
@@ -155,7 +155,10 @@ test_daap_record_set_property (GObject *object,
record->priv->mediakind = g_value_get_enum (value);
break;
case PROP_HASH:
- record->priv->hash = g_value_get_boxed (value);
+ if (record->priv->hash) {
+ g_array_unref(record->priv->hash);
+ }
+ record->priv->hash = g_value_dup_boxed (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -337,6 +340,10 @@ test_daap_record_finalize (GObject *object)
g_free (record->priv->artist);
g_free (record->priv->genre);
+ if (record->priv->hash) {
+ g_array_unref(record->priv->hash);
+ }
+
G_OBJECT_CLASS (test_daap_record_parent_class)->finalize (object);
}
diff --git a/tests/test-dmap-db.c b/libdmapsharing/test-dmap-db.c
similarity index 98%
rename from tests/test-dmap-db.c
rename to libdmapsharing/test-dmap-db.c
index c8d354c..6ec9ba2 100644
--- a/tests/test-dmap-db.c
+++ b/libdmapsharing/test-dmap-db.c
@@ -38,7 +38,7 @@ test_dmap_db_lookup_by_id (const DMAPDb *db, guint id)
static void
test_dmap_db_foreach (const DMAPDb *db,
- GHFunc func,
+ DMAPIdRecordFunc func,
gpointer data)
{
g_hash_table_foreach (TEST_DMAP_DB (db)->priv->db, (GHFunc) func, data);
diff --git a/tests/test-dmap-db.h b/libdmapsharing/test-dmap-db.h
similarity index 100%
rename from tests/test-dmap-db.h
rename to libdmapsharing/test-dmap-db.h
diff --git a/libdmapsharing/test-dpap-record.c b/libdmapsharing/test-dpap-record.c
index c571b01..c0be007 100644
--- a/libdmapsharing/test-dpap-record.c
+++ b/libdmapsharing/test-dpap-record.c
@@ -27,12 +27,11 @@ struct TestDPAPRecordPrivate {
gint rating;
gint creationdate;
char *location;
- char *title;
char *aspectratio;
char *filename;
char *format;
char *comments;
- GByteArray *thumbnail;
+ GArray *thumbnail;
};
enum {
@@ -82,7 +81,8 @@ test_dpap_record_set_property (GObject *object,
break;
case PROP_PIXEL_HEIGHT:
record->priv->pixelheight = g_value_get_int (value);
- break; case PROP_PIXEL_WIDTH:
+ break;
+ case PROP_PIXEL_WIDTH:
record->priv->pixelwidth = g_value_get_int (value);
break;
case PROP_FORMAT:
@@ -90,7 +90,10 @@ test_dpap_record_set_property (GObject *object,
record->priv->format = g_value_dup_string (value);
break;
case PROP_THUMBNAIL:
- record->priv->thumbnail = g_value_get_boxed (value);
+ if (record->priv->thumbnail) {
+ g_array_unref(record->priv->thumbnail);
+ }
+ record->priv->thumbnail = g_value_dup_boxed (value);
break;
case PROP_COMMENTS:
g_free (record->priv->comments);
@@ -145,7 +148,8 @@ test_dpap_record_get_property (GObject *object,
case PROP_COMMENTS:
g_value_set_string (value, record->priv->comments);
break;
- default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
@@ -226,14 +230,13 @@ test_dpap_record_finalize (GObject *object)
TestDPAPRecord *record = TEST_DPAP_RECORD (object);
g_free (record->priv->location);
- g_free (record->priv->title);
g_free (record->priv->aspectratio);
g_free (record->priv->filename);
g_free (record->priv->format);
g_free (record->priv->comments);
if (record->priv->thumbnail) {
- g_byte_array_unref (record->priv->thumbnail);
+ g_array_unref (record->priv->thumbnail);
}
G_OBJECT_CLASS (test_dpap_record_parent_class)->finalize (object);
@@ -254,8 +257,6 @@ test_dpap_record_new (void)
record->priv->location = g_strdup_printf ("file://%s/media/test.jpeg",
g_get_current_dir ());
- record->priv->title = g_strdup ("Title of Photograph");
-
/* Width / Height as a string. */
record->priv->aspectratio = g_strdup ("1.333");
@@ -282,8 +283,8 @@ test_dpap_record_new (void)
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->thumbnail = g_byte_array_sized_new (size);
- g_byte_array_append (record->priv->thumbnail, thumbnail, size);
+ record->priv->thumbnail = g_array_sized_new (FALSE, FALSE, 1, size);
+ g_array_append_vals (record->priv->thumbnail, thumbnail, size);
return record;
}
diff --git a/tests/Makefile.am b/tests/Makefile.am
index abe0c5f..4674470 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -15,7 +15,6 @@ endif
endif
test_dmap_client_SOURCES = \
- test-dmap-db.c \
test-dmap-client.c
test_dmap_client_LDADD = \
@@ -29,7 +28,6 @@ test_dmap_client_LDADD = \
$(MDNS_LIBS)
test_dmap_server_SOURCES = \
- test-dmap-db.c \
test-dmap-container-record.c \
test-dmap-container-db.c \
test-dmap-server.c
@@ -144,8 +142,7 @@ INCLUDES = \
noinst_HEADERS = \
test-dmap-container-record.h \
- test-dmap-container-db.h \
- test-dmap-db.h
+ test-dmap-container-db.h
EXTRA_DIST = \
$(dacplisten_VALASOURCES) \
diff --git a/tests/test-dmap-client.c b/tests/test-dmap-client.c
index 214d663..9a33258 100644
--- a/tests/test-dmap-client.c
+++ b/tests/test-dmap-client.c
@@ -25,8 +25,7 @@
#include <libdmapsharing/dmap.h>
#include <libdmapsharing/test-daap-record-factory.h>
#include <libdmapsharing/test-dpap-record-factory.h>
-
-#include "test-dmap-db.h"
+#include <libdmapsharing/test-dmap-db.h>
enum {
DAAP,
@@ -82,6 +81,8 @@ authenticate_cb (DMAPConnection *connection,
g_object_set (connection, "password", password, NULL);
soup_auth_authenticate (auth, username, password);
soup_session_unpause_message (session, msg);
+
+ g_free(username);
}
static void
@@ -126,6 +127,10 @@ service_added_cb (DMAPMdnsBrowser *browser,
}
g_signal_connect (DMAP_CONNECTION (conn), "authenticate", G_CALLBACK(authenticate_cb), NULL);
dmap_connection_start (DMAP_CONNECTION (conn), (DMAPConnectionFunc) connected_cb, db);
+
+ g_free(service_name);
+ g_free(name);
+ g_free(host);
}
int main(int argc, char **argv)
diff --git a/tests/test-dmap-container-db.c b/tests/test-dmap-container-db.c
index c4e6ffe..90a61f4 100644
--- a/tests/test-dmap-container-db.c
+++ b/tests/test-dmap-container-db.c
@@ -35,11 +35,11 @@ test_dmap_container_db_lookup_by_id (DMAPContainerDb *db, guint id)
static void
test_dmap_container_db_foreach (DMAPContainerDb *db,
- GHFunc func,
+ DMAPIdContainerRecordFunc func,
gpointer data)
{
/* In reality, pull each record from the db and execute func on it. */
- func (GUINT_TO_POINTER (1), record, data);
+ func (1, record, data);
}
static gint64
diff --git a/tests/test-dmap-container-record.h b/tests/test-dmap-container-record.h
index 85c5abc..0d5094f 100644
--- a/tests/test-dmap-container-record.h
+++ b/tests/test-dmap-container-record.h
@@ -22,8 +22,7 @@
#define __TEST_DMAP_CONTAINER_RECORD
#include <libdmapsharing/dmap.h>
-
-#include "test-dmap-db.h"
+#include <libdmapsharing/test-dmap-db.h>
G_BEGIN_DECLS
diff --git a/tests/test-dmap-server.c b/tests/test-dmap-server.c
index f6d7b93..bd0ccc5 100644
--- a/tests/test-dmap-server.c
+++ b/tests/test-dmap-server.c
@@ -28,10 +28,10 @@
#include <libdmapsharing/test-dpap-record.h>
#include <libdmapsharing/test-daap-record-factory.h>
#include <libdmapsharing/test-dpap-record-factory.h>
+#include <libdmapsharing/test-dmap-db.h>
#include "test-dmap-container-record.h"
#include "test-dmap-container-db.h"
-#include "test-dmap-db.h"
/* For use when deciding whether to test DAAP or DPAP. */
enum {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]