From b61ba851da0157ace3bdfc1ebbf87156b0b76413 Mon Sep 17 00:00:00 2001 From: Kirill Volinsky Date: Wed, 6 Jun 2012 08:58:27 +0000 Subject: protocols plugins moved to protocols git-svn-id: http://svn.miranda-ng.org/main/trunk@327 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/Quotes/QuotesProviderVisitorFormater.cpp | 216 +++++++++++++++++++++ 1 file changed, 216 insertions(+) create mode 100644 protocols/Quotes/QuotesProviderVisitorFormater.cpp (limited to 'protocols/Quotes/QuotesProviderVisitorFormater.cpp') diff --git a/protocols/Quotes/QuotesProviderVisitorFormater.cpp b/protocols/Quotes/QuotesProviderVisitorFormater.cpp new file mode 100644 index 0000000000..4b1d73bb05 --- /dev/null +++ b/protocols/Quotes/QuotesProviderVisitorFormater.cpp @@ -0,0 +1,216 @@ +#include "StdAfx.h" +#include "QuotesProviderVisitorFormater.h" +#include "DBUtils.h" +#include "EconomicRateInfo.h" +#include "QuotesProviderGoogle.h" +#include "Locale.h" +#include "IsWithinAccuracy.h" +#include "QuotesProviderGoogleFinance.h" +#include "QuotesProviderYahoo.h" + +CQuotesProviderVisitorFormater::CQuotesProviderVisitorFormater(HANDLE hContact,TCHAR chr,int nWidth) + : m_hContact(hContact), + m_chr(chr), + m_nWidth(nWidth) +{ +} + +CQuotesProviderVisitorFormater::~CQuotesProviderVisitorFormater() +{ +} + +const tstring& CQuotesProviderVisitorFormater::GetResult()const +{ + return m_sResult; +} + +void CQuotesProviderVisitorFormater::Visit(const CQuotesProviderDukasCopy& rProvider) +{ + if(_T('d') == m_chr || _T('D') == m_chr) + { + m_sResult = Quotes_DBGetStringT(m_hContact,QUOTES_MODULE_NAME,DB_STR_QUOTE_DESCRIPTION); + } +} + +void CQuotesProviderVisitorFormater::Visit(const CQuotesProviderGoogle& rProvider) +{ + switch(m_chr) + { + case _T('F'): + m_sResult = Quotes_DBGetStringT(m_hContact,QUOTES_MODULE_NAME,DB_STR_FROM_DESCRIPTION); + break; + case _T('f'): + m_sResult = Quotes_DBGetStringT(m_hContact,QUOTES_MODULE_NAME,DB_STR_FROM_ID); + break; + case _T('I'): + m_sResult = Quotes_DBGetStringT(m_hContact,QUOTES_MODULE_NAME,DB_STR_TO_DESCRIPTION); + break; + case _T('i'): + m_sResult = Quotes_DBGetStringT(m_hContact,QUOTES_MODULE_NAME,DB_STR_TO_ID); + break; + } +} + +namespace +{ + bool get_fetch_time(HANDLE hContact,time_t& rTime) + { + DBVARIANT dbv; + DBCONTACTGETSETTING cgs; + + cgs.szModule=QUOTES_MODULE_NAME; + cgs.szSetting=DB_STR_QUOTE_FETCH_TIME; + cgs.pValue=&dbv; + if(CallService(MS_DB_CONTACT_GETSETTING,reinterpret_cast(hContact),reinterpret_cast(&cgs)) + || (DBVT_DWORD != dbv.type)) + { + return false; + } + + rTime = dbv.dVal; + return true; + } + + tstring format_fetch_time(const CQuotesProviderBase& rProvider,HANDLE hContact,const tstring& rsFormat) + { + time_t nTime; + if(true == get_fetch_time(hContact,nTime)) + { + boost::posix_time::ptime time = boost::date_time::c_local_adjustor::utc_to_local(boost::posix_time::from_time_t(nTime)); + tostringstream k; + k.imbue(std::locale(GetSystemLocale(),new ttime_facet(rsFormat.c_str()))); + k << time; + return k.str(); + } + + return tstring(); + } +} + +void CQuotesProviderVisitorFormater::Visit(const CQuotesProviderBase& rProvider) +{ + switch(m_chr) + { +// default: +// m_sResult = m_chr; +// break; + case _T('%'): + case _T('\t'): + case _T('\\'): + m_sResult = m_chr; + break; + case _T('S'): + m_sResult = Quotes_DBGetStringT(m_hContact,QUOTES_MODULE_NAME,DB_STR_QUOTE_PROVIDER); + break; + case _T('s'): + m_sResult = Quotes_DBGetStringT(m_hContact,QUOTES_MODULE_NAME,DB_STR_QUOTE_SYMBOL); + break; + case _T('X'): + //m_sResult = format_fetch_time(rProvider,m_hContact,_T("%H:%M:%S")); + m_sResult = format_fetch_time(rProvider,m_hContact,Quotes_GetTimeFormat(true)); + break; + case _T('x'): + //m_sResult = format_fetch_time(rProvider,m_hContact,_T("%d.%m.%y")); + m_sResult = format_fetch_time(rProvider,m_hContact,Quotes_GetDateFormat(true)); + break; + case _T('t'): + { + tstring sFrmt = Quotes_GetDateFormat(true); + sFrmt += _T(" "); + sFrmt += Quotes_GetTimeFormat(true); + m_sResult = format_fetch_time(rProvider,m_hContact,sFrmt); + + //m_sResult = format_fetch_time(rProvider,m_hContact,_T("%d.%m.%y %H:%M:%S")); + } + break; + case _T('r'): + case _T('R'): + FormatDoubleHelper(DB_STR_QUOTE_CURR_VALUE); + break; + case _T('p'): + FormatDoubleHelper(DB_STR_QUOTE_PREV_VALUE); + break; +// case _T('c'): +// FormatChangeValueHelper(false); +// break; +// case _T('C'): +// FormatChangeValueHelper(true); +// break; + } +} + +void CQuotesProviderVisitorFormater::Visit(const CQuotesProviderGoogleFinance&/* rProvider*/) +{ + switch(m_chr) + { + case _T('o'): + FormatDoubleHelper(DB_STR_GOOGLE_FINANCE_OPEN_VALUE); + break; + case _T('d'): + FormatDoubleHelper(DB_STR_GOOGLE_FINANCE_DIFF,_T("0")); + break; + case _T('y'): + FormatDoubleHelper(DB_STR_GOOGLE_FINANCE_PERCENT_CHANGE_TO_YERSTERDAY_CLOSE,_T("0")); + break; + case _T('n'): + m_sResult = Quotes_DBGetStringT(m_hContact,QUOTES_MODULE_NAME,DB_STR_QUOTE_DESCRIPTION); + break; + } +} + +namespace +{ + tstring format_double(double dValue,int nWidth) + { + tostringstream o; + o.imbue(GetSystemLocale()); + + if(nWidth > 0 && nWidth <= 9) + { + o << std::setprecision(nWidth) << std::showpoint << std::fixed; + } + o << dValue; + + return o.str(); + } +} + +void CQuotesProviderVisitorFormater::FormatDoubleHelper(LPCSTR pszDbSet, + const tstring sInvalid/* = _T("-")*/) +{ + double d = 0.0; + if(true == Quotes_DBReadDouble(m_hContact,QUOTES_MODULE_NAME,pszDbSet,d)) + { + m_sResult = format_double(d,m_nWidth); + } + else + { + m_sResult = sInvalid; + } +} + +void CQuotesProviderVisitorFormater::Visit(const CQuotesProviderYahoo& rProvider) +{ + switch(m_chr) + { + case _T('o'): + FormatDoubleHelper(DB_STR_YAHOO_OPEN_VALUE); + break; + case _T('h'): + FormatDoubleHelper(DB_STR_YAHOO_DAY_HIGH); + break; + case _T('P'): + FormatDoubleHelper(DB_STR_YAHOO_PREVIOUS_CLOSE); + break; + case _T('c'): + FormatDoubleHelper(DB_STR_YAHOO_CHANGE); + break; + case _T('g'): + FormatDoubleHelper(DB_STR_YAHOO_DAY_LOW); + break; + case _T('n'): + m_sResult = Quotes_DBGetStringT(m_hContact,QUOTES_MODULE_NAME,DB_STR_QUOTE_DESCRIPTION); + break; + } + +} -- cgit v1.2.3