[libdmapsharing] More adjustments related to API change



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]