chore: Added More Informative Comments
This commit is contained in:
parent
6405bebeed
commit
0118886d5e
@ -3,6 +3,7 @@ package client
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/fhs/gompd/mpd"
|
"github.com/fhs/gompd/mpd"
|
||||||
|
|
||||||
"strings"
|
"strings"
|
||||||
@ -54,11 +55,9 @@ func UpdatePlaylist(inputTable *tview.Table) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// The GenerateContentSlice returns a slice of the content to be displayed on the Search View. The Slice is generated
|
||||||
The GenerateContentSlice returns a slice of the content to be displayed on the Search View. The Slice is generated
|
// because the random nature of maps as they return values randomly hence the draw function keeps changing the order
|
||||||
because the random nature of maps as they return values randomly hence the draw function keeps changing the order
|
// in which the results appear.
|
||||||
in which the results.
|
|
||||||
*/
|
|
||||||
func GenerateContentSlice(selectedSuggestion string) ([]interface{}, error) {
|
func GenerateContentSlice(selectedSuggestion string) ([]interface{}, error) {
|
||||||
var ContentSlice []interface{}
|
var ContentSlice []interface{}
|
||||||
if strings.TrimRight(selectedSuggestion, " ") == "" {
|
if strings.TrimRight(selectedSuggestion, " ") == "" {
|
||||||
@ -100,11 +99,9 @@ func GenerateContentSlice(selectedSuggestion string) ([]interface{}, error) {
|
|||||||
return ContentSlice, nil
|
return ContentSlice, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// UpdateSearchView as the name suggests Updates the Search View the idea is to basically keep a fourth option called
|
||||||
UpdateSearchView as the name suggests Updates the Search View the idea is to basically keep a fourth option called
|
// Search in the Navigation bar which will render things from a global ContentSlice at least in the context of the main
|
||||||
Search in the Navigation bar which will render things from a global ContentSlice at least in the context of the main
|
// function this will also help in persisting the Search Results.
|
||||||
function this will also help in persisting the Search Results.
|
|
||||||
*/
|
|
||||||
func UpdateSearchView(inputTable *tview.Table, c []interface{}) {
|
func UpdateSearchView(inputTable *tview.Table, c []interface{}) {
|
||||||
inputTable.Clear()
|
inputTable.Clear()
|
||||||
_, _, width, _ := inputTable.GetInnerRect()
|
_, _, width, _ := inputTable.GetInnerRect()
|
||||||
@ -166,6 +163,8 @@ func Update(f []FileNode, inputTable *tview.Table) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GenerateArtistTree Artist Tree is a map of Artist to their Album Map
|
||||||
|
// Album Tree is a map of the tracks in that particular album.
|
||||||
func GenerateArtistTree() (map[string]map[string]map[string]string, error) {
|
func GenerateArtistTree() (map[string]map[string]map[string]string, error) {
|
||||||
ArtistTree = make(map[string]map[string]map[string]string)
|
ArtistTree = make(map[string]map[string]map[string]string)
|
||||||
AllInfo, err := CONN.ListAllInfo("/")
|
AllInfo, err := CONN.ListAllInfo("/")
|
||||||
@ -199,9 +198,7 @@ func PrintArtistTree(a map[string]map[string]map[string]string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// Adds All tracks from a specified album to a playlist
|
||||||
Adds All tracks from a specified album to a playlist
|
|
||||||
*/
|
|
||||||
func AddAlbum(a map[string]map[string]map[string]string, alb string, artist string) {
|
func AddAlbum(a map[string]map[string]map[string]string, alb string, artist string) {
|
||||||
for _, v := range a[artist][alb] {
|
for _, v := range a[artist][alb] {
|
||||||
err := CONN.Add(v)
|
err := CONN.Add(v)
|
||||||
@ -212,9 +209,7 @@ func AddAlbum(a map[string]map[string]map[string]string, alb string, artist stri
|
|||||||
NotificationServer.Send("Album Added : " + alb)
|
NotificationServer.Send("Album Added : " + alb)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// Adds All tracks from a specified artist to a playlist
|
||||||
Adds All tracks from a specified artist to a playlist
|
|
||||||
*/
|
|
||||||
func AddArtist(a map[string]map[string]map[string]string, artist string) {
|
func AddArtist(a map[string]map[string]map[string]string, artist string) {
|
||||||
if val, ok := a[artist]; ok {
|
if val, ok := a[artist]; ok {
|
||||||
for _, v := range val {
|
for _, v := range val {
|
||||||
@ -229,9 +224,7 @@ func AddArtist(a map[string]map[string]map[string]string, artist string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// Adds Specified Track to the Playlist
|
||||||
Adds Specified Track to the Playlist
|
|
||||||
*/
|
|
||||||
func AddTitle(a map[string]map[string]map[string]string, artist, alb, track string, addAndPlay bool) {
|
func AddTitle(a map[string]map[string]map[string]string, artist, alb, track string, addAndPlay bool) {
|
||||||
if addAndPlay {
|
if addAndPlay {
|
||||||
id, err := CONN.AddId(a[artist][alb][track], -1)
|
id, err := CONN.AddId(a[artist][alb][track], -1)
|
||||||
|
25
main.go
25
main.go
@ -22,7 +22,6 @@ import (
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
config.ReadConfig()
|
config.ReadConfig()
|
||||||
// Connect to MPD server
|
|
||||||
var mpdConnectionError error
|
var mpdConnectionError error
|
||||||
CONN, mpdConnectionError := mpd.Dial("tcp", "localhost:"+viper.GetString("MPD_PORT"))
|
CONN, mpdConnectionError := mpd.Dial("tcp", "localhost:"+viper.GetString("MPD_PORT"))
|
||||||
if mpdConnectionError != nil {
|
if mpdConnectionError != nil {
|
||||||
@ -37,8 +36,11 @@ func main() {
|
|||||||
render.SetConnection(CONN)
|
render.SetConnection(CONN)
|
||||||
|
|
||||||
cache.SetCacheDir(viper.GetString("CACHE_DIR"))
|
cache.SetCacheDir(viper.GetString("CACHE_DIR"))
|
||||||
|
|
||||||
Renderer := render.NewRenderer()
|
Renderer := render.NewRenderer()
|
||||||
|
// Connecting the Renderer to the Main UI
|
||||||
ui.ConnectRenderer(Renderer)
|
ui.ConnectRenderer(Renderer)
|
||||||
|
|
||||||
c, _ := CONN.CurrentSong()
|
c, _ := CONN.CurrentSong()
|
||||||
if len(c) != 0 {
|
if len(c) != 0 {
|
||||||
Renderer.Start(c["file"])
|
Renderer.Start(c["file"])
|
||||||
@ -47,27 +49,41 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
UI := ui.NewApplication()
|
UI := ui.NewApplication()
|
||||||
|
|
||||||
|
// Connecting the Notification Server to the Main UI
|
||||||
notify.ConnectUI(UI)
|
notify.ConnectUI(UI)
|
||||||
|
|
||||||
fileMap, err := CONN.GetFiles()
|
fileMap, err := CONN.GetFiles()
|
||||||
|
|
||||||
|
// Generating the Directory Tree for File Navigation.
|
||||||
dirTree := client.GenerateDirectoryTree(fileMap)
|
dirTree := client.GenerateDirectoryTree(fileMap)
|
||||||
|
|
||||||
|
// Default View upon Opening is of Playlist.
|
||||||
client.UpdatePlaylist(UI.ExpandedView)
|
client.UpdatePlaylist(UI.ExpandedView)
|
||||||
|
|
||||||
_v, _ := CONN.Status()
|
_v, _ := CONN.Status()
|
||||||
|
// Setting Volume, Random and Repeat Values
|
||||||
Volume, _ := strconv.ParseInt(_v["volume"], 10, 64)
|
Volume, _ := strconv.ParseInt(_v["volume"], 10, 64)
|
||||||
Random, _ := strconv.ParseBool(_v["random"])
|
Random, _ := strconv.ParseBool(_v["random"])
|
||||||
Repeat, _ := strconv.ParseBool(_v["repeat"])
|
Repeat, _ := strconv.ParseBool(_v["repeat"])
|
||||||
|
|
||||||
ArtistTree, err := client.GenerateArtistTree()
|
ArtistTree, err := client.GenerateArtistTree()
|
||||||
|
|
||||||
|
// Used for Fuzzy Searching
|
||||||
ArtistTreeContent := utils.ConvertToArray(ArtistTree)
|
ArtistTreeContent := utils.ConvertToArray(ArtistTree)
|
||||||
|
|
||||||
Notify := notify.NewNotificationServer()
|
Notify := notify.NewNotificationServer()
|
||||||
Notify.Start()
|
Notify.Start()
|
||||||
|
|
||||||
|
// Connecting Notification Server to Client and Rendering Module so that they can send Notifications
|
||||||
client.SetNotificationServer(Notify)
|
client.SetNotificationServer(Notify)
|
||||||
render.SetNotificationServer(Notify)
|
render.SetNotificationServer(Notify)
|
||||||
|
|
||||||
|
// This is the Slice that is used to Display Content in the SearchView
|
||||||
var SearchContentSlice []interface{}
|
var SearchContentSlice []interface{}
|
||||||
|
|
||||||
|
// This Function Is Responsible for Changing the Focus it uses the Focus Map and Based on it Chooses
|
||||||
|
// the Draw Function
|
||||||
UI.ExpandedView.SetDrawFunc(func(s tcell.Screen, x, y, width, height int) (int, int, int, int) {
|
UI.ExpandedView.SetDrawFunc(func(s tcell.Screen, x, y, width, height int) (int, int, int, int) {
|
||||||
if ui.HasFocus("Playlist") {
|
if ui.HasFocus("Playlist") {
|
||||||
client.UpdatePlaylist(UI.ExpandedView)
|
client.UpdatePlaylist(UI.ExpandedView)
|
||||||
@ -79,6 +95,9 @@ func main() {
|
|||||||
return UI.ExpandedView.GetInnerRect()
|
return UI.ExpandedView.GetInnerRect()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Function Maps is used For Mapping Keys According to the Value mapped to the Key the respective Function is called
|
||||||
|
// For e.g. in the config if the User Maps T to togglePlayBack then whenever in the input handler the T is received
|
||||||
|
// the respective function in this case togglePlayBack is called.
|
||||||
var FuncMap = map[string]func(){
|
var FuncMap = map[string]func(){
|
||||||
"showChildrenContent": func() {
|
"showChildrenContent": func() {
|
||||||
r, _ := UI.ExpandedView.GetSelection()
|
r, _ := UI.ExpandedView.GetSelection()
|
||||||
@ -197,6 +216,9 @@ func main() {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Generating the Key Map Based on the Function Map Here Basically the Values will be flipped
|
||||||
|
// In the config if togglePlayBack is mapped to [ T , P, SPACE ] then here Basically we will receive a map
|
||||||
|
// for each event T, P, SPACE mapped to the same function togglePlayBack
|
||||||
config.GenerateKeyMap(FuncMap)
|
config.GenerateKeyMap(FuncMap)
|
||||||
|
|
||||||
UI.SearchBar.SetAutocompleteFunc(func(c string) []string {
|
UI.SearchBar.SetAutocompleteFunc(func(c string) []string {
|
||||||
@ -216,6 +238,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Input Handler
|
||||||
UI.ExpandedView.SetInputCapture(func(e *tcell.EventKey) *tcell.EventKey {
|
UI.ExpandedView.SetInputCapture(func(e *tcell.EventKey) *tcell.EventKey {
|
||||||
if val, ok := config.KEY_MAP[int(e.Rune())]; ok {
|
if val, ok := config.KEY_MAP[int(e.Rune())]; ok {
|
||||||
FuncMap[val]()
|
FuncMap[val]()
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
package render
|
package render
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/aditya-K2/gomp/ui"
|
|
||||||
"github.com/fhs/gompd/mpd"
|
|
||||||
"image"
|
"image"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
"github.com/aditya-K2/gomp/ui"
|
||||||
|
"github.com/fhs/gompd/mpd"
|
||||||
|
|
||||||
"github.com/aditya-K2/gomp/cache"
|
"github.com/aditya-K2/gomp/cache"
|
||||||
"github.com/aditya-K2/gomp/utils"
|
"github.com/aditya-K2/gomp/utils"
|
||||||
"github.com/nfnt/resize"
|
"github.com/nfnt/resize"
|
||||||
@ -26,18 +27,14 @@ func SetNotificationServer(n interface{ Send(string) }) {
|
|||||||
Notify = n
|
Notify = n
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// Renderer is just a channel on which we will send the Path to the song whose
|
||||||
Renderer is just a channel on which we will send the Path to the song whose
|
// Image is to be Rendered. This channel is passed to the OpenImage which in turn is called
|
||||||
Image is to be Rendered. This channel is passed to the OpenImage which in turn is called
|
// by the Start() function as a go routine.
|
||||||
by the Start() function as a go routine.
|
|
||||||
*/
|
|
||||||
type Renderer struct {
|
type Renderer struct {
|
||||||
c chan string
|
c chan string
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// Returns a new Renderer with a string channel
|
||||||
Returns a new Renderer with a string channel
|
|
||||||
*/
|
|
||||||
func NewRenderer() *Renderer {
|
func NewRenderer() *Renderer {
|
||||||
c := make(chan string)
|
c := make(chan string)
|
||||||
return &Renderer{
|
return &Renderer{
|
||||||
@ -45,21 +42,15 @@ func NewRenderer() *Renderer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// Send Image Path to Renderer
|
||||||
Send Image Path to Renderer
|
|
||||||
*/
|
|
||||||
func (self *Renderer) Send(path string) {
|
func (self *Renderer) Send(path string) {
|
||||||
self.c <- path
|
self.c <- path
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// Go Routine that will Be Called and will listen on the channel c
|
||||||
|
// for changes and on getting a string over the channel will open the Image and
|
||||||
Go Routine that will Be Called and will listen on the channel c
|
// keep listening again. This will keep the image blocked ( i.e no need to use time.Sleep() etc. )
|
||||||
for changes and on getting a string over the channel will open the Image and
|
// and saves resources too.
|
||||||
keep listening again. This will keep the image blocked ( i.e no need to use time.Sleep() etc. )
|
|
||||||
and saves resources too.
|
|
||||||
|
|
||||||
*/
|
|
||||||
func OpenImage(path string, c chan string) {
|
func OpenImage(path string, c chan string) {
|
||||||
fw, fh := utils.GetFontWidth()
|
fw, fh := utils.GetFontWidth()
|
||||||
var im *ueberzug.Image
|
var im *ueberzug.Image
|
||||||
@ -79,18 +70,14 @@ func OpenImage(path string, c chan string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// Initialises the Renderer and calls the go routine OpenImage and passes the channel
|
||||||
Initialises the Renderer and calls the go routine OpenImage and passes the channel
|
// as argument.
|
||||||
as argument.
|
|
||||||
*/
|
|
||||||
func (self *Renderer) Start(path string) {
|
func (self *Renderer) Start(path string) {
|
||||||
go OpenImage(path, self.c)
|
go OpenImage(path, self.c)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// This Function returns the path to the image that is to be rendered it checks first for the image in the cache
|
||||||
This Function returns the path to the image that is to be rendered it checks first for the image in the cache
|
// else it adds the image to the cache and then extracts it and renders it.
|
||||||
else it adds the image to the cache and then extracts it and renders it.
|
|
||||||
*/
|
|
||||||
func GetImagePath(path string) string {
|
func GetImagePath(path string) string {
|
||||||
a, err := CONN.ListInfo(path)
|
a, err := CONN.ListInfo(path)
|
||||||
var extractedImage string
|
var extractedImage string
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
package ui
|
package ui
|
||||||
|
|
||||||
|
// The Focus Map Helps to keep track of which UI Element Currently Has the Focus It can be queried to get the Current
|
||||||
|
// UI Element with Focus and also can set UI Focus keep in mind that it isn't Focus Map that is Responsible to change
|
||||||
|
// the Focus that is Done through the Update Function of UI.ExpandedView */
|
||||||
var FocusMap map[string]bool
|
var FocusMap map[string]bool
|
||||||
|
|
||||||
func GenerateFocusMap() {
|
func GenerateFocusMap() {
|
||||||
|
Loading…
Reference in New Issue
Block a user