From 6e5224b87eb2ce2a95da956611e89826f01078bd Mon Sep 17 00:00:00 2001 From: George Hazan Date: Mon, 6 Apr 2015 20:28:53 +0000 Subject: nasty crutch for the stupid dbx_mmap git-svn-id: http://svn.miranda-ng.org/main/trunk@12642 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/Db3x_mmap/src/dbintf.h | 3 ++- plugins/Dbx_kv/src/dbintf.h | 1 + plugins/Dbx_kyoto/src/dbintf.h | 1 + plugins/Dbx_mdb/src/dbintf.h | 1 + plugins/Import/src/import.cpp | 29 ++++++++++++++++++++++++----- 5 files changed, 29 insertions(+), 6 deletions(-) (limited to 'plugins') diff --git a/plugins/Db3x_mmap/src/dbintf.h b/plugins/Db3x_mmap/src/dbintf.h index 761c28ede9..509f8209e4 100644 --- a/plugins/Db3x_mmap/src/dbintf.h +++ b/plugins/Db3x_mmap/src/dbintf.h @@ -208,7 +208,8 @@ struct CDb3Mmap : public MIDatabase, public MIDatabaseChecker, public MZeroedObj __forceinline bool usesPassword() const { return m_bUsesPassword; } public: - STDMETHODIMP_(void) SetCacheSafetyMode(BOOL); + STDMETHODIMP_(BOOL) IsRelational(void) { return FALSE; } + STDMETHODIMP_(void) SetCacheSafetyMode(BOOL); STDMETHODIMP_(LONG) GetContactCount(void); STDMETHODIMP_(MCONTACT) FindFirstContact(const char *szProto = NULL); diff --git a/plugins/Dbx_kv/src/dbintf.h b/plugins/Dbx_kv/src/dbintf.h index b9decbc0c3..97c8c507d9 100644 --- a/plugins/Dbx_kv/src/dbintf.h +++ b/plugins/Dbx_kv/src/dbintf.h @@ -148,6 +148,7 @@ struct CDbxKV : public MIDatabase, public MIDatabaseChecker, public MZeroedObjec __forceinline bool usesPassword() const { return m_bUsesPassword; } public: + STDMETHODIMP_(BOOL) IsRelational(void) { return TRUE; } STDMETHODIMP_(void) SetCacheSafetyMode(BOOL); STDMETHODIMP_(LONG) GetContactCount(void); diff --git a/plugins/Dbx_kyoto/src/dbintf.h b/plugins/Dbx_kyoto/src/dbintf.h index e78aaff6cb..8e8dd0f7c6 100644 --- a/plugins/Dbx_kyoto/src/dbintf.h +++ b/plugins/Dbx_kyoto/src/dbintf.h @@ -149,6 +149,7 @@ struct CDbxKyoto : public MIDatabase, public MIDatabaseChecker, public MZeroedOb __forceinline bool usesPassword() const { return m_bUsesPassword; } public: + STDMETHODIMP_(BOOL) IsRelational(void) { return TRUE; } STDMETHODIMP_(void) SetCacheSafetyMode(BOOL); STDMETHODIMP_(LONG) GetContactCount(void); diff --git a/plugins/Dbx_mdb/src/dbintf.h b/plugins/Dbx_mdb/src/dbintf.h index 4183e6cd18..c3736f6bda 100644 --- a/plugins/Dbx_mdb/src/dbintf.h +++ b/plugins/Dbx_mdb/src/dbintf.h @@ -151,6 +151,7 @@ struct CDbxMdb : public MIDatabase, public MIDatabaseChecker, public MZeroedObje __forceinline bool usesPassword() const { return m_bUsesPassword; } public: + STDMETHODIMP_(BOOL) IsRelational(void) { return TRUE; } STDMETHODIMP_(void) SetCacheSafetyMode(BOOL); STDMETHODIMP_(LONG) GetContactCount(void); 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++; } -- cgit v1.2.3