Instead of having separate struts for Songs without Album and Songs with Album, have one and just add a method that would compare with album and another that would compare without album.
implement find()
for Vec<SongEntry>
so that you can do entries.find().artist("Sabaton")
or entries.find().song("The Final Solution", "Coat of Arms", "Sabaton")
maybe also entries.print_top(Aspect::Songs, 10)
instead of the current
display::print_top(&entries, Aspect::Songs, 10)
?
=> implemented!
Strip your endsong.json
file of private information and shorten it a bit
to make an example endsong.json
file to be used by people wanting to try this out
An option where you set a perctange. E.g. if you played a song for less than 30% of its entire length, this listen is ignored.
Where it would take the max song length from? Go through all these song entries and see which one has got the
highest ms_played
.
Problem: it would need to go through all songs for maximum ms_played
and then again to select which ones should be ignored (performance impact?)
- plotting
- either "plotpy - crates.io: Rust Package Registry" https://crates.io/crates/plotpy
- or automatically call a Python script on your own https://www.reddit.com/r/rust/comments/8h22h3/graphing_in_rust/dygs2xt?utm_medium=android_app&utm_source=share&context=3
- see this repo for
gnuplot
andplotters
usage
- Web
- WASM?
- Web as GUI
- static HTML or local server?
- for plotting
- Yew, Seed Web Frameworks?
- CLI arguments:
rep --no-duplicates endsong_0.json endsong_2.json
- e.g.
--no-duplicates
would prevent duplicate checking- I think just checking the hash of every file, putting into array and check if array has duplicates
- and this option if you're absolutely sure there's no duplicates
- and the relative paths to files as arguments without the
--
- or maybe to a whole directory of
endsong_x.json
files?
- or maybe to a whole directory of
- e.g.
- Plotters for graphs?
- some Rust libraries
- clap - CL argument parser
- GUI library egui
- inquire library for interactive terminal
- Tauri for UI with Javascript and backend with Rust!
- way for interacting with it:
- after running it with the files as arguments you type in commands that do stuff
- like
help
,print top artist "Powerwolf"
or similar - maybe interactive menu like this one
- with autocomplete for commands AND (most importantly) artists, albums and songs !!
- maybe select commands with the interactive menu/options and there you can go back or forward and change parameters or leave them at default and at the end you type in the aspect
- THIS and a shorthand commands for power users (faster and easier to the same command but with one thing changed)
- adjust for DST + time zone
- e.g. for my listens adjust when DST was in Germany and save the relative time from the absolute Unix timestamp
- for beginning: hardcode when CET changes to CEST for 2016-2022
- rayon for parallel iterator work!!!
- tui-rs for terminal UI?!?
- do something about different artists having the same name...
- but that would require the use of the Spotify API -> inefficient
- rspotify for Spotify API
- indicatif for progress bar (when going through the
endsong.json
files? - cargo-mutants for testing?