如何强制 finder 同步扩展刷新可见项目?
How to force finder sync extension to refresh visible items?
我有一个显示文件状态的 Finder 同步扩展 (FSE)。有没有一种方法可以强制 FSE 再次请求 Finder window.
当前可见的所有 files/folder 的状态
Finder 同步扩展 (FSE) 具有回调 beginObservingDirectoryAtURL
和 endObservingDirectoryAtURL
,您可以在其中跟踪正在观察的路径(即通过 adding/removing 到 NSMutableSet
的路径).
此外,每当主应用程序通知 FSE 文件同步状态更新时,FSE 可以将接收到的状态缓存在字典中,其中文件路径映射到文件同步状态。
然后,当 FSE 收到来自主应用程序的刷新所有项目的消息时,FSE 应检查正在观察哪些路径,然后从主应用程序请求新状态以获取在观察集中具有前缀的所有缓存路径。此外,FSE 应该删除它的内部缓存,迫使它从主应用程序请求新观察到的文件(即当用户打开其他文件夹时)。
一旦 FSE 收到来自主应用程序的消息,它就可以调用
[[FIFinderSyncController defaultController] setBadgeIdentifier:syncStatus forURL:url]
并因此为 URL.
设置正确的同步状态图标
此解决方案假定 FSE 和主应用程序之间存在双向通信通道,这可以通过使用 NSDistributedNotificationCenter
或通过 CFMessagePort
来实现。
另请记住,可以有多个 FSE 实例 运行(即来自第 3 个应用程序的保存对话框)
我有一个显示文件状态的 Finder 同步扩展 (FSE)。有没有一种方法可以强制 FSE 再次请求 Finder window.
当前可见的所有 files/folder 的状态Finder 同步扩展 (FSE) 具有回调 beginObservingDirectoryAtURL
和 endObservingDirectoryAtURL
,您可以在其中跟踪正在观察的路径(即通过 adding/removing 到 NSMutableSet
的路径).
此外,每当主应用程序通知 FSE 文件同步状态更新时,FSE 可以将接收到的状态缓存在字典中,其中文件路径映射到文件同步状态。
然后,当 FSE 收到来自主应用程序的刷新所有项目的消息时,FSE 应检查正在观察哪些路径,然后从主应用程序请求新状态以获取在观察集中具有前缀的所有缓存路径。此外,FSE 应该删除它的内部缓存,迫使它从主应用程序请求新观察到的文件(即当用户打开其他文件夹时)。
一旦 FSE 收到来自主应用程序的消息,它就可以调用
[[FIFinderSyncController defaultController] setBadgeIdentifier:syncStatus forURL:url]
并因此为 URL.
此解决方案假定 FSE 和主应用程序之间存在双向通信通道,这可以通过使用 NSDistributedNotificationCenter
或通过 CFMessagePort
来实现。
另请记住,可以有多个 FSE 实例 运行(即来自第 3 个应用程序的保存对话框)