Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix: Don't retry IAM display if 410 is received from backend #2158

Merged
merged 3 commits into from
Aug 5, 2024
Merged
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ internal class InAppMessagesManager(

// IAMs loaded remotely from on_session
// If on_session won't be called this will be loaded from cache
private var messages: List<InAppMessage> = listOf()
private var messages: MutableList<InAppMessage> = mutableListOf()

// IAMs that have been dismissed by the user
// This mean they have already displayed to the user
Expand All @@ -106,6 +106,8 @@ internal class InAppMessagesManager(
private val fetchIAMMutex = Mutex()
private var lastTimeFetchedIAMs: Long? = null

private val lock = Any()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like this lock is only for synchronizing 'messages'. In this case we can just call 'synchronized(messages)' instead of introducing a temp lock instance.


override var paused: Boolean
get() = _state.paused
set(value) {
Expand Down Expand Up @@ -255,7 +257,7 @@ internal class InAppMessagesManager(
val newMessages = _backend.listInAppMessages(appId, subscriptionId)

if (newMessages != null) {
this.messages = newMessages
this.messages = newMessages as MutableList<InAppMessage>
evaluateInAppMessages()
}
}
Expand All @@ -265,16 +267,22 @@ internal class InAppMessagesManager(
*/
private suspend fun evaluateInAppMessages() {
Logging.debug("InAppMessagesManager.evaluateInAppMessages()")

for (message in messages) {
// Make trigger evaluation first, dynamic trigger might change "trigger changed" flag value for redisplay messages
if (_triggerController.evaluateMessageTriggers(message)) {
setDataForRedisplay(message)
if (!dismissedMessages.contains(message.messageId) && !message.isFinished) {
queueMessageForDisplay(message)
val messagesToQueue = mutableListOf<InAppMessage>()

synchronized(lock) {
for (message in messages) {
if (_triggerController.evaluateMessageTriggers(message)) {
setDataForRedisplay(message)
if (!dismissedMessages.contains(message.messageId) && !message.isFinished) {
messagesToQueue.add(message)
}
}
}
}

for (message in messagesToQueue) {
queueMessageForDisplay(message)
}
}

/**
Expand Down Expand Up @@ -390,6 +398,7 @@ internal class InAppMessagesManager(
queueMessageForDisplay(messageToDisplay!!)
} else if (result == false) {
_state.inAppMessageIdShowing = null
messages.remove(messageToDisplay)
messageWasDismissed(messageToDisplay!!, true)
}
}
Expand Down Expand Up @@ -457,13 +466,17 @@ internal class InAppMessagesManager(
newTriggersKeys: Collection<String>,
isNewTriggerAdded: Boolean,
) {
for (message in messages) {
val isMessageDisplayed = redisplayedInAppMessages.contains(message)
val isTriggerOnMessage = _triggerController.isTriggerOnMessage(message, newTriggersKeys)
val isOnlyDynamicTriggers = _triggerController.messageHasOnlyDynamicTriggers(message)
if (!message.isTriggerChanged && isMessageDisplayed && (isTriggerOnMessage || isNewTriggerAdded && isOnlyDynamicTriggers)) {
Logging.debug("InAppMessagesManager.makeRedisplayMessagesAvailableWithTriggers: Trigger changed for message: $message")
message.isTriggerChanged = true
synchronized(lock) {
for (message in messages) {
val isMessageDisplayed = redisplayedInAppMessages.contains(message)
val isTriggerOnMessage =
_triggerController.isTriggerOnMessage(message, newTriggersKeys)
val isOnlyDynamicTriggers =
_triggerController.messageHasOnlyDynamicTriggers(message)
if (!message.isTriggerChanged && isMessageDisplayed && (isTriggerOnMessage || isNewTriggerAdded && isOnlyDynamicTriggers)) {
Logging.debug("InAppMessagesManager.makeRedisplayMessagesAvailableWithTriggers: Trigger changed for message: $message")
message.isTriggerChanged = true
}
}
}
}
Expand Down
Loading