Bug in v2.2.6 — pushed app images fail to render
The fix in PR #784 ("generate unique numeric iname for pushed apps") broke the read path for pushed images.
savePushedImage writes the file as pushed/{installID}.webp, but getAppWebpPath (rotation.go:340-346) reads it as pushed/{app.Iname}.webp. Since v2.2.6, those two values are different — installID is what the client sends, iname is now a server-generated number. So every push lands a file the rotation loop can't find:
ERR Failed to read app image path=data/webp/{deviceId}/pushed/2.webp
error="open data/webp/{deviceId}/pushed/2.webp: no such file or directory"
Pre-upgrade rows still work because their iname happens to equal the original installID. New pushes after upgrading create orphan rows that show as a default-image duplicate in rotation.
No client-side fix is possible — the iname is assigned server-side and there's no API to set it.
Suggested fix: in getAppWebpPath, use strings.TrimPrefix(*app.Path, "pushed:") instead of app.Iname for pushed apps.
Bug in v2.2.6 — pushed app images fail to render
The fix in PR #784 ("generate unique numeric iname for pushed apps") broke the read path for pushed images.
savePushedImage writes the file as pushed/{installID}.webp, but getAppWebpPath (rotation.go:340-346) reads it as pushed/{app.Iname}.webp. Since v2.2.6, those two values are different — installID is what the client sends, iname is now a server-generated number. So every push lands a file the rotation loop can't find:
ERR Failed to read app image path=data/webp/{deviceId}/pushed/2.webp
error="open data/webp/{deviceId}/pushed/2.webp: no such file or directory"
Pre-upgrade rows still work because their iname happens to equal the original installID. New pushes after upgrading create orphan rows that show as a default-image duplicate in rotation.
No client-side fix is possible — the iname is assigned server-side and there's no API to set it.
Suggested fix: in getAppWebpPath, use strings.TrimPrefix(*app.Path, "pushed:") instead of app.Iname for pushed apps.