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 base64
|
||||
|
||||
import database
|
||||
|
||||
|
||||
class ReticulumWebChat:
|
||||
|
||||
@@ -26,6 +28,13 @@ class ReticulumWebChat:
|
||||
self.config_file = webchat_config_file or "storage/config.json"
|
||||
self.load_config()
|
||||
|
||||
# init database
|
||||
self.db = database.database
|
||||
self.db.connect()
|
||||
self.db.create_tables([
|
||||
database.LxmfMessage,
|
||||
])
|
||||
|
||||
# init reticulum
|
||||
self.reticulum = RNS.Reticulum(reticulum_config_dir)
|
||||
self.identity = identity
|
||||
@@ -383,12 +392,15 @@ class ReticulumWebChat:
|
||||
"image_bytes": image_bytes,
|
||||
}
|
||||
|
||||
# convert 0.0-1.0 progress to 0.00-100 percentage
|
||||
progress_percentage = round(lxmf_message.progress * 100, 2)
|
||||
|
||||
return {
|
||||
"hash": lxmf_message.hash.hex(),
|
||||
"source_hash": lxmf_message.source_hash.hex(),
|
||||
"destination_hash": lxmf_message.destination_hash.hex(),
|
||||
"state": self.convert_lxmf_state_to_string(lxmf_message),
|
||||
"progress": lxmf_message.progress,
|
||||
"progress": progress_percentage,
|
||||
"content": lxmf_message.content.decode('utf-8'),
|
||||
"fields": fields,
|
||||
}
|
||||
@@ -418,6 +430,21 @@ class ReticulumWebChat:
|
||||
def on_lxmf_delivery(self, message):
|
||||
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
|
||||
asyncio.run(self.websocket_broadcast(json.dumps({
|
||||
"type": "lxmf.delivery",
|
||||
|
||||
Reference in New Issue
Block a user