ChurchTao / clipboard-rs

Cross-platform clipboard API (text | image | rich text | html | files | monitoring changes) | 跨平台剪贴板 API(文本|图片|富文本|html|文件|监听变化) Windows,MacOS,Linux
https://docs.rs/clipboard-rs
MIT License
47 stars 7 forks source link

linux 下 get_files()一直拿不到结果 #30

Closed anthinkingcoder closed 1 month ago

anthinkingcoder commented 1 month ago

The problem | 问题描述

我用的是国产化 uos 操作系统 当清掉剪贴板内容后,立马执行 get_files()获取剪贴板文件路径,有一定概率没有返回结果,这样会导致程序卡死,我看 process_event 的代码是有超时,但是没用到,这个可以加上吗,还是有其他的方式解决

Release version | 版本

1.7

Operating system | 操作系统

uos

Logs | 日志

No response

ChurchTao commented 1 month ago

可以贴一段能复现bug的demo代码吗,我想去debug看下

ChurchTao commented 1 month ago

@anthinkingcoder https://github.com/ChurchTao/clipboard-rs/blob/0329c0d511636cd873aac64994f9867c75ef00e4/src/platform/x11.rs#L327None 替换成 Some(Duration::from_millis(500)), 试试?

anthinkingcoder commented 1 month ago

可以贴一段能复现bug的demo代码吗,我想去debug看下

是在国产化的操作系统 uos 复现的,代码很简单,也不是必现,我是在 electron 主进程里调用的,通过 addon 的方式,将rust的api打进 addon里,里面调用的就是 clipboard-rs,只用到了读写文件,因为 electron 自己的 clipboard api 有读写文本。

复现流程: 调用 electron 的 clipboard,clipboard.writeText(""),然后立马调用 clipboard-rs 的 get_files,就存在一定概率没有响应,直接就导致 electron 应用 卡死 复现系统: win 没有这个问题, 但国产化操作系统有这个问题

anthinkingcoder commented 1 month ago

另外我还遇到过一个问题,也是概率性的,win 上遇到的。 使用场景:

  1. 从云端下载文件,下载好后,然后调用 set_files 将文件路径写入剪贴板,调用前,已经检查过文件已经下载完成,本地路径也有。
  2. 调用 get_files 的时候,也打印出来了这些文件
  3. 但就是粘贴的时候出不来。

目前我也是临时解决: 我在 set_files 前,先调用 electron 的 writeText(""),清空一下剪贴板,发现就没有上面的问题。

anthinkingcoder commented 1 month ago

@anthinkingcoder

https://github.com/ChurchTao/clipboard-rs/blob/0329c0d511636cd873aac64994f9867c75ef00e4/src/platform/x11.rs#L327

None 替换成 Some(Duration::from_millis(500)), 试试?

这个我试过,是没问题,不会导致卡死

ChurchTao commented 1 month ago

@anthinkingcoder https://github.com/ChurchTao/clipboard-rs/blob/0329c0d511636cd873aac64994f9867c75ef00e4/src/platform/x11.rs#L327

None 替换成 Some(Duration::from_millis(500)), 试试?

这个我试过,是没问题,不会导致卡死

了解了,我发个补丁版本~

ChurchTao commented 1 month ago

另外我还遇到过一个问题,也是概率性的,win 上遇到的。 使用场景:

  1. 从云端下载文件,下载好后,然后调用 set_files 将文件路径写入剪贴板,调用前,已经检查过文件已经下载完成,本地路径也有。
  2. 调用 get_files 的时候,也打印出来了这些文件
  3. 但就是粘贴的时候出不来。

目前我也是临时解决: 我在 set_files 前,先调用 electron 的 writeText(""),清空一下剪贴板,发现就没有上面的问题。

这个我知道为啥了,因为系统在粘贴时,如果剪贴板中有多个格式的话,可能会有优先级的问题,假如只有files,应该就只会粘贴文件了,这个我看下有没有优化的方法

ChurchTao commented 1 month ago

@anthinkingcoder 先把无限循环的给修了 https://github.com/ChurchTao/clipboard-rs/pull/31