aboutsummaryrefslogtreecommitdiff
path: root/ayatanawebmail/common.py
blob: cc7c43bb3f3bfa501f3896cf72a3ab17440651b2 (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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Ayatana Webmail, message actions dialog
# Authors: Robert Tari <robert@tari.in>
# License: GNU GPL 3 or higher; http://www.gnu.org/licenses/gpl.html

import gettext
import os
import psutil
import subprocess
import webbrowser
from gi.repository import Gio
from ayatanawebmail.appdata import APPEXECUTABLE, APPNAME
from ayatanawebmail.accounts import DialogAccounts

try:
    g_oTranslation = gettext.translation(APPNAME)
except IOError:
    g_oTranslation = gettext.NullTranslations()

g_oTranslation.install()

g_dctDefaultURLs = {'Home': 'https://mail.example.com', 'Compose': 'https://mail.example.com/compose', 'Inbox': 'https://mail.example.com/inbox', 'Sent': 'https://mail.example.com/sent'}
g_oSettings = Gio.Settings.new('org.ayatana.webmail')
g_lstAccounts = []

def getDataPath(strPath):

    try:

        strExecPath = os.path.split(APPEXECUTABLE)[0]
        strDataPath = os.getcwd().replace(strExecPath, '')
        strRelativePath = os.path.join(strDataPath, strPath.lstrip('/'))

        if os.path.exists(strRelativePath):
            return strRelativePath

    except:

        pass

    return strPath

def isRunning():

    nCount = 0

    for oProc in psutil.process_iter():

        strName = oProc.name

        if not isinstance(strName, str):

           strName = oProc.name()

        if strName == 'python3' or strName == 'python':

            lstCmdline = oProc.cmdline

            if not isinstance(lstCmdline, list):
               lstCmdline = oProc.cmdline()

            for strCmd in lstCmdline:

                if strCmd.endswith('ayatana-webmail'):
                    nCount += 1

        elif strName.endswith('ayatana-webmail'):

            nCount += 1

    return nCount

def resolveURL(strURL):

    if strURL.startswith('Exec:'):
        subprocess.Popen(strURL[5:], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
    elif strURL.startswith('http'):
        webbrowser.open_new_tab(strURL)

def openURLOrCommand(strURL):

    if strURL in g_dctDefaultURLs:

        strURL0 = g_lstAccounts[0][strURL]

        if len(g_lstAccounts) > 1:

            for dctAccount in g_lstAccounts[1:]:

                if dctAccount[strURL] != strURL0:

                    oDialogAccounts = DialogAccounts(strURL, getDataPath, g_lstAccounts)
                    oDialogAccounts.run()
                    strURL = oDialogAccounts.strURL
                    oDialogAccounts.destroy()

                    if strURL:
                        resolveURL(strURL)

                    return

        resolveURL(strURL0)

    elif strURL.startswith('Exec:') or strURL.startswith('http'):

        resolveURL(strURL)

    else:

        print('Unknown URL name!')
        print('Possible URL names: "Home", "Compose", "Inbox", "Sent", "Exec:...", "http..."')