English | 简体中文
Peony 文件管理器是 UKUI 桌面环境的默认文件管理器,它可以很容易的管理、操作和修改文件和目录。它基于 GIO 和 Qt 构建了一套接口,并具有其自己插件机制。
本项目的主旨是为 Peony 文件管理器提供文件预览特性的支持与实现,使其能够在右侧预览窗体中对不同类型的文件支持文件内容的预览。
- 对于文本类型的文件,比如 PDF、txt 等,支持简单的编辑功能;
- 对于图片类型文件,比如 PNG、JPEG 等,支持简单的方向、大小调整的编辑功能;
- 对于视频、音频类型的文件,支持快速的播放预览;
- 对于压缩文件类型文件,支持对其包含内容的预览;
必要
- C++,基础
- 数据结构,基础
可选
- Qt5,基础
- ECMAScript,基础
文本数据解析;音视频抽帧;XML 解析;ffmpeg;
文件管理器预览特性的技术关注点在于文件类型支持广度与预览性能。
对于文件类型支持的广度,由于现代操作系统中文件类型繁多,而且数据格式大相迳庭,需要对其中的一部分作出特殊的解析与处理。对于性能问题,由于文件管理器的使用场景中常见大文本、长时长音视频,在设计它们的数据解析时,需要考虑到内存占用以及异步问题。
对于 PDF、doc/docx、rtf 这类文件,我们希望在实现其预览时并非以解析成图片的形式来进行预览内容的展示,而是将其转成文本数据以便可以快速对它们的内容进行选择和复制。在现在的 Peony 中,预览 PDF 便是通过 poppler 生成图片来进行,在网页浏览服务中,有许多类似 pdf.js 这样的库是提供了这类文件文本解析支持的。进一步的,可以考虑使用 node.js 的现成生态结合 Qt WebEngine 来进一步的做这些工作。
-
文本文件预览和编辑
文件类型 MIME type 预览支持 编辑支持 文本文件 text/plain ☐ ☐ PDF application/pdf ☐ ☐ doc 文件 application/msword ☐ ☐ docx 文件 application/vnd.openxmlformats-officedocument.wordprocessingml.document ☐ ☐ OpenDocument 文件 application/vnd.oasis.opendocument.text ☐ ☐ CSV 文件 text/csv ☐ ☐ JSON 文件 application/json ☐ ☐ HTML 文件 text/html ☐ ☐ JavaScript 源代码文件 text/javascript ☐ ☐ PHP 源代码文件 application/x-httpd-php ☐ ☐ 富文本文件 application/rtf ☐ ☐ shell 脚本 application/x-sh ☐ ☐ -
图像文件预览和编辑
文件类型 MIME type 预览支持 大小编辑支持 旋转支持编辑 icon 文件 image/vnd.microsoft.icon ☐ ☐ ☐ JPEG 图片 image/jpeg ☐ ☐ ☐ PNG 图片 image/png ☐ ☐ ☐ SVG 图片 image/svg+xml ☐ ☐ ☐ WEBP 图片 image/webp ☐ ☐ ☐ -
音视频文件预览
File type MIME type Preview Support aac 音频文件 audio/aac ☐ MP3 音频文件 audio/mpeg ☐ CD 音频文件 application/x-cdf ☐ OGG 音频文件 audio/ogg ☐ Opus 音频文件 audio/opus ☐ wav 音频文件 audio/wav ☐ WEBM 音频文件 audio/webm ☐ AVI 视频文件 video/x-msvideo ☐ MP4 视频文件 video/mp4 ☐ MPEG 视频文件 video/mpeg ☐ OGG 视频文件 video/ogg ☐ WEBM 视频文件 video/webm ☐ -
压缩文件预览
文件类型 MIME type 预览支持 BZ 压缩包 application/x-bzip ☐ BZ2 压缩包 application/x-bzip2 ☐ GZ 压缩包 application/gzip ☐ RAR 压缩包 application/vnd.rar ☐ TAR 压缩包 application/x-tar ☐ ZIP 压缩包 application/zip ☐
目前将该插件的实现划分为了多个阶段:
一至两周,插件结构的实现,包含图形窗体、解析服务的抽象等。
基础文本文件的解析显示,诸如 txt、源代码等。
图片、音频的显示预览。
视频的抽帧播放,图片的大小、方向快速编辑实现。
复杂文档的文本解析。
本文使用授权协议 Creative Commons Attribution-ShareAlike 4.0 International License。