From ee9d85e617be7be900d31be00d0dec766119c2e5 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Wed, 30 May 2012 13:54:56 +0000 Subject: yet another option for chats' history reading git-svn-id: http://svn.miranda-ng.org/main/trunk@233 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/JabberG/jabber.h | 21 +++++++++++++++++---- protocols/JabberG/jabber_db_utils.h | 2 ++ protocols/JabberG/jabber_groupchat.cpp | 30 +++++++++++++++--------------- protocols/JabberG/jabber_opt.cpp | 1 + 4 files changed, 35 insertions(+), 19 deletions(-) (limited to 'protocols/JabberG') diff --git a/protocols/JabberG/jabber.h b/protocols/JabberG/jabber.h index c5965f9f8f..d990982d90 100644 --- a/protocols/JabberG/jabber.h +++ b/protocols/JabberG/jabber.h @@ -332,7 +332,7 @@ struct ThreadData HANDLE hThread; JABBER_SESSION_TYPE type; - + // network support JABBER_SOCKET s; BOOL useSSL; @@ -445,7 +445,7 @@ struct filetransfer HANDLE hFileEvent; unsigned __int64 *fileSize; TCHAR* szDescription; - + CJabberProto* ppro; }; @@ -499,8 +499,8 @@ class _A2T TCHAR* buf; public: - _A2T( const char* s ) : buf( mir_a2t( s )) {} - _A2T( const char* s, int cp ) : buf( mir_a2t_cp( s, cp )) {} + __forceinline _A2T( const char* s ) : buf( mir_a2t( s )) {} + __forceinline _A2T( const char* s, int cp ) : buf( mir_a2t_cp( s, cp )) {} ~_A2T() { mir_free(buf); } __forceinline operator TCHAR*() const @@ -508,6 +508,19 @@ public: } }; +class _T2A +{ + char* buf; + +public: + __forceinline _T2A( const TCHAR* s ) : buf( mir_t2a( s )) {} + __forceinline ~_T2A() { mir_free(buf); } + + __forceinline operator char*() const + { return buf; + } +}; + //---- jabber_treelist.c ------------------------------------------------ typedef struct TTreeList_ItemInfo *HTREELISTITEM; diff --git a/protocols/JabberG/jabber_db_utils.h b/protocols/JabberG/jabber_db_utils.h index b1cda11547..3670bfaeb5 100644 --- a/protocols/JabberG/jabber_db_utils.h +++ b/protocols/JabberG/jabber_db_utils.h @@ -198,6 +198,7 @@ struct CJabberOptions CMOption GcLogConfig; CMOption GcLogRoles; CMOption GcLogStatuses; + CMOption GcLogChatHistory; CMOption HostNameAsResource; CMOption IgnoreMUCInvites; CMOption KeepAlive; @@ -252,6 +253,7 @@ struct CJabberOptions GcLogConfig(proto, "GcLogConfig", FALSE), GcLogRoles(proto, "GcLogRoles", FALSE), GcLogStatuses(proto, "GcLogStatuses", FALSE), + GcLogChatHistory(proto, "GcLogChatHistory", TRUE), HostNameAsResource(proto, "HostNameAsResource", FALSE), IgnoreMUCInvites(proto, "IgnoreMUCInvites", FALSE), KeepAlive(proto, "KeepAlive", TRUE), diff --git a/protocols/JabberG/jabber_groupchat.cpp b/protocols/JabberG/jabber_groupchat.cpp index eb2ae55adb..8e11f030cf 100644 --- a/protocols/JabberG/jabber_groupchat.cpp +++ b/protocols/JabberG/jabber_groupchat.cpp @@ -320,19 +320,19 @@ void CJabberProto::GroupchatJoinRoom( const TCHAR* server, const TCHAR* room, co if ( info.password && info.password[0] ) x << XCHILD( _T("password"), info.password ); - char setting[MAXMODULELABELLENGTH]; - DBVARIANT dbv; - mir_snprintf(setting, sizeof(setting), "muc_%s@%s_lastevent", mir_u2a(room), mir_u2a(server)); - time_t lasteventtime = this->JGetDword( NULL, setting, 0 ); - if ( lasteventtime > 0 ) { - _tzset(); - lasteventtime += _timezone + 1; - struct tm* time = localtime(&lasteventtime); - TCHAR lasteventdate[20]; - TCHAR* timeformat = mir_a2u("%04d-%02d-%02dT%02d:%02d:%02dZ"); - mir_sntprintf(lasteventdate, sizeof(lasteventdate), timeformat, time->tm_year+1900, time->tm_mon+1, time->tm_mday, time->tm_hour, time->tm_min, time->tm_sec); - x << XCHILD( _T("history") ) << XATTR( _T("since"), lasteventdate); - JFreeVariant( &dbv ); + if (m_options.GcLogChatHistory) { + char setting[MAXMODULELABELLENGTH]; + mir_snprintf(setting, SIZEOF(setting), "muc_%s@%s_lastevent", _T2A(room), _T2A(server)); + time_t lasteventtime = this->JGetDword( NULL, setting, 0 ); + if ( lasteventtime > 0 ) { + _tzset(); + lasteventtime += _timezone + 1; + struct tm* time = localtime(&lasteventtime); + TCHAR lasteventdate[20]; + mir_sntprintf(lasteventdate, SIZEOF(lasteventdate), _T("%04d-%02d-%02dT%02d:%02d:%02dZ"), + time->tm_year+1900, time->tm_mon+1, time->tm_mday, time->tm_hour, time->tm_min, time->tm_sec); + x << XCHILD( _T("history") ) << XATTR( _T("since"), lasteventdate); + } } SendPresenceTo( status, text, x ); @@ -1250,9 +1250,9 @@ void CJabberProto::GroupchatProcessMessage( HXML node ) if ( !_tcscmp( p, _T("jabber:x:delay")) && msgTime==0 ) if (( p = xmlGetAttrValue( xNode, _T("stamp"))) != NULL ) { msgTime = JabberIsoToUnixTime( p ); - if ( msgTime > 0 ) { + if (m_options.GcLogChatHistory && msgTime > 0 ) { char setting[MAXMODULELABELLENGTH]; - mir_snprintf(setting, sizeof(setting), "muc_%s_lastevent", mir_u2a(gcd.ptszID)); + mir_snprintf(setting, sizeof(setting), "muc_%s_lastevent", _T2A(gcd.ptszID)); this->JSetDword(NULL, setting, msgTime); } } diff --git a/protocols/JabberG/jabber_opt.cpp b/protocols/JabberG/jabber_opt.cpp index 884fe0f077..574cf4b50c 100644 --- a/protocols/JabberG/jabber_opt.cpp +++ b/protocols/JabberG/jabber_opt.cpp @@ -956,6 +956,7 @@ public: m_otvOptions.AddOption(LPGENT("Log events") _T("/") LPGENT("Affiliation changes"), m_proto->m_options.GcLogAffiliations); m_otvOptions.AddOption(LPGENT("Log events") _T("/") LPGENT("Role changes"), m_proto->m_options.GcLogRoles); m_otvOptions.AddOption(LPGENT("Log events") _T("/") LPGENT("Status changes"), m_proto->m_options.GcLogStatuses); + m_otvOptions.AddOption(LPGENT("Log events") _T("/") LPGENT("Filter history messages"), m_proto->m_options.GcLogChatHistory); } static CDlgBase *Create(void *param) { return new CDlgOptGc((CJabberProto *)param); } -- cgit v1.2.3