Compare commits

...

2 Commits

Author SHA1 Message Date
aynakeya
15cadb4e5f update cli 2025-09-02 22:45:41 +08:00
aynakeya
b02c6f0142 update cli 2025-09-02 21:02:41 +08:00
8 changed files with 22 additions and 6 deletions

View File

@@ -17,13 +17,15 @@ import (
)
var (
writeMetadata bool
downloadQuality string
writeMetadata bool
downloadQuality string
specifiedFilename string
)
func init() {
CmdDownload.Flags().BoolVar(&writeMetadata, "metadata", false, "Write metadata (tags, cover, lyrics) to the file")
CmdDownload.Flags().StringVar(&downloadQuality, "quality", "", "Quality preference (e.g., 128k, 320k, flac)")
CmdDownload.Flags().StringVar(&specifiedFilename, "filename", "", "Filename to use for download")
}
var CmdDownload = &cobra.Command{
@@ -105,9 +107,12 @@ Supported formats for metadata include MP3 and FLAC.`,
if ext == "" {
ext = mimetype.Detect(downloadedBytes[:min(512, len(downloadedBytes))]).Extension()
}
// Step 5: Save the file from the buffer
filename := sanitizeFilename(fmt.Sprintf("%s - %s%s", info.Artist, info.Title, ext))
// Step 5: Save the file from the buffer
if specifiedFilename != "" {
filename = specifiedFilename
}
err = os.WriteFile(filename, downloadedBytes, 0644)
if err != nil {
fmt.Printf("Error saving file to disk: %v\n", err)

View File

@@ -7,6 +7,10 @@ import (
"github.com/spf13/cobra"
)
func init() {
CmdInfo.Flags().BoolP("json", "j", false, "output in json")
}
var CmdInfo = &cobra.Command{
Use: "info <provider> <uri>",
Short: "Get media info",

View File

@@ -18,6 +18,7 @@ var (
func init() {
CmdLyric.Flags().StringVarP(&lyricOutput, "output", "o", "", "Output lyrics to file")
CmdLyric.Flags().BoolVar(&saveLyric, "save", false, "Save lyrics to file with auto-generated name")
CmdLyric.Flags().BoolP("json", "j", false, "output in json")
}
var CmdLyric = &cobra.Command{

View File

@@ -8,6 +8,10 @@ import (
"os"
)
func init() {
CmdQuality.Flags().BoolP("json", "j", false, "output in json")
}
var CmdQuality = &cobra.Command{
Use: "quality <provider>",
Short: "List supported qualities for a provider",

View File

@@ -16,6 +16,7 @@ var (
func init() {
CmdSearch.Flags().IntVarP(&searchPage, "page", "p", 1, "Page number")
CmdSearch.Flags().IntVar(&searchPageSize, "page-size", 10, "Results per page")
CmdSearch.Flags().BoolP("json", "j", false, "output in json")
}
var CmdSearch = &cobra.Command{

View File

@@ -9,6 +9,7 @@ import (
func init() {
CmdUrl.Flags().String("quality", "", "Quality preference (128k, 192k, 256k, 320k, hq, sq)")
CmdUrl.Flags().BoolP("json", "j", false, "output in json")
}
var CmdUrl = &cobra.Command{

View File

@@ -35,11 +35,9 @@ var rootCmd = &cobra.Command{
}
var sessionFile string
var outputJson bool
func init() {
rootCmd.PersistentFlags().StringVarP(&sessionFile, "session-file", "s", "", "Session file path")
rootCmd.PersistentFlags().BoolVarP(&outputJson, "json", "j", false, "output in json")
rootCmd.AddCommand(cmds.CmdProviders)
rootCmd.AddCommand(cmds.CmdSearch)
rootCmd.AddCommand(cmds.CmdQrlogin)

View File

@@ -16,10 +16,12 @@ import (
func (p *QQMusicProvider) makeApiRequest(module, method string, params map[string]interface{}) (gjson.Result, error) {
expiredTime := time.UnixMilli(p.cred.CreatedAt * 1000).Add(7 * 24 * time.Hour)
//fmt.Println(expiredTime.Format("2006-01-02 15:04:05"))
if expiredTime.Before(time.Now().Add(24*time.Hour)) && !p.tokenRefreshed {
//if true && !p.tokenRefreshed {
//if !p.tokenRefreshed {
//only refresh once
//fmt.Println("Token expired")
p.tokenRefreshed = true
p.qimeiUpdated = false
_ = p.refreshToken()