dongyuwei
dongyuwei
@eleveni386 uin不会变,但是每条微信消息中,`FromUserName`,`ToUserName`, `MMPeerUserName`,`MMActualSender`这些关键性的字段不同的登录session中都会发生变化。记录历史记录最需要的`MMPeerUserName`这个字段是不稳定的,不同session中不一样。就算记录下来,重新显示时还需要_更新_这些字段才能正确对应上。 我的 fork https://github.com/dongyuwei/electronic-wechat 借鉴了 @iamcc 同学的部分思路,目前已经能保存文本和表情消息历史记录(图片消息还有问题),具体看 https://github.com/dongyuwei/electronic-wechat/commit/594693ec91c3ce9c61491895dd012ca514a535a8 这个提交。我的实现依赖于web微信暴露出的一个全局变量`window._contacts` (保存消息时通过消息的 `MMPeerUserName` 字段查找对应的Contact,然后记录其 `NickName` 和 `RemarkName` ,这2个字段基本是稳定不变的;显示历史时反向查找)。目前没有考虑不同账号登录的情形,如果要加上这个考量,只要把储存的key放在当前登录用户uid命名空间内即可。 如果哪天 `window._contacts` 被微信干掉了,我们还可以依赖 HTTP 协议分析和 DOM api 来获取需要的信息。
如果把 electronic-wechat/package.json 中 `"start": "electron src/main.js",` 改成 `"start": "npm install && electron src/main.js",` 就会自动安装依赖了。
各位,我的fork https://github.com/dongyuwei/electronic-wechat 目前已经达到可用状态了,我测试了文本,图片,表情这几类聊天消息的存储和重新展现。存储使用IndexedDB(dexie.js),存储时按NickName+RemarkName及Content建了索引,所以理论上支持按照内容的关键词来搜索聊天历史记录。 有兴趣的可以看看,欢迎提出优化代码的意见和建议。 
@geeeeeeeeek 功能可用不代表代码质量可接受,等我重构到自己满意了再提 Pull Request吧,谢谢。 @ripples-alive 改昵称了会有影响。可以通过db migration来迁移数据,这个理论上可行,实际上可能比较麻烦。效率应该不会有问题,IndexedDB值得信赖,咱还用了索引。目前存储的聊天消息中无用冗余字段比较多,如果简化一下应该能省不少存储空间。
@ripples-alive 好问题,我还没有考虑这么多,目前是全部显示。数据多了怎么显示是个大问题。
@eleveni386 因为微信官方mac客户端可以记录聊天历史了,所以一直就没有动力继续了。我那个实现还有些bug。
我周末研究一下。谢谢反馈!
这个问题应该不难解决。但是我自己从来不用dark mode,所以没有动力去解决它,最近也没有时间看。欢迎PR。
https://github.com/dongyuwei/hallelujahIM/releases/tag/v1.5.5 解决了在自动添加空格设置打开的情况下,输入单个字符时不自动附加空格问题。 其它问题等有时间再看吧。
https://github.com/dongyuwei/hallelujahIM/releases/tag/v1.5.6 解决了“输入数字也会自动加空格”的问题。