Skip to content

Commit 0d2a5fb

Browse files
authored
Merge pull request #22 from lambiengcode/fix/crash-when-delete-conversation
Fix/crash when delete conversation
2 parents a7786b0 + 04f3515 commit 0d2a5fb

File tree

11 files changed

+99
-81
lines changed

11 files changed

+99
-81
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/models/GPTModel.kt

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,19 @@ package com.chatgptlite.wanted.models
22

33
enum class GPTModel(val model: String, val maxTokens: Int, val isChatCompletion: Boolean = false) {
44
gpt4("gpt-4", 8192, isChatCompletion = true),
5-
gpt4v0613("gpt-4-0613", 8192, isChatCompletion = true),
6-
gpt4p32k("gpt-4-32k", 32768, isChatCompletion = true),
7-
gpt4p32kv0613("gpt-4-32k-0613", 32768, isChatCompletion = true),
5+
gpt4o("gpt-4o", 4096, isChatCompletion = true),
6+
gpt4o20240513("gpt-4o-2024-05-13", 4096, isChatCompletion = true),
7+
gpt4turbo("gpt-4-turbo-2024-04-09", 4096, isChatCompletion = true),
8+
gpt4turbopreview("gpt-4-turbo-preview", 4096, isChatCompletion = true),
9+
gpt41106preview("gpt-4-1106-preview", 4096, isChatCompletion = true),
810
gpt35Turbo("gpt-3.5-turbo", 4096),
9-
davinci("text-davinci-003", 4096),
10-
curie("text-curie-001", 2048),
11-
babbage("text-babbage-001", 2048),
12-
ada("text-ada-001", 2048)
11+
12+
// Deprecated
13+
// gpt4v0613("gpt-4-0613", 8192, isChatCompletion = true),
14+
// gpt4p32k("gpt-4-32k", 32768, isChatCompletion = true),
15+
// gpt4p32kv0613("gpt-4-32k-0613", 32768, isChatCompletion = true),
16+
// davinci("text-davinci-003", 4096),
17+
// curie("text-curie-001", 2048),
18+
// babbage("text-babbage-001", 2048),
19+
// ada("text-ada-001", 2048)
1320
}

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

Lines changed: 9 additions & 15 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
@@ -69,14 +71,9 @@ fun AppDrawer(
6971
onNewChatClicked = onNewChatClicked,
7072
onIconClicked = onIconClicked,
7173
conversationViewModel = { conversationViewModel.newConversation() },
72-
deleteConversation = { text ->
74+
deleteConversation = { conversationId ->
7375
coroutineScope.launch {
74-
conversationViewModel.deleteConversation(text)
75-
}
76-
},
77-
deleteMessages = { text ->
78-
coroutineScope.launch {
79-
conversationViewModel.deleteMessages(text)
76+
conversationViewModel.deleteConversation(conversationId)
8077
}
8178
},
8279
onConversation = { conversationModel: ConversationModel ->
@@ -95,7 +92,6 @@ private fun AppDrawerIn(
9592
onIconClicked: () -> Unit,
9693
conversationViewModel: () -> Unit,
9794
deleteConversation: (String) -> Unit,
98-
deleteMessages: (String) -> Unit,
9995
onConversation: (ConversationModel) -> Unit,
10096
currentConversationState: String,
10197
conversationState: MutableList<ConversationModel>,
@@ -119,7 +115,6 @@ private fun AppDrawerIn(
119115
onChatClicked,
120116
deleteConversation,
121117
onConversation,
122-
deleteMessages,
123118
currentConversationState,
124119
conversationState
125120
)
@@ -191,7 +186,6 @@ private fun ColumnScope.HistoryConversations(
191186
onChatClicked: (String) -> Unit,
192187
deleteConversation: (String) -> Unit,
193188
onConversation: (ConversationModel) -> Unit,
194-
deleteMessages: (String) -> Unit,
195189
currentConversationState: String,
196190
conversationState: List<ConversationModel>
197191
) {
@@ -217,7 +211,6 @@ private fun ColumnScope.HistoryConversations(
217211
onDeleteClicked = {
218212
scope.launch {
219213
deleteConversation(conversationState[index].id)
220-
deleteMessages(conversationState[index].id)
221214
}
222215
}
223216
)
@@ -308,7 +301,7 @@ private fun RecycleChatItem(
308301
modifier = Modifier
309302
.height(56.dp)
310303
.fillMaxWidth()
311-
.padding(horizontal = 34.dp)
304+
.padding(horizontal = 30.dp)
312305
.clip(CircleShape)
313306
.then(background)
314307
.clickable(onClick = onChatClicked),
@@ -343,14 +336,16 @@ private fun RecycleChatItem(
343336
)
344337
Spacer(Modifier.weight(0.9f, true))
345338
Icon(
346-
imageVector = Icons.Filled.Delete,
339+
imageVector = Icons.Outlined.Delete,
347340
contentDescription = "Delete",
348341
tint = if (selected) {
349342
MaterialTheme.colorScheme.primary
350343
} else {
351344
MaterialTheme.colorScheme.onSurface
352345
},
353-
modifier = Modifier.clickable { onDeleteClicked() }
346+
modifier = Modifier.padding(
347+
end = 12.dp
348+
).clickable { onDeleteClicked() }
354349
)
355350
}
356351
}
@@ -406,7 +401,6 @@ fun PreviewAppDrawerIn(
406401
onIconClicked = {},
407402
conversationViewModel = {},
408403
deleteConversation = {},
409-
deleteMessages = {},
410404
conversationState = mutableListOf(),
411405
currentConversationState = String(),
412406
onConversation = { _: ConversationModel -> }

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

0 commit comments

Comments
 (0)