aboutsummaryrefslogtreecommitdiff
path: root/src/loading.js
blob: 6c70d2ef0c7a6cae45a8751b2e0db9d2df2a0e46 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import { writable } from 'svelte/store';
import { initSearch } from './search';
import { initDeck } from './deck';
import { setCardDb, setAltId } from './card_db';

let isLoading = writable(true);

async function noCacheFetch(url) {
    const timestamp = new Date().getTime();
    return fetch(url + '?t=' + timestamp);
}

async function fetchCardDb() {
    let localVer = localStorage.getItem('card_db_ver');
    try {
        // load card db
        let response = await noCacheFetch("https://raye.mistivia.com/card_db_parts/version.json");
        if (!response.ok) {
            throw new Error('Network response was not ok');
        }
        let data = await response.json();
        data = String(data)
        if (localVer === data && localStorage.getItem('card_db') !== null) {
            setCardDb(JSON.parse(localStorage.getItem('card_db')));
        } else {
            localVer = data;
            response = await noCacheFetch("https://raye.mistivia.com/card_db_parts/index.json");
            if (!response.ok) {
                throw new Error('Network response was not ok');
            }
            data = await response.json();
            let tasks = data.map((i)=>noCacheFetch('https://raye.mistivia.com/card_db_parts/' + i));
            let datas = await Promise.all(tasks);
            datas = await Promise.all(datas.map((x) => x.text()));
            data = JSON.parse(datas.join(''));
            setCardDb(data);
            localStorage.setItem('card_db_ver', localVer);
            localStorage.setItem('card_db', datas.join(''));
        }

        // load alt id
        response = await fetch("https://ygocdb.com/api/v0/idChangelog.jsonp");
        if (!response.ok) {
            throw new Error('Network response was not ok');
        }
        data = await response.json();
        setAltId(data);
    } catch (error) {
        console.log(error);
        alert("加载失败!请刷新重试");
        return;
    }
    isLoading.set(false);
    initDeck();
    initSearch();
}

fetchCardDb();

export {
    isLoading,
};