[Pkg-privacy-commits] [torbrowser-launcher] 113/476: now there can only be one instance of torbrowser-launcher running at a time. fixes #23

Ximin Luo infinity0 at moszumanska.debian.org
Sat Aug 22 13:21:28 UTC 2015


This is an automated email from the git hooks/post-receive script.

infinity0 pushed a commit to branch debian
in repository torbrowser-launcher.

commit 252842b999814d1550e4f2afaf4cd01bc40944ac
Author: Micah Lee <micahflee at riseup.net>
Date:   Thu Apr 11 10:27:05 2013 -0700

    now there can only be one instance of torbrowser-launcher running at a time. fixes #23
---
 torbrowser-launcher | 94 ++++++++++++++++++++++++++++++-----------------------
 1 file changed, 54 insertions(+), 40 deletions(-)

diff --git a/torbrowser-launcher b/torbrowser-launcher
index ceb9030..aa0d34e 100755
--- a/torbrowser-launcher
+++ b/torbrowser-launcher
@@ -82,62 +82,35 @@ class TorBrowserLauncher:
 
         self.launch_gui = True
 
+        # is torbrowser-launcher already running?
+        tbl_pid = self.get_pid(self.paths['file']['tbl_bin'], True)
+        if tbl_pid:
+            print _('Tor Browser Launcher is already running (pid {0}), bringing to front').format(tbl_pid)
+            self.bring_window_to_front(tbl_pid)
+            return;
+
         # if we haven't already hit an error
         if self.gui != 'error':
             # load settings
             if self.load_settings():
                 self.build_paths(self.settings['latest_version'])
 
-                # is tbb already running and we just need to open a new firefox?
+                # is vidalia already running and we just need to open a new firefox?
                 if self.settings['installed_version']:
-                    vidalia_pid = None
-                    firefox_pid = None
-                    for p in psutil.process_iter():
-                        try:
-                            exe = None
-
-                            # old versions of psutil don't have exe
-                            if hasattr(p, 'exe'):
-                                exe = p.exe
-                            # need to rely on cmdline instead
-                            else:
-                                if len(p.cmdline) > 0:
-                                    exe = p.cmdline[0]
-                            
-                            if exe == self.paths['file']['vidalia_bin'] or exe == './App/vidalia':
-                                vidalia_pid = p.pid
-                            if exe == self.paths['file']['firefox_bin']:
-                                firefox_pid = p.pid
-
-                        except:
-                            pass
+                    vidalia_pid = self.get_pid('./App/vidalia')
+                    firefox_pid = self.get_pid(self.paths['file']['firefox_bin'])
 
                     if vidalia_pid and not firefox_pid:
                         print _('Vidalia is already open, but Firefox is closed. Launching new Firefox.')
+                        self.bring_window_to_front(vidalia_pid)
                         subprocess.Popen([self.paths['file']['firefox_bin'], '-no-remote', '-profile', self.paths['file']['firefox_profile']])
                         return
                     elif vidalia_pid and firefox_pid:
                         print _('Vidalia and Firefox are already open, bringing them to focus')
 
-                        # figure out the window ids of vidalia and firefox
-                        vidalia_win_id = None
-                        firefox_win_id = None
-                        p = subprocess.Popen(['wmctrl', '-l', '-p'], stdout=subprocess.PIPE)
-                        for line in p.stdout.readlines():
-                            line_split = line.split()
-                            win_id = line_split[0]
-                            win_pid = int(line_split[2])
-                            if win_pid == vidalia_pid:
-                                vidalia_win_id = win_id
-                            if win_pid == firefox_pid:
-                                firefox_win_id = win_id
-
                         # bring firefox to front, then vidalia
-                        if firefox_win_id:
-                            subprocess.call(['wmctrl', '-i', '-a', firefox_win_id])
-                        if vidalia_win_id:
-                            subprocess.call(['wmctrl', '-i', '-a', vidalia_win_id])
-
+                        self.bring_window_to_front(firefox_pid)
+                        self.bring_window_to_front(vidalia_pid)
                         return
 
                 # how long was it since the last update check?
@@ -266,6 +239,7 @@ class TorBrowserLauncher:
                     'gnupg_homedir': tbb_data+'/gnupg_homedir'
                 },
                 'file': {
+                    'tbl_bin': '/usr/bin/torbrowser-launcher',
                     'settings': tbb_data+'/settings',
                     'version': tbb_data+'/version',
                     'start': tbb_data+'/tbb/'+self.architecture+'/tor-browser_'+self.language+'/start-tor-browser',
@@ -639,6 +613,46 @@ class TorBrowserLauncher:
         while gtk.events_pending():
             gtk.main_iteration(False)
 
+    # get the process id of a program
+    def get_pid(self, bin_path, python = False):
+        pid = None
+
+        for p in psutil.process_iter():
+            try:
+                if p.pid != os.getpid():
+                    exe = None
+                    if python:
+                        if len(p.cmdline) > 1:
+                            if 'python' in p.cmdline[0]:
+                                exe = p.cmdline[1]
+                    else:
+                        if len(p.cmdline) > 0:
+                            exe = p.cmdline[0]
+                    
+                    if exe == bin_path:
+                        pid = p.pid
+
+            except:
+                pass
+
+        return pid
+
+    # bring program's x window to front
+    def bring_window_to_front(self, pid):
+        # figure out the window id
+        win_id = None
+        p = subprocess.Popen(['wmctrl', '-l', '-p'], stdout=subprocess.PIPE)
+        for line in p.stdout.readlines():
+            line_split = line.split()
+            cur_win_id = line_split[0]
+            cur_win_pid = int(line_split[2])
+            if cur_win_pid == pid:
+                win_id = cur_win_id
+
+        # bring to front
+        if win_id:
+            subprocess.call(['wmctrl', '-i', '-a', win_id])
+
     # exit
     def delete_event(self, widget, event, data=None):
         return False

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-privacy/packages/torbrowser-launcher.git



More information about the Pkg-privacy-commits mailing list