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);
|
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...
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue