/* Metro module 9624; source: utils/AnalyticsFeedItemSeenManager.tsx; dependencies: [5, 6, 7, 44, 694, 2] */ function _fun75475(global, require, importDefault, importAll, module, exports, dependencyMap) { // fn#75475, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:6, offset: 0x01dae504, size: 273 bytes, params: 8, frame: 20 const _arrayLikeToArray_75478 = function(a0, a1) { var r0; var r1; var r2; var value3; var length; var value5; var value = undefined; var value2 = value == null; reducibleJoin2: while (true) { if (value2) { r0 = value2; break reducibleJoin2; } value3 = value > a0.length; r0 = value3; break reducibleJoin2; } reducibleJoin4: while (true) { if (r0) { length = a0.length; r1 = length; break reducibleJoin4; } r1 = value; break reducibleJoin4; } value = (0, global.Array)(r1); var value4 = 0; if (value4 < r1) { r2 = value4; reducibleLoop5: while (true) { value[r2] = a0[r2]; value5 = typeof r2 === 'bigint' ? r2 + 1n : +r2 + 1; if (value5 < r1) { r2 = value5; continue reducibleLoop5; } break reducibleLoop5; } } return value; }; const Object = global.Object; Object.defineProperty(exports, '__esModule', {value: true}); const env0_2 = importDefault(5) /* metro dependency 5 */; const env0_3 = importDefault(6) /* metro dependency 6 */; const env0_4 = importDefault(7) /* metro dependency 7 */; const object = {IMMEDIATE: 0}; object[0] = 'IMMEDIATE'; object.IMMEDIATE_WITH_COOLDOWN = 1; object[1] = 'IMMEDIATE_WITH_COOLDOWN'; object.IMMEDIATE_WITH_DELAY = 2; object[2] = 'IMMEDIATE_WITH_DELAY'; let value = _fun75479(); let value2 = _fun75485(); (require(2) /* metro dependency 2 */).fileFinishedImporting('utils/AnalyticsFeedItemSeenManager.tsx'); exports.AnalyticsFeedTypes = {FORUM_CHANNEL: 'forum_channel'}; exports.ForceFlushType = object; exports.TrackedFeedItem = value; exports.AnalyticsFeedItemSeenManager = value2; } function _createForOfIteratorHelperLoose_75476(a0, a1) { // fn#75476, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:130, offset: 0x01dae615, size: 372 bytes, params: 3, frame: 20 var r6; var r9; var r5; var value3; var regexp; const env0_0 = a0; const Symbol = global.Symbol; let value = typeof Symbol !== 'undefined'; let r1 = value && a0[global.Symbol.iterator]; r1 = !r1 ? a0['@@iterator'] : r1; if (r1) { value = r1.call(a0); return value.next.bind(value); } const Array = global.Array; if (Array.isArray(a0)) { if (r1) { } return _fun75477; } value = undefined; if (a0) { if (typeof a0 === 'string') { value = _arrayLikeToArray_75478(a0, value); r5 = value; } else { value3 = ({}).toString.call(a0).slice(8, -1); r6 = value3 === 'Object' && a0.constructor; r9 = r6 ? a0.constructor.name : value3; if (r9 === 'Map') { r6 = global.Array.from(a0); } else if (r9 === 'Set') { r6 = global.Array.from(a0); } else if (r9 === 'Arguments') { value = _arrayLikeToArray_75478(a0, value); r6 = value; } else { regexp = RegExp('^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$', ''); if (regexp.test(r9)) { value = _arrayLikeToArray_75478(a0, value); r6 = value; } else { r6 = value; } } r5 = r6; } } else { r5 = value; } if (r5) { if (r5) { } return _fun75477; } const TypeError = global.TypeError; throw new TypeError('Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.'); } function _fun75479() { // fn#75479, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:1271, offset: 0x01dae789, size: 140 bytes, params: 1, frame: 15 return env0_4(TrackedFeedItem, [{key: 'maybeMarkSeen', value: function(a0) { var r0; var property = this.seenIntervals; property = property[this.seenIntervals.length - 1]; r0 = property == null || property.endTimeMillis != null; if (r0) { this.seenIntervals.push({startTimeMillis: a0}); r0 = true; } return r0; }}, {key: 'maybeMarkUnseen', value: function(a0) { var r0; var property = this.seenIntervals; property = property[this.seenIntervals.length - 1]; r0 = property != null && property.endTimeMillis == null; if (r0) { property.endTimeMillis = a0; r0 = true; } return r0; }}, {key: 'isVisible', value: function() { var property = this.seenIntervals; property = property[this.seenIntervals.length - 1]; var value = undefined; return (property == null ? value : property.startTimeMillis) != null && (property == null ? value : property.endTimeMillis) == null; }}, {key: 'computeSeenTimeDestructive', value: value_75484}]); } function _fun75485() { // fn#75485, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:2319, offset: 0x01daea11, size: 59 bytes, params: 1, frame: 14 return env0_4(AnalyticsFeedItemSeenManager, [{key: 'maybeFlushSeenItems', value: value_75503}]); } function TrackedFeedItem() { // fn#75480, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:1292, offset: 0x01dae815, size: 37 bytes, params: 1, frame: 13 env1_3(this, TrackedFeedItem); this.seenIntervals = []; } function value_75484(a0) { // fn#75484, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:1930, offset: 0x01dae91b, size: 246 bytes, params: 2, frame: 25 var r6; var r8; var r12; var r2; var value5; var endTimeMillis; var startTimeMillis; var value6; var Date; var value7; var value8; var value9; const items2 = []; const value = environment.__proto__; const value2 = _createForOfIteratorHelperLoose_75476(this.seenIntervals); const value3 = value2(); let done = value3.done; const value4 = 0; if (done) { r2 = value4; } else { r6 = value4; r8 = value3; while (true) { value5 = r8.value; endTimeMillis = value5.endTimeMillis; if (endTimeMillis == null) { if (a0) { Date = global.Date; value7 = Date.now(); value8 = r6 + (value7 - value5.startTimeMillis); items2.push({startTimeMillis: value7}); r12 = value8; break; } items2.push(value5); r12 = r6; break; } endTimeMillis = value5.endTimeMillis; startTimeMillis = value5.startTimeMillis; value6 = r6 + (endTimeMillis - startTimeMillis); r12 = value6; value9 = value2(); done = value9.done; if (done) { r2 = r12; break; } r6 = r12; r8 = value9; continue; } } (importDefault(44) /* metro dependency 44 */)(items2.length < 2, 'there should only be a single left over data'); this.seenIntervals = items2; const Math = global.Math; return Math.round(r2); } function AnalyticsFeedItemSeenManager({id, windowId, isPaused}) { // fn#75486, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:2340, offset: 0x01daea4c, size: 323 bytes, params: 2, frame: 17 var environment; const value = environment.__proto__; env1_3(this, AnalyticsFeedItemSeenManager); this.initialize = initialize_75487; this.terminate = terminate_75488; this.handleFeedItemFlush = handleFeedItemFlush; this.handleFeedItemSeen = handleFeedItemSeen; this.handleFeedItemUnseen = handleFeedItemUnseen; this.getTrackedFeedItem = getTrackedFeedItem; this.getVisibleFeedItemIds = getVisibleFeedItemIds; this.handleAppStateUpdate = handleAppStateUpdate_75495; this.clearPausedFeedItemIds = clearPausedFeedItemIds; this.pause = pause_75497; this.resume = resume_75499; this.handleReactNavigationFocus = handleReactNavigationFocus; this.handleWindowFocus = handleWindowFocus_75502; this.trackedFeedItems = {}; this._id = id; this._windowId = windowId; const Set = global.Set; this._pausedFeedItemIds = new Set(); this._paused = isPaused != null && isPaused; this._isReactNavigationFocused = true; const Date = global.Date; this._lastFlushTimeMillis = Date.now(); } function value_75503(a0) { // fn#75503, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:5398, offset: 0x01daf1a7, size: 313 bytes, params: 2, frame: 17 var environment; var r2; var Date; var value; var Promise; if (a0 != null) { value = environment.__proto__; if (a0 !== env1_5.IMMEDIATE_WITH_COOLDOWN) { if (this.createFlushSeenItemsFunction(a0) == null) { r2 = global.Promise.resolve(); } else { Date = global.Date; this._lastFlushTimeMillis = Date.now(); if (a0 === env1_5.IMMEDIATE) { Promise = global.Promise; value = _fun75504(); r2 = new Promise(); } else if (a0 === env1_5.IMMEDIATE_WITH_COOLDOWN) { Promise = global.Promise; value = _fun75504(); r2 = new Promise(); } else { r2 = new global.Promise(_fun75508); } } return r2; } } else { Date = global.Date; if (Date.now() - this._lastFlushTimeMillis < 60000) { return global.Promise.resolve(); } value = environment.__proto__; if (a0 !== env1_5.IMMEDIATE_WITH_COOLDOWN) { if (this.createFlushSeenItemsFunction(a0) == null) { r2 = global.Promise.resolve(); } else { Date = global.Date; this._lastFlushTimeMillis = Date.now(); if (a0 === env1_5.IMMEDIATE) { Promise = global.Promise; value = _fun75504(); r2 = new Promise(); } else if (a0 === env1_5.IMMEDIATE_WITH_COOLDOWN) { Promise = global.Promise; value = _fun75504(); r2 = new Promise(); } else { r2 = new global.Promise(_fun75508); } } return r2; } } Date = global.Date; if (Date.now() - this._lastFlushTimeMillis < 3000) { return global.Promise.resolve(); } if (this.createFlushSeenItemsFunction(a0) == null) { r2 = global.Promise.resolve(); } else { Date = global.Date; this._lastFlushTimeMillis = Date.now(); if (a0 === env1_5.IMMEDIATE) { Promise = global.Promise; value = _fun75504(); r2 = new Promise(); } else if (a0 === env1_5.IMMEDIATE_WITH_COOLDOWN) { Promise = global.Promise; value = _fun75504(); r2 = new Promise(); } else { r2 = new global.Promise(_fun75508); } } return r2; } function AnalyticsFeedItemSeenManagerInitialize() { // fn#75487, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:2461, owner: AnalyticsFeedItemSeenManager.initialize, offset: 0x01daeb8f, size: 214 bytes, params: 1, frame: 19 let value = environment.__proto__.__proto__; value = importDefault(694) /* metro dependency 694: Dispatcher */; const subscribe = value.subscribe; const binding = env0_0; Reflect.apply(subscribe, value, ['ANALYTICS_FEED_ITEM_SEEN', binding.handleFeedItemSeen]); value = importDefault(694) /* metro dependency 694: Dispatcher */; value.subscribe('ANALYTICS_FEED_ITEM_UNSEEN', binding.handleFeedItemUnseen); value = importDefault(694) /* metro dependency 694: Dispatcher */; value.subscribe('ANALYTICS_FEED_FLUSH', binding.handleFeedItemFlush); value = importDefault(694) /* metro dependency 694: Dispatcher */; value.subscribe('APP_STATE_UPDATE', binding.handleAppStateUpdate); value = importDefault(694) /* metro dependency 694: Dispatcher */; value.subscribe('WINDOW_FOCUS', binding.handleWindowFocus); const onInitialize = binding.onInitialize; if (onInitialize != null) { onInitialize.call(env0_0); } } function AnalyticsFeedItemSeenManagerTerminate() { // fn#75488, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:2862, owner: AnalyticsFeedItemSeenManager.terminate, offset: 0x01daec65, size: 239 bytes, params: 1, frame: 20 const defaultImport = importDefault(694) /* metro dependency 694: Dispatcher */; const unsubscribe = defaultImport.unsubscribe; let binding = env0_0; Reflect.apply(unsubscribe, defaultImport, ['ANALYTICS_FEED_ITEM_SEEN', binding.handleFeedItemSeen]); const defaultImport2 = defaultImport; defaultImport2.unsubscribe('ANALYTICS_FEED_ITEM_UNSEEN', binding.handleFeedItemUnseen); const defaultImport3 = defaultImport; defaultImport3.unsubscribe('ANALYTICS_FEED_FLUSH', binding.handleFeedItemFlush); const defaultImport4 = defaultImport; defaultImport4.unsubscribe('APP_STATE_UPDATE', binding.handleAppStateUpdate); const defaultImport5 = defaultImport; defaultImport5.unsubscribe('WINDOW_FOCUS', binding.handleWindowFocus); const onTerminate = binding.onTerminate; if (onTerminate != null) { onTerminate.call(env0_0); } binding = env0_0; const maybeFlushSeenItems = binding.maybeFlushSeenItems; const IMMEDIATE = env2_5.IMMEDIATE; Reflect.apply(maybeFlushSeenItems, binding, [IMMEDIATE]); } function handleFeedItemFlush({id, force}) { // fn#75489, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:3320, owner: AnalyticsFeedItemSeenManager.handleFeedItemFlush, offset: 0x01daed54, size: 50 bytes, params: 2, frame: 12 if (env0_0._id === id) { env0_0.maybeFlushSeenItems(force); } } function handleFeedItemSeen({id, timestampMillis, feedItemId}) { // fn#75490, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:3406, owner: AnalyticsFeedItemSeenManager.handleFeedItemSeen, offset: 0x01daed86, size: 130 bytes, params: 2, frame: 16 var _paused; var binding; var value3; var onFeedItemSeen; if (id === env0_0._id) { _paused = env0_0._paused; binding = env0_0; if (_paused) { binding._pausedFeedItemIds.add(feedItemId); } else { value3 = binding.getTrackedFeedItem(feedItemId).maybeMarkSeen(timestampMillis); onFeedItemSeen = binding.onFeedItemSeen; if (onFeedItemSeen != null) { onFeedItemSeen.call(env0_0, feedItemId, value3); } } } } function handleFeedItemUnseen({id, timestampMillis, feedItemId}) { // fn#75491, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:3652, owner: AnalyticsFeedItemSeenManager.handleFeedItemUnseen, offset: 0x01daee08, size: 146 bytes, params: 2, frame: 16 var binding; var value3; var onFeedItemUnseen; if (id === env0_0._id) { if (env0_0._paused) { env0_0._pausedFeedItemIds.delete(feedItemId); } binding = env0_0; value3 = binding.getTrackedFeedItem(feedItemId).maybeMarkUnseen(timestampMillis); onFeedItemUnseen = binding.onFeedItemUnseen; if (onFeedItemUnseen != null) { onFeedItemUnseen.call(env0_0, feedItemId, value3); } binding = env0_0; binding.maybeFlushSeenItems(); } } function getTrackedFeedItem(a0) { // fn#75492, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:3924, owner: AnalyticsFeedItemSeenManager.getTrackedFeedItem, offset: 0x01daee9a, size: 83 bytes, params: 2, frame: 12 var value2; var binding; var value3; var binding2; let trackedFeedItems = env0_0.trackedFeedItems; if (trackedFeedItems[a0] == null) { trackedFeedItems = env0_0.trackedFeedItems; value2 = environment.__proto__.__proto__; binding = env2_6; value3 = Object.create(binding.prototype, {constructor: {value: binding}}); binding2 = new binding(); trackedFeedItems[a0] = binding2 instanceof Object ? binding2 : value3; } return env0_0.trackedFeedItems[a0]; } function getVisibleFeedItemIds() { // fn#75493, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:4046, owner: AnalyticsFeedItemSeenManager.getVisibleFeedItemIds, offset: 0x01daeeed, size: 78 bytes, params: 1, frame: 12 const Object = global.Object; let value = Object.keys(env0_0.trackedFeedItems); const Set = global.Set; value = value.filter(_fun75494); const value2 = Object.create(Set.prototype, {constructor: {value: Set}}); const set = new Set(); return set instanceof Object ? set : value2; } function AnalyticsFeedItemSeenManagerHandleAppStateUpdate({state}) { // fn#75495, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:4221, owner: AnalyticsFeedItemSeenManager.handleAppStateUpdate, offset: 0x01daef66, size: 122 bytes, params: 2, frame: 11 var binding; var maybeFlushSeenItems; if (state === 'active' && env0_0._isReactNavigationFocused) { env0_0.resume(); } if (state === 'background') { if (env0_0._isReactNavigationFocused) { env0_0.pause(); } binding = env0_0; maybeFlushSeenItems = binding.maybeFlushSeenItems; value = environment.__proto__.__proto__; Reflect.apply(maybeFlushSeenItems, binding, [env2_5.IMMEDIATE]); } } function clearPausedFeedItemIds() { // fn#75496, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:4427, owner: AnalyticsFeedItemSeenManager.clearPausedFeedItemIds, offset: 0x01daefe0, size: 53 bytes, params: 1, frame: 10 const binding = env0_0; const Set = global.Set; binding._pausedFeedItemIds = new Set(); binding._paused = false; } function AnalyticsFeedItemSeenManagerPause() { // fn#75497, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:4492, owner: AnalyticsFeedItemSeenManager.pause, offset: 0x01daf015, size: 67 bytes, params: 1, frame: 12 var binding; var visibleFeedItemIds; if (!env0_0._paused) { binding = env0_0; visibleFeedItemIds = binding.getVisibleFeedItemIds(); visibleFeedItemIds.forEach(_fun75498); binding._paused = true; binding._pausedFeedItemIds = visibleFeedItemIds; } } function AnalyticsFeedItemSeenManagerResume() { // fn#75499, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:4739, owner: AnalyticsFeedItemSeenManager.resume, offset: 0x01daf0a2, size: 67 bytes, params: 1, frame: 12 var binding; if (env0_0._paused) { binding = env0_0; binding._paused = false; binding._pausedFeedItemIds.forEach(_fun75500); binding.clearPausedFeedItemIds(); } } function handleReactNavigationFocus(a0) { // fn#75501, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:4990, owner: AnalyticsFeedItemSeenManager.handleReactNavigationFocus, offset: 0x01daf12f, size: 55 bytes, params: 2, frame: 10 let binding = env0_0; binding._isReactNavigationFocused = a0; const _isReactNavigationFocused = binding._isReactNavigationFocused; binding = env0_0; if (_isReactNavigationFocused) { binding.resume(); } else { binding.pause(); } } function AnalyticsFeedItemSeenManagerHandleWindowFocus(a0) { // fn#75502, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:5109, owner: AnalyticsFeedItemSeenManager.handleWindowFocus, offset: 0x01daf166, size: 65 bytes, params: 2, frame: 11 var focused; var binding; if (env0_0._windowId === a0.windowId) { focused = a0.focused; binding = env0_0; if (focused) { binding.resume(); } else { binding.pause(); } } } function _fun75504() { // fn#75504, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:5761, offset: 0x01daf2e0, size: 36 bytes, params: 1, frame: 12 const env0_0 = env2_2(_fun75506); return _fun75507; } function _fun75508(a0) { // fn#75508, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:5878, offset: 0x01daf33d, size: 49 bytes, params: 2, frame: 13 var environment; const env0_0 = a0; const setTimeout = global.setTimeout; const value = environment.__proto__.__proto__; setTimeout(env2_2(_fun75510), 100); } function _fun75494(a0) { // fn#75494, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:4117, offset: 0x01daef3b, size: 43 bytes, params: 2, frame: 10 const value = environment.__proto__; return env1_0.trackedFeedItems[a0]?.isVisible(); } function _fun75498(a0) { // fn#75498, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:4561, offset: 0x01daf058, size: 74 bytes, params: 2, frame: 13 const binding = env1_0; const handleFeedItemUnseen = binding.handleFeedItemUnseen; const object2 = {}; object2.id = binding._id; object2.feedItemId = a0; const Date = global.Date; object2.timestampMillis = Date.now(); object2.type = 'ANALYTICS_FEED_ITEM_UNSEEN'; Reflect.apply(handleFeedItemUnseen, binding, [object2]); } function _fun75500(a0) { // fn#75500, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:4808, offset: 0x01daf0e5, size: 74 bytes, params: 2, frame: 13 const binding = env1_0; const handleFeedItemSeen = binding.handleFeedItemSeen; const object2 = {}; object2.id = binding._id; object2.feedItemId = a0; const Date = global.Date; object2.timestampMillis = Date.now(); object2.type = 'ANALYTICS_FEED_ITEM_SEEN'; Reflect.apply(handleFeedItemSeen, binding, [object2]); } function* _fun75506(a0) { // fn#75506, original name: ?anon_0_, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:5781, offset: 0x01daf30f, size: 46 bytes, params: 2, frame: 11 if (true) { value = environment.__proto__.__proto__; yield AnalyticsFeedItemSeenManager(); if (false) { return undefined; } a0(); } } function* _fun75510() { // fn#75510, original name: ?anon_0_, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9810:5896, offset: 0x01daf379, size: 50 bytes, params: 1, frame: 11 if (true) { value = environment.__proto__.__proto__; yield AnalyticsFeedItemSeenManager(); if (false) { return undefined; } value = environment.__proto__; env1_0(); } }