getFriendLogHistoryForUserId

This commit is contained in:
Natsumi
2026-01-30 03:17:54 +13:00
committed by pa
parent 48d84363ec
commit 1b29ade8d3
4 changed files with 82 additions and 47 deletions

View File

@@ -356,8 +356,8 @@
</div>
</div>
<div v-if="currentUser.id !== userDialog.id" class="x-friend-item" style="cursor: default">
<TooltipWrapper side="top" :disabled="!userDialog.dateFriendedInfo.length">
<template v-if="userDialog.dateFriendedInfo.length" #content>
<TooltipWrapper side="top">
<template #content>
<template v-for="ref in userDialog.dateFriendedInfo" :key="ref.type">
<span>{{ ref.type }}: {{ formatDateFilter(ref.created_at, 'long') }}</span
><br />
@@ -1309,11 +1309,11 @@
import { userDialogGroupSortingOptions, userDialogMutualFriendSortingOptions } from '../../../shared/constants';
import { userDialogWorldOrderOptions, userDialogWorldSortingOptions } from '../../../shared/constants/';
import { database } from '../../../service/database';
import { formatJsonVars } from '../../../shared/utils/base/ui';
import InstanceActionBar from '../../InstanceActionBar.vue';
import SendInviteDialog from '../InviteDialog/SendInviteDialog.vue';
import UserSummaryHeader from './UserSummaryHeader.vue';
import { formatJsonVars } from '../../../shared/utils/base/ui';
const BioDialog = defineAsyncComponent(() => import('./BioDialog.vue'));
const LanguageDialog = defineAsyncComponent(() => import('./LanguageDialog.vue'));

View File

@@ -83,6 +83,39 @@ const friendLogHistory = {
);
},
async getFriendLogHistoryForUserId(userId, types) {
let friendLogHistory = [];
let typeFilter = '';
if (types && types.length > 0) {
const escapedTypes = types.map((t) => `'${t.replace(/'/g, "''")}'`);
typeFilter = ` AND type IN (${escapedTypes.join(', ')})`;
}
await sqliteService.execute(
(dbRow) => {
const row = {
rowId: dbRow[0],
created_at: dbRow[1],
type: dbRow[2],
userId: dbRow[3],
displayName: dbRow[4],
friendNumber: dbRow[8]
};
if (row.type === 'DisplayName') {
row.previousDisplayName = dbRow[5];
} else if (row.type === 'TrustLevel') {
row.trustLevel = dbRow[6];
row.previousTrustLevel = dbRow[7];
}
friendLogHistory.push(row);
},
`SELECT * FROM ${dbVars.userPrefix}_friend_log_history WHERE user_id = @user_id${typeFilter}`,
{
'@user_id': userId
}
);
return friendLogHistory;
},
deleteFriendLogHistory(rowId) {
sqliteService.executeNonQuery(
`DELETE FROM ${dbVars.userPrefix}_friend_log_history WHERE id = @row_id`,

View File

@@ -69,7 +69,6 @@ export const useFriendStore = defineStore('Friend', () => {
const isRefreshFriendsLoading = ref(false);
const onlineFriendCount = ref(0);
const isFriendLogLoaded = ref(false);
const pendingOfflineDelay = 170000;
let pendingOfflineWorker = null;
@@ -1286,7 +1285,6 @@ export const useFriendStore = defineStore('Friend', () => {
friendLogTable.value.loading = true;
friendLogTable.value.data = await database.getFriendLogHistory();
friendLogTable.value.loading = false;
isFriendLogLoaded.value = true;
}
/**
@@ -1658,7 +1656,6 @@ export const useFriendStore = defineStore('Friend', () => {
onlineFriendCount,
friendLog,
friendLogTable,
isFriendLogLoaded,
initFriendsList,
updateLocalFavoriteFriends,

View File

@@ -911,52 +911,57 @@ export const useUserStore = defineStore('User', () => {
}
const displayNameMap =
ref1.previousDisplayNames;
if (!friendStore.isFriendLogLoaded) {
await friendStore.initFriendLogHistoryTable();
}
friendStore.friendLogTable.data.forEach(
(ref2) => {
if (ref2.userId === D.id) {
const userNotifications =
await database.getFriendLogHistoryForUserId(
D.id,
[
'DisplayName',
'Friend',
'Unfriend'
]
);
for (const notification of userNotifications) {
if (notification.userId !== D.id) {
continue;
}
if (
notification.type === 'DisplayName'
) {
displayNameMap.set(
notification.previousDisplayName,
notification.created_at
);
}
if (!D.dateFriended) {
if (
notification.type === 'Unfriend'
) {
D.unFriended = true;
if (
ref2.type === 'DisplayName'
!appearanceSettingsStore.hideUnfriends
) {
displayNameMap.set(
ref2.previousDisplayName,
ref2.created_at
);
}
if (!D.dateFriended) {
if (
ref2.type === 'Unfriend'
) {
D.unFriended = true;
if (
!appearanceSettingsStore.hideUnfriends
) {
D.dateFriended =
ref2.created_at;
}
}
if (
ref2.type === 'Friend'
) {
D.unFriended = false;
D.dateFriended =
ref2.created_at;
}
}
if (
ref2.type === 'Friend' ||
(ref2.type === 'Unfriend' &&
!appearanceSettingsStore.hideUnfriends)
) {
D.dateFriendedInfo.push(
ref2
);
D.dateFriended =
notification.created_at;
}
}
if (
notification.type === 'Friend'
) {
D.unFriended = false;
D.dateFriended =
notification.created_at;
}
}
);
if (
notification.type === 'Friend' ||
(notification.type === 'Unfriend' &&
!appearanceSettingsStore.hideUnfriends)
) {
D.dateFriendedInfo.push(
notification
);
}
}
displayNameMap.forEach(
(updated_at, displayName) => {
D.previousDisplayNames.push({