autostart

This commit is contained in:
j 2016-04-14 12:57:45 +02:00
parent 9d01cbf57e
commit 0551a18cc9
6 changed files with 69 additions and 10 deletions

View File

@ -302,6 +302,7 @@
],
"user": {
"preferences": {
"autostart": false,
"acceptMessage": "",
"contact": "",
"downloadRate": null,

13
ctl
View File

@ -150,6 +150,19 @@ if [ "$1" == "open" ]; then
fi
exit 0
fi
if [ "$1" == "autostart" ]; then
if [ $SYSTEM == "Darwin" ]; then
open "/Applications/Open Media Library.app" --args --autostart
fi
if [ $SYSTEM == "Linux" ]; then
if [ ! -e "$PID" ]; then
python3 "$NAME/oml/gtkstatus.py" --autostart
exit $?
fi
fi
exit 0
fi
if [ "$1" == "ui" ]; then
shift
python3 "$NAME/oml/ui.py" $@

View File

@ -2,7 +2,7 @@
import os
from os.path import dirname, abspath
import subprocess
import time
import sys
import webbrowser
import gi
@ -26,7 +26,8 @@ class OMLIcon:
icon = None
indicator = None
def __init__(self):
def __init__(self, autostart=False):
self.autostart = autostart
if appindicator:
self.indicator = appindicator.Indicator.new("OML", icon,
appindicator.IndicatorCategory.APPLICATION_STATUS)
@ -40,7 +41,8 @@ class OMLIcon:
self.icon.connect("activate", self._click)
self.icon.connect("popup-menu", self._click)
subprocess.Popen([ctl, 'start'])
GLib.timeout_add_seconds(1, self._open, None)
if not self.autostart:
GLib.timeout_add_seconds(1, self._open, None)
GLib.timeout_add_seconds(60, self._check, None)
def _check(self, *args, **kwargs):
@ -85,5 +87,7 @@ class OMLIcon:
webbrowser.open_new_tab(url)
self.menu = None
OMLIcon()
Gtk.main()
if __name__ == '__main__':
autostart = len(sys.argv) > 1 and sys.argv[1] == '--autostart'
OMLIcon(autostart)
Gtk.main()

View File

@ -7,15 +7,16 @@ from utils import run
root_dir = os.path.dirname(settings.base_dir)
def install_launcher():
def install_autostart():
if sys.platform == 'darwin':
install_launchd()
elif sys.platform.startswith('linux'):
install_xdg()
install_autostart_xdg()
else:
print('no launcher integration supported for %s' % sys.platform)
def uninstall_launcher():
def uninstall_autostart():
if sys.platform == 'darwin':
name = 'com.openmedialibrary.loginscript'
plist = os.path.expanduser('~/Library/LaunchAgents/%s.plist'%name)
@ -25,12 +26,25 @@ def uninstall_launcher():
os.unlink(plist)
elif sys.platform.startswith('linux'):
for f in map(os.path.expanduser, [
'~/.local/share/applications/openmedialibrary.desktop',
'~/.config/autostart/openmedialibrary.desktop'
]):
if os.path.exists(f):
os.unlink(f)
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'
@ -48,7 +62,7 @@ def install_launchd():
<key>ProgramArguments</key>
<array>
<string>%s/ctl</string>
<string>start</string>
<string>autostart</string>
</array>
<key>RunAtLoad</key>
<true/>
@ -72,3 +86,16 @@ 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})

View File

@ -66,6 +66,8 @@ def setPreferences(data):
data['contact'] != settings.preferences['contact']
change_username = 'username' in data and \
data['username'] != settings.preferences['username']
change_autostart = 'autostart' in data and \
data['autostart'] != settings.preferences['autostart']
if 'libraryPath' in data and \
data['libraryPath'] != settings.preferences['libraryPath']:
change_path = [settings.preferences['libraryPath'], data['libraryPath']]
@ -82,6 +84,12 @@ def setPreferences(data):
Changelog.record(state.user(), 'editcontact', data['contact'])
if change_path:
state.tasks.queue('changelibrarypath', change_path)
if change_autostart:
import integration
if settings.preferences['autostart']:
integration.install_autostart()
else:
integration.uninstall_autostart()
return settings.preferences
actions.register(setPreferences, cache=False)

View File

@ -136,6 +136,12 @@ oml.ui.preferencesPanel = function() {
}
],
advanced: [
{
id: 'autostart',
title: 'Start Open Media Library at Login',
value: preferences.autostart,
help: 'Launch Open Media Library in the background once you login to your computer.'
},
{
id: 'showDebugMenu',
title: 'Show Debug Menu',