Synched message handling
This commit is contained in:
@ -7,12 +7,13 @@ class Message(val aor: String, val peerUri: String, val message: String, val tim
|
|||||||
var new: Boolean): Serializable {
|
var new: Boolean): Serializable {
|
||||||
|
|
||||||
fun add() {
|
fun add() {
|
||||||
val updatedMessages = BaresipService.messages.toMutableList()
|
val updatedMessages = synchronized(BaresipService.messages) {
|
||||||
|
BaresipService.messages.toMutableList()
|
||||||
|
}
|
||||||
updatedMessages.add(this)
|
updatedMessages.add(this)
|
||||||
BaresipService.messages = updatedMessages.toList()
|
|
||||||
var count = 0
|
var count = 0
|
||||||
var remove: Message? = null
|
var remove: Message? = null
|
||||||
for (message in BaresipService.messages)
|
for (message in updatedMessages)
|
||||||
if (message.aor == this.aor) {
|
if (message.aor == this.aor) {
|
||||||
count++
|
count++
|
||||||
if (count > MESSAGE_HISTORY_SIZE) {
|
if (count > MESSAGE_HISTORY_SIZE) {
|
||||||
@ -22,14 +23,20 @@ class Message(val aor: String, val peerUri: String, val message: String, val tim
|
|||||||
}
|
}
|
||||||
if (remove != null)
|
if (remove != null)
|
||||||
updatedMessages.remove(remove)
|
updatedMessages.remove(remove)
|
||||||
BaresipService.messages = updatedMessages.toList()
|
synchronized(BaresipService.messages) {
|
||||||
|
BaresipService.messages = updatedMessages.toList()
|
||||||
|
}
|
||||||
save()
|
save()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun delete() {
|
fun delete() {
|
||||||
val updatedMessages = BaresipService.messages.toMutableList()
|
val updatedMessages = synchronized(BaresipService.messages) {
|
||||||
|
BaresipService.messages.toMutableList()
|
||||||
|
}
|
||||||
updatedMessages.remove(this)
|
updatedMessages.remove(this)
|
||||||
BaresipService.messages = updatedMessages.toList()
|
synchronized(BaresipService.messages) {
|
||||||
|
BaresipService.messages = updatedMessages.toList()
|
||||||
|
}
|
||||||
save()
|
save()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,51 +49,69 @@ class Message(val aor: String, val peerUri: String, val message: String, val tim
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun clearMessagesOfAor(aor: String) {
|
fun clearMessagesOfAor(aor: String) {
|
||||||
val updatedMessages = BaresipService.messages.toMutableList()
|
val updatedMessages = synchronized(BaresipService.messages) {
|
||||||
|
BaresipService.messages.toMutableList()
|
||||||
|
}
|
||||||
val it = updatedMessages.iterator()
|
val it = updatedMessages.iterator()
|
||||||
while (it.hasNext()) if (it.next().aor == aor) it.remove()
|
while (it.hasNext()) if (it.next().aor == aor) it.remove()
|
||||||
BaresipService.messages = updatedMessages.toList()
|
synchronized(BaresipService.messages) {
|
||||||
|
BaresipService.messages = updatedMessages.toList()
|
||||||
|
}
|
||||||
save()
|
save()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun deleteAorMessage(aor: String, time: Long) {
|
fun deleteAorMessage(aor: String, time: Long) {
|
||||||
val updatedMessages = BaresipService.messages.toMutableList()
|
val updatedMessages = synchronized(BaresipService.messages) {
|
||||||
|
BaresipService.messages.toMutableList()
|
||||||
|
}
|
||||||
for (message in updatedMessages.reversed())
|
for (message in updatedMessages.reversed())
|
||||||
if (message.aor == aor && message.timeStamp == time) {
|
if (message.aor == aor && message.timeStamp == time) {
|
||||||
updatedMessages.remove(message)
|
updatedMessages.remove(message)
|
||||||
BaresipService.messages = updatedMessages.toList()
|
synchronized(BaresipService.messages) {
|
||||||
|
BaresipService.messages = updatedMessages.toList()
|
||||||
|
}
|
||||||
save()
|
save()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateAorMessage(aor: String, time: Long) {
|
fun updateAorMessage(aor: String, time: Long) {
|
||||||
val updatedMessages = BaresipService.messages.toMutableList()
|
val updatedMessages = synchronized(BaresipService.messages) {
|
||||||
|
BaresipService.messages.toMutableList()
|
||||||
|
}
|
||||||
for (message in updatedMessages.reversed())
|
for (message in updatedMessages.reversed())
|
||||||
if (message.aor == aor && message.timeStamp == time) {
|
if (message.aor == aor && message.timeStamp == time) {
|
||||||
message.new = false
|
message.new = false
|
||||||
BaresipService.messages = updatedMessages.toList()
|
synchronized(BaresipService.messages) {
|
||||||
|
BaresipService.messages = updatedMessages.toList()
|
||||||
|
}
|
||||||
save()
|
save()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun unreadMessages(aor: String): Boolean {
|
fun unreadMessages(aor: String): Boolean {
|
||||||
for (message in BaresipService.messages.reversed())
|
synchronized(BaresipService.messages) {
|
||||||
if (message.aor == aor && message.new)
|
for (message in BaresipService.messages.reversed())
|
||||||
return true
|
if (message.aor == aor && message.new)
|
||||||
|
return true
|
||||||
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
fun unreadMessagesFromPeer(aor: String, peerUri: String): Boolean {
|
fun unreadMessagesFromPeer(aor: String, peerUri: String): Boolean {
|
||||||
for (message in BaresipService.messages.reversed())
|
synchronized(BaresipService.messages) {
|
||||||
if (message.aor == aor && message.peerUri == peerUri && message.new)
|
for (message in BaresipService.messages.reversed())
|
||||||
return true
|
if (message.aor == aor && message.peerUri == peerUri && message.new)
|
||||||
|
return true
|
||||||
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateMessagesFromPearRead(aor: String, peerUri: String): Boolean {
|
fun updateMessagesFromPearRead(aor: String, peerUri: String): Boolean {
|
||||||
val updatedMessages = BaresipService.messages.toMutableList()
|
val updatedMessages = synchronized(BaresipService.messages) {
|
||||||
|
BaresipService.messages.toMutableList()
|
||||||
|
}
|
||||||
var updated = false
|
var updated = false
|
||||||
for (message in updatedMessages)
|
for (message in updatedMessages)
|
||||||
if (message.aor == aor && message.peerUri == peerUri && message.new) {
|
if (message.aor == aor && message.peerUri == peerUri && message.new) {
|
||||||
@ -94,21 +119,26 @@ class Message(val aor: String, val peerUri: String, val message: String, val tim
|
|||||||
updated = true
|
updated = true
|
||||||
}
|
}
|
||||||
if (updated) {
|
if (updated) {
|
||||||
BaresipService.messages = updatedMessages.toList()
|
synchronized(BaresipService.messages) {
|
||||||
|
BaresipService.messages = updatedMessages.toList()
|
||||||
|
}
|
||||||
save()
|
save()
|
||||||
}
|
}
|
||||||
return updated
|
return updated
|
||||||
}
|
}
|
||||||
|
|
||||||
fun save() {
|
fun save() {
|
||||||
|
val messagesCopy = synchronized(BaresipService.messages) {
|
||||||
|
BaresipService.messages.toList()
|
||||||
|
}
|
||||||
val file = File(BaresipService.filesPath, "messages")
|
val file = File(BaresipService.filesPath, "messages")
|
||||||
try {
|
try {
|
||||||
val fos = FileOutputStream(file)
|
val fos = FileOutputStream(file)
|
||||||
val oos = ObjectOutputStream(fos)
|
val oos = ObjectOutputStream(fos)
|
||||||
oos.writeObject(BaresipService.messages)
|
oos.writeObject(messagesCopy)
|
||||||
oos.close()
|
oos.close()
|
||||||
fos.close()
|
fos.close()
|
||||||
Log.d(TAG, "Saved ${BaresipService.messages.size} messages")
|
Log.d(TAG, "Saved ${messagesCopy.size} messages")
|
||||||
} catch (e: IOException) {
|
} catch (e: IOException) {
|
||||||
Log.e(TAG, "OutputStream exception", e)
|
Log.e(TAG, "OutputStream exception", e)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user