From 97343b9670fe8fe68c7ffd0de124c810c7ca4fec Mon Sep 17 00:00:00 2001 From: tramhao Date: Fri, 5 Mar 2021 16:39:02 +0800 Subject: [PATCH] fetch lyric from tag editor is working --- popup.go | 261 +------------------------------------------------------ 1 file changed, 2 insertions(+), 259 deletions(-) diff --git a/popup.go b/popup.go index 51f564e..7e3330f 100644 --- a/popup.go +++ b/popup.go @@ -3,16 +3,13 @@ package main import ( - "errors" "fmt" "regexp" - "sort" "strings" "sync" "time" "unicode/utf8" - "github.com/bogem/id3v2" "github.com/gdamore/tcell/v2" "github.com/rivo/tview" "github.com/sahilm/fuzzy" @@ -840,239 +837,6 @@ func ytSearchPopup() { }) } -func tagPopup(node *AudioFile) (err error) { - - popupLyricMap := make(map[string]string) - popupID := "tag-input-popup" - - var tag *id3v2.Tag - if node.isAudioFile { - tag, err = id3v2.Open(node.path, id3v2.Options{Parse: true}) - if err != nil { - return tracerr.Wrap(err) - } - defer tag.Close() - } else { - return nil - } - usltFrames := tag.GetFrames(tag.CommonID("Unsynchronised lyrics/text transcription")) - - for _, f := range usltFrames { - uslf, ok := f.(id3v2.UnsynchronisedLyricsFrame) - if !ok { - die(errors.New("USLT error")) - } - res := uslf.Lyrics - popupLyricMap[uslf.ContentDescriptor] = res - } - var options []string - for option := range popupLyricMap { - options = append(options, option) - } - sort.Strings(options) - - var ( - artistInputField *tview.InputField = tview.NewInputField() - titleInputField *tview.InputField = tview.NewInputField() - albumInputField *tview.InputField = tview.NewInputField() - getTagButton *tview.Button = tview.NewButton("Get Tag") - saveTagButton *tview.Button = tview.NewButton("Save Tag") - lyricDropDown *tview.DropDown = tview.NewDropDown() - deleteLyricButton *tview.Button = tview.NewButton("Delete Lyric") - getLyric1Button *tview.Button = tview.NewButton("Get Lyric 1") - getLyric2Button *tview.Button = tview.NewButton("Get Lyric 2") - getLyric3Button *tview.Button = tview.NewButton("Get Lyric 3") - lyricTextView *tview.TextView - leftGrid *tview.Grid = tview.NewGrid() - rightFlex *tview.Flex = tview.NewFlex() - ) - artistInputField.SetLabel("Artist: "). - SetFieldWidth(20). - SetText(tag.Artist()). - SetFieldBackgroundColor(gomu.colors.popup). - SetBackgroundColor(gomu.colors.background) - titleInputField.SetLabel("Title: "). - SetFieldWidth(20). - SetText(tag.Title()). - SetFieldBackgroundColor(gomu.colors.popup). - SetBackgroundColor(gomu.colors.background) - albumInputField.SetLabel("Album: "). - SetFieldWidth(20). - SetText(tag.Album()). - SetFieldBackgroundColor(gomu.colors.popup). - SetBackgroundColor(gomu.colors.background) - getTagButton.SetBorder(true). - SetBackgroundColor(gomu.colors.background). - SetTitleColor(gomu.colors.accent) - saveTagButton.SetSelectedFunc(func() { - tag, err = id3v2.Open(node.path, id3v2.Options{Parse: true}) - if err != nil { - errorPopup(err) - } - defer tag.Close() - tag.SetArtist(artistInputField.GetText()) - tag.SetTitle(titleInputField.GetText()) - tag.SetAlbum(albumInputField.GetText()) - err := tag.Save() - if err != nil { - errorPopup(err) - } else { - defaultTimedPopup(" Success ", "Tag update successfully") - } - }). - SetBorder(true). - SetBackgroundColor(gomu.colors.background). - SetTitleColor(gomu.colors.foreground) - - deleteLyricButton.SetSelectedFunc(func() { - _, langExt := lyricDropDown.GetCurrentOption() - if len(options) > 0 { - err := embedLyric(node.path, "", langExt, true) - if err != nil { - errorPopup(err) - } - // Reset dropdown options - var newOptions []string - for _, v := range options { - if v == langExt { - continue - } - newOptions = append(newOptions, v) - } - lyricDropDown.SetOptions(newOptions, nil). - SetCurrentOption(0) - // Reset lyricpreview - if len(newOptions) > 0 { - _, langExt = lyricDropDown.GetCurrentOption() - lyricTextView.SetText(popupLyricMap[langExt]). - SetTitle(" " + langExt + " lyric preview ") - } else { - langExt = "" - lyricTextView.SetText("No lyric embeded."). - SetTitle(" " + langExt + " lyric preview ") - } - infoPopup(langExt + " lyric deleted successfully.") - } else { - infoPopup("No lyric embeded.") - } - }). - SetBorder(true). - SetBackgroundColor(gomu.colors.background). - SetTitleColor(gomu.colors.accent) - - getLyric1Button.SetBorder(true). - SetBackgroundColor(gomu.colors.background). - SetTitleColor(gomu.colors.accent) - getLyric2Button.SetBorder(true). - SetBackgroundColor(gomu.colors.background). - SetTitleColor(gomu.colors.accent) - getLyric3Button.SetBorder(true). - SetBackgroundColor(gomu.colors.background). - SetTitleColor(gomu.colors.accent) - lyricDropDown.SetOptions(options, nil). - SetCurrentOption(0). - SetFieldBackgroundColor(gomu.colors.background). - SetFieldTextColor(gomu.colors.accent). - SetPrefixTextColor(gomu.colors.accent). - SetSelectedFunc(func(text string, _ int) { - lyricTextView.SetText(popupLyricMap[text]). - SetTitle(" " + text + " lyric preview ") - }). - SetLabel("Embeded Lyrics: ") - lyricDropDown.SetBackgroundColor(gomu.colors.popup) - - var lyricText string - _, langExt := lyricDropDown.GetCurrentOption() - lyricText = popupLyricMap[langExt] - if lyricText == "" { - lyricText = "No lyric embeded." - langExt = "" - } - lyricTextView = tview.NewTextView() - lyricTextView. - SetDynamicColors(true). - SetRegions(true). - SetScrollable(true). - SetTitle(" " + langExt + " lyric preview "). - SetBorder(true) - - lyricTextView.SetText(lyricText). - SetScrollable(true). - SetWordWrap(true). - SetWrap(true). - SetBackgroundColor(gomu.colors.popup). - SetBorder(true) - - leftGrid.SetRows(3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3). - SetColumns(30). - AddItem(artistInputField, 0, 0, 1, 3, 1, 10, true). - AddItem(titleInputField, 1, 0, 1, 3, 1, 10, true). - AddItem(albumInputField, 2, 0, 1, 3, 1, 10, true). - AddItem(getTagButton, 3, 0, 1, 3, 1, 10, true). - AddItem(saveTagButton, 4, 0, 1, 3, 1, 10, true). - AddItem(lyricDropDown, 6, 0, 1, 3, 1, 10, true). - AddItem(deleteLyricButton, 7, 0, 1, 3, 1, 10, true). - AddItem(getLyric1Button, 8, 0, 1, 3, 1, 10, true). - AddItem(getLyric2Button, 9, 0, 1, 3, 1, 10, true). - AddItem(getLyric3Button, 10, 0, 1, 3, 1, 10, true) - leftGrid.SetBorder(true). - SetTitle(node.name). - SetBorderPadding(1, 1, 2, 2) - - rightFlex.SetDirection(tview.FlexColumn). - AddItem(lyricTextView, 0, 1, true) - - lyricFlex := tview.NewFlex().SetDirection(tview.FlexColumn). - AddItem(leftGrid, 0, 2, true). - AddItem(rightFlex, 0, 3, true) - - lyricFlex. - SetTitle(node.name). - SetBorderPadding(1, 1, 2, 2). - SetBackgroundColor(gomu.colors.popup) - - inputs := []tview.Primitive{ - artistInputField, - titleInputField, - albumInputField, - getTagButton, - saveTagButton, - lyricDropDown, - deleteLyricButton, - getLyric1Button, - getLyric2Button, - getLyric3Button, - lyricTextView, - } - - gomu.pages. - AddPage(popupID, center(lyricFlex, 90, 40), true, true) - gomu.popups.push(lyricFlex) - - lyricFlex.SetInputCapture(func(e *tcell.EventKey) *tcell.EventKey { - switch e.Key() { - case tcell.KeyEnter: - if deleteLyricButton.HasFocus() { - return e - } else if saveTagButton.HasFocus() { - return e - } - - case tcell.KeyEsc: - gomu.pages.RemovePage(popupID) - gomu.popups.pop() - case tcell.KeyTab: - cycleFocus(gomu.app, inputs, false) - case tcell.KeyBacktab: - cycleFocus(gomu.app, inputs, true) - } - - return e - }) - - return err -} - func lyricPopup(audioFile *AudioFile) error { results, err := lyric.GetLyricOptions(audioFile.name) @@ -1105,7 +869,7 @@ func lyricPopup(audioFile *AudioFile) error { errorPopup(err) gomu.app.Draw() } else { - infoPopup("Lyric added successfully") + infoPopup("en Lyric added successfully") gomu.app.Draw() } @@ -1148,7 +912,7 @@ func lyricPopupCN(audioFile *AudioFile, serviceProvider string) error { errorPopup(err) gomu.app.Draw() } else { - infoPopup("Lyric added successfully") + infoPopup("cn Lyric added successfully") gomu.app.Draw() } @@ -1157,24 +921,3 @@ func lyricPopupCN(audioFile *AudioFile, serviceProvider string) error { return nil } - -func cycleFocus(app *tview.Application, elements []tview.Primitive, reverse bool) { - for i, el := range elements { - if !el.HasFocus() { - continue - } - - if reverse { - i = i - 1 - if i < 0 { - i = len(elements) - 1 - } - } else { - i = i + 1 - i = i % len(elements) - } - - app.SetFocus(elements[i]) - return - } -}