mirror of
https://github.com/EDCD/EDMarketConnector.git
synced 2025-04-14 08:17:13 +03:00
Avoid os.path.expanduser on Windows.
expanduser() doesn't handle non-ASCII - http://bugs.python.org/issue13207 Fixes #70.
This commit is contained in:
parent
8bf63e52f0
commit
f96dc0ef6e
10
config.py
10
config.py
@ -22,6 +22,7 @@ elif platform=='win32':
|
||||
|
||||
CSIDL_PERSONAL = 0x0005
|
||||
CSIDL_LOCAL_APPDATA = 0x001C
|
||||
CSIDL_PROFILE = 0x0028
|
||||
|
||||
# _winreg that ships with Python 2 doesn't support unicode, so do this instead
|
||||
from ctypes.wintypes import *
|
||||
@ -87,6 +88,8 @@ class Config:
|
||||
if not isdir(self.app_dir):
|
||||
mkdir(self.app_dir)
|
||||
|
||||
self.home = expanduser('~')
|
||||
|
||||
if not getattr(sys, 'frozen', False):
|
||||
# Don't use Python's settings if interactive
|
||||
self.bundle = 'uk.org.marginal.%s' % appname.lower()
|
||||
@ -127,6 +130,10 @@ class Config:
|
||||
if not isdir(self.app_dir):
|
||||
mkdir(self.app_dir)
|
||||
|
||||
# expanduser in Python 2 on Windows doesn't handle non-ASCII - http://bugs.python.org/issue13207
|
||||
ctypes.windll.shell32.SHGetSpecialFolderPathW(0, buf, CSIDL_PROFILE, 0)
|
||||
self.home = buf.value
|
||||
|
||||
self.hkey = HKEY()
|
||||
disposition = DWORD()
|
||||
if RegCreateKeyEx(HKEY_CURRENT_USER, r'Software\Marginal\EDMarketConnector', 0, None, 0, KEY_ALL_ACCESS, None, ctypes.byref(self.hkey), ctypes.byref(disposition)):
|
||||
@ -152,6 +159,7 @@ class Config:
|
||||
RegCloseKey(sparklekey)
|
||||
|
||||
if not self.get('outdir') or not isdir(self.get('outdir')):
|
||||
buf = ctypes.create_unicode_buffer(MAX_PATH)
|
||||
ctypes.windll.shell32.SHGetSpecialFolderPathW(0, buf, CSIDL_PERSONAL, 0)
|
||||
self.set('outdir', buf.value)
|
||||
|
||||
@ -197,6 +205,8 @@ class Config:
|
||||
if not isdir(self.app_dir):
|
||||
makedirs(self.app_dir)
|
||||
|
||||
self.home = expanduser('~')
|
||||
|
||||
self.filename = join(getenv('XDG_CONFIG_HOME', expanduser('~/.config')), appname, '%s.ini' % appname)
|
||||
if not isdir(dirname(self.filename)):
|
||||
makedirs(dirname(self.filename))
|
||||
|
14
prefs.py
14
prefs.py
@ -1,7 +1,7 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from os.path import dirname, expanduser, isdir, sep
|
||||
from os.path import dirname, expanduser, isdir, join, sep
|
||||
from sys import platform
|
||||
|
||||
import Tkinter as tk
|
||||
@ -136,8 +136,8 @@ class PreferencesDialog(tk.Toplevel):
|
||||
self.outdir_label = nb.Label(outframe, text=_('File location')) # Section heading in settings
|
||||
self.outdir_label.grid(padx=BUTTONX, sticky=tk.W)
|
||||
self.outdir = nb.Entry(outframe, takefocus=False)
|
||||
if config.get('outdir').startswith(expanduser('~')):
|
||||
self.outdir.insert(0, '~' + config.get('outdir')[len(expanduser('~')):])
|
||||
if config.get('outdir').startswith(config.home):
|
||||
self.outdir.insert(0, '~' + config.get('outdir')[len(config.home):])
|
||||
else:
|
||||
self.outdir.insert(0, config.get('outdir'))
|
||||
self.outdir.grid(row=20, padx=(PADX,0), sticky=tk.EW)
|
||||
@ -286,7 +286,7 @@ class PreferencesDialog(tk.Toplevel):
|
||||
browseInfo.lpszTitle = _('File location')
|
||||
browseInfo.ulFlags = BIF_RETURNONLYFSDIRS|BIF_USENEWUI
|
||||
browseInfo.lpfn = BrowseCallbackProc(browsecallback)
|
||||
browseInfo.lParam = expanduser(self.outdir.get())
|
||||
browseInfo.lParam = self.outdir.get().startswith('~') and join(config.home, self.outdir.get()[1:]) or self.outdir.get()
|
||||
ctypes.windll.ole32.CoInitialize(None)
|
||||
pidl = ctypes.windll.shell32.SHBrowseForFolderW(ctypes.byref(browseInfo))
|
||||
if pidl:
|
||||
@ -300,8 +300,8 @@ class PreferencesDialog(tk.Toplevel):
|
||||
if d:
|
||||
self.outdir['state'] = tk.NORMAL # must be writable to update
|
||||
self.outdir.delete(0, tk.END)
|
||||
if d.startswith(expanduser('~')):
|
||||
self.outdir.insert(0, '~' + d[len(expanduser('~')):])
|
||||
if d.startswith(config.home):
|
||||
self.outdir.insert(0, '~' + d[len(config.home):])
|
||||
else:
|
||||
self.outdir.insert(0, d)
|
||||
self.outdir['state'] = 'readonly'
|
||||
@ -362,7 +362,7 @@ class PreferencesDialog(tk.Toplevel):
|
||||
(self.out_ship_coriolis.get() and config.OUT_SHIP_CORIOLIS) +
|
||||
(self.out_log_edsm.get() and config.OUT_LOG_EDSM) +
|
||||
(self.out_log_auto.get() and config.OUT_LOG_AUTO))
|
||||
config.set('outdir', expanduser(self.outdir.get()))
|
||||
config.set('outdir', self.outdir.get().startswith('~') and join(config.home, self.outdir.get()[1:]) or self.outdir.get())
|
||||
|
||||
config.set('edsm_cmdrname', self.edsm_cmdr.get().strip())
|
||||
config.set('edsm_apikey', self.edsm_apikey.get().strip())
|
||||
|
Loading…
x
Reference in New Issue
Block a user