88 lines
3.0 KiB
Python
88 lines
3.0 KiB
Python
import datetime
|
|
import json
|
|
import uuid
|
|
|
|
# PiAlert modules
|
|
import conf
|
|
import const
|
|
from const import pialertPath, logPath, apiPath
|
|
from logger import logResult, mylog, print_log
|
|
from helper import timeNowTZ
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Notification object handling
|
|
#-------------------------------------------------------------------------------
|
|
class Notifications:
|
|
def __init__(self, db):
|
|
self.db = db
|
|
|
|
# Create Notifications table if missing
|
|
self.db.sql.execute("""CREATE TABLE IF NOT EXISTS "Notifications" (
|
|
"Index" INTEGER,
|
|
"GUID" TEXT UNIQUE,
|
|
"DateTimeCreated" TEXT,
|
|
"DateTimePushed" TEXT,
|
|
"Status" TEXT,
|
|
"JSON" TEXT,
|
|
"Text" TEXT,
|
|
"HTML" TEXT,
|
|
"PublishedVia" TEXT,
|
|
"Extra" TEXT,
|
|
PRIMARY KEY("Index" AUTOINCREMENT)
|
|
);
|
|
""")
|
|
|
|
self.save()
|
|
|
|
# Create a new DB entry if new notiifcations available, otherwise skip
|
|
def create(self, JSON, Text, HTML, Extra=""):
|
|
|
|
# Check if empty JSON
|
|
# _json = json.loads(JSON)
|
|
# Check if nothing to report
|
|
if JSON["internet"] == [] and JSON["new_devices"] == [] and JSON["down_devices"] == [] and JSON["events"] == [] and JSON["plugins"] == []:
|
|
self.HasNotifications = False
|
|
# end if nothing to report
|
|
return self.HasNotifications
|
|
|
|
# continue and save into DB if notifications available
|
|
self.HasNotifications = True
|
|
|
|
self.GUID = str(uuid.uuid4())
|
|
self.DateTimeCreated = timeNowTZ()
|
|
self.DateTimePushed = ""
|
|
self.Status = "new"
|
|
self.JSON = JSON
|
|
self.Text = Text
|
|
self.HTML = HTML
|
|
self.PublishedVia = ""
|
|
self.Extra = Extra
|
|
|
|
self.upsert()
|
|
|
|
return self.HasNotifications
|
|
|
|
# Only updates the status
|
|
def updateStatus(self, newStatus):
|
|
self.Status = newStatus
|
|
self.upsert()
|
|
|
|
# Updates the Published properties
|
|
def updatePublishedVia(self, newPublishedVia):
|
|
self.PublishedVia = newPublishedVia
|
|
self.DateTimePushed = timeNowTZ()
|
|
self.upsert()
|
|
|
|
# TODO Index vs hash to minimize SQL calls, finish CRUD operations, expose via API, use API in plugins
|
|
|
|
def upsert(self):
|
|
self.db.sql.execute("""
|
|
INSERT OR REPLACE INTO Notifications (GUID, DateTimeCreated, DateTimePushed, Status, JSON, Text, HTML, PublishedVia, Extra)
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
""", (self.GUID, self.DateTimeCreated, self.DateTimePushed, self.Status, json.dumps(self.JSON), self.Text, self.HTML, self.PublishedVia, self.Extra))
|
|
|
|
self.save()
|
|
|
|
def save(self):
|
|
# Commit changes
|
|
self.db.commitDB() |