Add requestExpired state to Friend Request state machine

pull/248/head
sachaaaaa 6 years ago
parent cf8defc731
commit 62889bbdd4

@ -373,7 +373,7 @@
}; };
}, },
// This goes through all our message history and finds a friend request // 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, // Theoretically all our messages could be friend requests,
// thus we have to unfortunately go through each one :( // thus we have to unfortunately go through each one :(
const messages = await window.Signal.Data.getMessagesByConversation( const messages = await window.Signal.Data.getMessagesByConversation(
@ -383,13 +383,20 @@
MessageCollection: Whisper.MessageCollection, 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 // Get the pending friend requests that match the direction
// If no direction is supplied then return all pending friend requests // If no direction is supplied then return all pending friend requests
return messages.models.filter(m => { return messages.models.filter(m => {
if (m.get('friendStatus') !== 'pending') return false; if (status.indexOf(m.get('friendStatus')) < 0) return false;
return direction === null || m.get('direction') === direction; return direction === null || m.get('direction') === direction;
}); });
}, },
async getPendingFriendRequests(direction = null) {
return this.getFriendRequests(direction, ['pending']);
},
getPropsForListItem() { getPropsForListItem() {
const typingKeys = Object.keys(this.contactTypingTimers || {}); const typingKeys = Object.keys(this.contactTypingTimers || {});
@ -568,8 +575,10 @@
); );
}, },
hasSentFriendRequest() { hasSentFriendRequest() {
const status = this.get('friendRequestStatus');
return ( return (
this.get('friendRequestStatus') === FriendRequestStatusEnum.requestSent status === FriendRequestStatusEnum.requestSent ||
status === FriendRequestStatusEnum.requestExpired
); );
}, },
hasReceivedFriendRequest() { hasReceivedFriendRequest() {
@ -586,6 +595,7 @@
updateTextInputState() { updateTextInputState() {
switch (this.get('friendRequestStatus')) { switch (this.get('friendRequestStatus')) {
case FriendRequestStatusEnum.none: case FriendRequestStatusEnum.none:
case FriendRequestStatusEnum.requestExpired:
this.trigger('disable:input', false); this.trigger('disable:input', false);
this.trigger('change:placeholder', 'friend-request'); this.trigger('change:placeholder', 'friend-request');
return; return;
@ -614,11 +624,11 @@
this.updateTextInputState(); this.updateTextInputState();
} }
}, },
async respondToAllPendingFriendRequests(options) { async respondToAllFriendRequests(options) {
const { response, direction = null } = options; const { response, status, direction = null } = options;
// Ignore if no response supplied // Ignore if no response supplied
if (!response) return; if (!response) return;
const pending = await this.getPendingFriendRequests(direction); const pending = await this.getFriendRequests(direction, status);
await Promise.all( await Promise.all(
pending.map(async request => { pending.map(async request => {
if (request.hasErrors()) return; if (request.hasErrors()) return;
@ -631,6 +641,12 @@
}) })
); );
}, },
async respondToAllPendingFriendRequests(options) {
return this.respondToAllFriendRequests({
...options,
status: 'pending',
});
},
async resetPendingSend() { async resetPendingSend() {
if ( if (
this.get('friendRequestStatus') === FriendRequestStatusEnum.pendingSend this.get('friendRequestStatus') === FriendRequestStatusEnum.pendingSend
@ -655,6 +671,7 @@
await this.respondToAllPendingFriendRequests({ await this.respondToAllPendingFriendRequests({
response: 'accepted', response: 'accepted',
direction: 'incoming', direction: 'incoming',
status: ['pending', 'expired'],
}); });
window.libloki.api.sendFriendRequestAccepted(this.id); window.libloki.api.sendFriendRequestAccepted(this.id);
} }
@ -664,8 +681,9 @@
if (this.unlockTimer) clearTimeout(this.unlockTimer); if (this.unlockTimer) clearTimeout(this.unlockTimer);
if (this.hasSentFriendRequest()) { if (this.hasSentFriendRequest()) {
this.setFriendRequestStatus(FriendRequestStatusEnum.friends); this.setFriendRequestStatus(FriendRequestStatusEnum.friends);
await this.respondToAllPendingFriendRequests({ await this.respondToAllFriendRequests({
response: 'accepted', response: 'accepted',
status: ['pending', 'expired'],
}); });
window.libloki.api.sendOnlineBroadcastMessage(this.id); window.libloki.api.sendOnlineBroadcastMessage(this.id);
return true; return true;
@ -691,7 +709,7 @@
response: 'expired', response: 'expired',
direction: 'outgoing', direction: 'outgoing',
}); });
await this.setFriendRequestStatus(FriendRequestStatusEnum.none); await this.setFriendRequestStatus(FriendRequestStatusEnum.requestExpired);
}, },
async onFriendRequestReceived() { async onFriendRequestReceived() {
if (this.isFriendRequestStatusNone()) { if (this.isFriendRequestStatusNone()) {

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

Loading…
Cancel
Save