diff --git a/html/src/app.js b/html/src/app.js index ce6c89d7..b2ceab06 100644 --- a/html/src/app.js +++ b/html/src/app.js @@ -7808,7 +7808,12 @@ speechSynthesis.getVoices(); friendList: new Map() }; - $app.methods.lastLocationReset = function () { + $app.methods.lastLocationReset = function (gameLogDate) { + var dateTime = gameLogDate; + if (!gameLogDate) { + dateTime = new Date().toJSON(); + } + var dateTimeStamp = Date.parse(dateTime); this.photonLobby = new Map(); this.photonLobbyCurrent = new Map(); this.photonLobbyMaster = 0; @@ -7827,23 +7832,23 @@ speechSynthesis.getVoices(); this.photonEventTable.data = []; } var playerList = Array.from(this.lastLocation.playerList.values()); + var dataBaseEntries = []; for (var ref of playerList) { - var time = new Date().getTime() - ref.joinTime; var entry = { - created_at: new Date().toJSON(), + created_at: dateTime, type: 'OnPlayerLeft', displayName: ref.displayName, location: this.lastLocation.location, userId: ref.userId, - time + time: dateTimeStamp - ref.joinTime }; - database.addGamelogJoinLeaveToDatabase(entry); + dataBaseEntries.unshift(entry); this.addGameLog(entry); } + database.addGamelogJoinLeaveBulk(dataBaseEntries); if (this.lastLocation.date !== 0) { - var timeLocation = new Date().getTime() - this.lastLocation.date; var update = { - time: timeLocation, + time: dateTimeStamp - this.lastLocation.date, created_at: new Date(this.lastLocation.date).toJSON() }; database.updateGamelogLocationTimeToDatabase(update); @@ -8114,7 +8119,7 @@ speechSynthesis.getVoices(); type: 'LocationDestination', location: gameLog.location }); - this.lastLocationReset(); + this.lastLocationReset(gameLog.dt); this.lastLocation.location = 'traveling'; this.lastLocationDestination = gameLog.location; this.lastLocationDestinationTime = Date.parse(gameLog.dt); @@ -8127,7 +8132,7 @@ speechSynthesis.getVoices(); break; case 'location': if (this.isGameRunning) { - this.lastLocationReset(); + this.lastLocationReset(gameLog.dt); this.clearNowPlaying(); this.lastLocation = { date: Date.parse(gameLog.dt), diff --git a/html/src/repository/database.js b/html/src/repository/database.js index 256f6f1c..a6b29595 100644 --- a/html/src/repository/database.js +++ b/html/src/repository/database.js @@ -520,6 +520,38 @@ class Database { ); } + addGamelogJoinLeaveBulk(inputData) { + if (inputData.length === 0) { + return; + } + var sqlValues = ''; + var items = [ + 'created_at', + 'type', + 'displayName', + 'location', + 'userId', + 'time' + ]; + for (var line of inputData) { + var field = {}; + for (var item of items) { + if (typeof line[item] === 'string') { + field[item] = line[item].replace(/'/g, "''"); + } else if (typeof line[item] === 'number') { + field[item] = line[item]; + } else { + field[item] = ''; + } + } + sqlValues += `('${field.created_at}', '${field.type}', '${field.displayName}', '${field.location}', '${field.userId}', '${field.time}'), `; + } + sqlValues = sqlValues.slice(0, -2); + sqliteService.executeNonQuery( + `INSERT OR IGNORE INTO gamelog_join_leave (created_at, type, display_name, location, user_id, time) VALUES ${sqlValues}` + ); + } + addGamelogPortalSpawnToDatabase(entry) { sqliteService.executeNonQuery( `INSERT OR IGNORE INTO gamelog_portal_spawn (created_at, display_name, location, user_id, instance_id, world_name) VALUES (@created_at, @display_name, @location, @user_id, @instance_id, @world_name)`,