summaryrefslogtreecommitdiff
path: root/protocols
diff options
context:
space:
mode:
authorGeorge Hazan <george.hazan@gmail.com>2023-12-01 18:31:36 +0300
committerGeorge Hazan <george.hazan@gmail.com>2023-12-01 18:31:40 +0300
commit22fb10cc778884cd1b80ba6231c2ade7cb9ec03c (patch)
tree28a4ba288ca78b0f554b4f3f6820870ef8a77719 /protocols
parent1d03e3af5e2b5f1ab80e250b11323a2c27fc1bcf (diff)
fixes #4005 (ICQ + Newstory: Старые ссылки на файлы нельзя сконвертировать в оффлайн файлы)
Diffstat (limited to 'protocols')
-rw-r--r--protocols/ICQ-WIM/src/menus.cpp2
-rw-r--r--protocols/ICQ-WIM/src/proto.cpp32
-rw-r--r--protocols/ICQ-WIM/src/server.cpp5
-rw-r--r--protocols/ICQ-WIM/src/stdafx.h2
-rw-r--r--protocols/ICQ-WIM/src/utils.cpp16
5 files changed, 36 insertions, 21 deletions
diff --git a/protocols/ICQ-WIM/src/menus.cpp b/protocols/ICQ-WIM/src/menus.cpp
index 58a118bf36..ddfa5f0745 100644
--- a/protocols/ICQ-WIM/src/menus.cpp
+++ b/protocols/ICQ-WIM/src/menus.cpp
@@ -75,6 +75,6 @@ int CIcqProto::OnPrebuildMenu(WPARAM, LPARAM lParam)
{
auto *dbei = (DB::EventInfo *)lParam;
ptrW wszText(DbEvent_GetTextW(dbei, CP_UTF8));
- Menu_ShowItem(hmiConvert, 0 == mir_wstrncmp(wszText, L"https://files.icq.net/get/", 26));
+ Menu_ShowItem(hmiConvert, fileText2url(wszText.get()));
return 0;
}
diff --git a/protocols/ICQ-WIM/src/proto.cpp b/protocols/ICQ-WIM/src/proto.cpp
index cf5c5763e0..915dbd0832 100644
--- a/protocols/ICQ-WIM/src/proto.cpp
+++ b/protocols/ICQ-WIM/src/proto.cpp
@@ -237,21 +237,25 @@ void __cdecl CIcqProto::OfflineFileThread(void *pParam)
DB::EventInfo dbei(ofd->hDbEvent);
if (m_bOnline && dbei && !strcmp(dbei.szModule, m_szModuleName) && dbei.eventType == EVENTTYPE_FILE) {
DB::FILE_BLOB blob(dbei);
- MCONTACT hContact = db_event_getContact(ofd->hDbEvent);
- if (auto *pFileInfo = RetrieveFileInfo(hContact, fileText2url(blob.getUrl()))) {
- if (!ofd->bCopy) {
- auto *pReq = new AsyncHttpRequest(CONN_NONE, REQUEST_GET, pFileInfo->szUrl, &CIcqProto::OnFileRecv);
- pReq->pUserInfo = ofd;
- pReq->AddHeader("Sec-Fetch-User", "?1");
- pReq->AddHeader("Sec-Fetch-Site", "cross-site");
- pReq->AddHeader("Sec-Fetch-Mode", "navigate");
- Push(pReq);
- return; // ofd is used inside CIcqProto::OnFileRecv, don't remove it
- }
- ofd->wszPath.Empty();
- ofd->wszPath.Append(_A2T(pFileInfo->szUrl));
- ofd->pCallback->Invoke(*ofd);
+ CMStringW wszUrl;
+ if (fileText2url(blob.getUrl(), &wszUrl)) {
+ MCONTACT hContact = db_event_getContact(ofd->hDbEvent);
+ if (auto *pFileInfo = RetrieveFileInfo(hContact, wszUrl)) {
+ if (!ofd->bCopy) {
+ auto *pReq = new AsyncHttpRequest(CONN_NONE, REQUEST_GET, pFileInfo->szUrl, &CIcqProto::OnFileRecv);
+ pReq->pUserInfo = ofd;
+ pReq->AddHeader("Sec-Fetch-User", "?1");
+ pReq->AddHeader("Sec-Fetch-Site", "cross-site");
+ pReq->AddHeader("Sec-Fetch-Mode", "navigate");
+ Push(pReq);
+ return; // ofd is used inside CIcqProto::OnFileRecv, don't remove it
+ }
+
+ ofd->wszPath.Empty();
+ ofd->wszPath.Append(_A2T(pFileInfo->szUrl));
+ ofd->pCallback->Invoke(*ofd);
+ }
}
}
diff --git a/protocols/ICQ-WIM/src/server.cpp b/protocols/ICQ-WIM/src/server.cpp
index a03dfaddf0..aa5f696004 100644
--- a/protocols/ICQ-WIM/src/server.cpp
+++ b/protocols/ICQ-WIM/src/server.cpp
@@ -183,7 +183,8 @@ IcqFileInfo *CIcqProto::RetrieveFileInfo(MCONTACT hContact, const CMStringW &wsz
bool CIcqProto::CheckFile(MCONTACT hContact, CMStringW &wszText, IcqFileInfo *&pFileInfo)
{
- if (wszText.Left(26) != L"https://files.icq.net/get/")
+ CMStringW wszUrl;
+ if (!fileText2url(wszText, &wszUrl))
return false;
pFileInfo = nullptr;
@@ -192,8 +193,6 @@ bool CIcqProto::CheckFile(MCONTACT hContact, CMStringW &wszText, IcqFileInfo *&p
if (idx != -1)
wszText.Truncate(idx);
- CMStringW wszUrl(fileText2url(wszText));
-
// is it already downloaded sticker?
CMStringW wszLoadedPath(FORMAT, L"%s\\%S\\Stickers\\STK{%s}.png", VARSW(L"%miranda_avatarcache%").get(), m_szModuleName, wszUrl.c_str());
if (!_waccess(wszLoadedPath, 0)) {
diff --git a/protocols/ICQ-WIM/src/stdafx.h b/protocols/ICQ-WIM/src/stdafx.h
index b27b08bece..e7cc7ff3e9 100644
--- a/protocols/ICQ-WIM/src/stdafx.h
+++ b/protocols/ICQ-WIM/src/stdafx.h
@@ -108,6 +108,6 @@ void RefreshGroups(void);
wchar_t* time2text(time_t time);
wchar_t* time2text(DBVARIANT *dbv);
-CMStringW fileText2url(const CMStringW &wszText);
+bool fileText2url(const CMStringW &wszText, CMStringW *res = nullptr);
extern bool g_bSecureIM, g_bMessageState;
diff --git a/protocols/ICQ-WIM/src/utils.cpp b/protocols/ICQ-WIM/src/utils.cpp
index b6712ce8c9..e0c39c27a6 100644
--- a/protocols/ICQ-WIM/src/utils.cpp
+++ b/protocols/ICQ-WIM/src/utils.cpp
@@ -261,9 +261,21 @@ void CIcqProto::setId(MCONTACT hContact, const char *szSetting, __int64 iValue)
/////////////////////////////////////////////////////////////////////////////////////////
-CMStringW fileText2url(const CMStringW &wszText)
+bool fileText2url(const CMStringW &wszText, CMStringW *res)
{
- return wszText.Mid(26);
+ if (!mir_wstrncmp(wszText, L"https://files.icq.net/get/", 26)) {
+ if (res)
+ *res = wszText.Mid(26);
+ return true;
+ }
+
+ if (!mir_wstrncmp(wszText, L"http://files.icq.net/get/", 25)) {
+ if (res)
+ *res = wszText.Mid(25);
+ return true;
+ }
+
+ return false;
}
/////////////////////////////////////////////////////////////////////////////////////////