diff --git a/html/src/app.js b/html/src/app.js
index 1baf7fc6..c2d07da3 100644
--- a/html/src/app.js
+++ b/html/src/app.js
@@ -14,7 +14,7 @@ import locale from 'element-ui/lib/locale/lang/en';
import sharedRepository from './repository/shared.js';
import configRepository from './repository/config.js';
import webApiService from './service/webapi.js';
-import logWatcherService from './service/logwatcher.js'
+import gameLogService from './service/gamelog.js'
(async function () {
await CefSharp.BindObjectAsync(
@@ -3296,7 +3296,7 @@ import logWatcherService from './service/logwatcher.js'
el: '#x-app',
async mounted() {
this.checkAppVersion();
- await logWatcherService.reset();
+ await gameLogService.reset();
API.$on('SHOW_WORLD_DIALOG', (tag) => this.showWorldDialog(tag));
API.$on('SHOW_LAUNCH_DIALOG', (tag) => this.showLaunchDialog(tag));
this.updateLoop();
@@ -4435,8 +4435,6 @@ import logWatcherService from './service/logwatcher.js'
// App: gameLog
- var gameLogContextMap = new Map();
-
$app.data.lastLocation = '';
$app.data.lastLocation$ = {};
$app.data.discordActive = configRepository.getBool('discordActive');
@@ -4483,7 +4481,7 @@ import logWatcherService from './service/logwatcher.js'
};
$app.methods.resetGameLog = async function () {
- await logWatcherService.reset();
+ await gameLogService.reset();
this.gameLogTable.data = [];
};
@@ -4506,94 +4504,61 @@ import logWatcherService from './service/logwatcher.js'
};
$app.methods.updateGameLog = async function () {
- var {
- displayName: currentUserDisplayName,
- username: currentUserName
- } = API.currentUser;
+ var currentUserDisplayName = API.currentUser.displayName;
- for (var [fileName, dt, type, ...args] of await logWatcherService.get()) {
- var gameLogContext = gameLogContextMap.get(fileName);
- if (gameLogContext === undefined) {
- gameLogContext = {
- // auth
- loginProvider: null,
- loginUser: null,
+ for (var gameLog of await gameLogService.poll(API.currentUser.username)) {
+ var tableData = null;
- // hmd
- hmdModel: null,
-
- // location
- location: null,
- };
- gameLogContextMap.set(fileName, gameLogContext);
- }
-
- var gameLogTableData = null;
-
- switch (type) {
- case 'auth':
- gameLogContext.loginProvider = args[0];
- gameLogContext.loginUser = args[1];
- break;
-
- case 'hmd-model':
- gameLogContext.hmdModel = args[0];
+ switch (gameLog.type) {
+ case 'location':
+ tableData = {
+ created_at: gameLog.dt,
+ type: 'Location',
+ data: gameLog.location
+ };
break;
case 'location':
- var location = args[0];
- gameLogContext.location = location;
- if (gameLogContext.loginUser === currentUserName) {
- this.lastLocation = location;
- }
- break;
-
- case 'world':
- // var worldName = params[0];
- gameLogTableData = {
- created_at: dt,
+ tableData = {
+ created_at: gameLog.dt,
type: 'Location',
- data: gameLogContext.location
+ data: gameLog.location
};
break;
case 'player-joined':
- var userDisplayName = args[0];
- if (currentUserDisplayName === userDisplayName) {
+ if (currentUserDisplayName === gameLog.userDisplayName) {
continue;
}
- gameLogTableData = {
- created_at: dt,
+ tableData = {
+ created_at: gameLog.dt,
type: 'OnPlayerJoined',
- data: userDisplayName
+ data: gameLog.userDisplayName
};
break;
case 'player-left':
- var userDisplayName = args[0];
- if (currentUserDisplayName === userDisplayName) {
+ if (currentUserDisplayName === gameLog.userDisplayName) {
continue;
}
- gameLogTableData = {
- created_at: dt,
+ tableData = {
+ created_at: gameLog.dt,
type: 'OnPlayerLeft',
- data: userDisplayName
+ data: gameLog.userDisplayName
};
break;
case 'notification':
- var json = args[0];
- gameLogTableData = {
- created_at: dt,
+ tableData = {
+ created_at: gameLog.dt,
type: 'Notification',
- data: json
+ data: gameLog.json
};
break;
}
- if (gameLogTableData !== null &&
- gameLogContext.loginUser === currentUserName) {
- this.gameLogTable.data.push(gameLogTableData);
+ if (tableData !== null) {
+ this.gameLogTable.data.push(tableData);
}
}
}
diff --git a/html/src/service/gamelog.js b/html/src/service/gamelog.js
new file mode 100644
index 00000000..92281248
--- /dev/null
+++ b/html/src/service/gamelog.js
@@ -0,0 +1,110 @@
+// requires binding of LogWatcher
+
+var contextMap = new Map(); //
+
+class GameLogService {
+ async poll(loginUser) {
+ var rawGameLogs = await LogWatcher.Get();
+ var gameLogs = [];
+ var now = Date.now();
+
+ for (var [fileName, dt, type, ...args] of rawGameLogs) {
+ var context = contextMap.get(fileName);
+ if (context === undefined) {
+ context = {
+ updatedAt: null,
+
+ // auth
+ loginProvider: null,
+ loginUser: null,
+
+ // hmd
+ hmdModel: null,
+
+ // location
+ location: null,
+ };
+ contextMap.set(fileName, context);
+ }
+
+ var gameLog = parseRawGameLog(dt, type, args);
+
+ switch (gameLog.type) {
+ case 'auth':
+ context.loginProvider = gameLog.loginProvider;
+ context.loginUser = gameLog.loginUser;
+ break;
+
+ case 'hmd-model':
+ context.hmdModel = gameLog.hmdModel;
+ break;
+
+ case 'location':
+ context.location = gameLog.location;
+ break;
+ }
+
+ context.updatedAt = now;
+
+ if (loginUser !== null &&
+ loginUser === context.loginUser) {
+ gameLogs.push(gameLog);
+ }
+ }
+
+ return gameLogs;
+ }
+
+ async reset() {
+ await LogWatcher.Reset();
+ contextMap.clear();
+ }
+}
+
+function parseRawGameLog(dt, type, args) {
+ var gameLog = {
+ dt,
+ type
+ };
+
+ switch (type) {
+ case 'auth':
+ gameLog.loginProvider = args[0];
+ gameLog.loginUser = args[1];
+ break;
+
+ case 'hmd-model':
+ gameLog.hmdModel = args[0];
+ break;
+
+ case 'location':
+ gameLog.location = args[0];
+ break;
+
+ case 'world':
+ gameLog.worldName = args[0];
+ break;
+
+ case 'player-joined':
+ gameLog.userDisplayName = args[0];
+ break;
+
+ case 'player-left':
+ gameLog.userDisplayName = args[0];
+ break;
+
+ case 'notification':
+ gameLog.json = args[0];
+ break;
+ }
+
+ return gameLog;
+}
+
+var self = new GameLogService();
+window.gameLogService = self;
+
+export {
+ self as default,
+ GameLogService as LogWatcherService
+};
diff --git a/html/src/service/logwatcher.js b/html/src/service/logwatcher.js
deleted file mode 100644
index d01f26da..00000000
--- a/html/src/service/logwatcher.js
+++ /dev/null
@@ -1,19 +0,0 @@
-// requires binding of LogWatcher
-
-class LogWatcherService {
- get() {
- return LogWatcher.Get();
- }
-
- reset() {
- return LogWatcher.Reset();
- }
-}
-
-var self = new LogWatcherService();
-window.logWatcherService = self;
-
-export {
- self as default,
- LogWatcherService
-};