# -*- coding: utf-8 -*- from os.path import normpath, dirname, abspath, join import json import os import subprocess import sys import ox from oxtornado import actions import item.api import user.api import update import logging logger = logging.getLogger(__name__) def win32_ui(type): base = normpath(dirname(dirname(dirname(abspath(__file__))))) cmd = [ join(base, 'platform_win32', 'python.exe'), join(base, 'openmediablirary', 'oml', 'ui.py'), type ] return cmd def selectFolder(data): ''' returns { path } ''' cmd = ['./ctl', 'ui', 'folder'] if sys.platform == 'win32': cmd = win32_ui('folder') if 'base' in data: cmd += [data['base']] p = subprocess.Popen(cmd, stdout=subprocess.PIPE, close_fds=True) stdout, stderr = p.communicate() path = stdout.decode('utf-8').strip() if path == 'None': path = None return { 'path': path } actions.register(selectFolder, cache=False) def selectFile(data): ''' returns { path } ''' cmd = ['./ctl', 'ui', 'file'] if sys.platform == 'win32': cmd = win32_ui('file') if 'base' in data: cmd += [data['base']] p = subprocess.Popen(cmd, stdout=subprocess.PIPE) stdout, stderr = p.communicate() path = stdout.decode('utf-8').strip() if path == 'None': path = None return { 'path': path } actions.register(selectFile, cache=False) def short_home(path): home = os.path.expanduser('~') if path and path.startswith(home): path = path.replace(home, '~') return path def autocompleteFolder(data): ''' takes { path } returns { items } ''' path = data['path'] path = os.path.expanduser(path) if os.path.isdir(path): if path.endswith('/') and path != '/': path = path[:-1] folder = path name = '' else: folder, name = os.path.split(path) if os.path.exists(folder): prefix, folders, files = next(os.walk(folder)) folders = [os.path.join(prefix, f) for f in folders if (not name or f.startswith(name)) and not f.startswith('.')] if prefix == path: folders = [path] + folders else: folders = [] folders = [short_home(f) for f in folders] return { 'items': ox.sorted_strings(folders) } actions.register(autocompleteFolder, cache=False) def quit(data): ''' takes { } returns { } ''' import state state.main.stop() return {} actions.register(quit, cache=False) def logError(data): ''' takes { } returns { } ''' #logger.debug('frontend error %s', data) return {} actions.register(logError, cache=False)