Skip to content

fix(signage-manager): fix media uploads, selection and animations - #534

Merged
MrYuion merged 2 commits into
developfrom
fix/signage-manager-media
Oct 2, 2026
Merged

MrYuion merged 2 commits into
developfrom
fix/signage-manager-media

Conversation

@MrYuion

@MrYuion MrYuion commented Oct 2, 2026 •

Copy link
Copy Markdown
Collaborator

On the media page:

  • Upload hangs: a corrupt image left the upload waiting for ever and blocked bulk uploads.
  • Edit modal: an undecodable video blocked it for 15 s.
  • Delete warning: one failed lookup hid playlist usage in the delete confirmation.
  • Group change: the selection and open folder survived a group change from the nav.
  • Upload permissions: they were never asked.
  • Resolution check: portrait 4K was flagged as too large.
  • Animation: the backend stores animations as integer indexes (cross_fade → 2), so the saved animation never showed.

Changes

  • File reading: getMediaMetadata rejects on a decode error or after 15 s, and revokes the URL. Unreadable files are skipped with an error. Bulk prepare runs at most 4 at once.
  • Thumbnails: the edit modal opens with a fallback thumbnail.
  • Delete warning: playlist lookups use allSettled, at most 4 at once.
  • Group change: selection and folder are linkedSignals of the group.
  • Upload permissions: the edit modal has a "File access permissions" select. The dead provider is removed.
  • 4K check: long side ≤3840 and short side ≤2160. The warning shows inside the edit dialog, and in bulk it names the files.
  • Animation: mediaAnimation() maps indexes to names. Names are still written.
  • Smaller fixes: sidebar and preview error states, plural delete text, label ids, aria-labelledby on selects, named close buttons, [(ngModel)], and dead code removed.

Testing

  • Unit tests for each fix. Each fails without its fix.
  • nx test signage-manager (1001) and nx build signage-manager pass.
  • Local PlaceOS stack (uploads mocked; there is no storage): group switch, delete text and lookups, error states, animation against real integer storage, corrupt PNGs, 4K single and bulk, upload permissions, the accessibility tree.

Notes

Independent of the other signage PRs from this review. Based on develop.


Changes made by Claude Opus 5.5 (1M context) in Claude Code, running in T3 Code.

🤖 Generated with Claude Code

@vercel

vercel Bot commented Oct 2, 2026

Copy link
Copy Markdown

Deployment failed for project frontend-templates with the following error:

Resource is limited - try again in 24 hours (more than 100, code: "api-deployments-free-per-day").

Learn More: https://vercel.com/placeos?upgradeToPro=build-rate-limit

@greptile-apps

greptile-apps Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

RetriggerConfidence Score: 5/5

[Medium risk] Fixes media upload, selection, and animation handling in signage manager.

The new changes appear safe to merge, though the existing playlist retry issue remains.

Findings

  1. P2 Playlist retry loses loaded pages ▶

Summary

Signage Manager’s media page now keeps uploads moving when files cannot be read and makes media editing, playlist warnings, and group changes clearer. It also maps saved animation indexes to the names shown in the edit and preview screens.

  • Uploads skip unreadable files, check portrait 4K correctly, and let users choose file access.
  • Playlist lookups keep successful results and show retry states when loading fails.
  • Group changes reset the selected media and folder; animation indexes display as names.

Reviews (2) · Last reviewed commit: "fix(signage-manager): open the media edi..."

Comment thread apps/signage-manager/src/app/media/signage-media.service.ts Outdated
Comment on lines +268 to +270
/** Load the playlists again from the first page */
public retry() {
this._playlist_service.reloadPlaylists();

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Playlist retry loses loaded pages

If a later playlist page fails, the new retry button calls reloadPlaylists. That clears pages that loaded successfully and starts again at page one. Retry the failed page instead so users keep their place and do not fetch those pages again.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed. The fix belongs in the playlist service, which #535 owns: there, reloadPlaylists() now calls PagedList.retry() first and reloads from page one only when the first page failed (commit c13152c, test "loads a later page again on retry and keeps the loaded pages"). The sidebar already calls reloadPlaylists(), so it keeps its loaded pages once #535 merges, with no change needed here.

@MrYuion

MrYuion commented Oct 2, 2026

Copy link
Copy Markdown
Collaborator Author

LGTM

- Reject unreadable files instead of waiting for ever, and prepare bulk
  uploads at most four at a time.
- Open the edit modal when no thumbnail can be made.
- Look up playlist usage with allSettled, four at a time.
- Clear selection and the open folder on any group change.
- Pick upload permissions in the edit modal.
- Check 4K in either orientation and show the warning where it can be
  seen, naming files in bulk.
- Map animation indexes from the backend to their names.
- Error states in the sidebar and preview, plural delete text, and
  accessibility fixes.
… renders

editMedia waited for the thumbnail render, up to 15 s for a video that
could not produce a frame. It now opens the dialog at once with the
pending thumbnail, and the upload uses that same render instead of
rendering a second one.
@MrYuion
MrYuion force-pushed the fix/signage-manager-media branch from 96712eb to ab7a90d Compare October 2, 2026 05:48
@MrYuion
MrYuion merged commit f518cc8 into develop Oct 2, 2026
1 of 2 checks passed
@MrYuion
MrYuion deleted the fix/signage-manager-media branch October 2, 2026 05:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant