10

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

 3 years ago
source link: https://www.ubuntukylin.com/news/1629-cn.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

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

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

01 概述

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

02 文件操作的框架

1605776122.png

图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无法监测到变化事件。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK