aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/thedevstack/conversationsplus/services/avatar/listener/AvatarPepReceived.java
blob: c248d7c8d89d45395a8f51cd9bba35bca47e9d69 (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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package de.thedevstack.conversationsplus.services.avatar.listener;

import de.thedevstack.android.logcat.Logging;
import de.thedevstack.conversationsplus.Config;
import de.thedevstack.conversationsplus.ConversationsPlusApplication;
import de.thedevstack.conversationsplus.entities.Account;
import de.thedevstack.conversationsplus.entities.Contact;
import de.thedevstack.conversationsplus.persistance.DatabaseBackend;
import de.thedevstack.conversationsplus.services.avatar.AvatarCache;
import de.thedevstack.conversationsplus.services.avatar.AvatarService;
import de.thedevstack.conversationsplus.ui.UiCallback;
import de.thedevstack.conversationsplus.utils.AvatarUtil;
import de.thedevstack.conversationsplus.utils.UiUpdateHelper;
import de.thedevstack.conversationsplus.xml.Element;
import de.thedevstack.conversationsplus.xmpp.avatar.AvatarPacketParser;
import de.thedevstack.conversationsplus.xmpp.pep.Avatar;
import de.thedevstack.conversationsplus.xmpp.stanzas.IqPacket;

/**
 *
 */
public class AvatarPepReceived extends AbstractAvatarIqPacketReceived {
    public AvatarPepReceived(Avatar avatar, UiCallback uiCallback) {
        super(avatar, uiCallback);
    }

    @Override
    public void onIqPacketReceived(Account account, IqPacket result) {
        AvatarService.getInstance().removeFromFetchInProgress(account, avatar);

        final String ERROR = account.getJid().toBareJid()
                + ": fetching avatar for " + avatar.owner + " failed ";
        if (result.getType() == IqPacket.TYPE.RESULT) {
            avatar.image = AvatarPacketParser.parseAvatarData(result);
            if (avatar.image != null) {
                if (AvatarUtil.save(avatar)) {
                    if (account.getJid().toBareJid().equals(avatar.owner)) {
                        if (account.setAvatar(avatar.getFilename())) {
                            DatabaseBackend.getInstance(ConversationsPlusApplication.getAppContext()).updateAccount(account);
                        }
                        AvatarCache.clear(account);
                        UiUpdateHelper.updateConversationUi();
                        UiUpdateHelper.updateAccountUi();
                    } else {
                        Contact contact = account.getRoster().getContact(avatar.owner);
                        contact.setAvatar(avatar);
                        AvatarCache.clear(contact);
                        UiUpdateHelper.updateConversationUi();
                        UiUpdateHelper.updateRosterUi();
                    }
                    if (callback != null) {
                        callback.success(avatar);
                    }
                    Logging.d(Config.LOGTAG, account.getJid().toBareJid()
                            + ": succesfuly fetched pep avatar for " + avatar.owner);
                    return;
                }
            } else {

                Logging.d(Config.LOGTAG, ERROR + "(parsing error)");
            }
        } else {
            Element error = result.findChild("error");
            if (error == null) {
                Logging.d(Config.LOGTAG, ERROR + "(server error)");
            } else {
                Logging.d(Config.LOGTAG, ERROR + error.toString());
            }
        }
        if (callback != null) {
            callback.error(0, null);
        }

    }
}