mirror of
https://github.com/truewhile/MeBox.git
synced 2026-10-03 04:26:36 +08:00
优化
This commit is contained in:
@@ -11,7 +11,8 @@ import { LibraryTagBar } from '../components/LibraryTagBar'
|
||||
import { ManageLibraryTagsDialogView } from '../components/ManageLibraryTagsDialogView'
|
||||
import { useLibraryTags } from '../hooks/useLibraryTags'
|
||||
import { usePinnedLibraries } from '../hooks/usePinnedLibraries'
|
||||
import { sortByPinnedIds } from '../utils/pinnedLibraries'
|
||||
import { useLibraryListSort } from '../hooks/useLibraryListSort'
|
||||
import { sortLibrariesByField } from '../utils/libraryListSort'
|
||||
import { partitionPreviewIDs } from '../utils/remoteEmby'
|
||||
import {
|
||||
ContinueWatchingSection,
|
||||
@@ -34,6 +35,7 @@ export function HomePage() {
|
||||
const [librariesLoading, setLibrariesLoading] = useState(true)
|
||||
const [historyLoading, setHistoryLoading] = useState(true)
|
||||
const { pinnedIds } = usePinnedLibraries()
|
||||
const { field: sortField, order: sortOrder } = useLibraryListSort()
|
||||
const libraryTags = useLibraryTags()
|
||||
|
||||
// 1. 媒体库元数据极速加载(不带 preview,毫秒级秒开首屏)。
|
||||
@@ -90,7 +92,12 @@ export function HomePage() {
|
||||
}
|
||||
}, [])
|
||||
|
||||
const sortedLibraries = useMemo(() => sortByPinnedIds(libraries, pinnedIds), [libraries, pinnedIds])
|
||||
// 与 /libraries 共用同一份排序偏好(默认库名倒序):置顶库始终在前,
|
||||
// 组内按偏好排序字段排。这样在媒体库页改过排序后,首页顺序也一致。
|
||||
const sortedLibraries = useMemo(
|
||||
() => sortLibrariesByField(libraries, pinnedIds, sortField, sortOrder),
|
||||
[libraries, pinnedIds, sortField, sortOrder],
|
||||
)
|
||||
|
||||
// 标签过滤只作用于展示层:选中的标签栏决定哪部分媒体库参与轮播/入口网格/内容行。
|
||||
const effectiveTagId = libraryTags.selectedTagId
|
||||
|
||||
@@ -8,6 +8,7 @@ import { openManageLibrariesDialog } from '../components/manageLibrariesDialog'
|
||||
import { useEpisodeArtworkPreference } from '../hooks/useEpisodeArtworkPreference'
|
||||
import { useLibraryTags } from '../hooks/useLibraryTags'
|
||||
import { usePinnedLibraries } from '../hooks/usePinnedLibraries'
|
||||
import { useLibraryListSort } from '../hooks/useLibraryListSort'
|
||||
import { useAuthStore } from '../stores/auth'
|
||||
import {
|
||||
LibrariesContent,
|
||||
@@ -18,9 +19,7 @@ import type { LibraryPreview } from './librariesPageModel'
|
||||
import type { Library } from '../types'
|
||||
import type { SeriesCard } from '../utils/groupSeries'
|
||||
import {
|
||||
readLibraryListSort,
|
||||
sortLibraryPreviewsByField,
|
||||
writeLibraryListSort,
|
||||
type LibraryListSortField,
|
||||
type LibraryListSortOrder,
|
||||
} from '../utils/libraryListSort'
|
||||
@@ -41,8 +40,7 @@ export function LibrariesPage() {
|
||||
const [repairing, setRepairing] = useState(false)
|
||||
const [repairEpisodeArtwork, setRepairEpisodeArtwork] = useEpisodeArtworkPreference()
|
||||
const [repairMsg, setRepairMsg] = useState('')
|
||||
const [sortField, setSortField] = useState<LibraryListSortField>(() => readLibraryListSort().field)
|
||||
const [sortOrder, setSortOrder] = useState<LibraryListSortOrder>(() => readLibraryListSort().order)
|
||||
const { field: sortField, order: sortOrder, setSort: setLibrarySort } = useLibraryListSort()
|
||||
|
||||
// 缓存每个库已加载到的预览数量:入口网格只需要 2 张,横向货架需要 10 张。
|
||||
const fetchedPreviewLimitsRef = useRef<Map<string, number>>(new Map())
|
||||
@@ -162,10 +160,8 @@ export function LibrariesPage() {
|
||||
)
|
||||
|
||||
const handleSortChange = useCallback((field: LibraryListSortField, order: LibraryListSortOrder) => {
|
||||
setSortField(field)
|
||||
setSortOrder(order)
|
||||
writeLibraryListSort(field, order)
|
||||
}, [])
|
||||
setLibrarySort(field, order)
|
||||
}, [setLibrarySort])
|
||||
|
||||
const handleTogglePin = useCallback((libraryId: string) => {
|
||||
void togglePin(libraryId)
|
||||
|
||||
Reference in New Issue
Block a user