Fixing Slow down of Playlists mentioned @ #20
As mentioned at https://github.com/aditya-K2/gomp/issues/20#issuecomment-1142443829 The Slow Down was caused due to constant calls to the MPD Server for playlist info. Using Watcher to handle playlist event changes. Also when In SearchView upon adding Artist/Album due to constant change in playlists there was a slow down. Hence using CommandList for that.
This commit is contained in:
parent
bf6939a554
commit
fdd390a731
@ -111,29 +111,33 @@ func PrintArtistTree(a map[string]map[string]map[string]string) {
|
||||
|
||||
// Adds All tracks from a specified album to a playlist
|
||||
func AddAlbum(a map[string]map[string]map[string]string, alb string, artist string) {
|
||||
clist := Conn.BeginCommandList()
|
||||
for _, v := range a[artist][alb] {
|
||||
err := Conn.Add(v)
|
||||
if err != nil {
|
||||
notify.Notify.Send("Could Not Add Song : " + v)
|
||||
}
|
||||
clist.Add(v)
|
||||
}
|
||||
if err := clist.End(); err != nil {
|
||||
notify.Notify.Send("Could Not Add Album : " + alb)
|
||||
} else {
|
||||
notify.Notify.Send("Album Added: " + alb)
|
||||
}
|
||||
}
|
||||
|
||||
// Adds All tracks from a specified artist to a playlist
|
||||
func AddArtist(a map[string]map[string]map[string]string, artist string) {
|
||||
clist := Conn.BeginCommandList()
|
||||
if val, ok := a[artist]; ok {
|
||||
for _, v := range val {
|
||||
for _, path := range v {
|
||||
err := Conn.Add(path)
|
||||
if err != nil {
|
||||
notify.Notify.Send("Could Not Add Song : " + path)
|
||||
}
|
||||
clist.Add(path)
|
||||
}
|
||||
}
|
||||
if err := clist.End(); err != nil {
|
||||
notify.Notify.Send("Could Not Add Artist : " + artist)
|
||||
} else {
|
||||
notify.Notify.Send("Artist Added: " + artist)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Adds Specified Track to the Playlist
|
||||
func AddTitle(a map[string]map[string]map[string]string, artist, alb, track string, addAndPlay bool) {
|
||||
|
4
main.go
4
main.go
@ -60,9 +60,6 @@ func main() {
|
||||
// Generating the Directory Tree for File Navigation.
|
||||
client.DirTree = client.GenerateDirectoryTree(fileMap)
|
||||
|
||||
// Default View upon Opening is of Playlist.
|
||||
views.PView.Update(ui.Ui.ExpandedView)
|
||||
|
||||
var Volume int64
|
||||
var Random, Repeat bool
|
||||
var SeekOffset = viper.GetInt("SEEK_OFFSET")
|
||||
@ -120,6 +117,7 @@ func main() {
|
||||
|
||||
// This Function Is Responsible for Changing the Focus it uses the Focus Map and Based on it Chooses
|
||||
// the Draw Function
|
||||
views.PView.StartWatcher()
|
||||
views.SetCurrentView(views.PView)
|
||||
ui.Ui.ExpandedView.SetDrawFunc(func(s tcell.Screen, x, y, width, height int) (int, int, int, int) {
|
||||
views.GetCurrentView().Update(ui.Ui.ExpandedView)
|
||||
|
@ -6,10 +6,13 @@ import (
|
||||
"github.com/aditya-K2/gomp/ui"
|
||||
"github.com/aditya-K2/gomp/utils"
|
||||
"github.com/aditya-K2/tview"
|
||||
"github.com/fhs/gompd/v2/mpd"
|
||||
"github.com/gdamore/tcell/v2"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
type PlaylistView struct {
|
||||
Playlist []mpd.Attrs
|
||||
}
|
||||
|
||||
func (s PlaylistView) GetViewName() string {
|
||||
@ -57,11 +60,12 @@ func (p PlaylistView) DeleteSongFromPlaylist() {
|
||||
}
|
||||
|
||||
func (p PlaylistView) Update(inputTable *tview.Table) {
|
||||
CONN := client.Conn
|
||||
_playlistAttr, _ := CONN.PlaylistInfo(-1, -1)
|
||||
|
||||
inputTable.Clear()
|
||||
for i, j := range _playlistAttr {
|
||||
cplaylist := make([]mpd.Attrs, len(p.Playlist))
|
||||
for k, v := range p.Playlist {
|
||||
cplaylist[k] = v
|
||||
}
|
||||
for i, j := range cplaylist {
|
||||
_, _, w, _ := inputTable.GetInnerRect()
|
||||
if j["Title"] == "" || j["Artist"] == "" || j["Album"] == "" {
|
||||
inputTable.SetCell(i, 0,
|
||||
@ -80,3 +84,46 @@ func (p PlaylistView) Update(inputTable *tview.Table) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (p *PlaylistView) StartWatcher() {
|
||||
var err error
|
||||
if p.Playlist == nil {
|
||||
if p.Playlist, err = client.Conn.PlaylistInfo(-1, -1); err != nil {
|
||||
utils.Print("RED", "Watcher couldn't get the current Playlist.\n")
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
del := ""
|
||||
nt := viper.GetString("NETWORK_TYPE")
|
||||
port := viper.GetString("MPD_PORT")
|
||||
if nt == "tcp" {
|
||||
del = ":"
|
||||
} else if nt == "unix" && port != "" {
|
||||
port = ""
|
||||
}
|
||||
|
||||
w, err := mpd.NewWatcher(nt,
|
||||
viper.GetString("NETWORK_ADDRESS")+del+port, "", "playlist")
|
||||
if err != nil {
|
||||
utils.Print("RED", "Could Not Start Watcher.\n")
|
||||
utils.Print("GREEN", "Please check your MPD Info in config File.\n")
|
||||
panic(err)
|
||||
}
|
||||
|
||||
go func() {
|
||||
for err := range w.Error {
|
||||
notify.Notify.Send(err.Error())
|
||||
}
|
||||
}()
|
||||
|
||||
go func() {
|
||||
for subsystem := range w.Event {
|
||||
if subsystem == "playlist" {
|
||||
if p.Playlist, err = client.Conn.PlaylistInfo(-1, -1); err != nil {
|
||||
utils.Print("RED", "Watcher couldn't get the current Playlist.\n")
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user