use of com.vodafone360.people.service.ServiceStatus in project 360-Engine-for-Android by 360.
the class UpdateNativeContacts method onTimeoutEvent.
/**
* @see BaseSyncProcessor#onTimeoutEvent()
*/
@Override
public void onTimeoutEvent() {
LogUtils.logD("UpdateNativeContacts.onTimeoutEvent()");
// call the tick method of the NativeExporter
final boolean isDone = mNativeExporter.tick();
// get the index of the last processed id
final int position = mNativeExporter.getPosition();
// get the total count of ids to process
final int total = mNativeExporter.getCount();
// get the percentage out of position and total count
final int percentage = (total != 0) ? ((position * 100) / total) : 100;
LogUtils.logD("UpdateNativeContacts.onTimeoutEvent() - pos=" + position + ", total=" + total + ", percentage=" + percentage);
// check the NativeExporter progress
if (!isDone) {
// yield some time to the other engines and request to be called back immediately
setTimeout(0);
} else {
// FIXME: More useful error reporting beyond just ERROR_UNKNOWN
final ServiceStatus status = mNativeExporter.getResult() == NativeImporter.RESULT_OK ? ServiceStatus.SUCCESS : ServiceStatus.ERROR_UNKNOWN;
LogUtils.logD("FetchNativeContacts.onTimeoutEvent() - complete(" + status + ")");
complete(status);
}
}
use of com.vodafone360.people.service.ServiceStatus in project 360-Engine-for-Android by 360.
the class UploadServerContacts method processModifiedDetailsResp.
/**
* Called when a server response is received during a modified contact sync.
* The server ID, user ID and contact detail unique IDs are extracted from
* the response and the NowPlus database updated if necessary. Possibly
* server errors are also handled.
*
* @param resp Response from server.
*/
private void processModifiedDetailsResp(final DecodedResponse resp) {
ServiceStatus status = BaseEngine.getResponseStatus(BaseDataType.CONTACT_CHANGES_DATA_TYPE, resp.mDataTypes);
if (status == ServiceStatus.SUCCESS) {
ContactChanges contactChanges = (ContactChanges) resp.mDataTypes.get(0);
ListIterator<Contact> itContactSrc = contactChanges.mContacts.listIterator();
ListIterator<Contact> itContactDest = mContactChangeList.listIterator();
List<ServerIdInfo> detailServerIdList = new ArrayList<ServerIdInfo>();
while (itContactSrc.hasNext()) {
if (!itContactDest.hasNext()) {
/*
* The response should contain the same number of contacts
* as was supplied but must handle the error.
*/
status = ServiceStatus.ERROR_COMMS_BAD_RESPONSE;
break;
}
status = handleUploadDetailChanges(itContactSrc.next(), itContactDest.next(), detailServerIdList);
}
if (status != ServiceStatus.SUCCESS) {
/**
* Something is going wrong - cancel the update. *
*/
complete(status);
return;
}
long startTime = System.nanoTime();
status = ContactDetailsTable.syncSetServerIds(detailServerIdList, mDb.getWritableDatabase());
if (status != ServiceStatus.SUCCESS) {
complete(status);
return;
}
mDb.deleteContactChanges(mContactChangeInfoList);
mDbSyncTime += (System.nanoTime() - startTime);
mContactChangeInfoList.clear();
updateProgress();
sendNextDetailChangesPage();
return;
}
LogUtils.logE("UploadServerContacts.processModifiedDetailsResp() " + "Error requesting contact changes, error = " + status);
complete(status);
}
use of com.vodafone360.people.service.ServiceStatus 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.service.ServiceStatus 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.service.ServiceStatus 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;
}
Aggregations