function checkAndUpdateEtags()

in src/data/source.ts [199:227]


function checkAndUpdateEtags(sources: FetchedSource[]) {
    let newEtags: string[] | undefined = sources.map(s => s.etag ?? "");
    if (newEtags.every(s => s.length === 0)) {
        newEtags = undefined;
    }

    if (!newEtags) return;

    if (settings.data_etags) {
        let mismatch = settings.data_etags.length !== newEtags.length;
        if (!mismatch) {
            for (let i = 0; i < newEtags.length; i++) {
                if (settings.data_etags[i] !== newEtags[i]) {
                    mismatch = true;
                    break;
                }
            }
        }
        if (mismatch) {
            alert("Warning: the source data has changed since the link was created.");
        } else {
            // No need to update data_etags (which will cause the settings to
            // fire a change, even if it's the same data).
            return;
        }
    }

    settings.data_etags = newEtags;
}