Load ScriptAccounts
All checks were successful
E2E Testing / test (push) Successful in 1m28s

This commit is contained in:
Sebastian Böckelmann 2024-02-17 08:45:22 +01:00
parent d56166b245
commit 78a264aa26
11 changed files with 167 additions and 14 deletions

11
app/LoadModel.js Normal file
View File

@ -0,0 +1,11 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.LoadModel = void 0;
class LoadModel {
constructor(jsonString, modelType) {
this.jsonString = jsonString;
this.modelType = modelType;
}
}
exports.LoadModel = LoadModel;
//# sourceMappingURL=LoadModel.js.map

12
app/LoadModel.ts Normal file
View File

@ -0,0 +1,12 @@
import {ModelComponentType} from "../src/app/game-model/ModelComponentType";
export class LoadModel {
jsonString: string
modelType: ModelComponentType
constructor(jsonString: string, modelType: ModelComponentType) {
this.jsonString = jsonString;
this.modelType = modelType;
}
}

11
app/LoadedProject.js Normal file
View File

@ -0,0 +1,11 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.LoadedProject = void 0;
class LoadedProject {
constructor(projectName, loadedModels) {
this.projectName = projectName;
this.loadedModels = loadedModels;
}
}
exports.LoadedProject = LoadedProject;
//# sourceMappingURL=LoadedProject.js.map

12
app/LoadedProject.ts Normal file
View File

@ -0,0 +1,12 @@
import {LoadModel} from "./LoadModel";
export class LoadedProject {
projectName: string
loadedModels: LoadModel[]
constructor(projectName: string, loadedModels: LoadModel[]) {
this.projectName = projectName;
this.loadedModels = loadedModels;
}
}

View File

