kopia lustrzana https://github.com/ge0rg/aprsdroid
implement message duplicate filter
rodzic
f14eb8d2d3
commit
767ccb5b0d
|
@ -280,7 +280,7 @@ class AprsService extends Service with LocationListener {
|
||||||
StorageDatabase.Message.TYPE_OUT_REJECTED
|
StorageDatabase.Message.TYPE_OUT_REJECTED
|
||||||
db.updateMessageAcked(ap.getSourceCall(), msg.getMessageNumber(), new_type)
|
db.updateMessageAcked(ap.getSourceCall(), msg.getMessageNumber(), new_type)
|
||||||
} else {
|
} else {
|
||||||
db.addMessage(ts, ap, msg)
|
db.addMessage(ts, ap.getSourceCall(), msg)
|
||||||
if (msg.getMessageNumber() != "") {
|
if (msg.getMessageNumber() != "") {
|
||||||
// we need to send an ack
|
// we need to send an ack
|
||||||
val ack = AprsPacket.formatMessage(callssid, appVersion(), ap.getSourceCall(), "ack", msg.getMessageNumber())
|
val ack = AprsPacket.formatMessage(callssid, appVersion(), ap.getSourceCall(), "ack", msg.getMessageNumber())
|
||||||
|
|
|
@ -194,12 +194,27 @@ class StorageDatabase(context : Context) extends
|
||||||
getWritableDatabase().insertOrThrow(TABLE, CALL, cv)
|
getWritableDatabase().insertOrThrow(TABLE, CALL, cv)
|
||||||
}
|
}
|
||||||
|
|
||||||
def addMessage(ts : Long, ap : APRSPacket, msg : MessagePacket) {
|
def isMessageDuplicate(call : String, msgid : String, text : String) : Boolean = {
|
||||||
|
val c = getReadableDatabase().query(Message.TABLE, Message.COLUMNS,
|
||||||
|
"type = 1 AND call = ? AND msgid = ? AND text = ?",
|
||||||
|
Array(call, msgid, text),
|
||||||
|
null, null,
|
||||||
|
null, null)
|
||||||
|
val result = (c.getCount() > 0)
|
||||||
|
c.close()
|
||||||
|
result
|
||||||
|
}
|
||||||
|
|
||||||
|
def addMessage(ts : Long, srccall : String, msg : MessagePacket) {
|
||||||
import Message._
|
import Message._
|
||||||
|
if (isMessageDuplicate(srccall, msg.getMessageNumber(), msg.getMessageBody())) {
|
||||||
|
Log.i(TAG, "received duplicate message from %s: %s".format(srccall, msg))
|
||||||
|
return
|
||||||
|
}
|
||||||
val cv = new ContentValues()
|
val cv = new ContentValues()
|
||||||
cv.put(TS, ts.asInstanceOf[java.lang.Long])
|
cv.put(TS, ts.asInstanceOf[java.lang.Long])
|
||||||
cv.put(RETRYCNT, 0.asInstanceOf[java.lang.Integer])
|
cv.put(RETRYCNT, 0.asInstanceOf[java.lang.Integer])
|
||||||
cv.put(CALL, ap.getSourceCall())
|
cv.put(CALL, srccall)
|
||||||
cv.put(MSGID, msg.getMessageNumber())
|
cv.put(MSGID, msg.getMessageNumber())
|
||||||
cv.put(TYPE, TYPE_INCOMING.asInstanceOf[java.lang.Integer])
|
cv.put(TYPE, TYPE_INCOMING.asInstanceOf[java.lang.Integer])
|
||||||
cv.put(TEXT, msg.getMessageBody())
|
cv.put(TEXT, msg.getMessageBody())
|
||||||
|
|
Ładowanie…
Reference in New Issue