Skip to content

Commit

Permalink
refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
dweymouth committed Feb 6, 2025
1 parent 59931e3 commit 6d5af7e
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 20 deletions.
10 changes: 7 additions & 3 deletions backend/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ type App struct {
MPRISHandler *MPRISHandler
WinSMTC *SMTC
ipcServer ipc.IPCServer
LrcLibFetcher *LrcLibFetcher

// UI callbacks to be set in main
OnReactivate func()
Expand All @@ -57,7 +58,7 @@ type App struct {
displayAppName string
appVersionTag string
configDir string
CacheDir string
cacheDir string
portableMode bool

isFirstLaunch bool // set by config file reader
Expand Down Expand Up @@ -103,7 +104,7 @@ func StartupApp(appName, displayAppName, appVersion, appVersionTag, latestReleas
displayAppName: displayAppName,
appVersionTag: appVersionTag,
configDir: confDir,
CacheDir: cacheDir,
cacheDir: cacheDir,
portableMode: portableMode,
}
a.bgrndCtx, a.cancel = context.WithCancel(context.Background())
Expand Down Expand Up @@ -144,6 +145,9 @@ func StartupApp(appName, displayAppName, appVersion, appVersionTag, latestReleas
a.ServerManager.SetPrefetchAlbumCoverCallback(func(coverID string) {
_, _ = a.ImageManager.GetCoverThumbnail(coverID)
})
if a.Config.Application.EnableLrcLib {
a.LrcLibFetcher = NewLrcLibFetcher(a.cacheDir)
}

a.PlaybackManager.OnPlaying(func() {
SetSystemSleepDisabled(true)
Expand Down Expand Up @@ -411,7 +415,7 @@ func (a *App) LoginToDefaultServer(string) error {
}

func (a *App) DeleteServerCacheDir(serverID uuid.UUID) error {
path := path.Join(a.CacheDir, serverID.String())
path := path.Join(a.cacheDir, serverID.String())
log.Printf("Deleting server cache dir: %s", path)
return os.RemoveAll(path)
}
Expand Down
23 changes: 15 additions & 8 deletions backend/lrclib.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,21 @@ import (
"github.com/dweymouth/supersonic/backend/mediaprovider"
)

const CACHE_LYRICS_FOLDER = "lyrics"
const lrclibCacheFolder = "lrclib"

func FetchLrcLibLyricsCached(name, artist, album string, durationSecs int, cacheDir string) (*mediaprovider.Lyrics, error) {
hash := makeTrackIdHash(name, artist, album, durationSecs)
cachePath := filepath.Join(cacheDir, CACHE_LYRICS_FOLDER)
type LrcLibFetcher struct {
cachePath string
}

func NewLrcLibFetcher(baseCacheDir string) *LrcLibFetcher {
cachePath := filepath.Join(baseCacheDir, lrclibCacheFolder)
configdir.MakePath(cachePath)
cacheFilePath := filepath.Join(cachePath, fmt.Sprintf("%s_lyrics.txt", hash))
return &LrcLibFetcher{cachePath: cachePath}
}

func (l *LrcLibFetcher) FetchLrcLibLyrics(name, artist, album string, durationSecs int) (*mediaprovider.Lyrics, error) {
hash := makeTrackIdHash(name, artist, album, durationSecs)
cacheFilePath := filepath.Join(l.cachePath, fmt.Sprintf("%s.txt", hash))

// File is cached. Try to use it
if _, err := os.Stat(cacheFilePath); err == nil {
Expand All @@ -42,7 +50,7 @@ func FetchLrcLibLyricsCached(name, artist, album string, durationSecs int, cache
}

// Fetch the lyrics
lyrics, err := FetchLrcLibLyrics(name, artist, album, durationSecs)
lyrics, err := l.fetchFromServer(name, artist, album, durationSecs)
if err != nil {
return nil, err
}
Expand All @@ -56,8 +64,7 @@ func FetchLrcLibLyricsCached(name, artist, album string, durationSecs int, cache
return lyrics, nil
}

// FetchLrcLibLyrics is a static function to search and fetch lyrics from lrclib.net
func FetchLrcLibLyrics(name, artist, album string, durationSecs int) (*mediaprovider.Lyrics, error) {
func (l *LrcLibFetcher) fetchFromServer(name, artist, album string, durationSecs int) (*mediaprovider.Lyrics, error) {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()

Expand Down
14 changes: 6 additions & 8 deletions ui/browsing/nowplayingpage.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,7 @@ type nowPlayingPageState struct {
mp mediaprovider.MediaProvider
canRate bool
canShare bool
lrcLib bool
cacheDir string
lrcFetch *backend.LrcLibFetcher
}

func NewNowPlayingPage(
Expand All @@ -94,11 +93,10 @@ func NewNowPlayingPage(
mp mediaprovider.MediaProvider,
canRate bool,
canShare bool,
lrcLibEnabled bool,
cacheDir string,
lrcLibFetcher *backend.LrcLibFetcher,
) *NowPlayingPage {
state := nowPlayingPageState{
conf: conf, contr: contr, pool: pool, sm: sm, im: im, pm: pm, mp: mp, canRate: canRate, canShare: canShare, lrcLib: lrcLibEnabled, cacheDir: cacheDir,
conf: conf, contr: contr, pool: pool, sm: sm, im: im, pm: pm, mp: mp, canRate: canRate, canShare: canShare, lrcFetch: lrcLibFetcher,
}
if page, ok := pool.Obtain(util.WidgetTypeNowPlayingPage).(*NowPlayingPage); ok && page != nil {
page.nowPlayingPageState = state
Expand Down Expand Up @@ -363,8 +361,8 @@ func (a *NowPlayingPage) fetchLyrics(ctx context.Context, song *mediaprovider.Tr
log.Printf("Error fetching lyrics: %v", err)
}
}
if lyrics == nil {
lyrics, err = backend.FetchLrcLibLyricsCached(song.Title, song.ArtistNames[0], song.Album, song.Duration, a.cacheDir)
if lyrics == nil && a.lrcFetch != nil {
lyrics, err = a.lrcFetch.FetchLrcLibLyrics(song.Title, song.ArtistNames[0], song.Album, song.Duration)
if err != nil {
log.Println(err.Error())
}
Expand Down Expand Up @@ -452,7 +450,7 @@ func (a *NowPlayingPage) Reload() {
}

func (s *nowPlayingPageState) Restore() Page {
return NewNowPlayingPage(s.conf, s.contr, s.pool, s.sm, s.im, s.pm, s.mp, s.canRate, s.canShare, s.lrcLib, s.cacheDir)
return NewNowPlayingPage(s.conf, s.contr, s.pool, s.sm, s.im, s.pm, s.mp, s.canRate, s.canShare, s.lrcFetch)
}

var _ CanShowPlayTime = (*NowPlayingPage)(nil)
Expand Down
2 changes: 1 addition & 1 deletion ui/browsing/router.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func (r Router) CreatePage(rte controller.Route) Page {
case controller.Genres:
return NewGenresPage(r.Controller, r.App.ServerManager.Server)
case controller.NowPlaying:
return NewNowPlayingPage(&r.App.Config.NowPlayingConfig, r.Controller, r.widgetPool, r.App.ServerManager, r.App.ImageManager, r.App.PlaybackManager, r.App.ServerManager.Server, canRate, canShare, r.App.Config.Application.EnableLrcLib, r.App.CacheDir)
return NewNowPlayingPage(&r.App.Config.NowPlayingConfig, r.Controller, r.widgetPool, r.App.ServerManager, r.App.ImageManager, r.App.PlaybackManager, r.App.ServerManager.Server, canRate, canShare, r.App.LrcLibFetcher)
case controller.Playlist:
return NewPlaylistPage(rte.Arg, &r.App.Config.PlaylistPage, r.widgetPool, r.Controller, r.App.ServerManager, r.App.PlaybackManager, r.App.ImageManager)
case controller.Playlists:
Expand Down

0 comments on commit 6d5af7e

Please sign in to comment.