Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
7a2a28b
chore: set release to next develop iteration
tobexyz Oct 14, 2025
a4823db
Add files via upload
sr093906 Oct 18, 2025
6dcf618
Merge pull request #185 from sr093906/develop
tobexyz Oct 20, 2025
4d253f8
Bump uri from 0.13.2 to 0.13.3 in /docs
dependabot[bot] Dec 30, 2025
bee8fa7
Merge pull request #188 from tobexyz/dependabot/bundler/docs/uri-0.13.3
tobexyz Dec 31, 2025
4eba3c2
issue #151 init
tobexyz Nov 13, 2025
4b0d08b
issue #151 allow selection of saf sources
tobexyz Nov 29, 2025
de7fc7c
chore: updated gradle version
tobexyz Dec 31, 2025
4d1cbf4
issue #151 allow removal of saf folders
tobexyz Dec 31, 2025
ac362d8
issue #151 fixed update issue when removing saf folder
Jan 24, 2026
2598a29
issue #151 display saf folder in content browser
Jan 24, 2026
d245a0b
chore: removed old uitest and test project
Jan 25, 2026
16e9cb6
issue #151 SAF support initial
Jan 25, 2026
249210f
issue #151 SAF support
Jan 26, 2026
c65cce3
issue #151 manage SAF permissions
Jan 27, 2026
883b16a
issue #151 fixed remote play saf
Jan 27, 2026
683ddbe
issue #151 fixed seek in remote play
Jan 27, 2026
497e74e
issue #151 cleanup persistent saf uris correctly
Jan 27, 2026
4bd32e7
chore: retrieve ip used by content directory dynamically. switch to n…
Jan 31, 2026
77c9b50
chore: robustness on av transport commands
Jan 31, 2026
9385c19
chore: robustness on av transport commands
Jan 31, 2026
52b2432
chore: robustness on av transport and yaacc server
Jan 31, 2026
8339f9a
chore: robustness on av transport and yaacc server
Jan 31, 2026
ef53c7a
chore: robustness on av transport and yaacc server
Jan 31, 2026
3125292
chore: robustness on av transport and yaacc server
Feb 1, 2026
7b8b5c8
feat: allow seek if shared content is proxied by yaacc. Allow range m…
Feb 1, 2026
8d4b2d6
chore: fixed streaming large media files using yaacc upnp server
Feb 1, 2026
da9830d
chore: fixed streaming large media files using yaacc upnp server
Feb 1, 2026
54a77b8
feat: issure #151 added new loading indicator to browser
Feb 1, 2026
1dad859
feat: issue #151 completed SAF support
Feb 1, 2026
727bbf4
chore: fixed wrong type in HttpRange
Feb 1, 2026
560fd9a
feat: issue #151 removed unused restriction check
Feb 1, 2026
63a5ece
Merge pull request #189 from tobexyz/issue151
tobexyz Feb 1, 2026
3e6b051
chore: fixed HttpRangeTest
Feb 2, 2026
2f94038
issue #151 bugixing
Feb 2, 2026
9b0ace4
Merge pull request #190 from tobexyz/feat/issue151-2
tobexyz Feb 7, 2026
9fc1feb
issue #110 start refactoring network stack
Feb 3, 2026
71f121b
chore: fixes issue #151
Feb 5, 2026
5f84687
issue #110 refactoring network stack
Feb 5, 2026
c152d1c
issue #110 changed notification text
Feb 7, 2026
55306e5
issue #110 added smart logger
Feb 7, 2026
6befcdb
chore: comments
Feb 7, 2026
66dddad
chore: comments and description of SAF folder
Feb 7, 2026
1cb085d
chore: use smart logger for org.fourthline too
Feb 7, 2026
ad6addf
chore: process java.nio exception right
Feb 7, 2026
e4d0087
chore: bugfixing #151
Feb 7, 2026
f671749
chore: bugfixing sending alive messages
Feb 7, 2026
04d12d4
chore: improved dlna metadata
Feb 7, 2026
fdb100f
Merge pull request #191 from tobexyz/feat/issue110
tobexyz Feb 7, 2026
049d83d
feat: issue #187 selecting only media resources and try to choose alw…
Feb 7, 2026
de01b33
Merge pull request #192 from tobexyz/feat/issue187
tobexyz Feb 7, 2026
acb8871
feat: #81 implemented yaacc is now able to stream the audio stream of…
Feb 8, 2026
0622ec9
feat: #121 allow screen cast using MJPEG stream
Feb 8, 2026
1397b5f
chore(deps-dev): bump faraday from 2.9.0 to 2.14.1 in /docs
dependabot[bot] Feb 9, 2026
a752b5f
Merge pull request #193 from tobexyz/dependabot/bundler/docs/faraday-…
tobexyz Feb 10, 2026
653f3df
feat: #121 experimental mpegts streaming
Feb 9, 2026
ecf0f95
chore: cleanup
Feb 10, 2026
e361b17
Merge pull request #194 from tobexyz/feat/issue81_121
tobexyz Feb 10, 2026
3be5303
feat: issue #186 media controls on lock screen
Feb 11, 2026
44df45b
Merge pull request #195 from tobexyz/feat/issue186
tobexyz Feb 11, 2026
194b022
feat: issue #105 fixed background service did not stop correctly
Feb 11, 2026
8b871c1
feat: issue #93 volume controls are now implemented according the sta…
Feb 12, 2026
fdc2fb4
feat: issue #105 #93 refactoring player service and player to align w…
Feb 13, 2026
f3fd01c
chore: be more resilent on commands to upnp devices
Feb 14, 2026
9645ee5
chore: clean up dead classes after refactoring
Feb 14, 2026
8433281
chore: clean up and detail information to service notification
Feb 14, 2026
b41e6ec
chore: cleanup, bugfixing, visialize restricted permissision on saf l…
Feb 15, 2026
98abc79
Merge pull request #197 from tobexyz/feat/issue105
tobexyz Feb 15, 2026
db4c5a0
chore: set album art on media item
Feb 17, 2026
bd2305b
chore: fixed restart during pause out of the sudden
Feb 17, 2026
78fe779
chore: fixed album art in notification
Feb 17, 2026
c660560
chore: lru saf file scan
Feb 17, 2026
83bc5c0
chore: improve performance in browsing
Feb 18, 2026
6b06651
chore: added tests
Feb 18, 2026
4c38322
Merge pull request #199 from tobexyz/chore/stabelize
tobexyz Feb 19, 2026
49b80e0
feat: modernized image viewer which allowes zoom
Feb 19, 2026
f2f0276
chore(deps-dev): bump nokogiri from 1.18.9 to 1.19.1 in /docs
dependabot[bot] Feb 20, 2026
9252a65
Merge pull request #200 from tobexyz/dependabot/bundler/docs/nokogiri…
tobexyz Feb 20, 2026
216c966
feat: modernized image viewer
Feb 20, 2026
bd1983b
chore: fixed renderer service
Feb 20, 2026
7c678f2
Merge pull request #201 from tobexyz/feat/ui
tobexyz Feb 20, 2026
c0ea389
feat: tabbrowser activity
Feb 20, 2026
9009238
prepare release
Feb 21, 2026
e6e8888
Merge pull request #202 from tobexyz/feat/ui2
tobexyz Feb 21, 2026
884f91f
prepare release
Feb 21, 2026
610f536
Merge pull request #203 from tobexyz/feat/release
tobexyz Feb 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
.kiro
doxygen
.bundle
_site
Expand Down
126 changes: 126 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
# YAACC Changelog

