Media controls (MPRIS, Windows SMTC); stop old tracks when switching

This commit is contained in:
sarah committed 2026-10-09 18:57:03 +02:00
1 parent e2d7515e08
commit d7f5eba1c2
14 files changed
+799 -26

No files matched your search

+9 -2
View File
@@ -11,7 +11,7 @@ import flet as ft
from Core import AudioExtensions, DisplayPath, Home, IsAudioFile, Note, Palette
from Covers import CoverFor
from Metadata import ReadDetails, ReadTrack
from Metadata import ReadDetails, ReadTrack, Track
from Player import Player
from Transport import CoverImage, Transport
from Widgets import App, EmptyState, InfoTable
@@ -36,6 +36,7 @@ class AudioMode(ft.Column):
self.Rows: dict[str, ft.Container] = {}
self.Current: Optional[str] = None
self.AutoAdvance = TheApp.Config.AudioAutoAdvance
self.NowPlaying: Optional[Track] = None # for the system media controls
ThePlayer.OnEnded = lambda: TheApp.Page.run_task(self._Ended)
ThePlayer.OnChanged = lambda: self.Bar.Refresh()
@@ -193,7 +194,9 @@ class AudioMode(ft.Column):
self.TheApp.Notify(f"{Path(FilePath).name} is gone.", "error")
return
self.Current = FilePath
self.NowPlaying = Info
await self.ThePlayer.Load(FilePath, Duration=Info.Duration) # errors arrive through OnError
self.TheApp.MediaChanged()
self._Highlight()
self._Show(self.List)
self._ScrollTo(FilePath)
@@ -265,9 +268,13 @@ class AudioMode(ft.Column):
self.Bar.Refresh()
def _ToggleLoop(self, e) -> None:
self.ThePlayer.Loop = not self.ThePlayer.Loop
self.SetLoop(not self.ThePlayer.Loop)
def SetLoop(self, Enabled: bool) -> None:
self.ThePlayer.Loop = Enabled
self.LoopButton.icon_color = Palette.Mauve if self.ThePlayer.Loop else Palette.Overlay0
self._Show(self.LoopButton)
self.TheApp.MediaModesChanged()
def _ToggleAdvance(self, e) -> None:
self.AutoAdvance = not self.AutoAdvance