Skip to content

Releases: qzz0518/Dukou

0.1.14

Choose a tag to compare

@qzz0518 qzz0518 released this 23 Sep 06:43

更新日志

  • Dukou 现在也显示在程序坞里,点图标即可打开设置;不需要的话可以在「通用」里关掉。
  • 修复 macOS 27 上「手动从访达中选择…」点击后没有反应的问题。
  • 修复 macOS 27 上设置窗口和设置向导上下多出空白的问题。

Changelog

  • Dukou now also sits in the Dock; click its icon to open Settings. Turn it off in General if you prefer the menu bar only.
  • Fixed "Choose in Finder…" doing nothing on macOS 27.
  • Fixed blank strips above and below the Settings window and the setup guide on macOS 27.

0.1.13

Choose a tag to compare

@qzz0518 qzz0518 released this 21 Sep 14:17

更新日志

  • 快捷转发页重新排版:选项更紧凑,「开始」按钮固定在窗口底部。
  • 新增续聊:同一个群再次发送时,自动提示只处理上次之后的新消息;每个群可以记住自己的 Prompt。
  • 快捷微信转发存到文件夹时可选 Markdown,得到笔记加附件的文件夹,可直接放进 Obsidian。

Changelog

  • The quick forward pages are laid out afresh: tighter options, and the Start button stays at the bottom of the window.
  • New: Resume. Sending the same chat again asks for only the messages after the last export, and each chat can remember its own prompt.
  • Saving a quick WeChat forward to a folder can produce Markdown: a note with its attachments, ready for an Obsidian vault.

0.1.12

Choose a tag to compare

@qzz0518 qzz0518 released this 15 Sep 18:35

更新日志

  • 快捷微信转发新增「保存图片」「保存视频」开关,关掉后导出只保留文字记录,不带对应的图片或视频文件。
  • 修复图片较多的群导出时报「无法准确选中这一批消息」的问题。

Changelog

  • Quick WeChat forward can now leave out photos and videos: turn off Save photos or Save videos and the export keeps the chat text without those files.
  • Fixed "This batch could not be selected accurately" when exporting a group with many photos.

0.1.11

Choose a tag to compare

@qzz0518 qzz0518 released this 09 Sep 07:43

更新日志

  • 快捷微信转发新增「HTML 预览」。勾选后,导出的 ZIP 里会多一个 index.html,完整解压后双击就能像聊天界面一样看记录:搜索昵称和正文、按日期跳转、放大图片、直接播放音视频。
  • 预览会自动把你自己的消息放在右侧;认不出来时,可以在右上角手动选。

Changelog

  • Quick WeChat forward can now include an HTML preview. Tick it and the ZIP gains an index.html: unpack the whole ZIP, open it, and read the chat as bubbles — search by sender or text, jump by date, zoom images, play audio and video inline.
  • Your own messages are placed on the right automatically, and there is a picker in the top corner when they cannot be detected.

0.1.10

Choose a tag to compare

@qzz0518 qzz0518 released this 08 Sep 19:11

更新日志

  1. 朋友圈里的广告不再让整轮导出失败。广告帖没有正常的作者,Dukou 读到它就会按「读不到作者就停下、不猜」的规则中断——那条规则对加载失败的帖子是对的,对本来就没有作者的广告则不然,结果是范围内只要有一条广告就一条都导不出来。现在遇到广告会跳过它继续往下读。广告标记在辅助功能树里根本不存在,所以判断依据是它自己的弹窗:必须同时有「赞助商提供的广告信息」这段说明和「关闭该广告」这个按钮,才算广告——只是正文里提到广告的帖子不会被误删。探测在点头像之前进行(广告的头像会跳去广告主网站),弹窗一律用 ESC 关掉,绝不会去点「关闭该广告」,那会把广告从你自己的朋友圈里移除。

Changelog

  1. A sponsored post no longer ends the whole export. An ad has no author the way an ordinary post does, so reading one raised the author error — the deliberate refusal to guess, which is right for a post whose author failed to load and wrong for one that never had an author. A single ad anywhere in the requested range meant nothing was exported. Ads are now skipped and the run continues. The ad badge is absent from the accessibility tree, so the evidence is the ad's own popover: both the 赞助商提供的广告信息 notice and the 关闭该广告 button must be present, in those roles, before anything is treated as an ad — a post that merely mentions ads is not dropped from your export. The probe happens before the avatar is touched, since an ad's avatar navigates to the advertiser's site, and the popover is always dismissed with Esc, never by pressing 关闭该广告, which would remove the ad from your own feed.

0.1.9

Choose a tag to compare

@qzz0518 qzz0518 released this 08 Sep 14:59

