106 lines
3.2 KiB
Python
106 lines
3.2 KiB
Python
from ConfigParser import ConfigParser
|
|
import os
|
|
import Tkinter as tk
|
|
import tkSimpleDialog, tkMessageBox
|
|
import platform
|
|
|
|
def get_config_dir(make=False):
|
|
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(use_gui=True, parent=None):
|
|
"""
|
|
Try to read the settings from file into ConfigParser object.
|
|
If the config file isn't found, initialize it.
|
|
"""
|
|
filename = os.path.join(get_config_dir(), 'settings.conf')
|
|
settings = ConfigParser()
|
|
|
|
if os.path.isfile(filename):
|
|
settings.read(filename)
|
|
else:
|
|
try:
|
|
os.makedirs(get_config_dir())
|
|
except:
|
|
pass
|
|
|
|
settings = update_settings(use_gui, parent)
|
|
|
|
return settings
|
|
|
|
|
|
def update_settings(gui=True, parent=None, settings=None):
|
|
if settings is None:
|
|
settings = ConfigParser()
|
|
settings.add_section('ed_companion')
|
|
settings.add_section('inara')
|
|
if gui:
|
|
dialog = ConfigDialog(parent, settings)
|
|
else:
|
|
_settings_prompt_cli(settings)
|
|
print "To change these settings later, edit " + filename
|
|
|
|
with open(os.path.join(get_config_dir(), 'settings.conf'), 'wb') as f:
|
|
settings.write(f)
|
|
|
|
return settings
|
|
|
|
|
|
def _settings_prompt_cli(settings):
|
|
settings.set('ed_companion', 'username', raw_input("Elite Username (email address): "))
|
|
settings.set('ed_companion', 'password', raw_input("Elite Password: "))
|
|
settings.set('inara', 'username', raw_input("Inara Username: "))
|
|
settings.set('inara', 'password', raw_input("Inara Password: "))
|
|
|
|
|
|
class ConfigDialog(tkSimpleDialog.Dialog):
|
|
def __init__(self, parent, settings, title="Authentication Data"):
|
|
self.settings = settings
|
|
self.entries = []
|
|
self.data = []
|
|
tkSimpleDialog.Dialog.__init__(self, parent, title)
|
|
|
|
def body(self, parent):
|
|
i = 0
|
|
values = []
|
|
|
|
for section, value in (('ed_companion', 'username'),
|
|
('ed_companion', 'password'),
|
|
('inara', 'username'),
|
|
('inara', 'password')):
|
|
if self.settings.has_option(section, value):
|
|
values.append(self.settings.get(section, value))
|
|
else:
|
|
values.append("")
|
|
|
|
for field in ("Elite Username (email address):",
|
|
"Elite Password:",
|
|
"Inara Username:",
|
|
"Inara Password:"):
|
|
label = tk.Label(parent, text=field)
|
|
label.grid(row=i, column=0, sticky=tk.W)
|
|
entry = tk.Entry(parent, width=30)
|
|
entry.insert(0, values[i])
|
|
entry.grid(row=i, column=1, sticky=tk.E)
|
|
self.entries.append(entry)
|
|
i += 1
|
|
return self.entries[0]
|
|
|
|
def validate(self):
|
|
for entry in self.entries:
|
|
if entry.get().strip() == "":
|
|
tkMessageBox.showwarning("Missing Data",
|
|
"You must provide a value for every field.")
|
|
return False
|
|
return True
|
|
|
|
def apply(self):
|
|
self.settings.set('ed_companion', 'username', self.entries[0].get().strip())
|
|
self.settings.set('ed_companion', 'password', self.entries[1].get().strip())
|
|
self.settings.set('inara', 'username', self.entries[2].get().strip())
|
|
self.settings.set('inara', 'password', self.entries[3].get().strip())
|