mirror of
https://github.com/exituser/Pearcleaner.git
synced 2026-09-17 06:09:01 +00:00
v3.7.4
This commit is contained in:
@@ -572,8 +572,8 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
APP_BUILD = 48;
|
APP_BUILD = 49;
|
||||||
APP_VERSION = 3.7.3;
|
APP_VERSION = 3.7.4;
|
||||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
@@ -642,8 +642,8 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
APP_BUILD = 48;
|
APP_BUILD = 49;
|
||||||
APP_VERSION = 3.7.3;
|
APP_VERSION = 3.7.4;
|
||||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
|||||||
@@ -81,6 +81,32 @@ struct AppCommands: Commands {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Tools Menu
|
||||||
|
CommandMenu(Text("Tools", comment: "Tools Menu")) {
|
||||||
|
|
||||||
|
Button
|
||||||
|
{
|
||||||
|
if !appState.appInfo.bundleIdentifier.isEmpty {
|
||||||
|
appState.showConditionBuilder = true
|
||||||
|
}
|
||||||
|
} label: {
|
||||||
|
Label("Condition Builder", systemImage: "hammer")
|
||||||
|
}
|
||||||
|
.keyboardShortcut("b", modifiers: .command)
|
||||||
|
|
||||||
|
Button
|
||||||
|
{
|
||||||
|
if !appState.appInfo.bundleIdentifier.isEmpty {
|
||||||
|
saveURLsToFile(urls: appState.selectedItems, appState: appState)
|
||||||
|
}
|
||||||
|
} label: {
|
||||||
|
Label("Export Files", systemImage: "square.and.arrow.up")
|
||||||
|
}
|
||||||
|
.keyboardShortcut("e", modifiers: .command)
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// GitHub Menu
|
// GitHub Menu
|
||||||
CommandMenu(Text("GitHub", comment: "Github Repo")) {
|
CommandMenu(Text("GitHub", comment: "Github Repo")) {
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ class AppState: ObservableObject {
|
|||||||
@Published var permissionResults: PermissionsCheckResults?
|
@Published var permissionResults: PermissionsCheckResults?
|
||||||
@Published var showUninstallAlert: Bool = false
|
@Published var showUninstallAlert: Bool = false
|
||||||
@Published var oneShotMode: Bool = false
|
@Published var oneShotMode: Bool = false
|
||||||
|
@Published var showConditionBuilder: Bool = false
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -185,7 +185,40 @@ func caskCleanup(app: String) {
|
|||||||
process.waitUntilExit() // Ensure the process completes
|
process.waitUntilExit() // Ensure the process completes
|
||||||
let data = pipe.fileHandleForReading.readDataToEndOfFile()
|
let data = pipe.fileHandleForReading.readDataToEndOfFile()
|
||||||
let output = (String(data: data, encoding: .utf8) ?? "") as String
|
let output = (String(data: data, encoding: .utf8) ?? "") as String
|
||||||
print(output)
|
printOS(output)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Print list of files locally
|
||||||
|
func saveURLsToFile(urls: Set<URL>, appState: AppState) {
|
||||||
|
let panel = NSOpenPanel()
|
||||||
|
panel.canChooseFiles = false
|
||||||
|
panel.canChooseDirectories = true
|
||||||
|
panel.allowsMultipleSelection = false
|
||||||
|
panel.prompt = "Select Folder"
|
||||||
|
|
||||||
|
if panel.runModal() == .OK, let selectedFolder = panel.url {
|
||||||
|
let filePath = selectedFolder.appendingPathComponent("Export-\(appState.appInfo.appName)(v\(appState.appInfo.appVersion)).txt")
|
||||||
|
var fileContent = ""
|
||||||
|
var count = 1
|
||||||
|
let sortedUrls = urls.sorted { $0.path < $1.path }
|
||||||
|
|
||||||
|
for url in sortedUrls {
|
||||||
|
fileContent += "[\(count)] - \(url.path)\n"
|
||||||
|
count += 1
|
||||||
|
}
|
||||||
|
|
||||||
|
do {
|
||||||
|
try fileContent.write(to: filePath, atomically: true, encoding: .utf8)
|
||||||
|
printOS("File saved successfully at \(filePath.path)")
|
||||||
|
// Open Finder and select the file
|
||||||
|
NSWorkspace.shared.selectFile(filePath.path, inFileViewerRootedAtPath: filePath.deletingLastPathComponent().path)
|
||||||
|
} catch {
|
||||||
|
printOS("Error saving file: \(error)")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
printOS("Folder selection was canceled.")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -126,8 +126,7 @@ struct PearcleanerApp: App {
|
|||||||
}
|
}
|
||||||
// Get new features
|
// Get new features
|
||||||
getFeatures(appState: appState, features: $features)
|
getFeatures(appState: appState, features: $features)
|
||||||
// Load extra conditions from GitHub
|
|
||||||
// loadConditionsFromGitHub() // REPLACE THIS WITH NEW CONDITION MANAGER
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ struct FilesView: View {
|
|||||||
@AppStorage("settings.general.sizeType") var sizeType: String = "Real"
|
@AppStorage("settings.general.sizeType") var sizeType: String = "Real"
|
||||||
@AppStorage("settings.general.filesWarning") private var warning: Bool = false
|
@AppStorage("settings.general.filesWarning") private var warning: Bool = false
|
||||||
@State private var showAlert = false
|
@State private var showAlert = false
|
||||||
@State private var showConditionBuilder = false
|
// @State private var showConditionBuilder = false
|
||||||
@Environment(\.colorScheme) var colorScheme
|
@Environment(\.colorScheme) var colorScheme
|
||||||
@Binding var showPopover: Bool
|
@Binding var showPopover: Bool
|
||||||
@Binding var search: String
|
@Binding var search: String
|
||||||
@@ -278,12 +278,12 @@ struct FilesView: View {
|
|||||||
.padding(.top)
|
.padding(.top)
|
||||||
|
|
||||||
|
|
||||||
Button("Builder") {
|
// Button("Builder") {
|
||||||
showConditionBuilder = true
|
// appState.showConditionBuilder = true
|
||||||
}
|
// }
|
||||||
.buttonStyle(SimpleButtonStyle(icon: "hammer.fill", help: "Condition Builder", size: 14))
|
// .buttonStyle(SimpleButtonStyle(icon: "hammer.fill", help: "Condition Builder", size: 14))
|
||||||
.padding(.top)
|
// .padding(.top)
|
||||||
.padding(.trailing, 5)
|
// .padding(.trailing, 5)
|
||||||
|
|
||||||
|
|
||||||
Button("\(sizeType == "Logical" ? totalSelectedSize.logical : sizeType == "Finder" ? totalSelectedSize.finder : totalSelectedSize.real)") {
|
Button("\(sizeType == "Logical" ? totalSelectedSize.logical : sizeType == "Finder" ? totalSelectedSize.finder : totalSelectedSize.real)") {
|
||||||
@@ -395,11 +395,11 @@ struct FilesView: View {
|
|||||||
Spacer()
|
Spacer()
|
||||||
}
|
}
|
||||||
.padding(15)
|
.padding(15)
|
||||||
.frame(width: 400, height: 200)
|
.frame(width: 400, height: 220)
|
||||||
.background(GlassEffect(material: .hudWindow, blendingMode: .behindWindow))
|
.background(GlassEffect(material: .hudWindow, blendingMode: .behindWindow))
|
||||||
})
|
})
|
||||||
.sheet(isPresented: $showConditionBuilder, content: {
|
.sheet(isPresented: $appState.showConditionBuilder, content: {
|
||||||
ConditionBuilderView(showAlert: $showConditionBuilder, bundle: appState.appInfo.bundleIdentifier)
|
ConditionBuilderView(showAlert: $appState.showConditionBuilder, bundle: appState.appInfo.bundleIdentifier)
|
||||||
})
|
})
|
||||||
.onAppear {
|
.onAppear {
|
||||||
if !warning {
|
if !warning {
|
||||||
|
|||||||
Reference in New Issue
Block a user