59 lines
1.1 KiB
Go
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 {
|
|
|
|
}
|