diff --git a/html/src/app.js b/html/src/app.js
index 411c5863..9890ce02 100644
--- a/html/src/app.js
+++ b/html/src/app.js
@@ -12596,7 +12596,10 @@ speechSynthesis.getVoices();
},
joinCount: 0,
timeSpent: 0,
- lastSeen: ''
+ lastSeen: '',
+ previousDisplayNames: [],
+ dateFriended: '',
+ unFriended: false
};
$app.watch['userDialog.memo'] = function () {
@@ -12810,6 +12813,9 @@ speechSynthesis.getVoices();
D.lastSeen = '';
D.joinCount = 0;
D.timeSpent = 0;
+ D.previousDisplayNames = [];
+ D.dateFriended = '';
+ D.unFriended = false;
API.getCachedUser({
userId
})
@@ -12897,15 +12903,48 @@ speechSynthesis.getVoices();
if (this.lastLocation.playerList.has(D.ref.displayName)) {
inCurrentWorld = true;
}
- database
- .getUserStats(D.ref, inCurrentWorld)
- .then((ref1) => {
+ if (userId !== API.currentUser.id) {
+ database
+ .getUserStats(D.ref, inCurrentWorld)
+ .then((ref1) => {
if (ref1.userId === D.id) {
D.lastSeen = ref1.created_at;
- D.joinCount = ref1.joinCount;
- D.timeSpent = ref1.timeSpent;
- }
- });
+ D.joinCount = ref1.joinCount;
+ D.timeSpent = ref1.timeSpent;
+ }
+ var displayNameMap = ref1.previousDisplayNames;
+ this.friendLogTable.data.forEach((ref2) => {
+ if (ref2.userId === D.id) {
+ if (ref2.type === 'DisplayName') {
+ displayNameMap.set(
+ ref2.previousDisplayName,
+ ref2.created_at
+ );
+ }
+ if (!D.dateFriended) {
+ if (ref2.type === 'Unfriend') {
+ D.unFriended = true;
+ D.dateFriended =
+ ref2.created_at;
+ }
+ if (ref2.type === 'Friend') {
+ D.unFriended = false;
+ D.dateFriended =
+ ref2.created_at;
+ }
+ }
+ }
+ });
+ var displayNameMapSorted = new Map(
+ [...displayNameMap.entries()].sort(
+ (a, b) => b[1] - a[1]
+ )
+ );
+ D.previousDisplayNames = Array.from(
+ displayNameMapSorted.keys()
+ );
+ });
+ }
}
return args;
});
diff --git a/html/src/index.pug b/html/src/index.pug
index b0724073..9d7def64 100644
--- a/html/src/index.pug
+++ b/html/src/index.pug
@@ -1396,6 +1396,13 @@ html
span(v-else-if="userDialog.ref.status === 'busy'") Do Not Disturb
span(v-else) Offline
i.x-user-status(:class="userStatusClass(userDialog.ref)")
+ template(v-if="userDialog.previousDisplayNames.length > 0")
+ el-tooltip(placement="bottom")
+ template(#content)
+ span Previous Display Names:
+ div(v-for="displayName in userDialog.previousDisplayNames" placement="top")
+ span(v-text="displayName")
+ i.el-icon-caret-bottom
span(v-text="userDialog.ref.displayName" style="margin-left:5px;margin-right:5px;font-weight:bold")
el-popover(placement="top" trigger="click")
span(slot="reference" v-text="userDialog.ref.username" style="margin-right:5px;color:#909399;font-family:monospace;font-size:12px;cursor:pointer")
@@ -1540,6 +1547,11 @@ html
.detail
span.name Date Joined
span.extra(v-text="userDialog.ref.date_joined")
+ .x-friend-item(style="cursor:default")
+ .detail
+ span.name(v-if="userDialog.unFriended") Unfriended
+ span.name(v-else) Friended
+ span.extra {{ userDialog.dateFriended | formatDate('long') }}
template(v-if="API.currentUser.id === userDialog.id")
.x-friend-item(@click="toggleAvatarCopying")
.detail
diff --git a/html/src/repository/database.js b/html/src/repository/database.js
index 685cb11b..aa5a7d31 100644
--- a/html/src/repository/database.js
+++ b/html/src/repository/database.js
@@ -880,7 +880,8 @@ class Database {
timeSpent: 0,
created_at: '',
joinCount: 0,
- userId: input.id
+ userId: input.id,
+ previousDisplayNames: new Map()
};
await sqliteService.execute(
(row) => {
@@ -892,8 +893,11 @@ class Database {
ref.created_at = row[0];
}
instances.add(row[3]);
+ if (input.displayName !== row[4]) {
+ ref.previousDisplayNames.set(row[4], row[0]);
+ }
},
- `SELECT created_at, user_id, time, location FROM gamelog_join_leave WHERE user_id = @userId OR display_name = @displayName ORDER BY id DESC`,
+ `SELECT created_at, user_id, time, location, display_name FROM gamelog_join_leave WHERE user_id = @userId OR display_name = @displayName ORDER BY id DESC`,
{
'@userId': input.id,
'@displayName': input.displayName
@@ -1343,6 +1347,29 @@ class Database {
}
);
}
+
+ async getpreviousDisplayNamesByUserId(ref) {
+ var data = new Map();
+ await sqliteService.execute(
+ (dbRow) => {
+ var row = {
+ created_at: dbRow[0],
+ displayName: dbRow[1]
+ };
+ if (ref.displayName !== row.displayName) {
+ data.set(row.displayName, row.created_at);
+ }
+ },
+ `SELECT created_at, display_name
+ FROM gamelog_join_leave
+ WHERE user_id = @userId
+ ORDER BY id DESC`,
+ {
+ '@userId': ref.id
+ }
+ );
+ return data;
+ }
}
var self = new Database();