2025-10-06 21:24:56 +02:00

59 lines
1.1 KiB
Go

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