void CWizKbSync::onDocumentsGetInfo(const std::deque<WIZDOCUMENTDATABASE>& arrayRet) { size_t count = arrayRet.size(); // new document if (count == 0) { WIZDOCUMENTDATABASE data; data.strGUID = m_currentUploadDocument.strGUID; data.strTitle = m_currentUploadDocument.strTitle; data.strLocation = m_currentUploadDocument.strLocation; data.tInfoModified = COleDateTime(1900, 1, 1, 0, 0, 0); data.tDataModified = data.tInfoModified; data.tParamModified = data.tInfoModified; data.strInfoMD5 = "-1"; data.strDataMD5 = "-1"; data.strParamMD5 = "-1"; onQueryDocumentInfo(data); // server already have this document } else if (count == 1) { onQueryDocumentInfo(arrayRet[0]); // absolutely count should not more than 1 } else { Q_EMIT processErrorLog("Can not query document info"); onXmlRpcError(SyncMethod_GetDocumentsInfo, errorXmlRpcFault, -1, "Fault error: Invalid document info"); } }
void CWizSync::processObjectData(const WIZOBJECTDATA& data) { WIZOBJECTDATA conflictObjectData(data); conflictObjectData.strObjectGUID = WizGenGUIDLowerCaseLetterOnly(); conflictObjectData.strDisplayName += tr("(conflict backup)"); // set dirty flag, uploaded needed m_conflictDownloadedInfo.nVersion = -1; m_conflictDownloadedInfo.strGUID = conflictObjectData.strObjectGUID; m_conflictDownloadedInfo.strTitle += tr("(conflict backup)"); m_conflictDownloadedInfo.strInfoMD5 = m_db.CalDocumentInfoMD5(m_conflictDownloadedInfo); if (m_db.CreateDocumentEx(m_conflictDownloadedInfo)) { m_db.UpdateSyncObjectLocalData(conflictObjectData); TOLOG1(tr("Conflict backup created: %1"), m_conflictDownloadedInfo.strTitle); } else { TOLOG("unable to create conflict backup while create document"); } std::deque<WIZDOCUMENTDATABASE>::iterator it; for (it = m_arrayAllDocumentsNeedToBeDownloaded.begin(); \ it != m_arrayAllDocumentsNeedToBeDownloaded.end(); it++) { WIZDOCUMENTDATABASE data = *it; if (data.strGUID == m_conflictedDocument.strGUID) { m_arrayAllDocumentsNeedToBeDownloaded.erase(it); break; } } // chain back onQueryDocumentInfo(m_conflictedDocument); }
void CWizKbSync::onDocumentsGetInfo(const std::deque<WIZDOCUMENTDATABASE>& arrayRet) { size_t count = arrayRet.size(); // new document if (count == 0) { WIZDOCUMENTDATABASE data; data.strGUID = m_currentUploadDocument.strGUID; data.strTitle = m_currentUploadDocument.strTitle; data.strLocation = m_currentUploadDocument.strLocation; data.tInfoModified = COleDateTime(1900, 1, 1, 0, 0, 0); data.tDataModified = data.tInfoModified; data.tParamModified = data.tInfoModified; data.strInfoMD5 = "-1"; data.strDataMD5 = "-1"; data.strParamMD5 = "-1"; onQueryDocumentInfo(data); // server already have this document } else if (count == 1) { // if document version bigger than local max version number means conflict found __int64 nLocalVersion = m_db->GetObjectVersion(WIZDOCUMENTDATA::ObjectName()); if (arrayRet[0].nVersion >= nLocalVersion) { WIZDOCUMENTDATA localData; m_db->DocumentFromGUID(arrayRet[0].strGUID, localData); localData.nObjectPart = calDocumentParts(arrayRet[0], localData); // do conflict back only if document data is modified if (localData.nObjectPart & WIZKM_XMLRPC_OBJECT_PART_DATA) { Q_EMIT processLog(tr("Conflict found: ") + localData.strTitle); m_conflictedDocument = localData; callDocumentGetData(localData); return; } } onQueryDocumentInfo(arrayRet[0]); // absolutely count should not more than 1 } else { Q_EMIT processErrorLog("Can not query document info"); onXmlRpcError(SyncMethod_GetDocumentsInfo, errorXmlRpcFault, -1, "Fault error: Invalid document info"); } }
void CWizKbSync::processConflictObjectData(const WIZOBJECTDATA& data) { WIZOBJECTDATA conflictObjectData(data); conflictObjectData.strObjectGUID = WizGenGUIDLowerCaseLetterOnly(); conflictObjectData.strDisplayName += tr("(conflict backup)"); // set dirty flag, upload needed m_conflictDownloadedInfo.nVersion = -1; m_conflictDownloadedInfo.strKbGUID = kbGUID(); m_conflictDownloadedInfo.strGUID = conflictObjectData.strObjectGUID; m_conflictDownloadedInfo.strTitle += tr("(conflict backup)"); m_conflictDownloadedInfo.strInfoMD5 = m_db->CalDocumentInfoMD5(m_conflictDownloadedInfo); if (m_db->CreateDocumentEx(m_conflictDownloadedInfo)) { m_db->UpdateSyncObjectLocalData(conflictObjectData); Q_EMIT processLog(WizFormatString1(tr("Conflict backup created: %1"), m_conflictDownloadedInfo.strTitle)); } else { Q_EMIT processLog("unable to create conflict backup while create document"); } // chain back onQueryDocumentInfo(m_conflictDownloadedInfo); }