From 4ae19a4155e936aa1d243360581f9511eb061336 Mon Sep 17 00:00:00 2001 From: "ROBYER@gmail.com" Date: Sun, 20 Nov 2011 18:39:38 +0000 Subject: Added Facebook RM git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@191 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb --- FacebookRM/proto.h | 210 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 FacebookRM/proto.h (limited to 'FacebookRM/proto.h') diff --git a/FacebookRM/proto.h b/FacebookRM/proto.h new file mode 100644 index 0000000..7c70a56 --- /dev/null +++ b/FacebookRM/proto.h @@ -0,0 +1,210 @@ +/* + +Facebook plugin for Miranda Instant Messenger +_____________________________________________ + +Copyright © 2009-11 Michal Zelinka + +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, see . + +File name : $HeadURL: http://eternityplugins.googlecode.com/svn/trunk/facebook/proto.h $ +Revision : $Revision: 91 $ +Last change by : $Author: n3weRm0re.ewer $ +Last change on : $Date: 2011-01-08 11:10:34 +0100 (so, 08 1 2011) $ + +*/ + +#pragma once + +class FacebookProto : public PROTO_INTERFACE +{ +public: + FacebookProto( const char *proto_name, const TCHAR *username ); + ~FacebookProto( ); + + __inline void* operator new( size_t size ) + { + return calloc( 1, size ); + } + __inline void operator delete( void* p ) + { + free( p ); + } + + inline const char* ModuleName( ) const + { + return m_szModuleName; + } + + inline bool isOnline( ) + { + return ( m_iStatus != ID_STATUS_OFFLINE && m_iStatus != ID_STATUS_CONNECTING ); + } + + inline bool isOffline( ) + { + return ( m_iStatus == ID_STATUS_OFFLINE ); + } + + inline bool isInvisible( ) + { + return ( m_iStatus == ID_STATUS_INVISIBLE ); + } + + //PROTO_INTERFACE + + virtual HANDLE __cdecl AddToList( int flags, PROTOSEARCHRESULT* psr ); + virtual HANDLE __cdecl AddToListByEvent( int flags, int iContact, HANDLE hDbEvent ); + + virtual int __cdecl Authorize( HANDLE hDbEvent ); + virtual int __cdecl AuthDeny( HANDLE hDbEvent, const PROTOCHAR* szReason ); + virtual int __cdecl AuthRecv( HANDLE hContact, PROTORECVEVENT* ); + virtual int __cdecl AuthRequest( HANDLE hContact, const PROTOCHAR* szMessage ); + + virtual HANDLE __cdecl ChangeInfo( int iInfoType, void* pInfoData ); + + virtual HANDLE __cdecl FileAllow( HANDLE hContact, HANDLE hTransfer, const PROTOCHAR* szPath ); + virtual int __cdecl FileCancel( HANDLE hContact, HANDLE hTransfer ); + virtual int __cdecl FileDeny( HANDLE hContact, HANDLE hTransfer, const PROTOCHAR* szReason ); + virtual int __cdecl FileResume( HANDLE hTransfer, int* action, const PROTOCHAR** szFilename ); + + virtual DWORD_PTR __cdecl GetCaps( int type, HANDLE hContact = NULL ); + virtual HICON __cdecl GetIcon( int iconIndex ); + virtual int __cdecl GetInfo( HANDLE hContact, int infoType ); + + virtual HANDLE __cdecl SearchBasic( const PROTOCHAR* id ); + virtual HANDLE __cdecl SearchByEmail( const PROTOCHAR* email ); + virtual HANDLE __cdecl SearchByName( const PROTOCHAR* nick, const PROTOCHAR* firstName, const PROTOCHAR* lastName ); + virtual HWND __cdecl SearchAdvanced( HWND owner ); + virtual HWND __cdecl CreateExtendedSearchUI( HWND owner ); + + virtual int __cdecl RecvContacts( HANDLE hContact, PROTORECVEVENT* ); + virtual int __cdecl RecvFile( HANDLE hContact, PROTOFILEEVENT* ); + virtual int __cdecl RecvMsg( HANDLE hContact, PROTORECVEVENT* ); + virtual int __cdecl RecvUrl( HANDLE hContact, PROTORECVEVENT* ); + + virtual int __cdecl SendContacts( HANDLE hContact, int flags, int nContacts, HANDLE* hContactsList ); + virtual HANDLE __cdecl SendFile( HANDLE hContact, const PROTOCHAR* szDescription, PROTOCHAR** ppszFiles ); + virtual int __cdecl SendMsg( HANDLE hContact, int flags, const char* msg ); + virtual int __cdecl SendUrl( HANDLE hContact, int flags, const char* url ); + + virtual int __cdecl SetApparentMode( HANDLE hContact, int mode ); + virtual int __cdecl SetStatus( int iNewStatus ); + + virtual HANDLE __cdecl GetAwayMsg( HANDLE hContact ); + virtual int __cdecl RecvAwayMsg( HANDLE hContact, int mode, PROTORECVEVENT* evt ); + virtual int __cdecl SendAwayMsg( HANDLE hContact, HANDLE hProcess, const char* msg ); + virtual int __cdecl SetAwayMsg( int iStatus, const PROTOCHAR* msg ); + + virtual int __cdecl UserIsTyping( HANDLE hContact, int type ); + + virtual int __cdecl OnEvent( PROTOEVENTTYPE iEventType, WPARAM wParam, LPARAM lParam ); + + //////////////////////// + + // Services + int __cdecl GetName( WPARAM, LPARAM ); + int __cdecl GetStatus( WPARAM, LPARAM ); + int __cdecl SetStatus( WPARAM, LPARAM ); + int __cdecl GetMyAwayMsg( WPARAM, LPARAM ); + int __cdecl SetMyAwayMsg( WPARAM, LPARAM ); + int __cdecl SvcCreateAccMgrUI( WPARAM, LPARAM ); + int __cdecl GetMyAvatar(WPARAM, LPARAM ); + int __cdecl GetAvatarInfo(WPARAM, LPARAM ); + int __cdecl GetAvatarCaps(WPARAM, LPARAM ); + int __cdecl VisitProfile(WPARAM, LPARAM ); + + // Events + int __cdecl OnModulesLoaded(WPARAM, LPARAM); + int __cdecl OnOptionsInit(WPARAM, LPARAM); + int __cdecl OnBuildStatusMenu(WPARAM,LPARAM); + int __cdecl OnContactDeleted(WPARAM,LPARAM); + int __cdecl OnMind(WPARAM,LPARAM); + int __cdecl OnPreShutdown(WPARAM,LPARAM); + int __cdecl OnPrebuildContactMenu(WPARAM,LPARAM); + // TODO RM: Chat handling + /* int __cdecl OnChatOutgoing(WPARAM,LPARAM); + int __cdecl OnJoinChat(WPARAM,LPARAM); + int __cdecl OnLeaveChat(WPARAM,LPARAM);*/ + + // Loops + bool NegotiateConnection(); + BYTE GetPollRate(); + void __cdecl MessageLoop(void*); + void __cdecl UpdateLoop(void*); + + // Processing threads + void __cdecl ProcessBuddyList(void*); + void __cdecl ProcessFriendList(void*); + void __cdecl ProcessMessages(void*); + void __cdecl ProcessUnreadMessages(void*); + void __cdecl ProcessFeeds(void*); + void __cdecl ProcessNotifications(void*); + + // Worker threads + void __cdecl SignOn(void*); + void __cdecl ChangeStatus(void*); + void __cdecl SignOff(void*); + void __cdecl SetAwayMsgWorker(void*); + void __cdecl UpdateAvatarWorker(void*); + void __cdecl SendMsgWorker(void*); + void __cdecl SendTypingWorker(void*); + void __cdecl MessagingWorker(void*); + void __cdecl DeleteContactFromServer(void*); + + // Contacts handling + bool IsMyContact(HANDLE, bool include_chat = false); + HANDLE ContactIDToHContact(std::string); + HANDLE AddToContactList(facebook_user*, bool dont_check = false); + void SetAllContactStatuses(int); + + // TODO RM: Chats handling + /*void AddChat(const char *id,const char *name); + void UpdateChat(const facebook_user &update); + void AddChatContact(const char *name,const char *nick=0); + void DeleteChatContact(const char *name); + void SetChatStatus(int);*/ + + // Connection client + facebook_client facy; // TODO: Refactor to "client" and make dynamic + + // Helpers + std::string GetAvatarFolder(); + bool GetDbAvatarInfo(PROTO_AVATAR_INFORMATION &ai, std::string *url); + void CheckAvatarChange(HANDLE hContact, std::string image_url); + void ToggleStatusMenuItems( BOOL bEnable ); + + // Handles, Locks + HGENMENU m_hMenuRoot; + HANDLE m_hStatusMind; + + HANDLE signon_lock_; + HANDLE avatar_lock_; + HANDLE log_lock_; + HANDLE update_loop_lock_; + //HANDLE message_loop_lock_; + + HANDLE m_hNetlibUser; + + std::string last_status_msg_; + std::string def_avatar_folder_; + HANDLE hAvatarFolder_; + std::vector avatar_queue; + + static void CALLBACK APC_callback(ULONG_PTR p); + + // Information providing + int Log(const char *fmt,...); + void NotifyEvent(TCHAR* title, TCHAR* info, HANDLE contact, DWORD flags, TCHAR* url=NULL); +}; -- cgit v1.2.3