summaryrefslogtreecommitdiff
path: root/plugins/Import
diff options
context:
space:
mode:
authorGeorge Hazan <george.hazan@gmail.com>2015-04-06 20:28:53 +0000
committerGeorge Hazan <george.hazan@gmail.com>2015-04-06 20:28:53 +0000
commit6e5224b87eb2ce2a95da956611e89826f01078bd (patch)
tree98b2e0b41c0f9924439d96a9ff79543f5b9b5c49 /plugins/Import
parent4560967c575a88dfc7574f3f60bf890e71a7dc1c (diff)
nasty crutch for the stupid dbx_mmap
git-svn-id: http://svn.miranda-ng.org/main/trunk@12642 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/Import')
-rw-r--r--plugins/Import/src/import.cpp29
1 files changed, 24 insertions, 5 deletions
diff --git a/plugins/Import/src/import.cpp b/plugins/Import/src/import.cpp
index d3b70833e7..c9ca158b54 100644
--- a/plugins/Import/src/import.cpp
+++ b/plugins/Import/src/import.cpp
@@ -876,15 +876,30 @@ static int CopySystemSettings(const char *szModuleName, DWORD, LPARAM param)
static void ImportHistory(MCONTACT hContact, PROTOACCOUNT **protocol, int protoCount)
{
MCONTACT hDst;
+ bool bIsMeta = false;
+ bool bIsRelational = srcDb->IsRelational() != 0;
// Is it contact's history import?
if (hContact) {
// we ignore history import for metacontacts
// the metahistory will be generated automatically by gathering subs' histories
DBCachedContact *cc = srcDb->m_cache->GetCachedContact(hContact);
- if (cc == NULL || cc->IsMeta())
+ if (cc == NULL)
return;
+ // for k/v databases we read history for subs only
+ if (bIsRelational) {
+ if (cc->IsMeta())
+ return;
+ }
+ // for mmap we read history for metas only
+ else {
+ if (cc->IsSub())
+ return;
+
+ bIsMeta = cc->IsMeta();
+ }
+
if ((hDst = MapContact(hContact)) == INVALID_CONTACT_ID) {
nSkippedContacts++;
return;
@@ -967,10 +982,14 @@ static void ImportHistory(MCONTACT hContact, PROTOACCOUNT **protocol, int protoC
dbei.flags |= DBEF_READ;
// add dbevent
- if (dstDb->AddEvent(hDst, &dbei) != NULL)
- nMessagesCount++;
- else
- AddMessage(LPGENT("Failed to add message"));
+ MCONTACT hOwner = (bIsMeta) ? MapContact(srcDb->GetEventContact(hEvent)) : hDst;
+ if (hOwner != INVALID_CONTACT_ID) {
+ // add dbevent
+ if (dstDb->AddEvent(hOwner, &dbei) != NULL)
+ nMessagesCount++;
+ else
+ AddMessage(LPGENT("Failed to add message"));
+ }
}
else nDupes++;
}