esoui addon page get

master
JoYo 2024-06-06 00:50:42 -04:00
parent 8cbd7b31fc
commit 62308eed08
1 changed files with 99 additions and 3 deletions

102
banana.go
View File

@ -4,21 +4,57 @@ import (
"github.com/alexflint/go-arg" "github.com/alexflint/go-arg"
"bufio" "bufio"
"errors"
"fmt" "fmt"
"io"
"net/http"
"os" "os"
"path/filepath"
"regexp" "regexp"
"runtime"
"strings" "strings"
) )
var args struct { var args struct {
Addon_List_Path string `arg:"-i,--addon-list" help:"path to addon list file"` Addon_list_path string `arg:"-i,--addon-list" help:"path to addon list file"`
Out_Dir string `arg:"-o,--live-dir" help:"path to eso live directory"` Out_dir string `arg:"-o,--live-dir" help:"path to eso live directory"`
Ttc bool `arg:"-t,--ttc" help:"only update tamriel trade centre db"` Ttc bool `arg:"-t,--ttc" help:"only update tamriel trade centre db"`
} }
func main() { func main() {
arg.MustParse(&args) arg.MustParse(&args)
fmt.Println("args", args) fmt.Println("args", args)
eso_live_path := eso_live_path_get()
if args.Addon_list_path == "" {
args.Addon_list_path = filepath.Join(eso_live_path, "addons.list")
}
_, error := os.Stat(args.Addon_list_path)
if errors.Is(error, os.ErrNotExist) {
error = addon_list_create(args.Addon_list_path)
if error != nil {
panic(error)
}
}
addon_urls, error := addon_list_read(args.Addon_list_path)
if error != nil {
panic(error)
}
var esoui_list []EsoUI
for _, url := range addon_urls {
esoui, error := esoui_init(url)
if error != nil {
panic(error)
}
esoui_list = append(esoui_list, esoui)
fmt.Println(esoui)
}
} }
const ( const (
@ -34,13 +70,41 @@ https://www.esoui.com/downloads/info1146-LibCustomMenu.html
var ( var (
ESOUI_PREFIX = regexp.MustCompile(`https://www.esoui.com/downloads/info[0-9]+\-`) ESOUI_PREFIX = regexp.MustCompile(`https://www.esoui.com/downloads/info[0-9]+\-`)
ESOUI_DOWNLOAD = regexp.MustCompile(`https://cdn.esoui.com/downloads/file[^"]*`)
ESOUI_VERSION_HTML = regexp.MustCompile(`<div\s+id="version">Version:\s+[^<]+`) ESOUI_VERSION_HTML = regexp.MustCompile(`<div\s+id="version">Version:\s+[^<]+`)
ESOUI_VERSION_SPLIT = regexp.MustCompile(`<div\s+id="version">Version:\s+`) ESOUI_VERSION_SPLIT = regexp.MustCompile(`<div\s+id="version">Version:\s+`)
ESOUI_DOWNLOAD = regexp.MustCompile(`https://cdn.esoui.com/downloads/file[^"]*`)
LIVE_VERSION = regexp.MustCompile(`##\s+Version:\s+.*`) LIVE_VERSION = regexp.MustCompile(`##\s+Version:\s+.*`)
LIVE_VERSION_SPLIT = regexp.MustCompile(`##\s+Version:\s+`) LIVE_VERSION_SPLIT = regexp.MustCompile(`##\s+Version:\s+`)
) )
func eso_live_path_get() string {
home_path, error := os.UserHomeDir()
if error != nil {
panic(error)
}
if runtime.GOOS == "windows" {
return filepath.Join(home_path, ESO_LIVE_PATH_WINDOWS)
} else {
return filepath.Join(home_path, ESO_LIVE_PATH_STEAMOS)
}
}
func addon_list_create(addon_list_path string) error {
file_open, error := os.Create(addon_list_path)
if error != nil {
return error
}
defer file_open.Close()
_, error = file_open.Write([]byte(CONFIG_TEMPLATE))
if error != nil {
return error
}
return nil
}
func addon_list_read(addon_list_path string) ([]string, error) { func addon_list_read(addon_list_path string) ([]string, error) {
file_open, error := os.OpenFile(addon_list_path, os.O_RDONLY, 0644) file_open, error := os.OpenFile(addon_list_path, os.O_RDONLY, 0644)
defer file_open.Close() defer file_open.Close()
@ -55,6 +119,8 @@ func addon_list_read(addon_list_path string) ([]string, error) {
line := file_scanner.Text() line := file_scanner.Text()
switch { switch {
case line == "":
continue
case strings.HasPrefix(line, "#"): case strings.HasPrefix(line, "#"):
continue continue
case strings.HasPrefix(line, "//"): case strings.HasPrefix(line, "//"):
@ -68,3 +134,33 @@ func addon_list_read(addon_list_path string) ([]string, error) {
return lines, nil return lines, nil
} }
type EsoUI struct {
addon_name string
version string
dowload_uri string
}
func esoui_init(addon_url string) (EsoUI, error) {
response, error := http.Get(addon_url)
if error != nil {
return EsoUI{}, error
}
defer response.Body.Close()
if response.StatusCode == http.StatusNotFound {
return EsoUI{}, errors.New(http.StatusText(response.StatusCode))
}
body, error := io.ReadAll(response.Body)
if error != nil {
return EsoUI{}, error
}
addon_name := string(ESOUI_PREFIX.Find([]byte(addon_url)))
dowload_uri := string(ESOUI_DOWNLOAD.Find(body))
version_html := string(ESOUI_VERSION_HTML.Find(body))
version := string(ESOUI_VERSION_SPLIT.Find([]byte(version_html)))
return EsoUI{addon_name, version, dowload_uri}, nil
}