Adding A new Field to the FileNode -> Title

Previously During Searching the Connection with mpd client was utilised
to get the title for the files this was slowing the search with large
number of files. Now after adding the Title field to the struct the
Field is accessed instead of querying the server this has lead to faster
searches.

[[ Please Note the Title of a Folder would be the last accessed
track from the FileMap. ]]
This commit is contained in:
aditya-K2 2021-12-28 10:32:48 +05:30
parent a8ae5fb426
commit 09297a4974
3 changed files with 13 additions and 21 deletions

View File

@ -3,6 +3,8 @@ package client
import ( import (
"fmt" "fmt"
"strings" "strings"
"github.com/fhs/gompd/mpd"
) )
type FileNode struct { type FileNode struct {
@ -10,6 +12,7 @@ type FileNode struct {
Path string Path string
Parent *FileNode Parent *FileNode
AbsolutePath string AbsolutePath string
Title string
} }
// Source Interface For Fuzzy Searching. // Source Interface For Fuzzy Searching.
@ -17,12 +20,7 @@ type FileNodes []FileNode
func (f FileNodes) String(i int) string { func (f FileNodes) String(i int) string {
if len(f[i].Children) == 0 { if len(f[i].Children) == 0 {
_s, err := CONN.ListAllInfo(f[i].AbsolutePath) return f[i].Title
if err != nil {
NotificationServer.Send(fmt.Sprintf("Could Not Get Information About the Node %s", f[i].Path))
return f[i].Path
}
return _s[0]["Title"]
} }
return f[i].Path return f[i].Path
} }
@ -31,11 +29,11 @@ func (f FileNodes) Len() int {
return len(f) return len(f)
} }
func (f *FileNode) AddChildren(path string) { func (f *FileNode) AddChildren(path string, title string) {
if f.Path != "" { if f.Path != "" {
f.Children = append(f.Children, FileNode{Children: make([]FileNode, 0), Path: path, Parent: f, AbsolutePath: f.AbsolutePath + "/" + path}) f.Children = append(f.Children, FileNode{Children: make([]FileNode, 0), Path: path, Parent: f, AbsolutePath: f.AbsolutePath + "/" + path, Title: title})
} else { } else {
f.Children = append(f.Children, FileNode{Children: make([]FileNode, 0), Path: path, Parent: f, AbsolutePath: f.AbsolutePath + path}) f.Children = append(f.Children, FileNode{Children: make([]FileNode, 0), Path: path, Parent: f, AbsolutePath: f.AbsolutePath + path, Title: title})
} }
} }
@ -44,14 +42,14 @@ func (f *FileNode) AddChildNode(m FileNode) {
f.Children = append(f.Children, m) f.Children = append(f.Children, m)
} }
func GenerateDirectoryTree(path []string) *FileNode { func GenerateDirectoryTree(path []mpd.Attrs) *FileNode {
var head *FileNode = new(FileNode) var head *FileNode = new(FileNode)
var head1 *FileNode = head var head1 *FileNode = head
for i := range path { for i := range path {
sepPaths := strings.Split(path[i], "/") sepPaths := strings.Split(path[i]["file"], "/")
for j := range sepPaths { for j := range sepPaths {
if len(head.Children) == 0 { if len(head.Children) == 0 {
head.AddChildren(sepPaths[j]) head.AddChildren(sepPaths[j], path[i]["Title"])
head = &(head.Children[len(head.Children)-1]) head = &(head.Children[len(head.Children)-1])
} else { } else {
var headIsChanged = false var headIsChanged = false
@ -63,7 +61,7 @@ func GenerateDirectoryTree(path []string) *FileNode {
} }
} }
if !headIsChanged { if !headIsChanged {
head.AddChildren(sepPaths[j]) head.AddChildren(sepPaths[j], path[i]["Title"])
head = &(head.Children[len(head.Children)-1]) head = &(head.Children[len(head.Children)-1])
} }
} }

View File

@ -1,7 +1,6 @@
package client package client
import ( import (
"fmt"
"strings" "strings"
"github.com/aditya-K2/fuzzy" "github.com/aditya-K2/fuzzy"
@ -18,12 +17,7 @@ func UpdateBuffSearchView(inputTable *tview.Table, m fuzzy.Matches, f []FileNode
if len(f[v.Index].Children) != 0 { if len(f[v.Index].Children) != 0 {
inputTable.SetCellSimple(k, 0, utils.GetMatchedString(f[v.Index].Path, "#0000ff", "yellow", v.MatchedIndexes)) inputTable.SetCellSimple(k, 0, utils.GetMatchedString(f[v.Index].Path, "#0000ff", "yellow", v.MatchedIndexes))
} else { } else {
_s, err := CONN.ListAllInfo(f[v.Index].AbsolutePath) inputTable.SetCellSimple(k, 0, utils.GetMatchedString(f[v.Index].Title, "#fbff00", "green", v.MatchedIndexes))
if err != nil {
NotificationServer.Send(fmt.Sprintf("Could Not Add %s to the Table", f[v.Index].Path))
} else {
inputTable.SetCellSimple(k, 0, utils.GetMatchedString(_s[0]["Title"], "#fbff00", "green", v.MatchedIndexes))
}
} }
if k == 15 { if k == 15 {
break break

View File

@ -52,7 +52,7 @@ func main() {
// Connecting the Notification Server to the Main UI // Connecting the Notification Server to the Main UI
notify.ConnectUI(UI) notify.ConnectUI(UI)
fileMap, err := CONN.GetFiles() fileMap, err := CONN.ListAllInfo("/")
// Generating the Directory Tree for File Navigation. // Generating the Directory Tree for File Navigation.
dirTree := client.GenerateDirectoryTree(fileMap) dirTree := client.GenerateDirectoryTree(fileMap)