From a70382b0e8bed265a1d314d9f6aae8f2dd48d20b Mon Sep 17 00:00:00 2001 From: George Hazan Date: Wed, 28 Nov 2012 18:45:54 +0000 Subject: ex-protos moved to the Plugins folder git-svn-id: http://svn.miranda-ng.org/main/trunk@2545 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/Quotes/src/QuotesProviders.cpp | 119 +++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 plugins/Quotes/src/QuotesProviders.cpp (limited to 'plugins/Quotes/src/QuotesProviders.cpp') diff --git a/plugins/Quotes/src/QuotesProviders.cpp b/plugins/Quotes/src/QuotesProviders.cpp new file mode 100644 index 0000000000..26cbb067ea --- /dev/null +++ b/plugins/Quotes/src/QuotesProviders.cpp @@ -0,0 +1,119 @@ +#include "StdAfx.h" +#include "QuotesProviders.h" + +#include "QuotesProviderDukasCopy.h" +#include "EconomicRateInfo.h" +#include "QuotesProviderGoogle.h" +#include "DBUtils.h" +#include "QuotesProviderGoogleFinance.h" +#include "QuotesProviderYahoo.h" + +#define LAST_RUN_VERSION "LastRunVersion" + +CQuotesProviders::CQuotesProviders() +{ + InitProviders(); +} + +CQuotesProviders::~CQuotesProviders() +{ + ClearProviders(); +} + +const CQuotesProviders::TQuotesProviders& CQuotesProviders::GetProviders()const +{ + return m_apProviders; +} + +namespace +{ + templatevoid create_provider(CQuotesProviders::TQuotesProviders& apProviders) + { + CQuotesProviders::TQuotesProviderPtr pProvider(new T); + if(pProvider->Init()) + { + apProviders.push_back(pProvider); + } + } +} + +void CQuotesProviders::CreateProviders() +{ + create_provider(m_apProviders); + create_provider(m_apProviders); + create_provider(m_apProviders); + create_provider(m_apProviders); +} + +void CQuotesProviders::ClearProviders() +{ + m_apProviders.clear(); +} + +namespace +{ + void convert_contact_settings(HANDLE hContact) + { + WORD dwLogMode = DBGetContactSettingWord(hContact,QUOTES_PROTOCOL_NAME,DB_STR_QUOTE_LOG,static_cast(lmDisabled)); + if ((dwLogMode&lmInternalHistory) || (dwLogMode&lmExternalFile)) + { + DBWriteContactSettingByte(hContact,QUOTES_PROTOCOL_NAME,DB_STR_CONTACT_SPEC_SETTINGS,1); + } + } +} +void CQuotesProviders::InitProviders() +{ + CreateProviders(); + + const WORD nCurrentVersion = 17; + WORD nVersion = DBGetContactSettingWord(NULL,QUOTES_MODULE_NAME,LAST_RUN_VERSION,1); + + for(HANDLE hContact = db_find_first(); hContact; hContact = db_find_next(hContact)) + { + TQuotesProviderPtr pProvider = GetContactProviderPtr(hContact); + if(pProvider) + { + pProvider->AddContact(hContact); + if(nVersion < nCurrentVersion) + { + convert_contact_settings(hContact); + } + } + } + + DBWriteContactSettingWord(NULL,QUOTES_MODULE_NAME,LAST_RUN_VERSION,nCurrentVersion); +} + +CQuotesProviders::TQuotesProviderPtr CQuotesProviders::GetContactProviderPtr(HANDLE hContact)const +{ + char* szProto = GetContactProto(hContact); + if(NULL == szProto || 0 != ::_stricmp(szProto, QUOTES_PROTOCOL_NAME)) + { + return TQuotesProviderPtr(); + } + + tstring sProvider = Quotes_DBGetStringT(hContact,QUOTES_MODULE_NAME,DB_STR_QUOTE_PROVIDER); + if(true == sProvider.empty()) + { + return TQuotesProviderPtr(); + } + + return FindProvider(sProvider); +} + +CQuotesProviders::TQuotesProviderPtr CQuotesProviders::FindProvider(const tstring& rsName)const +{ + TQuotesProviderPtr pResult; + for(TQuotesProviders::const_iterator i = m_apProviders.begin();i != m_apProviders.end();++i) + { + const TQuotesProviderPtr& pProvider = *i; + const IQuotesProvider::CProviderInfo& rInfo = pProvider->GetInfo(); + if(0 == ::quotes_stricmp(rsName.c_str(),rInfo.m_sName.c_str())) + { + pResult = pProvider; + break; + } + } + + return pResult; +} -- cgit v1.2.3