feat: compression 8

This commit is contained in:
jfmcarreira committed 2026-09-24 14:57:52 +01:00
1 parent 5817752bc4
commit a7afeac440
1 file changed
+41 -1
+41 -1
View File
@@ -29,6 +29,7 @@ import toast from 'react-hot-toast'
const PAGE_SIZE = 50
const QUEUE_STORAGE_KEY = 'videoCompressionQueue'
const FILTER_STORAGE_KEY = 'videoCompressionFilters'
const formatMB = (bytes?: number | null) => {
if (bytes == null) return 'Unknown'
@@ -56,6 +57,7 @@ export default function CompressVideosPage() {
const [appliedMaxSizeMb, setAppliedMaxSizeMb] = useState('')
const [sortBy, setSortBy] = useState<'date' | 'size'>('date')
const [sortOrder, setSortOrder] = useState<'asc' | 'desc'>('desc')
const [filtersLoaded, setFiltersLoaded] = useState(false)
const [queue, setQueue] = useState<IQueueItem[]>([])
const [queueLoaded, setQueueLoaded] = useState(false)
@@ -122,8 +124,46 @@ export default function CompressVideosPage() {
}
useEffect(() => {
if (!filtersLoaded) return
loadVideos()
}, [page, appliedMinSizeMb, appliedMaxSizeMb, sortBy, sortOrder])
}, [page, appliedMinSizeMb, appliedMaxSizeMb, sortBy, sortOrder, filtersLoaded])
useEffect(() => {
try {
const storedFilters = localStorage.getItem(FILTER_STORAGE_KEY)
if (storedFilters) {
const parsed = JSON.parse(storedFilters) as {
minSizeMb?: string
maxSizeMb?: string
sortBy?: 'date' | 'size'
sortOrder?: 'asc' | 'desc'
}
const storedMinSizeMb = parsed.minSizeMb ?? ''
const storedMaxSizeMb = parsed.maxSizeMb ?? ''
setMinSizeMb(storedMinSizeMb)
setMaxSizeMb(storedMaxSizeMb)
setAppliedMinSizeMb(storedMinSizeMb)
setAppliedMaxSizeMb(storedMaxSizeMb)
if (parsed.sortBy === 'date' || parsed.sortBy === 'size') setSortBy(parsed.sortBy)
if (parsed.sortOrder === 'asc' || parsed.sortOrder === 'desc') setSortOrder(parsed.sortOrder)
}
} catch {
localStorage.removeItem(FILTER_STORAGE_KEY)
} finally {
setFiltersLoaded(true)
}
}, [])
useEffect(() => {
if (!filtersLoaded) return
localStorage.setItem(FILTER_STORAGE_KEY, JSON.stringify({
minSizeMb: appliedMinSizeMb,
maxSizeMb: appliedMaxSizeMb,
sortBy,
sortOrder,
}))
}, [appliedMinSizeMb, appliedMaxSizeMb, sortBy, sortOrder, filtersLoaded])
useEffect(() => {
loadCompressed()