You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-ios/SessionUtilitiesKit/Utilities/FileManagerType.swift

54 lines
2.0 KiB
Swift

// Copyright © 2023 Rangeproof Pty Ltd. All rights reserved.
import Foundation
// MARK: - FileManagerType
public protocol FileManagerType: AnyObject {
var currentDirectoryPath: String { get }
func urls(for directory: FileManager.SearchPathDirectory, in domains: FileManager.SearchPathDomainMask) -> [URL]
func containerURL(forSecurityApplicationGroupIdentifier: String) -> URL?
func enumerator(
at url: URL,
includingPropertiesForKeys: [URLResourceKey]?,
options: FileManager.DirectoryEnumerationOptions,
errorHandler: ((URL, Error) -> Bool)?
) -> FileManager.DirectoryEnumerator?
func fileExists(atPath: String) -> Bool
func fileExists(atPath: String, isDirectory: UnsafeMutablePointer<ObjCBool>?) -> Bool
func contents(atPath: String) -> Data?
func createFile(atPath: String, contents: Data?, attributes: [FileAttributeKey: Any]?) -> Bool
func createDirectory(atPath: String, withIntermediateDirectories: Bool, attributes: [FileAttributeKey: Any]?) throws
func copyItem(at fromUrl: URL, to toUrl: URL) throws
func removeItem(atPath: String) throws
func attributesOfItem(atPath path: String) throws -> [FileAttributeKey: Any]
func setAttributes(_ attributes: [FileAttributeKey: Any], ofItemAtPath path: String) throws
}
public extension FileManagerType {
func createFile(atPath: String, contents: Data?) -> Bool {
return createFile(atPath: atPath, contents: contents, attributes: nil)
}
func createDirectory(atPath: String, withIntermediateDirectories: Bool) throws {
try createDirectory(atPath: atPath, withIntermediateDirectories: withIntermediateDirectories, attributes: nil)
}
}
extension FileManager: FileManagerType {}
// MARK: - Convenience
public extension FileManagerType {
var appSharedDataDirectoryPath: String {
return (containerURL(forSecurityApplicationGroupIdentifier: UserDefaults.applicationGroup)?
.path)
.defaulting(to: "")
}
}