aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/thedevstack/conversationsplus/services/avatar/listener/RepublishAvatarAfterMetadataReceived.java
blob: 16f4bf81d50db7e6b4ab6fff7a3ecf71cebf6198 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package de.thedevstack.conversationsplus.services.avatar.listener;

import de.thedevstack.android.logcat.Logging;
import de.thedevstack.conversationsplus.Config;
import de.thedevstack.conversationsplus.entities.Account;
import de.thedevstack.conversationsplus.services.avatar.AvatarService;
import de.thedevstack.conversationsplus.utils.AvatarUtil;
import de.thedevstack.conversationsplus.xml.Element;
import de.thedevstack.conversationsplus.xmpp.OnIqPacketReceived;
import de.thedevstack.conversationsplus.xmpp.avatar.AvatarPacketParser;
import de.thedevstack.conversationsplus.xmpp.pep.Avatar;
import de.thedevstack.conversationsplus.xmpp.stanzas.IqPacket;

/**
 */
public class RepublishAvatarAfterMetadataReceived implements OnIqPacketReceived {

    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 = AvatarPacketParser.parseMetadata(packet);
            if (serverAvatar == null && account.getAvatar() != null) {
                Avatar avatar = AvatarUtil.getStoredPepAvatar(account.getAvatar());
                if (avatar != null) {
                    Logging.d(Config.LOGTAG,account.getJid().toBareJid()+": avatar on server was null. republishing");
                    AvatarService.getInstance().publishAvatar(avatar, account, null);
                } else {
                    Logging.e(Config.LOGTAG, account.getJid().toBareJid()+": error rereading avatar");
                }
            }
        }
    }
}