Okej, min hjärna fungerar inte alls nuförtiden & det verkar som jag har en Schrödingers sträng; ibland är den en sträng & ibland inte:
Här är all kod, tar inom spoiler för att inte slösa på scrollhjulet/fingret
package main
import (
"fmt"
"os"
"os/exec"
"strings"
"time"
)
type Processor struct{}
func (Processor) Write(b []byte) (n int, err error) {
s := string(b)
fmt.Println(s) // Example output: [download] 12.5 MB
if strings.HasSuffix(s, "[download]") {
fmt.Println("bläg")
}
return os.Stdout.Write(b)
}
func stream() {
var stream string = "" // Placeholder removed
currentTime := time.Now()
var thedate = (currentTime.Format("2006-01-02 (150405)"))
cmd := exec.Command(stream + thedate + "m4v")
cmd.Stderr = Processor{}
if err := cmd.Run(); err != nil {
// TODO(Jesper) - if no stream was found, try again in a couple of minutes
fmt.Println("No stream found")
time.Sleep(10 * time.Second) // TODO(Jesper) - 10s testing only, change to 2 minutes or whatever, or create dev/release build envars
stream()
}
_ = cmd.Run()
cmd.Wait()
time.Sleep(2 * time.Second) // TODO(Jesper) - If the webcam timed out, wait 2 seconds before reconnecting using stream() recursivly, alternativly handle it in main()
stream() // TODO(Jesper) - Recursive stream() or return to main()?
} // stream()
func main() {
stream()
}
Dold text
Hämtar en HLS stream vi streamlink i exec.Command, & sen hanterar via en processor, iaf, i func (Processor) vill jag printa lite olika output beroende på output från Stderr/Stout, i exemplet returneras tex "[download] 12.5 MB" när jag laddar ner min stream
Tänkte att detta skulle fungera bra:
s := string(b)
fmt.Println(s) // Example output: [download] 12.5 MB
if strings.HasSuffix(s, "[download]") {
fmt.Println("bläg")
}
Nepp:
https://i.imgur.com/gJ7ZPrN.png
Så trots att jag konverterar från bytes till string så kan jag inte använda .HasSuffix på s, jag kan alltså inte använda den sträng funktionen direkt på s efter konvertering till string från byte
MEN om jag istället gör en split på strängen:
s := string(b)
fmt.Println(s) // Example output: [download] 12.5 MB
split := strings.Split(s, " ")
if strings.HasSuffix(split[0], "[download]") {
fmt.Println("bläg")
} else {
fmt.Println("Stream could not be found")
}
https://i.imgur.com/h62lHjH.png
Så där fungerar ju en sträng funktion (strings.Split) så uppenbarligen kan jag använda s som en sträng efter konverteringen? Så, konverteringen från byte till string fungerade ju uppenbarligen men varför kan jag använda strings.Split men inte .strings.HasSuffix på s?
Jag behöver kunna använda .HasSuffix(s, "[download]") för det är inte alltid outputten kan splittas med en delimiter men jag vet att jag alltid får en output med bestämd början som jag kan använda .HasSuffix på (om jag bara får .HasSuffix att fungera på s)
Jag har googlat som en galning & det skall gå, tex: https://stackoverflow.com/questions/40632802/how-to-convert-b...
Men:
fungerar inte heller
Så, snälla, tala om för mig hur/var/varför jag är dum i huvudet? 😁