class PixelWall(QApplication): def __init__(self, *args, **kwargs): super(PixelWall, self).__init__(*args, **kwargs) self.engine = QQmlApplicationEngine(self) self.servers = ServerModel(self.engine) self.settings = QSettings('OpenServices', 'PixelWall') url = self.settings.value('server/url') self.engine.setNetworkAccessManagerFactory(NetworkAccessManagerFactory('hetzner.fladi.at', 3128)) ctxt = self.engine.rootContext() ctxt.setContextProperty('app', self) ctxt.setContextProperty('url', 'about:blank') self.engine.load(QUrl('states.qml')) discoverer = Avahi(self.engine, '_pixelwall._tcp') discoverer.initialized.connect(self.serverState) discoverer.added.connect(self.servers.addService) ctxt.setContextProperty('serverModel', self.servers) discoverer.run() if url: self.setUrl(url) self.setState('Web') def setState(self, state): for root in self.engine.rootObjects(): node = root.findChild(QObject, 'main') if node: logger.info('Setting state: {}'.format(state)) node.setProperty('state', state) def setUrl(self, url): logger.info('Connecting WebView to {}'.format(url)) ctxt = self.engine.rootContext() ctxt.setContextProperty('url', 'https://www.heise.de/') @pyqtSlot() def reset(self): self.settings.remove('server/url') self.setState('Servers') @pyqtSlot(int) def serverSelected(self, index): server = self.servers.getIndex(index) logger.info('Server selected {}'.format(server)) url = 'https://{server.host}:{server.port}/'.format(server=server) self.settings.setValue('server/url', url) self.setUrl(url) self.setState('Web') @pyqtSlot() def serverState(self): self.setState('Servers')
def main(): app = QApplication(sys.argv) qmlRegisterType(EventSource, "ExpipeBrowser", 1, 0, "EventSource") qmlRegisterType(ActionProxy, "ExpipeBrowser", 1, 0, "ActionProxy") qmlRegisterType(ActionAttributeModel, "ExpipeBrowser", 1, 0, "ActionAttributeModel") qmlRegisterSingletonType(Pyrebase, "ExpipeBrowser", 1, 0, "Pyrebase", pyrebase_instance) qmlRegisterType(Clipboard, "ExpipeBrowser", 1, 0, "Clipboard") QApplication.setOrganizationName("Cinpla") QApplication.setApplicationName("Expipe Browser") # QtWebEngine.initialize() engine = QQmlApplicationEngine() engine.setNetworkAccessManagerFactory(NetworkAccessManagerFactory()) engine.load(QUrl("qrc:/main.qml")) return app.exec_()
def setText(self, text): QApplication.clipboard().setText(text) class NetworkAccessManagerFactory(QQmlNetworkAccessManagerFactory): def create(self, parent): nam = QNetworkAccessManager(parent) cache = QNetworkDiskCache(parent) cache_dir = QStandardPaths.writableLocation(QStandardPaths.CacheLocation) cache_subdir = os.path.join(cache_dir, "network") print("Cache dir:", cache_subdir) cache.setCacheDirectory(cache_subdir) nam.setCache(cache) return nam if __name__ == "__main__": app = QApplication(sys.argv) qmlRegisterType(EventSource, "ExpipeBrowser", 1, 0, "EventSource") qmlRegisterType(Clipboard, "ExpipeBrowser", 1, 0, "Clipboard") QApplication.setOrganizationName("Cinpla") QApplication.setApplicationName("Expipe Browser") QtWebEngine.initialize() engine = QQmlApplicationEngine() engine.setNetworkAccessManagerFactory(NetworkAccessManagerFactory()) engine.load(QUrl("main.qml")) app.exec_() for stream in streams: print(stream) stream.close()