Ensure image data is kept until avatars are written to file

This commit is contained in:
fiaxh 2019-04-18 22:37:21 +02:00
parent b0dde02bc9
commit a960740c3e
4 changed files with 8 additions and 8 deletions

View file

@ -12,12 +12,12 @@ public class AvatarStorage : Xep.PixbufStorage, Object {
DirUtils.create_with_parents(folder, 0700); DirUtils.create_with_parents(folder, 0700);
} }
public void store(string id, uint8[] data) { public void store(string id, Bytes data) {
File file = File.new_for_path(Path.build_filename(folder, id)); File file = File.new_for_path(Path.build_filename(folder, id));
try { try {
if (file.query_exists()) file.delete(); //TODO y? if (file.query_exists()) file.delete(); //TODO y?
DataOutputStream fos = new DataOutputStream(file.create(FileCreateFlags.REPLACE_DESTINATION)); DataOutputStream fos = new DataOutputStream(file.create(FileCreateFlags.REPLACE_DESTINATION));
fos.write_async.begin(data); fos.write_bytes_async.begin(data);
} catch (Error e) { } catch (Error e) {
// Ignore: we failed in storing, so we refuse to display later... // Ignore: we failed in storing, so we refuse to display later...
} }

View file

@ -55,8 +55,8 @@ public class Module : XmppStreamModule {
if (iq.is_error()) return; if (iq.is_error()) return;
string? res = iq.stanza.get_deep_string_content(@"$NS_URI:vCard", "PHOTO", "BINVAL"); string? res = iq.stanza.get_deep_string_content(@"$NS_URI:vCard", "PHOTO", "BINVAL");
if (res == null) return; if (res == null) return;
uint8[] content = Base64.decode(res); Bytes content = new Bytes.take(Base64.decode(res));
string sha1 = Checksum.compute_for_data(ChecksumType.SHA1, content); string sha1 = Checksum.compute_for_bytes(ChecksumType.SHA1, content);
storage.store(sha1, content); storage.store(sha1, content);
stream.get_module(IDENTITY).received_avatar(stream, iq.from, sha1); stream.get_module(IDENTITY).received_avatar(stream, iq.from, sha1);
} }

View file

@ -56,8 +56,8 @@ namespace Xmpp.Xep.UserAvatars {
if (node == null || id == null) { if (node == null || id == null) {
return; return;
} }
uint8[] image = Base64.decode(node.get_string_content()); Bytes image = new Bytes.take(Base64.decode(node.get_string_content()));
string sha1 = Checksum.compute_for_data(ChecksumType.SHA1, image); string sha1 = Checksum.compute_for_bytes(ChecksumType.SHA1, image);
if (sha1 != id) { if (sha1 != id) {
warning("sha sum did not match for avatar from "+jid.to_string()+" expected="+id+", actual="+sha1); warning("sha sum did not match for avatar from "+jid.to_string()+" expected="+id+", actual="+sha1);
return; return;

View file

@ -2,7 +2,7 @@ using Gdk;
namespace Xmpp.Xep { namespace Xmpp.Xep {
public interface PixbufStorage : Object { public interface PixbufStorage : Object {
public abstract void store(string id, uint8[] data); public abstract void store(string id, Bytes data);
public abstract bool has_image(string id); public abstract bool has_image(string id);
public abstract Pixbuf? get_image(string id); public abstract Pixbuf? get_image(string id);
} }