diff --git a/html/src/app.js b/html/src/app.js index 785500a2..43939976 100644 --- a/html/src/app.js +++ b/html/src/app.js @@ -12710,19 +12710,11 @@ speechSynthesis.getVoices(); if (this.lastLocation.playerList.has(D.ref.displayName)) { inCurrentWorld = true; } - database.getLastSeen(D.ref, inCurrentWorld).then((ref1) => { + database.getUserStats(D.ref, inCurrentWorld).then((ref1) => { if (ref1.userId === D.id) { D.lastSeen = ref1.created_at; - } - }); - database.getJoinCount(D.ref).then((ref2) => { - if (ref2.userId === D.id) { - D.joinCount = ref2.joinCount; - } - }); - database.getTimeSpent(D.ref).then((ref3) => { - if (ref3.userId === D.id) { - D.timeSpent = ref3.timeSpent; + D.joinCount = ref1.joinCount; + D.timeSpent = ref1.timeSpent; } }); } @@ -16034,30 +16026,22 @@ speechSynthesis.getVoices(); continue; } } - this.getJoinCount(ctx.ref); - this.getLastSeen(ctx.ref); - this.getTimeSpent(ctx.ref); + var inCurrentWorld = false; + if (this.lastLocation.playerList.has(ctx.ref.displayName)) { + inCurrentWorld = true; + } + this.getUserStats(ctx.ref); ctx.ref.$friendNum = ctx.no; results.push(ctx.ref); } this.friendsListTable.data = results; }; - $app.methods.getJoinCount = async function (ctx) { - var ref = await database.getJoinCount(ctx); + $app.methods.getUserStats = async function (ctx) { + var ref = await database.getUserStats(ctx); // eslint-disable-next-line require-atomic-updates ctx.$joinCount = ref.joinCount; - }; - - $app.methods.getLastSeen = async function (ctx) { - var ref = await database.getLastSeen(ctx); - // eslint-disable-next-line require-atomic-updates ctx.$lastSeen = ref.created_at; - }; - - $app.methods.getTimeSpent = async function (ctx) { - var ref = await database.getTimeSpent(ctx); - // eslint-disable-next-line require-atomic-updates ctx.$timeSpent = ref.timeSpent; }; diff --git a/html/src/repository/database.js b/html/src/repository/database.js index 243c0018..685cb11b 100644 --- a/html/src/repository/database.js +++ b/html/src/repository/database.js @@ -873,6 +873,36 @@ class Database { return ref; } + async getUserStats(input, inCurrentWorld) { + var i = 0; + var instances = new Set(); + var ref = { + timeSpent: 0, + created_at: '', + joinCount: 0, + userId: input.id + }; + await sqliteService.execute( + (row) => { + if (typeof row[2] === 'number') { + ref.timeSpent += row[2]; + } + i++; + if (i === 1 || (inCurrentWorld && i === 2)) { + ref.created_at = row[0]; + } + instances.add(row[3]); + }, + `SELECT created_at, user_id, time, location FROM gamelog_join_leave WHERE user_id = @userId OR display_name = @displayName ORDER BY id DESC`, + { + '@userId': input.id, + '@displayName': input.displayName + } + ); + ref.joinCount = instances.size; + return ref; + } + async lookupFeedDatabase(search, filters, vipList) { var search = search.replaceAll("'", "''"); var vipQuery = '';