Introduce versioning clock to timer system

This commit is contained in:
Fedor Indutny 2024-08-21 09:03:28 -07:00 committed by GitHub
parent bb1d957e49
commit 2fb50df0af
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
34 changed files with 703 additions and 28 deletions

View file

@ -31,6 +31,7 @@ type MessageWithAvatar<Message extends OptionalFields> = Omit<
> & {
avatar?: ContactAvatarType;
expireTimer?: DurationInSeconds;
expireTimerVersion: number | null;
number?: string | undefined;
};
@ -207,6 +208,7 @@ function prepareContact(
const result = {
...proto,
expireTimer,
expireTimerVersion: proto.expireTimerVersion ?? null,
aci,
avatar,
number: dropNull(proto.number),

View file

@ -2281,6 +2281,7 @@ export default class MessageReceiver
preview,
canReplyToStory: Boolean(msg.allowsReplies),
expireTimer: DurationInSeconds.DAY,
expireTimerVersion: 0,
flags: 0,
groupV2,
isStory: true,

View file

@ -188,6 +188,7 @@ export type MessageOptionsType = {
bodyRanges?: ReadonlyArray<RawBodyRange>;
contact?: ReadonlyArray<EmbeddedContactWithUploadedAvatar>;
expireTimer?: DurationInSeconds;
expireTimerVersion: number | undefined;
flags?: number;
group?: {
id: string;
@ -238,6 +239,8 @@ class Message {
expireTimer?: DurationInSeconds;
expireTimerVersion?: number;
flags?: number;
group?: {
@ -277,6 +280,7 @@ class Message {
this.bodyRanges = options.bodyRanges;
this.contact = options.contact;
this.expireTimer = options.expireTimer;
this.expireTimerVersion = options.expireTimerVersion;
this.flags = options.flags;
this.group = options.group;
this.groupV2 = options.groupV2;
@ -534,6 +538,9 @@ class Message {
if (this.expireTimer) {
proto.expireTimer = this.expireTimer;
}
if (this.expireTimerVersion) {
proto.expireTimerVersion = this.expireTimerVersion;
}
if (this.profileKey) {
proto.profileKey = this.profileKey;
}
@ -930,6 +937,7 @@ export default class MessageSender {
contact,
deletedForEveryoneTimestamp,
expireTimer,
expireTimerVersion: undefined,
flags,
groupCallUpdate,
groupV2,
@ -1163,6 +1171,7 @@ export default class MessageSender {
contentHint,
deletedForEveryoneTimestamp,
expireTimer,
expireTimerVersion,
groupId,
serviceId,
messageText,
@ -1185,6 +1194,7 @@ export default class MessageSender {
contentHint: number;
deletedForEveryoneTimestamp: number | undefined;
expireTimer: DurationInSeconds | undefined;
expireTimerVersion: number | undefined;
groupId: string | undefined;
serviceId: ServiceIdString;
messageText: string | undefined;
@ -1209,6 +1219,7 @@ export default class MessageSender {
contact,
deletedForEveryoneTimestamp,
expireTimer,
expireTimerVersion,
preview,
profileKey,
quote,

View file

@ -204,6 +204,7 @@ export type ProcessedDataMessage = {
groupV2?: ProcessedGroupV2Context;
flags: number;
expireTimer: DurationInSeconds;
expireTimerVersion: number;
profileKey?: string;
timestamp: number;
payment?: AnyPaymentEvent;

View file

@ -740,9 +740,11 @@ export type WebAPIConnectType = {
export type CapabilitiesType = {
deleteSync: boolean;
versionedExpirationTimer: boolean;
};
export type CapabilitiesUploadType = {
deleteSync: true;
versionedExpirationTimer: true;
};
type StickerPackManifestType = Uint8Array;
@ -2612,6 +2614,7 @@ export function initialize({
const capabilities: CapabilitiesUploadType = {
deleteSync: true,
versionedExpirationTimer: true,
};
const jsonData = {
@ -2666,6 +2669,7 @@ export function initialize({
}: LinkDeviceOptionsType) {
const capabilities: CapabilitiesUploadType = {
deleteSync: true,
versionedExpirationTimer: true,
};
const jsonData = {

View file

@ -321,6 +321,7 @@ export function processDataMessage(
groupV2: processGroupV2Context(message.groupV2),
flags: message.flags ?? 0,
expireTimer: DurationInSeconds.fromSeconds(message.expireTimer ?? 0),
expireTimerVersion: message.expireTimerVersion ?? 0,
profileKey:
message.profileKey && message.profileKey.length > 0
? Bytes.toBase64(message.profileKey)