summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Hazan <george.hazan@gmail.com>2014-03-03 11:29:13 +0000
committerGeorge Hazan <george.hazan@gmail.com>2014-03-03 11:29:13 +0000
commit8aa736c7efd509ca88679fbabb644e49f2c5ef07 (patch)
treeafe231c5d9cb348d8402a3d1a70601be4b739b58
parentd49f0bbe4eb6974bac650206effa7fdf58ea970b (diff)
proper conversion of previously created metacontacts
git-svn-id: http://svn.miranda-ng.org/main/trunk@8374 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
-rw-r--r--plugins/Db3x_mmap/src/dbcontacts.cpp46
-rw-r--r--plugins/Db3x_mmap/src/dbintf.cpp3
-rw-r--r--plugins/Db3x_mmap/src/dbintf.h13
3 files changed, 43 insertions, 19 deletions
diff --git a/plugins/Db3x_mmap/src/dbcontacts.cpp b/plugins/Db3x_mmap/src/dbcontacts.cpp
index 7d2e9aad52..fcfd56afb9 100644
--- a/plugins/Db3x_mmap/src/dbcontacts.cpp
+++ b/plugins/Db3x_mmap/src/dbcontacts.cpp
@@ -221,6 +221,8 @@ void CDb3Mmap::ConvertContacts()
else
pPrev->ofsNext = dwNew;
pPrev = pNew;
+
+ m_contactsMap.insert(new ConvertedContact(dwOffset, pNew->dwContactID));
dwOffset = pNew->ofsNext;
}
@@ -253,31 +255,39 @@ void CDb3Mmap::FillContacts()
for (int i = 0; i < cc->nSubs; i++) {
char setting[100];
mir_snprintf(setting, sizeof(setting), "Handle%d", i);
- cc->pSubs[i] = (0 != GetContactSetting(dwContactID, META_PROTO, setting, &dbv)) ? NULL : dbv.dVal;
+ MCONTACT hSub = (0 != GetContactSetting(dwContactID, META_PROTO, setting, &dbv)) ? NULL : dbv.dVal;
+ ConvertedContact *pcc = m_contactsMap.find((ConvertedContact*)&hSub);
+ if (pcc != NULL) {
+ hSub = pcc->hNew;
+
+ DBCONTACTWRITESETTING dbws = { META_PROTO, setting };
+ dbws.value.type = DBVT_DWORD;
+ dbws.value.dVal = hSub;
+ WriteContactSetting(dwContactID, &dbws);
+ }
+ cc->pSubs[i] = hSub;
}
}
cc->activeID = (0 != GetContactSetting(dwContactID, META_PROTO, "Default", &dbv)) ? NULL : dbv.dVal;
cc->parentID = (0 != GetContactSetting(dwContactID, META_PROTO, "Handle", &dbv)) ? NULL : dbv.dVal;
- #ifdef _DEBUG
- // whether we need conversion or not
- if (!GetContactSetting(dwContactID, META_PROTO, "MetaID", &dbv)) {
- // we don't need it anymore
- DeleteContactSetting(dwContactID, META_PROTO, "MetaID");
-
- for (int i = 0; i < cc->nSubs; i++) {
- // store contact id instead of the old mc number
- DBCONTACTWRITESETTING dbws = { META_PROTO, "ParentMeta" };
- dbws.value.type = DBVT_DWORD;
- dbws.value.dVal = dwContactID;
- WriteContactSetting(cc->pSubs[i], &dbws);
+ // whether we need conversion or not
+ if (!GetContactSetting(dwContactID, META_PROTO, "MetaID", &dbv)) {
+ // we don't need it anymore
+ DeleteContactSetting(dwContactID, META_PROTO, "MetaID");
- // wipe out old data from subcontacts
- DeleteContactSetting(cc->pSubs[i], META_PROTO, "ContactNumber");
- DeleteContactSetting(cc->pSubs[i], META_PROTO, "MetaLink");
- }
+ for (int i = 0; i < cc->nSubs; i++) {
+ // store contact id instead of the old mc number
+ DBCONTACTWRITESETTING dbws = { META_PROTO, "ParentMeta" };
+ dbws.value.type = DBVT_DWORD;
+ dbws.value.dVal = dwContactID;
+ WriteContactSetting(cc->pSubs[i], &dbws);
+
+ // wipe out old data from subcontacts
+ DeleteContactSetting(cc->pSubs[i], META_PROTO, "ContactNumber");
+ DeleteContactSetting(cc->pSubs[i], META_PROTO, "MetaLink");
}
- #endif
+ }
dwOffset = p->ofsNext;
}
diff --git a/plugins/Db3x_mmap/src/dbintf.cpp b/plugins/Db3x_mmap/src/dbintf.cpp
index 377c353bde..c17fdd0e05 100644
--- a/plugins/Db3x_mmap/src/dbintf.cpp
+++ b/plugins/Db3x_mmap/src/dbintf.cpp
@@ -50,7 +50,8 @@ CDb3Mmap::CDb3Mmap(const TCHAR *tszFileName, bool bReadOnly) :
m_dwMaxContactId(1),
m_lMods(50, ModCompare),
m_lOfs(50, OfsCompare),
- m_lResidentSettings(50, stringCompare2)
+ m_lResidentSettings(50, stringCompare2),
+ m_contactsMap(50, NumericKeySortT)
{
m_tszProfileName = mir_tstrdup(tszFileName);
InitDbInstance(this);
diff --git a/plugins/Db3x_mmap/src/dbintf.h b/plugins/Db3x_mmap/src/dbintf.h
index 6cb02f0344..6be58c9634 100644
--- a/plugins/Db3x_mmap/src/dbintf.h
+++ b/plugins/Db3x_mmap/src/dbintf.h
@@ -164,6 +164,14 @@ struct DBEvent
#include <poppack.h>
+struct ConvertedContact
+{
+ ConvertedContact(MCONTACT _old, MCONTACT _new) :
+ hOld(_old), hNew(_new) {}
+
+ MCONTACT hOld, hNew;
+};
+
struct CDb3Mmap : public MIDatabase, public MIDatabaseChecker, public MZeroedObject
{
CDb3Mmap(const TCHAR *tszFileName, bool bReadOnly);
@@ -292,6 +300,11 @@ protected:
int m_codePage;
////////////////////////////////////////////////////////////////////////////
+ // contacts
+
+ OBJLIST<ConvertedContact> m_contactsMap;
+
+ ////////////////////////////////////////////////////////////////////////////
// modules
HANDLE m_hModHeap;