Merge pull request #248 from sachaaaaa/friend_request_expiry

Add requestExpired state to Friend Request state machine
pull/252/head
sachaaaaa 7 years ago committed by GitHub
commit dca2462f6c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -372,7 +372,7 @@
};
},
// This goes through all our message history and finds a friend request
async getPendingFriendRequests(direction = null) {
async getFriendRequests(direction = null, status = ['pending']) {
// Theoretically all our messages could be friend requests,
// thus we have to unfortunately go through each one :(
const messages = await window.Signal.Data.getMessagesByConversation(
@ -382,13 +382,20 @@
MessageCollection: Whisper.MessageCollection,
}
);
if (typeof status === 'string') {
// eslint-disable-next-line no-param-reassign
status = [status];
}
// Get the pending friend requests that match the direction
// If no direction is supplied then return all pending friend requests
return messages.models.filter(m => {
if (m.get('friendStatus') !== 'pending') return false;
if (!status.includes(m.get('friendStatus'))) return false;
return direction === null || m.get('direction') === direction;
});
},
async getPendingFriendRequests(direction = null) {
return this.getFriendRequests(direction, ['pending']);
},
getPropsForListItem() {
const typingKeys = Object.keys(this.contactTypingTimers || {});
@ -567,8 +574,10 @@
);
},
hasSentFriendRequest() {
const status = this.get('friendRequestStatus');
return (
this.get('friendRequestStatus') === FriendRequestStatusEnum.requestSent
status === FriendRequestStatusEnum.requestSent ||
status === FriendRequestStatusEnum.requestExpired
);
},
hasReceivedFriendRequest() {
@ -585,6 +594,7 @@
updateTextInputState() {
switch (this.get('friendRequestStatus')) {
case FriendRequestStatusEnum.none:
case FriendRequestStatusEnum.requestExpired:
this.trigger('disable:input', false);
this.trigger('change:placeholder', 'friend-request');
return;
@ -613,11 +623,11 @@
this.updateTextInputState();
}
},
async respondToAllPendingFriendRequests(options) {
const { response, direction = null } = options;
async respondToAllFriendRequests(options) {
const { response, status, direction = null } = options;
// Ignore if no response supplied
if (!response) return;
const pending = await this.getPendingFriendRequests(direction);
const pending = await this.getFriendRequests(direction, status);
await Promise.all(
pending.map(async request => {
if (request.hasErrors()) return;
@ -630,6 +640,12 @@
})
);
},
async respondToAllPendingFriendRequests(options) {
return this.respondToAllFriendRequests({
...options,
status: 'pending',
});
},
async resetPendingSend() {
if (
this.get('friendRequestStatus') === FriendRequestStatusEnum.pendingSend
@ -651,9 +667,10 @@
if (this.unlockTimer) clearTimeout(this.unlockTimer);
if (this.hasReceivedFriendRequest()) {
this.setFriendRequestStatus(FriendRequestStatusEnum.friends);
await this.respondToAllPendingFriendRequests({
await this.respondToAllFriendRequests({
response: 'accepted',
direction: 'incoming',
status: ['pending', 'expired'],
});
window.libloki.api.sendFriendRequestAccepted(this.id);
}
@ -663,8 +680,9 @@
if (this.unlockTimer) clearTimeout(this.unlockTimer);
if (this.hasSentFriendRequest()) {
this.setFriendRequestStatus(FriendRequestStatusEnum.friends);
await this.respondToAllPendingFriendRequests({
await this.respondToAllFriendRequests({
response: 'accepted',
status: ['pending', 'expired'],
});
window.libloki.api.sendOnlineBroadcastMessage(this.id);
return true;
@ -690,7 +708,7 @@
response: 'expired',
direction: 'outgoing',
});
await this.setFriendRequestStatus(FriendRequestStatusEnum.none);
await this.setFriendRequestStatus(FriendRequestStatusEnum.requestExpired);
},
async onFriendRequestReceived() {
if (this.isFriendRequestStatusNone()) {

@ -14,6 +14,8 @@
requestReceived: 3,
// We did it!
friends: 4,
// Friend Request sent but timed out
requestExpired: 5,
});
window.friends = {

Loading…
Cancel
Save