更新日志

  1. 新增「快捷朋友圈转发」(实验)。填要导出的条数,图片和视频可以分别选。Dukou 把作者、微信显示的时间和完整正文按时间线整理成 TXT,媒体放进同一个 ZIP 的 media/ 文件夹,粘给应用或存进文件夹。读不到作者时会停下来,不猜——记错人比少一条更糟;没能加载的内容会写进 TXT,而不是悄悄丢掉。图片和视频要逐个打开再下载,速度很慢,这段时间请不要碰电脑,按 ESC 可以中断。采集媒体时会临时借用剪贴板,结束后如果你已经复制了新东西,就不再覆盖。
  2. 两种快捷转发都能直接存进文件夹。以前只能粘给应用,导出本身是目的时(留档、转给别人、喂给读目录的工具)没法用。现在目标是应用或文件夹,同一个选择器里挑;存完自动打开目录,重名不覆盖而是改名。
  3. 消息条数不再有上限,可以合并成一个 ZIP。每 100 条一批连续导出,界面按每 100 条约 5 秒预估耗时;可以把多批解压后重新打包成一个 ZIP,向应用转发超过 500 条时会主动建议——那正是一次粘贴很多文件开始出问题的地方。合并或交付中断时原始 ZIP 仍留在记录里。
  4. 文件名统一。聊天记录和朋友圈都按「来源 + 内容时间范围 + 条数」命名。只有起止都拿得到时才用内容时间;否则按导出时间标注——朋友圈只有「3 小时前」这种相对时间时,能诚实说的只有这个。
  5. README 精简。删掉了构建命令、目录结构这些开发内容,剩下的说明也改成不写代码的人能看懂的话。

Changelog

  1. Quick Moments forward (experimental). Choose how many recent posts to export, with photos and videos as separate options. Authors, the times WeChat displays and the full text go into a chronological TXT, with the media in a media/ folder inside one ZIP, pasted into an app or saved to a folder. A post whose author cannot be read stops the run rather than being guessed at — a wrong attribution is worse than a missing post — and anything that could not be loaded is written into the text instead of quietly dropped. Photos and videos have to be opened and downloaded one at a time, which is slow, so leave the computer alone while it runs; ESC stops it. The clipboard is borrowed during collection and is not restored over anything you copied in the meantime.
  2. Either quick forward can now land in a folder. Pasting into an app was the only ending, which ruled out the case where the export itself is the point — an archive you keep, hand to someone, or feed to something that reads a directory. A destination is now an app or a folder, picked the same way; folders open after saving, and a name collision is worked around rather than overwritten.
  3. No cap on the message count, and batches can be merged. Batches of 100 export back to back and the pane estimates five seconds per hundred. A run can extract those batches and repack them as a single ZIP, which is offered past 500 messages — the point where handing an app many files starts failing on its own. The original ZIPs stay in history if merging or delivery stops.
  4. One naming scheme. Chat and Moments exports are both named by source, the span the content covers and the count. Only a range with both endpoints describes content; anything else is dated by export time, which is all a Moments post with a relative timestamp can honestly claim.
  5. A shorter README. The build commands and source tree are gone, and what remains is written for people who do not read Swift.

0.1.8

Choose a tag to compare

@qzz0518 qzz0518 released this 07 Sep 02:52

更新日志

  1. 右键那一下没生效不再让整轮转发失败。滚动刚停下时右键,微信有时会把菜单弹出来,但这一下并没有真的选中消息;而 Qt 的菜单项不提供 AXPress,只能合成点击,弹窗坐标还在动的时候点下去就会落空。现在「右键 → 多选 → 合并转发」整段都会重试,最多四次,消息气泡的左右两个落点轮着来,每次重试都按当前的行位置重新定位锚点;菜单项也要连续两次扫描位置一致,才会被点。

Changelog

  1. A right-click that does not take no longer ends the run. Just after a scroll settles, WeChat sometimes shows the context menu without the click having actually landed on the message; and because Qt's menu items expose no AXPress, the press has to be a synthetic click, which misses while the popup's coordinates are still moving. The whole right-click → 多选 → 合并转发 transition now retries — up to four times, alternating between the two click points on the bubble and re-locating the anchor row from the current geometry each time — and a menu item is only clicked once two consecutive scans agree on where it is.

0.1.7

Choose a tag to compare

@qzz0518 qzz0518 released this 07 Sep 00:54

更新日志

  1. 转发途中群里来新消息不再中断。以前的定位逻辑假设聊天列表只在被滚动时才会变:新消息一到,可见的消息行增减、位置反向移动,就会被判成「跟不上了」而停下——活跃的群里这不是偶发,是常态。现在改成按两次快照之间仍然相同的那段消息来重新定位,重复内容分不清时就取离原位置最近的那个。

Changelog

  1. A message arriving mid-run no longer stops the forward. The tracker assumed the list only moves when it is scrolled: an arrival adds or pushes out visible rows and can reverse the direction things moved in, and any of that used to end the run — in an active group that is the normal case, not an edge one. It now re-locates itself by the longest stretch of messages the two snapshots still share, falling back to whichever position is nearest the previous one when repeated rows make that ambiguous.