From 9765fd91f758d888cd2fcfc91ff78074cffd6aa5 Mon Sep 17 00:00:00 2001 From: ZGaetano Date: Thu, 28 May 2026 07:50:18 -0400 Subject: [PATCH] =?UTF-8?q?UXP=20v2.1.3:=20main.js=20=E2=80=94=20fix=20inl?= =?UTF-8?q?ine=20relink=20handler=20(sync=20getActiveProject,=20no=20requi?= =?UTF-8?q?re=20inline)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/premiere-plugin-uxp/src/main.js | 71 ++++++++---------------- 1 file changed, 22 insertions(+), 49 deletions(-) diff --git a/services/premiere-plugin-uxp/src/main.js b/services/premiere-plugin-uxp/src/main.js index f2da16c..05c07ad 100644 --- a/services/premiere-plugin-uxp/src/main.js +++ b/services/premiere-plugin-uxp/src/main.js @@ -1,4 +1,4 @@ -// Dragonflight UXP Panel — main.js v2.1.1 +// Dragonflight UXP Panel — main.js v2.1.3 (function () { if (window.__df_uxp_started) return; @@ -144,7 +144,7 @@ } finally { Library._syncActions(); } }); - // ── Relink single asset ── + // ── Relink single asset (proxy → hi-res) ── $('relink-btn').addEventListener('click', async () => { const a = Library.selectedAsset(); if (!a) return; @@ -164,8 +164,9 @@ UI.showProgress(UI.formatBytes(received) + '…', pct); }); UI.showProgress('Relinking…', 85); + // Timeline._relinkInProject uses ppro() internally (sync getActiveProject) const P = require('premierepro'); - const proj = await P.Project.getActiveProject(); + const proj = P.Project.getActiveProject(); // sync — no await if (!proj) throw new Error('No active project'); await Timeline._relinkInProject(proj, entry.livePath, dest); Library.recordImport(dest, { assetId: a.id, displayName: a.display_name || a.filename }); @@ -195,7 +196,6 @@ catch (e) { UI.hideProgress(); UI.toast('Timeline read failed: ' + e.message, 'error'); return; } if (!_seqCache.clips.length) { UI.hideProgress(); UI.toast('No clips in active sequence', 'error'); return; } UI.hideProgress(); - const resolved = Library.resolveClipsToAssets(_seqCache.clips); const matched = resolved.filter(c => c.asset_id).length; $('export-seq-name').value = _seqCache.sequenceName || 'Sequence 1'; @@ -207,7 +207,6 @@ $('export-close-btn').addEventListener('click', () => UI.closeSlide('export-overlay', 'export-panel')); $('export-cancel-btn').addEventListener('click', () => UI.closeSlide('export-overlay', 'export-panel')); $('export-overlay').addEventListener('click', () => UI.closeSlide('export-overlay', 'export-panel')); - $('export-confirm-btn').addEventListener('click', async () => { if (!_seqCache) return; const seqName = ($('export-seq-name').value || '').trim() || 'Sequence 1'; @@ -234,7 +233,6 @@ const matched = resolved.filter(c => c.asset_id).length; $('conform-clip-info').textContent = matched + ' of ' + _seqCache.clips.length + ' clip(s) matched'; $('conform-start-btn').disabled = matched === 0; - // Sync conform project select from loaded projects const conformProj = $('conform-proj-select'); if (conformProj) { conformProj.innerHTML = ''; @@ -251,26 +249,22 @@ $('conform-close-btn').addEventListener('click', () => UI.closeSlide('conform-overlay', 'conform-panel')); $('conform-cancel-btn').addEventListener('click', () => UI.closeSlide('conform-overlay', 'conform-panel')); $('conform-overlay').addEventListener('click', () => UI.closeSlide('conform-overlay', 'conform-panel')); - $('preset-cards').addEventListener('click', e => { const card = e.target.closest('.preset-card'); if (!card) return; document.querySelectorAll('.preset-card').forEach(c => c.classList.remove('selected')); card.classList.add('selected'); const presets = { - broadcast: { codec:'prores_hq', quality:'high', resolution:'1080p', audio:'broadcast' }, - web: { codec:'h264', quality:'medium', resolution:'1080p', audio:'web' }, - archive: { codec:'prores_4444', quality:'high', resolution:'uhd', audio:'archive' }, + broadcast: { codec:'prores_hq', quality:'high', resolution:'1080p', audio:'broadcast' }, + web: { codec:'h264', quality:'medium', resolution:'1080p', audio:'web' }, + archive: { codec:'prores_4444', quality:'high', resolution:'uhd', audio:'archive' }, }; const p = presets[card.dataset.preset]; if (p) { - $('conform-codec').value = p.codec; - $('conform-quality').value = p.quality; - $('conform-resolution').value = p.resolution; - $('conform-audio').value = p.audio; + $('conform-codec').value = p.codec; $('conform-quality').value = p.quality; + $('conform-resolution').value = p.resolution; $('conform-audio').value = p.audio; } }); - $('conform-start-btn').addEventListener('click', async () => { if (!_seqCache) return; const conformProj = $('conform-proj-select'); @@ -280,21 +274,15 @@ UI.showProgress('Starting conform job…', 15); try { const jobId = await Timeline.startConform(projectId, _seqCache.sequenceName, _seqCache, { - codec: $('conform-codec').value, - quality: $('conform-quality').value, - resolution: $('conform-resolution').value, - audio: $('conform-audio').value, + codec: $('conform-codec').value, quality: $('conform-quality').value, + resolution: $('conform-resolution').value, audio: $('conform-audio').value, }); Timeline.pollConform(jobId, (pct, status) => UI.showProgress('Conform: ' + status + ' (' + pct + '%)…', 15 + pct * 0.8), job => { UI.hideProgress(); - if (job.status === 'completed') { - UI.toast('Conform complete', 'ok'); - Library.refresh(Library.state.searchQuery); - } else { - UI.toast('Conform failed: ' + (job.error || 'unknown'), 'error'); - } + if (job.status === 'completed') { UI.toast('Conform complete', 'ok'); Library.refresh(Library.state.searchQuery); } + else { UI.toast('Conform failed: ' + (job.error || 'unknown'), 'error'); } } ); } catch (e) { UI.hideProgress(); UI.toast('Conform failed: ' + e.message, 'error'); } @@ -309,15 +297,12 @@ try { _seqCache = await Timeline.readActiveSequence(); } catch (e) { UI.hideProgress(); UI.toast('Timeline read failed: ' + e.message, 'error'); return; } UI.hideProgress(); - const resolved = Library.resolveClipsToAssets(_seqCache.clips); _relinkClips = resolved; - const list = $('clip-list'); list.innerHTML = ''; $('relink-summary').classList.add('hidden'); $('relink-start-btn').disabled = true; - if (!resolved.length) { list.innerHTML = '
No clips in active sequence
'; } else { @@ -330,8 +315,7 @@ cb.disabled = !matched; cb.checked = matched; cb.addEventListener('change', _syncRelinkStart); const lbl = document.createElement('label'); - lbl.htmlFor = 'rclip-' + i; - lbl.className = 'clip-item-name'; + lbl.htmlFor = 'rclip-' + i; lbl.className = 'clip-item-name'; lbl.textContent = clip.fileName || 'clip'; const st = document.createElement('span'); st.className = 'clip-item-status'; @@ -340,26 +324,23 @@ list.appendChild(row); }); } - UI.openSlide('relink-overlay', 'relink-panel'); _syncRelinkStart(); } function _syncRelinkStart() { - const any = !!document.querySelector('#clip-list input[type="checkbox"]:checked'); - $('relink-start-btn').disabled = !any; + $('relink-start-btn').disabled = !document.querySelector('#clip-list input[type="checkbox"]:checked'); } function wireRelinkPanel() { $('relink-close-btn').addEventListener('click', () => UI.closeSlide('relink-overlay', 'relink-panel')); $('relink-cancel-btn').addEventListener('click', () => UI.closeSlide('relink-overlay', 'relink-panel')); $('relink-overlay').addEventListener('click', () => UI.closeSlide('relink-overlay', 'relink-panel')); - $('relink-start-btn').addEventListener('click', async () => { - const checked = document.querySelectorAll('#clip-list input[type="checkbox"]:checked'); + const checked = document.querySelectorAll('#clip-list input[type="checkbox"]:checked'); const selected = []; checked.forEach(cb => { - const i = parseInt(cb.id.replace('rclip-',''), 10); + const i = parseInt(cb.id.replace('rclip-', ''), 10); if (_relinkClips[i] && _relinkClips[i].asset_id) selected.push(_relinkClips[i]); }); if (!selected.length) return; @@ -368,25 +349,17 @@ try { const res = await Timeline.batchRelink(selected); UI.hideProgress(); - const msg = res.succeeded + ' clip(s) relinked' + (res.failed ? ', ' + res.failed + ' failed' : ''); - UI.toast(msg, res.failed ? 'error' : 'ok'); + UI.toast(res.succeeded + ' relinked' + (res.failed ? ', ' + res.failed + ' failed' : ''), res.failed ? 'error' : 'ok'); } catch (e) { UI.hideProgress(); UI.toast('Batch relink failed: ' + e.message, 'error'); } }); } // ── Init ────────────────────────────────────────────────────────── function init() { - wireConnectPane(); - wireLibraryPane(); - wireExportPanel(); - wireConformPanel(); - wireRelinkPanel(); - - if (API.state.serverUrl && API.state.apiToken) { - tryConnect(API.state.serverUrl, API.state.apiToken); - } else { - UI.showPane('connect'); - } + wireConnectPane(); wireLibraryPane(); + wireExportPanel(); wireConformPanel(); wireRelinkPanel(); + if (API.state.serverUrl && API.state.apiToken) tryConnect(API.state.serverUrl, API.state.apiToken); + else UI.showPane('connect'); } if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init);