TP-58233 | Varun | Adding logs for chat messages (#10051)
Co-authored-by: Shivam Goyal <shivam.goyal@navi.com>
This commit is contained in:
@@ -14,7 +14,32 @@ import com.google.firebase.firestore.Query
|
||||
import com.navi.chat.db.utils.convertMapToJson
|
||||
import com.navi.chat.db.utils.transformFirestoreToWidgetModel
|
||||
import com.navi.chat.provider.MessageOperation
|
||||
import com.navi.chat.utils.NaviChatAnalytics
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.ADDED
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.ADDING_NEW_MESSAGE
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.DOCUMENT
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.DOCUMENT_ADDED_FROM_FIRESTORE
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.DOCUMENT_TYPE
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.ERROR_LISTENING_TO_FIRESTORE_CHANGES
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.LISTENER_ATTACHED_TO_FIRESTORE_SUCCESSFULLY
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.LISTEN_TO_CONTROLLER_WIDGET
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.LISTEN_TO_FIRESTORE_CLIENT_CHANGES
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.LISTEN_TO_FIRESTORE_FOR_MESSAGE_STATUS
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.LISTEN_TO_FIRESTORE_SERVER_CHANGES
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.MESSAGE_ADDED_TO_FIRESTORE
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.MODIFIED
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.NAVI_CHAT_WIDGET
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.NOT_ABLE_TO_ATTACH_LISTENER_TO_FIRESTORE
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.NOT_ABLE_TO_LISTEN_TO_FIRESTORE_CHANGES
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.PATH
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.PROCESSING_CONTROLLER_WIDGET
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.SUCCESS_LISTENING_TO_FIRESTORE_CHANGES
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.UPDATING_CLIENT_MESSAGE_RECEIPTS
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.UPDATING_TYPING_STATUS
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.WRITE_TO_FIRESTORE
|
||||
import com.navi.chat.utils.SOURCE
|
||||
import com.navi.chat.utils.TYPING_CUES_PATH_AGENT
|
||||
import com.navi.common.utils.ERROR
|
||||
import com.navi.naviwidgets.models.NaviChatWidget
|
||||
import com.navi.naviwidgets.models.response.*
|
||||
import com.navi.naviwidgets.utils.NAVI_CHAT_RT_CREATED_AT
|
||||
@@ -24,6 +49,7 @@ import timber.log.Timber
|
||||
class ChatFireStoreDatabase {
|
||||
|
||||
private var listenerToFirestoreChangesList = ArrayList<ListenerRegistration>()
|
||||
private val crmEventTracker = NaviChatAnalytics.naviChatAnalytics.CRM()
|
||||
|
||||
fun writeToFireStore(
|
||||
path: String,
|
||||
@@ -33,8 +59,36 @@ class ChatFireStoreDatabase {
|
||||
ChatFireStore.getFireStoreReference(path)
|
||||
.add(naviChatWidget)
|
||||
.addOnSuccessListener {
|
||||
crmEventTracker.sendEvent(
|
||||
MESSAGE_ADDED_TO_FIRESTORE,
|
||||
hashMapOf(
|
||||
NAVI_CHAT_WIDGET to naviChatWidget.toString(),
|
||||
PATH to path,
|
||||
SOURCE to WRITE_TO_FIRESTORE
|
||||
)
|
||||
)
|
||||
listenerToFirestoreChangesList.add(
|
||||
it.addSnapshotListener { value, _ ->
|
||||
it.addSnapshotListener { value, errorEx ->
|
||||
if (errorEx != null) {
|
||||
crmEventTracker.sendEvent(
|
||||
ERROR_LISTENING_TO_FIRESTORE_CHANGES,
|
||||
hashMapOf(
|
||||
NAVI_CHAT_WIDGET to naviChatWidget.toString(),
|
||||
PATH to path,
|
||||
ERROR to errorEx.toString(),
|
||||
SOURCE to WRITE_TO_FIRESTORE
|
||||
)
|
||||
)
|
||||
return@addSnapshotListener
|
||||
}
|
||||
crmEventTracker.sendEvent(
|
||||
SUCCESS_LISTENING_TO_FIRESTORE_CHANGES,
|
||||
hashMapOf(
|
||||
NAVI_CHAT_WIDGET to naviChatWidget.toString(),
|
||||
PATH to path,
|
||||
SOURCE to WRITE_TO_FIRESTORE
|
||||
)
|
||||
)
|
||||
value?.data?.let { data ->
|
||||
if (
|
||||
data[NAVI_CHAT_WIDGET_NAME] ==
|
||||
@@ -44,7 +98,14 @@ class ChatFireStoreDatabase {
|
||||
transformFirestoreToWidgetModel(data)
|
||||
)
|
||||
} else if (isWidgetExcluded(data[NAVI_CHAT_WIDGET_NAME] as String)) {
|
||||
Timber.d("Adding new msg from writeToFireStore")
|
||||
crmEventTracker.sendEvent(
|
||||
ADDING_NEW_MESSAGE,
|
||||
hashMapOf(
|
||||
NAVI_CHAT_WIDGET to naviChatWidget.toString(),
|
||||
PATH to path,
|
||||
SOURCE to WRITE_TO_FIRESTORE
|
||||
)
|
||||
)
|
||||
messageOperation.addNewMessage(
|
||||
transformFirestoreToWidgetModel(data)
|
||||
)
|
||||
@@ -54,41 +115,86 @@ class ChatFireStoreDatabase {
|
||||
)
|
||||
}
|
||||
.addOnFailureListener {
|
||||
Timber.e("Not able to add message $naviChatWidget to fire store")
|
||||
crmEventTracker.sendEvent(
|
||||
NOT_ABLE_TO_ATTACH_LISTENER_TO_FIRESTORE,
|
||||
hashMapOf(
|
||||
NAVI_CHAT_WIDGET to naviChatWidget.toString(),
|
||||
PATH to path,
|
||||
ERROR to it.toString(),
|
||||
SOURCE to WRITE_TO_FIRESTORE
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun listenToFirestoreClientChanges(path: String, messageOperation: MessageOperation) {
|
||||
ChatFireStore.getFireStoreReference(path).get().addOnSuccessListener {
|
||||
listenerToFirestoreChangesList.add(
|
||||
ChatFireStore.getFireStoreReference(path).addSnapshotListener { value, errorEx ->
|
||||
if (errorEx != null) {
|
||||
return@addSnapshotListener
|
||||
}
|
||||
ChatFireStore.getFireStoreReference(path)
|
||||
.get()
|
||||
.addOnSuccessListener {
|
||||
crmEventTracker.sendEvent(
|
||||
LISTENER_ATTACHED_TO_FIRESTORE_SUCCESSFULLY,
|
||||
hashMapOf(PATH to path, SOURCE to LISTEN_TO_FIRESTORE_CLIENT_CHANGES)
|
||||
)
|
||||
listenerToFirestoreChangesList.add(
|
||||
ChatFireStore.getFireStoreReference(path).addSnapshotListener { value, errorEx
|
||||
->
|
||||
if (errorEx != null) {
|
||||
crmEventTracker.sendEvent(
|
||||
ERROR_LISTENING_TO_FIRESTORE_CHANGES,
|
||||
hashMapOf(
|
||||
PATH to path,
|
||||
ERROR to errorEx.toString(),
|
||||
SOURCE to LISTEN_TO_FIRESTORE_CLIENT_CHANGES
|
||||
)
|
||||
)
|
||||
return@addSnapshotListener
|
||||
}
|
||||
crmEventTracker.sendEvent(
|
||||
SUCCESS_LISTENING_TO_FIRESTORE_CHANGES,
|
||||
hashMapOf(PATH to path, SOURCE to LISTEN_TO_FIRESTORE_CLIENT_CHANGES)
|
||||
)
|
||||
|
||||
value?.let {
|
||||
value.documentChanges.forEach { dc ->
|
||||
when (dc.type) {
|
||||
DocumentChange.Type.ADDED -> {}
|
||||
DocumentChange.Type.MODIFIED -> {
|
||||
if (
|
||||
(dc.document.data[NAVI_CHAT_WIDGET_NAME] ==
|
||||
NaviChatMessageWidget.WIDGET_NAME) ||
|
||||
value?.let {
|
||||
value.documentChanges.forEach { dc ->
|
||||
when (dc.type) {
|
||||
DocumentChange.Type.ADDED -> {}
|
||||
DocumentChange.Type.MODIFIED -> {
|
||||
if (
|
||||
(dc.document.data[NAVI_CHAT_WIDGET_NAME] ==
|
||||
NaviChatFileAttachmentWidget.WIDGET_NAME)
|
||||
) {
|
||||
messageOperation.updateMessageReceipts(
|
||||
transformFirestoreToWidgetModel(dc.document.data)
|
||||
)
|
||||
NaviChatMessageWidget.WIDGET_NAME) ||
|
||||
(dc.document.data[NAVI_CHAT_WIDGET_NAME] ==
|
||||
NaviChatFileAttachmentWidget.WIDGET_NAME)
|
||||
) {
|
||||
crmEventTracker.sendEvent(
|
||||
UPDATING_CLIENT_MESSAGE_RECEIPTS,
|
||||
hashMapOf(
|
||||
PATH to path,
|
||||
DOCUMENT to dc.document.data.toString(),
|
||||
DOCUMENT_TYPE to MODIFIED
|
||||
)
|
||||
)
|
||||
messageOperation.updateMessageReceipts(
|
||||
transformFirestoreToWidgetModel(dc.document.data)
|
||||
)
|
||||
}
|
||||
}
|
||||
DocumentChange.Type.REMOVED -> {}
|
||||
}
|
||||
DocumentChange.Type.REMOVED -> {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
.addOnFailureListener {
|
||||
crmEventTracker.sendEvent(
|
||||
NOT_ABLE_TO_ATTACH_LISTENER_TO_FIRESTORE,
|
||||
hashMapOf(
|
||||
PATH to path,
|
||||
ERROR to it.toString(),
|
||||
SOURCE to LISTEN_TO_FIRESTORE_CLIENT_CHANGES
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun listenToFirestoreChanges(
|
||||
@@ -100,6 +206,10 @@ class ChatFireStoreDatabase {
|
||||
.orderBy(NAVI_CHAT_RT_CREATED_AT, Query.Direction.ASCENDING)
|
||||
.get()
|
||||
.addOnSuccessListener {
|
||||
crmEventTracker.sendEvent(
|
||||
LISTENER_ATTACHED_TO_FIRESTORE_SUCCESSFULLY,
|
||||
hashMapOf(PATH to path, SOURCE to LISTEN_TO_FIRESTORE_SERVER_CHANGES)
|
||||
)
|
||||
listenerToFirestoreChangesList.add(
|
||||
if (latestMessageTimeStamp != null) {
|
||||
Timber.d("Latest timestamp is not null: $latestMessageTimeStamp")
|
||||
@@ -112,13 +222,37 @@ class ChatFireStoreDatabase {
|
||||
}
|
||||
.addSnapshotListener { value, errorEx ->
|
||||
if (errorEx != null) {
|
||||
crmEventTracker.sendEvent(
|
||||
ERROR_LISTENING_TO_FIRESTORE_CHANGES,
|
||||
hashMapOf(
|
||||
PATH to path,
|
||||
ERROR to errorEx.toString(),
|
||||
SOURCE to LISTEN_TO_FIRESTORE_SERVER_CHANGES
|
||||
)
|
||||
)
|
||||
return@addSnapshotListener
|
||||
}
|
||||
crmEventTracker.sendEvent(
|
||||
SUCCESS_LISTENING_TO_FIRESTORE_CHANGES,
|
||||
hashMapOf(
|
||||
PATH to path,
|
||||
SOURCE to LISTEN_TO_FIRESTORE_SERVER_CHANGES
|
||||
),
|
||||
)
|
||||
|
||||
value?.let {
|
||||
value.documentChanges.forEach { dc ->
|
||||
when (dc.type) {
|
||||
DocumentChange.Type.ADDED -> {
|
||||
crmEventTracker.sendEvent(
|
||||
DOCUMENT_ADDED_FROM_FIRESTORE,
|
||||
hashMapOf(
|
||||
PATH to path,
|
||||
DOCUMENT to dc.document.data.toString(),
|
||||
DOCUMENT_TYPE to ADDED,
|
||||
SOURCE to LISTEN_TO_FIRESTORE_SERVER_CHANGES
|
||||
)
|
||||
)
|
||||
messageOperation.updateServerMessageReceipts(
|
||||
dc.document.reference
|
||||
)
|
||||
@@ -148,6 +282,15 @@ class ChatFireStoreDatabase {
|
||||
dc.document.data[NAVI_CHAT_WIDGET_NAME] ==
|
||||
NaviChatControllerWidget.WIDGET_NAME
|
||||
) {
|
||||
crmEventTracker.sendEvent(
|
||||
PROCESSING_CONTROLLER_WIDGET,
|
||||
hashMapOf(
|
||||
PATH to path,
|
||||
DOCUMENT to dc.document.data.toString(),
|
||||
DOCUMENT_TYPE to ADDED,
|
||||
SOURCE to LISTEN_TO_FIRESTORE_SERVER_CHANGES
|
||||
)
|
||||
)
|
||||
messageOperation.processControllerWidget(
|
||||
convertMapToJson<NaviChatControllerWidget>(
|
||||
dc.document.data
|
||||
@@ -155,8 +298,14 @@ class ChatFireStoreDatabase {
|
||||
as NaviChatControllerWidget
|
||||
)
|
||||
} else {
|
||||
Timber.d(
|
||||
"Adding new msg from listenToFirestoreChanges"
|
||||
crmEventTracker.sendEvent(
|
||||
ADDING_NEW_MESSAGE,
|
||||
hashMapOf(
|
||||
PATH to path,
|
||||
DOCUMENT to dc.document.data.toString(),
|
||||
DOCUMENT_TYPE to ADDED,
|
||||
SOURCE to LISTEN_TO_FIRESTORE_SERVER_CHANGES
|
||||
)
|
||||
)
|
||||
messageOperation.addNewMessage(
|
||||
transformFirestoreToWidgetModel(
|
||||
@@ -173,98 +322,205 @@ class ChatFireStoreDatabase {
|
||||
}
|
||||
)
|
||||
}
|
||||
.addOnFailureListener {
|
||||
crmEventTracker.sendEvent(
|
||||
NOT_ABLE_TO_LISTEN_TO_FIRESTORE_CHANGES,
|
||||
hashMapOf(
|
||||
PATH to path,
|
||||
ERROR to it.toString(),
|
||||
SOURCE to LISTEN_TO_FIRESTORE_SERVER_CHANGES
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun listenToControllerWidget(
|
||||
path: String,
|
||||
messageOperation: MessageOperation,
|
||||
) {
|
||||
ChatFireStore.getFireStoreReference(path).get().addOnSuccessListener {
|
||||
listenerToFirestoreChangesList.add(
|
||||
ChatFireStore.getFireStoreReference(path).addSnapshotListener { value, errorEx ->
|
||||
if (errorEx != null) {
|
||||
return@addSnapshotListener
|
||||
}
|
||||
ChatFireStore.getFireStoreReference(path)
|
||||
.get()
|
||||
.addOnSuccessListener {
|
||||
crmEventTracker.sendEvent(
|
||||
LISTENER_ATTACHED_TO_FIRESTORE_SUCCESSFULLY,
|
||||
hashMapOf(PATH to path, SOURCE to LISTEN_TO_CONTROLLER_WIDGET)
|
||||
)
|
||||
listenerToFirestoreChangesList.add(
|
||||
ChatFireStore.getFireStoreReference(path).addSnapshotListener { value, errorEx
|
||||
->
|
||||
if (errorEx != null) {
|
||||
crmEventTracker.sendEvent(
|
||||
ERROR_LISTENING_TO_FIRESTORE_CHANGES,
|
||||
hashMapOf(
|
||||
PATH to path,
|
||||
ERROR to errorEx.toString(),
|
||||
SOURCE to LISTEN_TO_CONTROLLER_WIDGET
|
||||
)
|
||||
)
|
||||
return@addSnapshotListener
|
||||
}
|
||||
crmEventTracker.sendEvent(
|
||||
SUCCESS_LISTENING_TO_FIRESTORE_CHANGES,
|
||||
hashMapOf(PATH to path, SOURCE to LISTEN_TO_CONTROLLER_WIDGET)
|
||||
)
|
||||
|
||||
value?.let {
|
||||
value.documentChanges.forEach { dc ->
|
||||
when (dc.type) {
|
||||
DocumentChange.Type.ADDED -> {
|
||||
if (
|
||||
dc.document.data[NAVI_CHAT_WIDGET_NAME] ==
|
||||
NaviChatControllerWidget.WIDGET_NAME
|
||||
) {
|
||||
messageOperation.processControllerWidget(
|
||||
convertMapToJson<NaviChatControllerWidget>(
|
||||
dc.document.data
|
||||
value?.let {
|
||||
value.documentChanges.forEach { dc ->
|
||||
when (dc.type) {
|
||||
DocumentChange.Type.ADDED -> {
|
||||
if (
|
||||
dc.document.data[NAVI_CHAT_WIDGET_NAME] ==
|
||||
NaviChatControllerWidget.WIDGET_NAME
|
||||
) {
|
||||
crmEventTracker.sendEvent(
|
||||
PROCESSING_CONTROLLER_WIDGET,
|
||||
hashMapOf(
|
||||
PATH to path,
|
||||
DOCUMENT to dc.document.data.toString(),
|
||||
DOCUMENT_TYPE to ADDED,
|
||||
SOURCE to LISTEN_TO_CONTROLLER_WIDGET
|
||||
)
|
||||
)
|
||||
as NaviChatControllerWidget
|
||||
)
|
||||
}
|
||||
}
|
||||
DocumentChange.Type.MODIFIED -> {
|
||||
if (
|
||||
dc.document.data[NAVI_CHAT_WIDGET_NAME] ==
|
||||
NaviChatControllerWidget.WIDGET_NAME
|
||||
) {
|
||||
messageOperation.processControllerWidget(
|
||||
convertMapToJson<NaviChatControllerWidget>(
|
||||
dc.document.data
|
||||
messageOperation.processControllerWidget(
|
||||
convertMapToJson<NaviChatControllerWidget>(
|
||||
dc.document.data
|
||||
)
|
||||
as NaviChatControllerWidget
|
||||
)
|
||||
as NaviChatControllerWidget
|
||||
)
|
||||
}
|
||||
}
|
||||
DocumentChange.Type.MODIFIED -> {
|
||||
if (
|
||||
dc.document.data[NAVI_CHAT_WIDGET_NAME] ==
|
||||
NaviChatControllerWidget.WIDGET_NAME
|
||||
) {
|
||||
crmEventTracker.sendEvent(
|
||||
PROCESSING_CONTROLLER_WIDGET,
|
||||
hashMapOf(
|
||||
PATH to path,
|
||||
DOCUMENT to dc.document.data.toString(),
|
||||
DOCUMENT_TYPE to MODIFIED,
|
||||
SOURCE to LISTEN_TO_CONTROLLER_WIDGET
|
||||
)
|
||||
)
|
||||
messageOperation.processControllerWidget(
|
||||
convertMapToJson<NaviChatControllerWidget>(
|
||||
dc.document.data
|
||||
)
|
||||
as NaviChatControllerWidget
|
||||
)
|
||||
}
|
||||
}
|
||||
DocumentChange.Type.REMOVED -> {}
|
||||
}
|
||||
DocumentChange.Type.REMOVED -> {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
.addOnFailureListener {
|
||||
crmEventTracker.sendEvent(
|
||||
NOT_ABLE_TO_ATTACH_LISTENER_TO_FIRESTORE,
|
||||
hashMapOf(
|
||||
PATH to path,
|
||||
ERROR to it.toString(),
|
||||
SOURCE to LISTEN_TO_CONTROLLER_WIDGET
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun listenToFireStoreListenerForMessageStatus(
|
||||
path: String,
|
||||
messageOperation: MessageOperation
|
||||
) {
|
||||
ChatFireStore.getFireStoreReference(path).get().addOnSuccessListener {
|
||||
listenerToFirestoreChangesList.add(
|
||||
ChatFireStore.getFireStoreReference(path).addSnapshotListener { value, errorEx ->
|
||||
if (errorEx != null) {
|
||||
return@addSnapshotListener
|
||||
}
|
||||
ChatFireStore.getFireStoreReference(path)
|
||||
.get()
|
||||
.addOnSuccessListener {
|
||||
crmEventTracker.sendEvent(
|
||||
LISTENER_ATTACHED_TO_FIRESTORE_SUCCESSFULLY,
|
||||
hashMapOf(PATH to path, SOURCE to LISTEN_TO_FIRESTORE_FOR_MESSAGE_STATUS)
|
||||
)
|
||||
listenerToFirestoreChangesList.add(
|
||||
ChatFireStore.getFireStoreReference(path).addSnapshotListener { value, errorEx
|
||||
->
|
||||
if (errorEx != null) {
|
||||
crmEventTracker.sendEvent(
|
||||
ERROR_LISTENING_TO_FIRESTORE_CHANGES,
|
||||
hashMapOf(
|
||||
PATH to path,
|
||||
ERROR to errorEx.toString(),
|
||||
SOURCE to LISTEN_TO_FIRESTORE_FOR_MESSAGE_STATUS
|
||||
)
|
||||
)
|
||||
return@addSnapshotListener
|
||||
}
|
||||
crmEventTracker.sendEvent(
|
||||
SUCCESS_LISTENING_TO_FIRESTORE_CHANGES,
|
||||
hashMapOf(
|
||||
PATH to path,
|
||||
SOURCE to LISTEN_TO_FIRESTORE_FOR_MESSAGE_STATUS
|
||||
)
|
||||
)
|
||||
|
||||
value?.let {
|
||||
value.documentChanges.forEach { dc ->
|
||||
when (dc.type) {
|
||||
DocumentChange.Type.ADDED -> {
|
||||
if (dc.document.id == TYPING_CUES_PATH_AGENT) {
|
||||
messageOperation.updateTypingStatus(
|
||||
convertMapToJson<NaviChatTypingStatusWidget>(
|
||||
dc.document.data
|
||||
value?.let {
|
||||
value.documentChanges.forEach { dc ->
|
||||
when (dc.type) {
|
||||
DocumentChange.Type.ADDED -> {
|
||||
if (dc.document.id == TYPING_CUES_PATH_AGENT) {
|
||||
crmEventTracker.sendEvent(
|
||||
UPDATING_TYPING_STATUS,
|
||||
hashMapOf(
|
||||
PATH to path,
|
||||
DOCUMENT to dc.document.data.toString(),
|
||||
DOCUMENT_TYPE to ADDED,
|
||||
SOURCE to LISTEN_TO_FIRESTORE_FOR_MESSAGE_STATUS
|
||||
)
|
||||
)
|
||||
as NaviChatTypingStatusWidget
|
||||
)
|
||||
}
|
||||
}
|
||||
DocumentChange.Type.MODIFIED -> {
|
||||
if (dc.document.id == TYPING_CUES_PATH_AGENT) {
|
||||
messageOperation.updateTypingStatus(
|
||||
convertMapToJson<NaviChatTypingStatusWidget>(
|
||||
dc.document.data
|
||||
messageOperation.updateTypingStatus(
|
||||
convertMapToJson<NaviChatTypingStatusWidget>(
|
||||
dc.document.data
|
||||
)
|
||||
as NaviChatTypingStatusWidget
|
||||
)
|
||||
as NaviChatTypingStatusWidget
|
||||
)
|
||||
}
|
||||
}
|
||||
DocumentChange.Type.MODIFIED -> {
|
||||
if (dc.document.id == TYPING_CUES_PATH_AGENT) {
|
||||
crmEventTracker.sendEvent(
|
||||
UPDATING_TYPING_STATUS,
|
||||
hashMapOf(
|
||||
PATH to path,
|
||||
DOCUMENT to dc.document.data.toString(),
|
||||
DOCUMENT_TYPE to MODIFIED,
|
||||
SOURCE to LISTEN_TO_FIRESTORE_FOR_MESSAGE_STATUS
|
||||
)
|
||||
)
|
||||
messageOperation.updateTypingStatus(
|
||||
convertMapToJson<NaviChatTypingStatusWidget>(
|
||||
dc.document.data
|
||||
)
|
||||
as NaviChatTypingStatusWidget
|
||||
)
|
||||
}
|
||||
}
|
||||
DocumentChange.Type.REMOVED -> {}
|
||||
}
|
||||
DocumentChange.Type.REMOVED -> {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
.addOnFailureListener {
|
||||
crmEventTracker.sendEvent(
|
||||
NOT_ABLE_TO_LISTEN_TO_FIRESTORE_CHANGES,
|
||||
hashMapOf(
|
||||
PATH to path,
|
||||
ERROR to it.toString(),
|
||||
SOURCE to LISTEN_TO_FIRESTORE_FOR_MESSAGE_STATUS
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun removeFireStoreListener() {
|
||||
|
||||
@@ -76,13 +76,21 @@ import com.navi.chat.provider.MessageOperation
|
||||
import com.navi.chat.provider.firestore.FireStoreDataProvider
|
||||
import com.navi.chat.usecase.ChatAttachmentViewClickedUseCase
|
||||
import com.navi.chat.utils.*
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.ADDING_AGENT_OR_CUSTOMER_MESSAGE_TO_CHAT_ADAPTER
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.ADDING_BOT_MESSAGE_TO_CHAT_ADAPTER
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.ADDING_NEW_MESSAGE_TO_CHAT_ADAPTER
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.CHAT_DEEPLINK_CLICK
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.CHAT_MESSAGE
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.CHAT_MESSAGE_WIDGET_WITH_RECEIPTS_NOT_NULL
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.EXISTING_CHAT_TRIGGERED
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.INSERTING_NEW_MESSAGE_TO_CHAT_ADAPTER
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.NAVI_CHAT_WIDGET
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.NETWORK_AVAILABLE_IN_CHAT
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.NETWORK_UNAVAILABLE_IN_CHAT
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.NEW_CHAT_TRIGGERED
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.SEND_BUTTON_CLICK
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.UPDATE_SERVER_MESSAGE_RECEIPTS
|
||||
import com.navi.chat.utils.NaviChatAnalytics.Companion.WRITE_USER_MESSAGE_TO_FIRESTORE
|
||||
import com.navi.chat.viewmodels.AttachmentPickerViewModel
|
||||
import com.navi.chat.viewmodels.NaviChatSharedViewModel
|
||||
import com.navi.chat.viewmodels.NaviChatViewModel
|
||||
@@ -874,6 +882,10 @@ class NaviChatFragment : BaseFragment(), WidgetCallback, MessageOperation, Toolb
|
||||
readResponse: Boolean = false
|
||||
) {
|
||||
if (::chatDataProvider.isInitialized) {
|
||||
crmEventTracker.sendEvent(
|
||||
WRITE_USER_MESSAGE_TO_FIRESTORE,
|
||||
hashMapOf(CONVERSATION_ID to conversationId.toString(), CHAT_MESSAGE to message)
|
||||
)
|
||||
chatDataProvider.writeMessage(
|
||||
formPlainTextNewMessage(
|
||||
metaData = metaData,
|
||||
@@ -1126,6 +1138,13 @@ class NaviChatFragment : BaseFragment(), WidgetCallback, MessageOperation, Toolb
|
||||
doc.get().addOnSuccessListener {
|
||||
if (it != null && it.data?.containsKey(NAVI_CHAT_RECEIPTS) == false) {
|
||||
doc.update(updateData)
|
||||
crmEventTracker.sendEvent(
|
||||
UPDATE_SERVER_MESSAGE_RECEIPTS,
|
||||
hashMapOf(
|
||||
CONVERSATION_ID to conversationId.toString(),
|
||||
NAVI_CHAT_RECEIPTS to updateData.toString()
|
||||
)
|
||||
)
|
||||
} else {
|
||||
val receipts = it.data?.get(NAVI_CHAT_RECEIPTS) as? Map<*, *>
|
||||
if (receipts != null && receipts.containsKey(READ_AUDIT)) {
|
||||
@@ -1254,8 +1273,23 @@ class NaviChatFragment : BaseFragment(), WidgetCallback, MessageOperation, Toolb
|
||||
widgetModel is NaviChatMessageWidget &&
|
||||
widgetModel.receipts != null
|
||||
) {
|
||||
crmEventTracker.sendEvent(
|
||||
CHAT_MESSAGE_WIDGET_WITH_RECEIPTS_NOT_NULL,
|
||||
hashMapOf(
|
||||
CONVERSATION_ID to conversationId.toString(),
|
||||
NAVI_CHAT_WIDGET to widgetModel.toString(),
|
||||
NAVI_CHAT_RECEIPTS to widgetModel.receipts.toString(),
|
||||
)
|
||||
)
|
||||
return
|
||||
}
|
||||
crmEventTracker.sendEvent(
|
||||
ADDING_NEW_MESSAGE_TO_CHAT_ADAPTER,
|
||||
hashMapOf(
|
||||
CONVERSATION_ID to conversationId.toString(),
|
||||
NAVI_CHAT_WIDGET to widgetModel.toString()
|
||||
)
|
||||
)
|
||||
|
||||
hideActionItemListIfNotReminder(widgetModel)
|
||||
|
||||
@@ -1268,6 +1302,13 @@ class NaviChatFragment : BaseFragment(), WidgetCallback, MessageOperation, Toolb
|
||||
}
|
||||
|
||||
if (widgetModel.senderType.equals(BOT, true)) {
|
||||
crmEventTracker.sendEvent(
|
||||
ADDING_BOT_MESSAGE_TO_CHAT_ADAPTER,
|
||||
hashMapOf(
|
||||
CONVERSATION_ID to conversationId.toString(),
|
||||
NAVI_CHAT_WIDGET to widgetModel.toString()
|
||||
)
|
||||
)
|
||||
if (
|
||||
widgetModel.widgetNameForBaseAdapter != NaviChatConversationStatusWidget.WIDGET_NAME
|
||||
) {
|
||||
@@ -1295,6 +1336,13 @@ class NaviChatFragment : BaseFragment(), WidgetCallback, MessageOperation, Toolb
|
||||
insertItemAtIndexAndSetTimeStamp(0, widgetModel)
|
||||
}
|
||||
} else {
|
||||
crmEventTracker.sendEvent(
|
||||
ADDING_AGENT_OR_CUSTOMER_MESSAGE_TO_CHAT_ADAPTER,
|
||||
hashMapOf(
|
||||
CONVERSATION_ID to conversationId.toString(),
|
||||
NAVI_CHAT_WIDGET to widgetModel.toString(),
|
||||
)
|
||||
)
|
||||
if (
|
||||
chatRVAdapter.list.isNotEmpty() &&
|
||||
chatRVAdapter.list[0] is NaviChatTypingStatusWidget
|
||||
@@ -1311,6 +1359,13 @@ class NaviChatFragment : BaseFragment(), WidgetCallback, MessageOperation, Toolb
|
||||
widgetModel: NaviChatWidget,
|
||||
scrollWithoutDelay: Boolean? = false
|
||||
) {
|
||||
crmEventTracker.sendEvent(
|
||||
INSERTING_NEW_MESSAGE_TO_CHAT_ADAPTER,
|
||||
hashMapOf(
|
||||
CONVERSATION_ID to conversationId.toString(),
|
||||
NAVI_CHAT_WIDGET to widgetModel.toString()
|
||||
)
|
||||
)
|
||||
if (naviChatViewModel.latestMessageTimeStamp != null) {
|
||||
if (
|
||||
!naviChatViewModel.getDividerShown() &&
|
||||
@@ -1328,6 +1383,13 @@ class NaviChatFragment : BaseFragment(), WidgetCallback, MessageOperation, Toolb
|
||||
private fun addBotMessageListToAdapterAndHideTypingStatus() {
|
||||
showHideTypingStatus(false)
|
||||
for (message in botMessageList) {
|
||||
crmEventTracker.sendEvent(
|
||||
INSERTING_NEW_MESSAGE_TO_CHAT_ADAPTER,
|
||||
hashMapOf(
|
||||
CONVERSATION_ID to conversationId.toString(),
|
||||
NAVI_CHAT_WIDGET to message.toString()
|
||||
)
|
||||
)
|
||||
chatRVAdapter.insertNewItemAtIndex(0, message)
|
||||
scrollChatToLatestMessageReceived()
|
||||
}
|
||||
|
||||
@@ -113,6 +113,42 @@ class NaviChatAnalytics private constructor() {
|
||||
const val FAQ_SEARCHED_WITH_RESULTS = "faq_searched_with_results"
|
||||
const val FAQ_SEARCHED_WITH_NO_RESULTS = "faq_searched_no_results"
|
||||
const val FAQ_SEARCH_QUERY_TEXT = "faq_search_query_text"
|
||||
const val PATH = "path"
|
||||
const val ERROR = "error"
|
||||
const val DOCUMENT = "document"
|
||||
const val DOCUMENT_TYPE = "document_type"
|
||||
const val ADDED = "added"
|
||||
const val MODIFIED = "modified"
|
||||
const val NAVI_CHAT_WIDGET = "navi_chat_widget"
|
||||
const val WRITE_TO_FIRESTORE = "write_to_firestore"
|
||||
const val LISTEN_TO_FIRESTORE_SERVER_CHANGES = "listen_to_firestore_server_changes"
|
||||
const val LISTEN_TO_FIRESTORE_CLIENT_CHANGES = "listen_to_firestore_client_changes"
|
||||
const val LISTEN_TO_CONTROLLER_WIDGET = "listen_to_controller_widget"
|
||||
const val LISTEN_TO_FIRESTORE_FOR_MESSAGE_STATUS = "listen_to_firestore_for_message_status"
|
||||
const val WRITE_USER_MESSAGE_TO_FIRESTORE = "write_user_message_to_firestore"
|
||||
const val MESSAGE_ADDED_TO_FIRESTORE =
|
||||
"Message added to Firestore successfully from writeToFireStore"
|
||||
const val LISTENER_ATTACHED_TO_FIRESTORE_SUCCESSFULLY =
|
||||
"Listener attached to Firestore successfully"
|
||||
const val NOT_ABLE_TO_ATTACH_LISTENER_TO_FIRESTORE =
|
||||
"Not able to attach listener to Firestore"
|
||||
const val SUCCESS_LISTENING_TO_FIRESTORE_CHANGES = "Success listening to Firestore changes"
|
||||
const val ERROR_LISTENING_TO_FIRESTORE_CHANGES = "Error listening to Firestore changes"
|
||||
const val NOT_ABLE_TO_LISTEN_TO_FIRESTORE_CHANGES =
|
||||
"Not able to listen to Firestore changes"
|
||||
const val UPDATING_CLIENT_MESSAGE_RECEIPTS = "Updating client message receipts"
|
||||
const val UPDATING_TYPING_STATUS = "Updating typing status"
|
||||
const val PROCESSING_CONTROLLER_WIDGET = "Processing controller widget"
|
||||
const val ADDING_NEW_MESSAGE = "Adding new message"
|
||||
const val DOCUMENT_ADDED_FROM_FIRESTORE = "Document added from Firestore"
|
||||
const val UPDATE_SERVER_MESSAGE_RECEIPTS = "Update server message receipts"
|
||||
const val CHAT_MESSAGE_WIDGET_WITH_RECEIPTS_NOT_NULL =
|
||||
"Chat message widget with receipts not null"
|
||||
const val ADDING_NEW_MESSAGE_TO_CHAT_ADAPTER = "Adding new message to chat adapter"
|
||||
const val ADDING_BOT_MESSAGE_TO_CHAT_ADAPTER = "Adding bot message to chat adapter"
|
||||
const val ADDING_AGENT_OR_CUSTOMER_MESSAGE_TO_CHAT_ADAPTER =
|
||||
"Adding agent or customer message to chat adapter"
|
||||
const val INSERTING_NEW_MESSAGE_TO_CHAT_ADAPTER = "Inserting new message to chat adapter"
|
||||
|
||||
val naviChatAnalytics: NaviChatAnalytics by lazy { Holder.INSTANCE }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user