commit c11498b838af7782187c1dbb8cf6fa02b0467c2c
parent 57eec87cd4e91b34ced9c0dcf39061ddcba8e47a
Author: Jean Schurger <jean@schurger.org>
Date: Fri, 16 Oct 2026 15:56:09 -0400
Launch argument -open-file <id> opens a file in the player (App Store screenshots)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0141Zm4UQq8PATQAG98MdNCc
Diffstat:
2 files changed, 20 insertions(+), 5 deletions(-)
diff --git a/composeApp/src/commonMain/kotlin/ubi2/sonodrill/ui/app.kt b/composeApp/src/commonMain/kotlin/ubi2/sonodrill/ui/app.kt
@@ -23,7 +23,12 @@ private val dark_scheme = darkColorScheme(
enum class Screen { LIBRARY, PLAYER }
@Composable
-fun SonodrillApp(player: AudioPlayer, repo: AudioRepository, on_import: (on_done: () -> Unit) -> Unit, is_dark: Boolean = isSystemInDarkTheme()) {
+fun SonodrillApp(
+ player: AudioPlayer, repo: AudioRepository, on_import: (on_done: () -> Unit) -> Unit,
+ is_dark: Boolean = isSystemInDarkTheme(),
+ // Opens this file in the player at launch (used to take App Store screenshots)
+ initial_file_id: String? = null,
+) {
val scheme = if (is_dark) dark_scheme else light_scheme
var screen by remember { mutableStateOf(Screen.LIBRARY) }
var player_vm by remember { mutableStateOf<PlayerViewModel?>(null) }
@@ -31,15 +36,20 @@ fun SonodrillApp(player: AudioPlayer, repo: AudioRepository, on_import: (on_done
fun refresh_files() { files = repo.sync_library() }
- LaunchedEffect(Unit) { refresh_files() }
+ fun open(file: AudioFileInfo) {
+ val vm = PlayerViewModel(player, repo); vm.load_file(file); player_vm = vm; screen = Screen.PLAYER
+ }
+
+ LaunchedEffect(Unit) {
+ refresh_files()
+ files.firstOrNull { it.id == initial_file_id && !it.missing }?.let { open(it) }
+ }
MaterialTheme(colorScheme = scheme) {
when (screen) {
Screen.LIBRARY -> LibraryScreen(
files = files,
- on_file_click = { file ->
- val vm = PlayerViewModel(player, repo); vm.load_file(file); player_vm = vm; screen = Screen.PLAYER
- },
+ on_file_click = { file -> open(file) },
on_import = { on_import { refresh_files() } },
on_delete = { file -> repo.delete_file(file); refresh_files() },
)
diff --git a/composeApp/src/iosMain/kotlin/ubi2/sonodrill/main_ios.kt b/composeApp/src/iosMain/kotlin/ubi2/sonodrill/main_ios.kt
@@ -30,11 +30,16 @@ fun main_view_controller(): UIViewController {
val repo = AudioRepository(db)
val player = IosAudioPlayer()
+ // Launch argument "-open-file <id>": open that file in the player (App Store screenshots)
+ val args = NSProcessInfo.processInfo.arguments.map { it.toString() }
+ val initial_file_id = args.indexOf("-open-file").takeIf { it >= 0 }?.let { args.getOrNull(it + 1) }
+
return ComposeUIViewController {
SonodrillApp(
player = player,
repo = repo,
on_import = { on_done -> show_audio_picker(repo, on_done) },
+ initial_file_id = initial_file_id,
)
}
}