Esempio n. 1
0
def create_profile():
    ans = getattr(create_profile, 'ans', None)
    if ans is None:
        ans = QWebEngineProfile('viewer-lookup', QApplication.instance())
        ans.setHttpUserAgent(random_user_agent(allow_ie=False))
        ans.setCachePath(os.path.join(cache_dir(), 'ev2vl'))
        js = P('lookup.js', data=True, allow_user_override=False)
        insert_scripts(ans, create_script('lookup.js', js))
        s = ans.settings()
        s.setDefaultTextEncoding('utf-8')
        create_profile.ans = ans
    return ans
Esempio n. 2
0
    def getProfile(self):

        path = constants.QWEBENGINECACHE_PATH
        tryMkdir(path)
        profile = QWebEngineProfile()
        profile.setCachePath(path)
        profile.clearHttpCache()
        jsFile = constants.QTWEBCHANNELJS_FILE
        with open(jsFile, encoding="UTF-8") as file:
            js = file.read()
        script = QWebEngineScript()
        script.setSourceCode(js)
        script.setName('qwebchannel.js')
        script.setInjectionPoint(QWebEngineScript.DocumentCreation)
        script.setWorldId(QWebEngineScript.MainWorld)
        script.setRunsOnSubFrames(False)
        profile.scripts().insert(script)
        return profile
Esempio n. 3
0
class MainWindow(QMainWindow):
    selectDownloadFolder_trigger = pyqtSignal()
    appLogin_trigger = pyqtSignal()

    class MainWebpage(QWebEnginePage):
        def __init__(self, profile, parent):
            super().__init__(profile, parent)
            actions = [
                QWebEnginePage.Stop, QWebEnginePage.Reload,
                QWebEnginePage.ReloadAndBypassCache,
                QWebEnginePage.PasteAndMatchStyle,
                QWebEnginePage.OpenLinkInThisWindow,
                QWebEnginePage.OpenLinkInNewWindow,
                QWebEnginePage.OpenLinkInNewTab,
                QWebEnginePage.OpenLinkInNewBackgroundTab,
                QWebEnginePage.DownloadLinkToDisk,
                QWebEnginePage.DownloadImageToDisk,
                QWebEnginePage.DownloadMediaToDisk,
                QWebEnginePage.InspectElement, QWebEnginePage.RequestClose,
                QWebEnginePage.SavePage, QWebEnginePage.ViewSource
            ]
            for a in actions:
                self.action(a).setVisible(False)

        class ExternalWebpage(QWebEnginePage):
            def __init__(self, parent):
                super().__init__(parent)
                self.urlChanged.connect(self.open_browser)

            def open_browser(self, url):
                page = self.sender()
                webbrowser.open(url.toString(), 2, True)
                page.deleteLater()

        def createWindow(self, _type):
            page = None
            if _type == QWebEnginePage.WebBrowserTab:
                page = self.ExternalWebpage(self)
            return page

    def __init__(self, title, url, x=None, y=None, w=800, h=600):
        super().__init__()
        startMaximized = False
        if w == -1 or h == -1:
            self.resize(800, 600)
            startMaximized = True
        else:
            self.resize(w, h)
        self.setWindowTitle(title)
        self.setWindowIcon(QIcon(str(appDir / 'icon.ico')))
        self.setMinimumSize(800, 600)
        self.webview = QWebEngineView()
        self.profile = QWebEngineProfile("Default", self.webview)
        self.profile.setCachePath(
            str(configFolder / "QtWebEngine" / "Cache" / "Default"))
        self.profile.setPersistentStoragePath(
            str(configFolder / "QtWebEngine" / "Storage" / "Default"))
        self.page = self.MainWebpage(self.profile, self.webview)
        self.page.loadFinished.connect(self.finishLoading)
        self.webview.setPage(self.page)
        self.setCentralWidget(self.webview)
        self.url = url

        if dev:
            self.dev_tools = QWebEngineView()
            self.webview.page().setDevToolsPage(self.dev_tools.page())
            self.dev_tools.show()

        self.downloadFolder = None
        self.selectDownloadFolder_trigger.connect(self.selectDownloadFolder)
        self._selectDownloadFolder_semaphore = Semaphore(0)

        self.arl = None
        self.appLogin_trigger.connect(self.appLogin)
        self._appLogin_semaphore = Semaphore(0)

        if x is None or y is None or startMaximized:
            center = QApplication.desktop().availableGeometry().center(
            ) - self.rect().center()
            self.move(center.x(), center.y())
        else:
            self.move(x, y)

        if startMaximized: self.showMaximized()

    def showWindow(self):
        self.webview.setUrl(QUrl(self.url))
        self.show()

    def selectDownloadFolder(self):
        filename = QFileDialog.getExistingDirectory(
            self, "Select Download Folder", options=QFileDialog.ShowDirsOnly)
        self.downloadFolder = filename.replace('/', pathSep)
        self._selectDownloadFolder_semaphore.release()

    def appLogin(self):
        self.arl = None
        loginWindow = LoginWindow(self)
        self.arl = loginWindow.arl
        self._appLogin_semaphore.release()
        loginWindow.page.deleteLater()
        loginWindow.webview.deleteLater()
        loginWindow.deleteLater()

    def closeEvent(self, event):
        x = int(self.x())
        y = int(self.y())
        w = int(self.width())
        h = int(self.height())
        if x < 0: x = 0
        if y < 0: y = 0
        if self.isMaximized():
            w = -1
            h = -1
        with open(configFolder / '.UIposition', 'w') as f:
            f.write("|".join([str(x), str(y), str(w), str(h)]))
        self.page.deleteLater()
        event.accept()

    def finishLoading(self, ok):
        if ok:
            self.webview.page().runJavaScript(
                "window.dispatchEvent(new Event('pywebviewready'))")