package com.discord.stores; import android.content.Context; import com.discord.models.domain.ModelPayload; import com.discord.models.experiments.domain.Experiment; import com.discord.models.experiments.domain.ExperimentHash; import com.discord.models.experiments.dto.GuildExperimentDto; import com.discord.models.experiments.dto.UserExperimentDto; import com.discord.stores.updates.ObservationDeck; import com.discord.stores.updates.ObservationDeckProvider; import com.discord.utilities.analytics.AnalyticsTracker; import com.discord.utilities.experiments.ExperimentRegistry; import com.discord.utilities.experiments.ExperimentUtils; import com.discord.utilities.experiments.RegisteredExperiment; import com.discord.utilities.persister.Persister; import com.discord.utilities.rest.RestAPI; import com.discord.utilities.rx.ObservableExtensionsKt; import com.discord.utilities.time.Clock; import com.discord.widgets.chat.input.sticker.StickerPickerFeatureFlag; import com.google.gson.Gson; import d0.t.h0; import d0.z.d.m; import java.util.AbstractMap; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; import kotlin.jvm.functions.Function0; import kotlin.jvm.functions.Function1; import kotlin.jvm.internal.DefaultConstructorMarker; import rx.Observable; /* compiled from: StoreExperiments.kt */ public final class StoreExperiments extends StoreV2 { public static final Companion Companion = new Companion(null); private static final long DISCORD_TESTERS_GUILD_ID = 197038439483310086L; private static final String EXPERIMENT_OVERRIDES_CACHE_KEY = "EXPERIMENT_OVERRIDES_CACHE_KEY"; private static final String EXPERIMENT_TRACKED_EXPOSURE_TIMESTAMPS_CACHE_KEY = "EXPERIMENT_TRIGGER_TIMESTAMPS_CACHE_KEY"; private static final StoreExperiments$Companion$ExperimentOverridesUpdateSource$1 ExperimentOverridesUpdateSource = new StoreExperiments$Companion$ExperimentOverridesUpdateSource$1(); private static final String GUILD_EXPERIMENTS_CACHE_KEY = "GUILD_EXPERIMENTS_CACHE_KEY"; private static final StoreExperiments$Companion$InitializedUpdateSource$1 InitializedUpdateSource = new StoreExperiments$Companion$InitializedUpdateSource$1(); private static final String UNINITIALIZED = "UNINITIALIZED"; private static final String USER_EXPERIMENTS_CACHE_KEY = "USER_EXPERIMENTS_CACHE_KEY"; private String authToken; private final Clock clock; private final Dispatcher dispatcher; private final HashMap experimentOverrides; private final Persister> experimentOverridesCache; private Map experimentOverridesSnapshot; private final HashMap experimentTrackedExposureTimestamps; private String fingerprint; private final HashMap guildExperiments; private final Persister> guildExperimentsCache; private Map guildExperimentsSnapshot; private boolean initialized; private final HashMap memoizedGuildExperiments; private final ObservationDeck observationDeck; private final StoreAuthentication storeAuthentication; private final StoreGuildMemberCounts storeGuildMemberCounts; private final StoreGuilds storeGuilds; private final StoreUser storeUser; private final HashMap userExperiments; private final Persister> userExperimentsCache; private Map userExperimentsSnapshot; /* compiled from: StoreExperiments.kt */ public static final class Companion { private Companion() { } public /* synthetic */ Companion(DefaultConstructorMarker defaultConstructorMarker) { this(); } } public StoreExperiments(Clock clock, Dispatcher dispatcher, StoreUser storeUser, StoreGuilds storeGuilds, StoreAuthentication storeAuthentication, StoreGuildMemberCounts storeGuildMemberCounts, ObservationDeck observationDeck) { m.checkNotNullParameter(clock, "clock"); m.checkNotNullParameter(dispatcher, "dispatcher"); m.checkNotNullParameter(storeUser, "storeUser"); m.checkNotNullParameter(storeGuilds, "storeGuilds"); m.checkNotNullParameter(storeAuthentication, "storeAuthentication"); m.checkNotNullParameter(storeGuildMemberCounts, "storeGuildMemberCounts"); m.checkNotNullParameter(observationDeck, "observationDeck"); this.clock = clock; this.dispatcher = dispatcher; this.storeUser = storeUser; this.storeGuilds = storeGuilds; this.storeAuthentication = storeAuthentication; this.storeGuildMemberCounts = storeGuildMemberCounts; this.observationDeck = observationDeck; this.authToken = "UNINITIALIZED"; this.fingerprint = "UNINITIALIZED"; this.userExperimentsSnapshot = h0.emptyMap(); this.guildExperimentsSnapshot = h0.emptyMap(); this.experimentOverridesSnapshot = h0.emptyMap(); this.userExperiments = new HashMap<>(); this.guildExperiments = new HashMap<>(); this.experimentOverrides = new HashMap<>(); this.memoizedGuildExperiments = new HashMap<>(); this.experimentTrackedExposureTimestamps = new HashMap<>(); this.userExperimentsCache = new Persister<>("USER_EXPERIMENTS_CACHE_KEY", new HashMap()); this.guildExperimentsCache = new Persister<>("GUILD_EXPERIMENTS_CACHE_KEY", new ArrayList()); this.experimentOverridesCache = new Persister<>("EXPERIMENT_OVERRIDES_CACHE_KEY", new HashMap()); } /* JADX INFO: this call moved to the top of the method (can break code semantics) */ public /* synthetic */ StoreExperiments(Clock clock, Dispatcher dispatcher, StoreUser storeUser, StoreGuilds storeGuilds, StoreAuthentication storeAuthentication, StoreGuildMemberCounts storeGuildMemberCounts, ObservationDeck observationDeck, int i, DefaultConstructorMarker defaultConstructorMarker) { this(clock, dispatcher, storeUser, storeGuilds, storeAuthentication, storeGuildMemberCounts, (i & 64) != 0 ? ObservationDeckProvider.get() : observationDeck); } public static final /* synthetic */ Dispatcher access$getDispatcher$p(StoreExperiments storeExperiments) { return storeExperiments.dispatcher; } public static final /* synthetic */ HashMap access$getExperimentOverrides$p(StoreExperiments storeExperiments) { return storeExperiments.experimentOverrides; } public static final /* synthetic */ boolean access$getInitialized$p(StoreExperiments storeExperiments) { return storeExperiments.initialized; } public static final /* synthetic */ StoreAuthentication access$getStoreAuthentication$p(StoreExperiments storeExperiments) { return storeExperiments.storeAuthentication; } public static final /* synthetic */ StoreGuilds access$getStoreGuilds$p(StoreExperiments storeExperiments) { return storeExperiments.storeGuilds; } public static final /* synthetic */ StoreUser access$getStoreUser$p(StoreExperiments storeExperiments) { return storeExperiments.storeUser; } public static final /* synthetic */ void access$handleClearOverride(StoreExperiments storeExperiments, String str) { storeExperiments.handleClearOverride(str); } public static final /* synthetic */ void access$handleLoadedUserExperiments(StoreExperiments storeExperiments, Map map, boolean z2) { storeExperiments.handleLoadedUserExperiments(map, z2); } public static final /* synthetic */ void access$handleSetOverride(StoreExperiments storeExperiments, String str, int i) { storeExperiments.handleSetOverride(str, i); } public static final /* synthetic */ void access$setInitialized(StoreExperiments storeExperiments) { storeExperiments.setInitialized(); } public static final /* synthetic */ void access$setInitialized$p(StoreExperiments storeExperiments, boolean z2) { storeExperiments.initialized = z2; } public static final /* synthetic */ void access$trackExposureToGuildExperiment(StoreExperiments storeExperiments, String str, long j, int i, int i2) { storeExperiments.trackExposureToGuildExperiment(str, j, i, i2); } public static final /* synthetic */ void access$trackExposureToUserExperiment(StoreExperiments storeExperiments, String str, int i, int i2, int i3) { storeExperiments.trackExposureToUserExperiment(str, i, i2, i3); } private final void cacheExperimentTrackedExposureTimestamps() { getPrefs().edit().putString("EXPERIMENT_TRIGGER_TIMESTAMPS_CACHE_KEY", new Gson().m(this.experimentTrackedExposureTimestamps)).apply(); } private final void cacheGuildExperiments() { boolean z2; Collection values = this.guildExperiments.values(); m.checkNotNullExpressionValue(values, "guildExperiments.values"); ArrayList arrayList = new ArrayList(); Iterator it = values.iterator(); while (true) { boolean z3 = true; if (it.hasNext()) { Object next = it.next(); GuildExperimentDto guildExperimentDto = (GuildExperimentDto) next; Collection values2 = ExperimentRegistry.INSTANCE.getRegisteredExperiments().values(); m.checkNotNullExpressionValue(values2, "ExperimentRegistry.registeredExperiments.values"); if (!(values2 instanceof Collection) || !values2.isEmpty()) { Iterator it2 = values2.iterator(); while (true) { if (!it2.hasNext()) { break; } if (ExperimentHash.INSTANCE.from(((RegisteredExperiment) it2.next()).getName()) == guildExperimentDto.getExperimentIdHash()) { z2 = true; continue; } else { z2 = false; continue; } if (z2) { break; } } } z3 = false; if (z3) { arrayList.add(next); } } else { this.guildExperimentsCache.set(arrayList, true); return; } } } /* JADX WARNING: Removed duplicated region for block: B:20:0x0067 A[SYNTHETIC] */ /* JADX WARNING: Removed duplicated region for block: B:23:0x000f A[SYNTHETIC] */ private final void cacheUserExperiments() { boolean z2; HashMap hashMap = this.userExperiments; LinkedHashMap linkedHashMap = new LinkedHashMap(); Iterator> it = hashMap.entrySet().iterator(); while (true) { boolean z3 = true; if (it.hasNext()) { Map.Entry next = it.next(); Collection values = ExperimentRegistry.INSTANCE.getRegisteredExperiments().values(); m.checkNotNullExpressionValue(values, "ExperimentRegistry.registeredExperiments.values"); if (!(values instanceof Collection) || !values.isEmpty()) { Iterator it2 = values.iterator(); while (true) { if (!it2.hasNext()) { break; } if (ExperimentHash.INSTANCE.from(((RegisteredExperiment) it2.next()).getName()) == next.getValue().getNameHash()) { z2 = true; continue; } else { z2 = false; continue; } if (z2) { break; } } if (!z3) { linkedHashMap.put(next.getKey(), next.getValue()); } } z3 = false; if (!z3) { } } else { this.userExperimentsCache.set(linkedHashMap, true); return; } } } private final void didTrackExposureToExperiment(String str) { this.experimentTrackedExposureTimestamps.put(str, Long.valueOf(this.clock.currentTimeMillis())); cacheExperimentTrackedExposureTimestamps(); } @StoreThread private final void handleClearOverride(String str) { this.experimentOverrides.remove(str); markChanged(ExperimentOverridesUpdateSource); } @StoreThread private final void handleLoadedGuildExperiments(Collection collection, boolean z2) { this.guildExperiments.clear(); this.memoizedGuildExperiments.clear(); AbstractMap abstractMap = this.guildExperiments; for (Object obj : collection) { abstractMap.put(Long.valueOf(((GuildExperimentDto) obj).getExperimentIdHash()), obj); } if (z2) { cacheGuildExperiments(); } markChanged(); } @StoreThread private final void handleLoadedUserExperiments(Map map, boolean z2) { this.userExperiments.clear(); this.userExperiments.putAll(map); if (z2) { cacheUserExperiments(); } markChanged(); } @StoreThread private final void handleSetOverride(String str, int i) { this.experimentOverrides.put(str, Integer.valueOf(i)); markChanged(ExperimentOverridesUpdateSource); } private final Map loadCachedExperimentTrackedExposureTimestamps() { String string = getPrefs().getString("EXPERIMENT_TRIGGER_TIMESTAMPS_CACHE_KEY", null); if (string == null) { return h0.emptyMap(); } Object g = new Gson().g(string, new StoreExperiments$loadCachedExperimentTrackedExposureTimestamps$typeToken$1().getType()); m.checkNotNullExpressionValue(g, "Gson().fromJson(json, typeToken)"); return (Map) g; } private final synchronized void memoizeGuildExperiment(String str, long j, Experiment experiment) { this.memoizedGuildExperiments.put(str + ':' + j, experiment); } @StoreThread private final void reset() { if (this.authToken == null) { this.userExperiments.clear(); this.guildExperiments.clear(); this.userExperimentsCache.set(new HashMap(), true); this.guildExperimentsCache.set(new ArrayList(), true); this.initialized = false; markChanged(); } } @StoreThread private final void setInitialized() { this.initialized = true; markChanged(InitializedUpdateSource); } private final synchronized void trackExposureToGuildExperiment(String str, long j, int i, int i2) { String str2 = str + ':' + j; if (!wasExperimentExposureTrackedRecently(str2, this.clock.currentTimeMillis())) { AnalyticsTracker.guildExperimentTriggered(str, i2, i, j); didTrackExposureToExperiment(str2); } } private final synchronized void trackExposureToUserExperiment(String str, int i, int i2, int i3) { if (!wasExperimentExposureTrackedRecently(str, this.clock.currentTimeMillis())) { AnalyticsTracker.userExperimentTriggered(str, i3, i2, i); didTrackExposureToExperiment(str); } } @StoreThread private final void tryInitializeExperiments() { if (!this.initialized && !m.areEqual(this.authToken, "UNINITIALIZED") && !m.areEqual(this.fingerprint, "UNINITIALIZED")) { this.initialized = true; if (this.authToken != null) { setInitialized(); return; } Observable c02 = ObservableExtensionsKt.restSubscribeOn$default(RestAPI.Companion.getApi().getExperiments(), false, 1, null).c0(2000, TimeUnit.MILLISECONDS); m.checkNotNullExpressionValue(c02, "RestAPI\n .api\n …0, TimeUnit.MILLISECONDS)"); ObservableExtensionsKt.appSubscribe$default(c02, StoreExperiments.class, (Context) null, (Function1) null, new StoreExperiments$tryInitializeExperiments$2(this), (Function0) null, (Function0) null, new StoreExperiments$tryInitializeExperiments$1(this), 54, (Object) null); } } private final boolean wasExperimentExposureTrackedRecently(String str, long j) { Long l = this.experimentTrackedExposureTimestamps.get(str); if (l == null) { l = Long.MIN_VALUE; } m.checkNotNullExpressionValue(l, "experimentTrackedExposur…y] ?: Timestamp.MIN_VALUE"); return j - 604800000 < l.longValue(); } public final void clearOverride(String str) { m.checkNotNullParameter(str, "experimentName"); this.dispatcher.schedule(new StoreExperiments$clearOverride$1(this, str)); } public final Observable getExperimentalAlpha() { return ObservationDeck.connectRx$default(this.observationDeck, new ObservationDeck.UpdateSource[]{this.storeUser, this.storeGuilds}, false, null, null, new StoreExperiments$getExperimentalAlpha$1(this), 14, null); } public final Experiment getGuildExperiment(String str, long j, boolean z2) { m.checkNotNullParameter(str, "experimentName"); long from = ExperimentHash.INSTANCE.from(str); Integer num = this.experimentOverridesSnapshot.get(str); GuildExperimentDto guildExperimentDto = this.guildExperimentsSnapshot.get(Long.valueOf(from)); if (num != null) { return new Experiment(guildExperimentDto != null ? guildExperimentDto.getRevision() : 0, num.intValue(), 0, true, StoreExperiments$getGuildExperiment$1.INSTANCE); } Experiment memoizedGuildExperiment$app_productionBetaRelease = getMemoizedGuildExperiment$app_productionBetaRelease(j + ':' + str, j); if (memoizedGuildExperiment$app_productionBetaRelease != null) { return memoizedGuildExperiment$app_productionBetaRelease; } if (guildExperimentDto == null) { return null; } int computeGuildExperimentBucket = ExperimentUtils.INSTANCE.computeGuildExperimentBucket(str, j, this.storeGuildMemberCounts.getApproximateMemberCount(j), this.storeGuilds.getGuild(j), guildExperimentDto); int revision = guildExperimentDto.getRevision(); Experiment experiment = new Experiment(revision, computeGuildExperimentBucket, 0, false, new StoreExperiments$getGuildExperiment$experiment$1(this, str, j, computeGuildExperimentBucket, revision)); if (z2) { experiment.getTrackExposure().mo1invoke(); } memoizeGuildExperiment(str, j, experiment); return experiment; } public final synchronized Experiment getMemoizedGuildExperiment$app_productionBetaRelease(String str, long j) { m.checkNotNullParameter(str, "experimentName"); return this.memoizedGuildExperiments.get(str + ':' + j); } public final Experiment getUserExperiment(String str, boolean z2) { m.checkNotNullParameter(str, "name"); long from = ExperimentHash.INSTANCE.from(str); Integer num = this.experimentOverridesSnapshot.get(str); UserExperimentDto userExperimentDto = this.userExperimentsSnapshot.get(Long.valueOf(from)); if (num != null) { return new Experiment(userExperimentDto != null ? userExperimentDto.getRevision() : 0, num.intValue(), userExperimentDto != null ? userExperimentDto.getPopulation() : 0, true, StoreExperiments$getUserExperiment$1.INSTANCE); } else if (userExperimentDto == null) { return null; } else { int bucket = userExperimentDto.getBucket(); int population = userExperimentDto.getPopulation(); int revision = userExperimentDto.getRevision(); Experiment experiment = new Experiment(revision, bucket, population, false, new StoreExperiments$getUserExperiment$experiment$1(this, str, bucket, population, revision)); if (z2) { experiment.getTrackExposure().mo1invoke(); } return experiment; } } @StoreThread public final void handleAuthToken(String str) { this.authToken = str; reset(); tryInitializeExperiments(); } @StoreThread public final void handleConnectionOpen(ModelPayload modelPayload) { m.checkNotNullParameter(modelPayload, "payload"); Map experiments = modelPayload.getExperiments(); m.checkNotNullExpressionValue(experiments, "payload.experiments"); handleLoadedUserExperiments(experiments, true); List guildExperiments = modelPayload.getGuildExperiments(); if (guildExperiments != null) { m.checkNotNullExpressionValue(guildExperiments, "it"); handleLoadedGuildExperiments(guildExperiments, true); } } @StoreThread public final void handleFingerprint(String str) { this.fingerprint = str; tryInitializeExperiments(); } @StoreThread public final void handlePreLogout() { StickerPickerFeatureFlag.Companion.getINSTANCE().clearCachedExperiment(); } @Override // com.discord.stores.Store @StoreThread public void init(Context context) { m.checkNotNullParameter(context, "context"); super.init(context); this.experimentTrackedExposureTimestamps.putAll(loadCachedExperimentTrackedExposureTimestamps()); this.experimentOverrides.putAll(this.experimentOverridesCache.get()); handleLoadedUserExperiments(this.userExperimentsCache.get(), false); handleLoadedGuildExperiments(this.guildExperimentsCache.get(), false); markChanged(this, ExperimentOverridesUpdateSource); } public final Observable isInitialized() { return ObservationDeck.connectRx$default(this.observationDeck, new ObservationDeck.UpdateSource[]{InitializedUpdateSource}, false, null, null, new StoreExperiments$isInitialized$1(this), 14, null); } public final Observable observeGuildExperiment(String str, long j, boolean z2) { m.checkNotNullParameter(str, "experimentName"); return ObservationDeck.connectRx$default(this.observationDeck, new ObservationDeck.UpdateSource[]{this}, false, null, null, new StoreExperiments$observeGuildExperiment$1(this, str, j, z2), 14, null); } public final Observable> observeOverrides() { return ObservationDeck.connectRx$default(this.observationDeck, new ObservationDeck.UpdateSource[]{ExperimentOverridesUpdateSource}, false, null, null, new StoreExperiments$observeOverrides$1(this), 14, null); } public final Observable observeUserExperiment(String str, boolean z2) { m.checkNotNullParameter(str, "name"); Observable r = ObservationDeck.connectRx$default(this.observationDeck, new ObservationDeck.UpdateSource[]{this}, false, null, null, new StoreExperiments$observeUserExperiment$1(this, str, z2), 14, null).r(); m.checkNotNullExpressionValue(r, "observationDeck.connectR… .distinctUntilChanged()"); return r; } public final void setOverride(String str, int i) { m.checkNotNullParameter(str, "experimentName"); this.dispatcher.schedule(new StoreExperiments$setOverride$1(this, i, str)); } @Override // com.discord.stores.StoreV2 @StoreThread public void snapshotData() { super.snapshotData(); this.userExperimentsSnapshot = new HashMap(this.userExperiments); this.guildExperimentsSnapshot = new HashMap(this.guildExperiments); if (getUpdateSources().contains(ExperimentOverridesUpdateSource)) { this.experimentOverridesSnapshot = new HashMap(this.experimentOverrides); this.experimentOverridesCache.set(this.experimentOverrides, true); } } }