init repo
This commit is contained in:
104
main.go
Normal file
104
main.go
Normal file
@@ -0,0 +1,104 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
flag "github.com/spf13/pflag"
|
||||
"ncmdump/ncmcrypt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
func processFile(filePath string) error {
|
||||
currentFile, err := ncmcrypt.NewNeteaseCloudMusic(filePath)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "[Error] Reading '%s' failed: '%s'\n", filePath, err.Error())
|
||||
return err
|
||||
}
|
||||
dump, err := currentFile.Dump()
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "[Error] Processing '%s' failed: '%s'\n", filePath, err.Error())
|
||||
return err
|
||||
}
|
||||
if dump {
|
||||
metadata, _ := currentFile.FixMetadata()
|
||||
if !metadata {
|
||||
fmt.Fprintf(os.Stderr, "[Warning] Fix metadata for '%s' failed: '%s'\n", filePath, err.Error())
|
||||
return err
|
||||
}
|
||||
fmt.Printf("[Done] '%s' -> '%s'\n", filePath, currentFile.GetDumpFilePath())
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
var folderPath string
|
||||
showHelp := flag.BoolP("help", "h", false, "Display help message")
|
||||
showVersion := flag.BoolP("version", "v", false, "Display version information")
|
||||
flag.StringVarP(&folderPath, "dir", "d", "", "Process all files in the directory")
|
||||
flag.Parse()
|
||||
|
||||
if len(os.Args) == 1 {
|
||||
flag.Usage()
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
if *showHelp {
|
||||
flag.Usage()
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
if *showVersion {
|
||||
fmt.Println("ncmdump version 1.5.0")
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
if folderPath != "" {
|
||||
// check if the folder exists
|
||||
info, err := os.Stat(folderPath)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "[Error] Unable to access directory '%s'", folderPath)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if !info.IsDir() {
|
||||
fmt.Fprintf(os.Stderr, "[Error] '%s' is not a directory", folderPath)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// dump files in the folder
|
||||
files, err := os.ReadDir(folderPath)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "[Error] Unable to read directory '%s'", folderPath)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
for _, file := range files {
|
||||
if file.IsDir() {
|
||||
continue
|
||||
}
|
||||
|
||||
filePath := filepath.Join(folderPath, file.Name())
|
||||
// skip if the extension is not .ncm
|
||||
if filePath[len(filePath)-4:] != ".ncm" {
|
||||
continue
|
||||
}
|
||||
err = processFile(filePath)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// dump file from args
|
||||
for _, filePath := range flag.Args() {
|
||||
// skip if the extension is not .ncm
|
||||
if filePath[len(filePath)-4:] != ".ncm" {
|
||||
continue
|
||||
}
|
||||
err := processFile(filePath)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user