Пример #1
0
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");
    }
}
Пример #2
0
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);
}
Пример #3
0
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");
    }
}
Пример #4
0
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);
}