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

430 lines
13 KiB
TypeScript

// Metro module 10475 (f10476).
import ConnectedAccountsStore from "./ConnectedAccountsStore";
import StreamerModeStore from "./StreamerModeStore";
import { PlatformTypes } from "../Constants";
import Durations from "../utils/Durations";
import { HTTP } from "../_bundle/sendRequest";
import ConnectedAccountsActionCreators from "../actions/ConnectedAccountsActionCreators";
import Dispatcher from "../Dispatcher";
import { getAssetFromImageURL } from "../utils/ApplicationAssetUtils";
import Platforms from "../lib/Platforms";
import isUndefinedOrNull from "../_bundle/isUndefinedOrNull";
import Module589 from "../_bundle/Module589";
function $mk115679($env) {
return function getTwitchGame() {
return $env[16].apply(this, arguments);
};
}
function $mk115680($env) {
return function parseUsernameFromThumbnail(a0) {
const r5 = c7022_9.exec(a0);
return r5 == null ? void 0 : r5[1];
};
}
function $mk115681($env) {
return (a0) => {
const r0 = $env;
return r0[2]._checkTwitch(r0[0], a0);
};
}
function $mk115683($env) {
return (a0) => {
const r0 = $env;
return r0[2]._checkYouTube(r0[0], a0);
};
}
let streamerModeUpdate, c7022_7, c7022_8, c7022_9, c7022_13, c7022_14, c7022_17, c7022_19;
let env7022 = {};
const makeTwitchRequest = function makeTwitchRequest(a0, a1, a2) {
return HTTP.get({
url: `https://api.twitch.tv/helix${a0}`,
query: a1,
headers: {
"Client-ID": "33kozedd0zs6fbauka98psnc7zwom2s",
Authorization: `Bearer ${a2}`
},
rejectWithError: false
});
};
env7022[16] = function _getTwitchGame() {
const r8 = async (id, c26677_1) => {
let r26;
let c30224_0, c30224_1, c30224_2;
L14: {
c30224_0 = id;
c30224_1 = void 0;
c30224_2 = void 0;
r26 = c7022_14[id];
if (r26 != null) {
break L14;
}
c30224_1 = (await makeTwitchRequest("/games", {
id
}, c26677_1)).body.data;
c30224_2 = c30224_1[0]?.name;
c7022_14[c30224_0] = c30224_2;
return c30224_2;
}
return r26;
};
env7022[16] = r8;
return r8.apply(this, arguments);
};
streamerModeUpdate = function streamerModeUpdate() {
if (StreamerModeStore.enabled) {
c7022_17.start();
} else {
c7022_17.stop();
}
};
c7022_7 = 1 * Durations.Millis.MINUTE;
c7022_8 = 5 * Durations.Millis.MINUTE;
c7022_9 = /live_user_(.*)-\{width\}/;
env7022[10] = null;
env7022[11] = 0;
env7022[12] = null;
c7022_13 = new Set();
c7022_14 = {};
class StreamingPoller {
_started = false;
start() {
if (!this._started) {
this._started = true;
if (ConnectedAccountsStore.isFetching()) {
ConnectedAccountsActionCreators.fetch();
} else {
this._check();
}
}
}
stop() {
this._started = false;
env7022[12] = null;
env7022[11] = 0;
if (this._nextCheck != null) {
clearTimeout(this._nextCheck);
}
Dispatcher.dispatch({
type: "STREAMING_UPDATE",
stream: null
});
}
async _checkTwitch(a0) {
let r186, r206;
let env17989 = {
$parent: env7022
};
env17989[0] = a0;
let r5 = arguments[1];
if (r5 === void 0) {
r5 = null;
}
env17989[1] = r5;
env17989[2] = this;
let accessToken, assetFromImageURL, name, c26678_3, c26678_4, c26678_5;
let c26678_6 = 0;
const r22 = env17989;
L36: {
L35: {
L34: {
try {
let env30225;
c26678_4 = r22;
const r45 = env30225 = {
$parent: r22
};
c26678_3 = r45;
env30225[0] = void 0;
env30225[1] = void 0;
env30225[2] = void 0;
env30225[3] = void 0;
env30225[4] = void 0;
env30225[5] = void 0;
env30225[6] = void 0;
env30225[7] = void 0;
env30225[8] = void 0;
env30225[9] = void 0;
if (env17989[0].revoked) {
break L36;
}
accessToken = env17989[1];
if (accessToken == null) {
accessToken = env17989[0].accessToken;
}
env17989[1] = accessToken;
if (accessToken == null) {
break L35;
}
c26678_6 = 1;
env30225[0] = (await makeTwitchRequest("/streams", {
user_id: env17989[0].id,
first: 1
}, env17989[1])).body.data[0];
if (env30225[0] != null && env30225[0].type === "live") {
env30225[1] = env30225[0].thumbnail_url;
env30225[2] = env30225[0].game_id;
env30225[3] = env30225[0].title;
const r102 = env30225[1] != null;
let large_image = void 0;
if (r102) {
assetFromImageURL = getAssetFromImageURL(PlatformTypes.TWITCH, env30225[1]);
if (assetFromImageURL == null) {
assetFromImageURL = void 0;
}
large_image = assetFromImageURL;
}
env30225[4] = {
large_image
};
const r106 = env30225[2];
const r107 = env17989[1];
env30225[5] = await $mk115679(env7022)(r106, r107);
env30225[6] = Platforms.get(PlatformTypes.TWITCH);
const r156 = env30225[1];
name = $mk115680(env7022)(r156);
if (name == null) {
name = env17989[0].name;
}
env30225[7] = name;
env30225[8] = env30225[3] != null ? env30225[3] !== "" ? env30225[3].slice(0, 128) : void 0 : void 0;
env30225[9] = env30225[5] != null ? env30225[5] !== "" ? env30225[5].slice(0, 128) : void 0 : void 0;
const r177 = env30225[6];
const getPlatformUserUrl = r177.getPlatformUserUrl;
r186 = {
url: getPlatformUserUrl == null ? void 0 : getPlatformUserUrl.call(r177, {
id: env17989[0].id,
name: env30225[7]
}),
name: env30225[6].name,
assets: env30225[4],
details: env30225[8],
state: env30225[9]
};
c26678_6 = 0;
break L34;
}
throw new Error("no stream");
} catch ($e) {
const r43 = $e;
let r13 = r43;
c26678_5 = r43;
if (c26678_6 !== 0) {
while (true) {
try {
const r203 = c26678_5;
c26678_6 = 0;
r206 = r203.status === 401 ? env17989[1] == null ? ConnectedAccountsActionCreators.refreshAccessToken(env17989[0].type, env17989[0].id).then($mk115681(env17989)).catch(() => null) : null : null;
} catch (r201) {
r13 = r201;
c26678_5 = r201;
if (c26678_6 === 0) {
break;
}
continue;
}
return r206;
}
}
throw r13;
}
}
return r186;
}
return null;
}
return null;
}
async _checkYouTube(a0) {
let r135, r166;
let env17990 = {
$parent: env7022
};
env17990[0] = a0;
let r5 = arguments[1];
if (r5 === void 0) {
r5 = null;
}
env17990[1] = r5;
env17990[2] = this;
let assetFromImageURL2, c26679_1, c26679_2, c26679_3;
let c26679_4 = 0;
const r22 = env17990;
L23: {
try {
let env30226;
c26679_2 = r22;
const r44 = env30226 = {
$parent: r22
};
c26679_1 = r44;
env30226[0] = void 0;
env30226[1] = void 0;
env30226[2] = void 0;
env30226[3] = void 0;
env30226[4] = void 0;
env30226[5] = void 0;
env30226[6] = void 0;
env30226[7] = void 0;
env30226[8] = void 0;
env7022[12] = null;
if (env17990[0].revoked) {
break L23;
}
if (c7022_13.has(env17990[0].id)) {
break L23;
}
c26679_4 = 1;
env30226[0] = (await HTTP.get({
url: "https://www.googleapis.com/youtube/v3/liveBroadcasts",
query: {
part: "id,snippet",
broadcastStatus: "active",
broadcastType: "all"
},
headers: {
Authorization: `Bearer ${env17990[1] != null ? env17990[1] : env17990[0].accessToken}`
},
oldFormErrors: true,
rejectWithError: false
})).body.items;
if (env30226[0].length < 1) {
throw new Error("no stream");
}
env30226[1] = env30226[0][0];
env30226[2] = env30226[1].id;
env30226[3] = env30226[1].snippet;
env30226[4] = env30226[3].title;
env30226[5] = env30226[3].thumbnails;
assetFromImageURL2 = getAssetFromImageURL(PlatformTypes.YOUTUBE, env30226[5].high.url);
if (assetFromImageURL2 == null) {
assetFromImageURL2 = void 0;
}
env30226[6] = {
large_image: assetFromImageURL2
};
env30226[7] = env30226[4] != null ? env30226[4] !== "" ? env30226[4].slice(0, 128) : void 0 : void 0;
env30226[8] = env30226[2];
r135 = {
url: `https://youtube.com/watch?v=${env30226[8]}`,
name: Platforms.get(PlatformTypes.YOUTUBE).name,
details: env30226[7],
assets: env30226[6]
};
env7022[12] = r135;
c26679_4 = 0;
} catch ($e) {
const r42 = $e;
let r13 = r42;
c26679_3 = r42;
if (c26679_4 !== 0) {
while (true) {
L34: {
try {
const r159 = c26679_3;
c26679_4 = 0;
env30226[9] = r159;
if (env30226[9].status === 401 && env17990[1] == null) {
r166 = ConnectedAccountsActionCreators.refreshAccessToken(env17990[0].type, env17990[0].id).then($mk115683(env17990)).catch(() => null);
break L34;
}
const status = env30226[9].status;
r166 = null;
if (status === 403) {
c7022_13.add(env17990[0].id);
r166 = null;
}
} catch (r156) {
r13 = r156;
c26679_3 = r156;
if (c26679_4 === 0) {
break;
}
continue;
}
}
return r166;
}
}
throw r13;
}
return r135;
}
return null;
}
_check() {
let c17991_0;
if (this._started) {
const accounts = ConnectedAccountsStore.getAccounts();
if (accounts != null) {
if (this._nextCheck != null) {
clearTimeout(this._nextCheck);
}
const r8 = [PlatformTypes.TWITCH];
c17991_0 = r8;
const r20 = Date.now();
if (env7022[11] <= r20) {
r8.push(PlatformTypes.YOUTUBE);
env7022[11] = r20 + c7022_8;
}
Promise.allSettled(accounts.filter((account) => c17991_0.includes(account.type)).map((item) => item.type === PlatformTypes.TWITCH ? this._checkTwitch(item) : this._checkYouTube(item))).then((result) => {
if (this._started) {
let stream = result.find((item) => item.status === "fulfilled" && item.value != null)?.value;
if (stream == null && env7022[12] != null) {
stream = env7022[12];
}
Dispatcher.dispatch({
type: "STREAMING_UPDATE",
stream
});
}
this._scheduleCheck();
});
}
}
}
_scheduleCheck() {
if (this._started) {
this._nextCheck = setTimeout(() => this._check(), c7022_7);
}
}
}
const r64 = {
__proto__: StreamingPoller.prototype
};
r64._started = false;
c7022_17 = r64;
class ExternalStreamingStore extends Module589.Store {
static displayName = "ExternalStreamingStore";
constructor() {
super(...arguments);
}
initialize() {
const enabled = StreamerModeStore.enabled;
if (enabled) {
c7022_17.start();
} else {
c7022_17.stop();
}
this.waitFor(ConnectedAccountsStore, StreamerModeStore);
this.syncWith([StreamerModeStore], streamerModeUpdate);
}
getStream() {
return env7022[10];
}
}
c7022_19 = ExternalStreamingStore;
const r82 = new ExternalStreamingStore(Dispatcher, {
STREAMING_UPDATE: function streamUpdate(a0) {
if (isUndefinedOrNull(a0.stream, env7022[10])) {
return false;
}
let stream = a0.stream;
if (stream == null) {
stream = null;
}
env7022[10] = stream;
},
USER_CONNECTIONS_UPDATE: () => c7022_17._check()
});
export default r82;