Ejemplo n.º 1
0
 def set_message(self, text, color_, bold=False, is_permanent=False):
     from vise.view import certificate_error_domains
     key = (text, color_.name(), bold, is_permanent)
     if key == self.current_key:
         return
     self.current_key = key
     self.is_permanent = is_permanent
     prefix = text.partition(':')[0]
     self.is_address = self.is_permanent and prefix.lower() in {
         'http', 'https', 'vise', 'file'
     }
     self.is_secure = prefix.lower() in {'https', 'vise', 'file'}
     color_ = color_ or self.palette().color(self.palette().WindowText)
     if self.is_address:
         qurl = QUrl(text)
         if self.is_secure and qurl.host() in certificate_error_domains:
             self.is_secure = False
         if qurl.scheme() in {'vise', 'file'}:
             host = qurl.path()
             rest = ''
             sep = ':'
         else:
             host = qurl.host()
             rest = qurl.toDisplayString(QUrl.PrettyDecoded
                                         | QUrl.RemoveScheme
                                         | QUrl.RemoveAuthority)
             sep = '://'
         self.static_text = QStaticText(
             '<span style="white-space:nowrap; color: {fg}">'
             '<span style="color:{emph}; font-weight:bold">{scheme}</span><span style="color:{dull}">{sep}</span>'
             '<span style="color:{fg}">{host}</span>'
             '<span style="color:{dull}">{rest}</span>'.format(
                 fg=color_.name(),
                 emph='green' if self.is_secure else 'red',
                 scheme=escape(qurl.scheme()),
                 host=escape(host),
                 dull=color('status bar dull foreground', 'gray'),
                 sep=sep,
                 rest=escape(rest)))
     else:
         self.static_text = QStaticText(
             '<span style="color:{}; font-weight: {}; white-space:nowrap">{}</span>'
             .format(color_.name(), ('bold' if bold else 'normal'),
                     escape(text)))
     to = QTextOption(Qt.AlignLeft | Qt.AlignTop)
     to.setWrapMode(to.NoWrap)
     self.static_text.setTextOption(to)
     self.static_text.prepare(font=self.font())
     self.update()
Ejemplo n.º 2
0
 def set_message(self, text, color_, bold=False, is_permanent=False):
     from vise.view import certificate_error_domains
     key = (text, color_.name(), bold, is_permanent)
     if key == self.current_key:
         return
     self.current_key = key
     self.is_permanent = is_permanent
     prefix = text.partition(':')[0]
     self.is_address = self.is_permanent and prefix.lower() in {'http', 'https', 'vise'}
     self.is_secure = prefix.lower() in {'https', 'vise'}
     color_ = color_ or self.palette().color(self.palette().WindowText)
     if self.is_address:
         qurl = QUrl(text)
         if self.is_secure and qurl.host() in certificate_error_domains:
             self.is_secure = False
         if qurl.scheme() == 'vise':
             host = qurl.path()
             rest = ''
             sep = ':'
         else:
             host = qurl.host()
             rest = qurl.toDisplayString(QUrl.PrettyDecoded | QUrl.RemoveScheme | QUrl.RemoveAuthority)
             sep = '://'
         self.static_text = QStaticText(
             '<span style="white-space:nowrap; color: {fg}">'
             '<span style="color:{emph}; font-weight:bold">{scheme}</span><span style="color:{dull}">{sep}</span>'
             '<span style="color:{fg}">{host}</span>'
             '<span style="color:{dull}">{rest}</span>'.format(
                 fg=color_.name(), emph='green' if self.is_secure else 'red', scheme=escape(qurl.scheme()),
                 host=escape(host), dull=color('status bar dull foreground', 'gray'), sep=sep,
                 rest=escape(rest)
             ))
     else:
         self.static_text = QStaticText('<span style="color:{}; font-weight: {}; white-space:nowrap">{}</span>'.format(
             color_.name(), ('bold' if bold else 'normal'), escape(text)))
     to = QTextOption(Qt.AlignLeft | Qt.AlignTop)
     to.setWrapMode(to.NoWrap)
     self.static_text.setTextOption(to)
     self.static_text.prepare(font=self.font())
     self.update()
Ejemplo n.º 3
0
 def testWebView(view, url):
     '''
     @param: view TabbedWebView
     @param: url QUrl
     '''
     if not view.webTab().isRestored():
         return False
     if view.browserWindow().tabWidget().tabBar().normalTabsCount() < 2:
         return False
     page = view.page()
     if page.history().count() != 0:
         return False
     if const.QTWEBENGINEWIDGETS_VERSION >= const.QT_VERSION_CHECK(
             5, 12, 0):
         return True
     else:
         if page.url() != QUrl():
             return False
         tabUrl = page.requestedUrl()
         if tabUrl.isEmpty():
             tabUrl = QUrl(view.webTab().locationBar().text())
         return tabUrl.host() == url.host()
Ejemplo n.º 4
0
class PageThumbnailer(QObject):
    def __init__(self, parent=None):
        super().__init__(parent)
        self._view = QQuickWidget()  # QQuickWidget
        self._size = QSize(450, 253) * gVar.app.devicePixelRatio()
        self._url = QUrl()
        self._title = ''
        self._loadTitle = False

        self._view.setAttribute(Qt.WA_DontShowOnScreen)
        self._view.setSource(QUrl('qrc:data/thumbnailer.qml'))
        self._view.rootContext().setContextProperty('thumbnailer', self)
        self._view.show()

    def setSize(self, size):
        if size.isValid():
            self._size = size

    def setUrl(self, url):
        if url.isValid():
            self._url = url

    def url(self):
        return self._url

    def loadTitle(self):
        '''
        @return: bool
        '''
        return self._loadTitle

    def setLoadTitle(self, load):
        '''
        @param: load bool
        '''
        self._loadTitle = load

    def title(self):
        title = self._title
        if not title:
            title = self._url.host()
        if not title:
            title = self._url.toString()
        return title

    def start(self):
        if self._view.rootObject() and WebView.isUrlValid(self._url):
            self._view.rootObject().setProperty('url', self._url)
        else:

            def func():
                self.thumbnailCreated.emit(QPixmap())

            QTimer.singleShot(500, func)

    # Q_SIGNALS:
    thumbnailCreated = pyqtSignal(QPixmap)

    # public Q_SLOTS:
    @pyqtSlot(result=str)
    def afterLoadScript(self):
        '''
        @return: QString
        '''
        return Scripts.setCss('::~webkit-scrollbar{display:none;}')

    @pyqtSlot(bool)
    def createThumbnail(self, status):
        '''
        @param: status bool
        '''
        if not status:
            self.thumbnailCreated.emit(QPixmap())
            return

        def func():
            self._title = self._view.rootObject().property('title').strip()
            img = self._view.grabFramebuffer().scaled(self._size,
                                                      Qt.IgnoreAspectRatio,
                                                      Qt.SmoothTransformation)
            pixmap = QPixmap.fromImage(img)
            self.thumbnailCreated.emit(pixmap)

        QTimer.singleShot(1000, func)