Improved the change list algorithm

canary
WolverinDEV 2020-08-23 11:16:13 +02:00
parent f231c5a44d
commit 6a2b592817
3 changed files with 31 additions and 13 deletions

View File

@ -2,6 +2,7 @@ import {ChangeLog} from "tc-shared/update/ChangeLog";
export interface Updater {
getChangeLog() : ChangeLog;
getChangeList(oldVersion: string) : ChangeLog;
getLastUsedVersion() : string;
getCurrentVersion() : string;

View File

@ -3,9 +3,11 @@ import * as loader from "tc-loader";
import {Stage} from "tc-loader";
import {setUIUpdater} from "tc-shared/update/index";
import {Updater} from "tc-shared/update/Updater";
import {LogCategory, logError, logWarn} from "tc-shared/log";
const ChangeLogContents: string = require("../../../ChangeLog.md");
const EntryRegex = /^\* \*\*([0-9]{2})\.([0-9]{2})\.([0-9]{2})\*\*$/m;
const TimeStampRegex = /^([0-9]{2})\.([0-9]{2})\.([0-9]{2})$/m;
function parseChangeLogEntry(lines: string[], index: number) : { entries: ChangeSetEntry[], index: number } {
const entryDepth = lines[index].indexOf("-");
@ -108,6 +110,33 @@ class WebUpdater implements Updater {
return this.changeLog;
}
getChangeList(oldVersion: string): ChangeLog {
let changes = {
changes: [],
currentVersion: this.currentVersion
} as ChangeLog;
try {
const [ _, oldDay, oldMonth, oldYear ] = oldVersion.match(TimeStampRegex);
const oldDate = new Date(parseInt(oldYear), parseInt(oldMonth), parseInt(oldDay));
for(const change of this.getChangeLog().changes) {
const [ _, currentDay, currentMonth, currentYear ] = change.timestamp.match(TimeStampRegex);
const currentDate = new Date(parseInt(currentYear), parseInt(currentMonth), parseInt(currentDay));
if(currentDate.getTime() <= oldDate.getTime())
break;
changes.changes.push(change);
}
} catch (error) {
logError(LogCategory.GENERAL, tr("Failed to gather a change list from version %s: %o"), oldVersion, error);
return this.getChangeLog();
}
return changes;
}
getCurrentVersion(): string {
return this.currentVersion;
}

View File

@ -23,19 +23,7 @@ function getChangedChangeLog(updater: Updater) : ChangeLog | undefined {
if(updater.getCurrentVersion() === updater.getLastUsedVersion())
return undefined;
let changes = {
changes: [],
currentVersion: updater.getCurrentVersion()
} as ChangeLog;
let usedVersion = updater.getLastUsedVersion();
for(const change of updater.getChangeLog().changes) {
if(change.timestamp === usedVersion)
break;
changes.changes.push(change);
}
const changes = updater.getChangeList(updater.getLastUsedVersion());
return changes.changes.length > 0 ? changes : undefined;
}