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);
}
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));
try {
if (file.query_exists()) file.delete(); //TODO y?
DataOutputStream fos = new DataOutputStream(file.create(FileCreateFlags.REPLACE_DESTINATION));
fos.write_async.begin(data);
fos.write_bytes_async.begin(data);
} catch (Error e) {
// 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;
string? res = iq.stanza.get_deep_string_content(@"$NS_URI:vCard", "PHOTO", "BINVAL");
if (res == null) return;
uint8[] content = Base64.decode(res);
string sha1 = Checksum.compute_for_data(ChecksumType.SHA1, content);
Bytes content = new Bytes.take(Base64.decode(res));
string sha1 = Checksum.compute_for_bytes(ChecksumType.SHA1, content);
storage.store(sha1, content);
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) {
return;
}
uint8[] image = Base64.decode(node.get_string_content());
string sha1 = Checksum.compute_for_data(ChecksumType.SHA1, image);
Bytes image = new Bytes.take(Base64.decode(node.get_string_content()));
string sha1 = Checksum.compute_for_bytes(ChecksumType.SHA1, image);
if (sha1 != id) {
warning("sha sum did not match for avatar from "+jid.to_string()+" expected="+id+", actual="+sha1);
return;

View file

@ -2,8 +2,8 @@ using Gdk;
namespace Xmpp.Xep {
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 Pixbuf? get_image(string id);
}
}
}