## [Unreleased] - 2026-02-21

### Added
- **SAF Short ID System**: Implemented short numeric ID mapping to fix UPnP browsing errors caused by long ObjectIDs (97% size reduction)
- **Clear Cache Button**: Added button in Server Control Activity to clear SAF cache and trigger reindexing
- **Image Preload**: Extended preload indexing to include image files (previously only audio/video)
- **Preload Timeout**: Added 5-minute timeout to prevent indefinite hanging during indexing
- **Permission Checks**: Added read permission checks before traversing SAF folders
- **Notification Permission**: Added POST_NOTIFICATIONS permission request on startup (Android 13+)
- **Lightweight Content Wrappers**: Created YaaccItem, YaaccMusicTrack, YaaccPhoto, YaaccRes classes for faster browsing
- **ProtocolInfo Cache**: Pre-created ProtocolInfo for common MIME types to eliminate repeated parsing

### Changed
- **Renamed**: DurationCacheManager → SAFCacheManager (better reflects actual purpose)
- **Extended Cache**: Now caches duration, MIME type, file size, and shortId for all files
- **Optimized Item Creation**: Eliminated Cling library overhead (~5.5x faster, from ~250ms to ~45ms per item)
- **Improved Logging**: Better logging for cache operations and preload progress
- **ID Persistence**: ID counter now persisted in SharedPreferences to maintain stable IDs across restarts

### Fixed
- Fixed SAF folder browsing hanging on folders without read permission
- Fixed preload getting stuck on large or inaccessible folders
- Fixed ID counter not persisting, causing ID collisions after restart
- Fixed cache not including image files
- Fixed UPnP `UPNP_E_BAD_RESPONSE` errors caused by excessively long ObjectIDs

### Performance
- SAF browsing: 70% faster after initial cache population (3.75s → 1.1s for 15 files)
- Item creation: 5.5x faster (~250ms → ~45ms per item)
- ObjectID length: 97% reduction (250 chars → 8 chars)
- Cache hit time: <1ms (memory), <50ms (disk)

### Breaking Changes
- Cache format changed: Old cache entries automatically migrated to include shortId
- ID format changed: ObjectIDs now use short numeric IDs instead of Base64-encoded URIs
- Desktop UPnP clients may need to clear cache and re-browse after update

---

## [4.4.1] - Previous Release

