Preference for when to perform the check.
authorCMDR furrycat <elite@furrycat.net>
Sun, 5 Nov 2017 22:36:01 +0000 (22:36 +0000)
committerCMDR furrycat <elite@furrycat.net>
Sun, 5 Nov 2017 22:36:01 +0000 (22:36 +0000)
Querying EDSM when the jump is charging may be confusing given that
other parts of the UI update when we arrive in a system.

We now offer a configuration setting to choose whether to do the check
in response to a StartJump or FSDJump event.

load.py

diff --git a/load.py b/load.py
index 63f9626..535be41 100644 (file)
--- a/load.py
+++ b/load.py
@@ -5,6 +5,7 @@ import urllib2
 
 import Tkinter as tk
 from ttkHyperlinkLabel import HyperlinkLabel
+import myNotebook as nb
 
 from config import config
 
@@ -13,21 +14,43 @@ this.frame = None
 this.edsm_session = None
 this.edsm_data = None
 this.cache = {}
+this.config_prefix = 'plugin.MissingArrivalStar'
 
 def plugin_start():
   return 'MissingArrivalStar'
 
 def plugin_app(parent):
   this.frame = tk.Frame(parent)
-  this.frame.columnconfigure(2, weight=1)
+  this.frame.columnconfigure(2, weight = 1)
   this.frame.bind('<<MissingArrivalStar>>', edsm_callback)
   this.widget_label = tk.Label(this.frame, text = 'Arrival star:')
   this.widget_label.grid(row = 0, column = 0, sticky = tk.W)
   this.widget = tk.Label(this.frame, text = '')
   this.widget.grid(row = 0, column = 1, sticky = tk.W)
   this.last_system = None
+  this.event = tk.StringVar(value = get_pref('event', 'FSDJump'))
   return this.frame
 
+def plugin_prefs(parent, cmdr, is_beta):
+  frame = nb.Frame(parent)
+  nb.Label(frame, text = 'Query EDSM for arrival star:').grid(row = 0, padx = 10, pady = (10, 0), sticky = tk.W)
+  nb.Radiobutton(frame, variable = this.event, value = 'StartJump', text = "When jump is initiated").grid(row = 1, column = 0, padx = 10, sticky = tk.W)
+  nb.Radiobutton(frame, variable = this.event, value = 'FSDJump', text = "On arrival in system").grid(row = 2, column = 0, padx = 10, sticky = tk.W)
+  return frame
+
+def get_pref(key, default = None):
+  value = config.get('{}.{}'.format(this.config_prefix, key))
+  return value if value is not None else default
+
+def set_pref(key, value):
+  return config.set('{}.{}'.format(this.config_prefix, key), value)
+
+def prefs_changed(cmdr, is_beta):
+  set_pref('event', this.event.get())
+
+def query_on_arrival():
+  return get_pref('event', 'FSDJump') == 'FSDJump'
+
 def highlight(b):
   if b:
     this.widget['fg'] = config.get('dark_highlight')
@@ -44,7 +67,7 @@ def arrival_star_known(star_class):
 
 def arrival_star_unknown():
   highlight(True)
-  this.widget['text'] = 'UNKNOWN!  Please scan.'
+  this.widget['text'] = 'Scan needed!'
 
 def arrival_star_error():
   highlight(True)
@@ -61,12 +84,17 @@ def journal_entry(cmdr, is_beta, system, station, entry, state):
           arrival_star_known('SCANNED')
     elif entry['event'] == 'StartJump':
       if entry['JumpType'] == 'Hyperspace':
-        query_arrival_star(entry['StarSystem'])
+        if query_on_arrival():
+          arrival_star_known('')
+        else:
+          query_arrival_star(entry['StarSystem'])
     elif entry['event'] == 'Location':
       this.last_system = entry['StarSystem']
       query_arrival_star(this.last_system)
     elif entry['event'] == 'FSDJump':
       this.last_system = entry['StarSystem']
+      if query_on_arrival():
+        query_arrival_star(this.last_system)
 
 def cmdr_data(data, is_beta):
   this.last_system = data['lastSystem']['name']
@@ -89,10 +117,10 @@ def edsm_query(system):
 
   try:
     arrival_star_checking()
-    r = this.edsm_session.get('https://www.edsm.net/api-v1/system/systemName/{}/showPrimaryStar/1'.format(urllib2.quote(system)), timeout=10)
+    r = this.edsm_session.get('https://www.edsm.net/api-v1/system/systemName/{}/showPrimaryStar/1'.format(urllib2.quote(system)), timeout = 10)
     r.raise_for_status()
     this.edsm_data = r.json()
-    this.frame.event_generate('<<MissingArrivalStar>>', when='tail')
+    this.frame.event_generate('<<MissingArrivalStar>>', when = 'tail')
   except:
     arrival_star_error()
     this.edsm_data = None