147 lines
4.2 KiB
Python
147 lines
4.2 KiB
Python
#!/usr/bin/env python3
|
|
|
|
"""
|
|
This uses the abandoned QWebKit, which was abandoned by the soydevs making Qt5. I made this before I realized it was fucked.
|
|
|
|
Not as fat as the GTK version of "my" browser, but outdated. Needs some old Qt5 idk. There was more optimizations I did to this but I lost them and I don't care enough anymore. Fuck this shit.
|
|
|
|
Prerequisites (Debian and cousins):
|
|
sudo apt install python3-pyqt5 python3-qtpy
|
|
|
|
Below "# Script start" you can find a setting for software mode, which you should use if you're experiencing trouble with the viewport not showing up or freezing.
|
|
"""
|
|
|
|
import sys
|
|
|
|
oldexcepthook = sys.excepthook
|
|
def newexcepthook(type,value,traceback):
|
|
oldexcepthook(type,value,traceback)
|
|
#input("Press ENTER to quit.") # - this causes issues with Qt's input hook
|
|
sys.excepthook = newexcepthook
|
|
|
|
import os
|
|
p = os.path.join
|
|
pUp = os.path.dirname
|
|
s = False
|
|
if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'):
|
|
s = os.path.realpath(sys.executable)
|
|
else:
|
|
s = os.path.realpath(__file__)
|
|
sp = pUp(s)
|
|
|
|
# Script start
|
|
|
|
# Uncomment the following line for software-mode
|
|
#os.environ["LIBGL_ALWAYS_SOFTWARE"] = "1"
|
|
|
|
import qtpy
|
|
import qtpy.QtGui as QtGui
|
|
from qtpy.QtGui import *
|
|
from qtpy.QtWidgets import *
|
|
from qtpy.QtCore import *
|
|
from PyQt5.QtWebKitWidgets import *
|
|
|
|
defaultProtocol = "https"
|
|
browserWindows = []
|
|
|
|
def parseUrl(url):
|
|
if url.startswith("data:"): return "data",[],"",""
|
|
if url.startswith("blob:"): return "blob",[],"",""
|
|
urlSplit = url.split(":",1)
|
|
protocol = urlSplit[0]
|
|
urlSplit = urlSplit[1].lstrip("/").split("/",1)
|
|
if len(urlSplit) < 2: urlSplit.append("")
|
|
domain = urlSplit[0].split(".")
|
|
urlSplit = urlSplit[1].split("?",1)
|
|
if len(urlSplit) < 2: urlSplit.append("")
|
|
path = urlSplit[0]
|
|
arguments = urlSplit[1]
|
|
return protocol,domain,path,arguments
|
|
|
|
class browserPage(QWebPage):
|
|
def __init__(self,*args,**kwargs):
|
|
super().__init__(*args,**kwargs)
|
|
self.defaultUserAgent = super().userAgentForUrl
|
|
|
|
def userAgentForUrl(self,url):
|
|
protocol,domain,path,arguments = parseUrl(url.toString())
|
|
if len(domain) < 2: return self.defaultUserAgent(url)
|
|
|
|
mainDomain = (domain[-2] + "." + domain[-1]).lower()
|
|
if domain[-2].lower() == "google": return ""
|
|
return self.defaultUserAgent(url)
|
|
|
|
class browserView(QWebView):
|
|
def __init__(self,*args,**kwargs):
|
|
super().__init__(*args,**kwargs)
|
|
self.window = args[0]
|
|
self.setPage(browserPage())
|
|
self.load(QUrl("about:blank"))
|
|
self.titleChanged.connect(self.cTitleChanged)
|
|
self.urlChanged.connect(self.cUrlChanged)
|
|
|
|
def cTitleChanged(self):
|
|
self.window.setWindowTitle(self.title()+ " - webkit-inabox-qt5")
|
|
|
|
def cUrlChanged(self,url):
|
|
self.window.cUrlBar.setText(url.toString())
|
|
self.window.cUrlBar.setCursorPosition(0)
|
|
|
|
class browserWindow(QMainWindow):
|
|
def __init__(self,*args,**kwargs):
|
|
super().__init__(*args,**kwargs)
|
|
|
|
self.cTitle = "webkit-inabox"
|
|
self.setWindowTitle(self.cTitle)
|
|
|
|
self.cWidth = 640
|
|
self.cHeight = 480
|
|
self.resize(self.cWidth,self.cHeight)
|
|
|
|
self.cCreateElements()
|
|
|
|
def cCreateElements(self):
|
|
self.cMenuBar = self.menuBar()
|
|
self.cFileMenu = self.cMenuBar.addMenu("&File")
|
|
self.cNewWindowButton = self.cFileMenu.addAction("New &window")
|
|
self.cNewWindowButton.triggered.connect(self.cNewWindow)
|
|
|
|
self.cUrlBar = QLineEdit("about:blank",self)
|
|
self.cUrlBar.returnPressed.connect(self.cNavigate)
|
|
|
|
self.cBrowserView = browserView(self)
|
|
self.cResizeElements()
|
|
self.show()
|
|
|
|
def cResizeElements(self):
|
|
barSize = 22
|
|
mb = self.cMenuBar.height()
|
|
self.cUrlBar.move(0,mb)
|
|
self.cUrlBar.resize(self.cWidth,barSize)
|
|
|
|
self.cBrowserView.move(0,mb + barSize)
|
|
self.cBrowserView.resize(self.cWidth,self.cHeight - mb - barSize)
|
|
|
|
def resizeEvent(self,event):
|
|
self.cWidth = self.width()
|
|
self.cHeight = self.height()
|
|
self.cResizeElements()
|
|
|
|
def closeEvent(self,event):
|
|
browserWindows.remove(self)
|
|
|
|
def cNewWindow(self):
|
|
browserWindows.append(browserWindow())
|
|
|
|
def cNavigate(self):
|
|
self.cUrlBar.setCursorPosition(0)
|
|
url = self.cUrlBar.text()
|
|
if len(url.split(":",1)) < 2:
|
|
url = defaultProtocol + "://" + url
|
|
|
|
self.cBrowserView.setFocus()
|
|
self.cBrowserView.load(QUrl(url))
|
|
|
|
app = QApplication(sys.argv)
|
|
browserWindows.append(browserWindow())
|
|
app.exec_() |