Skip to content

Latest commit

 

History

History
233 lines (181 loc) · 8.51 KB

todo.org

File metadata and controls

233 lines (181 loc) · 8.51 KB

Now

  • [-] gapless playback on windows
    • [-] try to make current preloader thread method work basically, put cfg macros all over the place
      • [X] get cpal device config on startup
      • [ ] preloader makes its own resampler
      • [ ] figure out how to send maybe-resampled samples to player thread does this still cause problems with the preloader needing a generic? or does having device config already solve that? can it just use AnyAudioBuffer again?
      • [ ] add a way for the audio output to handle pre-resampled writes this needs to work as before on linux
      • [ ] remove resampler from audio output
      • [ ] test that this doesn’t screw with displayed times could just only preload a couple packets?
      • [ ] look for other bugs
    • [ ] if that doesn’t work, rewrite with blue/green player see the answer here: pdeljanov/Symphonia#169
      • do not close & reopen the audio device hold on to the ‘spec’ of the device from the beginning this probably requires redoing the output module on windows, at least, it needs the resample rate earlier but this is also always known from startup, because it uses the default config; we could put the resampler before the output module the problem is that makes the whole pipeline platform-dependent
      • use a blue/green swapping pair of audio threads
  • [ ] upgrade iced
    • [ ] start in a separate ui crate?
    • [ ] get all lib versions working
    • [ ] make sure unicode works now

Next

  • [ ] think about how to do search ui
    • command palette?
  • [ ] look into parking_lot again
    • [ ] use parking_lot::Mutex instead iced or std Mutex?
  • [ ] figure out why hover is slow on windows try using tracy?
  • [ ] reduce cpu usage where is it coming from? me, iced, or symphonia? audio thread spinning? other flume worker threads spinning on empty queues? never starting the audio thread still takes 40% CPU
  • [ ] handle text overflow in bottom bar gracefully do the scroll back and forth thing? needs animations
  • [-] keyboard support
    • [X] space for play/pause current song
    • [ ] tab navigation - need to make the buttons focusable focus is a rabbit hole; might be worth waiting on iced so the track numbers will also have to be wrapped in button is it better to not mimic the web for this? what would the alternative look like? do everything by fuzzy search instead of tab-focus
  • [ ] volume controls in ui or just hotkeys? still need some indicator
  • [ ] get a nicer ‘stopped’ state the do-nothing play button and progress slider are bad
  • [ ] add some vimmy ui hotkeys (scroll especially) C-e and C-y are easier snap to top/bottom is easy could have C-d and C-u just move by some predefined chunk
  • [ ] keep track of the queue on the ui side necessary for displaying the queue
  • [ ] replace icons with slightly darker color
    • convert to pngs?
    • modify iced to use theme text_color for svg currentColor?
  • [ ] switch to a cargo workspace? could use an internal crate for player allows for multiple frontends makes it easier to add a streaming backend
  • [ ] improve error handling in souvlaki upstream
  • [ ] avoid using ProgressTimes::ZERO as a sentinel value use an optional, try to catch bad files on import
  • [ ] ability to view tags
  • [ ] ability to fuzzy search by tags
  • [ ] ability to edit tags
  • [ ] do the ‘display_title’ based on file system on import then allow updating it later this is less confusing for the user and avoids unnecessary optionals
  • [ ] preserve the last played song (and other app state? timestamp? scroll?)
  • [ ] integration test the crawler and resizer with filesystem & db, without audio/ui
  • [ ] in player, if audio output is present, then spec and duration should still be validated
  • [ ] make a custom slider / player progress widget style it differently no mouse interaction when disabled change mouse interaction consistently on release no ugly cursor interaction on windows
  • [ ] thumbnail album art for currently playing song or next to songs in a non-album view
  • [ ] handle metadata correctly in the audio thread https://github.com/pdeljanov/Symphonia/blob/master/GETTING_STARTED.md#consuming-metadata was symphonia-play doing that in the print helpers?
  • [ ] switch to tracing from env-logger look into whether it plays nice with iced exector
  • [ ] use a config lib instead of env vars for –debug flag goals: change log level without recompile, be ergonomic with powershell could directly take the log filter as a flag? no new dependencies maybe worth using clap or something
  • [ ] make a full custom app theme
  • [ ] think about a way to type-enforce using immediate transaction for writes like a custom pool wrapper or something might need a delegate macro for that to not be super annoying does sqlite have read-only connections?
  • [ ] handle graceful shutdown on the audio thread need a typed return from the run method? or a way for the ui to join audio instead of disconnecting
  • [ ] handle the audio thread errors gracefully restart the audio thread? go through the possible errors to see what could be done ie; missing/bad file = tell the ui about it and stop can test this by deleting the file after startup
  • [ ] make it more responsive text wrapping in bottom row is bad
  • [ ] make the layout more responsive text wrapping in bottom row is bad

