mirror of
https://github.com/yattee/yattee.git
synced 2026-07-20 14:22:02 +00:00
9467ac4dbae5d2cf6b882842f404bf9d53a4f661
Register pending changes with the engine state instead of keeping app-managed record arrays, and materialize records from local data at send time in nextRecordZoneChangeBatch. This fixes several data-loss paths: - Pending changes now persist inside the engine state serialization, so saves queued during the debounce window (or while offline) survive app termination. Legacy record-name keys are migrated once. - Transient CloudKit errors (zoneBusy, serviceUnavailable, rate limits, network failures, limitExceeded, batchRequestFailed) re-register the change for engine-scheduled retry instead of silently dropping it. - Conflicts are resolved against the exact record that was sent; the resolved record (carrying the server change tag) is cached and takes precedence at the next send, and any newer local edit evicts it. - Queue methods are now synchronous, removing a task-reordering race where a fast delete/re-add could end up deleting the re-added entity. - Records are built fresh at send time, so queued changes no longer upload stale field snapshots, and batch size limits are handled by the framework.
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.1%
Ruby
3.4%
C
0.4%
Shell
0.1%