From 45a4f572db34edf643d4093c6ef839a45317dd2c Mon Sep 17 00:00:00 2001 From: JordanKeo45 Date: Fri, 16 Oct 2026 08:48:37 -0300 Subject: [PATCH 01/28] updates gitignore and updates version --- .gitignore | 3 ++- package.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 1961f93..c0fd95a 100644 --- a/.gitignore +++ b/.gitignore @@ -32,4 +32,5 @@ docs/*Test-Plan* docs/*Test_Plan* docs/45Flow-test-plan-*.xlsx -.claude/CLAUDE.md \ No newline at end of file +.claude/CLAUDE.md +docs/project-plans/ \ No newline at end of file diff --git a/package.json b/package.json index 633f3b8..06fc1e6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "45flow", - "version": "1.0.6", + "version": "1.0.7", "description": "Client app allowing users to create/manage collaborator user accounts and send Flow links to collaborators allowing them to view/interact/comment on multimedia files for review.", "main": "main/src/main/main.js", "workspaces": [ From 9018521e7531ee53c635bec55dbc203e9a48c7a8 Mon Sep 17 00:00:00 2001 From: JordanKeo45 Date: Thu, 22 Oct 2026 08:57:59 -0300 Subject: [PATCH 02/28] feat(links): Processing panel, clearer delete dialogs, license renewal field - Link Details: new Processing panel showing per-file review copy, HLS and watermark status with progress, errors and Retry. - Delete link/project dialogs: say when all files are used by other links and disable cleanup; show "deletable of total" sizes and a collapsible file list; "Untitled link" label. - Settings: "Renewed your license?" key field. - Remove dead outputs_exist prompt, unused watermarkRelPath option and the ingest.register log filter. --- src/main/main.ts | 4 - .../components/LinkTranscodeStatus.vue | 250 ++++++++++++++++++ .../components/modals/LinkDetailsModal.vue | 11 + .../components/modals/SettingsModal.vue | 37 ++- src/renderer/views/DashboardView.vue | 36 ++- src/renderer/views/LocalUploadPanel.vue | 47 +--- src/renderer/views/ManageLinks.vue | 77 ++++-- 7 files changed, 378 insertions(+), 84 deletions(-) create mode 100644 src/renderer/components/LinkTranscodeStatus.vue diff --git a/src/main/main.ts b/src/main/main.ts index a99ba90..2e72c5f 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -317,10 +317,6 @@ function createLogPolicy() { if (e.startsWith('ingest.')) { if (e === 'ingest.dest.normalize') return sample('ingest.dest.normalize', 5) ? { forceLevel: 'debug' } : { drop: true }; - if (e === 'ingest.register') { - // this can be noisy if you do retries; keep 1/5 at debug - return sample('ingest.register', 5) ? { forceLevel: 'debug' } : { drop: true }; - } return {}; } diff --git a/src/renderer/components/LinkTranscodeStatus.vue b/src/renderer/components/LinkTranscodeStatus.vue new file mode 100644 index 0000000..3e59f05 --- /dev/null +++ b/src/renderer/components/LinkTranscodeStatus.vue @@ -0,0 +1,250 @@ + + + diff --git a/src/renderer/components/modals/LinkDetailsModal.vue b/src/renderer/components/modals/LinkDetailsModal.vue index 2b6786a..0d1442e 100644 --- a/src/renderer/components/modals/LinkDetailsModal.vue +++ b/src/renderer/components/modals/LinkDetailsModal.vue @@ -655,6 +655,14 @@ + + +
@@ -1023,6 +1031,7 @@ import EditLinkFilesModal from './EditLinkFilesModal.vue' import CommentsReviewModal from './CommentsReviewModal.vue' import CategoryManagementModal from './CategoryManagementModal.vue' import PathInput from '../PathInput.vue' +import LinkTranscodeStatus from '../LinkTranscodeStatus.vue' import WatermarkCustomizer from '../WatermarkCustomizer.vue' import WatermarkPreview from '../WatermarkPreview.vue' import type { LinkItem, LinkType, AccessRow, Status, ExistingUser } from '../../typings/electron' @@ -1119,6 +1128,7 @@ const connectionMeta = inject(connectionMetaInjectionKey, null) const thumbnailSrc = ref('') +const transcodeStatusReload = ref(0) const thumbnailLoading = ref(false) const thumbnailFailed = ref(false) watch(() => props.link?.thumbnailUrl, async (url) => { @@ -3634,6 +3644,7 @@ async function fetchDetailsFor() { selectedVersionFileId.value = null } finally { detailsLoading.value = false + transcodeStatusReload.value++ } } diff --git a/src/renderer/components/modals/SettingsModal.vue b/src/renderer/components/modals/SettingsModal.vue index e5496d8..275de39 100644 --- a/src/renderer/components/modals/SettingsModal.vue +++ b/src/renderer/components/modals/SettingsModal.vue @@ -668,6 +668,33 @@
+ + +
+
Renewed your license?
+

+ Enter your license key again to update this server with the new expiry date. +

+
+ + +
+
{{ upgradeError }}
+
@@ -1878,12 +1905,16 @@ async function handleUpgradeActivate() { } const licenseInfo = result?.license - let licenseMsg = 'Pro Edition activated!' + let licenseMsg = result?.reused ? 'License details updated.' : 'Pro Edition activated!' if (licenseInfo?.perpetual) { - licenseMsg = 'Perpetual Pro license activated — never expires.' + licenseMsg = result?.reused + ? 'License updated — perpetual, never expires.' + : 'Perpetual Pro license activated — never expires.' } else if (licenseInfo?.expiresAt) { const expiryDate = new Date(licenseInfo.expiresAt).toLocaleDateString() - licenseMsg = `Pro license activated — valid until ${expiryDate}.` + licenseMsg = result?.reused + ? `License updated — valid until ${expiryDate}.` + : `Pro license activated — valid until ${expiryDate}.` } pushNotification(new Notification('Pro Edition', licenseMsg, 'success', 8000)) diff --git a/src/renderer/views/DashboardView.vue b/src/renderer/views/DashboardView.vue index 3c0a80d..a96357a 100644 --- a/src/renderer/views/DashboardView.vue +++ b/src/renderer/views/DashboardView.vue @@ -496,30 +496,39 @@