@@ -22,7 +22,7 @@ import {
22
22
editMessage ,
23
23
updateLastReadMessage ,
24
24
fetchMessages ,
25
- lookForNewMessages ,
25
+ pollNewMessages ,
26
26
getMessageContext ,
27
27
postNewMessage ,
28
28
postRichObjectToConversation ,
@@ -125,11 +125,11 @@ const state = {
125
125
*/
126
126
cancelGetMessageContext : null ,
127
127
/**
128
- * Stores the cancel function returned by `cancelableLookForNewMessages `,
128
+ * Stores the cancel function returned by `cancelablePollNewMessages `,
129
129
* which allows to cancel the previous long polling request for new
130
130
* messages before making another one.
131
131
*/
132
- cancelLookForNewMessages : { } ,
132
+ cancelPollNewMessages : { } ,
133
133
/**
134
134
* Array of temporary message id to cancel function for the "postNewMessage" action
135
135
*/
@@ -140,7 +140,7 @@ const getters = {
140
140
/**
141
141
* Returns whether more messages can be loaded, which means that the current
142
142
* message list doesn't yet contain all future messages.
143
- * If false, the next call to "lookForNewMessages " will be blocking/long-polling.
143
+ * If false, the next call to "pollNewMessages " will be blocking/long-polling.
144
144
*
145
145
* @param {object } state the state object.
146
146
* @param {object } getters the getters object.
@@ -264,11 +264,11 @@ const mutations = {
264
264
state . cancelGetMessageContext = cancelFunction
265
265
} ,
266
266
267
- setCancelLookForNewMessages ( state , { requestId, cancelFunction } ) {
267
+ setCancelPollNewMessages ( state , { requestId, cancelFunction } ) {
268
268
if ( cancelFunction ) {
269
- Vue . set ( state . cancelLookForNewMessages , requestId , cancelFunction )
269
+ Vue . set ( state . cancelPollNewMessages , requestId , cancelFunction )
270
270
} else {
271
- Vue . delete ( state . cancelLookForNewMessages , requestId )
271
+ Vue . delete ( state . cancelPollNewMessages , requestId )
272
272
}
273
273
} ,
274
274
@@ -856,8 +856,16 @@ const actions = {
856
856
* @param {string } data.lastKnownMessageId last known message id;
857
857
* @param {number } data.minimumVisible Minimum number of chat messages we want to load
858
858
* @param {boolean } data.includeLastKnown whether to include the last known message in the response;
859
+ * @param {number } [data.lookIntoFuture=0] direction of message fetch
859
860
*/
860
- async fetchMessages ( context , { token, lastKnownMessageId, includeLastKnown, requestOptions, minimumVisible } ) {
861
+ async fetchMessages ( context , {
862
+ token,
863
+ lastKnownMessageId,
864
+ includeLastKnown,
865
+ requestOptions,
866
+ minimumVisible,
867
+ lookIntoFuture = CHAT . FETCH_OLD ,
868
+ } ) {
861
869
minimumVisible = ( typeof minimumVisible === 'undefined' ) ? CHAT . MINIMUM_VISIBLE : minimumVisible
862
870
863
871
context . dispatch ( 'cancelFetchMessages' )
@@ -871,6 +879,7 @@ const actions = {
871
879
token,
872
880
lastKnownMessageId,
873
881
includeLastKnown,
882
+ lookIntoFuture,
874
883
limit : CHAT . FETCH_LIMIT ,
875
884
} , requestOptions )
876
885
@@ -904,10 +913,12 @@ const actions = {
904
913
} )
905
914
906
915
if ( response . headers [ 'x-chat-last-given' ] ) {
907
- context . dispatch ( 'setFirstKnownMessageId' , {
908
- token,
909
- id : parseInt ( response . headers [ 'x-chat-last-given' ] , 10 ) ,
910
- } )
916
+ const id = parseInt ( response . headers [ 'x-chat-last-given' ] , 10 )
917
+ if ( lookIntoFuture === CHAT . FETCH_NEW ) {
918
+ context . dispatch ( 'setLastKnownMessageId' , { token, id } )
919
+ } else {
920
+ context . dispatch ( 'setFirstKnownMessageId' , { token, id } )
921
+ }
911
922
}
912
923
913
924
// For guests we also need to set the last known message id
@@ -925,12 +936,16 @@ const actions = {
925
936
926
937
if ( minimumVisible > 0 ) {
927
938
debugTimer . tick ( `${ token } | fetch history` , 'first chunk' )
939
+ const lastKnownMessageId = lookIntoFuture === CHAT . FETCH_NEW
940
+ ? context . getters . getLastKnownMessageId ( token )
941
+ : context . getters . getFirstKnownMessageId ( token )
928
942
// There are not yet enough visible messages loaded, so fetch another chunk.
929
943
// This can happen when a lot of reactions or poll votings happen
930
944
return await context . dispatch ( 'fetchMessages' , {
931
945
token,
932
- lastKnownMessageId : context . getters . getFirstKnownMessageId ( token ) ,
946
+ lastKnownMessageId,
933
947
includeLastKnown,
948
+ lookIntoFuture,
934
949
minimumVisible,
935
950
} )
936
951
}
@@ -1022,6 +1037,7 @@ const actions = {
1022
1037
token,
1023
1038
lastKnownMessageId : context . getters . getFirstKnownMessageId ( token ) ,
1024
1039
includeLastKnown : false ,
1040
+ lookIntoFuture : CHAT . FETCH_OLD ,
1025
1041
minimumVisible : minimumVisible * 2 ,
1026
1042
} )
1027
1043
}
@@ -1072,8 +1088,8 @@ const actions = {
1072
1088
* @param {object } data.requestOptions request options;
1073
1089
* @param {number } data.lastKnownMessageId The id of the last message in the store.
1074
1090
*/
1075
- async lookForNewMessages ( context , { token, lastKnownMessageId, requestId, requestOptions } ) {
1076
- context . dispatch ( 'cancelLookForNewMessages ' , { requestId } )
1091
+ async pollNewMessages ( context , { token, lastKnownMessageId, requestId, requestOptions } ) {
1092
+ context . dispatch ( 'cancelPollNewMessages ' , { requestId } )
1077
1093
1078
1094
if ( ! lastKnownMessageId ) {
1079
1095
// if param is null | undefined, it won't be included in the request query
@@ -1082,17 +1098,17 @@ const actions = {
1082
1098
}
1083
1099
1084
1100
// Get a new cancelable request function and cancel function pair
1085
- const { request, cancel } = CancelableRequest ( lookForNewMessages )
1101
+ const { request, cancel } = CancelableRequest ( pollNewMessages )
1086
1102
1087
1103
// Assign the new cancel function to our data value
1088
- context . commit ( 'setCancelLookForNewMessages ' , { cancelFunction : cancel , requestId } )
1104
+ context . commit ( 'setCancelPollNewMessages ' , { cancelFunction : cancel , requestId } )
1089
1105
1090
1106
const response = await request ( {
1091
1107
token,
1092
1108
lastKnownMessageId,
1093
1109
limit : CHAT . FETCH_LIMIT ,
1094
1110
} , requestOptions )
1095
- context . commit ( 'setCancelLookForNewMessages ' , { requestId } )
1111
+ context . commit ( 'setCancelPollNewMessages ' , { requestId } )
1096
1112
1097
1113
if ( 'x-chat-last-common-read' in response . headers ) {
1098
1114
const lastCommonReadMessage = parseInt ( response . headers [ 'x-chat-last-common-read' ] , 10 )
@@ -1195,16 +1211,16 @@ const actions = {
1195
1211
} ,
1196
1212
1197
1213
/**
1198
- * Cancels a previously running "lookForNewMessages " action if applicable.
1214
+ * Cancels a previously running "pollNewMessages " action if applicable.
1199
1215
*
1200
1216
* @param {object } context default store context;
1201
1217
* @param {string } requestId request id
1202
1218
* @return {boolean } true if a request got cancelled, false otherwise
1203
1219
*/
1204
- cancelLookForNewMessages ( context , { requestId } ) {
1205
- if ( context . state . cancelLookForNewMessages [ requestId ] ) {
1206
- context . state . cancelLookForNewMessages [ requestId ] ( 'canceled' )
1207
- context . commit ( 'setCancelLookForNewMessages ' , { requestId } )
1220
+ cancelPollNewMessages ( context , { requestId } ) {
1221
+ if ( context . state . cancelPollNewMessages [ requestId ] ) {
1222
+ context . state . cancelPollNewMessages [ requestId ] ( 'canceled' )
1223
+ context . commit ( 'setCancelPollNewMessages ' , { requestId } )
1208
1224
return true
1209
1225
}
1210
1226
return false
0 commit comments