mirror of
https://github.com/AynaLivePlayer/AynaLivePlayer.git
synced 2025-12-14 14:08:22 +08:00
105 lines
2.8 KiB
Go
105 lines
2.8 KiB
Go
package controller
|
|
|
|
import (
|
|
"AynaLivePlayer/config"
|
|
"AynaLivePlayer/player"
|
|
"AynaLivePlayer/provider"
|
|
"fmt"
|
|
)
|
|
|
|
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
|
|
}
|
|
|
|
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
|
|
}
|
|
}
|