Use message.groupV2.revision during first fetch
This commit is contained in:
parent
24c77b48bd
commit
9f0ea1cbf7
1 changed files with 49 additions and 3 deletions
52
ts/groups.ts
52
ts/groups.ts
|
@ -2946,24 +2946,63 @@ async function getGroupUpdates({
|
|||
group,
|
||||
serverPublicParamsBase64,
|
||||
newRevision,
|
||||
|
||||
// If we just linked and this is a group where we have been a member
|
||||
// from the beggining - applying all changes since the start is the best
|
||||
// case scenario.
|
||||
fallbackRevision: 0,
|
||||
});
|
||||
|
||||
return result;
|
||||
} catch (error) {
|
||||
const nextStep = isFirstFetch
|
||||
? `fetching logs since ${newRevision}`
|
||||
: 'fetching full state';
|
||||
|
||||
if (error.code === TEMPORAL_AUTH_REJECTED_CODE) {
|
||||
// We will fail over to the updateGroupViaState call below
|
||||
log.info(
|
||||
`getGroupUpdates/${logId}: Temporal credential failure, now fetching full group state`
|
||||
`getGroupUpdates/${logId}: Temporal credential failure, now ${nextStep}`
|
||||
);
|
||||
} else if (error.code === GROUP_ACCESS_DENIED_CODE) {
|
||||
// We will fail over to the updateGroupViaState call below
|
||||
log.info(
|
||||
`getGroupUpdates/${logId}: Log access denied, now fetching full group state`
|
||||
`getGroupUpdates/${logId}: Log access denied, now ${nextStep}`
|
||||
);
|
||||
} else {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// Fetch of logs starting from the revision 0 failed, so we probably were
|
||||
// just invited to the group. Try fetching logs from the same revision as in
|
||||
// this message.
|
||||
if (isFirstFetch) {
|
||||
try {
|
||||
const result = await updateGroupViaLogs({
|
||||
group,
|
||||
serverPublicParamsBase64,
|
||||
newRevision,
|
||||
fallbackRevision: newRevision,
|
||||
});
|
||||
|
||||
return result;
|
||||
} catch (error) {
|
||||
if (error.code === TEMPORAL_AUTH_REJECTED_CODE) {
|
||||
// We will fail over to the updateGroupViaState call below
|
||||
log.info(
|
||||
`getGroupUpdates/${logId}: Temporal credential failure, now fetching full state`
|
||||
);
|
||||
} else if (error.code === GROUP_ACCESS_DENIED_CODE) {
|
||||
// We will fail over to the updateGroupViaState call below
|
||||
log.info(
|
||||
`getGroupUpdates/${logId}: Log access denied, now fetching full state`
|
||||
);
|
||||
} else {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (window.GV2_ENABLE_STATE_PROCESSING) {
|
||||
|
@ -3081,9 +3120,11 @@ async function updateGroupViaSingleChange({
|
|||
async function updateGroupViaLogs({
|
||||
group,
|
||||
serverPublicParamsBase64,
|
||||
fallbackRevision,
|
||||
newRevision,
|
||||
}: {
|
||||
group: ConversationAttributesType;
|
||||
fallbackRevision: number;
|
||||
newRevision: number;
|
||||
serverPublicParamsBase64: string;
|
||||
}): Promise<UpdatesResultType> {
|
||||
|
@ -3096,6 +3137,7 @@ async function updateGroupViaLogs({
|
|||
const groupCredentials = getCredentialsForToday(data);
|
||||
const deltaOptions = {
|
||||
group,
|
||||
fallbackRevision,
|
||||
newRevision,
|
||||
serverPublicParamsBase64,
|
||||
authCredentialBase64: groupCredentials.today.credential,
|
||||
|
@ -3219,11 +3261,13 @@ function getGroupCredentials({
|
|||
async function getGroupDelta({
|
||||
group,
|
||||
newRevision,
|
||||
fallbackRevision,
|
||||
serverPublicParamsBase64,
|
||||
authCredentialBase64,
|
||||
}: {
|
||||
group: ConversationAttributesType;
|
||||
newRevision: number;
|
||||
fallbackRevision: number;
|
||||
serverPublicParamsBase64: string;
|
||||
authCredentialBase64: string;
|
||||
}): Promise<UpdatesResultType> {
|
||||
|
@ -3246,7 +3290,9 @@ async function getGroupDelta({
|
|||
});
|
||||
|
||||
const currentRevision = group.revision;
|
||||
let revisionToFetch = isNumber(currentRevision) ? currentRevision + 1 : 0;
|
||||
let revisionToFetch = isNumber(currentRevision)
|
||||
? currentRevision + 1
|
||||
: fallbackRevision;
|
||||
|
||||
let response;
|
||||
const changes: Array<Proto.IGroupChanges> = [];
|
||||
|
|
Loading…
Reference in a new issue