Skip to content

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 10 Jan 01:05
· 14 commits to release since this release
d67cb1e

Changes

New Features

fetch: Follow new_feed_url redirects when fetching feeds #17 4e9d62c

fetch: Make podcast slug of fetch cli command optional so it now fetches all by default #16 e046a1c

di: Add Service derive macro to simplify service construction across commands e866722

Split Scrape into separate Add and Fetch commands 2e4b893

core: Add rate limiting to HttpClient. Move cache logic to HttpCache service. Remove default implementation from PathProvider and HttpClient as it neglects the cache path. c16ee13

dioxus: Add an episode download button which triggers a download on the server command runner which in turn sends an event stream back to the web which updates the button icon. Replace Dioxus Lazy init with tokio OnceCell due to returned instances not being consistent. b0e0ccf

Add option for hardlinking from cache to data directory. Fix the automatic determination if it's possible. 8eb00e5

command: Add events subscriber to CommandMediator and replace progress implementation with events tracking 57c3a05

command: Revise command macro to work in WebAssembly 7f2e154

command: Track the status of commands by storing a hashmap of CommandStatus 7eb518d

emulate: Only create feeds with episodes e69912f

Implement a generic CommandRunner 1e0bd8a

Revise DownloadCommand to download each episode individually and call it with a CommandRunner 93f6247

Revise ServiceProvider to construct services on demand eaf14da

Introduce API to retrieve partial structs from db 9f3c842

dioxus: Use Lazy to provide ServiceProvider as global state f39333d

Store metadata as a SQLite db and access using SeaORM d9e01a9

Improve error handling in PodcastsContext 7456e96

Added placeholder AddPodcastPage 9ace784

Setup loading and not found messages for EpisodePage and PodcastPage 5d964a3

Display a SkeletonMediaObject on the index page when loading 228e34a

Added Button component 0afe450

Added Icon component 4b7f6ed

Introduce MediaObject component to remove repetition 68e5487

Introduce previous property to RouteInfo 82c1e8d

Add app bar 7fa1797

Position floating action buttons above navigation bar eeb72f6

Add tabs for navigation 43e235c

Convert HTML to plain text e57e466

Format duration in a human form e015868

Use Uuid for EpisodeInfo.id 0a3cec4

Change anchor background on hover 550dbe2

Add header to PodcastPage 03b5701

Add EpisodePage e9be2d1

Add PodcastPage with episode list f228244

Introduce PodcastsContext 505b4e7

Bug Fixes

emulate: Exclude new_feed_url from created feeds 426a1e9

download: Skip already downloaded episodes #3 413ccee

fetch: Revise update_feed so existing episodes are matched and updated rather than being overwritten #1 db74b02

download: Fix progress bar missing queue events in DownloadCliCommand 36f4819

command: Prevent race condition when getting instructions by calling notify at start. Fix off-by-one when creating workers. Wait for workers to start before proceeding. Add additional trace logs 9794e86

http: Overwrite files if they already exist 5b6915e

http: Check if downloaded file is empty 7ab2533

emulate: Skip episodes that have not been downloaded 8a7dc9a

download: Check tag types before removing to avoid APE index out of bounds panic 056bd5a

Fix hover colors on light theme 0c994b9

Copy fonts from npm in Dockerfile 3d5fb72

Support alternative duration formats deab02b

Performance

download: Directly execute the update statement to avoid sea orm returning the updated model 85938b4

Build

Revise dioxus docker to use target volume 915aec0

Dependencies

Update dependencies b60a1b1

Remove unused dependency 5f3be34

Documentation

download: Add inline documentation for DownloadHandler and related structs 7cc4bd1

Add comprehensive build and installation guides for CLI and web app c9dc7e0

Code Style

Apply code style with clippy f3cb251

Add .editorconfig 19257c0

Apply code style with clippy 2ee86c7

Apply code style with clippy 1895cdc

Apply code style with clippy 4b3730f

Refactor

core: Relocate insert_episodes and update_feed under respective Add and Fetch commands b009a93

metadata: Split save_feed into create_feed and update_feed with SQL snapshot tests. 35c2822

metadata: Extract reusable functions for podcast and episode operations. Add unit tests and snapshots for SQL generation. 469cb46

core: Add validation methods to UrlWrapper. Replace occurrences of Url with UrlWrapper 3afd117

Warning

Breaking Change: di: Replace add_instance with chained with_instance for improved ServiceProvider API fluency #8 934e0a8

command: Create a concrete CommandEvent via macro with serialization support 1972c10

command: Replace CommandResult with explicit Result<CommandSuccess, CommandFailure> 681c943

command: Remove unused error d054732

command: Move logic to CommandMediator to prevent leaking internal details. Store progress as a struct 0192557

command: Remove unnecessary Arc 85395aa

Introduce episode helpers 9a7e29a

Introduce UrlWrapper 825a7b2

Use explicit Slug struct and type aliases ebdbf0f

dioxus: Move logic to dedicated start function c31a74c

dioxus: Reduce logging verbosity for dioxus 06fa5b3

Use explicit selects FromQueryResult instead of DerivePartialModel and reduce number of partials 5cb2099

Warning

Breaking Change: Merge services and commands into core gated by feature c4a6117

Replace Url in EpisodeInfo and PodcastInfo with String 21bbbd7

Rename component to Page bdb33b6

Fix spacing of main content 3c72a33

Use overlay color for Drawer, AppBar and NavigationBar c4ab86b

Move logic to NavigationBar e528e29

Icons above text in navigation bar c9b0150

Use Button app bar back ad10a9e

Use div instead of header for MediaObject 42ddbdf

Introduce Main component that handles the AppBar 0edee2c

Replace overly complex flexbox layout with fixed 9e549d8

Move logic to Breadcrumbs component 832a786

Move Drawer to components a64695e

Invert the Drawer implementation to remove nesting. 5f2f1fe

Invert the floating action button implementation to remove nesting. ec63472

Invert the bulma Menu implementation to remove nesting. eeb86ba

Move conversion logic to alnwick_services 41792fd

Move file extension constants to separate module e4fa765

Combine multiple errors correctly 469f064

Remove redundant take() 54a94ab

Move logic to PodcastFeed, PodcastInfo and EpisodeInfo 6ee2ea8

Rename to IndexPage for simplicity 8bb6598

Re-style PodcastsPage to match PodcastPage e576548

Store podcasts as a HashMap 17178a3

Move logic global value setting logic to use_effect hook dae5ed2

Add SettingsContext::consume() 8b0c7e5

Move logic to SettingsContext::create() 74ef1b7

Tests

Revise emulate and cover tests to useTestServiceProvider 900a4c2

Update test results 889ca05

Ignore example.com tests f0a5342

Use isolated test logger throughout 317a5ff

Add test_logging 31c977e

core: Add test for database structure 95fed6a

Test SQL snapshots of API cde0cad

Add RSS conversion test b7a1d9b

CI

Add check_args to CI workflow configuration 0cc1976

Add Homebrew release fe8adeb

Chores

core: Derive Copy, Eq, and PartialEq for error types and improve inline documentation 1ddad3a

Reduce the default logging verbosity 8f671b3

Other

Improve consistency of mock database use. Introduce MockFeeds and remove MetadataRepositoryExample. Rename TestServiceProvider to MockServices #4 d67cb1e

Use constants for example slugs and url c3c659b

Add MetadataRepositoryExample 901dbbd