From 6b06d315f307367efe13a50e6916d7c9293d7417 Mon Sep 17 00:00:00 2001 From: nauman-tintash Date: Thu, 15 Feb 2018 17:23:27 +0500 Subject: [PATCH 1/2] Added the feature to enable only selected file formats for selection as described in issue #40 --- FileExplorer/FileExplorer/Configuration.swift | 17 ++++++++++++++++- .../DirectoryContentViewModel.swift | 6 ++++++ .../FileExplorerViewController.swift | 7 ++++++- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/FileExplorer/FileExplorer/Configuration.swift b/FileExplorer/FileExplorer/Configuration.swift index 4d94b07..f785759 100644 --- a/FileExplorer/FileExplorer/Configuration.swift +++ b/FileExplorer/FileExplorer/Configuration.swift @@ -41,11 +41,26 @@ struct ActionsConfiguration { struct FilteringConfiguration { var fileFilters: [Filter] var ignoredFileFilters: [Filter] + var selectableFileExtensions: [String] } extension FilteringConfiguration { init() { - self.init(fileFilters: [Filter](), ignoredFileFilters: [Filter]()) + self.init(fileFilters: [Filter](), ignoredFileFilters: [Filter](), selectableFileExtensions: [String]()) + } + + func isSelectableFileExtension(fileItem: Item) -> Bool{ + var isSelectable = true + if selectableFileExtensions.count > 0 { + isSelectable = false + for selectableExtension in selectableFileExtensions { + if fileItem.extension == selectableExtension { + isSelectable = true + break + } + } + } + return isSelectable } } diff --git a/FileExplorer/FileExplorer/DirectoryContentViewModel.swift b/FileExplorer/FileExplorer/DirectoryContentViewModel.swift index 627d913..650b2c1 100644 --- a/FileExplorer/FileExplorer/DirectoryContentViewModel.swift +++ b/FileExplorer/FileExplorer/DirectoryContentViewModel.swift @@ -142,6 +142,12 @@ final class DirectoryContentViewModel { return false } else if item.type == ItemType.file && !configuration.actionsConfiguration.canChooseFiles { return false + } else if item.type == ItemType.file{ + if configuration.filteringConfiguration.isSelectableFileExtension(fileItem: item) { + return true && enabled + } else { + return false + } } else { return true && enabled } diff --git a/FileExplorer/FileExplorer/FileExplorerViewController.swift b/FileExplorer/FileExplorer/FileExplorerViewController.swift index 13b3691..afa612b 100644 --- a/FileExplorer/FileExplorer/FileExplorerViewController.swift +++ b/FileExplorer/FileExplorer/FileExplorerViewController.swift @@ -73,6 +73,11 @@ public final class FileExplorerViewController: UIViewController { /// Results of multiple filters are combined and all of them aren't displayed by file explorer view controller. All files passing filters from `fileFilters` property are displayed if there are no filters in `ignoredFileFilters` array. public var ignoredFileFilters = [Filter]() + /// Filters that determine which files extensions can be selected by file explorer view controller. + /// + /// A list of String containing all the selectable file folmats. All files are displayed if `fileFilters` array is empty. + public var selectableFileExtensions = [String]() + /// The file explorer's delegate object. public weak var delegate: FileExplorerViewControllerDelegate? @@ -118,7 +123,7 @@ public final class FileExplorerViewController: UIViewController { canChooseFiles: canChooseFiles, canChooseDirectories: canChooseDirectories, allowsMultipleSelection: allowsMultipleSelection) - let filteringConfiguration = FilteringConfiguration(fileFilters: fileFilters, ignoredFileFilters: ignoredFileFilters) + let filteringConfiguration = FilteringConfiguration(fileFilters: fileFilters, ignoredFileFilters: ignoredFileFilters, selectableFileExtensions:selectableFileExtensions) let configuration = Configuration(actionsConfiguration: actionsConfiguration, filteringConfiguration: filteringConfiguration) if let item = Item.at(initialDirectoryURL, isDirectory: true) { From fade6234044a5296db895157e96f20f82d870c58 Mon Sep 17 00:00:00 2001 From: nauman-tintash Date: Thu, 15 Feb 2018 17:27:52 +0500 Subject: [PATCH 2/2] Updated README with instructions to use the feature to enable only selected file formats for selection. --- README.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/README.md b/README.md index 8b9ec43..e53a72e 100644 --- a/README.md +++ b/README.md @@ -161,6 +161,25 @@ public func fileExplorerViewController(_ controller: FileExplorerViewController, } ``` +### Deciding Which Files Extensions User can Choose + +Configure `FileExplorer` so that user is allowed to choose files of only specific file extensions: + +```Swift +let fileExplorer = FileExplorerViewController() +fileExplorer.canChooseFiles = true //specify whether user is allowed to choose files +fileExplorer.canChooseDirectories = false //specify whether user is allowed to choose directories + +List the file extensions that can be choosen +fileExplorer.selectableFileExtensions = ["png", "mp3"] + +fileExplorer.delegate = self + +self.present(fileExplorer, animated: true, completion: nil) +``` + +If no file extensions are specified as selectableFileExtensions, all file types are enabled by default. + ### Deciding Whether User Can Delete Files and/or Directories Configure `FileExplorer` so that user is allowed to remove files and/or directories: