use of com.vodafone360.people.engine.contactsync.UploadServerContacts in project 360-Engine-for-Android by 360.
the class SyncMeDbUtils method populateWithDeletedContactDetails.
/**
* This method adds the deleted details to the detail list sent to server...
* @param dbHelper DatabaseHelper - database
* @param contactDetails List<ContactDetail> - the deleted details list
* @param contactId Long - Me Profile local contact id.
*/
private static void populateWithDeletedContactDetails(final DatabaseHelper dbHelper, final List<ContactDetail> contactDetails, final Long contactId) {
List<ContactChangeInfo> deletedDetails = new ArrayList<ContactChangeInfo>();
if (!ContactChangeLogTable.fetchMeProfileChangeLog(deletedDetails, ContactChangeType.DELETE_DETAIL, dbHelper.getReadableDatabase(), contactId)) {
LogUtils.logE("UploadServerContacts populateWithDeletedContactDetails -" + " Unable to fetch contact changes from database");
return;
}
for (int i = 0; i < deletedDetails.size(); i++) {
ContactChangeInfo info = deletedDetails.get(i);
final ContactDetail detail = new ContactDetail();
detail.localDetailID = info.mLocalDetailId;
detail.key = info.mServerDetailKey;
detail.unique_id = info.mServerDetailId;
detail.deleted = true;
contactDetails.add(detail);
}
dbHelper.deleteContactChanges(deletedDetails);
}
use of com.vodafone360.people.engine.contactsync.UploadServerContacts in project 360-Engine-for-Android by 360.
the class UploadServerContacts method processDeletedDetailsResp.
/**
* Called when a server response is received during a deleted contact detail
* sync. The server change log is updated. Possibly server errors are also
* handled.
*
* @param resp Response from server.
*/
private void processDeletedDetailsResp(final DecodedResponse resp) {
ServiceStatus status = BaseEngine.getResponseStatus(BaseDataType.CONTACT_DETAIL_DELETION_DATA_TYPE, resp.mDataTypes);
if (status == ServiceStatus.SUCCESS) {
ContactDetailDeletion result = (ContactDetailDeletion) resp.mDataTypes.get(0);
if (result.mDetails != null) {
LogUtils.logV("UploadServerContacts." + "processDeletedDetailsResp() Deleted details " + result.mDetails.size());
}
ListIterator<ContactChangeInfo> infoIt = mContactChangeInfoList.listIterator();
if (result.mContactId == null || result.mContactId == -1) {
boolean first = true;
while (infoIt.hasNext()) {
ContactChangeInfo info = infoIt.next();
if (first) {
first = false;
LogUtils.logE("UploadServerContacts." + "processDeletedDetailsResp() The server " + "failed to delete detail from the following " + "contact: LocalId = " + info.mLocalContactId + ", ServerId = " + info.mServerContactId);
}
mFailureList += "Failed to delete detail: " + info.mLocalDetailId + "\n";
}
} else if (result.mDetails != null) {
for (ContactDetail d : result.mDetails) {
if (!infoIt.hasNext()) {
complete(ServiceStatus.ERROR_COMMS_BAD_RESPONSE);
return;
}
ContactChangeInfo info = infoIt.next();
if (!d.key.equals(info.mServerDetailKey)) {
LogUtils.logE("UploadServerContacts." + "processDeletedDetailsResp() The server " + "failed to delete the following detail: " + "LocalId = " + info.mLocalContactId + ", " + "ServerId = " + info.mServerContactId + ", key = " + info.mServerDetailKey + ", detail ID = " + info.mServerDetailId);
mFailureList += "Failed to delete detail: " + info.mLocalDetailId + "\n";
}
}
}
long startTime = System.nanoTime();
mDb.deleteContactChanges(mContactChangeInfoList);
mDbSyncTime += (System.nanoTime() - startTime);
mContactChangeInfoList.clear();
updateProgress();
sendNextDeleteDetailsPage();
return;
}
LogUtils.logE("UploadServerContacts.processModifiedDetailsResp() " + "Error requesting contact changes, error = " + status);
complete(status);
}
use of com.vodafone360.people.engine.contactsync.UploadServerContacts in project 360-Engine-for-Android by 360.
the class UploadServerContacts method processGroupAdditionsResp.
/**
* Called when a server response is received during a group/contact add
* relation sync. The server change log is updated. Possibly server errors
* are also handled.
*
* @param resp Response from server.
*/
private void processGroupAdditionsResp(final DecodedResponse resp) {
ServiceStatus status = BaseEngine.getResponseStatus(BaseDataType.ITEM_LIST_DATA_TYPE, resp.mDataTypes);
if (status == ServiceStatus.SUCCESS) {
if (resp.mDataTypes.size() == 0) {
LogUtils.logE("UploadServerContacts." + "processGroupAdditionsResp() " + "Item list cannot be empty");
complete(ServiceStatus.ERROR_COMMS_BAD_RESPONSE);
return;
}
ItemList itemList = (ItemList) resp.mDataTypes.get(0);
if (itemList.mItemList == null) {
LogUtils.logE("UploadServerContacts." + "processGroupAdditionsResp() " + "Item list cannot be NULL");
complete(ServiceStatus.ERROR_COMMS_BAD_RESPONSE);
return;
}
// TODO: Check response
long startTime = System.nanoTime();
mDb.deleteContactChanges(mContactChangeInfoList);
mDbSyncTime += (System.nanoTime() - startTime);
mContactChangeInfoList.clear();
updateProgress();
sendNextAddGroupRelationsPage();
return;
}
LogUtils.logE("UploadServerContacts.processGroupAdditionsResp() " + "Error adding group relations, error = " + status);
complete(status);
}
use of com.vodafone360.people.engine.contactsync.UploadServerContacts in project 360-Engine-for-Android by 360.
the class UploadServerContacts method handleUploadDetailChanges.
/**
* Called when handling the server response from a new contact or modify
* contact sync. Updates the unique IDs for all the details if necessary.
*
* @param contactSrc Contact received from server.
* @param contactDest Contact from database.
* @param detailServerIdList List of contact details with updated unique id.
* @return ServiceStatus object.
*/
private ServiceStatus handleUploadDetailChanges(final Contact contactSrc, final Contact contactDest, final List<ServerIdInfo> detailServerIdList) {
if (contactSrc.contactID == null || contactSrc.contactID.longValue() == -1L) {
LogUtils.logE("UploadServerContacts.handleUploadDetailChanges() " + "The server failed to modify the following contact: " + contactDest.localContactID);
mFailureList += "Failed to add contact: " + contactDest.localContactID + "\n";
return ServiceStatus.SUCCESS;
}
ListIterator<ContactDetail> itContactDetailSrc = contactSrc.details.listIterator();
ListIterator<ContactDetail> itContactDetailDest = contactDest.details.listIterator();
while (itContactDetailSrc.hasNext()) {
if (!itContactDetailDest.hasNext()) {
/*
* The response should contain the same number of details as was
* supplied but must handle the error.
*/
return ServiceStatus.ERROR_COMMS_BAD_RESPONSE;
}
ContactDetail contactDetailSrc = itContactDetailSrc.next();
ContactDetail contactDetailDest = itContactDetailDest.next();
ServerIdInfo info = new ServerIdInfo();
info.localId = contactDetailDest.localDetailID;
if (contactDetailSrc.unique_id != null && contactDetailSrc.unique_id.longValue() == -1L) {
LogUtils.logE("UploadServerContacts." + "handleUploadDetailChanges() The server failed to " + "modify the following contact detail: LocalDetailId " + "= " + contactDetailDest.localDetailID + ", Key = " + contactDetailDest.key + ", value = " + contactDetailDest.value);
mFailureList += "Failed to modify contact detail: " + contactDetailDest.localDetailID + ", for contact " + contactDetailDest.localContactID + "\n";
info.serverId = null;
} else {
info.serverId = contactDetailSrc.unique_id;
}
detailServerIdList.add(info);
}
while (itContactDetailDest.hasNext()) {
ContactDetail contactDetailDest = itContactDetailDest.next();
mFailureList += "Failed to modify contact detail (not in return " + "list):" + contactDetailDest.localDetailID + ", for contact " + contactDetailDest.localContactID + "\n";
LogUtils.logE("UploadServerContacts.handleUploadDetailChanges() " + "The server failed to modify the following contact detail " + "(not found in returned list): LocalDetailId = " + contactDetailDest.localDetailID + ", Key = " + contactDetailDest.key + ", value = " + contactDetailDest.value);
}
return ServiceStatus.SUCCESS;
}
use of com.vodafone360.people.engine.contactsync.UploadServerContacts in project 360-Engine-for-Android by 360.
the class UploadServerContacts method sendNextDetailChangesPage.
/**
* Sends the next page of new/modified details to the server.
*/
private void sendNextDetailChangesPage() {
mContactChangeList.clear();
long startTime = System.nanoTime();
ContactDetailsTable.syncServerGetNextNewContactDetails(mContactsCursor, mContactChangeList, MAX_UP_PAGE_SIZE);
mDbSyncTime += (System.nanoTime() - startTime);
if (mContactChangeList.size() == 0) {
moveToNextState();
return;
}
/** Debug output. **/
if (Settings.ENABLED_CONTACTS_SYNC_TRACE) {
LogUtils.logI("UploadServerContacts.sendNextDetailChangesPage() " + "Contact detail changes:");
for (Contact c : mContactChangeList) {
for (ContactDetail d : c.details) {
LogUtils.logI("UploadServerContacts." + "sendNextDetailChangesPage() Contact: " + c.contactID + ", Detail: " + d.key + ", " + d.unique_id + " = " + d.value);
}
}
}
if (NetworkAgent.getAgentState() != NetworkAgent.AgentState.CONNECTED) {
complete(NetworkAgent.getServiceStatusfromDisconnectReason());
return;
}
mNoOfItemsSent = mContactChangeList.size();
setReqId(Contacts.bulkUpdateContacts(getEngine(), mContactChangeList));
}
Aggregations