Ensure image data is kept until avatars are written to file
This commit is contained in:
parent
b0dde02bc9
commit
a960740c3e
|
@ -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...
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -2,7 +2,7 @@ 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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue