Update: CLI support

This commit is contained in:
Hariharan Mudaliar 2026-04-10 15:17:46 +05:30
commit f9fe2e363d
No known key found for this signature in database
GPG key ID: 025583EB0BE5640E
5 changed files with 29860 additions and 29801 deletions

View file

@ -456,7 +456,7 @@
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES; COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 11; CURRENT_PROJECT_VERSION = 12;
DEVELOPMENT_ASSET_PATHS = "\"DynamicIsland/Preview Content\""; DEVELOPMENT_ASSET_PATHS = "\"DynamicIsland/Preview Content\"";
DEVELOPMENT_TEAM = 9Y64TRM77N; DEVELOPMENT_TEAM = 9Y64TRM77N;
ENABLE_APP_SANDBOX = NO; ENABLE_APP_SANDBOX = NO;
@ -497,7 +497,7 @@
"@executable_path/../Frameworks", "@executable_path/../Frameworks",
); );
MACOSX_DEPLOYMENT_TARGET = 14.6; MACOSX_DEPLOYMENT_TARGET = 14.6;
MARKETING_VERSION = 2.1.0; MARKETING_VERSION = 2.2.0;
PRODUCT_BUNDLE_IDENTIFIER = com.Ebullioscopic.Atoll.dev; PRODUCT_BUNDLE_IDENTIFIER = com.Ebullioscopic.Atoll.dev;
PRODUCT_NAME = Atoll; PRODUCT_NAME = Atoll;
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
@ -528,7 +528,7 @@
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Developer ID Application"; "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Developer ID Application";
CODE_SIGN_STYLE = Manual; CODE_SIGN_STYLE = Manual;
COMBINE_HIDPI_IMAGES = YES; COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 11; CURRENT_PROJECT_VERSION = 12;
DEVELOPMENT_ASSET_PATHS = "\"DynamicIsland/Preview Content\""; DEVELOPMENT_ASSET_PATHS = "\"DynamicIsland/Preview Content\"";
DEVELOPMENT_TEAM = ""; DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=macosx*]" = 9Y64TRM77N; "DEVELOPMENT_TEAM[sdk=macosx*]" = 9Y64TRM77N;
@ -570,7 +570,7 @@
"@executable_path/../Frameworks", "@executable_path/../Frameworks",
); );
MACOSX_DEPLOYMENT_TARGET = 14.6; MACOSX_DEPLOYMENT_TARGET = 14.6;
MARKETING_VERSION = 2.1.0; MARKETING_VERSION = 2.2.0;
PRODUCT_BUNDLE_IDENTIFIER = com.Ebullioscopic.Atoll; PRODUCT_BUNDLE_IDENTIFIER = com.Ebullioscopic.Atoll;
PRODUCT_NAME = Atoll; PRODUCT_NAME = Atoll;
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";

View file

@ -154,6 +154,29 @@ class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidBecomeActive(_ notification: Notification) { func applicationDidBecomeActive(_ notification: Notification) {
installTopMenuItemsIfNeeded() installTopMenuItemsIfNeeded()
} }
func application(_ application: NSApplication, open urls: [URL]) {
_ = handleIncomingShelfURLs(urls)
}
func application(_ sender: NSApplication, openFile filename: String) -> Bool {
handleIncomingShelfURLs([URL(fileURLWithPath: filename)])
}
private func handleIncomingShelfURLs(_ urls: [URL]) -> Bool {
let fileURLs = urls.filter(\.isFileURL)
guard !fileURLs.isEmpty else { return false }
Task { @MainActor [weak self] in
let items = await ShelfDropService.items(from: fileURLs)
guard !items.isEmpty else { return }
ShelfStateViewModel.shared.add(items)
self?.coordinator.currentView = .shelf
}
return true
}
/// Setup observers for music player state changes to restart AudioTap capture /// Setup observers for music player state changes to restart AudioTap capture
private func setupAudioTapMusicObservers() { private func setupAudioTapMusicObservers() {

File diff suppressed because it is too large Load diff

View file

@ -36,6 +36,26 @@ struct ShelfDropService {
return results return results
} }
static func items(from fileURLs: [URL]) async -> [ShelfItem] {
var results: [ShelfItem] = []
let fileManager = FileManager.default
for fileURL in fileURLs {
let resolvedURL = fileURL.standardizedFileURL
guard resolvedURL.isFileURL else { continue }
guard fileManager.fileExists(atPath: resolvedURL.path) else {
NSLog("⚠️ Ignoring non-existent file URL: \(resolvedURL.path)")
continue
}
if let bookmark = createBookmark(for: resolvedURL) {
results.append(await ShelfItem(kind: .file(bookmark: bookmark), isTemporary: false))
}
}
return results
}
private static func processProvider(_ provider: NSItemProvider) async -> ShelfItem? { private static func processProvider(_ provider: NSItemProvider) async -> ShelfItem? {
if let actualFileURL = await provider.extractFileURL() { if let actualFileURL = await provider.extractFileURL() {
@ -81,4 +101,3 @@ struct ShelfDropService {
return (try? Bookmark(url: url))?.data return (try? Bookmark(url: url))?.data
} }
} }

View file

@ -78,6 +78,7 @@ Atoll turns the MacBook notch into a focused command surface for media, system i
- Hover near the notch to expand; click to enter controls. - Hover near the notch to expand; click to enter controls.
- Use tabs for Media, Stats, Timers, Clipboard, and more. - Use tabs for Media, Stats, Timers, Clipboard, and more.
- Adjust layout, appearance, and shortcuts from Settings. - Adjust layout, appearance, and shortcuts from Settings.
- Add files to Shelf from Terminal: `open -a Atoll /path/to/file`.
## Settings ## Settings
- Choose appearance, animation style, and per‑feature toggles. - Choose appearance, animation style, and per‑feature toggles.