save received lxmf messages to database
This commit is contained in:
34
database.py
Normal file
34
database.py
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from peewee import *
|
||||||
|
|
||||||
|
database = SqliteDatabase('storage/reticulum-webchat.db')
|
||||||
|
|
||||||
|
|
||||||
|
class BaseModel(Model):
|
||||||
|
class Meta:
|
||||||
|
database = database
|
||||||
|
|
||||||
|
|
||||||
|
class LxmfMessage(BaseModel):
|
||||||
|
|
||||||
|
# id = primary key auto increment bigint
|
||||||
|
id = BigAutoField()
|
||||||
|
hash = CharField(unique=True) # unique lxmf message hash
|
||||||
|
source_hash = CharField(index=True)
|
||||||
|
destination_hash = CharField(index=True)
|
||||||
|
state = CharField() # state is converted from internal int to a human friendly string
|
||||||
|
progress = FloatField() # progress is converted from internal float 0.00-1.00 to float between 0.00/100 (2 decimal places)
|
||||||
|
content = TextField()
|
||||||
|
fields = TextField() # json string
|
||||||
|
created_at = DateTimeField(default=datetime.now)
|
||||||
|
updated_at = DateTimeField(default=datetime.now)
|
||||||
|
|
||||||
|
# override save to auto update updated_at when calling save()
|
||||||
|
def save(self, *args, **kwargs):
|
||||||
|
self.updated_at = datetime.now()
|
||||||
|
return super(LxmfMessage, self).save(*args, **kwargs)
|
||||||
|
|
||||||
|
# define database and table name
|
||||||
|
class Meta:
|
||||||
|
table_name = "lxmf_messages"
|
||||||
29
web.py
29
web.py
@@ -14,6 +14,8 @@ import asyncio
|
|||||||
import websockets
|
import websockets
|
||||||
import base64
|
import base64
|
||||||
|
|
||||||
|
import database
|
||||||
|
|
||||||
|
|
||||||
class ReticulumWebChat:
|
class ReticulumWebChat:
|
||||||
|
|
||||||
@@ -26,6 +28,13 @@ class ReticulumWebChat:
|
|||||||
self.config_file = webchat_config_file or "storage/config.json"
|
self.config_file = webchat_config_file or "storage/config.json"
|
||||||
self.load_config()
|
self.load_config()
|
||||||
|
|
||||||
|
# init database
|
||||||
|
self.db = database.database
|
||||||
|
self.db.connect()
|
||||||
|
self.db.create_tables([
|
||||||
|
database.LxmfMessage,
|
||||||
|
])
|
||||||
|
|
||||||
# init reticulum
|
# init reticulum
|
||||||
self.reticulum = RNS.Reticulum(reticulum_config_dir)
|
self.reticulum = RNS.Reticulum(reticulum_config_dir)
|
||||||
self.identity = identity
|
self.identity = identity
|
||||||
@@ -383,12 +392,15 @@ class ReticulumWebChat:
|
|||||||
"image_bytes": image_bytes,
|
"image_bytes": image_bytes,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# convert 0.0-1.0 progress to 0.00-100 percentage
|
||||||
|
progress_percentage = round(lxmf_message.progress * 100, 2)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"hash": lxmf_message.hash.hex(),
|
"hash": lxmf_message.hash.hex(),
|
||||||
"source_hash": lxmf_message.source_hash.hex(),
|
"source_hash": lxmf_message.source_hash.hex(),
|
||||||
"destination_hash": lxmf_message.destination_hash.hex(),
|
"destination_hash": lxmf_message.destination_hash.hex(),
|
||||||
"state": self.convert_lxmf_state_to_string(lxmf_message),
|
"state": self.convert_lxmf_state_to_string(lxmf_message),
|
||||||
"progress": lxmf_message.progress,
|
"progress": progress_percentage,
|
||||||
"content": lxmf_message.content.decode('utf-8'),
|
"content": lxmf_message.content.decode('utf-8'),
|
||||||
"fields": fields,
|
"fields": fields,
|
||||||
}
|
}
|
||||||
@@ -418,6 +430,21 @@ class ReticulumWebChat:
|
|||||||
def on_lxmf_delivery(self, message):
|
def on_lxmf_delivery(self, message):
|
||||||
try:
|
try:
|
||||||
|
|
||||||
|
# convert lxmf message to dict
|
||||||
|
lxmf_message_dict = self.convert_lxmf_message_to_dict(message)
|
||||||
|
|
||||||
|
# save to database
|
||||||
|
lxmf_message_db = database.LxmfMessage(
|
||||||
|
hash=lxmf_message_dict["hash"],
|
||||||
|
source_hash=lxmf_message_dict["source_hash"],
|
||||||
|
destination_hash=lxmf_message_dict["destination_hash"],
|
||||||
|
state=lxmf_message_dict["state"],
|
||||||
|
progress=lxmf_message_dict["progress"],
|
||||||
|
content=lxmf_message_dict["content"],
|
||||||
|
fields=json.dumps(lxmf_message_dict["fields"]),
|
||||||
|
)
|
||||||
|
lxmf_message_db.save()
|
||||||
|
|
||||||
# send received lxmf message data to all websocket clients
|
# send received lxmf message data to all websocket clients
|
||||||
asyncio.run(self.websocket_broadcast(json.dumps({
|
asyncio.run(self.websocket_broadcast(json.dumps({
|
||||||
"type": "lxmf.delivery",
|
"type": "lxmf.delivery",
|
||||||
|
|||||||
Reference in New Issue
Block a user