impl marcel suggestions + adding deleting cache option

Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
This commit is contained in:
rapterjet2004 2024-10-07 10:26:01 -05:00 committed by Marcel Hibbe
parent 9bdaf68232
commit df2c6cfc06
No known key found for this signature in database
GPG Key ID: C793F8B59F43CE7B
7 changed files with 50 additions and 23 deletions

View File

@ -12,6 +12,7 @@ import android.util.Log
import android.view.View
import androidx.core.content.res.ResourcesCompat
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import autodagger.AutoInjector
import coil.load
import com.nextcloud.android.common.ui.theme.utils.ColorRole
@ -68,6 +69,8 @@ class TemporaryMessageViewHolder(outgoingView: View, payload: Any) :
)
)
binding.messageEdit.visibility = View.VISIBLE
binding.messageEdit.requestFocus()
ViewCompat.getWindowInsetsController(binding.root)?.show(WindowInsetsCompat.Type.ime())
binding.messageEdit.setText(binding.messageText.text)
binding.messageText.visibility = View.GONE
} else {

View File

@ -670,7 +670,7 @@ class ChatActivity :
TAG,
"currentConversation was null in observer ChatViewModel.GetCapabilitiesInitialLoadState"
)
messageInputViewModel.getTempMessagesFromMessageQueue(roomToken)
messageInputViewModel.getTempMessagesFromMessageQueue(currentConversation!!.internalId)
}
}
@ -3670,13 +3670,15 @@ class ChatActivity :
}
override fun editTemporaryMessage(id: Int, newMessage: String) {
messageInputViewModel.editQueuedMessage(roomToken, id, newMessage)
messageInputViewModel.editQueuedMessage(currentConversation!!.internalId, id, newMessage)
adapter?.notifyDataSetChanged() // TODO optimize this
// TODO disable messageInput cursor and have cursor active in the message with keyboard out - from marcel
}
override fun deleteTemporaryMessage(id: Int) {
messageInputViewModel.removeFromQueue(roomToken, id)
messageInputViewModel.removeFromQueue(currentConversation!!.internalId, id)
var i = 0
val max = messageInputViewModel.messageQueueSizeFlow.value?.plus(1)
for (item in adapter?.items!!) {

View File

@ -143,7 +143,7 @@ class MessageInputFragment : Fragment() {
override fun onResume() {
super.onResume()
chatActivity.messageInputViewModel.restoreMessageQueue(chatActivity.roomToken)
chatActivity.messageInputViewModel.restoreMessageQueue(chatActivity.currentConversation!!.internalId)
}
override fun onDestroyView() {
@ -245,7 +245,7 @@ class MessageInputFragment : Fragment() {
if (isOnline) {
chatActivity.messageInputViewModel.switchToMessageQueue(false)
chatActivity.messageInputViewModel.sendAndEmptyMessageQueue(
chatActivity.roomToken,
chatActivity.currentConversation!!.internalId,
chatActivity.conversationUser!!.getCredentials(),
ApiUtils.getUrlForChat(
chatActivity.chatApiVersion,
@ -794,7 +794,7 @@ class MessageInputFragment : Fragment() {
private fun sendMessage(message: CharSequence, replyTo: Int?, sendWithoutNotification: Boolean) {
chatActivity.messageInputViewModel.sendChatMessage(
chatActivity.roomToken,
chatActivity.currentConversation!!.internalId,
chatActivity.conversationUser!!.getCredentials(),
ApiUtils.getUrlForChat(
chatActivity.chatApiVersion,

View File

@ -131,7 +131,7 @@ class MessageInputViewModel @Inject constructor(
@Suppress("LongParameterList")
fun sendChatMessage(
roomToken: String,
internalId: String,
credentials: String,
url: String,
message: CharSequence,
@ -142,10 +142,12 @@ class MessageInputViewModel @Inject constructor(
if (isQueueing) {
val tempID = System.currentTimeMillis().toInt()
val qMsg = QueuedMessage(tempID, message, displayName, replyTo, sendWithoutNotification)
messageQueue = dataStore.getMessageQueue(roomToken)
messageQueue = dataStore.getMessageQueue(internalId)
messageQueue.add(qMsg)
dataStore.saveMessageQueue(roomToken, messageQueue)
dataStore.saveMessageQueue(internalId, messageQueue)
_messageQueueSizeFlow.update { messageQueue.size }
val id = internalId.substringBefore('@')
dataStore.deleteAllMessageQueuesFor(id)
_messageQueueFlow.postValue(listOf(qMsg))
return
}
@ -251,16 +253,16 @@ class MessageInputViewModel @Inject constructor(
_getRecordingTime.postValue(time)
}
fun sendAndEmptyMessageQueue(roomToken: String, credentials: String, url: String) {
fun sendAndEmptyMessageQueue(internalId: String, credentials: String, url: String) {
if (isQueueing) return
messageQueue.clear()
val queue = dataStore.getMessageQueue(roomToken)
dataStore.saveMessageQueue(roomToken, null) // empties the queue
val queue = dataStore.getMessageQueue(internalId)
dataStore.saveMessageQueue(internalId, null) // empties the queue
while (queue.size > 0) {
val msg = queue.removeAt(0)
sendChatMessage(
roomToken,
internalId,
credentials,
url,
msg.message!!,
@ -273,8 +275,8 @@ class MessageInputViewModel @Inject constructor(
_messageQueueSizeFlow.tryEmit(0)
}
fun getTempMessagesFromMessageQueue(roomToken: String) {
val queue = dataStore.getMessageQueue(roomToken)
fun getTempMessagesFromMessageQueue(internalId: String) {
val queue = dataStore.getMessageQueue(internalId)
val list = mutableListOf<QueuedMessage>()
for (msg in queue) {
Log.d("Julius", "Msg: ${msg.message}")
@ -287,32 +289,32 @@ class MessageInputViewModel @Inject constructor(
isQueueing = shouldQueue
}
fun restoreMessageQueue(roomToken: String) {
messageQueue = dataStore.getMessageQueue(roomToken)
fun restoreMessageQueue(internalId: String) {
messageQueue = dataStore.getMessageQueue(internalId)
_messageQueueSizeFlow.tryEmit(messageQueue.size)
}
fun removeFromQueue(roomToken: String, id: Int) {
val queue = dataStore.getMessageQueue(roomToken)
fun removeFromQueue(internalId: String, id: Int) {
val queue = dataStore.getMessageQueue(internalId)
for (qMsg in queue) {
if (qMsg.id == id) {
queue.remove(qMsg)
break
}
}
dataStore.saveMessageQueue(roomToken, queue)
dataStore.saveMessageQueue(internalId, queue)
_messageQueueSizeFlow.tryEmit(queue.size)
}
fun editQueuedMessage(roomToken: String, id: Int, newMessage: String) {
val queue = dataStore.getMessageQueue(roomToken)
fun editQueuedMessage(internalId: String, id: Int, newMessage: String) {
val queue = dataStore.getMessageQueue(internalId)
for (qMsg in queue) {
if (qMsg.id == id) {
qMsg.message = newMessage
break
}
}
dataStore.saveMessageQueue(roomToken, queue)
dataStore.saveMessageQueue(internalId, queue)
}
companion object {

View File

@ -25,6 +25,7 @@ import com.nextcloud.talk.models.json.generic.GenericOverall;
import com.nextcloud.talk.models.json.push.PushConfigurationState;
import com.nextcloud.talk.users.UserManager;
import com.nextcloud.talk.utils.ApiUtils;
import com.nextcloud.talk.utils.preferences.AppPreferences;
import com.nextcloud.talk.webrtc.WebSocketConnectionHelper;
import java.net.CookieManager;
@ -53,6 +54,8 @@ public class AccountRemovalWorker extends Worker {
@Inject ArbitraryStorageManager arbitraryStorageManager;
@Inject AppPreferences appPreferences;
@Inject Retrofit retrofit;
@Inject OkHttpClient okHttpClient;
@ -193,6 +196,7 @@ public class AccountRemovalWorker extends Worker {
if (user.getId() != null) {
String username = user.getUsername();
try {
// appPreferences.deleteAllMessageQueuesFor(user.getUserId()); // TODO uncomment this when done
userManager.deleteUser(user.getId());
Log.d(TAG, "deleted user: " + username);
} catch (Throwable e) {

View File

@ -176,6 +176,8 @@ public interface AppPreferences {
List<MessageInputViewModel.QueuedMessage> getMessageQueue(String internalConversationId);
void deleteAllMessageQueuesFor(String userId);
void clear();
}

View File

@ -524,6 +524,20 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
return queue
}
override fun deleteAllMessageQueuesFor(userId: String) {
runBlocking {
async {
val preferencesMap = context.dataStore.data.first().asMap()
for (preference in preferencesMap) {
if (preference.key.name.contains("$userId@")) {
Log.d("Julius", "found: ${preference.key} :\n ${preference.value}\n")
// TODO remove it somehow
}
}
}
}
}
override fun clear() {}
private suspend fun writeString(key: String, value: String) =