mirror of
https://github.com/AynaLivePlayer/AynaLivePlayer.git
synced 2025-12-13 13:38:16 +08:00
add local provider, add cover output in textinfo
This commit is contained in:
@@ -4,6 +4,8 @@ import (
|
||||
"AynaLivePlayer/config"
|
||||
"AynaLivePlayer/player"
|
||||
"os"
|
||||
"sort"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type _LocalPlaylist struct {
|
||||
@@ -19,7 +21,7 @@ var LocalAPI *Local
|
||||
|
||||
func init() {
|
||||
LocalAPI = _newLocal()
|
||||
//Providers[LocalAPI.GetName()] = LocalAPI
|
||||
Providers[LocalAPI.GetName()] = LocalAPI
|
||||
}
|
||||
|
||||
func _newLocal() *Local {
|
||||
@@ -27,43 +29,99 @@ func _newLocal() *Local {
|
||||
if err := os.MkdirAll(config.Provider.LocalDir, 0755); err != nil {
|
||||
return l
|
||||
}
|
||||
|
||||
for _, n := range getPlaylistNames() {
|
||||
l.Playlists = append(l.Playlists, _LocalPlaylist{Name: n})
|
||||
}
|
||||
for i, _ := range l.Playlists {
|
||||
_ = readLocalPlaylist(&l.Playlists[i])
|
||||
}
|
||||
return l
|
||||
}
|
||||
|
||||
func (l *Local) GetName() string {
|
||||
return "local"
|
||||
}
|
||||
|
||||
func (l *Local) MatchMedia(keyword string) *player.Media {
|
||||
//TODO implement me
|
||||
panic("implement me")
|
||||
return nil
|
||||
}
|
||||
|
||||
func (l *Local) UpdateMediaLyric(media *player.Media) error {
|
||||
//TODO implement me
|
||||
panic("implement me")
|
||||
// already update in UpdateMedia, do nothing
|
||||
return nil
|
||||
}
|
||||
|
||||
func (l *Local) FormatPlaylistUrl(uri string) string {
|
||||
return ""
|
||||
return uri
|
||||
}
|
||||
|
||||
func (l *Local) GetPlaylist(playlist string) ([]*player.Media, error) {
|
||||
//TODO implement me
|
||||
panic("implement me")
|
||||
func (l *Local) GetPlaylist(playlist Meta) ([]*player.Media, error) {
|
||||
var pl *_LocalPlaylist = nil
|
||||
for _, p := range l.Playlists {
|
||||
if p.Name == playlist.Id {
|
||||
pl = &p
|
||||
}
|
||||
}
|
||||
if pl == nil {
|
||||
l.Playlists = append(l.Playlists, _LocalPlaylist{Name: playlist.Id})
|
||||
pl = &l.Playlists[len(l.Playlists)-1]
|
||||
}
|
||||
if readLocalPlaylist(pl) != nil {
|
||||
return nil, ErrorExternalApi
|
||||
}
|
||||
return pl.Medias, nil
|
||||
}
|
||||
|
||||
func (l *Local) Search(keyword string) ([]*player.Media, error) {
|
||||
//TODO implement me
|
||||
panic("implement me")
|
||||
result := make([]struct {
|
||||
M *player.Media
|
||||
N int
|
||||
}, 0)
|
||||
keywords := strings.Split(keyword, " ")
|
||||
for _, p := range l.Playlists {
|
||||
for _, m := range p.Medias {
|
||||
n := 0
|
||||
for _, k := range keywords {
|
||||
if strings.Contains(m.Title, k) || strings.Contains(m.Artist, k) {
|
||||
n++
|
||||
}
|
||||
if k == m.Title {
|
||||
n += 2
|
||||
}
|
||||
}
|
||||
if n > 0 {
|
||||
result = append(result, struct {
|
||||
M *player.Media
|
||||
N int
|
||||
}{M: m, N: n})
|
||||
}
|
||||
}
|
||||
}
|
||||
sort.Slice(result, func(i, j int) bool {
|
||||
return result[i].N > result[j].N
|
||||
})
|
||||
medias := make([]*player.Media, len(result))
|
||||
for i, r := range result {
|
||||
medias[i] = r.M.Copy()
|
||||
}
|
||||
return medias, nil
|
||||
}
|
||||
|
||||
func (l *Local) UpdateMedia(media *player.Media) error {
|
||||
//TODO implement me
|
||||
panic("implement me")
|
||||
mediaPath := media.Meta.(Meta).Id
|
||||
_, err := os.Stat(mediaPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return readMediaFile(media)
|
||||
}
|
||||
|
||||
func (l *Local) UpdateMediaUrl(media *player.Media) error {
|
||||
//TODO implement me
|
||||
panic("implement me")
|
||||
mediaPath := media.Meta.(Meta).Id
|
||||
_, err := os.Stat(mediaPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
media.Url = mediaPath
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user