@ -3,18 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
exports.SaveProject = void 0;
const fs = require("fs");
const path = require("node:path");
const ModelComponentType_1 = require("../src/app/game-model/ModelComponentType");
const LoadedProject_1 = require("./LoadedProject");
class SaveProject {
static saveProject(projectDir, storageModels) {
const directoryPath = 'testModel/';
if (!fs.existsSync(directoryPath)) {
fs.mkdirSync(directoryPath, { recursive: true });
if (!fs.existsSync(projectDir)) {
fs.mkdirSync(projectDir, { recursive: true });
}
storageModels.forEach(storageModel => {
const modelDir = path.join(directoryPath, storageModel.storageDir);
const modelDir = path.join(projectDir, storageModel.storageDir);
if (!fs.existsSync(modelDir)) {
fs.mkdirSync(modelDir, { recursive: true });
}
const filePath = path.join(directoryPath, storageModel.storageDir, storageModel.fileName + ".json");
const filePath = path.join(modelDir, storageModel.fileName + ".json");
fs.writeFile(filePath, storageModel.jsonString, 'utf-8', (err) => {
if (err) {
console.error('Error writing JSON to file:', err);
@ -25,6 +26,27 @@ class SaveProject {
});
});
}
static loadProject(projectDir) {
const loadedScriptAccounts = SaveProject.loadScriptAccounts(projectDir);
return new LoadedProject_1.LoadedProject(path.basename(projectDir), loadedScriptAccounts);
}
static loadScriptAccounts(projectDir) {
const scriptAccountDir = path.join(projectDir, "script-accounts");
if (!fs.existsSync(scriptAccountDir)) {
return [];
}
const loadedScriptAccounts = [];
const scriptAccountFileNames = fs.readdirSync(scriptAccountDir);
scriptAccountFileNames.forEach(scriptAccountFileName => {
const scriptAccountFile = path.join(scriptAccountDir, scriptAccountFileName);
const scriptAccountData = fs.readFileSync(scriptAccountFile, 'utf-8');
loadedScriptAccounts.push({
modelType: ModelComponentType_1.ModelComponentType.SCRIPTACCOUNT,
jsonString: scriptAccountData
});
});
return loadedScriptAccounts;
}
}
exports.SaveProject = SaveProject;
//# sourceMappingURL=SaveProject.js.map

View File

@ -1,22 +1,25 @@
import {StorageModel} from "../src/app/game-model/StorageModel";
import * as fs from "fs";
import * as path from "node:path";
import {LoadModel} from "./LoadModel";
import {ModelComponentType} from "../src/app/game-model/ModelComponentType";
import {BrowserWindow} from "electron";
import {LoadedProject} from "./LoadedProject";
export class SaveProject {
static saveProject(projectDir: string, storageModels: StorageModel[]) {
const directoryPath = 'testModel/'
if(!fs.existsSync(directoryPath)) {
fs.mkdirSync(directoryPath, {recursive: true});
if(!fs.existsSync(projectDir)) {
fs.mkdirSync(projectDir, {recursive: true});
}
storageModels.forEach(storageModel => {
const modelDir = path.join(directoryPath, storageModel.storageDir);
const modelDir = path.join(projectDir, storageModel.storageDir);
if(!fs.existsSync(modelDir)) {
fs.mkdirSync(modelDir, {recursive: true});
}
const filePath = path.join(directoryPath, storageModel.storageDir, storageModel.fileName + ".json");
const filePath = path.join(modelDir, storageModel.fileName + ".json");
fs.writeFile(filePath, storageModel.jsonString ,'utf-8', (err) => {
if (err) {
console.error('Error writing JSON to file:', err);
@ -26,4 +29,33 @@ export class SaveProject {
})
})
}
static loadProject(projectDir: string) {
const loadedScriptAccounts: LoadModel[] = SaveProject.loadScriptAccounts(projectDir)
return new LoadedProject(path.basename(projectDir), loadedScriptAccounts);
}
static loadScriptAccounts(projectDir: string): LoadModel[] {
const scriptAccountDir = path.join(projectDir, "script-accounts");
if (!fs.existsSync(scriptAccountDir)) {
return [];
}
const loadedScriptAccounts: LoadModel[] = [];
const scriptAccountFileNames = fs.readdirSync(scriptAccountDir);
scriptAccountFileNames.forEach(scriptAccountFileName => {
const scriptAccountFile = path.join(scriptAccountDir, scriptAccountFileName)
const scriptAccountData: string = fs.readFileSync(scriptAccountFile, 'utf-8');
loadedScriptAccounts.push({
modelType: ModelComponentType.SCRIPTACCOUNT,
jsonString: scriptAccountData
});
})
return loadedScriptAccounts;
}
}

View File

@ -1,4 +1,4 @@
import {app, BrowserWindow, screen, Menu, ipcMain, ipcRenderer, globalShortcut} from 'electron';
import {app, BrowserWindow, screen, Menu, ipcMain, dialog, globalShortcut} from 'electron';
import * as path from 'path';
import * as fs from 'fs';
import {json} from "node:stream/consumers";
@ -171,7 +171,19 @@ function createNewProject() {
}
function openProject() {
const selectedPaths = dialog.showOpenDialogSync(win!, {
title: "Open Game-Model",
properties: [
"openDirectory",
]
})
if(selectedPaths != undefined) {
projectDirectory = selectedPaths[0];
console.log("Open Project-Directory: ", projectDirectory)
const loadedProject = SaveProject.loadProject(projectDirectory)
win!.webContents.send("open-project", loadedProject)
}
}
function saveProject() {

View File

@ -17,6 +17,9 @@ import {GamescriptOverviewComponent} from "./side-overviews/gamescript-overview/
import {SimpleGamesystem} from "./game-model/gamesystems/SimpleGamesystem";
import {ProductGamesystem} from "./game-model/gamesystems/ProductGamesystem";
import {ProductState} from "./game-model/gamesystems/ProductState";
import {LoadModel} from "../../app/LoadModel";
import {LoadedProject} from "../../app/LoadedProject";
import {ProcessLoadedProject} from "./game-model/fs/ProcessLoadedProject";
@Component({
selector: 'app-root',
@ -56,6 +59,10 @@ export class AppComponent implements OnInit{
this.saveGameModel();
})
})
electronService.ipcRenderer.on('open-project', (event: any, loadedProject: LoadedProject) => {
this.gameModel = ProcessLoadedProject.processLoadedProject(loadedProject)
})
} else {
console.log('Run in browser');
}
@ -153,7 +160,7 @@ export class AppComponent implements OnInit{
}
ngOnInit() {
this.gameModel = new GameModel("No More");
/*this.gameModel = new GameModel("No More");
this.gameModel.createScriptAccount("Temperature");
this.gameModel.createScriptAccount("Luftfeuchtigkeit");
@ -175,7 +182,7 @@ export class AppComponent implements OnInit{
weather_season.createState([springState!, sunnyState!]);
this.gameModel.addGamesystem(weather_season);
this.gameModel.addGamesystem(weather_season);*/
}
openScriptAccountsOverview() {

View File

@ -106,4 +106,8 @@ export class GameModel {
return storageModels;
}
addScriptAccount(scriptAccount: ScriptAccount) {
this.scriptAccounts.push(scriptAccount);
}
}

View File

@ -0,0 +1,30 @@
import {GameModel} from "../GameModel";
import {LoadedProject} from "../../../../app/LoadedProject";
import {LoadModel} from "../../../../app/LoadModel";
import {ModelComponentType} from "../ModelComponentType";
import {ScriptAccount} from "../scriptAccounts/ScriptAccount";
export class ProcessLoadedProject {
static processLoadedProject(loadedProject: LoadedProject): GameModel {
const gameModel = new GameModel(loadedProject.projectName);
loadedProject.loadedModels.forEach(loadedModel => this.processLoadedModel(gameModel, loadedModel))
return gameModel;
}
static processLoadedModel(gameModel: GameModel, loadedModel: LoadModel) {
switch (loadedModel.modelType) {
case ModelComponentType.SCRIPTACCOUNT: this.processLoadedScriptAccount(gameModel, loadedModel); break;
case ModelComponentType.GAMESYTEM: this.processLoadedGamesystem(gameModel, loadedModel); break;
}
}
static processLoadedScriptAccount(gameModel: GameModel, loadedModel: LoadModel) {
const scriptAccount = new ScriptAccount("", "");
Object.assign(scriptAccount, JSON.parse(loadedModel.jsonString));
gameModel.addScriptAccount(scriptAccount);
}
static processLoadedGamesystem(gameModel: GameModel, loadedModel: LoadModel) {
}
}

View File

@ -1,7 +1,7 @@
{
"unsaved": false,
"componentName": "Temperature",
"componentDescription": "ddada",
"componentDescription": "",
"type": 0,
"minValue": 0,
"maxValue": 100