129 lines
2.6 KiB
Go
129 lines
2.6 KiB
Go
package backend
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
func GetDefaultMusicPath() string {
|
|
|
|
homeDir, err := os.UserHomeDir()
|
|
if err != nil {
|
|
|
|
return "C:\\Users\\Public\\Music"
|
|
}
|
|
|
|
return filepath.Join(homeDir, "Music")
|
|
}
|
|
|
|
func GetConfigPath() (string, error) {
|
|
dir, err := EnsureAppDir()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return filepath.Join(dir, "config.json"), nil
|
|
}
|
|
|
|
func LoadConfigSettings() (map[string]interface{}, error) {
|
|
configPath, err := GetConfigPath()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if _, err := os.Stat(configPath); os.IsNotExist(err) {
|
|
return nil, nil
|
|
}
|
|
|
|
data, err := os.ReadFile(configPath)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var settings map[string]interface{}
|
|
if err := json.Unmarshal(data, &settings); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return settings, nil
|
|
}
|
|
|
|
func GetRedownloadWithSuffixSetting() bool {
|
|
settings, err := LoadConfigSettings()
|
|
if err != nil || settings == nil {
|
|
return false
|
|
}
|
|
|
|
enabled, _ := settings["redownloadWithSuffix"].(bool)
|
|
return enabled
|
|
}
|
|
|
|
func GetCustomTidalAPISetting() string {
|
|
settings, err := LoadConfigSettings()
|
|
if err != nil || settings == nil {
|
|
return ""
|
|
}
|
|
|
|
customAPI, _ := settings["customTidalApi"].(string)
|
|
customAPI = strings.TrimRight(strings.TrimSpace(customAPI), "/")
|
|
if strings.HasPrefix(customAPI, "https://") {
|
|
return customAPI
|
|
}
|
|
|
|
return ""
|
|
}
|
|
|
|
func normalizeExistingFileCheckMode(value string) string {
|
|
switch strings.TrimSpace(strings.ToLower(value)) {
|
|
case "isrc", "upc":
|
|
return "isrc"
|
|
default:
|
|
return "filename"
|
|
}
|
|
}
|
|
|
|
func GetExistingFileCheckModeSetting() string {
|
|
settings, err := LoadConfigSettings()
|
|
if err != nil || settings == nil {
|
|
return "filename"
|
|
}
|
|
|
|
rawMode, _ := settings["existingFileCheckMode"].(string)
|
|
return normalizeExistingFileCheckMode(rawMode)
|
|
}
|
|
|
|
func GetLinkResolverSetting() string {
|
|
settings, err := LoadConfigSettings()
|
|
if err != nil || settings == nil {
|
|
return linkResolverProviderDeezerSongLink
|
|
}
|
|
|
|
resolver, _ := settings["linkResolver"].(string)
|
|
switch strings.TrimSpace(strings.ToLower(resolver)) {
|
|
case "songlink", linkResolverProviderDeezerSongLink:
|
|
return linkResolverProviderDeezerSongLink
|
|
case "songstats":
|
|
return linkResolverProviderSongstats
|
|
case "":
|
|
return linkResolverProviderDeezerSongLink
|
|
default:
|
|
return linkResolverProviderDeezerSongLink
|
|
}
|
|
}
|
|
|
|
func GetLinkResolverAllowFallback() bool {
|
|
settings, err := LoadConfigSettings()
|
|
if err != nil || settings == nil {
|
|
return true
|
|
}
|
|
|
|
allowFallback, ok := settings["allowResolverFallback"].(bool)
|
|
if !ok {
|
|
return true
|
|
}
|
|
|
|
return allowFallback
|
|
}
|