diff options
| -rw-r--r-- | libdino/src/entity/file_transfer.vala | 6 | ||||
| -rw-r--r-- | libdino/src/service/database.vala | 1 | ||||
| -rw-r--r-- | libdino/src/service/sfs_metadata.vala | 6 | ||||
| -rw-r--r-- | main/src/ui/conversation_content_view/file_image_widget.vala | 6 | ||||
| -rw-r--r-- | main/src/ui/util/preference_group.vala | 2 | ||||
| -rw-r--r-- | xmpp-vala/src/module/util.vala | 12 | ||||
| -rw-r--r-- | xmpp-vala/src/module/xep/0231_bits_of_binary.vala | 10 | ||||
| -rw-r--r-- | xmpp-vala/src/module/xep/0264_jingle_content_thumbnails.vala | 15 |
8 files changed, 25 insertions, 33 deletions
diff --git a/libdino/src/entity/file_transfer.vala b/libdino/src/entity/file_transfer.vala index 52347028..7b146c9a 100644 --- a/libdino/src/entity/file_transfer.vala +++ b/libdino/src/entity/file_transfer.vala @@ -160,7 +160,7 @@ public class FileTransfer : Object { foreach(var thumbnail_row in db.file_thumbnails.select().with(db.file_thumbnails.id, "=", id)) { Xep.JingleContentThumbnails.Thumbnail thumbnail = new Xep.JingleContentThumbnails.Thumbnail(); - thumbnail.uri = thumbnail_row[db.file_thumbnails.uri]; + thumbnail.data = Xmpp.get_data_for_uri(thumbnail_row[db.file_thumbnails.uri]); thumbnail.media_type = thumbnail_row[db.file_thumbnails.mime_type]; thumbnail.width = thumbnail_row[db.file_thumbnails.width]; thumbnail.height = thumbnail_row[db.file_thumbnails.height]; @@ -214,9 +214,11 @@ public class FileTransfer : Object { .perform(); } foreach (Xep.JingleContentThumbnails.Thumbnail thumbnail in thumbnails) { + string data_uri = "data:image/png;base64," + Base64.encode(thumbnail.data.get_data()); + db.file_thumbnails.insert() .value(db.file_thumbnails.id, id) - .value(db.file_thumbnails.uri, thumbnail.uri) + .value(db.file_thumbnails.uri, data_uri) .value(db.file_thumbnails.mime_type, thumbnail.media_type) .value(db.file_thumbnails.width, thumbnail.width) .value(db.file_thumbnails.height, thumbnail.height) diff --git a/libdino/src/service/database.vala b/libdino/src/service/database.vala index 06676951..e47e24e9 100644 --- a/libdino/src/service/database.vala +++ b/libdino/src/service/database.vala @@ -223,6 +223,7 @@ public class Database : Qlite.Database { public class FileThumbnailsTable : Table { public Column<int> id = new Column.Integer("id"); + // TODO store data as bytes, not as data uri public Column<string> uri = new Column.Text("uri") { not_null = true }; public Column<string> mime_type = new Column.Text("mime_type"); public Column<int> width = new Column.Integer("width"); diff --git a/libdino/src/service/sfs_metadata.vala b/libdino/src/service/sfs_metadata.vala index dff6f7bf..f0058c4e 100644 --- a/libdino/src/service/sfs_metadata.vala +++ b/libdino/src/service/sfs_metadata.vala @@ -68,10 +68,8 @@ namespace Dino { Pixbuf thumbnail_pixbuf = pixbuf.scale_simple(thumbnail_width, thumbnail_height, InterpType.BILINEAR); uint8[] buffer; thumbnail_pixbuf.save_to_buffer(out buffer, IMAGE_TYPE); - string base_64 = GLib.Base64.encode(buffer); - string uri = @"data:$MIME_TYPE;base64,$base_64"; - Xep.JingleContentThumbnails.Thumbnail thumbnail = new Xep.JingleContentThumbnails.Thumbnail(); - thumbnail.uri = uri; + var thumbnail = new Xep.JingleContentThumbnails.Thumbnail(); + thumbnail.data = new Bytes.take(buffer); thumbnail.media_type = MIME_TYPE; thumbnail.width = thumbnail_width; thumbnail.height = thumbnail_height; diff --git a/main/src/ui/conversation_content_view/file_image_widget.vala b/main/src/ui/conversation_content_view/file_image_widget.vala index fa848c6d..dae245e4 100644 --- a/main/src/ui/conversation_content_view/file_image_widget.vala +++ b/main/src/ui/conversation_content_view/file_image_widget.vala @@ -217,11 +217,7 @@ public class FileImageWidget : Widget { } public static Pixbuf? parse_thumbnail(Xep.JingleContentThumbnails.Thumbnail thumbnail) { - Bytes? data = Xep.BitsOfBinary.get_data_for_uri(thumbnail.uri); - if (data == null) { - warning("Couldn't parse data from uri: %s", thumbnail.uri); - } - MemoryInputStream input_stream = new MemoryInputStream.from_data(data.get_data()); + MemoryInputStream input_stream = new MemoryInputStream.from_data(thumbnail.data.get_data()); return new Pixbuf.from_stream(input_stream); } diff --git a/main/src/ui/util/preference_group.vala b/main/src/ui/util/preference_group.vala index 0a8e37c7..6056f2c8 100644 --- a/main/src/ui/util/preference_group.vala +++ b/main/src/ui/util/preference_group.vala @@ -26,7 +26,7 @@ namespace Dino.Ui.Util { if (entry_view_model != null) { Adw.EntryRow view = new Adw.EntryRow() { title = entry_view_model.title, show_apply_button=true }; if (preferences_row.media_uri != null) { - var bytes = BitsOfBinary.get_data_for_uri(preferences_row.media_uri); + var bytes = Xmpp.get_data_for_uri(preferences_row.media_uri); Picture picture = new Picture.for_paintable(Texture.from_bytes(bytes)); view.add_suffix(picture); } diff --git a/xmpp-vala/src/module/util.vala b/xmpp-vala/src/module/util.vala index 28f1a5f8..076c327f 100644 --- a/xmpp-vala/src/module/util.vala +++ b/xmpp-vala/src/module/util.vala @@ -12,6 +12,18 @@ public string random_uuid() { return "%08x-%04x-%04x-%04x-%04x%08x".printf(b1, b2, b3, b4, b5_1, b5_2); } +public Bytes? get_data_for_uri(string uri) { + if (uri.has_suffix("@bob.xmpp.org")) { + string cid = uri.replace("cid:", ""); + return Xep.BitsOfBinary.known_bobs[cid]; + } else if (uri.has_prefix("data:image/png;base64,")) { + return new Bytes.take(Base64.decode(uri.replace("data:image/png;base64,", ""))); + } else { + warning("Couldn't parse data from uri %s", uri); + return null; + } +} + public abstract class StanzaListener<T> : OrderedListener { public abstract async bool run(XmppStream stream, T stanza); diff --git a/xmpp-vala/src/module/xep/0231_bits_of_binary.vala b/xmpp-vala/src/module/xep/0231_bits_of_binary.vala index cd756b5e..7e811045 100644 --- a/xmpp-vala/src/module/xep/0231_bits_of_binary.vala +++ b/xmpp-vala/src/module/xep/0231_bits_of_binary.vala @@ -6,16 +6,6 @@ namespace Xmpp.Xep.BitsOfBinary { public static HashMap<string, Bytes> known_bobs = null; - public Bytes? get_data_for_uri(string uri) { - if (uri.has_suffix("@bob.xmpp.org")) { - string cid = uri.replace("cid:", ""); - return BitsOfBinary.known_bobs[cid]; - } else if (uri.has_prefix("data:image/png;base64,")) { - return new Bytes.take(Base64.decode(uri.replace("data:image/png;base64,", ""))); - } - return null; - } - public class Module : XmppStreamModule { public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "bits_of_binary"); diff --git a/xmpp-vala/src/module/xep/0264_jingle_content_thumbnails.vala b/xmpp-vala/src/module/xep/0264_jingle_content_thumbnails.vala index 5dba0c6d..d408e94b 100644 --- a/xmpp-vala/src/module/xep/0264_jingle_content_thumbnails.vala +++ b/xmpp-vala/src/module/xep/0264_jingle_content_thumbnails.vala @@ -13,15 +13,16 @@ namespace Xmpp.Xep.JingleContentThumbnails { } public class Thumbnail { - public string uri; public Bytes data; public string? media_type; public int width; public int height; public StanzaNode to_stanza_node() { + string data_uri = "data:image/png;base64," + Base64.encode(data.get_data()); + StanzaNode node = new StanzaNode.build("thumbnail", NS_URI).add_self_xmlns() - .put_attribute("uri", this.uri); + .put_attribute("uri", data_uri); if (this.media_type != null) { node.put_attribute("media-type", this.media_type); } @@ -38,17 +39,9 @@ namespace Xmpp.Xep.JingleContentThumbnails { string uri = node.get_attribute("uri"); if (uri == null) return null; - string? data_uri = null; - Bytes data = BitsOfBinary.get_data_for_uri(uri); - - if (uri.has_suffix("@bob.xmpp.org")) { - data_uri = "data:image/png;base64," + Base64.encode(data.get_data()); - } else if (uri.has_prefix("data:image/png;base64,")) { - data_uri = uri; - } + Bytes data = Xmpp.get_data_for_uri(uri); Thumbnail thumbnail = new Thumbnail(); - thumbnail.uri = data_uri; thumbnail.data = data; thumbnail.media_type = node.get_attribute("media-type"); thumbnail.width = node.get_attribute_int("width"); |