Someday

  • [ ] playlists
  • [ ] current queue (treat like another kind of playlist)
  • [ ] other views
  • [ ] investigate hot-reloading The existing lib only works on macos but there may be a way for iced itself to avoid unloading the old dylib or work around it no longer existing during overlay layout. The hot-reload lib guy is/was also looking into a solution rksm/hot-lib-reloader-rs#25
  • [ ] learn more about how to gracefully shut down audio thread the audio player needs an explicit ‘graceful shutdown’ action currently relying on the process ending to kill it is that actually just fine? counting on drop impls to clean things up the player doesn’t really have non-process-space cleanup to do the resizer could leave files in a bad state, but it’s already ‘inside’ iced consider moving the audio thread into iced’s executor?
  • [ ] cache media controls metadata to avoid unnecessary dbus updates consider implementing this upstream
  • [ ] make souvlaki error respect std error required by anyhow
  • [ ] handle missing time data on track info currently it just logs and uses zero should transition to an error state at the beginning ie have an Option<TrackInfo> with guaranteed fields instead of a TrackInfo with two optional fields does that mean refusing to play the song at all, though? need the id
  • [ ] integration tests
  • [ ] restart audio thread after a crash
  • [ ] help improve iced’s image handling
  • [ ] Address scrolling lag when necessary
  • [ ] drag and drop import
  • [ ] easy bandcamp import? drag/drop zip files? open web view? script for importing collection?
  • [ ] non-latin text (use cosmic’s stuff early?) iced-rs/iced#1454 for now, they’re still using a patched version of iced for the demo pop-os/cosmic-text#33 (comment)
  • [ ] select the music directory with a menu/modal, and cache it
  • [ ] select the config directory based on platform
  • [ ] add a subtle play button to album art
  • [ ] reconsider assumptions re: audio directory
    • the crawler only goes one layer deep
    • songs get their album id based on directory instead of tag
  • [ ] need a way to add/edit tags maybe just in the db, maybe also on the audio file
  • [ ] property testing
  • [ ] use TryFrom instead of as for crawling total_seconds
  • [ ] set up graceful error handling on startup ie missing config dir, other fatal errors should be readable for a non-technical user either in ui or miette
  • [ ] remove/update remove_dir_all from souvlaki or my fork there’s a patched version of 0.8.0 that fixes a security vulnerability this only affects windows builds, but that’s still bad remove_dir_all v0.5.3

└── tempfile v3.3.0 └── uds_windows v1.0.2 └── zbus v3.6.2 └── souvlaki v0.5.1 (https://github.com/Giesch/souvlaki?branch=main#ede6a666) └── clef v0.1.0 (/home/danielknutson/Projects/clef)

  • [ ] try to simplify developer setup
    • setup script?
    • bundle native deps?
    • avoid .env with diesel cli
  • [ ] figure out if/how/why AnyAudioBuffer is bad, maybe get rid of it