Skip to content

Commit 25a1ce4

Browse files
authored
fix: fonts preview in Windows (#46)
* fix export fonts in windows * optimize library page
1 parent 8d9bce1 commit 25a1ce4

8 files changed

Lines changed: 615 additions & 58 deletions

File tree

frontend/src/features/library/components/TaskDialog.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ import { Separator } from "@/shared/ui/separator"
5656
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/shared/ui/tabs"
5757
import { cn } from "@/lib/utils"
5858

59+
import { useLibraryViewStore } from "../model/viewStore"
5960
import { openLibraryWorkspace } from "../model/workspaceStore"
6061
import { resolveFileIcon } from "../utils/fileIcons"
6162
import { formatBytes } from "../utils/format"
@@ -150,6 +151,7 @@ export function TaskDialog() {
150151
const open = useTaskDialogStore((state) => state.open)
151152
const operationId = useTaskDialogStore((state) => state.operationId)
152153
const closeTaskDialog = useTaskDialogStore((state) => state.closeTaskDialog)
154+
const setLibraryPageTab = useLibraryViewStore((state) => state.setPageTab)
153155
const realtimeOperations = useLibraryRealtimeStore((state) => state.operations)
154156

155157
const liveOperation = React.useMemo(
@@ -609,6 +611,7 @@ export function TaskDialog() {
609611
openMode: normalizeWorkspaceMode(file.fileType),
610612
}
611613
openLibraryWorkspace(target)
614+
setLibraryPageTab("workspace")
612615
closeTaskDialog()
613616
return
614617
}
@@ -624,7 +627,7 @@ export function TaskDialog() {
624627
await openLibraryPath.mutateAsync({ path: file.path })
625628
}
626629
},
627-
[closeTaskDialog, libraryQuery.data, openFileLocation, openLibraryPath, operation?.libraryId],
630+
[closeTaskDialog, libraryQuery.data, openFileLocation, openLibraryPath, operation?.libraryId, setLibraryPageTab],
628631
)
629632

