/*
Copyright (c) 2013-24 Miranda NG team (https://miranda-ng.org)
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 version 2
of the License.
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 .
*/
#include "stdafx.h"
#pragma once
struct AsyncHttpRequest : public MTHttpRequest
{
enum RequestPriority { rpLowLow, rpLow, rpMedium, rpHigh };
AsyncHttpRequest();
AsyncHttpRequest(CVkProto*, int iRequestType, LPCSTR szUrl, bool bSecure, MTHttpRequestHandler pFunc, RequestPriority rpPriority = rpMedium);
void Redirect(MHttpResponse*);
int m_iRetry;
int m_iErrorCode;
RequestPriority m_priority;
static ULONG m_uReqCount;
ULONG m_uReqNum;
bool m_bApiReq;
bool bNeedsRestart, bIsMainConn;
};
struct CVkFileUploadParam : public MZeroedObject {
enum VKFileType { typeInvalid, typeImg, typeAudio, typeAudioMsg, typeDoc, typeNotSupported };
wchar_t *wszFileName;
wchar_t *wszDesc;
char *szAtr;
char *szFname;
MCONTACT hContact;
VKFileType vkFileType;
CVkFileUploadParam(MCONTACT _hContact, const wchar_t *_desc, wchar_t **_files);
~CVkFileUploadParam();
VKFileType GetType();
__forceinline bool IsAccess() { return ::_waccess(wszFileName, 0) == 0; }
__forceinline char* atrName() { GetType(); return szAtr; }
__forceinline char* fileName() { GetType(); return szFname; }
};
struct CVkFileDownloadParam : public MZeroedObject
{
CVkFileDownloadParam(MCONTACT _hContact, VKMessageID_t _iMsgID, const wchar_t* _wszFileName) :
hContact(_hContact),
iMsgID(_iMsgID),
wszFileName(mir_wstrdup(_wszFileName))
{}
~CVkFileDownloadParam();
MCONTACT hContact;
VKMessageID_t iMsgID;
wchar_t* wszFileName;
};
struct CVkSendMsgParam : public MZeroedObject
{
CVkSendMsgParam(MCONTACT _hContact, VKMessageID_t _iMsgID = 0, int _iCount = 0) :
hContact(_hContact),
iMsgID(_iMsgID),
iCount(_iCount),
pFUP(nullptr)
{}
CVkSendMsgParam(MCONTACT _hContact, CVkFileUploadParam *_pFUP) :
hContact(_hContact),
iMsgID(-1),
iCount(0),
pFUP(_pFUP)
{}
MCONTACT hContact;
VKMessageID_t iMsgID;
int iCount;
CVkFileUploadParam *pFUP;
};
struct CVkDBAddAuthRequestThreadParam : public MZeroedObject
{
CVkDBAddAuthRequestThreadParam(MCONTACT _hContact, bool _bAdded) :
hContact(_hContact),
bAdded(_bAdded)
{}
MCONTACT hContact;
bool bAdded;
};
struct CVkChatMessage : public MZeroedObject
{
CVkChatMessage(VKUserID_t _id) :
m_iMessageId(_id),
m_iReplyMsgId(0),
m_iUserId(0),
m_tDate(0),
m_bHistory(false),
m_bIsRead(false),
m_bIsAction(false)
{}
VKMessageID_t m_iMessageId;
VKMessageID_t m_iReplyMsgId;
VKUserID_t m_iUserId;
time_t m_tDate;
bool m_bHistory, m_bIsRead, m_bIsAction;
ptrW m_wszBody;
};
struct CVkChatUser : public MZeroedObject
{
CVkChatUser(VKUserID_t _id) :
m_iUserId(_id),
m_bDel(false),
m_bUnknown(false)
{}
VKUserID_t m_iUserId;
bool m_bDel, m_bUnknown;
ptrW m_wszNick;
};
struct CVkChatInfo : public MZeroedObject
{
CVkChatInfo(VKUserID_t _id) :
m_users(10, NumericKeySortT),
m_msgs(10, NumericKeySortT),
m_iChatId(_id)
{}
VKUserID_t m_iChatId;
VKUserID_t m_iOwner = 0;
bool m_bHistoryRead = false;
ptrW m_wszTopic;
SESSION_INFO *m_si = nullptr;
OBJLIST m_users;
OBJLIST m_msgs;
CVkChatUser* GetUserById(LPCWSTR);
CVkChatUser* GetUserById(VKUserID_t iUserId);
};
struct CVkUserInfo : public MZeroedObject {
CVkUserInfo(VKUserID_t _UserId) :
m_UserId(_UserId),
m_bIsGroup(false)
{}
CVkUserInfo(VKUserID_t _UserId, bool _bIsGroup, const CMStringW& _wszUserNick, const CMStringW& _wszLink, MCONTACT _hContact = 0) :
m_UserId(_UserId),
m_bIsGroup(_bIsGroup),
m_wszUserNick(_wszUserNick),
m_wszLink(_wszLink),
m_hContact(_hContact)
{}
VKUserID_t m_UserId;
MCONTACT m_hContact;
CMStringW m_wszUserNick;
CMStringW m_wszLink;
bool m_bIsGroup;
};
enum VKObjType { vkNull, vkPost, vkPhoto, vkVideo, vkComment, vkTopic, vkUsers, vkCopy, vkInvite };
struct CVKNotification {
wchar_t *pwszType;
VKObjType vkParent, vkFeedback;
wchar_t *pwszTranslate;
};
struct CVKNewsItem : public MZeroedObject {
CVKNewsItem() :
tDate(0),
vkUser(nullptr),
bIsGroup(false),
bIsRepost(false),
vkFeedbackType(vkNull),
vkParentType(vkNull)
{}
CMStringW wszId;
time_t tDate;
CVkUserInfo *vkUser;
CMStringW wszText;
CMStringW wszLink;
CMStringW wszType;
CMStringW wszPopupTitle;
CMStringW wszPopupText;
VKObjType vkFeedbackType, vkParentType;
bool bIsGroup;
bool bIsRepost;
};
enum VKBBCType : uint8_t { vkbbcB, vkbbcI, vkbbcS, vkbbcU, vkbbcCode, vkbbcQuote, vkbbcImg, vkbbcUrl, vkbbcImgE, vkbbcSize, vkbbcColor };
enum BBCSupport : uint8_t { bbcNo, bbcBasic, bbcAdvanced };
struct CVKBBCItem {
VKBBCType vkBBCType;
BBCSupport vkBBCSettings;
wchar_t *pwszTempate;
};
struct CVKChatContactTypingParam {
CVKChatContactTypingParam(VKUserID_t pChatId, VKUserID_t pUserId) :
m_ChatId(pChatId),
m_UserId(pUserId)
{}
VKUserID_t m_ChatId;
VKUserID_t m_UserId;
};
struct CVKInteres {
const char *szField;
wchar_t *pwszTranslate;
};
struct CVKLang {
wchar_t *szCode;
wchar_t *szDescription;
};
enum MarkMsgReadOn : uint8_t { markOnRead, markOnReceive, markOnReply, markOnTyping };
enum SyncHistoryMetod : uint8_t { syncOff, syncAuto, sync1Days, sync3Days };
enum MusicSendMetod : uint8_t { sendNone, sendStatusOnly, sendBroadcastOnly, sendBroadcastAndStatus };
enum IMGBBCSypport : uint8_t { imgNo, imgFullSize, imgPreview130, imgPreview604, imgPreview300 };
struct CVkCookie
{
CVkCookie(const CMStringA& name, const CMStringA& value, const CMStringA& domain) :
m_name(name),
m_value(value),
m_domain(domain)
{}
CMStringA m_name, m_value, m_domain;
};
struct CVKOptions {
CMOption bLoadLastMessageOnMsgWindowsOpen;
CMOption bLoadOnlyFriends;
CMOption bServerDelivery;
CMOption bHideChats;
CMOption bMesAsUnread;
CMOption bUseLocalTime;
CMOption bReportAbuse;
CMOption bClearServerHistory;
CMOption bRemoveFromFrendlist;
CMOption bRemoveFromCList;
CMOption bPopUpSyncHistory;
CMOption iMarkMessageReadOn;
CMOption bStikersAsSmileys;
CMOption bUseStikersAsStaticSmileys;
CMOption bUserForceInvisibleOnActivity;
CMOption iMusicSendMetod;
CMOption bOggInAudioMessages;
CMOption bPopupContactsMusic;
CMOption iSyncHistoryMetod;
CMOption bNewsEnabled;
CMOption iMaxLoadNewsPhoto;
CMOption bNotificationsEnabled;
CMOption bNotificationsMarkAsViewed;
CMOption bSpecialContactAlwaysEnabled;
CMOption bShowBeforeEditedPostVersion;
CMOption bLoadFilesAsync;
CMOption bBBCNewStorySupport;
CMOption iIMGBBCSupport;
CMOption iBBCForNews;
CMOption iBBCForAttachments;
CMOption bUseBBCOnAttacmentsAsNews;
CMOption bNewsAutoClearHistory;
CMOption bNewsFilterPosts;
CMOption bNewsFilterPhotos;
CMOption bNewsFilterTags;
CMOption bNewsFilterWallPhotos;
CMOption bNewsSourceFriends;
CMOption bNewsSourceGroups;
CMOption bNewsSourcePages;
CMOption bNewsSourceFollowing;
CMOption bNewsSourceIncludeBanned;
CMOption bNewsSourceNoReposts;
CMOption bNotificationFilterComments;
CMOption bNotificationFilterLikes;
CMOption bNotificationFilterReposts;
CMOption bNotificationFilterMentions;
CMOption bNotificationFilterInvites;
CMOption bNotificationFilterAcceptedFriends;
CMOption bUseNonStandardNotifications;
CMOption bShortenLinksForAudio;
CMOption bAddMessageLinkToMesWAtt;
CMOption bShowReplyInMessage;
CMOption bSplitFormatFwdMsg;
CMOption bSyncReadMessageStatusFromServer;
CMOption bLoadFullCList;
CMOption bSendVKLinksAsAttachments;
CMOption bLoadSentAttachments;
CMOption bShowVkDeactivateEvents;
CMOption bStickerBackground;
CMOption bFilterAudioMessages;
CMOption bShowProtoMenuItem0;
CMOption bShowProtoMenuItem1;
CMOption bShowProtoMenuItem2;
CMOption bShowProtoMenuItem3;
CMOption bShowProtoMenuItem4;
CMOption bShowProtoMenuItem5;
CMOption bShowProtoMenuItem6;
CMOption iReqAuthTimeLater;
CMOption iNewsInterval;
CMOption iNotificationsInterval;
CMOption iNewsAutoClearHistoryInterval;
CMOption iInvisibleInterval;
CMOption iMaxFriendsCount;
CMOption iStickerSize;
CMOption pwszDefaultGroup;
CMOption pwszVKLang;
CVKOptions(PROTO_INTERFACE *proto);
__forceinline BBCSupport BBCForNews() { return (BBCSupport)(uint8_t)iBBCForNews; };
__forceinline BBCSupport BBCForAttachments() { return (BBCSupport)(uint8_t)iBBCForAttachments; };
};
struct CVKDeactivateEvent {
wchar_t *wszType;
char *szDescription;
};
enum VKContactType : uint8_t {
vkContactNormal = 0x01,
vkContactSelf = 0x02,
vkContactMUCUser = 0x04,
vkContactGroupUser = 0x08
};
enum VKMesType : uint8_t { vkALL, vkIN, vkOUT };
struct CVKImageSizeItem {
CMStringW wszUrl;
int iSizeH, iSizeW;
CVKImageSizeItem() :
iSizeH(0),
iSizeW(0)
{}
};
enum VKPeerType : uint8_t { vkPeerError = 0 , vkPeerUser, vkPeerGroup, vkPeerMUC, vkPeerFeed};