Skip to content

Commit fe9ac46

Browse files
author
pykeguo
committed
feat: add refetch lyrics shortcut (r key)
- Add DeleteCache() to remove cached lyrics/translations/covers - Add DeleteLocalLyrics() to remove local .lrc/.lyric files - Add refetch() in player model to re-fetch lyrics from scratch - Update help panel to show 'd' and 'r' keybindings - Update README and README_zh keybinding tables
1 parent d308d43 commit fe9ac46

6 files changed

Lines changed: 59 additions & 0 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ lyrics
103103
| `q` `Ctrl+C` | Quit |
104104
| `?` | Toggle help |
105105
| `d` | Toggle debug |
106+
| `r` | Refetch lyrics |
106107

107108
### How lyrics are resolved
108109

README_zh.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ lyrics
103103
| `q` `Ctrl+C` | 退出 |
104104
| `?` | 帮助 |
105105
| `d` | 调试 |
106+
| `r` | 重新获取歌词 |
106107

107108
### 歌词解析逻辑
108109

internal/lyric/cache.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,12 @@ func SaveCoverToCache(artist, title string, data []byte) error {
9494
return os.WriteFile(CacheCoverPath(artist, title), data, 0644)
9595
}
9696

97+
func DeleteCache(artist, title string) {
98+
os.Remove(CachePath(artist, title))
99+
os.Remove(CacheTransPath(artist, title))
100+
os.Remove(CacheCoverPath(artist, title))
101+
}
102+
97103
func splitLines(data []byte) []string {
98104
return splitLinesStr(string(data))
99105
}

internal/lyric/loader.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,24 @@ func loadEmbedded(path string) []Line {
227227
return BuildLines(lines, nil)
228228
}
229229

230+
func DeleteLocalLyrics(file, title string) {
231+
dir, name, ok := util.SplitPath(file)
232+
if !ok {
233+
return
234+
}
235+
236+
bases := []string{dir + "/" + name}
237+
if len(title) > 0 && title != name {
238+
bases = append(bases, dir+"/"+title)
239+
}
240+
241+
for _, b := range bases {
242+
for _, ext := range []string{".lyric", ".lrc", ".t.lyric", ".t.lrc"} {
243+
os.Remove(b + ext)
244+
}
245+
}
246+
}
247+
230248
func SaveToLocal(file, title, lrc, tlyric string) error {
231249
dir, name, ok := util.SplitPath(file)
232250
if !ok {

internal/player/model.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
7070
case "d":
7171
m.showDebug = !m.showDebug
7272
return m, nil
73+
case "r":
74+
return m.refetch()
7375
}
7476

7577
case tea.WindowSizeMsg:
@@ -122,6 +124,35 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
122124
return m, nil
123125
}
124126

127+
func (m Model) refetch() (tea.Model, tea.Cmd) {
128+
lyric.DeleteLocalLyrics(m.track.File, m.track.Title)
129+
lyric.DeleteCache(m.track.Artist, m.track.Title)
130+
131+
m.lyrics = nil
132+
m.curFile = ""
133+
m.lyricSource = "refetching"
134+
m.fetchingMsg = "refetching lyrics..."
135+
m.fetching = true
136+
m.errMsg = ""
137+
138+
file := m.track.File
139+
dt := m.track.Duration
140+
artist := m.track.Artist
141+
title := m.track.Title
142+
cmd := func() tea.Msg {
143+
lrc, tlyric, err := lyric.FetchContent(file, dt, artist, title)
144+
return fetchDoneMsg{
145+
file: file,
146+
artist: artist,
147+
title: title,
148+
lrc: lrc,
149+
tlyric: tlyric,
150+
err: err,
151+
}
152+
}
153+
return m, cmd
154+
}
155+
125156
func (m Model) poll() (Model, tea.Cmd) {
126157
track := cmus.Remote()
127158
m.track = track

internal/player/view.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,8 @@ func (m Model) renderHelp() string {
284284
keys := []struct{ key, desc string }{
285285
{"q / Ctrl+C", "quit"},
286286
{"?", "toggle help"},
287+
{"d", "toggle debug"},
288+
{"r", "refetch lyrics"},
287289
}
288290

289291
helpLines := make([]string, 0, len(keys))

0 commit comments

Comments
 (0)