Split the module up into multiple files
This commit is contained in:
57
src/migration.js
Normal file
57
src/migration.js
Normal file
@@ -0,0 +1,57 @@
|
||||
import {settingsKey} from "./settings.js"
|
||||
|
||||
const currentDataVersion = "1.1.0"
|
||||
|
||||
export function performMigrations() {
|
||||
if (!game.user.isGM)
|
||||
return
|
||||
|
||||
let dataVersion = game.settings.get(settingsKey, "dataVersion")
|
||||
if (dataVersion === "fresh install")
|
||||
{
|
||||
game.settings.set(settingsKey, "dataVersion", currentDataVersion);
|
||||
return;
|
||||
}
|
||||
|
||||
if (dataVersion === "1.0.0") {
|
||||
dataVersion = "1.1.0"
|
||||
ui.notifications.info(game.i18n.format("smart-doors.ui.messages.migrating", {version: dataVersion}))
|
||||
|
||||
// Make a dictionary that maps all door ids to their scenes
|
||||
const walls = game.scenes.reduce((dict, scene) => {
|
||||
scene.data.walls.forEach(wall => {
|
||||
if (!wall.door)
|
||||
return
|
||||
dict[wall._id] = scene.id
|
||||
})
|
||||
return dict
|
||||
}, {})
|
||||
|
||||
// Migrate all messages that have a (wall) source id
|
||||
game.messages.forEach(async message => {
|
||||
const wallId = message.data.flags.smartdoors?.sourceId
|
||||
if (!wallId)
|
||||
return
|
||||
const flags = message.data.flags
|
||||
delete flags.smartdoors.sourceId
|
||||
const scene = walls[wallId]
|
||||
// If there is no wall with this id anymore we can drop the value. It has no purpose anymore
|
||||
if (!scene) {
|
||||
if (!message.data.flags.smartdoors)
|
||||
delete flags.smartdoors
|
||||
}
|
||||
else {
|
||||
// Assign the id and the scene id to the new data structure
|
||||
flags.smartdoors.source = {wall: wallId, scene: scene}
|
||||
}
|
||||
|
||||
// We have to disable recursive here so deleting keys will actually work
|
||||
message.update({flags: flags}, {diff: false, recursive: false})
|
||||
})
|
||||
|
||||
game.settings.set(settingsKey, "dataVersion", dataVersion)
|
||||
ui.notifications.info(game.i18n.format("smart-doors.ui.messages.migrationDone", {version: dataVersion}))
|
||||
}
|
||||
if (dataVersion != currentDataVersion)
|
||||
ui.notifications.error(game.i18n.format("smart-doors.ui.messages.unknownVersion", {version: dataVersion}), {permanent: true})
|
||||
}
|
||||
Reference in New Issue
Block a user