### Added
- Modernized image viewer with zoom support (PhotoView library)
- Media controls on lock screen
- Volume controls using Media Router API (standard Android implementation)
- System audio streaming (Android 10+)
- Screen cast streaming using MJPEG
- Experimental MPEG-TS streaming
- Smart logger for better debugging
- Unit tests for core functionality

### Changed
- Refactored player service to align with recent Android APIs
- Implemented ExoPlayer and Media3 MediaSession
- Smart WiFi lock management to reduce battery drain
- Improved DLNA metadata
- Modernized TabBrowser activity
- Improved performance in content browsing
- LRU cache for SAF file scanning

### Fixed
- Fixed renderer service issues
- Fixed album art in notifications
- Fixed restart during pause
- Fixed background service not stopping correctly
- Fixed issue #151 (network stack)
- Fixed issue #186 (media controls)
- Fixed issue #187 (media resource selection)
- Fixed issue #110 (network stack refactoring)
- Fixed issue #105 (player service refactoring)
- Fixed issue #93 (volume controls)
- Fixed issue #81 (audio streaming)
- Fixed issue #121 (screen cast)

### Removed
- Removed dead classes after refactoring
- Cleaned up deprecated player implementations

---

## Migration Notes

### From 4.4.1 to Unreleased
1. **SAF Cache**: Existing cache entries will be automatically migrated on first access
2. **Desktop Clients**: Clear UPnP client cache and re-browse YAACC server after update
3. **Permissions**: Grant POST_NOTIFICATIONS permission when prompted (Android 13+)
4. **Cache Management**: Use new "Clear SAF Cache" button in Server Control Activity if needed

---

## Technical Details

### SAF Short ID Implementation
- Bidirectional URI ↔ shortId mapping in SAFCacheManager
- Persistent ID counter in SharedPreferences (`saf_id_counter`)
- Automatic migration of old cache entries
- ObjectID format: `1100999` + shortId (e.g., `11009991`, `11009992`)
- URL format: `http://ip:port/saf/11009991/1.mp3`

### Performance Optimizations
- Eliminated Cling Property/ArrayList overhead in item creation
- Cached ProtocolInfo for common MIME types
- Lightweight wrapper classes instead of heavy Cling objects
- Deferred Cling conversion until UPnP response generation

### Cache Improvements
- Memory cache: LRU with 1000 entry limit
- Disk cache: SharedPreferences with automatic trimming
- Preload: Background indexing with timeout and permission checks
- Metadata: Duration, MIME type, file size, shortId for all media files

---

## Known Issues
- Preload may take several minutes for large SAF folders (5-minute timeout)
- Desktop UPnP clients must refresh cache after YAACC cache clear
- Local device in Receiver tab doesn't show status badge (not a UPnP renderer)

---

## Credits
- SAF Short ID implementation: tobexyz
- Content browsing optimization: tobexyz
- Cache management improvements: tobexyz
5 changes: 3 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,20 +1,21 @@
allprojects {
buildscript {
repositories {
jcenter()
google()
mavenLocal()
maven {
url "https://plugins.gradle.org/m2/"
}
mavenCentral()
}
}


repositories {
jcenter()
google()
mavenLocal()
mavenCentral()
maven { url 'https://jitpack.io' }
}


Expand Down
20 changes: 12 additions & 8 deletions docs/Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,12 @@ GEM
ffi (>= 1.15.0)
eventmachine (1.2.7)
execjs (2.9.1)
faraday (2.9.0)
faraday-net_http (>= 2.0, < 3.2)
faraday-net_http (3.1.0)
net-http
faraday (2.14.1)
faraday-net_http (>= 2.0, < 3.5)
json
logger
faraday-net_http (3.4.2)
net-http (~> 0.5)
ffi (1.16.3)
forwardable-extended (2.6.0)
gemoji (4.1.0)
Expand Down Expand Up @@ -205,6 +207,7 @@ GEM
gemoji (>= 3, < 5)
html-pipeline (~> 2.2)
jekyll (>= 3.0, < 5.0)
json (2.18.1)
kramdown (2.4.0)
rexml
kramdown-parser-gfm (1.1.0)
Expand All @@ -213,16 +216,17 @@ GEM
listen (3.9.0)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
logger (1.7.0)
mercenary (0.3.6)
minima (2.5.1)
jekyll (>= 3.5, < 5.0)
jekyll-feed (~> 0.9)
jekyll-seo-tag (~> 2.1)
minitest (5.22.2)
mutex_m (0.2.0)
net-http (0.4.1)
uri
nokogiri (1.18.9-x86_64-linux-gnu)
net-http (0.9.1)
uri (>= 0.11.1)
nokogiri (1.19.1-x86_64-linux-gnu)
racc (~> 1.4)
octokit (4.25.1)
faraday (>= 1, < 3)
Expand Down Expand Up @@ -258,7 +262,7 @@ GEM
unf_ext
unf_ext (0.0.9.1)
unicode-display_width (1.8.0)
uri (0.13.2)
uri (1.1.1)
webrick (1.8.2)

PLATFORMS
Expand Down
Loading
Loading