From 8a241ad63bf5d3ed0ac1d30dc9e257ca2b60d23e Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 10 Feb 2019 12:48:32 +0300 Subject: fixes problems with importing ICQ & MRA contacts from old Miranda versions --- plugins/Import/src/import.cpp | 73 +++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 38 deletions(-) diff --git a/plugins/Import/src/import.cpp b/plugins/Import/src/import.cpp index 7bd3746c4f..81d7a9d1f8 100644 --- a/plugins/Import/src/import.cpp +++ b/plugins/Import/src/import.cpp @@ -772,48 +772,45 @@ static MCONTACT ImportContact(MCONTACT hSrc) } } + wchar_t *pszUniqueID = L""; DBVARIANT dbv; - if (myGet(hSrc, cc->szProto, pszUniqueSetting, &dbv)) { - AddMessage(LPGENW("Skipping %S contact, ID not found"), cc->szProto); - return 0; - } - - // Does the contact already exist? - MCONTACT hDst; - wchar_t id[40], *pszUniqueID; - switch (dbv.type) { - case DBVT_DWORD: - pszUniqueID = _ltow(dbv.dVal, id, 10); - hDst = HContactFromNumericID(szDstModuleName, pszUniqueSetting, dbv.dVal); - break; + if (!myGet(hSrc, cc->szProto, pszUniqueSetting, &dbv)) { + // Does the contact already exist? + MCONTACT hDst; + wchar_t id[40]; + switch (dbv.type) { + case DBVT_DWORD: + pszUniqueID = _ltow(dbv.dVal, id, 10); + hDst = HContactFromNumericID(szDstModuleName, pszUniqueSetting, dbv.dVal); + break; - case DBVT_ASCIIZ: - case DBVT_UTF8: - pszUniqueID = NEWWSTR_ALLOCA(_A2T(dbv.pszVal)); - if (bIsChat) - hDst = HContactFromChatID(szDstModuleName, pszUniqueID); - else - hDst = HContactFromID(szDstModuleName, pszUniqueSetting, pszUniqueID); - break; + case DBVT_ASCIIZ: + case DBVT_UTF8: + pszUniqueID = NEWWSTR_ALLOCA(_A2T(dbv.pszVal)); + if (bIsChat) + hDst = HContactFromChatID(szDstModuleName, pszUniqueID); + else + hDst = HContactFromID(szDstModuleName, pszUniqueSetting, pszUniqueID); + break; - case DBVT_WCHAR: - pszUniqueID = NEWWSTR_ALLOCA(dbv.pwszVal); - if (bIsChat) - hDst = HContactFromChatID(szDstModuleName, pszUniqueID); - else - hDst = HContactFromID(szDstModuleName, pszUniqueSetting, pszUniqueID); - break; + case DBVT_WCHAR: + pszUniqueID = NEWWSTR_ALLOCA(dbv.pwszVal); + if (bIsChat) + hDst = HContactFromChatID(szDstModuleName, pszUniqueID); + else + hDst = HContactFromID(szDstModuleName, pszUniqueSetting, pszUniqueID); + break; - default: - hDst = INVALID_CONTACT_ID; - pszUniqueID = nullptr; - } + default: + hDst = INVALID_CONTACT_ID; + } - if (hDst != INVALID_CONTACT_ID) { - AddMessage(LPGENW("Skipping duplicate %S contact %s"), cc->szProto, pszUniqueID); - srcDb->FreeVariant(&dbv); - arContactMap.insert(new ContactMap(hSrc, hDst)); - return 0; + if (hDst != INVALID_CONTACT_ID) { + AddMessage(LPGENW("Skipping duplicate %S contact %s"), cc->szProto, pszUniqueID); + srcDb->FreeVariant(&dbv); + arContactMap.insert(new ContactMap(hSrc, hDst)); + return 0; + } } ptrW tszGroup(myGetWs(hSrc, "CList", "Group")), tszNick(myGetWs(hSrc, "CList", "MyHandle")); @@ -821,7 +818,7 @@ static MCONTACT ImportContact(MCONTACT hSrc) tszNick = myGetWs(hSrc, cc->szProto, "Nick"); // adding missing contact - hDst = db_add_contact(); + MCONTACT hDst = db_add_contact(); if (Proto_AddToContact(hDst, szDstModuleName) != 0) { db_delete_contact(hDst); AddMessage(LPGENW("Failed to add %S contact %s"), szDstModuleName, pszUniqueID); -- cgit v1.2.3