Files
discord-decomp/lib/ChannelMessages.tsx
T
2026-11-01 12:12:55 +02:00

1142 lines
34 KiB
TypeScript

// Metro module 4860 (f4861).
import { MAX_LOADED_MESSAGES, MAX_MESSAGES_PER_CHANNEL, MAX_MESSAGE_CACHE_SIZE, MessageStates, TRUNCATED_MESSAGE_VIEW_SIZE } from "../Constants";
import Logger from "../modules/debug/Logger";
import { createMessageRecord } from "../modules/messages/MessageRecordUtils";
import Module12 from "../_bundle/Module12";
import { JumpType } from "../flow/Client";
import SnowflakeUtils from "../utils/SnowflakeUtils";
import EnsureReceivedMessagesAddedInOrderExperiment from "./EnsureReceivedMessagesAddedInOrderExperiment";
import { insert } from "../utils/SortedArrayUtils";
import * as _IOSPushNotificationRawPayloadFixExperiment from "../modules/notifications/IOSPushNotificationRawPayloadFixExperiment";
import { requireSortedDescending } from "../modules/app_database/modules/messages/requireSortedDescending";
import { HermesBuiltin } from "../_hermes/prelude";
let c2993_9;
const mergeMessage = function mergeMessage(a0, a1) {
let r15 = a0.get(a1.id);
if (r15 != null) {
const r0 = r15.editedTimestamp != null ? +r15.editedTimestamp : 0;
const r1 = a1.edited_timestamp != null ? +new Date(a1.edited_timestamp) : 0;
let r23 = r1 > r0;
if (!(r0 < r1)) {
const length2 = r15.embeds.length;
let r27 = a1.embeds?.length;
if (r27 == null) {
r27 = 0;
}
r23 = length2 < r27;
}
if (!r23) {
r23 = r15.content !== a1.content;
}
if (!(!r23 && !a0.cached)) {
r15 = createMessageRecord(a1);
}
} else {
r15 = createMessageRecord(a1);
}
return r15;
};
c2993_9 = new Logger("ChannelMessages");
class MessageCache {
_messages = [];
_map = {};
_wasAtEdge = false;
constructor(a0) {
this._isCacheBefore = a0;
}
clone() {
const _isCacheBefore = this._isCacheBefore;
const r12 = {
__proto__: MessageCache.prototype
};
r12._messages = [];
r12._map = {};
r12._wasAtEdge = false;
r12._isCacheBefore = _isCacheBefore;
r12._map = {
...this._map
};
r12._messages = [...this._messages];
r12._wasAtEdge = this._wasAtEdge;
return r12;
}
get wasAtEdge() {
return this._wasAtEdge;
}
set wasAtEdge(a0) {
this._wasAtEdge = a0;
}
get length() {
return this._messages.length;
}
clear() {
this._map = {};
this._messages = [];
this._wasAtEdge = false;
}
remove(a0) {
let c14456_0 = a0;
this._messages = Module12.filter(this._messages, (a0) => a0.id !== c14456_0);
delete this._map[a0];
}
removeMany(a0) {
let c14457_0 = a0;
Module12.each(a0, (a0) => {
delete this._map[a0];
});
this._messages = this._messages.filter((_message) => c14457_0.indexOf(_message.id) === -1);
}
replace(a0, a1) {
const r5 = this._map[a0];
if (r5 != null) {
delete this._map[a0];
this._map[a1.id] = a1;
this._messages[this._messages.indexOf(r5)] = a1;
}
}
update(a0, a1) {
const r5 = this._map[a0];
if (r5 != null) {
const r8 = a1(r5);
this._map[r5.id] = r8;
this._messages[this._messages.indexOf(r5)] = r8;
}
}
has(a0) {
return this._map[a0] != null;
}
get(a0) {
return this._map[a0];
}
forEach(a0, a1) {
this._messages.forEach(a0, a1);
}
cache(a0, _wasAtEdge = false) {
let _messages2;
if (this.length === 0) {
this._wasAtEdge = _wasAtEdge;
}
if (this._messages.length + a0.length > MAX_MESSAGE_CACHE_SIZE) {
this._wasAtEdge = false;
if (a0.length > MAX_MESSAGE_CACHE_SIZE) {
const _isCacheBefore3 = this._isCacheBefore;
const slice = a0.slice;
if (_isCacheBefore3) {
this._messages = slice.call(a0, a0.length - MAX_MESSAGE_CACHE_SIZE);
} else {
this._messages = slice.call(a0, 0, MAX_MESSAGE_CACHE_SIZE);
}
this._map = {};
this._messages.forEach((_message) => {
this._map[_message.id] = _message;
return _message;
});
return void 0;
}
const r13 = MAX_MESSAGE_CACHE_SIZE - a0.length;
const _isCacheBefore = this._isCacheBefore;
const _messages = this._messages;
if (_isCacheBefore) {
this._messages = _messages.slice(Math.max(this._messages.length - r13, 0));
} else {
this._messages = _messages.slice(0, r13);
}
}
const _isCacheBefore2 = this._isCacheBefore;
const r34 = [];
if (_isCacheBefore2) {
HermesBuiltin.arraySpread(r34, a0, HermesBuiltin.arraySpread(r34, this._messages, 0));
_messages2 = r34;
} else {
HermesBuiltin.arraySpread(r34, this._messages, HermesBuiltin.arraySpread(r34, a0, 0));
_messages2 = r34;
}
this._messages = _messages2;
this._map = {};
this._messages.forEach((_message) => {
this._map[_message.id] = _message;
return _message;
});
}
extractAll() {
const _messages = this._messages;
this._messages = [];
this._map = {};
return _messages;
}
extract(a0) {
let r12;
const _isCacheBefore = this._isCacheBefore;
const r6 = Math;
if (_isCacheBefore) {
const r20 = r6.max(this.length - a0, 0);
r12 = this._messages.slice(r20, this.length);
this._messages.splice(r20);
} else {
r12 = this._messages.slice(0, r6.min(a0, this.length));
this._messages.splice(0, a0);
}
r12.forEach((item) => delete this._map[item.id]);
return r12;
}
}
class ChannelMessages {
static _channelMessages = {};
constructor(a0) {
const r12 = {
__proto__: new.target.prototype,
ready: false,
cached: false,
jumpType: JumpType.ANIMATED,
jumpTargetId: null,
jumpTargetOffset: 0,
jumpSequenceId: 1,
jumped: false,
jumpedToPresent: false,
jumpFlash: true,
jumpReturnTargetId: null,
onJumpComplete: null,
focusTargetId: null,
focusSequenceId: 1,
initialScrollSequenceId: 0,
suppressRowAnimationSequenceId: 0,
hasMoreBefore: true,
hasMoreAfter: false,
loadingMore: false,
revealedMessageId: null,
hasFetched: false,
error: false,
_array: null,
_before: null,
_after: null,
_map: null
};
r12._array = [];
const _before = {
__proto__: MessageCache.prototype
};
_before._messages = [];
_before._map = {};
_before._wasAtEdge = false;
_before._isCacheBefore = true;
r12._before = _before;
const _after = {
__proto__: MessageCache.prototype
};
_after._messages = [];
_after._map = {};
_after._wasAtEdge = false;
_after._isCacheBefore = false;
r12._after = _after;
r12._map = {};
r12.channelId = a0;
return r12;
}
static forEach(a0) {
Module12.forEach(ChannelMessages._channelMessages, a0);
}
static get(a0) {
return ChannelMessages._channelMessages[a0];
}
static hasPresent(a0) {
const r5 = ChannelMessages.get(a0);
return r5 != null && r5.hasPresent();
}
static getOrCreate(a0) {
let r10 = ChannelMessages._channelMessages[a0];
if (r10 == null) {
const r18 = {
__proto__: ChannelMessages.prototype,
ready: false,
cached: false,
jumpType: JumpType.ANIMATED,
jumpTargetId: null,
jumpTargetOffset: 0,
jumpSequenceId: 1,
jumped: false,
jumpedToPresent: false,
jumpFlash: true,
jumpReturnTargetId: null,
onJumpComplete: null,
focusTargetId: null,
focusSequenceId: 1,
initialScrollSequenceId: 0,
suppressRowAnimationSequenceId: 0,
hasMoreBefore: true,
hasMoreAfter: false,
loadingMore: false,
revealedMessageId: null,
hasFetched: false,
error: false,
_array: null,
_before: null,
_after: null,
_map: null
};
r18._array = [];
const _before = {
__proto__: MessageCache.prototype
};
_before._messages = [];
_before._map = {};
_before._wasAtEdge = false;
_before._isCacheBefore = true;
r18._before = _before;
const _after = {
__proto__: MessageCache.prototype
};
_after._messages = [];
_after._map = {};
_after._wasAtEdge = false;
_after._isCacheBefore = false;
r18._after = _after;
r18._map = {};
r18.channelId = a0;
ChannelMessages._channelMessages[a0] = r18;
r10 = r18;
}
return r10;
}
static clear(a0) {
delete ChannelMessages._channelMessages[a0];
}
static clearCache(a0) {
const r3 = ChannelMessages._channelMessages[a0];
if (r3 != null) {
r3._before.clear();
r3._after.clear();
this.commit(r3);
}
}
static commit(a0) {
ChannelMessages._channelMessages[a0.channelId] = a0;
}
mutate(a0, r5 = false) {
const channelId = this.channelId;
const r21 = {
__proto__: ChannelMessages.prototype,
ready: false,
cached: false,
jumpType: JumpType.ANIMATED,
jumpTargetId: null,
jumpTargetOffset: 0,
jumpSequenceId: 1,
jumped: false,
jumpedToPresent: false,
jumpFlash: true,
jumpReturnTargetId: null,
onJumpComplete: null,
focusTargetId: null,
focusSequenceId: 1,
initialScrollSequenceId: 0,
suppressRowAnimationSequenceId: 0,
hasMoreBefore: true,
hasMoreAfter: false,
loadingMore: false,
revealedMessageId: null,
hasFetched: false,
error: false,
_array: null,
_before: null,
_after: null,
_map: null
};
r21._array = [];
const _before2 = {
__proto__: MessageCache.prototype
};
_before2._messages = [];
_before2._map = {};
_before2._wasAtEdge = false;
_before2._isCacheBefore = true;
r21._before = _before2;
const _after2 = {
__proto__: MessageCache.prototype
};
_after2._messages = [];
_after2._map = {};
_after2._wasAtEdge = false;
_after2._isCacheBefore = false;
r21._after = _after2;
r21._map = {};
r21.channelId = channelId;
const _array2 = this._array;
r21._array = r5 ? [..._array2] : _array2;
const _map = this._map;
r21._map = r5 ? {
..._map
} : _map;
const _after = this._after;
r21._after = r5 ? _after.clone() : _after;
const _before = this._before;
r21._before = r5 ? _before.clone() : _before;
if (a0 instanceof Function) {
r21.ready = this.ready;
r21.jumpType = this.jumpType;
r21.jumpTargetId = this.jumpTargetId;
r21.jumpTargetOffset = this.jumpTargetOffset;
r21.jumpSequenceId = this.jumpSequenceId;
r21.jumped = this.jumped;
r21.jumpedToPresent = this.jumpedToPresent;
r21.jumpFlash = this.jumpFlash;
r21.jumpReturnTargetId = this.jumpReturnTargetId;
r21.onJumpComplete = this.onJumpComplete;
r21.focusTargetId = this.focusTargetId;
r21.focusSequenceId = this.focusSequenceId;
r21.hasMoreBefore = this.hasMoreBefore;
r21.hasMoreAfter = this.hasMoreAfter;
r21.loadingMore = this.loadingMore;
r21.revealedMessageId = this.revealedMessageId;
r21.cached = this.cached;
r21.hasFetched = this.hasFetched;
r21.error = this.error;
r21.initialScrollSequenceId = this.initialScrollSequenceId;
r21.suppressRowAnimationSequenceId = this.suppressRowAnimationSequenceId;
a0(r21);
} else if (typeof a0 === "object") {
r21.ready = a0.ready !== void 0 ? a0.ready === true : this.ready;
r21.jumpType = a0.jumpType !== void 0 ? a0.jumpType : this.jumpType;
r21.jumpTargetId = a0.jumpTargetId !== void 0 ? a0.jumpTargetId : this.jumpTargetId;
r21.jumpTargetOffset = a0.jumpTargetOffset !== void 0 ? a0.jumpTargetOffset : this.jumpTargetOffset;
r21.jumpSequenceId = a0.jumpSequenceId !== void 0 ? a0.jumpSequenceId : this.jumpSequenceId;
r21.jumped = a0.jumped !== void 0 ? a0.jumped === true : this.jumped;
r21.jumpedToPresent = a0.jumpedToPresent !== void 0 ? a0.jumpedToPresent === true : this.jumpedToPresent;
r21.jumpFlash = a0.jumpFlash !== void 0 ? a0.jumpFlash === true : this.jumpFlash;
r21.jumpReturnTargetId = a0.jumpReturnTargetId !== void 0 ? a0.jumpReturnTargetId : this.jumpReturnTargetId;
r21.focusTargetId = a0.focusTargetId !== void 0 ? a0.focusTargetId : this.focusTargetId;
r21.focusSequenceId = a0.focusSequenceId !== void 0 ? a0.focusSequenceId : this.focusSequenceId;
r21.hasMoreBefore = a0.hasMoreBefore !== void 0 ? a0.hasMoreBefore === true : this.hasMoreBefore;
r21.hasMoreAfter = a0.hasMoreAfter !== void 0 ? a0.hasMoreAfter === true : this.hasMoreAfter;
r21.loadingMore = a0.loadingMore !== void 0 ? a0.loadingMore : this.loadingMore;
r21.revealedMessageId = a0.revealedMessageId !== void 0 ? a0.revealedMessageId : this.revealedMessageId;
r21.cached = a0.cached !== void 0 ? a0.cached : this.cached;
r21.hasFetched = a0.hasFetched !== void 0 ? a0.hasFetched : this.hasFetched;
r21.error = a0.error !== void 0 ? a0.error : this.error;
r21.onJumpComplete = a0.onJumpComplete !== void 0 ? a0.onJumpComplete : this.onJumpComplete;
r21.initialScrollSequenceId = a0.initialScrollSequenceId !== void 0 ? a0.initialScrollSequenceId : this.initialScrollSequenceId;
r21.suppressRowAnimationSequenceId = a0.suppressRowAnimationSequenceId !== void 0 ? a0.suppressRowAnimationSequenceId : this.suppressRowAnimationSequenceId;
}
return r21;
}
get length() {
return this._array.length;
}
toArray() {
return [...this._array];
}
forEach(a0, a1, r6 = false) {
let r19;
const _array2 = this._array;
if (r6) {
let r0 = _array2.length - 1;
if (0 <= r0 && a0.call(a1, _array2[r0], r0) !== false) {
do {
const r1 = r0 - 1;
if (!(0 <= r1)) {
break;
}
r19 = a0.call(a1, _array2[r1], r1);
r0 = r1;
} while (r19 !== false);
}
} else {
_array2.forEach(a0, a1);
}
}
reduce(a0, a1) {
return this._array.reduce(a0, a1);
}
some(a0, a1) {
return this._array.some(a0, a1);
}
filter(a0, a1) {
return this._array.filter(a0, a1);
}
forAll(a0, a1) {
this._before.forEach(a0, a1);
this._array.forEach(a0, a1);
this._after.forEach(a0, a1);
}
findOldest(a0) {
let r13 = Module12.find(this._before._messages, a0);
if (r13 == null) {
r13 = Module12.find(this._array, a0);
}
if (r13 == null) {
r13 = Module12.find(this._after._messages, a0);
}
return r13;
}
findNewest(a0) {
let r13 = Module12.findLast(this._after._messages, a0);
if (r13 == null) {
r13 = Module12.findLast(this._array, a0);
}
if (r13 == null) {
r13 = Module12.findLast(this._before._messages, a0);
}
return r13;
}
map(a0, a1) {
return this._array.map(a0, a1);
}
first() {
return this._array[0];
}
last() {
return this._array[this._array.length - 1];
}
get(a0, r2 = false) {
const r4 = this._map[a0];
let r7 = r4;
if (r4 == null) {
r7 = r4;
if (r2) {
let r10 = this._before.get(a0);
if (r10 == null) {
r10 = this._after.get(a0);
}
r7 = r10;
}
}
return r7;
}
getByIndex(a0) {
return this._array[a0];
}
getAfter(a0) {
const r6 = this.get(a0);
if (r6 == null) {
return null;
}
const r9 = this._array.indexOf(r6);
return r9 !== -1 ? r9 !== this.length - 1 ? this._array[r9 + 1] : null : null;
}
getManyAfter(a0, a1, a2) {
let r16;
const r7 = this.get(a0);
if (r7 == null) {
return null;
}
const r15 = this._array.indexOf(r7);
if (r15 === -1) {
return null;
}
L12: {
r16 = [];
const r11 = r15 + 1;
if (r11 < this.length) {
const r4 = a1 === -1;
let r18 = r11;
if (!r4) {
const length2 = r16.length;
r18 = r11;
if (!(length2 < a1)) {
break L12;
}
}
while (true) {
let r20 = a2 == null;
const r21 = r18;
if (!r20) {
r20 = a2(this._array[r21]);
}
if (r20) {
r16.push(this._array[r21]);
}
const r27 = r21 + 1;
if (!(r27 < this.length)) {
break;
}
r18 = r27;
if (!r4) {
const length3 = r16.length;
r18 = r27;
if (!(length3 < a1)) {
break;
}
}
}
}
}
return r16;
}
getManyBefore(a0, a1, a2) {
let r16;
const r9 = this.get(a0);
if (r9 == null) {
return null;
}
const r15 = this._array.indexOf(r9);
if (r15 === -1) {
return null;
}
L12: {
r16 = [];
const r1 = r15 - 1;
if (0 <= r1) {
const r6 = a1 === -1;
let r18 = r1;
if (!r6) {
const length2 = r16.length;
r18 = r1;
if (!(length2 < a1)) {
break L12;
}
}
while (true) {
let r20 = a2 == null;
const r21 = r18;
if (!r20) {
r20 = a2(this._array[r21]);
}
if (r20) {
r16.unshift(this._array[r21]);
}
const r27 = r21 - 1;
if (!(0 <= r27)) {
break;
}
r18 = r27;
if (!r6) {
const length3 = r16.length;
r18 = r27;
if (!(length3 < a1)) {
break;
}
}
}
}
}
return r16;
}
hasAnyAfter(a0, a1, r8 = -1) {
const r6 = this.get(a0);
if (r6 == null) {
return false;
}
const r13 = this._array.indexOf(r6);
if (r13 === -1) {
return false;
}
L11: {
const r10 = r13 + 1;
if (r10 < this.length) {
const r15 = r8 === -1;
let r16 = r10;
if (!r15) {
const r17 = r13 + r8;
r16 = r10;
if (!(r16 <= r17)) {
break L11;
}
}
while (true) {
const r20 = a1(this._array[r16]);
const r21 = r16;
if (r20) {
return true;
}
const r22 = r21 + 1;
if (!(r22 < this.length)) {
break;
}
r16 = r22;
if (!r15) {
const r24 = r13 + r8;
r16 = r22;
if (!(r16 <= r24)) {
break;
}
}
}
}
}
return false;
}
has(a0, r2 = true) {
let r9 = this._map[a0] != null;
if (!r9) {
if (r2) {
r2 = this._before.has(a0) || this._after.has(a0);
}
r9 = r2;
}
return r9;
}
indexOf(c14460_0) {
let c14460_1 = -1;
this._array.find((item, index) => {
let r0 = item.id === c14460_0;
if (r0) {
c14460_1 = index;
r0 = true;
}
return r0;
});
return c14460_1;
}
hasPresent() {
return this._after.length > 0 && this._after.wasAtEdge || !this.hasMoreAfter;
}
hasBeforeCached(a0) {
if (this.length > 0 && this._before.length > 0) {
const r8 = this.first();
return r8 != null && r8.id === a0;
}
return false;
}
hasAfterCached(a0) {
if (this.length > 0 && this._after.length > 0) {
const r8 = this.last();
return r8 != null && r8.id === a0;
}
return false;
}
update(a0, a1) {
let c14461_3;
let c14461_0 = a0;
const r6 = this._map[a0];
let c14461_2 = r6;
if (r6 == null) {
return this._before.has(a0) ? this.mutate((a0) => a0._before.update(c14461_0, a1), true) : this._after.has(a0) ? this.mutate((a0) => a0._after.update(c14461_0, a1), true) : this;
}
c14461_3 = a1(r6);
return this.mutate((a0) => {
const _map = a0._map;
const id = c14461_2.id;
_map[id] = c14461_3;
a0._array[a0._array.indexOf(c14461_2)] = c14461_3;
}, true);
}
replace(a0, c14462_1) {
let c14462_0 = a0;
const r8 = this._map[a0];
let c14462_2 = r8;
return r8 == null ? this._before.has(a0) ? this.mutate((a0) => a0._before.replace(c14462_0, c14462_1), true) : this._after.has(a0) ? this.mutate((a0) => a0._after.replace(c14462_0, c14462_1), true) : this : this.mutate((a0) => {
delete a0._map[c14462_0];
const _map = a0._map;
_map[c14462_1.id] = c14462_1;
a0._array[a0._array.indexOf(c14462_2)] = c14462_1;
}, true);
}
remove(c14463_0) {
return this.mutate((a0) => {
const _map = a0._map;
delete _map[c14463_0];
a0._array = a0._array.filter((item) => item.id !== c14463_0);
a0._before.remove(c14463_0);
a0._after.remove(c14463_0);
}, true);
}
removeMany(a0) {
let c14464_0 = a0;
return a0.some((item) => this.has(item)) ? this.mutate((a0) => {
let c25299_0 = a0;
Module12.each(c14464_0, (a0) => {
delete c25299_0._map[a0];
});
a0._array = a0._array.filter((item) => c14464_0.indexOf(item.id) === -1);
a0._before.removeMany(c14464_0);
a0._after.removeMany(c14464_0);
}, true) : this;
}
merge(c14465_0, r5 = false) {
let c14465_1 = r5;
let r6 = arguments[2];
if (r6 === void 0) {
r6 = false;
}
let c14465_2 = r6;
return this.mutate((a0) => {
a0._merge(c14465_0, c14465_1, c14465_2);
}, true);
}
_merge(a0, r4 = false, r6 = false) {
let _array2;
const r14 = a0.filter((item) => {
const r6 = this._map[item.id];
this._map[item.id] = item;
let r10 = r6 == null;
if (!r10) {
this._array[this._array.indexOf(r6)] = item;
r10 = false;
}
return r10;
});
if (r6) {
(r4 ? this._before : this._after).clear();
}
const r18 = [];
if (r4) {
HermesBuiltin.arraySpread(r18, this._array, HermesBuiltin.arraySpread(r18, r14, 0));
_array2 = r18;
} else {
HermesBuiltin.arraySpread(r18, r14, HermesBuiltin.arraySpread(r18, this._array, 0));
_array2 = r18;
}
this._array = _array2;
}
mergeDelta(r2 = []) {
let c14467_0 = r2;
let r4 = arguments[1];
if (r4 === void 0) {
r4 = [];
}
let c14467_1 = r4;
let r5 = arguments[2];
if (r5 === void 0) {
r5 = [];
}
let c14467_2 = r5;
return this.mutate((a0) => {
a0._before.clear();
a0._after.clear();
let c25300_0 = new Set(c14467_2);
c14467_0.forEach((item) => c25300_0.add(item.id));
c14467_1.forEach((item) => c25300_0.add(item.id));
a0._array = a0._array.filter((item) => !c25300_0.has(item.id)).concat(c14467_0.map((item) => createMessageRecord(item)), c14467_1.map((item) => createMessageRecord(item))).sort((a, b) => SnowflakeUtils.compare(a.id, b.id));
});
}
_clearMessages() {
this._array = [];
this._map = {};
}
reset(_array) {
return this.mutate((a0) => {
a0._array = _array;
a0._map = {};
_array.forEach((item) => {
a0._map[item.id] = item;
return item;
});
a0._before.clear();
a0._after.clear();
});
}
truncateTop(a0, r7 = true) {
const r9 = this._array.length - a0;
let c14469_0 = r9;
return r9 <= 0 ? this : this.mutate((a0) => {
let r8 = c14469_0;
let r0 = 0;
while (r0 < r8) {
delete a0._map[a0._array[r0].id];
r0 = r0 + 1;
r8 = c14469_0;
}
a0._before.cache(a0._array.slice(0, r8), !a0.hasMoreBefore);
a0._array = a0._array.slice(r8);
a0.hasMoreBefore = true;
}, r7);
}
truncateBottom(a0) {
return this;
}
jumpToPresent(c14470_0) {
return this.mutate((a0) => {
const r8 = a0._after.extractAll();
a0.hasMoreAfter = false;
const r15 = Math.max(r8.length - c14470_0, 0);
const r17 = r8.slice(r15);
r8.splice(r15);
a0._before.cache(a0._array);
a0._before.cache(r8);
a0._clearMessages();
a0._merge(r17);
a0.hasMoreBefore = a0._before.length > 0;
a0.jumped = true;
a0.jumpTargetId = null;
a0.jumpTargetOffset = 0;
a0.jumpedToPresent = true;
a0.jumpFlash = false;
a0.jumpReturnTargetId = null;
a0.jumpSequenceId = a0.jumpSequenceId + 1;
a0.onJumpComplete = null;
a0.ready = true;
a0.loadingMore = false;
}, true);
}
jumpToMessage(a0) {
const { messageId, flash = true } = a0;
const jumpFlash = flash;
const { offset, returnTargetId = null } = a0;
const jumpReturnTargetId = returnTargetId;
const { jumpType, onJumpComplete } = a0;
return this.mutate((a0) => {
a0.jumped = true;
a0.jumpedToPresent = false;
let jumpType2 = jumpType;
if (jumpType == null) {
jumpType2 = JumpType.ANIMATED;
}
a0.jumpType = jumpType2;
a0.jumpTargetId = messageId;
a0.jumpTargetOffset = messageId != null ? offset != null ? offset : 0 : 0;
a0.jumpSequenceId = a0.jumpSequenceId + 1;
let onJumpComplete2 = onJumpComplete;
if (onJumpComplete == null) {
onJumpComplete2 = null;
}
a0.onJumpComplete = onJumpComplete2;
a0.jumpFlash = jumpFlash;
a0.jumpReturnTargetId = jumpReturnTargetId;
a0.ready = true;
a0.loadingMore = false;
}, false);
}
focusOnMessage(focusTargetId) {
return this.mutate((a0) => {
a0.focusTargetId = focusTargetId;
a0.focusSequenceId = a0.focusSequenceId + 1;
a0.ready = true;
a0.loadingMore = false;
}, false);
}
loadFromCache(c14473_0, c14473_1) {
return this.mutate((a0) => {
const r5 = c14473_0 ? a0._before : a0._after;
a0._merge(r5.extract(c14473_1), c14473_0);
const hasMoreBefore = r5.length > 0 || !r5.wasAtEdge;
if (c14473_0) {
a0.hasMoreBefore = hasMoreBefore;
} else {
a0.hasMoreAfter = hasMoreBefore;
}
a0.ready = true;
a0.loadingMore = false;
}, true);
}
truncate(a0, a1) {
return this.length <= MAX_LOADED_MESSAGES ? this : a0 ? this.truncateBottom(TRUNCATED_MESSAGE_VIEW_SIZE) : a1 ? this.truncateTop(TRUNCATED_MESSAGE_VIEW_SIZE) : this;
}
receiveMessage(a0, r8 = true) {
const r17 = a0.nonce == null ? null : this.get(a0.nonce, true);
L14: {
if (r17 != null) {
if (a0.author?.id !== r17.author?.id) {
if (a0.interaction == null) {
break L14;
}
if (a0.interaction.user.id !== r17.author.id) {
break L14;
}
}
if (a0.nonce != null && r17.id === a0.nonce) {
const messageRecord2 = createMessageRecord(a0);
if (r17.interactionData != null) {
messageRecord2.interactionData = r17.interactionData;
}
return this.replace(a0.nonce, messageRecord2);
}
}
}
if (this.hasMoreAfter) {
if (this._after.wasAtEdge) {
this._after.wasAtEdge = false;
}
return this;
}
const messageRecord = createMessageRecord(a0);
const r13 = this.last();
const r53 = r13 != null && (SnowflakeUtils.compare(a0.id, r13.id) < 0 && EnsureReceivedMessagesAddedInOrderExperiment.getConfig({
location: "receiveMessage"
}).enabled) ? this.mutate((a0) => {
const r5 = a0._map[messageRecord.id];
a0._map[messageRecord.id] = messageRecord;
if (r5 != null) {
a0._array[a0._array.indexOf(r5)] = messageRecord;
} else {
insert(a0._array, messageRecord, (a0, a1) => SnowflakeUtils.compare(a0.id, a1.id));
}
}, true) : this.merge([messageRecord]);
return r8 ? r53.truncateTop(MAX_MESSAGES_PER_CHANNEL, false) : this.length > MAX_LOADED_MESSAGES ? r53.truncateBottom(MAX_MESSAGES_PER_CHANNEL, false) : r53;
}
receivePushNotification(a0, a1) {
if ((a0.nonce == null ? null : this.get(a0.nonce, true)) != null) {
return this;
}
if (this.get(a0.id, true) != null) {
return this;
}
const isIOSPushNotificationRawPayloadFixExperimentEnabled = _IOSPushNotificationRawPayloadFixExperiment.isIOSPushNotificationRawPayloadFixExperimentEnabled();
return this.mutate({
ready: true,
cached: isIOSPushNotificationRawPayloadFixExperimentEnabled ? !a1 : !isIOSPushNotificationRawPayloadFixExperimentEnabled
}).merge([mergeMessage(this, a0)]);
}
receiveReactionInAppNotification(a0) {
return (a0.nonce == null ? null : this.get(a0.nonce, true)) == null ? this.mutate({
ready: true,
cached: true
}).merge([mergeMessage(this, a0)]) : this;
}
loadStart(a0) {
const mutate2 = this.mutate;
let jumpedToPresent = a0?.present;
if (jumpedToPresent == null) {
jumpedToPresent = false;
}
let jumpTargetId = a0?.messageId;
if (jumpTargetId == null) {
jumpTargetId = null;
}
let jumpTargetOffset = a0?.offset;
if (jumpTargetOffset == null) {
jumpTargetOffset = 0;
}
let jumpReturnTargetId2 = a0?.returnMessageId;
if (jumpReturnTargetId2 == null) {
jumpReturnTargetId2 = null;
}
let onJumpComplete2 = a0?.onJumpComplete;
if (onJumpComplete2 == null) {
onJumpComplete2 = null;
}
return mutate2.call(this, {
loadingMore: true,
jumped: a0 != null,
jumpedToPresent,
jumpTargetId,
jumpTargetOffset,
jumpReturnTargetId: jumpReturnTargetId2,
onJumpComplete: onJumpComplete2,
ready: a0 == null && this.ready
});
}
loadComplete(a0) {
let r62;
const r8 = [...a0.newMessages];
let isBefore = a0.isBefore;
if (isBefore == null) {
isBefore = false;
}
let isAfter = a0.isAfter;
if (isAfter == null) {
isAfter = false;
}
let jump = a0.jump;
if (jump == null) {
jump = null;
}
let hasMoreBefore = a0.hasMoreBefore;
if (hasMoreBefore == null) {
hasMoreBefore = false;
}
let hasMoreAfter = a0.hasMoreAfter;
if (hasMoreAfter == null) {
hasMoreAfter = false;
}
let avoidInitialScroll = a0.avoidInitialScroll;
if (avoidInitialScroll == null) {
avoidInitialScroll = false;
}
let cached = a0.cached;
if (cached == null) {
cached = false;
}
L35: {
const r38 = Module12(r8).reverse().map((item) => createMessageRecord(item)).value();
if (!(!isBefore && !isAfter) && (jump == null && this.ready)) {
r62 = this.merge(r38, isBefore, true);
} else {
const r42 = this._array.filter((item) => item.state === MessageStates.SENDING);
const r45 = this._array.filter((item) => item.state === MessageStates.SEND_FAILED);
const r2 = r42.length > 0 || r45.length > 0;
const r49 = this.reset(r38);
if (r2 && !isBefore && !isAfter && jump?.messageId == null && jump?.offset == null) {
const length2 = r45.length;
let r22 = r49;
if (length2 > 0) {
c2993_9.info(`loadComplete: merging with SEND_FAILED messages for channelId=${this.channelId}`);
r22 = r49.merge(r45);
}
const length3 = r42.length;
r62 = r22;
if (!(length3 > 0)) {
break L35;
}
c2993_9.info(`loadComplete: merging with SENDING messages for channelId=${this.channelId}`);
r62 = r22.merge(r42);
break L35;
}
c2993_9.info(`loadComplete: resetting state for channelId=${this.channelId}, sending.length=${r42.length}`);
r62 = r49;
}
}
const r86 = (cached ? !cached : r62.cached) && !avoidInitialScroll;
const mutate2 = r62.mutate;
let jumpType2 = jump?.jumpType;
if (jumpType2 == null) {
jumpType2 = JumpType.ANIMATED;
}
let jumpFlash2 = jump?.flash;
if (jumpFlash2 == null) {
jumpFlash2 = false;
}
let jumpedToPresent = jump?.present;
if (jumpedToPresent == null) {
jumpedToPresent = false;
}
let jumpTargetId = jump?.messageId;
if (jumpTargetId == null) {
jumpTargetId = null;
}
const jumpTargetOffset = jump != null ? jump.messageId != null ? jump.offset != null ? jump.offset : 0 : 0 : 0;
const jumpSequenceId = jump != null && !avoidInitialScroll ? r62.jumpSequenceId + 1 : r62.jumpSequenceId;
let jumpReturnTargetId2 = jump?.returnMessageId;
if (jumpReturnTargetId2 == null) {
jumpReturnTargetId2 = null;
}
let onJumpComplete2 = jump?.onJumpComplete;
if (onJumpComplete2 == null) {
onJumpComplete2 = null;
}
const hasMoreBefore2 = jump == null ? isAfter ? r62.hasMoreBefore : hasMoreBefore : hasMoreBefore;
const hasMoreAfter2 = jump == null ? isBefore ? r62.hasMoreAfter : hasMoreAfter : hasMoreAfter;
const initialScrollSequenceId = r62.initialScrollSequenceId;
const initialScrollSequenceId2 = r86 ? initialScrollSequenceId + 1 : initialScrollSequenceId;
const suppressRowAnimationSequenceId = r62.suppressRowAnimationSequenceId;
return mutate2.call(r62, {
ready: true,
loadingMore: false,
jumpType: jumpType2,
jumpFlash: jumpFlash2,
jumped: jump != null,
jumpedToPresent,
jumpTargetId,
jumpTargetOffset,
jumpSequenceId,
jumpReturnTargetId: jumpReturnTargetId2,
onJumpComplete: onJumpComplete2,
hasMoreBefore: hasMoreBefore2,
hasMoreAfter: hasMoreAfter2,
cached,
hasFetched: a0.hasFetched,
error: false,
initialScrollSequenceId: initialScrollSequenceId2,
suppressRowAnimationSequenceId: r86 ? suppressRowAnimationSequenceId + 1 : suppressRowAnimationSequenceId
});
}
addCachedMessages(a0, a1) {
let c14475_0;
requireSortedDescending(a0);
const r18 = a0.map((item) => mergeMessage(this, item)).reverse();
c14475_0 = r18;
this._array.filter((c25302_0) => !c14475_0.some((item) => item.id === c25302_0.id)).forEach((item) => insert(c14475_0, item, (a0, a1) => SnowflakeUtils.compare(a0.id, a1.id)));
const r25 = a1 ? !a1 : this.cached;
const r27 = this.reset(r18);
const initialScrollSequenceId = this.initialScrollSequenceId;
return r27.mutate({
ready: true,
cached: a1,
error: false,
initialScrollSequenceId: r25 ? initialScrollSequenceId + 1 : initialScrollSequenceId
});
}
}
export default ChannelMessages;
export function flatMapChannelMessages(a0) {
return a0.flatMap((item) => item._array);
}