forked from public/bol
0
0
Fork 0
bol/module/system/data.js

103 lines
3.3 KiB
JavaScript

import {System} from "./config.js";
export class DataLoader {
/**
* Loads JSON data from a filepath
* @param filepath
* @returns {Promise<any>}
*/
static async loadJson(filepath) {
// Load an external JSON data file which contains data for import
const response = await fetch(filepath);
return await response.json();
}
/**
* Get a pack from a packName
* @param filepath
* @returns {Promise<any>}
*/
static findPack(packName) {
// Reference a Compendium pack by it's collection ID
console.log(`${System.name}.${packName}`);
return game.packs.find(p => p.collection === `${System.name}.${packName}`);
}
/**
* Clears data from a given pack
* @param pack
* @returns {Promise<boolean>}
*/
static async clearPack(pack) {
const packItems = await pack.getDocuments();
try {
// Delete all current compendium entries
for (let item of packItems) {
let options = {};
const document = await pack.getDocument(id);
options.pack = pack.collection;
return document.delete(options);
// await pack.deleteEntity(item.id);
}
}
catch (ex) {
return false;
}
return true;
}
/**
* Loads data from a JSON file into pack.
* JSON file should be located inside the System.dataPath folder and its name should the same as the pack name.
* @param packName
* @returns {Promise<void>}
*/
static async loadData(packName) {
console.info(`Importing ${packName}...`);
// Find pack from his pack name
let pack = this.findPack(packName);
// Get entity type to populate the proper collection
console.log(pack);
const entity = pack.metadata.entity;
// Unlock the pack
// pack.locked = false;
// Clear the current pack
await this.clearPack(pack);
// Load data from JSON files
const filepath = `${System.dataPath}/fr/json/${packName}.json`;
const content = await this.loadJson(filepath);
/* Import databases to compendiums */
switch(entity){
case "Item" : {
// Create temporary items from JSON
let newItems = await Item.create(content);
// Make sure items are iteratable
newItems = newItems instanceof Array ? newItems : [newItems];
for (let item of newItems) {
// Import into compendium
await pack.importDocument(item);
}
// pack.locked = true;
break;
}
case "Actor" : {
// Create temporary items from JSON
let newActors = await Actor.create(content);
// Make sure items are iteratable
newActors = newActors instanceof Array ? newActors : [newActors];
for (let actor of newActors) {
// Import into compendium
await pack.importDocument(actor);
}
pack.locked = true;
break;
}
}
console.info(`${packName} imported.`);
}
}