diff --git a/README.md b/README.md index 9e2fec9..2e9d2c2 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ - [ ] Uploader - [ ] mapping IA S3 protocol - [ ] modify metadata +- [ ] Version check - [ ] CLI - [X] `aixifan_config.json` Config - [x] "downloads_home_dir" diff --git a/main.go b/main.go index 800b554..1dafa3a 100644 --- a/main.go +++ b/main.go @@ -3,19 +3,23 @@ package main import ( "flag" "fmt" + "log/slog" "os" "github.com/saveweb/aixifan/pkg/config" "github.com/saveweb/aixifan/pkg/downloader" + "github.com/saveweb/aixifan/pkg/utils" ) func help() { + fmt.Println("aixifan - " + utils.GetVersion().Version + " (" + utils.GetVersion().GoVersion + ")") fmt.Println( - `Usage: aixifan action dougaId + `Usage: aixifan action [dougaId] Action: down Download up Upload to IA + version Show version dougaId: int-string, NOT contain 'ac' or '_' @@ -26,30 +30,30 @@ e.g. aixifan down 32749`) func main() { flag.Usage = help flag.Parse() - if flag.NArg() < 2 { - help() - os.Exit(1) - } action := flag.Arg(0) - dougaId := flag.Arg(1) - - config, err := config.LoadOrNewConfig() - if err != nil { - panic(err) - } - if err := config.MakeDownloadsHomeDir(); err != nil { - panic(err) - } switch action { case "down": + dougaId := flag.Arg(1) + config, err := config.LoadOrNewConfig() + if err != nil { + panic(err) + } + if err := config.MakeDownloadsHomeDir(); err != nil { + panic(err) + } + if err := downloader.Download(config.DownloadsHomeDir, dougaId); err != nil { panic(err) } case "up": panic("not implemented") + case "version": + fmt.Println(utils.GetVersion().Version) default: - panic("unknown action") + slog.Error("Invalid action") + help() + os.Exit(2) } } diff --git a/pkg/api/api.go b/pkg/api/api.go index 51c8f06..8251c8c 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -9,6 +9,7 @@ import ( "strings" "github.com/saveweb/aixifan/pkg/extractor" + "github.com/saveweb/aixifan/pkg/utils" "github.com/tidwall/gjson" ) @@ -19,7 +20,7 @@ func requestDouga(client *http.Client, acId string) ([]byte, error) { } url := "https://www.acfun.cn/v/ac" + acId + "?quickViewId=videoInfo_new&ajaxpipe=1" req, err := http.NewRequest("GET", url, nil) - req.Header.Set("User-Agent", "aixifanfan/0.0.1") + req.Header.Set("User-Agent", "aixifanfan/"+utils.GetVersion().Version) resp, err := client.Do(req) if err != nil { diff --git a/pkg/downloader/downloader.go b/pkg/downloader/downloader.go index a97d4be..2f2872a 100644 --- a/pkg/downloader/downloader.go +++ b/pkg/downloader/downloader.go @@ -12,10 +12,11 @@ import ( "github.com/saveweb/aixifan/pkg/api" "github.com/saveweb/aixifan/pkg/extractor" "github.com/saveweb/aixifan/pkg/ffmpeg" + "github.com/saveweb/aixifan/pkg/utils" ) var headers = map[string]string{ - "User-Agent": "aixifanfan/0.0.1", + "User-Agent": "aixifanfan/" + utils.GetVersion().Version, } func validateDougaId(dougaId string) bool { diff --git a/pkg/utils/version.go b/pkg/utils/version.go new file mode 100644 index 0000000..baf1c25 --- /dev/null +++ b/pkg/utils/version.go @@ -0,0 +1,28 @@ +package utils + +import "runtime/debug" + +type Version struct { + Version string + GoVersion string +} + +// copy from github.com/internetarchive/Zeno (AGPLv3) +func GetVersion() (version Version) { + version.Version = "unknown_version" + if info, ok := debug.ReadBuildInfo(); ok { + for _, setting := range info.Settings { + if setting.Key == "vcs.revision" { + version.Version = setting.Value + } + + if setting.Key == "vcs.modified" { + if setting.Value == "true" { + version.Version += " (modified)" + } + } + } + version.GoVersion = info.GoVersion + } + return +}