openmedialibrary/oml/integration.py

142 lines
4.5 KiB
Python

import os
import sys
import settings
import ox
from utils import run
root_dir = os.path.dirname(settings.base_dir)
def install_autostart():
if sys.platform == 'darwin':
install_launchd()
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 autostart support for %s' % sys.platform)
def uninstall_autostart():
if sys.platform == 'darwin':
name = 'com.openmedialibrary.loginscript'
plist = os.path.expanduser('~/Library/LaunchAgents/%s.plist'%name)
if os.path.exists(plist):
run('launchctl', 'stop', name)
run('launchctl', 'unload', plist)
os.unlink(plist)
elif sys.platform.startswith('linux'):
for f in map(os.path.expanduser, [
'~/.config/autostart/openmedialibrary.desktop'
]):
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'):
install_xdg()
else:
print('no launcher integration supported for %s' % sys.platform)
def uninstall_launcher():
if sys.platform.startswith('linux'):
for f in map(os.path.expanduser, [
'~/.local/share/applications/openmedialibrary.desktop',
]):
if os.path.exists(f):
os.unlink(f)
def install_launchd():
return
name = 'com.openmedialibrary.loginscript'
plist = os.path.expanduser('~/Library/LaunchAgents/%s.plist'%name)
if os.path.exists(plist):
run('launchctl', 'stop', name)
run('launchctl', 'unload', plist)
with open(plist, 'w') as f:
f.write('''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>%s</string>
<key>ProgramArguments</key>
<array>
<string>%s/ctl</string>
<string>autostart</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>''' % (name, root_dir))
run('launchctl', 'load', plist)
run('launchctl', 'start', name)
def install_xdg():
app = os.path.expanduser('~/.local/share/applications/openmedialibrary.desktop')
ox.makedirs(os.path.dirname(app))
with open(app, 'w') as fd:
fd.write('''[Desktop Entry]
Type=Application
Name=Open Media Library
Keywords=OpenMediaLibrary OML
Comment=manage and sync your digital media collections
Exec=%(base)s/ctl open
Icon=%(base)s/openmedialibrary/static/png/oml.png
Terminal=false
Categories=Network;FileTransfer;P2P;
''' % {'base': root_dir})
def install_autostart_xdg():
app = os.path.expanduser('~/.config/autostart/openmedialibrary.desktop')
ox.makedirs(os.path.dirname(app))
with open(app, 'w') as fd:
fd.write('''[Desktop Entry]
Type=Application
Name=Open Media Library
Comment=
Exec=%(base)s/ctl autostart
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()