1
0
Fork 0
mirror of https://github.com/kbumsik/VirtScreen.git synced 2025-03-09 15:40:18 +00:00

Added: Saving settings

This commit is contained in:
Bumsik Kim 2018-05-11 15:25:20 -04:00
parent 859044c6eb
commit 35b61fc74a
No known key found for this signature in database
GPG key ID: E31041C8EC5B01C6
2 changed files with 58 additions and 22 deletions

View file

@ -440,7 +440,11 @@ ApplicationWindow {
menu: Labs.Menu { menu: Labs.Menu {
Labs.MenuItem { Labs.MenuItem {
text: qsTr("&Quit") text: qsTr("&Quit")
onTriggered: backend.quitProgram() onTriggered: {
backend.onVirtScreenCreatedChanged.disconnect(window.switchVNC);
backend.onVncStateChanged.disconnect(window.switchVNC);
backend.quitProgram();
}
} }
} }
} }

View file

@ -1,8 +1,8 @@
#!/usr/bin/env python #!/usr/bin/env python
import sys, os, subprocess, signal, re, atexit, time import sys, os, subprocess, signal, re, atexit, time, json
from enum import Enum from enum import Enum
from typing import List from typing import List, Dict
from PyQt5.QtWidgets import QApplication from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QObject, QUrl, Qt, pyqtProperty, pyqtSlot, pyqtSignal, Q_ENUMS from PyQt5.QtCore import QObject, QUrl, Qt, pyqtProperty, pyqtSlot, pyqtSignal, Q_ENUMS
@ -20,7 +20,8 @@ if HOME_PATH is not None:
HOME_PATH = HOME_PATH + "/.virtscreen" HOME_PATH = HOME_PATH + "/.virtscreen"
X11VNC_LOG_PATH = HOME_PATH + "/x11vnc_log.txt" X11VNC_LOG_PATH = HOME_PATH + "/x11vnc_log.txt"
X11VNC_PASSWORD_PATH = HOME_PATH + "/x11vnc_passwd" X11VNC_PASSWORD_PATH = HOME_PATH + "/x11vnc_passwd"
CONFIG_PATH = HOME_PATH + "/config" CONFIG_PATH = HOME_PATH + "/config.json"
DEFAULT_CONFIG_PATH = "./config.default.json"
PROGRAM_PATH = "." PROGRAM_PATH = "."
ICON_PATH = PROGRAM_PATH + "/icon/icon.png" ICON_PATH = PROGRAM_PATH + "/icon/icon.png"
@ -326,6 +327,25 @@ class ProcessProtocol(protocol.ProcessProtocol):
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
class Backend(QObject): class Backend(QObject):
""" Backend class for QML frontend """ """ Backend class for QML frontend """
# Virtual screen properties
settings: Dict
xrandr: XRandR
_virt: DisplayProperty = DisplayProperty()
_portrait: bool
_hidpi: bool
_virtScreenCreated: bool = False
_screens: List[DisplayProperty]
_virtScreenIndex: int
# VNC server properties
_vncPort: int
_vncPassword: str = ""
_vncState: int
_ipAddresses: List[str] = []
# Primary screen and mouse posistion
_primary: DisplayProperty()
_cursor_x: int
_cursor_y: int
class VNCState: class VNCState:
""" Enum to indicate a state of the VNC server """ """ Enum to indicate a state of the VNC server """
OFF = 0 OFF = 0
@ -342,27 +362,31 @@ class Backend(QObject):
def __init__(self, parent=None): def __init__(self, parent=None):
super(Backend, self).__init__(parent) super(Backend, self).__init__(parent)
# objects # Read JSON to load variables
try:
with open(CONFIG_PATH, "r") as f:
self.settings = json.load(f)
self.virt.width = self.settings['virt']['width']
self.virt.height = self.settings['virt']['height']
self._portrait = self.settings['virt']['portrait']
self._hidpi = self.settings['virt']['hidpi']
self._vncPort = self.settings['vnc']['port']
except (FileNotFoundError, json.JSONDecodeError, KeyError):
print("Default Setting used.")
with open(DEFAULT_CONFIG_PATH, "r") as f:
self.settings = json.load(f)
self.virt.width = self.settings['virt']['width']
self.virt.height = self.settings['virt']['height']
self._portrait = self.settings['virt']['portrait']
self._hidpi = self.settings['virt']['hidpi']
self._vncPort = self.settings['vnc']['port']
# create objects
self._vncState: Backend.VNCState = Backend.VNCState.OFF
self.xrandr = XRandR() self.xrandr = XRandR()
# Virtual screen properties self._screens = self.xrandr.screens
self._virt = DisplayProperty()
self.virt.width = 1368
self.virt.height = 1024
self._portrait = False
self._hidpi = False
self._virtScreenCreated = False
self._screens: List[DisplayProperty] = self.xrandr.screens
self._virtScreenIndex = self.xrandr.virt_idx self._virtScreenIndex = self.xrandr.virt_idx
# VNC server properties
self._vncPort = 5900
self._vncPassword = ""
self._vncState = Backend.VNCState.OFF
self._ipAddresses: List[str] = []
self.updateIPAddresses()
# Primary screen and mouse posistion
self._primary: DisplayProperty() = self.xrandr.get_primary_screen() self._primary: DisplayProperty() = self.xrandr.get_primary_screen()
self._cursor_x: int self.updateIPAddresses()
self._cursor_y: int
# Qt properties # Qt properties
@pyqtProperty(DisplayProperty) @pyqtProperty(DisplayProperty)
@ -541,6 +565,14 @@ class Backend(QObject):
@pyqtSlot() @pyqtSlot()
def quitProgram(self): def quitProgram(self):
# Save settings first
with open(CONFIG_PATH, 'w') as f:
self.settings['virt']['width'] = self.virt.width
self.settings['virt']['height'] = self.virt.height
self.settings['virt']['portrait'] = self._portrait
self.settings['virt']['hidpi'] = self._hidpi
self.settings['vnc']['port'] = self._vncPort
json.dump(self.settings, f, sort_keys=True, indent=4)
QApplication.instance().quit() QApplication.instance().quit()
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------