77 Commits
Author SHA1 Message Date
nmemmert f41ca1d55a Merge branch 'main' of https://github.com/nmemmert/journey-fm-playlist 2026-08-26 09:06:22 -04:00
nmemmert 031c92b148 Merge branch 'master' 2026-08-26 09:06:06 -04:00
nmemmert b373f29b67 Merge pull request #4 from nmemmert/master
Master
2026-08-26 09:05:23 -04:00
nmemmertandClaude Sonnet 4.6 7efb9265e6 Add per-playlist station selection
Each playlist now has its own station checkboxes in Settings.
Sync scrapes the union of all stations once, then filters songs
by source before syncing each playlist separately.

Config stored as PLAYLISTS JSON: [{name, stations}, ...].
Backward-compatible with flat PLAYLIST_NAME + SELECTED_STATIONS.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-26 09:04:34 -04:00
nmemmertandClaude Sonnet 4.6 ff174a70ce Add multiple playlist support; fix settings save in container
- PLAYLIST_NAMES config key (comma-separated list); falls back to PLAYLIST_NAME
- run_update_job syncs songs to every configured playlist, merges results
- Settings form: dynamic add/remove playlist rows instead of single input
- get_web_config reads config.json directly so form is consistent in
  container environments where env vars override runtime config
- Playlist tab: dropdown to pick which playlist to browse when multiple exist

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-26 08:57:00 -04:00
nmemmert eed3eabfc4 Merge branch 'master' 2026-08-25 16:23:24 -04:00
nmemmertandClaude Sonnet 4.6 389376e43e Fix Top Songs: accumulate play counts per scrape, deduplicate only stat card
song_counts tallies how many times each song appears across all runs
(powers the Top Songs ranking). total_scraped uses the unique seen
set separately so the stat card stays deduplicated.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-25 16:22:27 -04:00
nmemmertandClaude Sonnet 4.6 8f28d9c9ce Deduplicate missing/scraped stats; show matched from latest run
- total_scraped: unique songs ever seen playing (not per-run sum)
- total_missing: unique songs ever reported not in Plex library
- total_matched: matched_count from most recent successful run
- Added (144) stays cumulative — each add is a real playlist event

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-25 13:45:10 -04:00
nmemmert cb31f97e27 Merge pull request #3 from nmemmert/master
Count unique scraped songs instead of cumulative per-run totals
2026-08-25 13:35:58 -04:00
nmemmertandClaude Sonnet 4.6 b394416ed7 Count unique scraped songs instead of cumulative per-run totals
total_scraped and station_counts now reflect distinct songs seen
across all history, not the sum of scraped_count per run.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-25 13:35:24 -04:00
nmemmert 170f784365 Merge pull request #2 from nmemmert/master
Add live sync log, playlist viewer, donut chart, history expand, buy …
2026-08-25 12:28:59 -04:00
nmemmertandClaude Sonnet 4.6 12b6b15206 Add live sync log, playlist viewer, donut chart, history expand, buy list dedup, and date filter
- SSE-based live sync log drawer (ThreadingHTTPServer + queue.Queue log handler)
- Playlist tab: load tracks from Plex, sort, per-track remove
- Match rate donut chart alongside station bar on Overview
- Expandable history rows showing per-station breakdown chips
- Buy list dedup (POST /api/buy-list-dedup) + Copy All Links button
- Date range filter on History run log

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-25 12:18:02 -04:00
nate.emmert ad672b201d Deduplicate top song counting across refreshes 2026-03-26 09:08:26 -04:00
nate.emmert 2d5b23f5bb Disable auto meta-refresh to keep Buy List/History tabs stable 2026-03-26 09:04:18 -04:00
nate.emmert 283d683b29 Add error trace output for /api/refresh and friendly UI display 2026-03-26 08:58:17 -04:00
nate.emmert 88b9d96af5 Integrate desktop features into web UI tabs with API endpoints 2026-03-26 08:46:30 -04:00
nate.emmert 8b06b4d277 Add tabbed dashboard nav + raw API section 2026-03-26 08:36:41 -04:00
nate.emmert 1f2b7129b1 Document song counts + web API + update.sh in README 2026-03-26 08:30:32 -04:00
nate.emmert 81e25f47dd Add update.sh for docker/podman auto-detect and refresh 2026-03-26 08:25:16 -04:00
nate.emmert 21d34b7562 Add per-song per-station playback counts to dashboard 2026-03-26 08:24:41 -04:00
nate.emmert fac4b3ebb8 Add interactive install.sh defaults + run_container webserver defaults and compose updates 2026-03-26 08:14:08 -04:00
nate.emmert 946e8cd92c Add web dashboard with live refresh + fade transitions and CLI/GU integration 2026-03-26 08:00:24 -04:00
Nate Emmert cb966beca2 Fix GitHub Actions workflow YAML compatibility 2026-03-13 09:40:51 -04:00
Nate Emmert ea006795b0 Add GitHub container build workflow 2026-03-13 09:37:30 -04:00
Nate Emmert 6e61d66869 Add Podman env template 2026-03-13 09:34:59 -04:00
Nate Emmert 18f777e3e7 Add K-LOVE support and Podman-friendly container deployment 2026-03-13 09:31:16 -04:00
nmemmert c0ebe118cb Fix pythonw logging handler crashes and reduce noisy dependency logs 2026-02-25 18:11:40 +00:00
nmemmert 3e4ce93824 Improve Windows installer, shortcuts, GUI reliability, and README 2026-02-25 17:55:44 +00:00
nmemmert dab676787d Fix config.json sync - GUI settings now persist to main.py 2025-11-29 11:56:43 -05:00
nmemmert 6ea9c6647a Merge pull request #1 from nmemmert/copilot/add-playlist-name-customization 2025-11-28 11:35:12 -05:00
copilot-swe-agent[bot]andnmemmert f0d9b06ef4 Add validation for station selection to require at least one station
Co-authored-by: nmemmert <67961292+nmemmert@users.noreply.github.com>
2025-11-28 16:31:36 +00:00
copilot-swe-agent[bot]andnmemmert 013edb952f Add station selection feature to SetupWizard and scrape function
Co-authored-by: nmemmert <67961292+nmemmert@users.noreply.github.com>
2025-11-28 16:29:29 +00:00
copilot-swe-agent[bot] d5da0f710e Initial plan 2025-11-28 16:25:25 +00:00
nmemmert 2d027d339a Use custom icon.png and fix buy list path to use absolute path 2025-11-17 14:04:24 -05:00
nmemmert dd985796e6 Fix Spirit FM parsing - bypass Cloudflare and use direct text file 2025-11-17 13:47:41 -05:00
nmemmert e762c4252d Fix song scraping - use proper HTML structure parsing 2025-11-17 13:41:25 -05:00
nmemmert b50b430a5f Switch back to Chrome webdriver, user should run with xvfb-run for headless support 2025-11-17 13:12:14 -05:00
nmemmert 8b68b382ff Switch to Firefox webdriver to avoid Chrome DevTools issues 2025-11-17 13:09:16 -05:00
nmemmert 8393e5d659 Fix Selenium Chrome session issues by simplifying options and adding error handling 2025-11-17 13:01:35 -05:00
nmemmert bf7aa42460 Improve song parsing for Journey FM and Spirit FM, fix app startup issues 2025-11-17 12:56:21 -05:00
nmemmert 59689dcbf6 windows 2025-11-17 12:18:25 -05:00
nmemmert 38131fb653 Fix buy list label to update on filter 2025-11-17 12:11:24 -05:00
nmemmert 5066b0b5e9 Fix syntax error: add missing newline after return statement 2025-11-17 12:05:47 -05:00
nmemmert cdb6e53fb6 Add debug prints to track GUI startup progress 2025-11-17 12:05:02 -05:00
nmemmert f89b970c94 Add display environment check and better error handling for GUI startup 2025-11-17 12:03:53 -05:00
nmemmert 62174895ff Add source tracking for scraped songs and display station in logs and history 2025-11-17 12:02:54 -05:00
nmemmert 723e12fe11 Modify buy list generation to append new missing songs instead of overwriting 2025-11-17 12:01:37 -05:00
nmemmert 2dcd4be86d Add missing QSplitter import to QtWidgets 2025-11-17 11:59:19 -05:00
nmemmert fbe0c4a8e1 Fix QAction import - move from QtWidgets to QtGui 2025-11-17 11:58:35 -05:00
nmemmert 30c2e1c907 Fix matplotlib backend import for PySide6 (Qt6) compatibility 2025-11-17 11:57:40 -05:00