【麒麟在线讲堂】Peony文件操作介绍

发布时间:2020-11-19 18:53:12 点击次数:128

本文主要介绍Peony文件管理器中的文件操作流程,及其相关的类之间的关系。

01 概述

本文主要介绍Peony文件管理器中的文件操作流程,及其相关的类之间的关系。

02 文件操作的框架

图1 文件操作框架图

文件操作类之间的关系如图1所示:

  • FileOperationUtils类对文件操作进行封装,对外提供文件操作的接口,并通过FileOperationManager完成对文件的操作。

  • FileOperationManager是文件操作的管理类,负责文件操作的执行、进度更新、错误弹窗提示及其其他的一些操作。

  • FileOperation是具体的文件的操作,包括:创建、删除、创建link、删除到回收站、还原等。

  • progressBar进度条提示文件操作的进度。

  • errordialog错误提示窗口,当存在冲突或错误的时候,弹出对应的提示窗口。

  • other是FileOperationManager其他的一些辅助功能。

2.1 文件操作封装类

类FileOperationUtils对文件/文件夹的基本操作做了封装,对外提供文件/文件夹操作的接口。这些接口包括:文件/文件夹的创建、删除到回收站、永久删除、回收站的还原、创建link和重命名等。

在菜单或者是快捷键操作时就会调用该接口,比如右键菜单中的删除、创建等。

类FileOperateUtils中的具体操作是通过FileOperationManager类具体执行的。

2.2 文件操作管理

文件操作包括:永久删除、删除到回收站、还原、清空回收站、复制、移动、创建和重命名等。

  • CreateTemplateOperation类实现空文件/空文件夹、模板文件的创建功能。

  • FileCopyOperation类实现文件/文件夹的复制操作。

  • FileDeleteOperation类实现文件的永久删除和清空回收站的功能。

  • FileLinkOperation类创建link操作。

  • FileMoveOperation文件/文件夹的移动操作。

  • FileRenameOperation完成文件/文件夹的重命名,即改变文件或者文件夹的名字。

  • FileTrashOperation将文件/文件夹删除到回收站。

  • FileUntrashOperation将文件/文件夹从回收站还原到原来的位置。

上述的文件操作都是由FileOperationManager类进行管理,其主要功能:文件操作执行、进度条更新和错误提示。

文件操作包括执行、撤销与恢复,文件的具体操作既可以多线程执行,也可以单线程执行,执行文件的操作是否为单线程是可以设置的,如果是单线程执行,将会影响文件的并发操作。

文件操作进度更新,文件操作的类将操作进度通过信号发送给 FileOperationManager,然后转发给进度条,更新进度。

错误提示,当文件操作出现错误的时候,通过发送信号(errored)将错误信息传递给FileOperationManager,然后弹出提示对话框。

文件操作的执行、撤销和恢复是通过菜单或者快捷键进行的,比如ctrl+z触发撤销操作,ctrl+y恢复撤销的操作。

2.3 文件操作进度条

文件操作的进度条如图2所示,它是由主进度条、下拉按钮和下拉进度条组成的。

图2 进度条

进度条涉及的主要类:

  • MainProgressBar类对应图2中主进度条。

  • OtherButton类对应图2中的下拉按钮。

  • ProgressBar对应图2中的下拉进度条,目前程序限制最多可以显示2个下拉进度条。

  • FileOperationProgressBar负责进度条的管理,主要是进度条的布局,主进度条进度的更新,以及主进度条的切换等。

进度信息的传递流程如图3所示,以文件拷贝为例:

拷贝文件的gio函数g_file_copy通过回调函数发送出信号FileProgressCallback给FileOperationManager,然后触发progressbar的槽函数updateProgress,更新对应progressBar的进度,同时向FileOperationProgressBar发送信号sendValue,触发MainProgressBar的槽函数updateValue,更新主进度条的进度,如果现在主进度条显示的是该 progressBar 的进度的话。 

图3 进度信息传递流程

2.4 文件操作提示窗口

当文件/文件夹操作出现错误的时候,会弹出图4所示窗口。提示操作遇到的错误信息,对应的类FileOperationErrorDialogWarning。

图4 操作错误

当操作出现冲突的时候,会弹出如图5所示的窗口。该窗口会提供取消、忽略、覆盖、备份等选择。对应的类FileOperationErrorDialogConflict。

图5 操作冲突

冲突备份时,默认的备份方式是在文件/文件夹名字的后面添加数字,如果不想用这种方式可以自己重命名。重命名的窗口如图6所示,对应的类FileRenameDialog。

图6 重命名

下面以copy操作出现冲突为例说明窗口的弹出(信号的发送)流程,如图7所示:

图7 窗口弹出信号发送流程

当存在文件冲突时,类FileCopyOperation会发出errored信号,FileOperationManager类接收到errored信号时,会根据错误类型弹出冲突的窗口,并且阻塞操作流程,等待用户做出选择,并将选择的结果传递给FileCopyOperation类。

之所以弹出的窗口会阻塞操作流程,是因为FileOperationManager注册的槽函数具有BlockingQueuedConnection属性。

2.5 其它

当文件操作完成时,FileOperationManager会通过FIleWatch向view/model发出目录更新的信号,即能够弥补FileWatch无法监测到变化事件。