(engine: VisualNovelEngine)
| 164 | // ============================================================================ |
| 165 | |
| 166 | export function setupStorage (engine: VisualNovelEngine): void { |
| 167 | // Check if an Adapter has been set or else, the global local storage |
| 168 | // object will be used |
| 169 | const storageSetting = engine.setting ('Storage'); |
| 170 | |
| 171 | if (storageSetting.Adapter.trim () !== '') { |
| 172 | let adapter; |
| 173 | const props: Record<string, unknown> = {}; |
| 174 | |
| 175 | switch (storageSetting.Adapter) { |
| 176 | case 'LocalStorage': |
| 177 | adapter = SpaceAdapter.LocalStorage; |
| 178 | break; |
| 179 | |
| 180 | case 'SessionStorage': |
| 181 | adapter = SpaceAdapter.SessionStorage; |
| 182 | break; |
| 183 | |
| 184 | case 'IndexedDB': |
| 185 | adapter = SpaceAdapter.IndexedDB; |
| 186 | props.keyPath = 'id'; |
| 187 | break; |
| 188 | |
| 189 | case 'RemoteStorage': |
| 190 | adapter = SpaceAdapter.RemoteStorage; |
| 191 | props.headers = { |
| 192 | 'Content-Type': 'application/json', |
| 193 | }; |
| 194 | break; |
| 195 | |
| 196 | case 'FileSystem': { |
| 197 | const bridge = getDesktopBridge(); |
| 198 | |
| 199 | if (bridge) { |
| 200 | const fsStorage = new FileSystemStorage(bridge); |
| 201 | |
| 202 | fsStorage.configuration({ |
| 203 | name: Text.friendly(engine.setting('Name') as string), |
| 204 | version: engine.setting('Version') as string, |
| 205 | store: storageSetting.Store, |
| 206 | }); |
| 207 | |
| 208 | engine.Storage = fsStorage as unknown as StorageInterface; |
| 209 | } else { |
| 210 | FancyError.show('engine:storage:filesystem_no_bridge', {}); |
| 211 | |
| 212 | // Fall back to IndexedDB so the game remains functional |
| 213 | adapter = SpaceAdapter.IndexedDB; |
| 214 | } |
| 215 | break; |
| 216 | } |
| 217 | |
| 218 | default: |
| 219 | adapter = SpaceAdapter.IndexedDB; |
| 220 | break; |
| 221 | } |
| 222 | |
| 223 | if (window.navigator && !Platform.desktopApp && !Platform.cordova) { |
nothing calls this directly
no test coverage detected