Add format version to SceneryInfoView

- Slightly refactored scenery info header parsing
- Updated SceneryInfo to hold information about scenery info header version
- Added "Format version" item to SceneryInfoView
This commit is contained in:
izawartka 2026-08-13 19:05:14 +02:00
parent daa86d7b85
commit a1a27a9ca0
3 changed files with 20 additions and 13 deletions

View File

@ -11,6 +11,7 @@ export default function SceneryInfoView({ scenery }) {
<tbody> <tbody>
<SceneryInfoViewItem label="Name" value={sceneryInfo.name} /> <SceneryInfoViewItem label="Name" value={sceneryInfo.name} />
<SceneryInfoViewItem label="Version" value={sceneryInfo.version} /> <SceneryInfoViewItem label="Version" value={sceneryInfo.version} />
<SceneryInfoViewItem label="Format version" value={sceneryInfo.infoVersion} />
<SceneryInfoViewItem label="Author" value={sceneryInfo.author} /> <SceneryInfoViewItem label="Author" value={sceneryInfo.author} />
<SceneryInfoViewItem label="Description" value={sceneryInfo.description} /> <SceneryInfoViewItem label="Description" value={sceneryInfo.description} />
<SceneryInfoViewItem label="Link" value={sceneryInfo.link} isLink={true} /> <SceneryInfoViewItem label="Link" value={sceneryInfo.link} isLink={true} />

View File

@ -77,16 +77,6 @@ export default class SceneryParser {
} }
static _parseSceneryInfo(text) { static _parseSceneryInfo(text) {
const infoHeader = text.split(";", 2)[0];
if(!infoHeader.startsWith("scv")) {
SceneryParserLog.error('invalidSceneryInfo', `Invalid scenery info header: ${infoHeader}`);
}
const version = parseInt(infoHeader.split("v")[1]);
if(version < Constants.parser.sceneryInfoVersionMin || version > Constants.parser.sceneryInfoVersionMax) {
SceneryParserLog.warn('invalidSceneryInfoVersion', `Invalid scenery info version: ${version}. Expected: ${Constants.parser.sceneryInfoVersionMin}-${Constants.parser.sceneryInfoVersionMax}`);
}
return SceneryInfo.fromText(text); return SceneryInfo.fromText(text);
} }

View File

@ -1,4 +1,6 @@
import SpecialObject from "./special-object"; import SpecialObject from "./special-object";
import SceneryParserLog from '../parsing/scenery-parser-log';
import Constants from '../../helpers/constants';
export default class SceneryInfo extends SpecialObject { export default class SceneryInfo extends SpecialObject {
name; name;
@ -8,9 +10,10 @@ export default class SceneryInfo extends SpecialObject {
author; author;
main_signalbox; main_signalbox;
uuid; uuid;
infoVersion;
type = "SceneryInfo"; type = "SceneryInfo";
constructor(name, version, description, link, author, main_signalbox, uuid) { constructor(name, version, description, link, author, main_signalbox, uuid, infoVersion) {
super(); super();
Object.assign(this, { Object.assign(this, {
name, name,
@ -19,12 +22,24 @@ export default class SceneryInfo extends SpecialObject {
link, link,
author, author,
main_signalbox, main_signalbox,
uuid uuid,
infoVersion
}); });
} }
static fromText(text) { static fromText(text) {
const values = text.split(";"); const values = text.split(";");
if(!values[0].startsWith("scv")) {
SceneryParserLog.error('invalidSceneryInfo', `Invalid scenery info header: ${text}`);
return null;
}
const infoVersion = parseInt(values[0].split("v")[1]);
if(!infoVersion || infoVersion < Constants.parser.sceneryInfoVersionMin || infoVersion > Constants.parser.sceneryInfoVersionMax) {
SceneryParserLog.warn('invalidSceneryInfoVersion', `Unsupported scenery info version: ${infoVersion}. Expected: ${Constants.parser.sceneryInfoVersionMin}-${Constants.parser.sceneryInfoVersionMax}`);
}
const sceneryInfo = new SceneryInfo( const sceneryInfo = new SceneryInfo(
values[1], // name values[1], // name
parseInt(values[2]), // version parseInt(values[2]), // version
@ -32,7 +47,8 @@ export default class SceneryInfo extends SpecialObject {
values[4], // link values[4], // link
values[5], // author values[5], // author
values[6], // main_signalbox values[6], // main_signalbox
values[7] // uuid values[7], // uuid
infoVersion
); );
return sceneryInfo; return sceneryInfo;