/* Jabber Protocol Plugin for Miranda IM Copyright (C) 2002-04 Santithorn Bunchua Copyright (C) 2005-12 George Hazan Copyright (C) 2007-09 Maxim Mluhov Copyright (C) 2007-09 Victor Pavlychko This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef __jabber_db_utils_h__ #define __jabber_db_utils_h__ template struct CMIntTraits { static __forceinline bool IsSigned() { return false; } }; template<> struct CMIntTraits { static __forceinline bool IsSigned() { return true; } }; template<> struct CMIntTraits { static __forceinline bool IsSigned() { return true; } }; template<> struct CMIntTraits { static __forceinline bool IsSigned() { return true; } }; template struct CMDBTraits { }; template<> struct CMDBTraits<1> { typedef BYTE DBType; enum { DBTypeId = DBVT_BYTE }; static __forceinline DBType Get(char *szModule, char *szSetting, DBType value) { return db_get_b(NULL, szModule, szSetting, value); } static __forceinline void Set(char *szModule, char *szSetting, DBType value) { db_set_b(NULL, szModule, szSetting, value); } }; template<> struct CMDBTraits<2> { typedef WORD DBType; enum { DBTypeId = DBVT_WORD }; static __forceinline DBType Get(char *szModule, char *szSetting, DBType value) { return db_get_w(NULL, szModule, szSetting, value); } static __forceinline void Set(char *szModule, char *szSetting, DBType value) { db_set_w(NULL, szModule, szSetting, value); } }; template<> struct CMDBTraits<4> { typedef DWORD DBType; enum { DBTypeId = DBVT_DWORD }; static __forceinline BYTE GetDBType() { return DBVT_DWORD; } static __forceinline DBType Get(char *szModule, char *szSetting, DBType value) { return db_get_dw(NULL, szModule, szSetting, value); } static __forceinline void Set(char *szModule, char *szSetting, DBType value) { db_set_dw(NULL, szModule, szSetting, value); } }; class CMOptionBase { public: BYTE GetDBType() { return m_dbType; } char *GetDBModuleName() { return m_proto->m_szModuleName; } char *GetDBSettingName() { return m_szSetting; } protected: CMOptionBase(PROTO_INTERFACE *proto, char *szSetting, BYTE dbType): m_proto(proto), m_szSetting(szSetting), m_dbType(dbType) {} PROTO_INTERFACE *m_proto; char *m_szSetting; BYTE m_dbType; private: CMOptionBase(const CMOptionBase &) {} void operator= (const CMOptionBase &) {} }; template class CMOption: public CMOptionBase { public: typedef T Type; __forceinline CMOption(PROTO_INTERFACE *proto, char *szSetting, Type defValue): CMOptionBase(proto, szSetting, CMDBTraits::DBTypeId), m_default(defValue) {} __forceinline operator Type() { return (Type)CMDBTraits::Get(m_proto->m_szModuleName, m_szSetting, m_default); } __forceinline Type operator= (Type value) { CMDBTraits::Set(m_proto->m_szModuleName, m_szSetting, (CMDBTraits::DBType)value); return value; } private: Type m_default; CMOption(const CMOption &): CMOptionBase(NULL, NULL, DBVT_DELETED) {} void operator= (const CMOption &) {} }; template<> class CMOption: public CMOptionBase { public: typedef const TCHAR *Type; __forceinline CMOption(PROTO_INTERFACE *proto, char *szSetting, Type defValue, bool crypt=false): CMOptionBase(proto, szSetting, DBVT_TCHAR), m_default(defValue), m_crypt(crypt) {} __forceinline operator CMString() { CMString result; DBVARIANT dbv; if ( !DBGetContactSettingTString(NULL, m_proto->m_szModuleName, m_szSetting, &dbv)) { result = dbv.ptszVal; db_free(&dbv); } return result; } __forceinline Type operator= (Type value) { db_set_ts(NULL, m_proto->m_szModuleName, m_szSetting, value); return value; } private: Type m_default; bool m_crypt; CMOption(const CMOption &): CMOptionBase(NULL, NULL, DBVT_DELETED) {} void operator= (const CMOption &) {} }; struct CJabberOptions { CMOption AllowVersionRequests; CMOption AcceptHttpAuth; CMOption AddRoster2Bookmarks; CMOption AutoAcceptAuthorization; CMOption AutoAcceptMUC; CMOption AutoAdd; CMOption AutoJoinBookmarks; CMOption AutoJoinConferences; CMOption AutoJoinHidden; CMOption AvatarType; CMOption BsDirect; CMOption BsDirectManual; CMOption BsOnlyIBB; CMOption BsProxyManual; CMOption Disable3920auth; CMOption DisableFrame; CMOption EnableAvatars; CMOption EnableRemoteControl; CMOption EnableUserActivity; CMOption EnableUserMood; CMOption EnableUserTune; CMOption EnableZlib; CMOption ExtendedSearch; CMOption FixIncorrectTimestamps; CMOption GcLogAffiliations; CMOption GcLogBans; CMOption GcLogConfig; CMOption GcLogRoles; CMOption GcLogStatuses; CMOption GcLogChatHistory; CMOption HostNameAsResource; CMOption IgnoreMUCInvites; CMOption KeepAlive; CMOption LogChatstates; CMOption LogPresence; CMOption LogPresenceErrors; CMOption ManualConnect; CMOption MsgAck; CMOption RosterSync; CMOption SavePassword; CMOption UseDomainLogin; CMOption ShowForeignResourceInMirVer; CMOption ShowOSVersion; CMOption ShowTransport; CMOption UseSSL; CMOption UseTLS; CMOption AcceptNotes; CMOption AutosaveNotes; CMOption EnableMsgArchive; CMOption RcMarkMessagesAsRead; CMOption ConnectionKeepAliveInterval; CMOption ConnectionKeepAliveTimeout; CMOption ProcessXMPPLinks; CMOption IgnoreRosterGroups; CJabberOptions(PROTO_INTERFACE *proto): BsDirect(proto, "BsDirect", TRUE), AllowVersionRequests(proto, "AllowVersionRequests", TRUE), AcceptHttpAuth(proto, "AcceptHttpAuth", TRUE), AddRoster2Bookmarks(proto, "AddRoster2Bookmarks", TRUE), AutoAcceptAuthorization(proto, "AutoAcceptAuthorization", FALSE), AutoAcceptMUC(proto, "AutoAcceptMUC", FALSE), AutoAdd(proto, "AutoAdd", TRUE), AutoJoinBookmarks(proto, "AutoJoinBookmarks", TRUE), AutoJoinConferences(proto, "AutoJoinConferences", 0), AutoJoinHidden(proto, "AutoJoinHidden", TRUE), AvatarType(proto, "AvatarType", PA_FORMAT_UNKNOWN), BsDirectManual(proto, "BsDirectManual", FALSE), BsOnlyIBB(proto, "BsOnlyIBB", FALSE), BsProxyManual(proto, "BsProxyManual", FALSE), Disable3920auth(proto, "Disable3920auth", FALSE), DisableFrame(proto, "DisableFrame", TRUE), EnableAvatars(proto, "EnableAvatars", TRUE), EnableRemoteControl(proto, "EnableRemoteControl", FALSE), EnableMsgArchive(proto, "EnableMsgArchive", FALSE), EnableUserActivity(proto, "EnableUserActivity", TRUE), EnableUserMood(proto, "EnableUserMood", TRUE), EnableUserTune(proto, "EnableUserTune", FALSE), EnableZlib(proto, "EnableZlib", TRUE), ExtendedSearch(proto, "ExtendedSearch", TRUE), FixIncorrectTimestamps(proto, "FixIncorrectTimestamps", TRUE), GcLogAffiliations(proto, "GcLogAffiliations", FALSE), GcLogBans(proto, "GcLogBans", TRUE), GcLogConfig(proto, "GcLogConfig", FALSE), GcLogRoles(proto, "GcLogRoles", FALSE), GcLogStatuses(proto, "GcLogStatuses", FALSE), GcLogChatHistory(proto, "GcLogChatHistory", FALSE), HostNameAsResource(proto, "HostNameAsResource", FALSE), IgnoreMUCInvites(proto, "IgnoreMUCInvites", FALSE), KeepAlive(proto, "KeepAlive", TRUE), LogChatstates(proto, "LogChatstates", FALSE), LogPresence(proto, "LogPresence", TRUE), LogPresenceErrors(proto, "LogPresenceErrors", FALSE), ManualConnect(proto, "ManualConnect", FALSE), MsgAck(proto, "MsgAck", FALSE), RosterSync(proto, "RosterSync", FALSE), SavePassword(proto, "SavePassword", TRUE), ShowForeignResourceInMirVer(proto, "ShowForeignResourceInMirVer", FALSE), ShowOSVersion(proto, "ShowOSVersion", TRUE), ShowTransport(proto, "ShowTransport", TRUE), UseSSL(proto, "UseSSL", FALSE), UseTLS(proto, "UseTLS", TRUE), UseDomainLogin(proto, "UseDomainLogin", FALSE), AcceptNotes(proto, "AcceptNotes", TRUE), AutosaveNotes(proto, "AutosaveNotes", FALSE), RcMarkMessagesAsRead(proto, "RcMarkMessagesAsRead", 1), ConnectionKeepAliveInterval(proto, "ConnectionKeepAliveInterval", 60000), ConnectionKeepAliveTimeout(proto, "ConnectionKeepAliveTimeout", 50000), ProcessXMPPLinks(proto, "ProcessXMPPLinks", FALSE), IgnoreRosterGroups(proto, "IgnoreRosterGroups", FALSE) {} }; #endif // __jabber_db_utils_h__