From bd8f277b9129a48a95ee19a2a3ec41d13aa66d4a Mon Sep 17 00:00:00 2001 From: fiaxh Date: Sat, 14 Jun 2025 17:50:07 +0200 Subject: Add basic support for BOB thumbnails in SFS --- libdino/src/entity/file_transfer.vala | 6 ++++-- libdino/src/service/database.vala | 1 + libdino/src/service/sfs_metadata.vala | 6 ++---- 3 files changed, 7 insertions(+), 6 deletions(-) (limited to 'libdino/src') 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 id = new Column.Integer("id"); + // TODO store data as bytes, not as data uri public Column uri = new Column.Text("uri") { not_null = true }; public Column mime_type = new Column.Text("mime_type"); public Column 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; -- cgit v1.3