talkatu/talkatu

43fccd3263b7
Parents 2b0789b0b38c
Children ec02908012f0
Add a filename property to TalkatuAttachment
--- a/talkatu/talkatuattachment.c Thu Dec 05 20:06:17 2019 -0600
+++ b/talkatu/talkatuattachment.c Fri Dec 06 22:37:52 2019 -0600
@@ -45,6 +45,7 @@
GObject parent;
gchar *content_type;
+ gchar *filename;
GBytes *contents;
};
@@ -53,6 +54,7 @@
enum {
PROP_0 = 0,
PROP_CONTENT_TYPE,
+ PROP_FILENAME,
PROP_CONTENTS,
N_PROPERTIES,
};
@@ -74,6 +76,18 @@
}
static void
+talkatu_attachment_set_filename(TalkatuAttachment *attachment,
+ const gchar *filename)
+{
+ g_clear_pointer(&attachment->filename, g_free);
+
+ attachment->filename = g_strdup(filename);
+
+ g_object_notify_by_pspec(G_OBJECT(attachment),
+ properties[PROP_FILENAME]);
+}
+
+static void
talkatu_attachment_set_contents(TalkatuAttachment *attachment,
GBytes *contents)
{
@@ -97,6 +111,9 @@
case PROP_CONTENT_TYPE:
g_value_set_string(value, talkatu_attachment_get_content_type(attachment));
break;
+ case PROP_FILENAME:
+ g_value_set_string(value, talkatu_attachment_get_filename(attachment));
+ break;
case PROP_CONTENTS:
g_value_set_boxed(value, talkatu_attachment_get_contents(attachment));
break;
@@ -114,6 +131,9 @@
case PROP_CONTENT_TYPE:
talkatu_attachment_set_content_type(attachment, g_value_get_string(value));
break;
+ case PROP_FILENAME:
+ talkatu_attachment_set_filename(attachment, g_value_get_string(value));
+ break;
case PROP_CONTENTS:
talkatu_attachment_set_contents(attachment, g_value_get_boxed(value));
break;
@@ -128,6 +148,7 @@
TalkatuAttachment *attachment = TALKATU_ATTACHMENT(obj);
g_clear_pointer(&attachment->content_type, g_free);
+ g_clear_pointer(&attachment->filename, g_free);
g_clear_pointer(&attachment->contents, g_bytes_unref);
G_OBJECT_CLASS(talkatu_attachment_parent_class)->finalize(obj);
@@ -152,6 +173,12 @@
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS
);
+ properties[PROP_FILENAME] = g_param_spec_string(
+ "filename", "filename", "The filename of the attachment",
+ "unknown",
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS
+ );
+
properties[PROP_CONTENTS] = g_param_spec_boxed(
"contents", "contents", "The contents stored in a GBytes",
G_TYPE_BYTES,
@@ -168,6 +195,7 @@
/**
* talkatu_attachment_new:
* @content_type: The content type of the attachment.
+ * @filename: The filename of the attachment.
* @contents: A #GBytes that contains the data of the attachment.
*
* Creates a new attachment with @content_type and @contents.
@@ -175,13 +203,17 @@
* Returns: (transfer full): The new #TalkatuAttachment.
*/
TalkatuAttachment *
-talkatu_attachment_new(const gchar *content_type, GBytes *contents) {
+talkatu_attachment_new(const gchar *content_type, const gchar *filename,
+ GBytes *contents)
+{
g_return_val_if_fail(content_type != NULL, NULL);
+ g_return_val_if_fail(filename != NULL, NULL);
g_return_val_if_fail(contents != NULL, NULL);
return TALKATU_ATTACHMENT(g_object_new(
TALKATU_TYPE_ATTACHMENT,
"content-type", content_type,
+ "filename", filename,
"contents", contents,
NULL
));
@@ -189,6 +221,7 @@
/**
* talkatu_attachment_new_from_pixbuf:
+ * @filename: The filename of the attachment.
* @pixbuf: The #GdkPixbuf to create an attachment for.
*
* Creates a new #TalkatuAttachment containing @pixbuf.
@@ -196,13 +229,14 @@
* Returns: (transfer full): The new #TalkatuAttachment.
*/
TalkatuAttachment *
-talkatu_attachment_new_from_pixbuf(GdkPixbuf *pixbuf) {
+talkatu_attachment_new_from_pixbuf(const gchar *filename, GdkPixbuf *pixbuf) {
TalkatuAttachment *attachment = NULL;
GBytes *contents = NULL;
GError *error = NULL;
gchar *data = NULL;
gsize data_sz;
+ g_return_val_if_fail(filename != NULL, NULL);
g_return_val_if_fail(GDK_IS_PIXBUF(pixbuf), NULL);
if(!gdk_pixbuf_save_to_buffer(pixbuf, &data, &data_sz, "png", &error, NULL)) {
@@ -212,9 +246,13 @@
return NULL;
}
+ /* TODO: adjust filename for the forced png format since we don't know the
+ * original format of the image.
+ */
+
contents = g_bytes_new_take(data, data_sz);
- attachment = talkatu_attachment_new("image/png", contents);
+ attachment = talkatu_attachment_new("image/png", filename, contents);
g_bytes_unref(contents);
@@ -237,6 +275,21 @@
}
/**
+ * talkatu_attachment_get_filename:
+ * @attachment: The #TalkatuAttachment instance.
+ *
+ * Returns the filename of the attachment.
+ *
+ * Returns: (transfer none): The filename of @attachment.
+ */
+const gchar *
+talkatu_attachment_get_filename(TalkatuAttachment *attachment) {
+ g_return_val_if_fail(TALKATU_IS_ATTACHMENT(attachment), NULL);
+
+ return attachment->filename;
+}
+
+/**
* talkatu_attachment_get_contents:
* @attachment: The #TalkatuAttachment instance.
*
--- a/talkatu/talkatuattachment.h Thu Dec 05 20:06:17 2019 -0600
+++ b/talkatu/talkatuattachment.h Fri Dec 06 22:37:52 2019 -0600
@@ -31,10 +31,11 @@
#define TALKATU_TYPE_ATTACHMENT (talkatu_attachment_get_type())
G_DECLARE_FINAL_TYPE(TalkatuAttachment, talkatu_attachment, TALKATU, ATTACHMENT, GObject)
-TalkatuAttachment *talkatu_attachment_new(const gchar *content_type, GBytes *contents);
-TalkatuAttachment *talkatu_attachment_new_from_pixbuf(GdkPixbuf *pixbuf);
+TalkatuAttachment *talkatu_attachment_new(const gchar *content_type, const gchar *filename, GBytes *contents);
+TalkatuAttachment *talkatu_attachment_new_from_pixbuf(const gchar *filename, GdkPixbuf *pixbuf);
const gchar *talkatu_attachment_get_content_type(TalkatuAttachment *attachment);
+const gchar *talkatu_attachment_get_filename(TalkatuAttachment *attachment);
GBytes *talkatu_attachment_get_contents(TalkatuAttachment *attachment);
G_END_DECLS