Vedroid36
2/5/2013 - 1:58 PM

gistfile1.txt

package com.vyke.android.qbchat.utils;

import android.content.Context;
import com.quickblox.core.QBCallback;
import com.quickblox.core.QBCallbackImpl;
import com.quickblox.core.result.Result;
import com.quickblox.module.users.QBUsers;
import com.quickblox.module.users.model.QBUser;
import com.quickblox.module.users.result.QBUserResult;
import com.vyke.android.contact.ContactAPI;
import com.vyke.android.models.Contact;
import com.vyke.android.qbchat.dao.ChatDBAdapter;
import com.vyke.android.qbchat.models.Buddy;
import com.vyke.android.qbchat.models.ChatMessage;
import com.vyke.android.utils.ApiConstants;


public class ChatHelper {
    private static final String LOG_TAG = "ChatHelper";

    private Lo lo = new Lo(this);
    private ChatDBAdapter chatDBAdapter;
    private Context context;

    private ChatMessage chatMessageOrNull;

    private ContactResult contactResult;



    public ChatHelper(Context context) {
        this.context = context;

        if (chatDBAdapter == null || chatDBAdapter.isDatabaseOpen() == false){
            chatDBAdapter = ChatDBAdapter.getInstance(context);
        }
    }

    public void synchronizeBuddyAndContact(String jid, ChatMessage chatMessageOrNull) {
        lo.gt(LOG_TAG, ">>> synchronizeBuddyAndContact(jid, chatMessageOrNull): " + jid + ", " + chatMessageOrNull);

        if (jid == null){
            contactResult.onSyncContactError();
            return;
        }

        this.chatMessageOrNull = chatMessageOrNull;
        Buddy buddy = chatDBAdapter.fetchBuddyByJid(jid);

        if (buddy.getContactId() == null && buddy.getPhoneNumber() == null) {

            int qbId = getQbUserIdFromJid(jid);
            lo.gt(LOG_TAG, ">>>  getQbUserIdFromJid(jid): " + qbId);

            QBUsers.getUser(qbId, getQbUserCallback);

        } else {
            syncComplete(buddy);
        }
    }

    private QBCallback getQbUserCallback = new QBCallbackImpl() {

        @Override
        public void onComplete(Result result) {
            lo.gt(LOG_TAG, ">>> [getQbUserCallback] onComplete(Result result): " + result);

            if (chatDBAdapter == null || chatDBAdapter.isDatabaseOpen() == false) {
                chatDBAdapter = ChatDBAdapter.getInstance(context);
            }

            if (result.isSuccess()) {

                QBUser user = ((QBUserResult) result).getUser();
                String qbUserChatJid = getBuddyJidFromQbUserId(user.getId());

                Buddy buddy = chatDBAdapter.fetchBuddyByJid(qbUserChatJid);

                String phone = user.getLogin();
                lo.gt(LOG_TAG, "QBUser login (phone number): " + phone);

                Contact contact = ContactAPI.getAPI().getContactByPhone(context, phone);
                lo.gt(LOG_TAG, "contact = " + contact);

                if (contact != null) {
                    buddy.setContactId(contact.getId());
                }
                buddy.setPhoneNumber(phone);
                chatDBAdapter.updateBuddy(buddy);

                syncComplete(buddy);

            } else {
                lo.gt(LOG_TAG, result.getErrors());

                if (contactResult != null) {
                    contactResult.onSyncContactError();
                }
            }
        }

        @Override
        public void onComplete(Result result, Object context){
            lo.gt(LOG_TAG, ">>> [getQbUserCallback] onComplete(Result result, Object context): " + result);

        }

    };

    private void syncComplete(Buddy buddy) {
        lo.gt(LOG_TAG, "syncComplete(Buddy buddy), contactResult: " + contactResult);

        if (contactResult != null) {
            contactResult.onSyncContactComplete(buddy, this.chatMessageOrNull);
        }
    }

    public String getBuddyHumanReadableName(Buddy buddy){
        lo.gt(LOG_TAG, "getBuddyHumanReadableName(Buddy buddy)");

        String buddyHumanName = "unknown";

        if (buddy.getContactId() != null) {
            Contact contact = ContactAPI.getAPI().getContact(context, buddy.getContactId(), null);
            buddyHumanName = contact.getDisplayName();
        } else if (buddy.getPhoneNumber() != null) {
            Contact contact = ContactAPI.getAPI().getContactByPhone(context, buddy.getPhoneNumber());
            if (contact != null) {
                buddyHumanName = contact.getDisplayName();
            }
        } else {
            Integer qbUserId = getQbUserIdFromJid(buddy.getJid());
            if (qbUserId != null) buddyHumanName = String.valueOf(qbUserId);
        }

        return buddyHumanName;
    }

    public int getQbUserIdFromJid(String buddyJid) {
        int qbUserId;
        String qbId = buddyJid.split("-")[0];
        qbUserId = Integer.parseInt(qbId);

        return qbUserId;
    }

    public String getBuddyJidFromQbUserId(int qbUserId){
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(String.valueOf(qbUserId));
        stringBuilder.append("-").append(ApiConstants.QB_APP_ID).append(ApiConstants.MAIL);

        return stringBuilder.toString();
    }

    public interface ContactResult {
        void onSyncContactComplete(Buddy buddy, ChatMessage chatMessageOrNull);
        void onSyncContactError();
    }
}