Compare commits

...

2 Commits

Author SHA1 Message Date
70476f2c51 cmd/streamdata: retry metadata entry
This enables fixing metadata when a mistake is made.

Signed-off-by: Yonah <contrib@gensokyo.uk>
2026-03-19 17:38:30 +09:00
ccc496f55f cmd/streamdata: y/n prompt helper
This returns a boolean value with fallback.

Signed-off-by: Yonah <contrib@gensokyo.uk>
2026-03-19 17:37:29 +09:00
2 changed files with 41 additions and 1 deletions

View File

@@ -130,11 +130,12 @@ func main() {
defer toErr(&err)
isattyStd()
br := bufio.NewReader(os.Stdin)
now := time.Now()
retry:
v.Title = require(promptTrimNoEmpty(br, "Title: "))
v.Category = require(prompt(br, "Category: "))
now := time.Now()
year := require(promptUintFallbackBounds(
br, "Year: ",
1970, uint64(now.Year()),
@@ -161,6 +162,11 @@ func main() {
time.UTC,
)
printVOD(v)
if !require(promptBool(br, "Proceed? ", true)) {
goto retry
}
var resp *http.Response
if resp, err = http.DefaultClient.Do(req); err != nil {
return

View File

@@ -126,6 +126,40 @@ invalid:
return v, true
}
// promptBool prompts the user for a y/n response until a valid response or a
// single newline character is read.
func promptBool(
br *bufio.Reader,
p string,
fallback bool,
) (bool, bool) {
if fallback {
p += "[Y/n] "
} else {
p += "[y/N] "
}
invalid:
s, ok := prompt(br, p)
if !ok {
return false, false
}
switch strings.ToLower(strings.TrimSpace(s)) {
default:
goto invalid
case "":
return fallback, true
case "y":
return true, true
case "n":
return false, true
}
}
// require panics with an error if ok is false, and returns v otherwise.
func require[T any](v T, ok bool) T {
if !ok {