Compare commits
	
		
			3 Commits
		
	
	
		
			7bdfcf9776
			...
			main
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 9174c1b23a | ||
|  | 154c6a31b9 | ||
|  | c8f9832f48 | 
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @@ -51,7 +51,7 @@ uninstall: | |||||||
| 	rm -f $(DESTDIR)$(CFGPREFIX)/systemd/system/$(EXE).service | 	rm -f $(DESTDIR)$(CFGPREFIX)/systemd/system/$(EXE).service | ||||||
|  |  | ||||||
| test: | test: | ||||||
| 	$(GO) test -count=1 -v $(EXE)/extractor | 	$(GO) test -count=1 -v git.nobrain.org/r4/dischord/extractor/ | ||||||
|  |  | ||||||
| .PHONY: all debug fmt install uninstall clean | .PHONY: all debug fmt install uninstall clean | ||||||
|  |  | ||||||
|   | |||||||
| @@ -97,14 +97,20 @@ func macosEnableExecutable(filename string) error { | |||||||
| // configuration file does not exist or is invalid. | // configuration file does not exist or is invalid. | ||||||
| func Load(filename string) (*Config, error) { | func Load(filename string) (*Config, error) { | ||||||
| 	cfg := &Config{} | 	cfg := &Config{} | ||||||
| 	_, err := toml.DecodeFile(filename, cfg) | 	meta, err := toml.DecodeFile(filename, cfg) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | 		if pe, ok := err.(toml.ParseError); ok { | ||||||
|  | 			fmt.Println(pe.ErrorWithUsage()) | ||||||
|  | 		} | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
|  | 	if undec := meta.Undecoded(); len(undec) > 0 { | ||||||
|  | 		return nil, fmt.Errorf("%v: field '%v' could not be decoded", filename, undec[0]) | ||||||
|  | 	} | ||||||
| 	if cfg.Token == defaultToken || cfg.Token == "" { | 	if cfg.Token == defaultToken || cfg.Token == "" { | ||||||
| 		return nil, ErrTokenNotSet | 		return nil, ErrTokenNotSet | ||||||
| 	} | 	} | ||||||
| 	if err := cfg.Extractors.CheckTypes(); err != nil { | 	if err := cfg.Extractors.CheckValidity(); err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 	if _, err := exec.LookPath(cfg.Extractors["youtube-dl"]["youtube-dl-path"].(string)); err != nil { | 	if _, err := exec.LookPath(cfg.Extractors["youtube-dl"]["youtube-dl-path"].(string)); err != nil { | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ var ( | |||||||
| ) | ) | ||||||
|  |  | ||||||
| func Extract(cfg Config, input string) ([]Data, error) { | func Extract(cfg Config, input string) ([]Data, error) { | ||||||
| 	if err := cfg.CheckTypes(); err != nil { | 	if err := cfg.CheckValidity(); err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 	for _, e := range extractors { | 	for _, e := range extractors { | ||||||
| @@ -45,7 +45,7 @@ func Extract(cfg Config, input string) ([]Data, error) { | |||||||
| } | } | ||||||
|  |  | ||||||
| func Search(cfg Config, input string) ([]Data, error) { | func Search(cfg Config, input string) ([]Data, error) { | ||||||
| 	if err := cfg.CheckTypes(); err != nil { | 	if err := cfg.CheckValidity(); err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 	for _, s := range searchers { | 	for _, s := range searchers { | ||||||
| @@ -59,7 +59,7 @@ func Search(cfg Config, input string) ([]Data, error) { | |||||||
| } | } | ||||||
|  |  | ||||||
| func Suggest(cfg Config, input string) ([]string, error) { | func Suggest(cfg Config, input string) ([]string, error) { | ||||||
| 	if err := cfg.CheckTypes(); err != nil { | 	if err := cfg.CheckValidity(); err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 	for _, s := range suggestors { | 	for _, s := range suggestors { | ||||||
| @@ -115,16 +115,16 @@ func DefaultConfig() Config { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| func (cfg Config) CheckTypes() error { | func (cfg Config) CheckValidity() error { | ||||||
| 	for provider, pCfg := range cfg { | 	for chkProvider, chkCfg := range DefaultConfig() { | ||||||
| 		if pCfg == nil { | 		if _, ok := cfg[chkProvider]; !ok { | ||||||
| 			return fmt.Errorf("extractor config for %v is nil", provider) | 			return fmt.Errorf("extractor config for %v is nil", chkProvider) | ||||||
| 		} | 		} | ||||||
| 		for k, v := range pCfg { | 		for k, v := range chkCfg { | ||||||
| 			got, expected := reflect.TypeOf(v), reflect.TypeOf(DefaultConfig()[provider][k]) | 			expected, got := reflect.TypeOf(v), reflect.TypeOf(cfg[chkProvider][k]) | ||||||
| 			if got != expected { | 			if got != expected { | ||||||
| 				return &ConfigTypeError{ | 				return &ConfigTypeError{ | ||||||
| 					Provider: provider, | 					Provider: chkProvider, | ||||||
| 					Key:      k, | 					Key:      k, | ||||||
| 					Expected: expected, | 					Expected: expected, | ||||||
| 					Got:      got, | 					Got:      got, | ||||||
| @@ -151,7 +151,7 @@ func (e *ConfigTypeError) Error() string { | |||||||
| 	if e.Got != nil { | 	if e.Got != nil { | ||||||
| 		gotName = e.Got.Name() | 		gotName = e.Got.Name() | ||||||
| 	} | 	} | ||||||
| 	return "extractor config type error: " + e.Provider + "." + e.Key + ": expected " + expectedName + " but got " + gotName | 	return "invalid extractor configuration: " + e.Provider + "." + e.Key + ": expected " + expectedName + " but got " + gotName | ||||||
| } | } | ||||||
|  |  | ||||||
| type ProviderConfig map[string]any | type ProviderConfig map[string]any | ||||||
|   | |||||||
| @@ -140,7 +140,7 @@ func getDecryptFunction(baseJs string) (string, error) { | |||||||
| 	} | 	} | ||||||
| 	fn := baseJs[start+len(startMatch):] | 	fn := baseJs[start+len(startMatch):] | ||||||
| 	end := strings.Index(fn, endMatch) | 	end := strings.Index(fn, endMatch) | ||||||
| 	if start == -1 { | 	if end == -1 { | ||||||
| 		return "", ErrDecryptGettingFunction | 		return "", ErrDecryptGettingFunction | ||||||
| 	} | 	} | ||||||
| 	return fn[:end], nil | 	return fn[:end], nil | ||||||
| @@ -170,7 +170,7 @@ func getDecryptOps(baseJs string) ([]decryptorOp, error) { | |||||||
| 		} | 		} | ||||||
| 		ops = baseJs[start+len(startMatch):] | 		ops = baseJs[start+len(startMatch):] | ||||||
| 		end := strings.Index(ops, endMatch) | 		end := strings.Index(ops, endMatch) | ||||||
| 		if start == -1 { | 		if end == -1 { | ||||||
| 			return nil, ErrDecryptGettingOpTable | 			return nil, ErrDecryptGettingOpTable | ||||||
| 		} | 		} | ||||||
| 		ops = ops[:end] | 		ops = ops[:end] | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user