Skip to content

Commit

Permalink
Revert "Open Web interface within Desktop app in GUI mode" (#444)
Browse files Browse the repository at this point in the history
  • Loading branch information
sabaimran authored Aug 16, 2023
1 parent 6562ec6 commit def909a
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 33 deletions.
2 changes: 1 addition & 1 deletion docs/setup.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ For more detailed Windows installation and troubleshooting, see [Windows Install

### 2. Start

Run the following command in your terminal to start the Khoj backend and open the Khoj native GUI
Run the following command from your terminal to start the Khoj backend and open Khoj in your browser.

```shell
khoj --gui
Expand Down
43 changes: 23 additions & 20 deletions src/khoj/interface/desktop/main_window.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
# Standard Packages
import webbrowser

# External Packages
from PySide6 import QtGui
from PySide6.QtCore import Qt, QThread, QUrl
from PySide6.QtWebEngineWidgets import QWebEngineView
from PySide6.QtWebEngineCore import QWebEnginePage
from PySide6 import QtGui, QtWidgets
from PySide6.QtCore import Qt

# Internal Packages
from khoj.utils import constants
from PySide6.QtCore import QThread


class ServerThread(QThread):
Expand All @@ -20,12 +22,11 @@ def run(self):
self.start_server_func()


class MainWindow(QWebEngineView):
class MainWindow(QtWidgets.QMainWindow):
"""Create Window to Navigate users to the web UI"""

def __init__(self, url: str):
def __init__(self, host: str, port: int):
super(MainWindow, self).__init__()
self.base_url = url

# Initialize Configure Window
self.setWindowTitle("Khoj")
Expand All @@ -34,22 +35,24 @@ def __init__(self, url: str):
icon_path = constants.web_directory / "assets/icons/favicon-128x128.png"
self.setWindowIcon(QtGui.QIcon(f"{icon_path.absolute()}"))

# Open Khoj Web App Root
self.webpage = QWebEnginePage()
self.setPage(self.webpage)
self.webpage.load(QUrl(self.base_url))
# Initialize Configure Window Layout
self.wlayout = QtWidgets.QVBoxLayout()

self.position_window()
# Add a Label that says "Khoj Configuration" to the Window
self.wlayout.addWidget(QtWidgets.QLabel("Welcome to Khoj"))

def show_page(self, page: str = "", maximized=False):
def load_page():
self.webpage.load(QUrl(f"{self.base_url}/{page}"))
if maximized:
self.showMaximized()
else:
self.show()
# Add a Button to open the Web UI at http://host:port/config
self.open_web_ui_button = QtWidgets.QPushButton("Open Web UI")
self.open_web_ui_button.clicked.connect(lambda: webbrowser.open(f"http://{host}:{port}/config"))

return load_page
self.wlayout.addWidget(self.open_web_ui_button)

# Set the central widget of the Window. Widget will expand
# to take up all the space in the window by default.
self.config_window = QtWidgets.QWidget()
self.config_window.setLayout(self.wlayout)
self.setCentralWidget(self.config_window)
self.position_window()

def position_window(self):
"Position the window at center of X axis and near top on Y axis"
Expand Down
11 changes: 7 additions & 4 deletions src/khoj/interface/desktop/system_tray.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
# Standard Packages
import webbrowser

# External Packages
from PySide6 import QtGui, QtWidgets

# Internal Packages
from khoj.utils import constants
from khoj.utils import constants, state
from khoj.interface.desktop.main_window import MainWindow


Expand All @@ -22,9 +25,9 @@ def create_system_tray(gui: QtWidgets.QApplication, main_window: MainWindow):
# Create the menu and menu actions
menu = QtWidgets.QMenu()
menu_actions = [
("Search", main_window.show_page()),
("Chat", main_window.show_page("chat")),
("Configure", main_window.show_page("config")),
("Search", lambda: webbrowser.open(f"http://{state.host}:{state.port}/")),
("Configure", lambda: webbrowser.open(f"http://{state.host}:{state.port}/config")),
("App", main_window.show),
("Quit", gui.quit),
]

Expand Down
20 changes: 12 additions & 8 deletions src/khoj/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import threading
import warnings
from platform import system
import webbrowser

# Ignore non-actionable warnings
warnings.filterwarnings("ignore", message=r"snapshot_download.py has been made private", category=FutureWarning)
Expand Down Expand Up @@ -84,9 +85,8 @@ def run():
from khoj.interface.desktop.system_tray import create_system_tray

# Setup GUI
url = f"http://{args.host}:{args.port}"
gui = QtWidgets.QApplication([])
main_window = MainWindow(url)
main_window = MainWindow(args.host, args.port)

# System tray is only available on Windows, MacOS.
# On Linux (Gnome) the System tray is not supported.
Expand All @@ -102,13 +102,17 @@ def run():
configure_routes(app)
server = ServerThread(start_server_func=lambda: start_server(app, host=args.host, port=args.port))

url = f"http://{args.host}:{args.port}"
logger.info(f"🌗 Khoj is running at {url}")

# Show config window on first run and main window otherwise
startup_window = (
main_window.show_page(maximized=True) if args.config else main_window.show_page("config", maximized=True)
)
startup_window()
try:
startup_url = url if args.config else f"{url}/config"
webbrowser.open(startup_url)
except:
logger.warning(f"🚧 Unable to open browser. Please open {url} manually to configure or use Khoj.")

# Show Main Window on First Run Experience or if on Linux
if args.config is None or system() not in ["Windows", "Darwin"]:
main_window.show()

# Setup Signal Handlers
signal.signal(signal.SIGINT, sigint_handler)
Expand Down

0 comments on commit def909a

Please sign in to comment.