/* Copyright © 2012-17 Miranda NG team Copyright © 2009 Jim Porter 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 . */ #pragma once #include "utility.h" class TwitterProto : public PROTO { public: TwitterProto(const char*,const wchar_t*); ~TwitterProto(); //PROTO_INTERFACE virtual MCONTACT __cdecl AddToList(int,PROTOSEARCHRESULT *); virtual DWORD_PTR __cdecl GetCaps(int, MCONTACT = 0); virtual int __cdecl GetInfo(MCONTACT, int); virtual HANDLE __cdecl SearchBasic(const wchar_t *); virtual HANDLE __cdecl SearchByEmail(const wchar_t *); virtual int __cdecl RecvMsg(MCONTACT, PROTORECVEVENT *); virtual int __cdecl SendMsg(MCONTACT, int, const char *); virtual int __cdecl SetStatus(int); virtual HANDLE __cdecl GetAwayMsg(MCONTACT); virtual int __cdecl OnEvent(PROTOEVENTTYPE,WPARAM,LPARAM); void UpdateSettings(); // Services INT_PTR __cdecl SvcCreateAccMgrUI(WPARAM,LPARAM); INT_PTR __cdecl GetStatus(WPARAM,LPARAM); INT_PTR __cdecl ReplyToTweet(WPARAM,LPARAM); INT_PTR __cdecl VisitHomepage(WPARAM,LPARAM); INT_PTR __cdecl GetAvatar(WPARAM,LPARAM); INT_PTR __cdecl SetAvatar(WPARAM,LPARAM); INT_PTR __cdecl OnJoinChat(WPARAM,LPARAM); INT_PTR __cdecl OnLeaveChat(WPARAM,LPARAM); INT_PTR __cdecl OnTweet(WPARAM,LPARAM); // Events int __cdecl OnContactDeleted(WPARAM,LPARAM); int __cdecl OnBuildStatusMenu(WPARAM,LPARAM); int __cdecl OnOptionsInit(WPARAM,LPARAM); int __cdecl OnModulesLoaded(WPARAM,LPARAM); int __cdecl OnPrebuildContactMenu(WPARAM,LPARAM); int __cdecl OnChatOutgoing(WPARAM,LPARAM); void __cdecl SendTweetWorker(void *); private: // Worker threads void __cdecl AddToListWorker(void *p); void __cdecl SendSuccess(void *); void __cdecl DoSearch(void *); void __cdecl SignOn(void *); void __cdecl MessageLoop(void *); void __cdecl GetAwayMsgWorker(void *); void __cdecl UpdateAvatarWorker(void *); void __cdecl UpdateInfoWorker(void *); bool NegotiateConnection(); void UpdateStatuses(bool pre_read,bool popups, bool tweetToMsg); void UpdateMessages(bool pre_read); void UpdateFriends(); void UpdateAvatar(MCONTACT, const std::string &, bool force = false); int ShowPinDialog(); void ShowPopup(const wchar_t *, int Error = 0); void ShowPopup(const char *, int Error = 0); void ShowContactPopup(MCONTACT, const std::string &, const std::string *); bool IsMyContact(MCONTACT, bool include_chat = false); MCONTACT UsernameToHContact(const char *); MCONTACT AddToClientList(const char *, const char *); void SetAllContactStatuses(int); static void CALLBACK APC_callback(ULONG_PTR p); void UpdateChat(const twitter_user &update); void AddChatContact(const char *name,const char *nick=0); void DeleteChatContact(const char *name); void SetChatStatus(int); void TwitterProto::resetOAuthKeys(); std::wstring GetAvatarFolder(); mir_cs signon_lock_; mir_cs avatar_lock_; mir_cs twitter_lock_; HNETLIBUSER hAvatarNetlib_; HANDLE hMsgLoop_; mir_twitter twit_; twitter_id since_id_; twitter_id dm_since_id_; bool in_chat_; int disconnectionCount; //mirandas keys wstring ConsumerKey; wstring ConsumerSecret; // various twitter api URLs wstring AuthorizeUrl; }; // TODO: remove this inline std::string profile_base_url(const std::string &url) { size_t x = url.find("://"); if(x == std::string::npos) return url.substr(0,url.find('/')+1); else return url.substr(0,url.find('/',x+3)+1); }