mirror of
https://github.com/yattee/yattee.git
synced 2026-10-23 21:22:53 +00:00
defa6cf08482115f6d4fc14b6a6264c5d89b6948
Round three of review. The subscription picker is fed by SubscriptionAccountValidator, which still decided availability from the instance-keyed credential managers. A login created after the revamp writes only an account-scoped key, so it never appeared in the picker at all - which meant the account resolver added last round could not even be reached. Availability now comes from AccountsManager and account status. SubscriptionFeedCache dispatched on the legacy setting and picked its instance from it, so an account waiting on its credential produced subscriptions from local data while the feed reported notAuthenticated, and deleting the selected account could leave the route pointing at its server. Both the route and the credential now come from the effective context, with the legacy lookup kept only as a fallback for state that predates accounts. Foreground activation re-resolved the identity scope but only recomputed statuses when the scope actually moved. An iCloud Keychain credential arriving after launch does not move it, so the account stayed credentialMissing and reads stayed on the local fallback until relaunch. Statuses are now recomputed on every activation in both scene-phase branches. Providers are bound to an account but never told it anything: a revoked SID left the account signedIn, so the validator kept treating it as valid and neither the banner nor the read fallback engaged. Server calls now record their outcome. Conservatively - a raw 401 marks the credential rejected only when no reverse-proxy basic auth is configured, since otherwise the 401 may have come from the proxy. The two-stage probe that disambiguates the rest is Phase 2; until then an ambiguous failure leaves the status alone rather than wrongly telling the user to sign in again.
Yattee 2 is in the works! A new version of the app is being built with a refreshed experience. It pairs with the new Yattee Server — a self-hosted backend powered by yt-dlp that supports 1000+ sites. Join the TestFlight beta to try early builds, and check the new documentation site at docs.yattee.stream for guides, roadmap and changelog.
Features
- Native user interface built with SwiftUI with customization settings
- Player queue and history
- Player component with custom controls, gestures and support for 4K playback
- Fullscreen, Picture in Picture and background audio playback
- SponsorBlock, configurable categories to skip
License
Yattee and its components is shared on AGPL v3 license.
Languages
Swift
96.9%
Ruby
2.7%
C
0.3%
