summaryrefslogtreecommitdiff
path: root/src/leap/baseapp/unitychecks.py
blob: 2d06f6299300af481ab79a5040f14eb1fee338eb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#!/usr/bin/python2
# vim: tabstop=8 expandtab shiftwidth=5 softtabstop=4
"""
modified from code from the starcal2 project
copyright Saeed Rasooli
License: GPL
"""
import logging
import platform
import sys
from subprocess import Popen, PIPE

logger = logging.getLogger(__name__)

from leap.base.constants import APP_NAME
from leap.baseapp.dialogs import ErrorDialog

get_whitelist = lambda: eval(
    Popen(['gsettings', 'get', 'com.canonical.Unity.Panel',
           'systray-whitelist'], stdout=PIPE).communicate()[0])

set_whitelist = lambda ls: Popen(
    ['gsettings', 'set',
     'com.canonical.Unity.Panel', 'systray-whitelist', repr(ls)])


def add_to_whitelist():
    ls = get_whitelist()
    if not APP_NAME in ls:
        ls.append(APP_NAME)
        set_whitelist(ls)


def remove_from_whitelist():
    ls = get_whitelist()
    if APP_NAME in ls:
        ls.remove(APP_NAME)
        set_whitelist(ls)


def is_unity_running():
    #XXX use psutil instead
    (output, error) = Popen(
        'ps aux | grep [u]nity-panel-service',
        stdout=PIPE, shell=True).communicate()
    output = bool(str(output))
    if not output:
        (output, error) = Popen(
            'ps aux | grep [u]nity-2d-panel',
            stdout=PIPE, shell=True).communicate()
        output = bool(str(output))
    return output


def need_to_add():
    if is_unity_running():
        wlist = get_whitelist()
        if not (APP_NAME in wlist or 'all' in wlist):
            logger.debug('need to add')
            return True
    return False


def add_and_restart():
    add_to_whitelist()
    Popen('LANG=en_US.UTF-8 unity', shell=True)


MSG = ("Seems that you are using a Unity desktop "
       "and %s is not allowed to use Tray icon. "
       "Press OK to add %s to Unity's white list "
       "and then restart Unity" % (APP_NAME, APP_NAME))


def do_check():
    if platform.system() == "Linux" and need_to_add():
        dialog = ErrorDialog()
        dialog.confirmMessage(
            MSG,
            "add to systray?",
            add_and_restart)


if __name__ == '__main__':
    if len(sys.argv) > 1:
        cmd = sys.argv[1]
        if cmd == 'add':
            add_to_whitelist()
        elif cmd == 'rm':
            remove_from_whitelist()
        elif cmd == 'print':
            print get_whitelist()
        elif cmd == "check":
            from PyQt4.QtGui import QApplication
            app = QApplication(sys.argv)
            do_check()