1
- use crate :: io:: {
2
- get_meta_path, AssetReader , AssetReaderError , EmptyPathStream , PathStream , Reader , VecReader ,
1
+ use crate :: {
2
+ io:: {
3
+ get_meta_path, AssetLoadRetrySettings , AssetReader , AssetReaderError , EmptyPathStream ,
4
+ PathStream , Reader , VecReader ,
5
+ } ,
6
+ retry:: { IoErrorRetrySettingsProvider , ProvideAssetLoadRetrySettings } ,
7
+ UntypedAssetLoadFailedEvent ,
3
8
} ;
4
9
use bevy_log:: error;
5
10
use bevy_utils:: BoxedFuture ;
@@ -12,15 +17,24 @@ use web_sys::Response;
12
17
/// Reader implementation for loading assets via HTTP in WASM.
13
18
pub struct HttpWasmAssetReader {
14
19
root_path : PathBuf ,
20
+ retry_settings_provider : Box < dyn ProvideAssetLoadRetrySettings > ,
15
21
}
16
22
17
23
impl HttpWasmAssetReader {
18
24
/// Creates a new `WasmAssetReader`. The path provided will be used to build URLs to query for assets.
19
25
pub fn new < P : AsRef < Path > > ( path : P ) -> Self {
20
26
Self {
21
27
root_path : path. as_ref ( ) . to_owned ( ) ,
28
+ retry_settings_provider : Box :: new ( IoErrorRetrySettingsProvider :: from (
29
+ AssetLoadRetrySettings :: network_default ( ) ,
30
+ ) ) ,
22
31
}
23
32
}
33
+ /// Overrides the default retry settings.
34
+ pub fn with_retry_defaults ( mut self , provider : Box < dyn ProvideAssetLoadRetrySettings > ) -> Self {
35
+ self . retry_settings_provider = provider;
36
+ self
37
+ }
24
38
}
25
39
26
40
fn js_value_to_err < ' a > ( context : & ' a str ) -> impl FnOnce ( JsValue ) -> std:: io:: Error + ' a {
@@ -95,4 +109,12 @@ impl AssetReader for HttpWasmAssetReader {
95
109
error ! ( "Reading directories is not supported with the HttpWasmAssetReader" ) ;
96
110
Box :: pin ( async move { Ok ( false ) } )
97
111
}
112
+
113
+ fn get_default_retry_settings (
114
+ & self ,
115
+ load_error : & UntypedAssetLoadFailedEvent ,
116
+ ) -> AssetLoadRetrySettings {
117
+ self . retry_settings_provider
118
+ . get_retry_settings ( AssetLoadRetrySettings :: no_retries ( ) , load_error)
119
+ }
98
120
}
0 commit comments