Repository navigation
Conversation
- Streaming from any S3-compatible endpoint (Cloudeka etc.) using ListObjectsV2 + SigV4 signing and presigned GET URLs (path-style) - Local stream proxy with cached resolved URLs (55 min) and 1h presign TTL - Folder-based sync: pick bucket prefixes, sync to Room (DB v45), mirrored into the unified library - Background metadata queue (S3MetadataWorker): embedded tags, duration and album artwork probed via presigned range fetch after sync, 4 files in parallel; live progress banner on the dashboard - Editable saved connection, logout, per-folder re-sync - Queue snapshots keep original cloud URIs so playback survives proxy restarts; stale 127.0.0.1 entries are dropped on restore - SigV4 unit tests against AWS test vectors (plain JVM)
- CloudStreamProxy: dedicated upstream client with 15s connect / 30s read timeouts instead of the shared 8s API client; slow clouds (Cloudeka) routinely exceeded 8s to first byte, especially while the metadata probe queue was running - resolveCloudUri: retry once after 400ms before falling back — proxy warm-up races and network blips previously left a raw s3:// URI for ExoPlayer and failed with "unknown protocol" - Log each S3 resolve failure path (offline / proxy not ready / null resolution) for easier diagnosis
This was referenced Oct 17, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The library sync is deferred while music plays, so S3 now re-mirrors itself when the local song count changes. Matching also accepts the same file name, or the same title and length when the artist tags differ. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Moved to the okuru-id organization fork; supersedes #2919 (and #2916). Same commits, nothing changed.
Summary
Adds a new streaming source: S3-compatible object storage (Cloudeka, Cloudflare R2, MinIO, AWS S3, etc.), built entirely on the existing OkHttp stack — no new dependencies.
S3SigV4), validated against AWS test vectors in plain-JVM unit tests. Credentials stored inEncryptedSharedPreferences.ListObjectsV2with pagination; users pick bucket prefixes (folders) to sync.CloudStreamProxywith a 55-minute resolved-URL cache. Presigned URLs are exempt from the private-IP block (signature marker), private endpoints still protected.ListObjectsV2results are parsed (artist/title fromArtist - Title.extfilenames, album from top-level prefix) and mirrored into the unified library.S3MetadataWorker(WorkManager, unique, network-constrained) probes embedded tags via presigned range fetch +MediaMetadataRetriever— title, artist, album, duration and album artwork — 4 files in parallel, so the initial sync stays fast. Live progress banner on the dashboard shows remaining files.SourceType.S3, DB v45 (s3_songs,s3_folderstables +album_art_uri/metadata_probedcolumns). Queue snapshots keep original cloud URIs so playback survives proxy restarts; stale127.0.0.1entries are dropped on restore.Testing
S3SigV4Test: 6 tests against official AWS SigV4 test vectors (header + presigned) on plain JVM.🤖 Generated with Claude Code