diff --git a/oml/commands.py b/oml/commands.py index 347b710..9402520 100644 --- a/oml/commands.py +++ b/oml/commands.py @@ -74,6 +74,14 @@ def command_restart(*args): Restart Open Media Libary """ if sys.platform == 'win32': + from urllib.request import urlopen + from urllib.parse import urlencode + url = 'http://{address}:{port}/api/'.format(**settings.server) + data = urlencode({'action': 'quit', 'data': '{}'}).encode() + try: + urlopen(url, data, timeout=2) + except: + pass from utils import check_pid, ctl pidfile = os.path.join(settings.data_path, 'openmedialibrary.pid') try: diff --git a/oml/integration.py b/oml/integration.py index 891f831..bf2e9d1 100644 --- a/oml/integration.py +++ b/oml/integration.py @@ -10,10 +10,13 @@ root_dir = os.path.dirname(settings.base_dir) def install_autostart(): if sys.platform == 'darwin': install_launchd() - elif sys.platform.startswith('linux'): + elif sys.platform == 'win32': + install_autostart_win32() + elif sys.platform.startswith('linux') or \ + os.path.exists(os.path.expanduser('~/.config/autostart')): install_autostart_xdg() else: - print('no launcher integration supported for %s' % sys.platform) + print('no autostart support for %s' % sys.platform) def uninstall_autostart(): @@ -30,6 +33,10 @@ def uninstall_autostart(): ]): if os.path.exists(f): os.unlink(f) + elif sys.platform == 'win32': + lnk = get_startup_path() + if os.path.exists(lnk): + os.unlink(lnk) def install_launcher(): if sys.platform.startswith('linux'): @@ -99,3 +106,36 @@ Icon=%(base)s/openmedialibrary/static/png/oml.png Terminal=false X-GNOME-Autostart-enabled=true ''' % {'base': root_dir}) + + +def get_trayicon_version(): + from win32com.client import Dispatch + ver_parser = Dispatch('Scripting.FileSystemObject') + info = ver_parser.GetFileVersion(get_trayicon_path()) + if info == 'No Version Information Available': + info = None + return info + +def get_trayicon_path(): + from win32com.client import Dispatch + shell = Dispatch("WScript.Shell") + applnk = os.path.join('C:\\', 'ProgramData', 'Microsoft', 'Windows', 'Start Menu', 'Programs', 'Open Media Library.lnk') + if applnk and os.path.exists(applnk): + app = shell.CreateShortCut(applnk) + target = app.Targetpath + return target + +def get_startup_path(): + #return os.path.join('C:\\', 'ProgramData', 'Microsoft', 'Windows', 'Start Menu', 'Programs', 'Startup', 'Open Media Library.lnk') + return os.path.join(os.getenv('APPDATA'), 'Microsoft', 'Windows', 'Start Menu', 'Programs', 'Startup', 'Open Media Library.lnk') + +def install_autostart_win32(): + from win32com.client import Dispatch + shell = Dispatch("WScript.Shell") + target = get_trayicon_path() + if target: + lnk = get_startup_path() + shortcut = shell.CreateShortCut(lnk) + shortcut.Targetpath = target + shortcut.Arguments = '--autostart' + shortcut.save() diff --git a/oml/update.py b/oml/update.py index 97dbe87..f72a837 100644 --- a/oml/update.py +++ b/oml/update.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- # vi:si:et:sw=4:sts=4:ts=4 - from contextlib import closing import base64 import json @@ -21,6 +20,7 @@ from oxtornado import actions import settings import utils import db +from integration import get_trayicon_version import logging @@ -234,8 +234,8 @@ def get_app_version(app): return subprocess.check_output(cmd).strip() def upgrade_app(): + base = os.path.dirname(settings.base_dir) if sys.platform == 'darwin': - base = os.path.dirname(settings.base_dir) bundled_app = os.path.join(base, 'platform_darwin64/Applications/Open Media Library.app') app = '/Applications/Open Media Library.app' version = get_app_version(app) @@ -246,6 +246,15 @@ def upgrade_app(): shutil.copytree(bundled_app, app) except: logger.debug('Failed to update Application', exc_info=True) + elif sys.platform == 'win32': + current_version = get_trayicon_version() + if current_version != '0.2.0.0': + msi = os.path.normpath(os.path.join(base, 'platform_win32', 'Open Media Library.msi')) + cmd = ['msiexec.exe', '/qb', '/I', msi] + startupinfo = subprocess.STARTUPINFO() + startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW + startupinfo.wShowWindow = subprocess.SW_HIDE + subprocess.Popen(cmd, cwd=settings.base_dir, start_new_session=True, startupinfo=startupinfo) def getVersion(data): ''' diff --git a/oml/win32utils.py b/oml/win32utils.py index 027bdb5..e245a08 100644 --- a/oml/win32utils.py +++ b/oml/win32utils.py @@ -19,6 +19,8 @@ if sys.platform == 'win32': return output_buf.value else: output_buf_size = needed + else: def get_short_path_name(long_name): return long_name + diff --git a/static/js/oml.js b/static/js/oml.js index d94a2bb..8b55587 100644 --- a/static/js/oml.js +++ b/static/js/oml.js @@ -220,6 +220,10 @@ loadOMLFiles(function() { initOML(data); }); + }, + updatestatus: function(data) { + document.location.href = document.location.protocol + '//' + + document.location.host; } }); }