From 5b959aa87f3fd7b0d06f99bb42359f9f4ccd8281 Mon Sep 17 00:00:00 2001 From: Anna Wiggins Date: Sat, 23 Jan 2016 03:36:27 -0500 Subject: [PATCH] Change update_inara to use a Tkinter-based GUI by default. --- elite_info.py | 2 +- update_inara.py | 78 +++++++++++++++++++++++++++++++++++++++++-------- utils.py | 20 ++++++------- 3 files changed, 77 insertions(+), 23 deletions(-) diff --git a/elite_info.py b/elite_info.py index a25747f..0087f81 100755 --- a/elite_info.py +++ b/elite_info.py @@ -10,7 +10,7 @@ flag_parser = argparse.ArgumentParser(description="Report information about your flag_parser.add_argument('--dump', action='store_true', help="Dump raw data.") def main(): - settings = utils.get_settings() + settings = utils.get_settings(use_gui=False) flags = flag_parser.parse_args() companion.login(settings.get('ed_companion', 'username'), settings.get('ed_companion', 'password')) diff --git a/update_inara.py b/update_inara.py index 6bba9be..b533c7a 100755 --- a/update_inara.py +++ b/update_inara.py @@ -1,22 +1,76 @@ #!/usr/bin/python +import argparse +from datetime import datetime from elite_api import companion from elite_api.inara import InaraSession +import Tkinter as tk import utils +import easygui -if utils.windows_detected(): - import easygui +arg_parser = argparse.ArgumentParser() +arg_parser.add_argument("--no-gui", + help="Just update and report to the command line.", + action="store_false", dest="gui") -settings = utils.get_settings() -inara_session = InaraSession(settings.get('inara', 'username'), settings.get('inara', 'password')) -companion.login(settings.get('ed_companion', 'username'), settings.get('ed_companion', 'password')) -data = companion.get_data() +def do_logins(settings): + inara_session = InaraSession(settings.get('inara', 'username'), settings.get('inara', 'password')) + companion.login(settings.get('ed_companion', 'username'), settings.get('ed_companion', 'password')) + return inara_session -inara_session.update_credits(data['commander']['credits']) -inara_session.update_location(data['lastSystem']['name']) -if utils.windows_detected(): - easygui.msgbox("Inara updated!") -else: - print("Inara updated!") +def update_inara(inara_session): + data = companion.get_data() + inara_session.update_credits(data['commander']['credits']) + inara_session.update_location(data['lastSystem']['name']) + + +class UpdateWindow: + def __init__(self, parent, settings): + frame = tk.Frame(parent) + frame.pack(expand=True, fill=tk.BOTH) + + self.message = tk.StringVar() + self.message.set("Click Update to update!") + message_label = tk.Label(frame, textvariable=self.message) + message_label.grid(columnspan=3, padx=20, pady=20) + + self.update_button = tk.Button(frame, text="Update", height=2, width=4, + command=self._update_inara) + self.update_button.grid(row=1, column=0, columnspan=2, pady=10) + + config_button = tk.Button(frame, text="Config", height=1, width=2, + command=utils.init_settings) + config_button.grid(row=1, column=2) + + try: + self.session = do_logins(settings) + except: + self.update_button['state'] = tk.DISABLED + self.message.set("Error logging in. Double-check your config,\nthen restart the program.") + + def _update_inara(self): + self.message.set("Updating, please wait...") + update_inara(self.session) + self.message.set("Update successful! (Last update: %s)" % + datetime.now().isoformat(' ')[:16]) + + +def main(): + args = arg_parser.parse_args() + + settings = utils.get_settings(args.gui) + + if args.gui: + root = tk.Tk() + root.wm_title("Inara Updater") + app = UpdateWindow(root, settings) + root.mainloop() + else: + inara_session = do_logins(settings) + update_inara(inara_session) + print("Inara updated!") + +if __name__ == '__main__': + main() diff --git a/utils.py b/utils.py index 7a10c2c..6938ade 100644 --- a/utils.py +++ b/utils.py @@ -4,14 +4,14 @@ import easygui import platform def get_config_dir(make=False): - if windows_detected(): + if platform.system() == 'Windows': config_suffix = os.path.join('AppData', 'Local', 'ed_tools') else: config_suffix = '.ed_tools' return os.path.join(os.path.expanduser('~'), config_suffix) -def get_settings(): +def get_settings(use_gui=True): """ Try to read the settings from file into ConfigParser object. If the config file isn't found, initialize it. @@ -26,26 +26,26 @@ def get_settings(): os.makedirs(get_config_dir()) except: pass - _init_settings(settings, filename) + + settings = init_settings(use_gui) return settings -def windows_detected(): - return platform.system() == 'Windows' - -def _init_settings(settings, filename): +def init_settings(gui=True): + settings = ConfigParser() settings.add_section('ed_companion') settings.add_section('inara') - if windows_detected(): + if gui: _settings_prompt_gui(settings) - easygui.msgbox("To change your settings later, edit " + filename) else: _settings_prompt_cli(settings) print "To change these settings later, edit " + filename - with open(filename, 'wb') as f: + with open(os.path.join(get_config_dir(), 'settings.conf'), 'wb') as f: settings.write(f) + return settings + def _settings_prompt_gui(settings): data = [] data = easygui.multenterbox(