Files
sing-box-for-apple/HelperService/WorkingDirectoryManager.swift
T

75 lines
2.4 KiB
Swift

import Foundation
import Library
enum WorkingDirectoryManager {
static var extensionBasePath: String {
"/var/root/Library/Containers/\(AppConfiguration.systemExtensionBundleID)/Data"
}
static var extensionWorkingDirectoryPath: String {
(extensionBasePath as NSString).appendingPathComponent("Working")
}
static var tempDirectoryPath: String {
"/var/root/Library/Containers/\(AppConfiguration.systemExtensionBundleID)/Data/Temp"
}
static var helperBasePath: String {
"/var/root/Library/Containers/\(AppConfiguration.rootHelperBundleID)/Data"
}
static var helperWorkingDirectoryPath: String {
(helperBasePath as NSString).appendingPathComponent("Working")
}
static var helperTempDirectoryPath: String {
(helperBasePath as NSString).appendingPathComponent("Temp")
}
static var helperNativeCrashBasePath: String {
(helperBasePath as NSString).appendingPathComponent("NativeCrash")
}
static var extensionNativeCrashBasePath: String {
"/var/root/Library/Containers/\(AppConfiguration.systemExtensionBundleID)/Data/NativeCrash"
}
static var extensionOOMReportsPath: String {
(extensionWorkingDirectoryPath as NSString).appendingPathComponent("oom_reports")
}
static func getSize() -> Int64 {
let path = extensionWorkingDirectoryPath
guard FileManager.default.fileExists(atPath: path) else {
return 0
}
var totalSize: Int64 = 0
let enumerator = FileManager.default.enumerator(atPath: path)
while let file = enumerator?.nextObject() as? String {
let filePath = (path as NSString).appendingPathComponent(file)
if let attrs = try? FileManager.default.attributesOfItem(atPath: filePath),
let size = attrs[.size] as? Int64
{
totalSize += size
}
}
return totalSize
}
static func clean() throws {
let path = extensionWorkingDirectoryPath
guard FileManager.default.fileExists(atPath: path) else {
return
}
let contents = try FileManager.default.contentsOfDirectory(atPath: path)
for item in contents {
let itemPath = (path as NSString).appendingPathComponent(item)
try FileManager.default.removeItem(atPath: itemPath)
}
}
}