From 7a11ce58becfc750e5b4a9bb07102f8d334bbcf6 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Mon, 24 Apr 2023 13:41:41 +0300 Subject: Telegram: silent file transfers don't require f/t manager, but simply create offline events --- include/m_protosvc.h | 6 ++++-- protocols/Telegram/src/proto.cpp | 32 -------------------------------- protocols/Telegram/src/proto.h | 4 ---- protocols/Telegram/src/utils.cpp | 2 +- src/core/stdfile/src/file.cpp | 19 +++++++++++-------- 5 files changed, 16 insertions(+), 47 deletions(-) diff --git a/include/m_protosvc.h b/include/m_protosvc.h index 76ed0eb260..c9e6aacfc2 100644 --- a/include/m_protosvc.h +++ b/include/m_protosvc.h @@ -768,8 +768,10 @@ EXTERN_C MIR_APP_DLL(MEVENT) Proto_AuthRecv(const char *szProtoName, PROTORECVEV // wParam = 0 // lParam = (LPARAM)(PROTORECVFILE*)&prf -#define PRFF_UNICODE 1 -#define PRFF_UTF 2 +#define PRFF_UNICODE 0x0001 // in all MAllCStrings .w is valid +#define PRFF_UTF 0x0002 // in all MAllCStrings .a contains text in UTF8 +#define PRFF_SILENT 0x0004 // do not show file send/receive dialog + struct PROTORECVFILE { diff --git a/protocols/Telegram/src/proto.cpp b/protocols/Telegram/src/proto.cpp index 11bed96d85..172b299ebc 100644 --- a/protocols/Telegram/src/proto.cpp +++ b/protocols/Telegram/src/proto.cpp @@ -278,38 +278,6 @@ INT_PTR CTelegramProto::GetCaps(int type, MCONTACT) } } -///////////////////////////////////////////////////////////////////////////////////////// - -HANDLE CTelegramProto::FileAllow(MCONTACT, HANDLE hTransfer, const wchar_t *pwszSavePath) -{ - auto *ft = (TG_FILE_REQUEST *)hTransfer; - if (ft == nullptr) - return nullptr; - - ft->m_destPath = pwszSavePath; - ft->pfts.szCurrentFile.w = ft->m_fileName.GetBuffer(); - ft->pfts.szWorkingDir.w = ft->m_destPath.GetBuffer(); - SendQuery(new TD::downloadFile(ft->m_fileId, 5, 0, 0, false)); - return ft; -} - -int CTelegramProto::FileCancel(MCONTACT, HANDLE hTransfer) -{ - auto *ft = (TG_FILE_REQUEST *)hTransfer; - delete ft; - return 1; -} - -int CTelegramProto::FileResume(HANDLE hTransfer, int, const wchar_t *pwszFilename) -{ - auto *ft = (TG_FILE_REQUEST *)hTransfer; - if (ft == nullptr) - return 1; - - ft->m_destPath = pwszFilename; - return 0; -} - //////////////////////////////////////////////////////////////////////////////////////// // RecvFile - writes down an incoming file transfer to db diff --git a/protocols/Telegram/src/proto.h b/protocols/Telegram/src/proto.h index 25c4bd9af3..95c98a0739 100644 --- a/protocols/Telegram/src/proto.h +++ b/protocols/Telegram/src/proto.h @@ -286,10 +286,6 @@ public: MCONTACT AddToList(int flags, PROTOSEARCHRESULT *psr); - HANDLE FileAllow(MCONTACT hContact, HANDLE hTransfer, const wchar_t *szPath) override; - int FileCancel(MCONTACT hContact, HANDLE hTransfer) override; - int FileResume(HANDLE hTransfer, int action, const wchar_t *szFilename) override; - INT_PTR GetCaps(int type, MCONTACT hContact = NULL) override; MEVENT RecvFile(MCONTACT hContact, PROTORECVFILE *pre) override; diff --git a/protocols/Telegram/src/utils.cpp b/protocols/Telegram/src/utils.cpp index 28b3204cf7..99887aa661 100644 --- a/protocols/Telegram/src/utils.cpp +++ b/protocols/Telegram/src/utils.cpp @@ -270,7 +270,7 @@ CMStringA CTelegramProto::GetMessageText(TG_USER *pUser, const TD::message *pMsg auto *pszFileName = pDoc->document_->file_name_.c_str(); PROTORECVFILE pre = {}; - pre.dwFlags = PRFF_UTF; + pre.dwFlags = PRFF_UTF | PRFF_SILENT; pre.fileCount = 1; pre.timestamp = time(0); pre.files.a = &pszFileName; diff --git a/src/core/stdfile/src/file.cpp b/src/core/stdfile/src/file.cpp index 159a421fe6..b1f8f3670f 100644 --- a/src/core/stdfile/src/file.cpp +++ b/src/core/stdfile/src/file.cpp @@ -358,6 +358,7 @@ static INT_PTR Proto_RecvFileT(WPARAM, LPARAM lParam) blob.write(dbei); } + bool bShow = (pre->dwFlags & PRFF_SILENT) == 0; MEVENT hdbe = db_event_add(ccs->hContact, &dbei); CLISTEVENT cle = {}; @@ -365,19 +366,21 @@ static INT_PTR Proto_RecvFileT(WPARAM, LPARAM lParam) cle.hDbEvent = hdbe; cle.lParam = pre->lParam; - if (g_plugin.bAutoAccept && Contact::OnList(ccs->hContact)) + if (bShow && g_plugin.bAutoAccept && Contact::OnList(ccs->hContact)) LaunchRecvDialog(&cle); else { Skin_PlaySound("RecvFile"); - wchar_t szTooltip[256]; - mir_snwprintf(szTooltip, TranslateT("File from %s"), Clist_GetContactDisplayName(ccs->hContact)); - cle.szTooltip.w = szTooltip; + if (bShow) { + wchar_t szTooltip[256]; + mir_snwprintf(szTooltip, TranslateT("File from %s"), Clist_GetContactDisplayName(ccs->hContact)); + cle.szTooltip.w = szTooltip; - cle.flags |= CLEF_UNICODE; - cle.hIcon = Skin_LoadIcon(SKINICON_EVENT_FILE); - cle.pszService = "SRFile/RecvFile"; - g_clistApi.pfnAddEvent(&cle); + cle.flags |= CLEF_UNICODE; + cle.hIcon = Skin_LoadIcon(SKINICON_EVENT_FILE); + cle.pszService = "SRFile/RecvFile"; + g_clistApi.pfnAddEvent(&cle); + } } return hdbe; -- cgit v1.2.3