feat: add cache to audio meta
This commit is contained in:
@@ -19,6 +19,7 @@ import LibraryMusicIcon from '@mui/icons-material/LibraryMusic'
|
|||||||
import {Link} from '@mui/material'
|
import {Link} from '@mui/material'
|
||||||
|
|
||||||
const apiUrl = process.env.NEXT_PUBLIC_API_URL_ROOT || 'http://localhost:1337'
|
const apiUrl = process.env.NEXT_PUBLIC_API_URL_ROOT || 'http://localhost:1337'
|
||||||
|
const audioMetaCache = {}
|
||||||
|
|
||||||
const StyledTableCell = styled(TableCell)(({theme}) => ({
|
const StyledTableCell = styled(TableCell)(({theme}) => ({
|
||||||
[`&.${tableCellClasses.head}`]: {
|
[`&.${tableCellClasses.head}`]: {
|
||||||
@@ -51,7 +52,7 @@ function formatSize(size) {
|
|||||||
export default function FilesList({files}) {
|
export default function FilesList({files}) {
|
||||||
const theme = useTheme()
|
const theme = useTheme()
|
||||||
const {mode} = useColorScheme()
|
const {mode} = useColorScheme()
|
||||||
const [audioMeta, setAudioMeta] = useState({})
|
const [audioMeta, setAudioMeta] = useState(audioMetaCache)
|
||||||
|
|
||||||
const musicFiles = files.filter(file => file.mime.startsWith('audio'))
|
const musicFiles = files.filter(file => file.mime.startsWith('audio'))
|
||||||
const pdfFiles = files.filter(file => file.mime === 'application/pdf')
|
const pdfFiles = files.filter(file => file.mime === 'application/pdf')
|
||||||
@@ -77,14 +78,21 @@ export default function FilesList({files}) {
|
|||||||
const results = {}
|
const results = {}
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
audioFiles.map(async file => {
|
audioFiles.map(async file => {
|
||||||
|
if (file.id in audioMetaCache) {
|
||||||
|
results[file.id] = audioMetaCache[file.id]
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await fetch(`${apiUrl}${file.url}`, {
|
const response = await fetch(`${apiUrl}${file.url}`, {
|
||||||
headers: {Range: 'bytes=0-262143'},
|
headers: {Range: 'bytes=0-262143'},
|
||||||
})
|
})
|
||||||
const buffer = await response.arrayBuffer()
|
const buffer = await response.arrayBuffer()
|
||||||
const meta = await mm.parseBuffer(new Uint8Array(buffer), {mimeType: file.mime, skipCovers: true})
|
const meta = await mm.parseBuffer(new Uint8Array(buffer), {mimeType: file.mime, skipCovers: true})
|
||||||
|
audioMetaCache[file.id] = meta.format
|
||||||
results[file.id] = meta.format
|
results[file.id] = meta.format
|
||||||
} catch {
|
} catch {
|
||||||
|
audioMetaCache[file.id] = null
|
||||||
results[file.id] = null
|
results[file.id] = null
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user