Skip to content

Commit 1353c5d

Browse files
committed
fix: crash when delete conversation
1 parent af64b7f commit 1353c5d

File tree

10 files changed

+84
-64
lines changed

10 files changed

+84
-64
lines changed

.idea/appInsightsSettings.xml

Lines changed: 45 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/deploymentTargetDropDown.xml

Lines changed: 5 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/gradle.xml

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/migrations.xml

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/vcs.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/src/main/java/com/chatgptlite/wanted/data/remote/ConversationRepositoryImpl.kt

Lines changed: 9 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
11
package com.chatgptlite.wanted.data.remote
22

3-
import android.content.ContentValues
4-
import android.util.Log
53
import com.chatgptlite.wanted.constants.conversationCollection
6-
import com.chatgptlite.wanted.helpers.DataHolder
74
import com.chatgptlite.wanted.models.ConversationModel
8-
import com.google.firebase.firestore.FieldValue
95
import com.google.firebase.firestore.FirebaseFirestore
106
import com.google.firebase.firestore.Query
11-
import com.google.firebase.firestore.QuerySnapshot
127
import kotlinx.coroutines.tasks.await
138
import javax.inject.Inject
149

@@ -35,42 +30,18 @@ class ConversationRepositoryImpl @Inject constructor(
3530
}
3631

3732
override suspend fun deleteConversation(conversationId: String) {
38-
var desiredKey: String? = null
39-
40-
getFireBaseSnapShot().documents.map { documentSnapshot ->
41-
val id = documentSnapshot.getString("id")
42-
if (id == conversationId) {
43-
desiredKey = documentSnapshot.id
44-
} else {
45-
null
46-
}
47-
}
48-
DataHolder.docPath = desiredKey.toString()
49-
50-
val docRef = fsInstance
33+
fsInstance
5134
.collection("conversations")
52-
.document(DataHolder.docPath)
53-
54-
// Remove the 'capital' field from the document
55-
val updates = hashMapOf<String, Any>(
56-
"id" to FieldValue.delete(),
57-
"title" to FieldValue.delete(),
58-
"createdAt" to FieldValue.delete()
59-
)
60-
docRef.update(updates)
61-
.addOnSuccessListener {
62-
Log.d(
63-
ContentValues.TAG,
64-
"DocumentSnapshot successfully deleted from message!"
65-
)
66-
}
67-
.addOnFailureListener { e ->
68-
Log.w(
69-
ContentValues.TAG,
70-
"Error deleting document", e
71-
)
35+
.whereEqualTo("id", conversationId)
36+
.get()
37+
.addOnSuccessListener { res ->
38+
res.documents.forEach { doc ->
39+
// Use the collection and document ID to form the correct path
40+
fsInstance.collection("conversations").document(doc.id).delete()
41+
}
7242
}
7343
}
44+
7445
private suspend fun getFireBaseSnapShot() =
7546
fsInstance.collection(conversationCollection)
7647
.orderBy("createdAt", Query.Direction.DESCENDING).get().await()

app/src/main/java/com/chatgptlite/wanted/data/remote/OpenAIRepositoryImpl.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import org.json.JSONObject
1414
import javax.inject.Inject
1515

1616

17-
@Suppress("UNREACHABLE_CODE")
1817
class OpenAIRepositoryImpl @Inject constructor(
1918
private val openAIApi: OpenAIApi,
2019
) : OpenAIRepository {

app/src/main/java/com/chatgptlite/wanted/ui/common/AppDrawer.kt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ import androidx.compose.foundation.shape.RoundedCornerShape
2424
import androidx.compose.material.icons.Icons
2525
import androidx.compose.material.icons.filled.*
2626
import androidx.compose.material.icons.outlined.AddComment
27+
import androidx.compose.material.icons.outlined.Delete
28+
import androidx.compose.material.icons.outlined.Message
2729
import androidx.compose.material3.Divider
2830
import androidx.compose.material3.Icon
2931
import androidx.compose.material3.IconButton
@@ -158,7 +160,7 @@ private fun ColumnScope.HistoryConversations(
158160
items(conversations.size) { index ->
159161
RecycleChatItem(
160162
text = conversations[index].title,
161-
Icons.Filled.Message,
163+
Icons.Outlined.Message,
162164
selected = conversations[index].id == conversationId,
163165
onChatClicked = {
164166
onChatClicked(conversations[index].id)
@@ -170,7 +172,6 @@ private fun ColumnScope.HistoryConversations(
170172
onDeleteClicked = {
171173
scope.launch {
172174
conversationViewModel.deleteConversation(conversations[index].id)
173-
conversationViewModel.deleteMessages(conversations[index].id)
174175
}
175176
}
176177
)
@@ -260,7 +261,7 @@ private fun RecycleChatItem(
260261
modifier = Modifier
261262
.height(56.dp)
262263
.fillMaxWidth()
263-
.padding(horizontal = 34.dp)
264+
.padding(horizontal = 30.dp)
264265
.clip(CircleShape)
265266
.then(background)
266267
.clickable(onClick = onChatClicked),
@@ -293,14 +294,16 @@ private fun RecycleChatItem(
293294
)
294295
Spacer(Modifier.weight(0.9f, true))
295296
Icon(
296-
imageVector = Icons.Filled.Delete,
297+
imageVector = Icons.Outlined.Delete,
297298
contentDescription = "Delete",
298299
tint = if (selected) {
299300
MaterialTheme.colorScheme.primary
300301
} else {
301302
MaterialTheme.colorScheme.onSurface
302303
},
303-
modifier = Modifier.clickable { onDeleteClicked() }
304+
modifier = Modifier.padding(
305+
end = 12.dp
306+
).clickable { onDeleteClicked() }
304307
)
305308
}
306309
}

app/src/main/java/com/chatgptlite/wanted/ui/conversations/ConversationViewModel.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -181,21 +181,20 @@ class ConversationViewModel @Inject constructor(
181181
return response.toList()
182182
}
183183

184-
fun deleteMessages(conversationId: String) {
184+
suspend fun deleteConversation(conversationId: String) {
185+
// Delete remote
186+
conversationRepo.deleteConversation(conversationId)
185187

188+
// Delete local
186189
val conversations: MutableList<ConversationModel> = _conversations.value.toMutableList()
187190
val conversationToRemove = conversations.find { it.id == conversationId }
188191

189192
if (conversationToRemove != null) {
190193
conversations.remove(conversationToRemove)
191194
_conversations.value = conversations
192195
}
193-
messageRepo.deleteMessage()
194196
}
195197

196-
suspend fun deleteConversation(conversationId: String) =
197-
conversationRepo.deleteConversation(conversationId)
198-
199198
private suspend fun fetchMessages() {
200199
if (_currentConversation.value.isEmpty() ||
201200
_messages.value[_currentConversation.value] != null) return

screenshots/demo_chatgpt_lite.gif

-5.66 MB
Binary file not shown.

0 commit comments

Comments
 (0)