mirror of
https://github.com/EDCD/EDMarketConnector.git
synced 2025-06-17 23:51:42 +03:00
Implement retry of locking when journal dir changed.
In case the user does have another EDMC instance running that they need to kill first.
This commit is contained in:
parent
447cd2c2d7
commit
f449286983
@ -551,7 +551,7 @@ class AppWindow(object):
|
|||||||
hotkeymgr.register(self.w, config.getint('hotkey_code'), config.getint('hotkey_mods'))
|
hotkeymgr.register(self.w, config.getint('hotkey_code'), config.getint('hotkey_mods'))
|
||||||
|
|
||||||
# Update Journal lock if needs be.
|
# Update Journal lock if needs be.
|
||||||
journal_lock.update_lock()
|
journal_lock.update_lock(self.w)
|
||||||
|
|
||||||
# (Re-)install log monitoring
|
# (Re-)install log monitoring
|
||||||
if not monitor.start(self.w):
|
if not monitor.start(self.w):
|
||||||
|
75
monitor.py
75
monitor.py
@ -7,9 +7,11 @@ from os import listdir, SEEK_SET, SEEK_END
|
|||||||
from os.path import basename, expanduser, isdir, join
|
from os.path import basename, expanduser, isdir, join
|
||||||
import pathlib
|
import pathlib
|
||||||
from sys import platform
|
from sys import platform
|
||||||
|
import tkinter as tk
|
||||||
|
from tkinter import ttk
|
||||||
from time import gmtime, localtime, sleep, strftime, strptime, time
|
from time import gmtime, localtime, sleep, strftime, strptime, time
|
||||||
from calendar import timegm
|
from calendar import timegm
|
||||||
from typing import Any, List, MutableMapping, Optional, OrderedDict as OrderedDictT, Tuple, TYPE_CHECKING, Union
|
from typing import Any, Callable, List, MutableMapping, Optional, OrderedDict as OrderedDictT, Tuple, TYPE_CHECKING, Union
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
import tkinter
|
import tkinter
|
||||||
@ -1139,19 +1141,76 @@ class JournalLock:
|
|||||||
|
|
||||||
return unlocked
|
return unlocked
|
||||||
|
|
||||||
def update_lock(self) -> bool:
|
class JournalAlreadyLocked(tk.Toplevel):
|
||||||
"""
|
"""Pop-up for when Journal directory already locked."""
|
||||||
Update journal directory lock to new location if possible.
|
|
||||||
|
|
||||||
:return: bool - Success of obtaining new lock
|
def __init__(self, parent: tk.Tk, callback: Callable):
|
||||||
"""
|
tk.Toplevel.__init__(self, parent)
|
||||||
|
|
||||||
|
self.parent = parent
|
||||||
|
self.callback = callback
|
||||||
|
self.title('Journal directory already locked')
|
||||||
|
|
||||||
|
# remove decoration
|
||||||
|
if platform == 'win32':
|
||||||
|
self.attributes('-toolwindow', tk.TRUE)
|
||||||
|
|
||||||
|
elif platform == 'darwin':
|
||||||
|
# http://wiki.tcl.tk/13428
|
||||||
|
parent.call('tk::unsupported::MacWindowStyle', 'style', self, 'utility')
|
||||||
|
|
||||||
|
self.resizable(tk.FALSE, tk.FALSE)
|
||||||
|
|
||||||
|
frame = ttk.Frame(self)
|
||||||
|
frame.grid(sticky=tk.NSEW)
|
||||||
|
|
||||||
|
self.blurb = tk.Label(frame)
|
||||||
|
self.blurb['text'] = '''The new Journal Directory location is already locked.
|
||||||
|
You can either attempt to resolve this and then Retry, or choose to Ignore this.'''
|
||||||
|
self.blurb.grid(row=1, column=0, columnspan=2, sticky=tk.NSEW)
|
||||||
|
|
||||||
|
self.retry_button = ttk.Button(frame, text='Retry', command=self.retry)
|
||||||
|
self.retry_button.grid(row=2, column=0, sticky=tk.EW)
|
||||||
|
|
||||||
|
self.ignore_button = ttk.Button(frame, text='Ignore', command=self.ignore)
|
||||||
|
self.ignore_button.grid(row=2, column=1, sticky=tk.EW)
|
||||||
|
self.protocol("WM_DELETE_WINDOW", self._destroy)
|
||||||
|
|
||||||
|
def retry(self):
|
||||||
|
logger.trace('User selected: Retry')
|
||||||
|
self.destroy()
|
||||||
|
self.callback(True, self.parent)
|
||||||
|
|
||||||
|
def ignore(self):
|
||||||
|
logger.trace('User selected: Ignore')
|
||||||
|
self.destroy()
|
||||||
|
self.callback(False, self.parent)
|
||||||
|
|
||||||
|
def _destroy(self):
|
||||||
|
logger.trace('User force-closed popup, treating as Ignore')
|
||||||
|
self.ignore()
|
||||||
|
|
||||||
|
def update_lock(self, parent: tk.Tk):
|
||||||
|
"""Update journal directory lock to new location if possible."""
|
||||||
current_journaldir = config.get('journaldir') or config.default_journal_dir
|
current_journaldir = config.get('journaldir') or config.default_journal_dir
|
||||||
|
|
||||||
if current_journaldir == self.journal_dir:
|
if current_journaldir == self.journal_dir:
|
||||||
return True # Still the same
|
return # Still the same
|
||||||
|
|
||||||
self.release_lock()
|
self.release_lock()
|
||||||
|
|
||||||
self.journal_dir = current_journaldir
|
self.journal_dir = current_journaldir
|
||||||
self.journal_dir_path = pathlib.Path(self.journal_dir)
|
self.journal_dir_path = pathlib.Path(self.journal_dir)
|
||||||
return self.obtain_lock()
|
if not self.obtain_lock():
|
||||||
|
# Pop-up message asking for Retry or Ignore
|
||||||
|
self.retry_popup = self.JournalAlreadyLocked(parent, self.retry_lock)
|
||||||
|
|
||||||
|
def retry_lock(self, retry: bool, parent: tk.Tk):
|
||||||
|
logger.trace(f'We should retry: {retry}')
|
||||||
|
|
||||||
|
current_journaldir = config.get('journaldir') or config.default_journal_dir
|
||||||
|
self.journal_dir = current_journaldir
|
||||||
|
self.journal_dir_path = pathlib.Path(self.journal_dir)
|
||||||
|
if not self.obtain_lock():
|
||||||
|
# Pop-up message asking for Retry or Ignore
|
||||||
|
self.retry_popup = self.JournalAlreadyLocked(parent, self.retry_lock)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user