package plugin import ( "regexp" "gitea.elara.ws/Hazel/music-kraken/internal/data" ) type Plugin interface { Name() string 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 namePlugins = map[string]Plugin{} var nameSourceType = map[string]data.SourceType{} func RegisterPlugin(plugin Plugin) { name := plugin.Name() nameSourceType[name] = data.SourceType{ Name: name, Regex: plugin.GetRegex(), } namePlugins[name] = plugin } func compileSource(source data.Source) data.Source { if source.Type != nil { return source } for _, st := range nameSourceType { if m := st.Regex.FindString(source.Url); m != "" { source.Url = m return source } } panic("couldn't find source type for " + source.Url) } func FetchUrl(url string) data.MusicObject { return FetchSource(data.Source{ Url: string, Type: nil, }) } func FetchSource(source data.Source) data.MusicObject { }