diff --git a/html/src/app.js b/html/src/app.js
index f57aa17d..aa6f1b46 100644
--- a/html/src/app.js
+++ b/html/src/app.js
@@ -1675,7 +1675,8 @@ speechSynthesis.getVoices();
}).then((json) => {
var args = {
json,
- params
+ params,
+ option
};
this.$emit('WORLD:LIST', args);
return args;
@@ -1916,6 +1917,21 @@ speechSynthesis.getVoices();
});
};
+ API.deleteHiddenFriendRequest = function (params, userId) {
+ return this.call(`user/${userId}/friendRequest`, {
+ method: 'DELETE',
+ params
+ }).then((json) => {
+ var args = {
+ json,
+ params,
+ userId
+ };
+ this.$emit('NOTIFICATION:HIDE', args);
+ return args;
+ });
+ };
+
/*
params: {
userId: string
@@ -2158,6 +2174,18 @@ speechSynthesis.getVoices();
}
});
+ API.$on('NOTIFICATION:LIST:HIDDEN', function (args) {
+ for (var json of args.json) {
+ json.type = 'hiddenFriendRequest';
+ this.$emit('NOTIFICATION', {
+ json,
+ params: {
+ notificationId: json.id
+ }
+ });
+ }
+ });
+
API.$on('NOTIFICATION:ACCEPT', function (args) {
var ref = this.cachedNotifications.get(args.params.notificationId);
if (typeof ref === 'undefined' ||
@@ -2237,6 +2265,9 @@ speechSynthesis.getVoices();
API.expireNotifications = function () {
for (var ref of this.cachedNotifications.values()) {
ref.$isExpired = true;
+ if ((ref.type === 'friendRequest') || (ref.type === 'hiddenFriendRequest')) {
+ this.cachedNotifications.delete(ref.id);
+ }
}
};
@@ -2272,6 +2303,19 @@ speechSynthesis.getVoices();
break;
}
}
+ var params = {
+ n: 100,
+ offset: 0
+ };
+ var count = 50; //5000 max
+ for (var i = 0; i < count; i++) {
+ var args = await this.getHiddenFriendRequests(params);
+ $app.unseenNotifications = [];
+ params.offset += 100;
+ if (args.json.length < 100) {
+ break;
+ }
+ }
this.deleteExpiredNotifcations();
this.isNotificationsLoading = false;
};
@@ -2299,6 +2343,24 @@ speechSynthesis.getVoices();
});
};
+ API.getHiddenFriendRequests = function (params) {
+ return this.call('auth/user/notifications', {
+ method: 'GET',
+ params: {
+ type: 'friendRequest',
+ hidden: true,
+ ...params
+ }
+ }).then((json) => {
+ var args = {
+ json,
+ params
+ };
+ this.$emit('NOTIFICATION:LIST:HIDDEN', args);
+ return args;
+ });
+ };
+
API.clearNotifications = function () {
return this.call('auth/user/notifications/clear', {
method: 'PUT'
@@ -2329,7 +2391,8 @@ speechSynthesis.getVoices();
}).then((json) => {
var args = {
json,
- params
+ params,
+ receiverUserId
};
this.$emit('NOTIFICATION:INVITE:SEND', args);
return args;
@@ -2344,7 +2407,8 @@ speechSynthesis.getVoices();
}).then((json) => {
var args = {
json,
- params
+ params,
+ receiverUserId
};
this.$emit('NOTIFICATION:INVITE:PHOTO:SEND', args);
return args;
@@ -2358,7 +2422,8 @@ speechSynthesis.getVoices();
}).then((json) => {
var args = {
json,
- params
+ params,
+ receiverUserId
};
this.$emit('NOTIFICATION:REQUESTINVITE:SEND', args);
return args;
@@ -2373,7 +2438,8 @@ speechSynthesis.getVoices();
}).then((json) => {
var args = {
json,
- params
+ params,
+ receiverUserId
};
this.$emit('NOTIFICATION:REQUESTINVITE:PHOTO:SEND', args);
return args;
@@ -7558,9 +7624,17 @@ speechSynthesis.getVoices();
type: 'info',
callback: (action) => {
if (action === 'confirm') {
- API.hideNotification({
- notificationId: row.id
- });
+ if (row.type === 'hiddenFriendRequest') {
+ API.deleteHiddenFriendRequest({
+ notificationId: row.id
+ },
+ row.senderUserId
+ );
+ } else {
+ API.hideNotification({
+ notificationId: row.id
+ });
+ }
}
}
});
@@ -11512,7 +11586,8 @@ speechSynthesis.getVoices();
}).then((json) => {
var args = {
json,
- params
+ params,
+ fileId
};
this.$emit('AVATARIMAGE:INIT', args);
return args;
@@ -11816,7 +11891,8 @@ speechSynthesis.getVoices();
}).then((json) => {
var args = {
json,
- params
+ params,
+ fileId
};
this.$emit('WORLDIMAGE:INIT', args);
return args;
diff --git a/html/src/index.pug b/html/src/index.pug
index e7043e27..1a41c926 100644
--- a/html/src/index.pug
+++ b/html/src/index.pug
@@ -431,7 +431,7 @@ html
template(#tool)
div(style="margin:0 0 10px;display:flex;align-items:center")
el-select(v-model="notificationTable.filters[0].value" multiple clearable collapse-tags style="flex:1" placeholder="Filter")
- el-option(v-once v-for="type in ['requestInvite', 'invite', 'requestInviteResponse', 'inviteResponse', 'friendRequest', 'message']" :key="type" :label="type" :value="type")
+ el-option(v-once v-for="type in ['requestInvite', 'invite', 'requestInviteResponse', 'inviteResponse', 'friendRequest', 'hiddenFriendRequest', 'message']" :key="type" :label="type" :value="type")
el-input(v-model="notificationTable.filters[1].value" placeholder="Search" style="flex:none;width:150px;margin:0 10px")
el-tooltip(placement="bottom" content="Refresh" :disabled="hideTooltips")
el-button(type="default" :loading="API.isNotificationsLoading" @click="API.refreshNotifications()" icon="el-icon-refresh" circle style="flex:none")