Updated name extraction with Erai-raws change

This commit is contained in:
Kenneth Jao 2024-11-09 12:32:52 +08:00
parent 7beae1b849
commit 6259266f04
2 changed files with 806 additions and 804 deletions

423
cli.go Normal file → Executable file
View File

@ -1,211 +1,212 @@
package main package main
import ( import (
"bufio" "bufio"
"fmt" "fmt"
"net" "net"
"os" "os"
"strconv" "strconv"
"strings" "strings"
e "git.kjao.me/kjao/anitoru/err" e "git.kjao.me/kjao/anitoru/err"
) )
type SubscriptionManager struct { type SubscriptionManager struct {
Subscriptions []string Subscriptions []string
} }
func NewSubscriptionManager() *SubscriptionManager { func NewSubscriptionManager() *SubscriptionManager {
var m SubscriptionManager var m SubscriptionManager
m.Get() m.Get()
return &m return &m
} }
func (m *SubscriptionManager) UpdateSubs(conn net.Conn) { func (m *SubscriptionManager) UpdateSubs(conn net.Conn) {
rawData, err := ReadData(conn) rawData, err := ReadData(conn)
e.ExitIf(err, "Unable to read from socket.") e.ExitIf(err, "Unable to read from socket.")
m.Subscriptions = strings.Split(string(rawData), "\n") m.Subscriptions = strings.Split(string(rawData), "\n")
if m.Subscriptions[0] == "" { if m.Subscriptions[0] == "" {
m.Subscriptions = []string{} m.Subscriptions = []string{}
} }
} }
func (m *SubscriptionManager) Get() { func (m *SubscriptionManager) Get() {
conn, err := net.Dial("unix", SocketPath) conn, err := net.Dial("unix", SocketPath)
e.ExitIf(err, "Unable to open socket. Is the daemon running?") e.ExitIf(err, "Unable to open socket. Is the daemon running?")
err = SendData(conn, []byte{'V'}) err = SendData(conn, []byte{'V'})
e.ExitIf(err, "Unable to write to socket.") e.ExitIf(err, "Unable to write to socket.")
m.UpdateSubs(conn) m.UpdateSubs(conn)
} }
func (m *SubscriptionManager) View() { func (m *SubscriptionManager) View() {
fmt.Println() fmt.Println()
fmt.Println("Current subscriptions:") fmt.Println("Current subscriptions:")
for i, sub := range m.Subscriptions { for i, sub := range m.Subscriptions {
fmt.Println(fmt.Sprintf("\t[%02d] %v", i+1, sub)) fmt.Println(fmt.Sprintf("\t[%02d] %v", i+1, sub))
} }
if len(m.Subscriptions) == 0 { if len(m.Subscriptions) == 0 {
fmt.Println("\t...Empty\n") fmt.Println("\t...Empty\n")
return return
} }
fmt.Println() fmt.Println()
} }
func (m *SubscriptionManager) Add() { func (m *SubscriptionManager) Add() {
fmt.Println() fmt.Println()
// Get available subscriptions. // Get available subscriptions.
fmt.Println("Available subscriptions:") fmt.Println("Available subscriptions:")
titles, err := GetReleaseSchedule() titles, err := GetReleaseSchedule()
if err != nil { if err != nil {
fmt.Println("Unable to get release schedule.") fmt.Println("Unable to get release schedule.")
return return
} }
subMap := GetSubMap(&m.Subscriptions) subMap := GetSubMap(&m.Subscriptions)
var available []string var available []string
i := 0 i := 0
for _, title := range titles { for _, title := range titles {
_, exists := subMap[title] title = strings.Split(title, " | ")[0]
if !exists { _, exists := subMap[title]
i++ if !exists {
available = append(available, title) i++
fmt.Println(fmt.Sprintf("\t[%02d] %v", i, title)) available = append(available, title)
} fmt.Println(fmt.Sprintf("\t[%02d] %v", i, title))
} }
fmt.Println() }
fmt.Println()
// Get comma-separated list of additions.
newSubs := []string{} // Get comma-separated list of additions.
var add string newSubs := []string{}
var name string var add string
for { var name string
fmt.Print("Add subscriptions. (M for manual): ") for {
fmt.Scan(&add) fmt.Print("Add subscriptions. (M for manual): ")
add = strings.ToLower(add) fmt.Scan(&add)
if add == "m" { add = strings.ToLower(add)
var err error if add == "m" {
fmt.Print("Name: ") var err error
in := bufio.NewReader(os.Stdin) fmt.Print("Name: ")
name, err = in.ReadString('\n') in := bufio.NewReader(os.Stdin)
name = name[:len(name)-1] name, err = in.ReadString('\n')
e.Panic(err) name = name[:len(name)-1]
newSubs = append(newSubs, name) e.Panic(err)
} else { newSubs = append(newSubs, name)
addSplit := strings.Split(add, ",") } else {
retry := false addSplit := strings.Split(add, ",")
for _, indexString := range addSplit { retry := false
index, err := strconv.Atoi(indexString) for _, indexString := range addSplit {
if err != nil { index, err := strconv.Atoi(indexString)
fmt.Println("Error in indices. Try again.") if err != nil {
retry = true fmt.Println("Error in indices. Try again.")
break retry = true
} break
if index <= 0 || index > len(available) { }
fmt.Fprintln(os.Stdout, "Error in indices. %v is invalid. Try again", index) if index <= 0 || index > len(available) {
retry = true fmt.Fprintln(os.Stdout, "Error in indices. %v is invalid. Try again", index)
break retry = true
} break
}
newSubs = append(newSubs, available[index-1])
} newSubs = append(newSubs, available[index-1])
if retry { }
continue if retry {
} continue
} }
break }
} break
}
var hevc string
fmt.Print("Only HEVC? (Y/n): ") var hevc string
fmt.Scan(&hevc) fmt.Print("Only HEVC? (Y/n): ")
hevc = strings.ToLower(hevc) fmt.Scan(&hevc)
var data []byte hevc = strings.ToLower(hevc)
if hevc == "n" { var data []byte
data = []byte{'A', '0'} if hevc == "n" {
} else { data = []byte{'A', '0'}
data = []byte{'A', '1'} } else {
} data = []byte{'A', '1'}
}
// Send addition update to socket
data = append(data, []byte(strings.Join(newSubs, "\n"))...) // Send addition update to socket
conn, err := net.Dial("unix", SocketPath) data = append(data, []byte(strings.Join(newSubs, "\n"))...)
e.ExitIf(err, "Unable to open socket. Is the daemon running?") conn, err := net.Dial("unix", SocketPath)
e.ExitIf(err, "Unable to open socket. Is the daemon running?")
err = SendData(conn, data)
e.ExitIf(err, "Unable to write to socket. Is the daemon running?") err = SendData(conn, data)
m.UpdateSubs(conn) e.ExitIf(err, "Unable to write to socket. Is the daemon running?")
} m.UpdateSubs(conn)
}
func (m *SubscriptionManager) Remove() {
fmt.Println() func (m *SubscriptionManager) Remove() {
m.View() fmt.Println()
fmt.Println() m.View()
fmt.Println()
subMap := GetSubMap(&m.Subscriptions)
subMap := GetSubMap(&m.Subscriptions)
// Get comma-separated list of removals.
var remove string // Get comma-separated list of removals.
removeSubs := []string{} var remove string
for { removeSubs := []string{}
fmt.Print("Remove subscriptions: ") for {
fmt.Scan(&remove) fmt.Print("Remove subscriptions: ")
addSplit := strings.Split(remove, ",") fmt.Scan(&remove)
skip := false addSplit := strings.Split(remove, ",")
for _, indexString := range addSplit { skip := false
index, err := strconv.Atoi(indexString) for _, indexString := range addSplit {
if err != nil { index, err := strconv.Atoi(indexString)
fmt.Println("Error in indices. Try again.") if err != nil {
skip = true fmt.Println("Error in indices. Try again.")
break skip = true
} break
if index <= 0 || index > len(m.Subscriptions) { }
fmt.Fprintln(os.Stdout, "Error in indices. %v is invalid. Try again", index) if index <= 0 || index > len(m.Subscriptions) {
skip = true fmt.Fprintln(os.Stdout, "Error in indices. %v is invalid. Try again", index)
break skip = true
} break
removeSubs = append(removeSubs, (m.Subscriptions)[index-1]) }
delete(subMap, (m.Subscriptions)[index-1]) removeSubs = append(removeSubs, (m.Subscriptions)[index-1])
} delete(subMap, (m.Subscriptions)[index-1])
if skip { }
continue if skip {
} continue
break }
} break
}
// Send removal update to socket
data := []byte{'R'} // Send removal update to socket
data = append(data, []byte(strings.Join(removeSubs, "\n"))...) data := []byte{'R'}
conn, err := net.Dial("unix", SocketPath) data = append(data, []byte(strings.Join(removeSubs, "\n"))...)
e.ExitIf(err, "Unable to open socket. Is the daemon running?") conn, err := net.Dial("unix", SocketPath)
e.ExitIf(err, "Unable to open socket. Is the daemon running?")
err = SendData(conn, data)
e.ExitIf(err, "Unable to write to socket. Is the daemon running?") err = SendData(conn, data)
m.UpdateSubs(conn) e.ExitIf(err, "Unable to write to socket. Is the daemon running?")
m.View() m.UpdateSubs(conn)
} m.View()
}
func userCLI() {
manager := NewSubscriptionManager() func userCLI() {
manager := NewSubscriptionManager()
var action string
for { var action string
fmt.Print("View, Add, Remove subscriptions or Quit: ") for {
fmt.Scan(&action) fmt.Print("View, Add, Remove subscriptions or Quit: ")
action = strings.ToLower(action) fmt.Scan(&action)
switch action { action = strings.ToLower(action)
case "v": switch action {
manager.View() case "v":
case "a": manager.View()
manager.Add() case "a":
case "r": manager.Add()
manager.Remove() case "r":
case "q": manager.Remove()
os.Exit(1) case "q":
default: os.Exit(1)
fmt.Println("Invalid command, try again.") default:
} fmt.Println("Invalid command, try again.")
} }
} }
}

1187
main.go Normal file → Executable file

File diff suppressed because it is too large Load Diff