diff --git a/requirements.txt b/requirements.txt index a8dc0ef2..47044a2d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -25,4 +25,5 @@ pypiwin32 certifi backports.functools_lru_cache git+https://github.com/manuelcortez/twython -git+https://github.com/manuelcortez/libloader \ No newline at end of file +git+https://github.com/manuelcortez/libloader +git+https://github.com/manuelcortez/platform_utils \ No newline at end of file diff --git a/src/controller/settings.py b/src/controller/settings.py index 513b3da9..c8828085 100644 --- a/src/controller/settings.py +++ b/src/controller/settings.py @@ -18,7 +18,7 @@ import config_utils log = logging.getLogger("Settings") import keys from collections import OrderedDict -from platform_utils.autostart import windows as autostart_windows +from mysc import autostart as autostart_windows class globalSettingsController(object): def __init__(self): diff --git a/src/platform_utils/autostart/windows.py b/src/mysc/autostart.py similarity index 100% rename from src/platform_utils/autostart/windows.py rename to src/mysc/autostart.py diff --git a/src/platform_utils/__init__.py b/src/platform_utils/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/platform_utils/autostart/__init__.py b/src/platform_utils/autostart/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/platform_utils/blackhole.py b/src/platform_utils/blackhole.py deleted file mode 100644 index 7a089b40..00000000 --- a/src/platform_utils/blackhole.py +++ /dev/null @@ -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 - diff --git a/src/platform_utils/libloader.py b/src/platform_utils/libloader.py deleted file mode 100644 index bb540e18..00000000 --- a/src/platform_utils/libloader.py +++ /dev/null @@ -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'] diff --git a/src/platform_utils/paths.py b/src/platform_utils/paths.py deleted file mode 100644 index 912e28af..00000000 --- a/src/platform_utils/paths.py +++ /dev/null @@ -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' diff --git a/src/platform_utils/process.py b/src/platform_utils/process.py deleted file mode 100644 index 78a625e8..00000000 --- a/src/platform_utils/process.py +++ /dev/null @@ -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) diff --git a/src/platform_utils/shell_integration/__init__.py b/src/platform_utils/shell_integration/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/platform_utils/shell_integration/windows.py b/src/platform_utils/shell_integration/windows.py deleted file mode 100644 index b25a1250..00000000 --- a/src/platform_utils/shell_integration/windows.py +++ /dev/null @@ -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) diff --git a/src/platform_utils/web_browser.py b/src/platform_utils/web_browser.py deleted file mode 100644 index 6be9233c..00000000 --- a/src/platform_utils/web_browser.py +++ /dev/null @@ -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)