~ubuntu-branches/debian/experimental/backintime/experimental

« back to all changes in this revision

Viewing changes to guiapplicationinstance.py

  • Committer: Bazaar Package Importer
  • Author(s): Jonathan Wiltshire
  • Date: 2010-12-03 21:56:53 UTC
  • mfrom: (1.2.1 upstream) (3.1.8 sid)
  • Revision ID: james.westby@ubuntu.com-20101203215653-scx9roloq4m0dqns
Tags: 1.0.4-1
* New upstream release
    Closes: #555293
    LP: #409130 #507246 #528518 #534829 #522618
* Update debian/copyright
* The following patches are either integrated or fixed properly
  upstream: no-chmod-777.patch allow-root-backup.patch
* Refactor remaining patches and make the headers DEP-3 compliant
* Convert to source format 3.0 (quilt) and drop quilt dependency and
  logic
* Don't depend on a specific version of Python; let dh_python choose
  the best option
* Remove the "earlier-than" restriction for the Conflicts on
  backintime-kde4
* Standards version 3.9.1 (no changes required)
* Update my email address

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#    Back In Time
2
 
#    Copyright (C) 2008-2009 Oprea Dan
3
 
#
4
 
#    This program is free software; you can redistribute it and/or modify
5
 
#    it under the terms of the GNU General Public License as published by
6
 
#    the Free Software Foundation; either version 2 of the License, or
7
 
#    (at your option) any later version.
8
 
#
9
 
#    This program is distributed in the hope that it will be useful,
10
 
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
 
#    GNU General Public License for more details.
13
 
#
14
 
#    You should have received a copy of the GNU General Public License along
15
 
#    with this program; if not, write to the Free Software Foundation, Inc.,
16
 
#    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17
 
 
18
 
 
19
 
import os
20
 
import os.path
21
 
import time
22
 
 
23
 
 
24
 
#class used to handle one application instance mechanism
25
 
class GUIApplicationInstance:
26
 
 
27
 
        #specify the base for control files
28
 
        def __init__( self, base_control_file, raise_cmd = '' ):
29
 
                self.pid_file = base_control_file + '.pid'
30
 
                self.raise_file = base_control_file + '.raise'
31
 
                self.raise_cmd = raise_cmd
32
 
 
33
 
                #remove raise_file is already exists
34
 
                try:
35
 
                        os.remove( self.raise_file )
36
 
                except:
37
 
                        pass
38
 
 
39
 
                self.check( raise_cmd )
40
 
                self.start_application()
41
 
 
42
 
        #check if the current application is already running
43
 
        def check( self, raise_cmd ):
44
 
                #check if the pidfile exists
45
 
                if not os.path.isfile( self.pid_file ):
46
 
                        return
47
 
 
48
 
                #read the pid from the file
49
 
                pid = 0
50
 
                try:
51
 
                        file = open( self.pid_file, 'rt' )
52
 
                        data = file.read()
53
 
                        file.close()
54
 
                        pid = int( data )
55
 
                except:
56
 
                        pass
57
 
 
58
 
                #check if the process with specified by pid exists
59
 
                if 0 == pid:
60
 
                        return
61
 
 
62
 
                try:
63
 
                        os.kill( pid, 0 )       #this will raise an exception if the pid is not valid
64
 
                except:
65
 
                        return
66
 
 
67
 
                #exit the application
68
 
                print "The application is already running ! (pid: %s)" % pid
69
 
 
70
 
                #notify raise
71
 
                try:
72
 
                        file = open( self.raise_file, 'wt' )
73
 
                        file.write( raise_cmd )
74
 
                        file.close()
75
 
                except:
76
 
                        pass
77
 
 
78
 
                exit(0) #exit raise an exception so don't put it in a try/except block
79
 
 
80
 
        #called when the single instance starts to save it's pid
81
 
        def start_application( self ):
82
 
                file = open( self.pid_file, 'wt' )
83
 
                file.write( str( os.getpid() ) )
84
 
                file.close()
85
 
 
86
 
        #called when the single instance exit ( remove pid file )
87
 
        def exit_application( self ):
88
 
                try:
89
 
                        os.remove( self.pid_file )
90
 
                except:
91
 
                        pass
92
 
 
93
 
        #check if the application must to be raised
94
 
        #return None if no raise needed, or a string command to raise
95
 
        def raise_command( self ):
96
 
                ret_val = None
97
 
 
98
 
                try:
99
 
                        if os.path.isfile( self.raise_file ):
100
 
                                file = open( self.raise_file, 'rt' )
101
 
                                ret_val = file.read()
102
 
                                file.close()
103
 
                                os.remove( self.raise_file )
104
 
                except:
105
 
                        pass
106
 
 
107
 
                return ret_val
108