diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..6ca31a2 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "cSpell.words": [ + "musify", + "Musify" + ] +} \ No newline at end of file diff --git a/internal/data/album.go b/internal/data/album.go deleted file mode 100644 index 0ad59c2..0000000 --- a/internal/data/album.go +++ /dev/null @@ -1 +0,0 @@ -package data diff --git a/internal/data/song.go b/internal/data/song.go index a36d6be..ed76bf7 100644 --- a/internal/data/song.go +++ b/internal/data/song.go @@ -1,15 +1,39 @@ package data +type MusicObject interface { +} + type Song struct { Id int Name string UnifiedName string - Isrc string - Genre string - Note string - Tracksort int - Artwork string + + Album Album + Artists []Artist + + Sources []Source +} + +type Album struct { + Id int + + Name string + UnifiedName string + + Songs []Song + Artists []Artist + + Sources []Source +} + +type Artist struct { + Id int + + Name string + UnifiedName string + + Albums []Album Sources []Source } diff --git a/internal/plugin/interface.go b/internal/plugin/interface.go new file mode 100644 index 0000000..d110ca6 --- /dev/null +++ b/internal/plugin/interface.go @@ -0,0 +1,37 @@ +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) +} diff --git a/internal/plugin/musify.go b/internal/plugin/musify.go new file mode 100644 index 0000000..a2676ed --- /dev/null +++ b/internal/plugin/musify.go @@ -0,0 +1,34 @@ +package plugin + +import ( + "regexp" + + "gitea.elara.ws/Hazel/music-kraken/internal/data" +) + +type Musify struct { +} + +func (m *Musify) GetRegex() regexp.Regexp { + return *regexp.MustCompile(`(?i)https?://musify\.club/(artist|track|release)/[a-z\-0-9]+`) +} + +func (m *Musify) Fetch(source data.Source) data.MusicObject { + panic("unimplemented") +} + +func (m *Musify) FetchAlbum(source data.Source) data.Album { + panic("unimplemented") +} + +func (m *Musify) FetchArtist(source data.Source) data.Artist { + panic("unimplemented") +} + +func (m *Musify) FetchSong(source data.Source) data.Song { + panic("unimplemented") +} + +func (m *Musify) Search(query string) []data.MusicObject { + panic("unimplemented") +} diff --git a/main.go b/main.go index 7aed47f..5c9f98b 100644 --- a/main.go +++ b/main.go @@ -4,9 +4,13 @@ import ( "fmt" "gitea.elara.ws/Hazel/music-kraken/internal/data" + "gitea.elara.ws/Hazel/music-kraken/internal/plugin" ) func main() { + plugins := []plugin.Plugin{ + &plugin.Musify{}, + } fmt.Println("music kraken") data.GetSourceType("Youtube") }