static void CompareField(CItemData::FieldType field, const CItemData::FieldBits &bsTest, const CItemData &first, const CItemData &second, CItemData::FieldBits &bsConflicts, bool bTreatWhiteSpaceasEmpty = false) { if (bsTest.test(field)) { bool flip; if (bTreatWhiteSpaceasEmpty) { StringX a(first.GetFieldValue(field)), b(second.GetFieldValue(field)); EmptyIfOnlyWhiteSpace(a); EmptyIfOnlyWhiteSpace(b); flip = a != b; } else { flip = first.GetFieldValue(field) != second.GetFieldValue(field); } if (flip) bsConflicts.flip(field); } }
bool CCompareResultsDlg::CompareEntries(st_CompareData *pst_data) { CItemData::FieldBits bsConflicts; bsConflicts.reset(); ItemListIter iter; iter = m_pcore0->Find(pst_data->uuid0); CItemData currentItem = iter->second; iter = m_pcore1->Find(pst_data->uuid1); CItemData compItem = iter->second; StringX sxCurrentPassword, sxComparisonPassword; if (currentItem.GetEntryType() == CItemData::ET_ALIAS || currentItem.GetEntryType() == CItemData::ET_SHORTCUT) { CItemData *pci_base = m_pcore0->GetBaseEntry(¤tItem); sxCurrentPassword == pci_base->GetPassword(); } else sxCurrentPassword == currentItem.GetPassword(); if (compItem.GetEntryType() == CItemData::ET_ALIAS || compItem.GetEntryType() == CItemData::ET_SHORTCUT) { CItemData *pci_base = m_pcore1->GetBaseEntry(&compItem); sxComparisonPassword == pci_base->GetPassword(); } else sxComparisonPassword == compItem.GetPassword(); if (m_bsFields.test(CItemData::PASSWORD) && sxCurrentPassword != sxComparisonPassword) bsConflicts.flip(CItemData::PASSWORD); if (m_bsFields.test(CItemData::NOTES) && FieldsNotEqual(currentItem.GetNotes(), compItem.GetNotes(), m_bTreatWhiteSpaceasEmpty)) bsConflicts.flip(CItemData::NOTES); if (m_bsFields.test(CItemData::CTIME) && currentItem.GetCTime() != compItem.GetCTime()) bsConflicts.flip(CItemData::CTIME); if (m_bsFields.test(CItemData::PMTIME) && currentItem.GetPMTime() != compItem.GetPMTime()) bsConflicts.flip(CItemData::PMTIME); if (m_bsFields.test(CItemData::ATIME) && currentItem.GetATime() != compItem.GetATime()) bsConflicts.flip(CItemData::ATIME); if (m_bsFields.test(CItemData::XTIME) && currentItem.GetXTime() != compItem.GetXTime()) bsConflicts.flip(CItemData::XTIME); if (m_bsFields.test(CItemData::RMTIME) && currentItem.GetRMTime() != compItem.GetRMTime()) bsConflicts.flip(CItemData::RMTIME); if (m_bsFields.test(CItemData::XTIME_INT)) { int current_xint, comp_xint; currentItem.GetXTimeInt(current_xint); compItem.GetXTimeInt(comp_xint); if (current_xint != comp_xint) bsConflicts.flip(CItemData::XTIME_INT); } if (m_bsFields.test(CItemData::URL) && FieldsNotEqual(currentItem.GetURL(), compItem.GetURL(), m_bTreatWhiteSpaceasEmpty)) bsConflicts.flip(CItemData::URL); if (m_bsFields.test(CItemData::AUTOTYPE) && FieldsNotEqual(currentItem.GetAutoType(), compItem.GetAutoType(), m_bTreatWhiteSpaceasEmpty)) bsConflicts.flip(CItemData::AUTOTYPE); if (m_bsFields.test(CItemData::PWHIST) && currentItem.GetPWHistory() != compItem.GetPWHistory()) bsConflicts.flip(CItemData::PWHIST); if (m_bsFields.test(CItemData::POLICY) && currentItem.GetPWPolicy() != compItem.GetPWPolicy()) bsConflicts.flip(CItemData::POLICY); if (m_bsFields.test(CItemData::POLICYNAME) && currentItem.GetPolicyName() != compItem.GetPolicyName()) bsConflicts.flip(CItemData::POLICYNAME); if (m_bsFields.test(CItemData::RUNCMD) && currentItem.GetRunCommand() != compItem.GetRunCommand()) bsConflicts.flip(CItemData::RUNCMD); if (m_bsFields.test(CItemData::DCA) && currentItem.GetDCA() != compItem.GetDCA()) bsConflicts.flip(CItemData::DCA); if (m_bsFields.test(CItemData::SHIFTDCA) && currentItem.GetShiftDCA() != compItem.GetShiftDCA()) bsConflicts.flip(CItemData::SHIFTDCA); if (m_bsFields.test(CItemData::EMAIL) && currentItem.GetEmail() != compItem.GetEmail()) bsConflicts.flip(CItemData::EMAIL); if (m_bsFields.test(CItemData::PROTECTED) && currentItem.GetProtected() != compItem.GetProtected()) bsConflicts.flip(CItemData::PROTECTED); if (m_bsFields.test(CItemData::SYMBOLS) && currentItem.GetSymbols() != compItem.GetSymbols()) bsConflicts.flip(CItemData::SYMBOLS); if (m_bsFields.test(CItemData::KBSHORTCUT) && currentItem.GetKBShortcut() != compItem.GetKBShortcut()) bsConflicts.flip(CItemData::KBSHORTCUT); return bsConflicts.none(); }