Search in sources :

Example 6 with Avatar

use of eu.siacs.conversations.xmpp.pep.Avatar in project Conversations by siacs.

the class FileBackend method getStoredPepAvatar.

public Avatar getStoredPepAvatar(String hash) {
    if (hash == null) {
        return null;
    }
    Avatar avatar = new Avatar();
    File file = new File(getAvatarPath(hash));
    FileInputStream is = null;
    try {
        avatar.size = file.length();
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(file.getAbsolutePath(), options);
        is = new FileInputStream(file);
        ByteArrayOutputStream mByteArrayOutputStream = new ByteArrayOutputStream();
        Base64OutputStream mBase64OutputStream = new Base64OutputStream(mByteArrayOutputStream, Base64.DEFAULT);
        MessageDigest digest = MessageDigest.getInstance("SHA-1");
        DigestOutputStream os = new DigestOutputStream(mBase64OutputStream, digest);
        byte[] buffer = new byte[4096];
        int length;
        while ((length = is.read(buffer)) > 0) {
            os.write(buffer, 0, length);
        }
        os.flush();
        os.close();
        avatar.sha1sum = CryptoHelper.bytesToHex(digest.digest());
        avatar.image = new String(mByteArrayOutputStream.toByteArray());
        avatar.height = options.outHeight;
        avatar.width = options.outWidth;
        avatar.type = options.outMimeType;
        return avatar;
    } catch (IOException e) {
        return null;
    } catch (NoSuchAlgorithmException e) {
        return null;
    } finally {
        close(is);
    }
}
Also used : ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) Base64OutputStream(android.util.Base64OutputStream) Avatar(eu.siacs.conversations.xmpp.pep.Avatar) FileInputStream(java.io.FileInputStream) Paint(android.graphics.Paint) DigestOutputStream(java.security.DigestOutputStream) BitmapFactory(android.graphics.BitmapFactory) MessageDigest(java.security.MessageDigest) File(java.io.File) DownloadableFile(eu.siacs.conversations.entities.DownloadableFile)

Example 7 with Avatar

use of eu.siacs.conversations.xmpp.pep.Avatar in project Conversations by siacs.

the class XmppConnectionService method checkForAvatar.

public void checkForAvatar(Account account, final UiCallback<Avatar> callback) {
    IqPacket packet = this.mIqGenerator.retrieveAvatarMetaData(null);
    this.sendIqPacket(account, packet, new OnIqPacketReceived() {

        @Override
        public void onIqPacketReceived(Account account, IqPacket packet) {
            if (packet.getType() == IqPacket.TYPE.RESULT) {
                Element pubsub = packet.findChild("pubsub", "http://jabber.org/protocol/pubsub");
                if (pubsub != null) {
                    Element items = pubsub.findChild("items");
                    if (items != null) {
                        Avatar avatar = Avatar.parseMetadata(items);
                        if (avatar != null) {
                            avatar.owner = account.getJid().toBareJid();
                            if (fileBackend.isAvatarCached(avatar)) {
                                if (account.setAvatar(avatar.getFilename())) {
                                    databaseBackend.updateAccount(account);
                                }
                                getAvatarService().clear(account);
                                callback.success(avatar);
                            } else {
                                fetchAvatarPep(account, avatar, callback);
                            }
                            return;
                        }
                    }
                }
            }
            callback.error(0, null);
        }
    });
}
Also used : Account(eu.siacs.conversations.entities.Account) OnIqPacketReceived(eu.siacs.conversations.xmpp.OnIqPacketReceived) Element(eu.siacs.conversations.xml.Element) Avatar(eu.siacs.conversations.xmpp.pep.Avatar) IqPacket(eu.siacs.conversations.xmpp.stanzas.IqPacket)

Example 8 with Avatar

use of eu.siacs.conversations.xmpp.pep.Avatar in project Conversations by siacs.

the class XmppConnectionService method republishAvatarIfNeeded.

public void republishAvatarIfNeeded(Account account) {
    if (account.getAxolotlService().isPepBroken()) {
        Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": skipping republication of avatar because pep is broken");
        return;
    }
    IqPacket packet = this.mIqGenerator.retrieveAvatarMetaData(null);
    this.sendIqPacket(account, packet, new OnIqPacketReceived() {

        private Avatar parseAvatar(IqPacket packet) {
            Element pubsub = packet.findChild("pubsub", "http://jabber.org/protocol/pubsub");
            if (pubsub != null) {
                Element items = pubsub.findChild("items");
                if (items != null) {
                    return Avatar.parseMetadata(items);
                }
            }
            return null;
        }

        private boolean errorIsItemNotFound(IqPacket packet) {
            Element error = packet.findChild("error");
            return packet.getType() == IqPacket.TYPE.ERROR && error != null && error.hasChild("item-not-found");
        }

        @Override
        public void onIqPacketReceived(Account account, IqPacket packet) {
            if (packet.getType() == IqPacket.TYPE.RESULT || errorIsItemNotFound(packet)) {
                Avatar serverAvatar = parseAvatar(packet);
                if (serverAvatar == null && account.getAvatar() != null) {
                    Avatar avatar = fileBackend.getStoredPepAvatar(account.getAvatar());
                    if (avatar != null) {
                        Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": avatar on server was null. republishing");
                        publishAvatar(account, fileBackend.getStoredPepAvatar(account.getAvatar()), null);
                    } else {
                        Log.e(Config.LOGTAG, account.getJid().toBareJid() + ": error rereading avatar");
                    }
                }
            }
        }
    });
}
Also used : Account(eu.siacs.conversations.entities.Account) OnIqPacketReceived(eu.siacs.conversations.xmpp.OnIqPacketReceived) Element(eu.siacs.conversations.xml.Element) Avatar(eu.siacs.conversations.xmpp.pep.Avatar) IqPacket(eu.siacs.conversations.xmpp.stanzas.IqPacket)

Aggregations

Avatar (eu.siacs.conversations.xmpp.pep.Avatar)8 Element (eu.siacs.conversations.xml.Element)5 Bitmap (android.graphics.Bitmap)2 Base64OutputStream (android.util.Base64OutputStream)2 Account (eu.siacs.conversations.entities.Account)2 Contact (eu.siacs.conversations.entities.Contact)2 OnIqPacketReceived (eu.siacs.conversations.xmpp.OnIqPacketReceived)2 Jid (eu.siacs.conversations.xmpp.jid.Jid)2 IqPacket (eu.siacs.conversations.xmpp.stanzas.IqPacket)2 ByteArrayOutputStream (java.io.ByteArrayOutputStream)2 IOException (java.io.IOException)2 DigestOutputStream (java.security.DigestOutputStream)2 MessageDigest (java.security.MessageDigest)2 NoSuchAlgorithmException (java.security.NoSuchAlgorithmException)2 SuppressLint (android.annotation.SuppressLint)1 BitmapFactory (android.graphics.BitmapFactory)1 Paint (android.graphics.Paint)1 PgpEngine (eu.siacs.conversations.crypto.PgpEngine)1 AxolotlService (eu.siacs.conversations.crypto.axolotl.AxolotlService)1 Conversation (eu.siacs.conversations.entities.Conversation)1