From e573b8996647ccda1555e6bd6af5c694c333b630 Mon Sep 17 00:00:00 2001 From: David Sangrey Date: Sat, 27 Apr 2024 14:58:03 -0400 Subject: [PATCH 1/3] [1654] Updated setCommanderShip entry --- plugins/inara.py | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/plugins/inara.py b/plugins/inara.py index 810f7523..47c857e6 100644 --- a/plugins/inara.py +++ b/plugins/inara.py @@ -553,23 +553,6 @@ def journal_entry( # noqa: C901, CCR001 # Ship change if event_name == 'Loadout' and this.shipswap: - cur_ship = { - 'shipType': state['ShipType'], - 'shipGameID': state['ShipID'], - 'shipName': state['ShipName'], # Can be None - 'shipIdent': state['ShipIdent'], # Can be None - 'isCurrentShip': True, - } - - if state['HullValue']: - cur_ship['shipHullValue'] = state['HullValue'] - - if state['ModulesValue']: - cur_ship['shipModulesValue'] = state['ModulesValue'] - - cur_ship['shipRebuyCost'] = state['Rebuy'] - new_add_event('setCommanderShip', entry['timestamp'], cur_ship) - this.loadout = make_loadout(state) new_add_event('setCommanderShipLoadout', entry['timestamp'], this.loadout) this.shipswap = False @@ -857,7 +840,7 @@ def journal_entry( # noqa: C901, CCR001 for ship in this.fleet: new_add_event('setCommanderShip', entry['timestamp'], ship) # Loadout - if event_name == 'Loadout' and not this.newsession: + if event_name == 'Loadout': loadout = make_loadout(state) if this.loadout != loadout: this.loadout = loadout @@ -871,6 +854,26 @@ def journal_entry( # noqa: C901, CCR001 new_add_event('setCommanderShipLoadout', entry['timestamp'], this.loadout) + cur_ship = { + 'shipType': state['ShipType'], + 'shipGameID': state['ShipID'], + 'shipName': state['ShipName'], # Can be None + 'shipIdent': state['ShipIdent'], # Can be None + 'isCurrentShip': True, + 'shipMaxJumpRange': entry['MaxJumpRange'], + 'shipCargoCapacity': entry['CargoCapacity'] + } + if state['HullValue']: + cur_ship['shipHullValue'] = state['HullValue'] + + if state['ModulesValue']: + cur_ship['shipModulesValue'] = state['ModulesValue'] + + if state['Rebuy']: + cur_ship['shipRebuyCost'] = state['Rebuy'] + + new_add_event('setCommanderShip', entry['timestamp'], cur_ship) + # Stored modules if event_name == 'StoredModules': items = {mod['StorageSlot']: mod for mod in entry['Items']} # Impose an order From f03ae7809f1591322543f332a8a28b7ff28673b4 Mon Sep 17 00:00:00 2001 From: David Sangrey Date: Sat, 27 Apr 2024 15:27:22 -0400 Subject: [PATCH 2/3] [2166] Update Watchdog Type Hints Watchdog 4.0.0 included an update to the public API where FileSystemEvent, and subclasses, are now dataclasses, and their repr() has changed. As such, (insofar as I can tell) the FileCreatedEvent is now a FileSystemEvent. MyPy also suggests that this is a FileSystemEvent as well. --- monitor.py | 6 +++--- requirements.txt | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/monitor.py b/monitor.py index 02b7f91c..1fd8a1d8 100644 --- a/monitor.py +++ b/monitor.py @@ -42,7 +42,7 @@ if sys.platform == 'win32': import ctypes from ctypes.wintypes import BOOL, HWND, LPARAM, LPWSTR - from watchdog.events import FileCreatedEvent, FileSystemEventHandler + from watchdog.events import FileSystemEventHandler, FileSystemEvent from watchdog.observers import Observer from watchdog.observers.api import BaseObserver @@ -64,7 +64,7 @@ else: FileSystemEventHandler = object # dummy if TYPE_CHECKING: # this isn't ever used, but this will make type checking happy - from watchdog.events import FileCreatedEvent + from watchdog.events import FileSystemEvent from watchdog.observers import Observer from watchdog.observers.api import BaseObserver @@ -350,7 +350,7 @@ class EDLogs(FileSystemEventHandler): """ return bool(self.thread and self.thread.is_alive()) - def on_created(self, event: 'FileCreatedEvent') -> None: + def on_created(self, event: 'FileSystemEvent') -> None: """Watchdog callback when, e.g. client (re)started.""" if not event.is_directory and self._RE_LOGFILE.search(basename(event.src_path)): diff --git a/requirements.txt b/requirements.txt index 75ea4041..2e0fb39f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,7 +4,7 @@ pillow==10.3.0 # requests depends on this now ? charset-normalizer==3.3.2 -watchdog==3.0.0 +watchdog==4.0.0 # Commented out because this doesn't package well with py2exe infi.systray==0.1.12; sys_platform == 'win32' # argh==0.26.2 watchdog dep From 8198d779c3e7479bfc75dfae6faa47a25dc9a3ca Mon Sep 17 00:00:00 2001 From: David Sangrey Date: Thu, 2 May 2024 21:34:58 -0400 Subject: [PATCH 3/3] [830] Open Log Folder Natively --- EDMarketConnector.py | 6 +++--- prefs.py | 24 ++++++++++++++++-------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/EDMarketConnector.py b/EDMarketConnector.py index 3ab97eb5..1ce34628 100755 --- a/EDMarketConnector.py +++ b/EDMarketConnector.py @@ -18,6 +18,7 @@ import subprocess import sys import threading import webbrowser +import tempfile from os import chdir, environ, path from time import localtime, strftime, time from typing import TYPE_CHECKING, Any, Literal @@ -47,8 +48,6 @@ if __name__ == '__main__': # output until after this redirect is done, if needed. if getattr(sys, 'frozen', False): # By default py2exe tries to write log to dirname(sys.executable) which fails when installed - import tempfile - # unbuffered not allowed for text in python3, so use `1 for line buffering log_file_path = path.join(tempfile.gettempdir(), f'{appname}.log') sys.stdout = sys.stderr = open(log_file_path, mode='wt', buffering=1) # Do NOT use WITH here. @@ -651,7 +650,8 @@ class AppWindow: self.help_menu.add_command(command=lambda: self.updater.check_for_updates()) # Check for Updates... # About E:D Market Connector self.help_menu.add_command(command=lambda: not self.HelpAbout.showing and self.HelpAbout(self.w)) - self.help_menu.add_command(command=prefs.help_open_log_folder) # Open Log Folder + logfile_loc = pathlib.Path(tempfile.gettempdir()) / appname + self.help_menu.add_command(command=lambda: prefs.open_folder(logfile_loc)) # Open Log Folder self.menubar.add_cascade(menu=self.help_menu) if sys.platform == 'win32': diff --git a/prefs.py b/prefs.py index 285ef0d7..81885257 100644 --- a/prefs.py +++ b/prefs.py @@ -8,14 +8,12 @@ import pathlib import sys import tempfile import tkinter as tk -import webbrowser from os import system from os.path import expanduser, expandvars, join, normpath from tkinter import colorchooser as tkColorChooser # type: ignore # noqa: N812 from tkinter import ttk from types import TracebackType from typing import TYPE_CHECKING, Any, Callable, Optional, Type - import myNotebook as nb # noqa: N813 import plug from config import appversion_nobuild, config @@ -44,14 +42,21 @@ if TYPE_CHECKING: def help_open_log_folder() -> None: """Open the folder logs are stored in.""" - logfile_loc = pathlib.Path(tempfile.gettempdir()) - logfile_loc /= f'{appname}' + logger.warning( + DeprecationWarning("This function is deprecated, use open_log_folder instead. " + "This function will be removed in 6.0 or later") + ) + open_folder(pathlib.Path(tempfile.gettempdir()) / appname) + + +def open_folder(file: pathlib.Path) -> None: + """Open the given file in the OS file explorer.""" if sys.platform.startswith('win'): # On Windows, use the "start" command to open the folder - system(f'start "" "{logfile_loc}"') + system(f'start "" "{file}"') elif sys.platform.startswith('linux'): # On Linux, use the "xdg-open" command to open the folder - system(f'xdg-open "{logfile_loc}"') + system(f'xdg-open "{file}"') class PrefsVersion: @@ -300,6 +305,9 @@ class PreferencesDialog(tk.Toplevel): ): self.geometry(f"+{position.left}+{position.top}") + # Set Log Directory + self.logfile_loc = pathlib.Path(tempfile.gettempdir()) / appname + def __setup_output_tab(self, root_notebook: ttk.Notebook) -> None: output_frame = nb.Frame(root_notebook) output_frame.columnconfigure(0, weight=1) @@ -625,7 +633,7 @@ class PreferencesDialog(tk.Toplevel): config_frame, # LANG: Label on button used to open a filesystem folder text=_('Open Log Folder'), # Button that opens a folder in Explorer/Finder - command=lambda: help_open_log_folder() + command=lambda: open_folder(self.logfile_loc) ).grid(column=2, padx=self.PADX, pady=0, sticky=tk.NSEW, row=cur_row) # Big spacer @@ -884,7 +892,7 @@ class PreferencesDialog(tk.Toplevel): plugins_frame, # LANG: Label on button used to open a filesystem folder text=_('Open'), # Button that opens a folder in Explorer/Finder - command=lambda: webbrowser.open(f'file:///{config.plugin_dir_path}') + command=lambda: open_folder(config.plugin_dir_path) ).grid(column=1, padx=self.PADX, pady=self.PADY, sticky=tk.N, row=cur_row) enabled_plugins = list(filter(lambda x: x.folder and x.module, plug.PLUGINS))