38 lines
747 B
Go
38 lines
747 B
Go
package plugin
|
|
|
|
import (
|
|
"reflect"
|
|
"regexp"
|
|
|
|
"gitea.elara.ws/Hazel/music-kraken/internal/data"
|
|
)
|
|
|
|
type Plugin interface {
|
|
GetRegex() regexp.Regexp
|
|
|
|
Search(query string) []data.MusicObject
|
|
|
|
Fetch(source data.Source) data.MusicObject
|
|
FetchSong(source data.Source) data.Song
|
|
FetchAlbum(source data.Source) data.Album
|
|
FetchArtist(source data.Source) data.Artist
|
|
}
|
|
|
|
var plugins map[string]Plugin = make(map[string]Plugin)
|
|
|
|
func AddPlugin(plugin Plugin) {
|
|
name := reflect.TypeOf(plugin).Name()
|
|
|
|
sourceType := data.SourceType{
|
|
Name: reflect.TypeOf(plugin).Name(),
|
|
Regex: plugin.GetRegex(),
|
|
}
|
|
|
|
plugins[name] = pluginStorage{
|
|
plugin: plugin,
|
|
sourceType: sourceType,
|
|
}
|
|
|
|
data.SourceTypes = append(data.SourceTypes, &sourceType)
|
|
}
|