(rec_id)
| 3639 | instance = self.get_object() |
| 3640 | |
| 3641 | def _background_refresh(rec_id): |
| 3642 | try: |
| 3643 | from .tasks import _resolve_poster_for_program |
| 3644 | from .models import Recording |
| 3645 | from core.utils import send_websocket_update |
| 3646 | from django.db import close_old_connections |
| 3647 | |
| 3648 | rec = Recording.objects.select_related("channel").get(id=rec_id) |
| 3649 | cp = rec.custom_properties or {} |
| 3650 | program = cp.get("program") or {} |
| 3651 | |
| 3652 | poster_logo_id, poster_url = _resolve_poster_for_program( |
| 3653 | rec.channel.name, program, channel_logo_id=rec.channel.logo_id, |
| 3654 | ) |
| 3655 | |
| 3656 | # Refresh and merge to avoid overwriting concurrent changes. |
| 3657 | # Only upgrade — never replace a real poster with a channel logo fallback. |
| 3658 | rec.refresh_from_db() |
| 3659 | fresh_cp = rec.custom_properties or {} |
| 3660 | updated = False |
| 3661 | is_channel_logo_fallback = ( |
| 3662 | poster_logo_id == rec.channel.logo_id |
| 3663 | and not poster_url |
| 3664 | ) |
| 3665 | if program and program.get("id"): |
| 3666 | fresh_cp["program"] = program |
| 3667 | updated = True |
| 3668 | if not is_channel_logo_fallback: |
| 3669 | if poster_logo_id and fresh_cp.get("poster_logo_id") != poster_logo_id: |
| 3670 | fresh_cp["poster_logo_id"] = poster_logo_id |
| 3671 | updated = True |
| 3672 | if poster_url and fresh_cp.get("poster_url") != poster_url: |
| 3673 | fresh_cp["poster_url"] = poster_url |
| 3674 | updated = True |
| 3675 | |
| 3676 | if updated: |
| 3677 | rec.custom_properties = fresh_cp |
| 3678 | rec.save(update_fields=["custom_properties"]) |
| 3679 | |
| 3680 | send_websocket_update('updates', 'update', { |
| 3681 | "success": True, |
| 3682 | "type": "recording_updated", |
| 3683 | "recording_id": rec_id, |
| 3684 | }) |
| 3685 | except Exception as e: |
| 3686 | logger.debug(f"refresh-artwork background failed for {rec_id}: {e}") |
| 3687 | finally: |
| 3688 | close_old_connections() |
| 3689 | |
| 3690 | t = threading.Thread(target=_background_refresh, args=(instance.id,), daemon=True) |
| 3691 | t.start() |
nothing calls this directly
no test coverage detected