(storage_id, relative_path_obj)
| 169 | } |
| 170 | |
| 171 | function ply_storage_export(storage_id, relative_path_obj) { |
| 172 | var op_id = ply_storage_next_op_id(); |
| 173 | var relative_path = consume_js_object(relative_path_obj); |
| 174 | |
| 175 | (async function () { |
| 176 | try { |
| 177 | var root_handle = ply_storage_get_root(storage_id); |
| 178 | var parent = await ply_storage_resolve_parent_dir(root_handle, relative_path, false); |
| 179 | var file_handle = await parent.dir.getFileHandle(parent.file_name, { create: false }); |
| 180 | var file = await file_handle.getFile(); |
| 181 | var array_buffer = await file.arrayBuffer(); |
| 182 | var blob = new Blob([array_buffer]); |
| 183 | |
| 184 | var download_url = URL.createObjectURL(blob); |
| 185 | var anchor = document.createElement('a'); |
| 186 | anchor.href = download_url; |
| 187 | anchor.download = parent.file_name; |
| 188 | anchor.style.display = 'none'; |
| 189 | document.body.appendChild(anchor); |
| 190 | anchor.click(); |
| 191 | anchor.remove(); |
| 192 | setTimeout(function () { |
| 193 | URL.revokeObjectURL(download_url); |
| 194 | }, 0); |
| 195 | |
| 196 | ply_storage_finish_ok(op_id); |
| 197 | } catch (error) { |
| 198 | ply_storage_finish_err(op_id, error); |
| 199 | } |
| 200 | }()); |
| 201 | |
| 202 | return op_id; |
| 203 | } |
| 204 | |
| 205 | function ply_storage_try_recv(op_id) { |
| 206 | if (Object.prototype.hasOwnProperty.call(ply_storage_pending, op_id)) { |
no test coverage detected