cmd/streamdata: display last entry
Useful for catching up with multiple missed entries. Signed-off-by: Yonah <contrib@gensokyo.uk>
This commit is contained in:
@@ -1,7 +1,10 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"syscall"
|
||||||
|
|
||||||
"git.gensokyo.uk/yonah/streamdata"
|
"git.gensokyo.uk/yonah/streamdata"
|
||||||
)
|
)
|
||||||
@@ -22,3 +25,18 @@ func printVOD(v *streamdata.VOD) {
|
|||||||
fmt.Println("Mirror :", v.Mirror)
|
fmt.Println("Mirror :", v.Mirror)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// printVODIdent calls printVOD for a VOD identifier.
|
||||||
|
func printVODIdent(channel *streamdata.Channel, ident *streamdata.Ident) error {
|
||||||
|
v, err := channel.Load(ident)
|
||||||
|
if err != nil {
|
||||||
|
if !errors.Is(err, os.ErrNotExist) {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return syscall.ENOENT
|
||||||
|
}
|
||||||
|
|
||||||
|
printVOD(v)
|
||||||
|
fmt.Println("Path :", channel.Path(ident))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
+22
-10
@@ -203,16 +203,7 @@ func main() {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if v, err := channel.Load(&ident); err != nil {
|
return printVODIdent(channel, &ident)
|
||||||
if !errors.Is(err, os.ErrNotExist) {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return syscall.ENOENT
|
|
||||||
} else {
|
|
||||||
printVOD(v)
|
|
||||||
fmt.Println("Path :", channel.Path(&ident))
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -231,6 +222,27 @@ func main() {
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
c.NewCommand(
|
||||||
|
"last",
|
||||||
|
"Display metadata of final VOD entry",
|
||||||
|
func([]string) (err error) {
|
||||||
|
if channel == nil {
|
||||||
|
return errors.New("last requires a channel selected")
|
||||||
|
}
|
||||||
|
|
||||||
|
var ident *streamdata.Ident
|
||||||
|
for ident = range channel.All(&err, true) {
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if ident == nil {
|
||||||
|
return errors.New("no entries available")
|
||||||
|
}
|
||||||
|
return printVODIdent(channel, ident)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
c.NewCommand(
|
c.NewCommand(
|
||||||
"mirror",
|
"mirror",
|
||||||
"Populate mirror address of the next un-mirrored asset",
|
"Populate mirror address of the next un-mirrored asset",
|
||||||
|
|||||||
@@ -2,4 +2,4 @@ module git.gensokyo.uk/yonah/streamdata
|
|||||||
|
|
||||||
go 1.26
|
go 1.26
|
||||||
|
|
||||||
require hakurei.app v0.3.8-0.20260317115839-6cdb6a652b63
|
require hakurei.app v0.4.5
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
hakurei.app v0.3.8-0.20260317115839-6cdb6a652b63 h1:Nx5eaHEbWUx6pwA4A+EdmHXvCvO3Xbw7PPcT1QbsVcA=
|
hakurei.app v0.4.5 h1:u/aEG1K9E0sRORGaaTKkvL3UdaTrw7q6t/Y0pnlTVvs=
|
||||||
hakurei.app v0.3.8-0.20260317115839-6cdb6a652b63/go.mod h1:rIWpoHYiZtIPue49bQLkROpQHYh/j2VjJGFrzNrvixU=
|
hakurei.app v0.4.5/go.mod h1:rIWpoHYiZtIPue49bQLkROpQHYh/j2VjJGFrzNrvixU=
|
||||||
|
|||||||
@@ -86,8 +86,8 @@ func atoi(data []byte) (v uint64, err error) {
|
|||||||
10, 64,
|
10, 64,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var numError *strconv.NumError
|
numError, ok := errors.AsType[*strconv.NumError](err)
|
||||||
if errors.As(err, &numError) && numError != nil {
|
if ok && numError != nil {
|
||||||
err = numError.Unwrap()
|
err = numError.Unwrap()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user