mirror of
https://github.com/exituser/Pearcleaner.git
synced 2026-09-17 10:48:52 +00:00
150 lines
5.9 KiB
Swift
150 lines
5.9 KiB
Swift
//
|
|
// Conditions.swift
|
|
// Pearcleaner
|
|
//
|
|
// Created by Alin Lupascu on 4/15/24.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
|
|
struct Condition: Decodable {
|
|
var bundle_id: String
|
|
var include: [String]
|
|
var exclude: [String]
|
|
var includeForce: [String]?
|
|
}
|
|
|
|
struct SkipCondition {
|
|
var skipPrefix: String
|
|
var allowPrefixes: [String]
|
|
}
|
|
|
|
|
|
|
|
// Conditions for some apps that need to include/exclude certain files/folders when names are more complicated
|
|
var conditions: [Condition] = [
|
|
Condition(
|
|
bundle_id: "comappledtxcode",
|
|
include: ["comappledt", "xcode", "simulator"],
|
|
exclude: ["comrobotsandpencilsxcodesapp", "comoneminutegamesxcodecleaner", "iohyperappxcodecleaner", "xcodesjson"],
|
|
includeForce: ["\(home)/Library/Containers/com.apple.iphonesimulator.ShareExtension"]
|
|
),
|
|
Condition(
|
|
bundle_id: "comrobotsandpencilsxcodesapp",
|
|
include: [],
|
|
exclude: ["comappledtxcode", "comoneminutegamesxcodecleaner", "iohyperappxcodecleaner"]
|
|
),
|
|
Condition(
|
|
bundle_id: "iohyperappxcodecleaner",
|
|
include: [],
|
|
exclude: ["comrobotsandpencilsxcodesapp", "comoneminutegamesxcodecleaner", "comappledtxcode", "xcodesjson"]
|
|
),
|
|
Condition(
|
|
bundle_id: "uszoomxos",
|
|
include: ["zoom"],
|
|
exclude: []
|
|
),
|
|
Condition(
|
|
bundle_id: "combravebrowser",
|
|
include: ["brave"],
|
|
exclude: []
|
|
),
|
|
Condition(
|
|
bundle_id: "comoktamobile",
|
|
include: ["okta"],
|
|
exclude: []
|
|
),
|
|
Condition(
|
|
bundle_id: "comgooglechrome",
|
|
include: ["google", "chrome"],
|
|
exclude: ["iterm", "chromefeaturestate"]
|
|
),
|
|
Condition(
|
|
bundle_id: "commicrosoftedgemac",
|
|
include: ["microsoft"],
|
|
exclude: ["vscode", "rdc", "appcenter", "office", "oneauth"]
|
|
),
|
|
Condition(
|
|
bundle_id: "orgmozillafirefox",
|
|
include: ["mozilla"],
|
|
exclude: []
|
|
),
|
|
Condition(
|
|
bundle_id: "comlogioptionsplus",
|
|
include: ["logi"],
|
|
exclude: ["login", "logic"],
|
|
includeForce: []
|
|
),
|
|
Condition(
|
|
bundle_id: "commicrosoftvscode",
|
|
include: ["vscode"],
|
|
exclude: [],
|
|
includeForce: ["\(home)/Library/Application Support/Code"]
|
|
),
|
|
Condition(
|
|
bundle_id: "comfacebookarchondeveloperid",
|
|
include: ["archonloginhelper"],
|
|
exclude: []
|
|
),
|
|
Condition(
|
|
bundle_id: "euexelbanstats",
|
|
include: [],
|
|
exclude: ["video"]
|
|
),
|
|
Condition(
|
|
bundle_id: "jetbrains",
|
|
include: ["jetbrains", "jcef"],
|
|
exclude: []
|
|
),
|
|
]
|
|
|
|
|
|
|
|
// Skip com.apple files/folders since most are system originated, allow some for apps
|
|
let skipConditions: [SkipCondition] = [
|
|
SkipCondition(
|
|
skipPrefix: "comapple",
|
|
allowPrefixes: ["comappleconfigurator", "comappledt", "comappleiwork", "comapplesfsymbols", "comappletestflight"]
|
|
)
|
|
]
|
|
|
|
|
|
// Skip files/folders during reverse file search
|
|
let skipReverse = ["apple", "temporary", "btserver", "proapps", "scripteditor", "ilife", "livefsd", "siritoday", "addressbook", "animoji", "appstore", "askpermission", "callhistory", "clouddocs", "diskimages", "dock", "facetime", "fileprovider", "instruments", "knowledge", "mobilesync", "syncservices", "homeenergyd", "icloud", "icdd", "networkserviceproxy", "familycircle", "geoservices", "installation", "passkit", "sharedimagecache", "desktop", "mbuseragent", "swiftpm", "baseband", "coresimulator", "photoslegacyupgrade", "photosupgrade", "siritts", "ipod", "globalpreferences", "apmanalytics", "apmexperiment", "avatarcache", "byhost", "contextstoreagent", "mobilemeaccounts", "intentbuilderc", "loginwindow", "momc", "replayd", "sharedfilelistd", "clang", "audiocomponent", "csexattrcryptoservice", "livetranscriptionagent", "sandboxhelper", "statuskitagent", "betaenrollmentd", "contentlinkingd", "diagnosticextensionsd", "gamed", "heard", "homed", "itunescloudd", "lldb", "mds", "mediaanalysisd", "metrickitd", "mobiletimerd", "proactived", "ptpcamerad", "studentd", "talagent", "watchlistd", "apptranslocation", "xcrun", "ds_store", "caches", "crashreporter", "trash", "pearcleaner", "amsdatamigratortool", "arfilecache", "assistant", "chromium", "cloudkit", "webkit", "databases", "diagnostic", "cache", "gamekit", "homebrew", "logi", "microsoft", "mozilla", "sync", "google", "sentinel", "hexnode", "sentry", "tvappservices"]
|
|
|
|
|
|
// Function to load additional conditions from a GitHub JSON file
|
|
func loadConditionsFromGitHub() {
|
|
let url = URL(string: "https://api.github.com/repos/alienator88/Pearcleaner/contents/conditions.json")!
|
|
var request = URLRequest(url: url)
|
|
request.setValue("application/vnd.github.VERSION.raw", forHTTPHeaderField: "Accept")
|
|
request.setValue("2022-11-28", forHTTPHeaderField: "X-GitHub-Api-Version")
|
|
|
|
URLSession.shared.dataTask(with: request) { data, response, error in
|
|
if let data = data {
|
|
do {
|
|
// Assuming the JSON structure directly maps to an array of Condition
|
|
let jsonObject = try JSONSerialization.jsonObject(with: data, options: [])
|
|
if let conditionArray = jsonObject as? [[String: Any]] {
|
|
let jsonData = try JSONSerialization.data(withJSONObject: conditionArray, options: [])
|
|
let additionalConditions = try JSONDecoder().decode([Condition].self, from: jsonData)
|
|
|
|
if !additionalConditions.isEmpty {
|
|
DispatchQueue.main.async {
|
|
conditions += additionalConditions
|
|
}
|
|
}
|
|
} else {
|
|
printOS("The data format is incorrect or empty for GitHub conditions processing.")
|
|
}
|
|
} catch {
|
|
printOS("Failed to decode conditions JSON: \(error.localizedDescription)")
|
|
}
|
|
} else {
|
|
printOS("Failed to fetch conditions data: \(error?.localizedDescription ?? "Unknown error")")
|
|
}
|
|
}.resume()
|
|
}
|
|
|