Files
Polyboard/src/modules.py
T

172 lines
4.0 KiB
Python
Raw Normal View History

2024-01-05 08:59:40 -07:00
import json
import importlib
import sys
import src.web as web
import src.utils as utils
class module():
def __init__(self):
self.name = None
self.module = None
self.rootdir = None
self.tabs = []
2024-01-22 17:04:09 -07:00
def add(self):
2024-01-05 08:59:40 -07:00
spec = importlib.util.spec_from_file_location(self.name, utils.getRoot(self.entrypoint))
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
self.module = module
2024-01-22 17:04:09 -07:00
def init(self, moduleMaster):
self.module.init(moduleMaster)
def run(self):
self.module.main()
2024-01-05 08:59:40 -07:00
class moduleMaster():
def __init__(self):
self.modules = []
2024-01-22 17:04:09 -07:00
2024-01-05 08:59:40 -07:00
self.webserv = None
self.app = None
self.rawServer = None
self.authServer = None
2024-01-22 17:04:09 -07:00
# self.addRawEventListener('test1', test1)
2024-01-05 08:59:40 -07:00
2024-01-22 17:04:09 -07:00
def addModules(self, webserv):
2024-01-05 08:59:40 -07:00
self.webserv = webserv
mdirs = utils.listSubdirs(utils.getRoot('modules/'))
for mname in mdirs:
mjson = json.loads(open(utils.getRoot(f'modules/{mname}/module.json')).read())
m = module()
m.name = mjson['name']
m.entrypoint = mjson['entrypoint']
for tab in mjson['tabs']:
mtab = utils.getatribinarr(self.webserv.webtabs, 'name', tab['name'])
if mtab == None:
mtab = web.webtab()
mtab.name = tab['name']
m.tabs.append(mtab)
def recursiveAdder(objs):
tmpPages = []
for obj in objs:
if obj['type'] == 'folder':
folder = web.webpagefolder()
folder.name = obj['name']
tmpTmpPages = recursiveAdder(obj['pages'])
for tmpobj in tmpTmpPages:
folder.pages.append(tmpobj)
tmpPages.append(folder)
else:
mpage = web.webpage()
mpage.name = obj['name']
mpage.location = obj['location']
tmpPages.append(mpage)
return tmpPages
tmpPages = recursiveAdder(tab['pages'])
for obj in tmpPages:
mtab.pages.append(obj)
mtab.defaultPage = tab['defaultPage']
self.webserv.webtabs.append(mtab)
2024-01-22 17:04:09 -07:00
m.add()
2024-01-05 08:59:40 -07:00
self.modules.append(m)
for tab in webserv.webtabs:
tab.addHtml()
2024-01-22 17:04:09 -07:00
def initModules(self, webserv):
self.webserv = webserv
self.app = webserv.app
self.rawServer = webserv.rawServer
self.authServer = webserv.authServer
2024-01-05 08:59:40 -07:00
for module in self.modules:
2024-01-22 17:04:09 -07:00
module.init(self)
def runModules(self):
for module in self.modules:
module.run()
2024-01-05 08:59:40 -07:00
def getRawClients(self):
return self.rawServer.clients
2024-01-22 17:04:09 -07:00
2024-01-05 08:59:40 -07:00
def getAuthClients(self):
return self.authServer.clients
2024-01-22 17:04:09 -07:00
def addRawEventListener(self, eventName, func):
self.rawServer.eventListeners.append({
'type': eventName,
'func': func
})
2024-01-05 08:59:40 -07:00
def addAuthEventListener(self, eventName, func):
2024-01-22 17:04:09 -07:00
def tmpfunc(c, data):
2024-01-05 08:59:40 -07:00
if not c in self.rawServer.clients:
return
ac = utils.getatribinarr(self.authServer.clients, 'rawClient', c)
if ac == None:
return
2024-01-22 17:04:09 -07:00
if not self.authServer.validAc(ac):
return
2024-01-05 08:59:40 -07:00
func(ac, data)
2024-01-22 17:04:09 -07:00
self.rawServer.addEventListener(eventName, tmpfunc)
def getRawClientByID(self, ID):
return utils.getatribinarr(self.rawServer.clients, 'clientid', ID)
def getAuthClientByID(self, ID):
c = utils.getatribinarr(self.rawServer.clients, 'clientid', ID)
if c == None:
return None
return utils.getatribinarr(self.authServer.clients, 'rawClient', c)
def sendPopupInfo(self, c, title, msg):
c.send('popupInfo', {
'title': title,
'msg': msg
})
def sendPopupSuccess(self, c, title, msg):
c.send('popupSuccess', {
'title': title,
'msg': msg
})
def sendPopupWarning(self, c, title, msg):
c.send('popupWarning', {
'title': title,
'msg': msg
})
def sendPopupError(self, c, title, msg):
c.send('popupError', {
'title': title,
'msg': msg
})
def sendPopupColor(self, c, title, msg, color, isDark):
c.send('popupColor', {
'title': title,
'msg': msg,
'color': color,
'isDark': isDark
})