@@ -55,9 +55,9 @@ export default React.createClass({
55
55
download ( ) {
56
56
this . setState ( { vdata : 0 , adata : 0 , downloadingError : null } ) ;
57
57
const format = this . props . format ;
58
+
58
59
// vp8.0 format lacks file size info.
59
60
const videoHasSize = ! ! format . video . filesize ;
60
-
61
61
// TODO(Kagami): How to handle file write errors?
62
62
let vpromise = new Promise ( ( resolve , reject ) => {
63
63
this . vreq = request ( {
@@ -96,6 +96,7 @@ export default React.createClass({
96
96
97
97
let apromise ;
98
98
if ( this . apath ) {
99
+ const audioHasSize = ! ! format . audio . filesize ;
99
100
apromise = new Promise ( ( resolve , reject ) => {
100
101
this . areq = request ( {
101
102
url : format . audio . url ,
@@ -106,13 +107,17 @@ export default React.createClass({
106
107
`Got ${ res . statusCode } error while downloading audio`
107
108
) ) ;
108
109
}
110
+ if ( ! audioHasSize ) {
111
+ const reslen = + res . headers [ "content-length" ] ;
112
+ if ( reslen ) format . audio . filesize = reslen ;
113
+ }
109
114
res . on ( "error" , err => {
110
115
reject ( err ) ;
111
116
} ) . on ( "data" , chunk => {
112
117
this . setState ( { adata : this . state . adata + chunk . length } ) ;
113
118
} ) . on ( "end" , ( ) => {
114
119
if ( ! this . areq ) return ;
115
- if ( this . state . adata !== format . audio . filesize ) {
120
+ if ( audioHasSize && this . state . adata !== format . audio . filesize ) {
116
121
return reject ( new Error ( "Got wrong audio data" ) ) ;
117
122
}
118
123
resolve ( ) ;
@@ -163,6 +168,10 @@ export default React.createClass({
163
168
const format = this . props . format ;
164
169
return format . video . filesize ? showSize ( format . video . filesize ) : "unknown" ;
165
170
} ,
171
+ getAudioSize ( ) {
172
+ const format = this . props . format ;
173
+ return format . audio . filesize ? showSize ( format . audio . filesize ) : "unknown" ;
174
+ } ,
166
175
handleCancelClick ( ) {
167
176
this . abort ( ) ;
168
177
this . props . onCancel ( ) ;
@@ -175,7 +184,7 @@ export default React.createClass({
175
184
< div style = { this . styles . text } >
176
185
< span > Saving audio (</ span >
177
186
< span style = { this . styles . size } > { showSize ( this . state . adata ) } </ span >
178
- < span > of { showSize ( format . audio . filesize ) } ):</ span >
187
+ < span > of { this . getAudioSize ( ) } ):</ span >
179
188
</ div >
180
189
< progress
181
190
value = { this . state . adata }
0 commit comments