Skip to content
This repository has been archived by the owner on Dec 11, 2021. It is now read-only.

[Feature Request] 希望以后能提供Android Telegram 或者Telegram X版本防撤回的功能 #19

Open
TaoChingChung opened this issue Jul 19, 2020 · 8 comments
Labels
enhancement New feature or request

Comments

@TaoChingChung
Copy link

希望以后能提供Android Telegram 或者Telegram X版本防撤回的功能
不知道能不能完成但如果真的有这个功能就好了哈哈

@SpriteOvO
Copy link
Owner

理论可行,但能力有限。我只会 Windows C++ 开发,不会移动端的

@SpriteOvO SpriteOvO added the enhancement New feature or request label Jul 20, 2020
@TaoChingChung
Copy link
Author

理论可行,但能力有限。我只会 Windows C++ 开发,不会移动端的

真的希望有大佬能跟你一起合作把移动端的防撤回拿下
辛苦了~!

@zhihuiyuze
Copy link

您好,linux似乎用不了:P

@SpriteOvO
Copy link
Owner

@zhihuiyuze 是的,因为 Linux 我也不擅长 :/

@xgmo9
Copy link

xgmo9 commented Dec 16, 2020

作者能讲讲原理吗,只学过java,c++完全看不懂😂😂😂也许我能为它移植到安卓出一份力

@SpriteOvO
Copy link
Owner

SpriteOvO commented Dec 16, 2020

@xgmo9

TG 桌面端在 History 类中有一个 destroyMessage 函数用于销毁消息(即撤回消息),会从其他两处地方调用,分别是主动删除消息和收到服务端消息撤回请求。

Hook 后者的调用处,判断是否是真正的消息(过滤入群、退群提示等),是则存入缓存中,由另一条线程循环处理。

另一条线程,循环遍历所有缓存中的消息,先取到消息的 TimeText (用于显示消息时间的字符串),判断字符串是否有效(TG 设计仅在当前打开的群/频道中,才会显示有效字符串),在 TimeText 字符串最前面拼接上 "deleted " 即可。

在桌面端中不同状态(是否已编辑、是否署名等)的消息, TimeText 由不同的 RuntimeComponent 管理,里面有一个算法,粗略看了下,重新实现可能比较复杂,于是 workaround 一下直接调用其 Index 函数,可以判断和计算消息状态的 Component 是否存在并得到指针。

加上标记后,需要修改消息宽度,否则会导致消息左移或右移。普通消息直接改消息的 MainView 宽度和 TimeText 的宽度即可,MainView 包含 MainViewMedia 的(通常是 贴纸、large emoji 或 随机 emoji)还需要修改 MainViewMedia 的宽度,回复消息还需要修改 HistoryMessageReply 中的 MaxReply 宽度。
(目前 master 分支中的最新提交对于回复贴纸和随机 emoji 处理有问题,会导致消息位移,会在下个版本中修复,代码目前还没 push 上来)

还 Hook 了 free 函数,原目的是想把强制销毁的消息(跳转到很久以前的消息会导致 TG 清空现有缓存中的所有消息)从插件的缓存中移出去,但是目前来看作用不大,以后有空再尝试改进吧。

大概就这么多。但是移动端如果要做,肯定会和桌面端的实现有出入(甚至我怀疑移动端处理起来可能会更简单,盲猜至少宽度不会这么复杂

@YIRUIJIE
Copy link

YIRUIJIE commented Jan 7, 2021

Android Telegram防撤回,这个想法不错!在之前用过QQ的撤回版本,很好用很有趣,如果能够实现在Android TG上,这将是很有趣很实用的一个功能!

@SpriteOvO
Copy link
Owner

@zhihuiyuze 插件准备尝试支持 Linux,相关信息或进度可以到 #39 issue 进行跟踪。

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

5 participants