92 lines
3.4 KiB
JavaScript
92 lines
3.4 KiB
JavaScript
import { DHUpdater } from './updater.js';
|
|
import { ActorUpdaterApp } from './apps/updater-app.js';
|
|
|
|
Hooks.once('init', () => {
|
|
game.settings.register('dh-actor-updater', 'ignoredItems', {
|
|
name: 'Ignored Items',
|
|
scope: 'world',
|
|
config: false,
|
|
type: Object,
|
|
default: {}
|
|
});
|
|
|
|
game.settings.register('dh-actor-updater', 'lastCheckedVersion', {
|
|
name: 'Last Checked System Version',
|
|
scope: 'world',
|
|
config: false,
|
|
type: String,
|
|
default: '0.0.0'
|
|
});
|
|
|
|
game.settings.registerMenu('dh-actor-updater', 'manualCheck', {
|
|
name: 'Check for Updates',
|
|
label: 'Check Now',
|
|
hint: 'Manually check for updates to your actors against the compendium.',
|
|
icon: 'fas fa-search',
|
|
type: ManualCheckConfig,
|
|
restricted: true
|
|
});
|
|
});
|
|
|
|
class ManualCheckConfig extends FormApplication {
|
|
render() {
|
|
game.modules.get('dh-actor-updater').api.checkAll();
|
|
// Don't actually render a form
|
|
return this;
|
|
}
|
|
}
|
|
|
|
Hooks.on('ready', async () => {
|
|
if (!game.user.isGM) return;
|
|
|
|
// Manual check hook exposed to API
|
|
game.modules.get('dh-actor-updater').api = {
|
|
checkAll: async () => {
|
|
await checkAndPrompt();
|
|
}
|
|
};
|
|
|
|
// Auto-check logic
|
|
const lastVersion = game.settings.get('dh-actor-updater', 'lastCheckedVersion');
|
|
const currentVersion = game.system.version;
|
|
|
|
if (currentVersion !== lastVersion) {
|
|
console.log("Daggerheart Actor Updater | System update detected. Checking for item updates...");
|
|
await checkAndPrompt();
|
|
await game.settings.set('dh-actor-updater', 'lastCheckedVersion', currentVersion);
|
|
} else {
|
|
// Optional: Run on every startup? User "re-prompt again on manual check", not necessarily every startup unless version change.
|
|
// "First run check" imply checking if it hasn't been checked before (implied by version 0.0.0).
|
|
// "Re-prompt on system version update" -> Covered.
|
|
// "Manual check" -> Covered by API.
|
|
|
|
// Let's add a setting for "Check on every startup" if wanted, but instructions implied first run or version update.
|
|
// "module should on first run check" -> handled by version diff check.
|
|
}
|
|
});
|
|
|
|
async function checkAndPrompt() {
|
|
ui.notifications.info("Daggerheart Actor Updater | Checking for updates...");
|
|
|
|
// Collect updates from all actors
|
|
// "configured actors" - likely means all actors or player characters.
|
|
// Let's check all actors the GM has permission to update (which is all)
|
|
|
|
let allUpdates = [];
|
|
for (const actor of game.actors) {
|
|
// Maybe restrict to Characters/Companions?
|
|
// "configured actors" - usually implies Characters. Adversaries in world might not need updates or might be customizations.
|
|
// Let's check 'character' and 'companion' types primarily, but maybe 'adversary' too if they are in the world.
|
|
// User didn't strictly specify, but usually players care about their sheets.
|
|
if (['character', 'companion'].includes(actor.type)) {
|
|
const updates = await DHUpdater.checkActor(actor);
|
|
allUpdates = allUpdates.concat(updates);
|
|
}
|
|
}
|
|
|
|
if (allUpdates.length > 0) {
|
|
new ActorUpdaterApp(allUpdates).render(true);
|
|
} else {
|
|
ui.notifications.info("Daggerheart Actor Updater | No updates found.");
|
|
}
|
|
}
|