| 
									
										
										
										
											2023-05-17 10:16:15 +00:00
										 |  |  | import base | 
					
						
							| 
									
										
										
										
											2023-11-13 19:32:09 +00:00
										 |  |  | from core.sight.threads.jsrun_worker import JsRunWorker | 
					
						
							| 
									
										
										
										
											2023-05-17 10:16:15 +00:00
										 |  |  | from callhandler import CallHandler | 
					
						
							|  |  |  | from browser import Browser | 
					
						
							|  |  |  | from PyQt6.QtCore import Qt | 
					
						
							|  |  |  | from PyQt6.QtWidgets import QMainWindow, QWidget, QVBoxLayout | 
					
						
							| 
									
										
										
										
											2023-11-13 19:32:09 +00:00
										 |  |  | from PyQt6.QtCore import QThread,QThreadPool, QObject, pyqtSignal as Signal, pyqtSlot as Slot | 
					
						
							|  |  |  | from queue import Queue | 
					
						
							| 
									
										
										
										
											2023-11-09 20:22:58 +00:00
										 |  |  | import time | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-17 10:16:15 +00:00
										 |  |  | class Sight(QWidget): | 
					
						
							| 
									
										
										
										
											2023-11-09 20:22:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-27 13:14:49 +00:00
										 |  |  |     def __init__(self, id, page): | 
					
						
							| 
									
										
										
										
											2023-05-17 10:16:15 +00:00
										 |  |  |         super().__init__() | 
					
						
							| 
									
										
										
										
											2023-10-26 17:43:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-17 10:16:15 +00:00
										 |  |  |         self.id = id | 
					
						
							| 
									
										
										
										
											2023-10-27 13:14:49 +00:00
										 |  |  |         self.page = page | 
					
						
							| 
									
										
										
										
											2023-05-17 10:16:15 +00:00
										 |  |  |         self.data = {} # private data(s) of the sight | 
					
						
							| 
									
										
										
										
											2023-10-26 17:43:59 +00:00
										 |  |  |         self.children = [] | 
					
						
							|  |  |  |         self.parent = None | 
					
						
							| 
									
										
										
										
											2023-11-13 19:32:09 +00:00
										 |  |  |         self.pool = QThreadPool.globalInstance() | 
					
						
							| 
									
										
										
										
											2023-10-26 17:43:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-17 10:16:15 +00:00
										 |  |  |         base.data["active_sight"] = self.id | 
					
						
							|  |  |  |         self.title = id | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-30 19:43:35 +00:00
										 |  |  |         if base.frameSupported(): | 
					
						
							| 
									
										
										
										
											2023-10-27 14:03:00 +00:00
										 |  |  |             self.setWindowFlags(Qt.WindowType(0x00000800)) # remove the os windows frame (borders, close and other buttons | 
					
						
							|  |  |  |             self.setAttribute(Qt.WidgetAttribute(0x78)) # (int: 120)) # Make Transparent | 
					
						
							| 
									
										
										
										
											2023-10-30 19:43:35 +00:00
										 |  |  |              | 
					
						
							| 
									
										
										
										
											2023-05-17 10:16:15 +00:00
										 |  |  |         self.browser = Browser() | 
					
						
							|  |  |  |         self.browser.addObject('handler', CallHandler(self) ) | 
					
						
							| 
									
										
										
										
											2023-11-02 19:17:25 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         #self.browser.loadAdminContent(page) | 
					
						
							|  |  |  |         if "sight-admin" in id: | 
					
						
							|  |  |  |             self.browser.loadAdminContent(page) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             self.browser.loadContent(page) | 
					
						
							| 
									
										
										
										
											2023-05-17 10:16:15 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         self.layout = QVBoxLayout() | 
					
						
							|  |  |  |         self.layout.addWidget(self.browser) | 
					
						
							|  |  |  |         self.layout.setSpacing(0); | 
					
						
							|  |  |  |         self.layout.setContentsMargins(1, 1, 1, 1); #Need 1,1,1,1 if it is 0,0,0,0 I got setgeometry warnings | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         self.setLayout(self.layout) | 
					
						
							| 
									
										
										
										
											2023-10-26 17:43:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-13 19:32:09 +00:00
										 |  |  |     def addJob(self, js_script, page_id): | 
					
						
							|  |  |  |         worker = JsRunWorker(js_script, page_id) | 
					
						
							|  |  |  |         worker.signals.completed.connect(self.complete) | 
					
						
							|  |  |  |         worker.signals.jsrun.connect(self.runJs) | 
					
						
							|  |  |  |         worker.signals.started.connect(self.start) | 
					
						
							|  |  |  |         self.pool.start(worker) | 
					
						
							| 
									
										
										
										
											2023-11-09 20:22:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-13 19:32:09 +00:00
										 |  |  |     def start(self, n): | 
					
						
							|  |  |  |         print(f'Job in "{n}" page started...') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def complete(self, n): | 
					
						
							|  |  |  |         print(f'Job in "{n}" page completed.') | 
					
						
							| 
									
										
										
										
											2023-11-09 20:22:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def runJs(self,request_js): | 
					
						
							|  |  |  |         self.browser.page().runJavaScript(request_js) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-30 19:43:35 +00:00
										 |  |  |     # use when the frameSupported is False (for instance wayland) | 
					
						
							|  |  |  |     def closeEvent(self, event): | 
					
						
							| 
									
										
										
										
											2023-11-13 19:32:09 +00:00
										 |  |  |         self.pool.clear() | 
					
						
							| 
									
										
										
										
											2023-11-09 20:22:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-30 19:43:35 +00:00
										 |  |  |         base.sights.close(self.id) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-26 17:43:59 +00:00
										 |  |  |     def getParent(self): | 
					
						
							|  |  |  |         return self.parent | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-09 13:57:36 +00:00
										 |  |  |     def getPageId(self): | 
					
						
							|  |  |  |         return self.page | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-26 17:43:59 +00:00
										 |  |  |     def setParent(self, id): | 
					
						
							|  |  |  |         self.parent = id | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def addChild(self, id): | 
					
						
							|  |  |  |         self.children.insert(0, id) | 
					
						
							|  |  |  |         print(self.children) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def getChildren(self): | 
					
						
							|  |  |  |         return self.children | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def removeChild(self, id): | 
					
						
							| 
									
										
										
										
											2023-10-30 19:43:35 +00:00
										 |  |  |         if id in self.children: | 
					
						
							|  |  |  |             self.children.remove(id) | 
					
						
							|  |  |  |             print(self.children) | 
					
						
							| 
									
										
										
										
											2023-10-26 17:43:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-17 10:16:15 +00:00
										 |  |  |     def setLayoutContentMargins(self,a,b,c,d): | 
					
						
							|  |  |  |         self.layout.setContentsMargins(a, b, c, d) | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     def setTitle(self, title): | 
					
						
							|  |  |  |         self.title = title | 
					
						
							| 
									
										
										
										
											2023-10-26 15:58:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-17 10:16:15 +00:00
										 |  |  |     def getTitle(self): | 
					
						
							|  |  |  |         return self.title | 
					
						
							|  |  |  |     def getId(self): | 
					
						
							|  |  |  |         return self.id | 
					
						
							|  |  |  |     def addData(self, key, value): | 
					
						
							|  |  |  |         self.data[key] = value | 
					
						
							|  |  |  |     def getData(self, key): | 
					
						
							|  |  |  |         if key in self.data: | 
					
						
							|  |  |  |             return self.data[key] | 
					
						
							| 
									
										
										
										
											2023-11-13 19:32:09 +00:00
										 |  |  |         return None |