Files
discord-decomp/modules/messages/native/renderer/ChatManager.tsx
T
2026-11-01 12:12:55 +02:00

288 lines
8.9 KiB
TypeScript

// Metro module 9307 (f9308).
import { Changeset, RowType } from "./RowGeneratorConstants";
import getEmbeddedActivityKey from "../getEmbeddedActivityKey";
import isUndefinedOrNull from "../../../../_bundle/isUndefinedOrNull";
const r17 = {
determineChangeType: () => Changeset.NOOP,
determineChangeTypeForUploadProgress: () => Changeset.NOOP,
determineChangeTypeForEmbeddedActivity: () => Changeset.NOOP,
getBlocked: () => false,
getIgnored: () => false
};
class ChatManager {
_messages = null;
_rows = [];
messages = null;
rows = [];
rowIndex = 0;
maybeRemove = false;
uploadProgressIds = {};
embeddedActivities = {};
getPreviousMessages() {
return this._messages;
}
getPreviousRows() {
return this._rows;
}
getBlocked(a0) {
if (this._messages != null && !Array.isArray(this._messages)) {
const r13 = this._messages._map[a0.id];
return r13 != null && !(r13.blocked || !a0.blocked);
}
return false;
}
getIgnored(a0) {
if (this._messages != null && !Array.isArray(this._messages)) {
const r13 = this._messages._map[a0.id];
return r13 != null && !(r13.ignored || !a0.ignored);
}
return false;
}
clear() {
this._messages = null;
this._rows = [];
this.embeddedActivities = {};
}
finishUpdate(a0, a1) {
this._messages = a0;
this._rows = a1;
}
getLastRow() {
return this.rows != null ? this.rows.length > 0 ? this.rows[this.rows.length - 1] : null : null;
}
setup(a0) {
this.messages = a0;
this.rows = [];
this.rowIndex = 0;
this.maybeRemove = this._messages?.length === this.messages.length;
}
determineChangeTypeForUploadProgress(a0) {
let r13, NOOP;
const r10 = this.uploadProgressIds[a0.id];
if (r10 != null) {
if (r10.items?.length === a0.items?.length && (r10.compressionProgress === a0.compressionProgress && (r10.progress === a0.progress && r10.currentSize === a0.currentSize))) {
NOOP = Changeset.NOOP;
} else {
this.uploadProgressIds[a0.id] = a0;
NOOP = Changeset.UPDATE;
}
r13 = NOOP;
} else {
this.uploadProgressIds[a0.id] = a0;
r13 = Changeset.INSERT;
}
return r13;
}
determineChangeTypeForEmbeddedActivity(a0) {
const embeddedActivityKey = getEmbeddedActivityKey(a0);
const r10 = this.embeddedActivities[embeddedActivityKey];
this.embeddedActivities[embeddedActivityKey] = a0;
return r10 != null ? Changeset.UPDATE : Changeset.INSERT;
}
determineChangeType(a0) {
let UPDATE;
const { message, updateMessageIds, forceRender } = a0;
let r6 = arguments[1];
if (r6 === void 0) {
r6 = false;
}
if (this._messages == null) {
return Changeset.NOOP;
}
if (Array.isArray(this._messages)) {
return Changeset.NOOP;
}
if (this._messages._map == null) {
return Changeset.NOOP;
}
L25: {
const r20 = this._messages._map[message.id];
let r21 = r20;
if (r20 == null) {
const nonce = message.nonce;
r21 = r20;
if (nonce != null) {
r21 = this._messages._map[message.nonce];
if (r21 != null) {
UPDATE = Changeset.UPDATE;
break L25;
}
}
}
L22: {
if (r21 != null) {
if (r6 && r21.blocked && !message.blocked) {
break L22;
}
if (!forceRender && !(updateMessageIds == null ? void 0 : updateMessageIds.has(message.id))) {
if (isUndefinedOrNull(r21, message)) {
UPDATE = Changeset.NOOP;
break L25;
}
UPDATE = Changeset.UPDATE;
break L25;
}
UPDATE = Changeset.UPDATE;
break L25;
}
}
UPDATE = Changeset.INSERT;
}
return UPDATE;
}
createRow(a0) {
if (a0.type === RowType.MESSAGE && a0.message == null) {
return void 0;
}
const index = +this.rowIndex;
this.rowIndex = index + 1;
a0.index = index;
this.rows.push(a0);
return a0;
}
createChangeset() {
let r2, r3, r17, r34, rows;
if (this._messages == null) {
rows = this.rows;
} else {
L49: {
r17 = [];
const r12 = 0 < this._rows.length;
let r6 = 0;
let r7 = 0;
let r8 = 0;
if (!r12) {
const r27 = 0 < this.rows.length;
r6 = 0;
r7 = 0;
r8 = 0;
if (!r27) {
break L49;
}
}
while (true) {
L47: {
const length = this.rows.length;
const r9 = r6;
const r5 = r7;
const r4 = r8;
if (r4 !== length) {
if (r9 !== this._rows.length) {
const r21 = this._rows[r9];
const r46 = this.rows[r4];
const changeType = r46.changeType;
if (Changeset.NOOP !== changeType && Changeset.UPDATE !== changeType) {
Changeset.INSERT;
r46.index = r4 + r5;
r17.push(r46);
r34 = r4 + 1;
r2 = r9;
r3 = r5;
break L47;
}
L39: {
if (r46.type === r21.type) {
if (r46.type === RowType.SEPARATOR && r46.id !== r21.id) {
break L39;
}
if (r46.type === RowType.LOADING && r46.id !== r21.id) {
break L39;
}
if (r46.type === RowType.MESSAGE && r46.message != null && r21.message != null && r46.message.id !== r21.message.id && r46.message.nonce !== r21.message.id) {
break L39;
}
L37: {
if (r46.changeType === Changeset.NOOP) {
L38: {
if (!(r46.type === RowType.SEPARATOR && r46.text !== r21.text) && !(r46.type === RowType.LOADING && r46.isLoading !== r21.isLoading)) {
if (!(r46.type !== RowType.BLOCKED_GROUP && r46.type !== RowType.IGNORED_GROUP)) {
if (r46.text !== r21.text) {
break L38;
}
if (r46.revealed !== r21.revealed) {
break L38;
}
}
if (!(r46.type === RowType.MESSAGE && (r46.separatorBefore !== r21.separatorBefore && !this.maybeRemove))) {
if (r46.message?.isFirst === r21.message?.isFirst) {
break L37;
}
}
}
}
r46.changeType = Changeset.UPDATE;
r46.index = r4 + r5;
r17.push(r46);
r2 = r9 + 1;
r34 = r4 + 1;
r3 = r5;
break L47;
}
}
r46.index = r4 + r5;
r17.push(r46);
r2 = r9 + 1;
r34 = r4 + 1;
r3 = r5;
break L47;
}
}
const REMOVE = Changeset.REMOVE;
const index = r4 + r5;
r17.push({
changeType: REMOVE,
index
});
if (0 < index) {
const r121 = r17[index - 1];
if (!(r121.changeType !== Changeset.NOOP || r121.type !== RowType.MESSAGE || this.maybeRemove)) {
r121.changeType = Changeset.UPDATE;
}
}
r2 = r9 + 1;
r3 = r5 + 1;
r34 = r4;
} else {
const r38 = this.rows[r4];
r38.changeType = Changeset.INSERT;
r38.index = r4 + r5;
r17.push(r38);
r34 = r4 + 1;
r2 = r9;
r3 = r5;
}
} else {
r17.push({
changeType: Changeset.REMOVE,
index: r4 + r5
});
r3 = r5 + 1;
r2 = r9 + 1;
r34 = r4;
}
}
const length2 = this._rows.length;
r6 = r2;
r7 = r3;
r8 = r34;
if (!(r2 < length2)) {
const length3 = this.rows.length;
r6 = r2;
r7 = r3;
r8 = r34;
if (!(r8 < length3)) {
break;
}
}
}
}
rows = r17.filter((item) => item.changeType !== Changeset.NOOP);
}
this._messages = this.messages;
this._rows = this.rows;
return rows;
}
}
export default ChatManager;
export { r17 as MockChatManager };