make version accessible without having to read a file

This works when krowlog is bundled into a single executable
This commit is contained in:
2022-08-28 08:44:45 +02:00
parent b6aa3083d2
commit 32028a54b9
3 changed files with 6 additions and 11 deletions

67
krowlog.py Normal file
View File

@@ -0,0 +1,67 @@
import logging
import signal
from PySide6 import QtCore
from PySide6.QtWidgets import QApplication
from PySide6.QtCore import QTimer
import sys
import constants
from src.pluginregistry import PluginRegistry
import gettext
from src.ui.icon import Icon
__version__ = '0.2.0'
gettext.install('krowlog', 'locale')
logging.basicConfig(level=logging.INFO)
log = logging.getLogger("main")
def stop_signal(signum, _stackframe):
""" Handle terminate signal """
try:
log.info("Terminate signal received. %s", signum)
QtCore.QCoreApplication.quit()
except Exception:
log.exception("Exception occurred while terminating")
sys.exit(1)
sys.exit(0)
if __name__ == "__main__":
app = QApplication(sys.argv)
app.setWindowIcon(Icon(constants.krow_icon)) # works only for Linux
# make icon appear in Windows
# see https://stackoverflow.com/questions/1551605/how-to-set-applications-taskbar-icon-in-windows-7/1552105#1552105
if sys.platform == 'win32' or sys.platform == 'cygwin':
myappid = 'krowlog' # arbitrary string
import ctypes
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
# workaround to make signals work in QT apps.
# They do not work out of the box, because the main thread
# is running in C++ code once app.exec() is executed
# Forcing an empty lambda to be executed periodically gives
# control back to python and allows python to react to signals
timer = QTimer()
timer.timeout.connect(lambda: None)
timer.start(100)
# init plugins
PluginRegistry.load_plugin("KrowLogPlugin")
PluginRegistry.load_plugin("OpenFilePlugin")
PluginRegistry.load_plugin("LogFilePlugin")
PluginRegistry.load_plugin("NotesPlugin")
PluginRegistry.load_plugin("TimeDiffPlugin")
PluginRegistry.load_plugin("FilesBrowserPlugin")
window = PluginRegistry.execute_single("create_main_window")
window.show()
PluginRegistry.execute("after_start")
signal.signal(signal.SIGINT, stop_signal)
signal.signal(signal.SIGTERM, stop_signal)
app.exec()