diff options
author | Jonny Lamb <jonny.lamb@collabora.co.uk> | 2011-11-09 19:36:04 +0000 |
---|---|---|
committer | Jonny Lamb <jonny.lamb@collabora.co.uk> | 2011-11-09 19:36:04 +0000 |
commit | 4c1f77918863361e2b44171f11cc82379b936354 (patch) | |
tree | 783f397463438deffaf8d6a72715f980dac2d9ea | |
parent | cab22c8a694a21b48073f572baf49c907ce2bf9d (diff) | |
download | telepathy-salut-4c1f77918863361e2b44171f11cc82379b936354.tar.gz |
metadata: update to new draft
Signed-off-by: Jonny Lamb <jonny.lamb@collabora.co.uk>
-rw-r--r-- | extensions/Channel_Interface_File_Transfer_Metadata.xml | 14 | ||||
-rw-r--r-- | src/file-transfer-channel.c | 23 | ||||
-rw-r--r-- | src/ft-manager.c | 3 | ||||
-rw-r--r-- | tests/twisted/avahi/file-transfer/file_transfer_helper.py | 13 | ||||
-rw-r--r-- | tests/twisted/avahi/file-transfer/metadata.py | 4 |
5 files changed, 35 insertions, 22 deletions
diff --git a/extensions/Channel_Interface_File_Transfer_Metadata.xml b/extensions/Channel_Interface_File_Transfer_Metadata.xml index ea42332d..da7af77b 100644 --- a/extensions/Channel_Interface_File_Transfer_Metadata.xml +++ b/extensions/Channel_Interface_File_Transfer_Metadata.xml @@ -57,7 +57,7 @@ </property> <property name="Metadata" tp:name-for-bindings="Metadata" - type="a{ss}" tp:type="String_String_Map" access="readwrite" + type="a{sas}" tp:type="Metadata" access="readwrite" tp:immutable="sì" tp:requestable="naturalmente"> <tp:docstring xmlns="http://www.w3.org/1999/xhtml"> <p>Additional information about the file transfer set by the @@ -66,6 +66,18 @@ </tp:docstring> </property> + <tp:mapping name="Metadata" type="a{ua{sv}}"> + <tp:docstring> + A mapping from string key to a list of strings, used in the + <tp:member-ref>Metadata</tp:member-ref> property. To emulate a + simple string -> string hash table one should have exactly one + member in the value string list. A string list is used instead + of a single string so one can transfer RDF triples. + </tp:docstring> + <tp:member name="Key" type="s"/> + <tp:member name="Values" type="as"/> + </tp:mapping> + </interface> </node> <!-- vim:set sw=2 sts=2 et ft=xml: --> diff --git a/src/file-transfer-channel.c b/src/file-transfer-channel.c index c3e901ca..6adba642 100644 --- a/src/file-transfer-channel.c +++ b/src/file-transfer-channel.c @@ -37,6 +37,7 @@ #include "file-transfer-channel.h" #include "signals-marshal.h" +#include <extensions/_gen/gtypes.h> #include "connection.h" #include "im-manager.h" #include "contact.h" @@ -873,7 +874,7 @@ salut_file_transfer_channel_class_init ( param_spec = g_param_spec_boxed ("metadata", "Metadata", "The Metadata.Metadata property of this channel", - TP_HASH_TYPE_STRING_STRING_MAP, + SALUT_HASH_TYPE_METADATA, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_METADATA, param_spec); @@ -1203,13 +1204,15 @@ add_metadata_forms (SalutFileTransferChannel *self, g_hash_table_iter_init (&iter, self->priv->metadata); while (g_hash_table_iter_next (&iter, &key, &val)) { - wocky_node_add_build (x, - '(', "field", - '@', "var", key, - '(', "value", - '$', val, - ')', - ')', NULL); + const gchar * const *values = val; + + WockyNode *field = wocky_node_add_child (x, "field"); + wocky_node_set_attribute (field, "var", key); + + for (; values != NULL && *values != NULL; values++) + { + wocky_node_add_child_with_content (field, "value", *values); + } } form = wocky_data_form_new_from_node (x, &error); @@ -1783,7 +1786,7 @@ extract_metadata (GibberFileTransfer *ft) return NULL; metadata = g_hash_table_new_full (g_str_hash, g_str_equal, - g_free, g_free); + g_free, (GDestroyNotify) g_strfreev); g_hash_table_iter_init (&iter, form->fields); while (g_hash_table_iter_next (&iter, &key, &value)) @@ -1796,7 +1799,7 @@ extract_metadata (GibberFileTransfer *ft) g_hash_table_insert (metadata, g_strdup (var), - g_strdup (field->raw_value_contents[0])); + g_strdupv (field->raw_value_contents)); } return metadata; diff --git a/src/ft-manager.c b/src/ft-manager.c index 5de5d7fe..b7fa7492 100644 --- a/src/ft-manager.c +++ b/src/ft-manager.c @@ -33,6 +33,7 @@ #include <salut/caps-channel-manager.h> +#include <extensions/_gen/gtypes.h> #include "file-transfer-channel.h" #include "contact-manager.h" #include "presence-cache.h" @@ -405,7 +406,7 @@ salut_ft_manager_handle_request (TpChannelManager *manager, metadata = tp_asv_get_boxed (request_properties, SALUT_IFACE_CHANNEL_INTERFACE_FILE_TRANSFER_METADATA ".Metadata", - TP_HASH_TYPE_STRING_STRING_MAP); + SALUT_HASH_TYPE_METADATA); if (metadata != NULL && g_hash_table_lookup ((GHashTable *) metadata, "FORM_TYPE")) { diff --git a/tests/twisted/avahi/file-transfer/file_transfer_helper.py b/tests/twisted/avahi/file-transfer/file_transfer_helper.py index b798f475..3f9f26d6 100644 --- a/tests/twisted/avahi/file-transfer/file_transfer_helper.py +++ b/tests/twisted/avahi/file-transfer/file_transfer_helper.py @@ -55,8 +55,8 @@ class FileTransferTest(object): CONTACT_NAME = 'test-ft' service_name = 'wacky.service.name' - metadata = {'loads': 'of', - 'mental': 'data'} + metadata = {'loads': ['of'], + 'mental': ['data']} def __init__(self): self.file = File() @@ -214,7 +214,7 @@ class ReceiveFileTest(FileTransferTest): add_dataforms(query, service_form) if self.metadata: - metadata_form = {ns.TP_FT_METADATA: {k: [v] for k, v in self.metadata.items()}} + metadata_form = {ns.TP_FT_METADATA: self.metadata} add_dataforms(query, metadata_form) self.outbound.send(iq) @@ -384,7 +384,7 @@ class SendFileTest(FileTransferTest): if self.service_name: request[cs.FT_SERVICE_NAME] = self.service_name if self.metadata: - request[cs.FT_METADATA] = dbus.Dictionary(self.metadata, signature='ss') + request[cs.FT_METADATA] = dbus.Dictionary(self.metadata, signature='sas') if uri: request[cs.FT_URI] = self.file.uri @@ -458,10 +458,7 @@ class SendFileTest(FileTransferTest): assert ns.TP_FT_METADATA_SERVICE not in forms if self.metadata: - # the dataform isn't such a simple a{ss} because it can - # have multiple values - expected = {k:[v] for k,v in self.metadata.items()} - assertEquals(expected, forms[ns.TP_FT_METADATA]) + assertEquals(self.metadata, forms[ns.TP_FT_METADATA]) else: assert ns.TP_FT_METADATA not in forms diff --git a/tests/twisted/avahi/file-transfer/metadata.py b/tests/twisted/avahi/file-transfer/metadata.py index 5b96d680..41811ab8 100644 --- a/tests/twisted/avahi/file-transfer/metadata.py +++ b/tests/twisted/avahi/file-transfer/metadata.py @@ -34,7 +34,7 @@ class SendFileBadProps(SendFileTest): cs.FT_DATE: self.file.date, cs.FT_INITIAL_OFFSET: 0, cs.FT_SERVICE_NAME: self.service_name, - cs.FT_METADATA: dbus.Dictionary(self.metadata, signature='ss')} + cs.FT_METADATA: dbus.Dictionary(self.metadata, signature='sas')} call_async(self.q, self.conn.Requests, 'CreateChannel', request) @@ -60,7 +60,7 @@ class SendFileBadContact(SendFileTest): cs.FT_DATE: self.file.date, cs.FT_INITIAL_OFFSET: 0, cs.FT_SERVICE_NAME: self.service_name, - cs.FT_METADATA: dbus.Dictionary(self.metadata, signature='ss')} + cs.FT_METADATA: dbus.Dictionary(self.metadata, signature='sas')} call_async(self.q, self.conn.Requests, 'CreateChannel', request) |