Ark is open source universal GUI tool for managing archives. It supports many archive types, such as 7z, zip, rar, tar etc. For now it allows only adding files and folders to root, extracting and deleting them. As it happens that a user needs to edit archive content, besides adding and deleting, there has been a proposal to extend Ark functionality in order to allow users to add files to some destinations, rename, move and copy them. So my GSoC task is to implement those features.
My first task, which was not related to the proposal directly, was to refactor two fundamental classes used to store metadata for archive entries. It was completed merging the classes into one and also choosing new way to store metadata: QProperty system was utilized. For now all the features described in the proposal are implemented and functional.
- Adding entries to specific destination. The existing action for adding files to root was changed, so it can now be used for adding files everywhere. If user selects a directory and uses the action, files will be added to the selected destination. If there is no selection or a file or many entries are selected, files will be added to root.
- Renaming entries. Renaming allows user to change names of both files and folders. As in Dolphin, it can be called via F2 shortcut and it is done in the inline lineedit widget, what makes Ark feel consistent with the main KDE file manager. There are also filename checks provided, which limit user from entering slashes or use "." or ".." as filename.
- Moving and copying entries. As in typical file managers, moving and copying are provided together with "paste" action, which are accessible via CTRL+X, CTRL+C and CTRL+V shortcuts respectively. User can move or copy files from different folders (which are expandable in the tree view) and paste them to the same destination at once. A folder can be copied into itself, but can not be moved. There are also checks for conflicting filenames implemented: user won't be able to copy or move files into the folder, which has entries with the same names - that could lead to data loss.
# git diff master gsoc2016/master --stat 88 files changed, 4193 insertions(+), 1664 deletions(-)
Pasting entries. Here you can see that cutting one folder recursively selects all the inner entries and makes their icons grayed:
Renaming entries is done via inline editing: