From f62b42f06b3bf2f1852427cb380bdcfe9e96c177 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Sat, 2 Jul 2022 01:29:18 +0000 Subject: [PATCH] DLSystem handle music --- kiss/src/kiss/Kiss.hx | 1 + kiss/src/kiss/Prelude.hx | 4 ++++ .../src/nat/ArchiveController.kiss | 3 +++ projects/nat-archive-tool/src/nat/CLI.kiss | 21 ++++++++++--------- .../src/nat/systems/DLSystem.kiss | 18 +++++++++++----- 5 files changed, 32 insertions(+), 15 deletions(-) diff --git a/kiss/src/kiss/Kiss.hx b/kiss/src/kiss/Kiss.hx index db38e2a0..745725b6 100644 --- a/kiss/src/kiss/Kiss.hx +++ b/kiss/src/kiss/Kiss.hx @@ -131,6 +131,7 @@ class Kiss { "fEighth" => Symbol("Prelude.fEighth"), "fNinth" => Symbol("Prelude.fNinth"), "fTenth" => Symbol("Prelude.fTenth"), + "uuid" => Symbol("Prelude.uuid"), ], identAliases: [ // These ones won't conflict with variables and might commonly be used with (apply) diff --git a/kiss/src/kiss/Prelude.hx b/kiss/src/kiss/Prelude.hx index 403f9514..adb1a81f 100644 --- a/kiss/src/kiss/Prelude.hx +++ b/kiss/src/kiss/Prelude.hx @@ -461,6 +461,10 @@ class Prelude { }; } + public static function uuid() { + return Uuid.v4().toShort(); + } + // ReaderExp helpers for macros: public static function symbol(?name:String):ReaderExpDef { if (name == null) diff --git a/projects/nat-archive-tool/src/nat/ArchiveController.kiss b/projects/nat-archive-tool/src/nat/ArchiveController.kiss index c41043a4..2a4c11fc 100644 --- a/projects/nat-archive-tool/src/nat/ArchiveController.kiss +++ b/projects/nat-archive-tool/src/nat/ArchiveController.kiss @@ -219,6 +219,9 @@ (defCommand AddKeyShortcut [e SelectedEntry description (Text null)] (addComponent archive e KeyShortcut description)) + + (defCommand AddDLURL [e SelectedEntry url (Text null)] + (addComponent archive e DLURL url)) (defCommand AddNATCommand [e (SelectedEntries null null) command (Text null)] (doFor e e (addComponent archive e NATCommand command))) diff --git a/projects/nat-archive-tool/src/nat/CLI.kiss b/projects/nat-archive-tool/src/nat/CLI.kiss index 758b80e3..08f321a1 100644 --- a/projects/nat-archive-tool/src/nat/CLI.kiss +++ b/projects/nat-archive-tool/src/nat/CLI.kiss @@ -13,11 +13,11 @@ (controller.tryRunCommand command)))) (prop &mut :ArchiveController controller) -(prop :KeyShortcutHandler shortcutHandler null) +(prop :kiss_tools.KeyShortcutHandler shortcutHandler null) (defNew []) -(method :Void enterText [prompt resolve maxLength] +(method :Void enterText [prompt :String->Void resolve maxLength] (Sys.print "$prompt ") (loop (let [entered (.toString (.readLine (Sys.stdin)))] @@ -26,7 +26,7 @@ {(resolve entered) (break)})))) -(method :Void enterNumber [prompt resolve min max &opt inStepsOf] +(method :Void enterNumber [prompt :Float->Void resolve min max &opt inStepsOf] (Sys.print "$prompt ") (loop (let [entered (Std.parseFloat (.toString (.readLine (Sys.stdin))))] @@ -38,13 +38,13 @@ {(resolve entered) (break)})))) -(method :Void chooseEntry [prompt :Archive archive resolve] +(method :Void chooseEntry [prompt :Archive archive :Entry->Void resolve] (_chooseEntry prompt archive resolve ->(chooseEntry "empty name doesn't match any entries. Try again?" archive resolve))) -(method :Void _chooseEntry [prompt :Archive archive resolve onEmptyString] +(method :Void _chooseEntry [prompt :Archive archive :Entry->Void resolve :Void->Void onEmptyString] // TODO allow narrowing down with a tag string (enterText "entry name for $prompt" - ->name { + ->:Void name { (if !name (onEmptyString) (let [matchingEntries (controller.nameSystem.getEntries name)] @@ -52,15 +52,16 @@ ([e] (resolve e)) ([] (chooseEntry "name $name doesn't match any entries. Try again?" archive resolve)) // TODO disambiguate entries with the same names by listing stringified versions of them and using enterNumber - (multipleEntries (throw "ambiguous between multiple entries")))))} + (multipleEntries (throw "ambiguous between multiple entries")) + (otherwise))))} Math.POSITIVE_INFINITY)) -(method :Void chooseEntries [prompt archive resolve min max] +(method :Void chooseEntries [prompt archive :Array->Void resolve min max] (_chooseEntries prompt archive resolve min max [])) -(method :Void _chooseEntries [prompt archive resolve min max :Array collectedEntries] +(method :Void _chooseEntries [prompt archive :Array->Void resolve min max :Array collectedEntries] (let [onEmptyString - ->(if (<= min collectedEntries.length) + ->:Void (if (<= min collectedEntries.length) (resolve collectedEntries) (throw "not enough entries chosen")) &mut :Void->Void chooseNextEntry diff --git a/projects/nat-archive-tool/src/nat/systems/DLSystem.kiss b/projects/nat-archive-tool/src/nat/systems/DLSystem.kiss index 57ffe87e..f15e4ab6 100644 --- a/projects/nat-archive-tool/src/nat/systems/DLSystem.kiss +++ b/projects/nat-archive-tool/src/nat/systems/DLSystem.kiss @@ -7,10 +7,18 @@ (super ->[archive e] - (and ~hasYTDL (catsMatch e "(unless dlProcessed DLURL)")) + (and hasYTDL (catsMatch e "(unless dlProcessed DLURL)")) ->[archive e &opt ui] - { + (let [basename (uuid) + url (readComponent e DLURL)] + (cond + ((tagsMatch e "music") + ``` + youtube-dl -x --audio-format mp3 -o ${basename}.mp3 $url + ``` + (addFiles archive e ["${basename}.mp3"])) + (true + (log ui "DLSystem doesn't know what to do with $(readComponent e Tags)") + (return null))) - // (addFiles ) - // (addTags archive e ["dlProcessed"]) - }))) \ No newline at end of file + (addTags archive e ["dlProcessed"]))))) \ No newline at end of file