rewrite using IoC and DI

This commit is contained in:
Aynakeya
2022-12-23 05:06:57 -08:00
parent 0498d2dbf3
commit c47d338a9e
88 changed files with 2295 additions and 1856 deletions

View File

@@ -1,104 +1,34 @@
package controller
import (
"AynaLivePlayer/config"
"AynaLivePlayer/player"
"AynaLivePlayer/provider"
"fmt"
"AynaLivePlayer/common/event"
"AynaLivePlayer/model"
)
var UserPlaylist *player.Playlist
var History *player.Playlist
var HistoryUser *player.User
var SystemPlaylist *player.Playlist
var PlaylistManager []*player.Playlist
func AddToHistory(media *player.Media) {
l.Tracef("add media %s (%s) to history", media.Title, media.Artist)
media = media.Copy()
// reset url for future use
media.Url = ""
if History.Size() >= 1024 {
History.Replace([]*player.Media{})
}
History.Push(media)
return
type IPlaylistController interface {
Size() int
GetHistory() IPlaylist
AddToHistory(media *model.Media)
GetDefault() IPlaylist
GetCurrent() IPlaylist
Get(index int) IPlaylist
Add(pname string, uri string) IPlaylist
Remove(index int) IPlaylist
SetDefault(index int) error
PreparePlaylistByIndex(index int) error
}
func ToHistoryMedia(media *player.Media) *player.Media {
media = media.Copy()
media.User = HistoryUser
return media
}
func ToSystemMedia(media *player.Media) *player.Media {
media = media.Copy()
media.User = player.SystemUser
return media
}
func AddPlaylist(pname string, uri string) *player.Playlist {
l.Infof("try add playlist %s with provider %s", uri, pname)
id, err := provider.FormatPlaylistUrl(pname, uri)
if err != nil || id == "" {
l.Warnf("fail to format %s playlist id for %s", uri, pname)
return nil
}
p := player.NewPlaylist(fmt.Sprintf("%s-%s", pname, id), player.PlaylistConfig{})
p.Meta = provider.Meta{
Name: pname,
Id: id,
}
PlaylistManager = append(PlaylistManager, p)
config.Player.Playlists = append(config.Player.Playlists, &config.PlayerPlaylist{
ID: uri,
Provider: pname,
})
return p
}
func RemovePlaylist(index int) {
l.Infof("Try to remove playlist.index=%d", index)
if index < 0 || index >= len(PlaylistManager) {
l.Warnf("playlist.index=%d not found", index)
return
}
if index == config.Player.PlaylistIndex {
l.Info("Delete current system playlist, reset system playlist to index = 0")
SetSystemPlaylist(0)
}
if index < config.Player.PlaylistIndex {
l.Debugf("Delete playlist before system playlist (index=%d), reduce system playlist index by 1", config.Player.PlaylistIndex)
config.Player.PlaylistIndex = config.Player.PlaylistIndex - 1
}
PlaylistManager = append(PlaylistManager[:index], PlaylistManager[index+1:]...)
config.Player.Playlists = append(config.Player.Playlists[:index], config.Player.Playlists[index+1:]...)
}
func SetSystemPlaylist(index int) {
l.Infof("try set system playlist to playlist.id=%d", index)
if index < 0 || index >= len(PlaylistManager) {
l.Warn("playlist.index=%d not found", index)
return
}
err := PreparePlaylist(PlaylistManager[index])
if err != nil {
return
}
medias := PlaylistManager[index].Playlist
config.Player.PlaylistIndex = index
ApplyUser(medias, player.PlaylistUser)
SystemPlaylist.Replace(medias)
}
func PreparePlaylistByIndex(index int) {
l.Infof("try prepare playlist.id=%d", index)
if index < 0 || index >= len(PlaylistManager) {
l.Warn("playlist.id=%d not found", index)
return
}
err := PreparePlaylist(PlaylistManager[index])
if err != nil {
return
}
type IPlaylist interface {
Model() *model.Playlist // mutable model (not a copy)
EventManager() *event.Manager
Name() string
Size() int
Get(index int) *model.Media
Pop() *model.Media
Replace(medias []*model.Media)
Push(media *model.Media)
Insert(index int, media *model.Media)
Delete(index int) *model.Media
Move(src int, dst int)
Next() *model.Media
}