close tray icon if oml is gone
This commit is contained in:
parent
3d473b8765
commit
0f6b17e8cd
3 changed files with 37 additions and 5 deletions
|
@ -4,6 +4,8 @@ import signal
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import webbrowser
|
import webbrowser
|
||||||
|
import time
|
||||||
|
from threading import Thread
|
||||||
|
|
||||||
import win32api
|
import win32api
|
||||||
import win32con
|
import win32con
|
||||||
|
@ -23,7 +25,8 @@ class OMLTrayIcon(object):
|
||||||
FIRST_ID = 1023
|
FIRST_ID = 1023
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
launch()
|
self.thread_id = win32api.GetCurrentThreadId()
|
||||||
|
launch(self)
|
||||||
name = "Open Media Library"
|
name = "Open Media Library"
|
||||||
self.icon = "ico/oml.ico"
|
self.icon = "ico/oml.ico"
|
||||||
self.hover_text = name
|
self.hover_text = name
|
||||||
|
@ -197,9 +200,30 @@ class OMLTrayIcon(object):
|
||||||
else:
|
else:
|
||||||
menu_action(self)
|
menu_action(self)
|
||||||
|
|
||||||
def check_pid(pid):
|
def quit(self):
|
||||||
|
nid = (self.hwnd, 0)
|
||||||
|
win32gui.Shell_NotifyIcon(win32gui.NIM_DELETE, nid)
|
||||||
|
win32api.PostThreadMessage(self.thread_id, win32con.WM_QUIT, 0, 0)
|
||||||
|
|
||||||
|
class Check(Thread):
|
||||||
|
def __init__(self, parent, pid):
|
||||||
|
self.parent = parent
|
||||||
|
self.pid = pid
|
||||||
|
Thread.__init__(self)
|
||||||
|
self.daemon = True
|
||||||
|
self.start()
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
time.sleep(60)
|
||||||
|
while check_pid(self.pid):
|
||||||
|
time.sleep(60)
|
||||||
|
self.parent.quit()
|
||||||
|
|
||||||
|
def check_pid(pidfile):
|
||||||
|
if not os.path.exists(pidfile):
|
||||||
|
return False
|
||||||
try:
|
try:
|
||||||
with open(pid) as fd:
|
with open(pidfile) as fd:
|
||||||
pid = int(fd.read())
|
pid = int(fd.read())
|
||||||
except:
|
except:
|
||||||
return False
|
return False
|
||||||
|
@ -213,13 +237,15 @@ def check_pid(pid):
|
||||||
def launch(sysTrayIcon=None):
|
def launch(sysTrayIcon=None):
|
||||||
base = os.path.join(os.getenv('LOCALAPPDATA'), 'Open Media Library')
|
base = os.path.join(os.getenv('LOCALAPPDATA'), 'Open Media Library')
|
||||||
pid = os.path.join(base, 'data', 'openmedialibrary.pid')
|
pid = os.path.join(base, 'data', 'openmedialibrary.pid')
|
||||||
if os.path.exists(pid) and check_pid(pid):
|
if check_pid(pid):
|
||||||
webbrowser.open_new_tab(os.path.join(base, 'openmedialibrary', 'static', 'html', 'load.html'))
|
webbrowser.open_new_tab(os.path.join(base, 'openmedialibrary', 'static', 'html', 'load.html'))
|
||||||
|
sysTrayIcon._check = Check(sysTrayIcon, pid)
|
||||||
elif os.path.exists(base):
|
elif os.path.exists(base):
|
||||||
python = os.path.join(base, 'platform_win32', 'pythonw.exe')
|
python = os.path.join(base, 'platform_win32', 'pythonw.exe')
|
||||||
oml = os.path.join(base, 'openmedialibrary')
|
oml = os.path.join(base, 'openmedialibrary')
|
||||||
subprocess.Popen([python, 'oml', 'server', pid], cwd=oml, start_new_session=True)
|
subprocess.Popen([python, 'oml', 'server', pid], cwd=oml, start_new_session=True)
|
||||||
webbrowser.open_new_tab(os.path.join(base, 'openmedialibrary', 'static', 'html', 'load.html'))
|
webbrowser.open_new_tab(os.path.join(base, 'openmedialibrary', 'static', 'html', 'load.html'))
|
||||||
|
sysTrayIcon._check = Check(sysTrayIcon, pid)
|
||||||
else:
|
else:
|
||||||
install.run(base)
|
install.run(base)
|
||||||
|
|
||||||
|
|
|
@ -100,6 +100,12 @@ class Install(Thread):
|
||||||
self.status["release"] = release
|
self.status["release"] = release
|
||||||
self.status["progress"] = 0
|
self.status["progress"] = 0
|
||||||
platform = get_platform()
|
platform = get_platform()
|
||||||
|
if not 'platform_win32' in release:
|
||||||
|
release['platform_win32'] = {
|
||||||
|
'name': 'platform_win32-20160201-3-3d473b8.tar.bz2',
|
||||||
|
'version': '20160201-3-3d473b8.tar.bz2',
|
||||||
|
'platform': 'win32',
|
||||||
|
}
|
||||||
for module in sorted(release['modules']):
|
for module in sorted(release['modules']):
|
||||||
if release['modules'][module].get('platform', platform) == platform:
|
if release['modules'][module].get('platform', platform) == platform:
|
||||||
package_tar = release['modules'][module]['name']
|
package_tar = release['modules'][module]['name']
|
||||||
|
|
|
@ -38,7 +38,7 @@ oml = Executable(
|
||||||
setup(
|
setup(
|
||||||
name = "Open Media Library",
|
name = "Open Media Library",
|
||||||
version = "0.1",
|
version = "0.1",
|
||||||
description = "share media collectoins",
|
description = "Open Media Library",
|
||||||
options = {
|
options = {
|
||||||
"build_exe": build_exe_options,
|
"build_exe": build_exe_options,
|
||||||
"bdist_msi": bdist_msi_options
|
"bdist_msi": bdist_msi_options
|
||||||
|
|
Loading…
Reference in a new issue