Skip to content

Commit

Permalink
version check and logging
Browse files Browse the repository at this point in the history
  • Loading branch information
gogodr committed Jun 7, 2022
1 parent 78f31c4 commit 496c7fb
Show file tree
Hide file tree
Showing 11 changed files with 397 additions and 27 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ dist/
__pycache__
config.ini
file_version_info.txt
lamo-watcher.exe
lamo-watcher.exe
lamo-launcher.exe
logs/
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ Audio files from [MixKit](https://mixkit.co/)


### Changelog
### 1.2.3.1
- Logging update
- Launcher version check

### 1.2.1.1
- Update forms
- Update config strategy
Expand Down
80 changes: 67 additions & 13 deletions index.py
Original file line number Diff line number Diff line change
@@ -1,21 +1,66 @@
from modules.logging import AppLogger
from modules.messagebox import MessageBoxHandler
import modules.single_instance
import os
import sys
import traceback
import subprocess

from PySide6.QtWidgets import QApplication
from PySide6.QtGui import QIcon
from PySide6.QtCore import Signal
from modules.app_version import get_app_version
from modules.config import Config
from modules.sound import playDownloadComplete, playError, playSuccess, playUpdateDetected
from modules.sound import VolumeController, playDownloadComplete, playError, playSuccess, playUpdateDetected
from ui.download.download import LostArkMarketLauncherDownload
from ui.login_form.login_form import LostArkMarketLoginForm


class LostArkMarketOnlineLauncher(QApplication):
message_box_handler: MessageBoxHandler
volume_controller: VolumeController
message_box = Signal(dict)

def __init__(self, *args, **kwargs):
QApplication.__init__(self, *args, **kwargs)

if(Config().refresh_token):

self.volume_controller = VolumeController()
self.message_box_handler = MessageBoxHandler(self.message_box)

self.launcher_check_config()

# Launcher Version Check

def launcher_check_config(self):
Config().check_launcher_version()
AppLogger().info(
f"Launcher remote version {Config().launcher_version}")
if Config().launcher_needs_update == True:
AppLogger().info(f"Launcher needs update")
playUpdateDetected()
self.download = LostArkMarketLauncherDownload({
"url": f'https://github.com/gogodr/LostArk-Market-Launcher/releases/download/{Config().launcher_version}/{Config().launcher_file}.exe',
"title": f'New version of the Lost Ark Market Launcher Found: v{Config().launcher_version}',
"file": f'{Config().launcher_file}.exe'
})
self.download.launch.connect(self.launch_launcher)
self.download.finished_download.connect(self.launcher_downloaded)
else:
self.session_check()

def launch_launcher(self):
os.startfile(sys.argv[0])
sys.exit()

def launcher_downloaded(self):
playDownloadComplete()
if(Config().run_after_download):
self.download.close()
self.launch_launcher()

# Session Check
def session_check(self):
if(Config().refresh_token):
self.check_config()
else:
self.login_form = LostArkMarketLoginForm()
Expand All @@ -30,19 +75,22 @@ def login_success(self):
self.login_form.close()
self.check_config()

# Watcher Version Check
def check_config(self):
Config().check_watcher_version()
if Config().needs_update == True:
if Config().watcher_needs_update == True:
playUpdateDetected()
self.download = LostArkMarketLauncherDownload({
"url": f'https://github.com/gogodr/LostArk-Market-Watcher/releases/download/{Config().watcher_version}/{Config().watcher_file}.exe'
"url": f'https://github.com/gogodr/LostArk-Market-Watcher/releases/download/{Config().watcher_version}/{Config().watcher_file}.exe',
"title": f'New version of the Lost Ark Market Watcher Found: v{Config().watcher_version}',
"file": f'{Config().watcher_file}.exe'
})
self.download.launch.connect(self.launch_watcher)
self.download.finished_download.connect(self.finished_download)
self.download.finished_download.connect(self.watcher_downloaded)
else:
self.launch_watcher()

def finished_download(self):
def watcher_downloaded(self):
playDownloadComplete()
if(Config().run_after_download):
self.download.close()
Expand All @@ -57,9 +105,15 @@ def launch_watcher(self):


if __name__ == "__main__":
Config()
app = LostArkMarketOnlineLauncher([])
icon = QIcon(os.path.abspath(os.path.join(os.path.dirname(__file__),
"assets/icons/favicon.png")))
app.setWindowIcon(icon)
sys.exit(app.exec())
try:
Config()
AppLogger()
AppLogger().info("Start Launcher")
app = LostArkMarketOnlineLauncher([])
icon = QIcon(os.path.abspath(os.path.join(os.path.dirname(__file__),
"assets/icons/favicon.png")))
app.setWindowIcon(icon)
sys.exit(app.exec())
except Exception as ex:
print(ex)
AppLogger().exception(ex)
64 changes: 60 additions & 4 deletions modules/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,24 @@


class Config(metaclass=Singleton):
version = "1.2.1.1"
version = "1.2.3.1"
debug = False
id_token: str = None
refresh_token: str = None
uid: str = None
play_audio: bool = True
volume: int = 50
save_log: bool = True
run_after_download: bool = True
needs_update = False
watcher_needs_update = False
watcher_version: str = None
watcher_file: str = None
launcher_needs_update = False
launcher_version: str = None
launcher_file: str = None

def __init__(self) -> None:
print("load_config")
self._config = configparser.ConfigParser()
self._config.read("config.ini")
self.load_config()
Expand All @@ -36,6 +41,18 @@ def load_config(self):
self.debug = self._config.get(
"Launcher", "debug") == 'True'

if self._config.has_section("Watcher"):
if self._config.has_option("Watcher", "play_audio"):
self.play_audio = self._config.get(
"Watcher", "play_audio") == 'True'
else:
self.play_audio = True
changes = True

if self._config.has_option("Watcher", "volume"):
self.volume = float(self._config.get(
"Watcher", "volume"))

def update_config_file(self):
if self._config.has_section("Token") == False:
self._config.add_section("Token")
Expand All @@ -53,6 +70,17 @@ def update_config_file(self):
self.set_or_remove_config_option(
"Launcher", "debug", self.debug
)

if self._config.has_section("Watcher") == False:
self._config.add_section("Watcher")

self.set_or_remove_config_option(
"Watcher", "play_audio", self.play_audio
)
self.set_or_remove_config_option(
"Watcher", "volume", self.volume
)

with open("config.ini", "w") as configfile:
self._config.write(configfile)

Expand All @@ -68,6 +96,34 @@ def set_or_remove_config_option(self, section, option, value):
else:
self._config.set(section, option, str(value))

def check_launcher_version(self):
res = requests.get(
f'https://firestore.googleapis.com/v1/projects/lostarkmarket-79ddf/databases/(default)/documents/app-info/launcher')
res = res.json()
self.launcher_file = res["fields"]["file"]["stringValue"]
self.launcher_version = res["fields"]["version"]["stringValue"]

if os.path.isfile(f"{self.launcher_file}.exe") == False:
self.launcher_needs_update = True
else:
pe = pefile.PE(f"{self.launcher_file}.exe")

def LOWORD(dword):
return dword & 0x0000ffff

def HIWORD(dword):
return dword >> 16

ms = pe.VS_FIXEDFILEINFO[0].ProductVersionMS
ls = pe.VS_FIXEDFILEINFO[0].ProductVersionLS

curr_version = version.parse(
f"{HIWORD(ms)}.{LOWORD(ms)}.{HIWORD(ls)}.{LOWORD(ls)}")
latest_version = version.parse(self.launcher_version)

if latest_version > curr_version:
self.launcher_needs_update = True

def check_watcher_version(self):
res = requests.get(
f'https://firestore.googleapis.com/v1/projects/lostarkmarket-79ddf/databases/(default)/documents/app-info/market-watcher')
Expand All @@ -76,7 +132,7 @@ def check_watcher_version(self):
self.watcher_version = res["fields"]["version"]["stringValue"]

if os.path.isfile(f"{self.watcher_file}.exe") == False:
self.needs_update = True
self.watcher_needs_update = True
else:
pe = pefile.PE(f"{self.watcher_file}.exe")

Expand All @@ -85,7 +141,7 @@ def LOWORD(dword):

def HIWORD(dword):
return dword >> 16

ms = pe.VS_FIXEDFILEINFO[0].ProductVersionMS
ls = pe.VS_FIXEDFILEINFO[0].ProductVersionLS

Expand Down
126 changes: 126 additions & 0 deletions modules/logging.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@

from datetime import datetime

from modules.common.singleton import Singleton
from modules.config import Config

import logging
import os

DATEFMT = '%Y-%m-%dT%H:%M:%S'
LOG_FORMAT = '%(asctime)s - LAUNCHER - %(levelname)s - %(message)s'
LOG_FILE_INFO = f'logs/{datetime.now().strftime("%m-%d-%Y")}.log'
LOG_FILE_ERROR = f'logs/{datetime.now().strftime("%m-%d-%Y")}.err'


class SignalHandler(logging.Handler):
signal = None

def __init__(self, signal):
super(SignalHandler, self).__init__()
self.signal = signal

def emit(self, record):
if self.signal:
self.signal.emit(
f'{record.asctime} - {record.levelname} - {record.message}', record.levelno)


class LoggingFilter(object):
def __init__(self, level):
self.__level = level

def filter(self, logRecord):
return logRecord.levelno <= self.__level


class AppLogger(metaclass=Singleton):
logger: logging.Logger = None
file_handler_info: logging.FileHandler = None
file_handler_error: logging.FileHandler = None
signal_handler_info: SignalHandler = None
signal_handler_error: SignalHandler = None
log_formatter: logging.Formatter = logging.Formatter(
datefmt=DATEFMT, fmt=LOG_FORMAT)

def __init__(self) -> None:
print("Init")
self.logger = logging.getLogger('LostArkMarketLauncher')

stream_handler = logging.StreamHandler()
stream_handler.setFormatter(self.log_formatter)
self.logger.addHandler(stream_handler)
print("stream handled added")

if Config().debug:
self.logger.setLevel(logging.DEBUG)
else:
self.logger.setLevel(logging.INFO)
print("logger setlevel")

self.debug = self.logger.debug
self.info = self.logger.info
self.warning = self.logger.warning
self.error = self.logger.error
self.exception = self.logger.exception

print("Init loggers")
if Config().save_log:
if os.path.exists("logs") == False:
os.mkdir('logs')
self.file_enable()

def file_enable(self):
if self.file_handler_info is None:
self.file_handler_info = logging.FileHandler(
LOG_FILE_INFO, mode='a')
self.file_handler_info.setFormatter(self.log_formatter)
self.file_handler_info.setLevel(logging.DEBUG)
self.file_handler_info.addFilter(LoggingFilter(logging.INFO))
self.logger.addHandler(self.file_handler_info)

if self.file_handler_error is None:
self.file_handler_error = logging.FileHandler(
LOG_FILE_ERROR, mode='a')
self.file_handler_error.setFormatter(self.log_formatter)
self.file_handler_error.setLevel(logging.ERROR)
self.file_handler_error.addFilter(LoggingFilter(logging.ERROR))
self.logger.addHandler(self.file_handler_error)

def file_disable(self):
if self.file_handler_info:
self.logger.removeHandler(self.file_handler_info)
self.file_handler_info = None
if self.file_handler_error:
self.logger.removeHandler(self.file_handler_error)
self.file_handler_error = None

def signal_enable(self, signal):
if self.signal_handler_info is None:
self.signal_handler_info = SignalHandler(signal)
self.signal_handler_info.setFormatter(self.log_formatter)
self.signal_handler_info.setLevel(logging.DEBUG)
self.signal_handler_info.addFilter(LoggingFilter(logging.INFO))
self.logger.addHandler(self.signal_handler_info)

if self.signal_handler_error is None:
self.signal_handler_error = SignalHandler(signal)
self.signal_handler_error.setFormatter(self.log_formatter)
self.signal_handler_error.setLevel(logging.ERROR)
self.signal_handler_error.addFilter(LoggingFilter(logging.ERROR))
self.logger.addHandler(self.signal_handler_error)

def signal_disable(self):
if self.signal_handler_info:
self.logger.removeHandler(self.signal_handler_info)
self.signal_handler_info = None

if self.signal_handler_error:
self.logger.removeHandler(self.signal_handler_error)
self.signal_handler_error = None

def refresh_handlers(self):
if Config().save_log:
self.file_enable()
else:
self.file_disable()
Loading

0 comments on commit 496c7fb

Please sign in to comment.