diff options
author | George Hazan <george.hazan@gmail.com> | 2012-05-30 13:54:56 +0000 |
---|---|---|
committer | George Hazan <george.hazan@gmail.com> | 2012-05-30 13:54:56 +0000 |
commit | ee9d85e617be7be900d31be00d0dec766119c2e5 (patch) | |
tree | fcc7a837d39e057a79bae3b9509bef659f1643f2 | |
parent | 9951afcf3b7dbb6ec2037dcb345c56db811329cd (diff) |
yet another option for chats' history reading
git-svn-id: http://svn.miranda-ng.org/main/trunk@233 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
-rw-r--r-- | protocols/JabberG/jabber.h | 21 | ||||
-rw-r--r-- | protocols/JabberG/jabber_db_utils.h | 2 | ||||
-rw-r--r-- | protocols/JabberG/jabber_groupchat.cpp | 30 | ||||
-rw-r--r-- | protocols/JabberG/jabber_opt.cpp | 1 |
4 files changed, 35 insertions, 19 deletions
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<BYTE> GcLogConfig;
CMOption<BYTE> GcLogRoles;
CMOption<BYTE> GcLogStatuses;
+ CMOption<BYTE> GcLogChatHistory;
CMOption<BYTE> HostNameAsResource;
CMOption<BYTE> IgnoreMUCInvites;
CMOption<BYTE> 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); }
|