Hazel Noack fefa69e92a draft
2025-10-06 16:50:55 +02:00

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)
}