Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit d0f0321

Browse files
Retrieve filesizes asynchronously
1 parent a86349d commit d0f0321

File tree

2 files changed

+29
-9
lines changed

2 files changed

+29
-9
lines changed

src/components/DownloadButton.vue

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<DropdownButton>
2+
<DropdownButton v-if="filesizes">
33
<template #default="{ buttonProps }">
44
<a
55
v-bind="buttonProps"
@@ -12,7 +12,7 @@
1212
{{ selectedFormat.extension_name }}
1313
</span>
1414
<span class="ml-1 font-thin">{{
15-
getFormatSize(selectedFormat.filesize)
15+
getFormatSize(selectedFormat.extension_name)
1616
}}</span>
1717
</a>
1818
</template>
@@ -45,7 +45,7 @@
4545
@keydown="onItemKeydown"
4646
>
4747
<span class="font-bold mr-2">{{ format.extension_name }}</span>
48-
<span>{{ getFormatSize(format.filesize) }}</span>
48+
<span>{{ getFormatSize(format.extension_name) }}</span>
4949
</button>
5050
</li>
5151
</ul>
@@ -55,6 +55,7 @@
5555

5656
<script>
5757
import filesize from 'filesize'
58+
import axios from 'axios'
5859
5960
const LS_DOWNLOAD_FORMAT_EXTENSION_KEY = 'openverse:download-format-extension'
6061
@@ -83,10 +84,33 @@ export default {
8384
}
8485
}
8586
86-
return { selectedFormat: format }
87+
return { selectedFormat: format, filesizes: null }
88+
},
89+
async fetch() {
90+
const extensionsToFilesizes = await Promise.all(
91+
this.formats.map(async (format) => {
92+
try {
93+
const response = await axios.head(format.download_url)
94+
return [format.extension_name, response.headers['content-length']]
95+
} catch (e) {
96+
return [format.extension_name, undefined]
97+
}
98+
})
99+
)
100+
101+
this.filesizes = extensionsToFilesizes.reduce(
102+
(acc, [extensionName, filesize]) => ({
103+
...acc,
104+
[extensionName]: filesize,
105+
}),
106+
{}
107+
)
87108
},
88109
methods: {
89-
getFormatSize(size) {
110+
getFormatSize(extensionName) {
111+
const size = this.filesizes?.[extensionName] ?? undefined
112+
if (typeof size === 'undefined') return ''
113+
90114
return filesize(size, { locale: this.$i18n.locale })
91115
},
92116
setSelectedFormat(format) {

src/components/meta/DownloadButton.stories.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,18 @@ export const Default = () => ({
1313
{
1414
extension_name: 'MP3 98kbs',
1515
download_url: 'https://mp3d.jamendo.com/download/track/1532771/mp31/',
16-
filesize: 676352,
1716
},
1817
{
1918
extension_name: 'MP3 VBR',
2019
download_url: 'https://mp3d.jamendo.com/download/track/1532771/mp32/',
21-
filesize: 1362432,
2220
},
2321
{
2422
extension_name: 'FLAC',
2523
download_url: 'https://mp3d.jamendo.com/download/track/1532771/flac/',
26-
filesize: 6333717,
2724
},
2825
{
2926
extension_name: 'OGG',
3027
download_url: 'https://mp3d.jamendo.com/download/track/1532771/ogg/',
31-
filesize: 1362432,
3228
},
3329
],
3430
}),

0 commit comments

Comments
 (0)