630633
const handlePreviewFile = React.useCallback((file: OperationFileItem) => {

frontend/src/features/library/index.tsx

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,14 @@ import { LibraryWorkspacePage, type LibraryWorkspaceToolbarState } from "./compo
135135
import { LibraryImportDialog } from "./components/LibraryImportDialog"
136136
import { useLibraryViewStore } from "./model/viewStore"
137137
import { openLibraryWorkspace, useLibraryWorkspaceStore } from "./model/workspaceStore"
138-
import type { LibraryFileRow, LibraryProgress, LibraryTaskOutput, LibraryTaskRow } from "./model/types"
138+
import type {
139+
LibraryFileRow,
140+
LibraryPageTab,
141+
LibraryProgress,
142+
LibraryTaskOutput,
143+
LibraryTaskRow,
144+
LibraryWorkspaceTarget,
145+
} from "./model/types"
139146
import { formatBytes } from "./utils/format"
140147
import { formatTemplate } from "./utils/i18n"
141148
import {
@@ -154,7 +161,6 @@ import { resolvePresetName } from "./utils/transcodePresets"
154161
import { buildWorkspaceTargetFromLibraryFile, canOpenLibraryWorkspaceFile } from "./utils/workspaceTargets"
155162

156163
type LibraryNewAction = "download" | "importVideo" | "importSubtitle"
157-
type LibraryPageTab = "overview" | "tasks" | "resources" | "workspace" | "config"
158164
type ResourceViewMode = "library" | "file"
159165
type ResourceFileTypeFilter = "all" | "video" | "subtitle"
160166
type ResourceFileStatusFilter = "active" | "deleted" | "all"
@@ -201,7 +207,6 @@ export function LibraryPage() {
201207
const librariesQuery = useListLibraries()
202208
const selectedLibraryRealtimeFiles = useLibraryRealtimeStore((state) => state.files)
203209
const selectedLibraryRealtimeHistory = useLibraryRealtimeStore((state) => state.histories)
204-
const workspaceOpenRevision = useLibraryWorkspaceStore((state) => state.openRevision)
205210
const workspaceTargetLibraryId = useLibraryWorkspaceStore((state) => state.libraryId)
206211

207212
const externalTools = useExternalTools()
@@ -223,12 +228,13 @@ export function LibraryPage() {
223228
const moduleConfigQuery = useGetLibraryModuleConfig()
224229
const updateModuleConfig = useUpdateLibraryModuleConfig()
225230

231+
const pageTab = useLibraryViewStore((state) => state.pageTab)
226232
const rowsPerPage = useLibraryViewStore((state) => state.rowsPerPage)
227233
const columnVisibility = useLibraryViewStore((state) => state.columnVisibility)
234+
const setPageTab = useLibraryViewStore((state) => state.setPageTab)
228235
const setRowsPerPage = useLibraryViewStore((state) => state.setRowsPerPage)
229236
const setColumnVisibility = useLibraryViewStore((state) => state.setColumnVisibility)
230237

231-
const [pageTab, setPageTab] = React.useState<LibraryPageTab>("overview")
232238
const [resourceViewMode, setResourceViewMode] = React.useState<ResourceViewMode>("library")
233239
const [resourceFileTypeFilter, setResourceFileTypeFilter] = React.useState<ResourceFileTypeFilter>("all")
234240
const [resourceFileStatusFilter, setResourceFileStatusFilter] = React.useState<ResourceFileStatusFilter>("active")
@@ -385,6 +391,31 @@ export function LibraryPage() {
385391
}, [currentViewMode])
386392
const currentColumnVisibility = { ...defaultVisibility, ...(columnVisibility[currentViewMode] ?? {}) }
387393

394+
const handlePageTabChange = React.useCallback(
395+
(nextTab: LibraryPageTab) => {
396+
if (nextTab === "workspace") {
397+
const nextLibraryId = workspaceTargetLibraryId.trim()
398+
if (nextLibraryId && selectedLibraryId !== nextLibraryId) {
399+
setSelectedLibraryId(nextLibraryId)
400+
}
401+
}
402+
setPageTab(nextTab)
403+
},
404+
[selectedLibraryId, setPageTab, workspaceTargetLibraryId],
405+
)
406+
407+
const openWorkspaceTarget = React.useCallback(
408+
(target: LibraryWorkspaceTarget) => {
409+
const nextLibraryId = target.libraryId?.trim() ?? ""
410+
if (nextLibraryId && selectedLibraryId !== nextLibraryId) {
411+
setSelectedLibraryId(nextLibraryId)
412+
}
413+
openLibraryWorkspace(target)
414+
setPageTab("workspace")
415+
},
416+
[selectedLibraryId, setPageTab],
417+
)
418+
388419
const labels = React.useMemo<LibraryLabelMaps>(() => {
389420
const typeLabels = {
390421
video: t("library.type.video"),
@@ -457,14 +488,13 @@ export function LibraryPage() {
457488

458489
React.useEffect(() => {
459490
const trimmedLibraryId = workspaceTargetLibraryId.trim()
460-
if (!workspaceOpenRevision || !trimmedLibraryId) {
491+
if (pageTab !== "workspace" || !trimmedLibraryId) {
461492
return
462493
}
463494
if (selectedLibraryId !== trimmedLibraryId) {
464495
setSelectedLibraryId(trimmedLibraryId)
465496
}
466-
setPageTab("workspace")
467-
}, [selectedLibraryId, workspaceOpenRevision, workspaceTargetLibraryId])
497+
}, [pageTab, selectedLibraryId, workspaceTargetLibraryId])
468498

469499
React.useEffect(() => {
470500
const libraries = librariesQuery.data ?? []
@@ -1054,7 +1084,7 @@ export function LibraryPage() {
10541084
language,
10551085
t,
10561086
}),
1057-
[language, t],
1087+
[language, setPageTab, t],
10581088
)
10591089

10601090
const taskSelectionColumn = React.useMemo<ColumnDef<LibraryTaskRow>>(
@@ -1107,7 +1137,7 @@ export function LibraryPage() {
11071137
if (!target) {
11081138
return
11091139
}
1110-
openLibraryWorkspace(target)
1140+
openWorkspaceTarget(target)
11111141
},
11121142
onPreviewImage: (file) => {
11131143
const path = file.path?.trim() ?? ""
@@ -1186,6 +1216,7 @@ export function LibraryPage() {
11861216
filesById,
11871217
handleDeleteFile,
11881218
language,
1219+
openWorkspaceTarget,
11891220
openLibraryPath,
11901221
presetsQuery.data,
11911222
t,
@@ -1852,7 +1883,7 @@ export function LibraryPage() {
18521883
<div className="grid shrink-0 grid-cols-[auto_minmax(0,1fr)] items-center gap-3 pt-1">
18531884
<Tabs
18541885
value={pageTab}
1855-
onValueChange={(value) => setPageTab(value as LibraryPageTab)}
1886+
onValueChange={(value) => handlePageTabChange(value as LibraryPageTab)}
18561887
className="min-w-0 w-auto"
18571888
>
18581889
<TabsList>
@@ -2447,8 +2478,7 @@ export function LibraryPage() {
24472478
if (!target) {
24482479
return
24492480
}
2450-
setSelectedLibraryId(file.libraryId)
2451-
openLibraryWorkspace(target)
2481+
openWorkspaceTarget(target)
24522482
}}
24532483
onOpenTaskDialog={openTaskDialog}
24542484
/>

frontend/src/features/library/model/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
export type LibraryTab = "all" | "video" | "subtitle" | "thumbnail"
22
export type LibraryViewMode = "task" | "file"
3+
export type LibraryPageTab = "overview" | "tasks" | "resources" | "workspace" | "config"
34

45
export type LibraryProgress = {
56
label: string

frontend/src/features/library/model/viewStore.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,19 @@ import { create } from "zustand"
22
import { persist } from "zustand/middleware"
33
import type { VisibilityState } from "@tanstack/react-table"
44

5-
import type { LibraryViewMode } from "./types"
5+
import type { LibraryPageTab, LibraryViewMode } from "./types"
66

77
type ColumnVisibilityByView = {
88
task: VisibilityState
99
file: VisibilityState
1010
}
1111

1212
type LibraryViewState = {
13+
pageTab: LibraryPageTab
1314
viewMode: LibraryViewMode
1415
columnVisibility: ColumnVisibilityByView
1516
rowsPerPage: number
17+
setPageTab: (tab: LibraryPageTab) => void
1618
setViewMode: (mode: LibraryViewMode) => void
1719
setColumnVisibility: (mode: LibraryViewMode, visibility: VisibilityState) => void
1820
setRowsPerPage: (rows: number) => void
@@ -30,9 +32,11 @@ const defaultColumnVisibility: ColumnVisibilityByView = {
3032
export const useLibraryViewStore = create<LibraryViewState>()(
3133
persist(
3234
(set) => ({
35+
pageTab: "overview",
3336
viewMode: "task",
3437
columnVisibility: defaultColumnVisibility,
3538
rowsPerPage: 20,
39+
setPageTab: (pageTab) => set({ pageTab }),
3640
setViewMode: (mode) => set({ viewMode: mode }),
3741
setColumnVisibility: (mode, visibility) =>
3842
set((state) => ({
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//go:build !windows
2+
3+
package service
4+
5+
import "context"
6+
7+
func augmentPlatformFontCatalog(_ context.Context, _ *fontCatalog) error {
8+
return nil
9+
}
10+
11+
func exportPlatformFontFamily(_ context.Context, _ []string) (ExportedFontFamily, bool, error) {
12+
return ExportedFontFamily{}, false, nil
13+
}

0 commit comments

Comments
 (0)