loading.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { writable } from 'svelte/store';
  2. import { initSearch } from './search';
  3. import { initDeck } from './deck';
  4. import { setCardDb, setAltId } from './card_db';
  5. let isLoading = writable(true);
  6. async function noCacheFetch(url) {
  7. const timestamp = new Date().getTime();
  8. return fetch(url + '?t=' + timestamp);
  9. }
  10. async function fetchCardDb() {
  11. let localVer = localStorage.getItem('card_db_ver');
  12. try {
  13. // load card db
  14. let response = await noCacheFetch("https://raye.mistivia.com/card_db_parts/version.json");
  15. if (!response.ok) {
  16. throw new Error('Network response was not ok');
  17. }
  18. let data = await response.json();
  19. data = String(data)
  20. if (localVer === data && localStorage.getItem('card_db') !== null) {
  21. setCardDb(JSON.parse(localStorage.getItem('card_db')));
  22. } else {
  23. localVer = data;
  24. response = await noCacheFetch("https://raye.mistivia.com/card_db_parts/index.json");
  25. if (!response.ok) {
  26. throw new Error('Network response was not ok');
  27. }
  28. data = await response.json();
  29. let tasks = data.map((i)=>noCacheFetch('https://raye.mistivia.com/card_db_parts/' + i));
  30. let datas = await Promise.all(tasks);
  31. datas = await Promise.all(datas.map((x) => x.text()));
  32. data = JSON.parse(datas.join(''));
  33. setCardDb(data);
  34. localStorage.setItem('card_db_ver', localVer);
  35. localStorage.setItem('card_db', datas.join(''));
  36. }
  37. // load alt id
  38. response = await fetch("https://ygocdb.com/api/v0/idChangelog.jsonp");
  39. if (!response.ok) {
  40. throw new Error('Network response was not ok');
  41. }
  42. data = await response.json();
  43. setAltId(data);
  44. } catch (error) {
  45. console.log(error);
  46. alert("加载失败!请刷新重试");
  47. return;
  48. }
  49. isLoading.set(false);
  50. initDeck();
  51. initSearch();
  52. }
  53. fetchCardDb();
  54. export {
  55. isLoading,
  56. };