mirror of
https://github.com/MCV-Software/TWBlue.git
synced 2024-11-22 19:28:09 -06:00
Use platform_utils as an external dependency
This commit is contained in:
parent
422c780d0c
commit
e24543be12
@ -26,3 +26,4 @@ certifi
|
|||||||
backports.functools_lru_cache
|
backports.functools_lru_cache
|
||||||
git+https://github.com/manuelcortez/twython
|
git+https://github.com/manuelcortez/twython
|
||||||
git+https://github.com/manuelcortez/libloader
|
git+https://github.com/manuelcortez/libloader
|
||||||
|
git+https://github.com/manuelcortez/platform_utils
|
@ -18,7 +18,7 @@ import config_utils
|
|||||||
log = logging.getLogger("Settings")
|
log = logging.getLogger("Settings")
|
||||||
import keys
|
import keys
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from platform_utils.autostart import windows as autostart_windows
|
from mysc import autostart as autostart_windows
|
||||||
|
|
||||||
class globalSettingsController(object):
|
class globalSettingsController(object):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
@ -1,16 +0,0 @@
|
|||||||
# Replacement for py2exe distributed module
|
|
||||||
# Avoids the use of the standard py2exe console.
|
|
||||||
# Just import this file and it should go away
|
|
||||||
|
|
||||||
import sys
|
|
||||||
if hasattr(sys,"frozen"): # true only if we are running as a py2exe app
|
|
||||||
class Blackhole(object):
|
|
||||||
def write(self,text):
|
|
||||||
pass
|
|
||||||
def flush(self):
|
|
||||||
pass
|
|
||||||
sys.stdout = Blackhole()
|
|
||||||
sys.stderr = Blackhole()
|
|
||||||
del Blackhole
|
|
||||||
del sys
|
|
||||||
|
|
@ -1,51 +0,0 @@
|
|||||||
import ctypes
|
|
||||||
import collections
|
|
||||||
import platform
|
|
||||||
import os
|
|
||||||
|
|
||||||
TYPES = {
|
|
||||||
'Linux': {
|
|
||||||
'loader': ctypes.CDLL,
|
|
||||||
'functype': ctypes.CFUNCTYPE,
|
|
||||||
'prefix': 'lib',
|
|
||||||
'extension': '.so'
|
|
||||||
},
|
|
||||||
'Darwin': {
|
|
||||||
'loader': ctypes.CDLL,
|
|
||||||
'functype': ctypes.CFUNCTYPE,
|
|
||||||
'prefix': 'lib',
|
|
||||||
'extension': '.dylib'
|
|
||||||
},
|
|
||||||
}
|
|
||||||
if platform.system() == 'Windows':
|
|
||||||
TYPES['Windows'] = {
|
|
||||||
'loader': ctypes.WinDLL,
|
|
||||||
'functype': ctypes.WINFUNCTYPE,
|
|
||||||
'prefix': "",
|
|
||||||
'extension': '.dll'
|
|
||||||
}
|
|
||||||
|
|
||||||
class LibraryLoadError(Exception): pass
|
|
||||||
|
|
||||||
def load_library(library, x86_path='.', x64_path='.', *args, **kwargs):
|
|
||||||
lib = find_library_path(library, x86_path=x86_path, x64_path=x64_path)
|
|
||||||
loaded = _do_load(lib, *args, **kwargs)
|
|
||||||
if loaded is not None:
|
|
||||||
return loaded
|
|
||||||
raise LibraryLoadError('unable to load %r. Provided library path: %r' % (library, lib))
|
|
||||||
|
|
||||||
def _do_load(file, *args, **kwargs):
|
|
||||||
loader = TYPES[platform.system()]['loader']
|
|
||||||
return loader(file, *args, **kwargs)
|
|
||||||
|
|
||||||
def find_library_path(libname, x86_path='.', x64_path='.'):
|
|
||||||
libname = '%s%s' % (TYPES[platform.system()]['prefix'], libname)
|
|
||||||
if platform.machine() == 'x86_64':
|
|
||||||
path = os.path.join(x64_path, libname)
|
|
||||||
else:
|
|
||||||
path = os.path.join(x86_path, libname)
|
|
||||||
ext = TYPES[platform.system()]['extension']
|
|
||||||
return '%s%s' % (path, ext)
|
|
||||||
|
|
||||||
def get_functype():
|
|
||||||
return TYPES[platform.system()]['functype']
|
|
@ -1,114 +0,0 @@
|
|||||||
import inspect
|
|
||||||
import platform
|
|
||||||
import os
|
|
||||||
import subprocess
|
|
||||||
import sys
|
|
||||||
import string
|
|
||||||
import unicodedata
|
|
||||||
|
|
||||||
|
|
||||||
def app_data_path(app_name=None):
|
|
||||||
"""Cross-platform method for determining where to put application data."""
|
|
||||||
"""Requires the name of the application"""
|
|
||||||
plat = platform.system()
|
|
||||||
if plat == 'Windows':
|
|
||||||
import winpaths
|
|
||||||
path = winpaths.get_appdata()
|
|
||||||
elif plat == 'Darwin':
|
|
||||||
path = os.path.join(os.path.expanduser('~'), 'Library', 'Application Support')
|
|
||||||
elif plat == 'Linux':
|
|
||||||
path = os.path.expanduser('~')
|
|
||||||
app_name = '.%s' % app_name.replace(' ', '_')
|
|
||||||
return os.path.join(path, app_name)
|
|
||||||
|
|
||||||
def prepare_app_data_path(app_name):
|
|
||||||
"""Creates the application's data directory, given its name."""
|
|
||||||
dir = app_data_path(app_name)
|
|
||||||
return ensure_path(dir)
|
|
||||||
|
|
||||||
def embedded_data_path():
|
|
||||||
if platform.system() == 'Darwin' and is_frozen():
|
|
||||||
return os.path.abspath(os.path.join(executable_directory(), '..', 'Resources'))
|
|
||||||
return app_path()
|
|
||||||
|
|
||||||
def is_frozen():
|
|
||||||
"""Return a bool indicating if application is compressed"""
|
|
||||||
import imp
|
|
||||||
return hasattr(sys, 'frozen') or imp.is_frozen("__main__")
|
|
||||||
|
|
||||||
def get_executable():
|
|
||||||
"""Returns the full executable path/name if frozen, or the full path/name of the main module if not."""
|
|
||||||
if is_frozen():
|
|
||||||
if platform.system() != 'Darwin':
|
|
||||||
return sys.executable
|
|
||||||
#On darwin, sys.executable points to python. We want the full path to the exe we ran.
|
|
||||||
exedir = os.path.abspath(os.path.dirname(sys.executable))
|
|
||||||
items = os.listdir(exedir)
|
|
||||||
items.remove('python')
|
|
||||||
return os.path.join(exedir, items[0])
|
|
||||||
#Not frozen
|
|
||||||
try:
|
|
||||||
import __main__
|
|
||||||
return os.path.abspath(__main__.__file__)
|
|
||||||
except AttributeError:
|
|
||||||
return sys.argv[0]
|
|
||||||
|
|
||||||
def get_module(level=2):
|
|
||||||
"""Hacky method for deriving the caller of this function's module."""
|
|
||||||
return inspect.getmodule(inspect.stack()[level][0]).__file__
|
|
||||||
|
|
||||||
def executable_directory():
|
|
||||||
"""Always determine the directory of the executable, even when run with py2exe or otherwise frozen"""
|
|
||||||
executable = get_executable()
|
|
||||||
path = os.path.abspath(os.path.dirname(executable))
|
|
||||||
return path
|
|
||||||
|
|
||||||
def app_path():
|
|
||||||
"""Return the root of the application's directory"""
|
|
||||||
path = executable_directory()
|
|
||||||
if is_frozen() and platform.system() == 'Darwin':
|
|
||||||
path = os.path.abspath(os.path.join(path, '..', '..'))
|
|
||||||
return path
|
|
||||||
|
|
||||||
def module_path(level=2):
|
|
||||||
return os.path.abspath(os.path.dirname(get_module(level)))
|
|
||||||
|
|
||||||
def documents_path():
|
|
||||||
"""On windows, returns the path to My Documents. On OSX, returns the user's Documents folder. For anything else, returns the user's home directory."""
|
|
||||||
plat = platform.system()
|
|
||||||
if plat == 'Windows':
|
|
||||||
import winpaths
|
|
||||||
path = winpaths.get_my_documents()
|
|
||||||
elif plat == 'Darwin':
|
|
||||||
path = os.path.join(os.path.expanduser('~'), 'Documents')
|
|
||||||
else:
|
|
||||||
path = os.path.expanduser('~')
|
|
||||||
return path
|
|
||||||
|
|
||||||
def safe_filename(filename):
|
|
||||||
"""Given a filename, returns a safe version with no characters that would not work on different platforms."""
|
|
||||||
SAFE_FILE_CHARS = "'-_.()[]{}!@#$%^&+=`~ "
|
|
||||||
filename = unicode(filename)
|
|
||||||
new_filename = ''.join(c for c in filename if c in SAFE_FILE_CHARS or c.isalnum())
|
|
||||||
#Windows doesn't like directory names ending in space, macs consider filenames beginning with a dot as hidden, and windows removes dots at the ends of filenames.
|
|
||||||
return new_filename.strip(' .')
|
|
||||||
|
|
||||||
def ensure_path(path):
|
|
||||||
if not os.path.exists(path):
|
|
||||||
os.makedirs(path)
|
|
||||||
return path
|
|
||||||
|
|
||||||
def start_file(path):
|
|
||||||
if platform.system() == 'Windows':
|
|
||||||
os.startfile(path)
|
|
||||||
else:
|
|
||||||
subprocess.Popen(['open', path])
|
|
||||||
|
|
||||||
def get_applications_path():
|
|
||||||
"""Return the directory where applications are commonly installed on the system."""
|
|
||||||
plat = platform.system()
|
|
||||||
if plat == 'Windows':
|
|
||||||
import winpaths
|
|
||||||
return winpaths.get_program_files()
|
|
||||||
elif plat == 'Darwin':
|
|
||||||
return '/Applications'
|
|
@ -1,27 +0,0 @@
|
|||||||
import platform
|
|
||||||
import ctypes
|
|
||||||
import os
|
|
||||||
import signal
|
|
||||||
|
|
||||||
|
|
||||||
def kill_windows_process(pid):
|
|
||||||
PROCESS_TERMINATE = 1
|
|
||||||
SYNCHRONIZE=1048576
|
|
||||||
handle = ctypes.windll.kernel32.OpenProcess(PROCESS_TERMINATE | SYNCHRONIZE, False, pid)
|
|
||||||
ctypes.windll.kernel32.TerminateProcess(handle, -1)
|
|
||||||
ctypes.windll.kernel32.WaitForSingleObject(handle, 1000)
|
|
||||||
ctypes.windll.kernel32.CloseHandle(handle)
|
|
||||||
|
|
||||||
def kill_unix_process(pid):
|
|
||||||
try:
|
|
||||||
os.kill(pid, signal.SIGKILL)
|
|
||||||
except OSError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
def kill_process(pid):
|
|
||||||
if pid < 0:
|
|
||||||
return
|
|
||||||
if platform.system() == 'Windows':
|
|
||||||
kill_windows_process(pid)
|
|
||||||
else:
|
|
||||||
kill_unix_process(pid)
|
|
@ -1,10 +0,0 @@
|
|||||||
import _winreg
|
|
||||||
|
|
||||||
SHELL_REGKEY = ur"Directory\shell"
|
|
||||||
|
|
||||||
def context_menu_integrate(item_key_name, item_display_text, item_command):
|
|
||||||
app_menu_key = _winreg.OpenKey(_winreg.HKEY_CLASSES_ROOT, SHELL_REGKEY, 0, _winreg.KEY_WRITE)
|
|
||||||
menu_item_key = _winreg.CreateKey(app_menu_key, item_key_name)
|
|
||||||
_winreg.SetValueEx(menu_item_key, None, None, _winreg.REG_SZ, item_display_text)
|
|
||||||
item_command_key = _winreg.CreateKey(menu_item_key, 'command')
|
|
||||||
_winreg.SetValueEx(item_command_key, None, None, _winreg.REG_SZ, item_command)
|
|
@ -1,9 +0,0 @@
|
|||||||
import platform
|
|
||||||
import webbrowser
|
|
||||||
|
|
||||||
def open(url):
|
|
||||||
if platform.system() == 'Windows':
|
|
||||||
browser = webbrowser.get('windows-default')
|
|
||||||
else:
|
|
||||||
browser = webbrowser
|
|
||||||
browser.open_new_tab(url)
|
|
Loading…
Reference in New Issue
Block a user