This file is indexed.

/usr/share/backintime/common/pluginmanager.py is in backintime-common 1.0.34-0.1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#    Back In Time
#    Copyright (C) 2008-2009 Oprea Dan, Bart de Koning, Richard Bailey
#
#    This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License along
#    with this program; if not, write to the Free Software Foundation, Inc.,
#    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.


import os.path
import tools
import types

tools.register_backintime_path( 'common' )
tools.register_backintime_path( 'plugins' )


class Plugin:
    def __init__( self ):
        return

    def init( self, snapshots ):
        return True

    def is_gui( self ):
        return False

    def on_process_begins( self ):
        return

    def on_process_ends( self ):
        return

    def on_error( self, code, message ):
        return

    def on_new_snapshot( self, snapshot_id, snapshot_path ):
        return

    def on_message( self, profile_id, profile_name, level, message, timeout ):
        return


class PluginManager:
    def __init__( self ):
        self.plugins = []
        self.has_gui_plugins_ = False
        self.plugins_loaded = False

    def load_plugins( self, snapshots, force = False ):
        if self.plugins_loaded and not force:
            return

        self.plugins_loaded = True
        self.plugins = []
        self.has_gui_plugins_ = False
        
        plugins_path = tools.get_backintime_path( 'plugins' )

        for file in os.listdir( plugins_path ):
            try:
                if file.endswith( '.py' ) and not file.startswith( '__' ):
                    path = os.path.join( plugins_path, file )

                    module = __import__( file[ : -3 ] )
                    module_dict = module.__dict__
                    
                    for key, value in module_dict.items():
                        if key.startswith( '__' ):
                            continue

                        if type(value) is types.ClassType:
                            if issubclass( value, Plugin ):
                                plugin = value()
                                if plugin.init( snapshots ):
                                    if plugin.is_gui():
                                        self.has_gui_plugins_ = True
                                        self.plugins.insert( 0, plugin )
                                    else:
                                        self.plugins.append( plugin )
            except:
                pass

    def has_gui_plugins( self ):
        return self.has_gui_plugins_

    def on_process_begins( self ):
        for plugin in self.plugins:
            try:
                plugin.on_process_begins()
            except:
                pass

    def on_process_ends( self ):
        for plugin in reversed( self.plugins ):
            try:
                plugin.on_process_ends()
            except:
                pass

    def on_error( self, code, message = '' ):
        for plugin in self.plugins:
            try:
                plugin.on_error( code, message )
            except:
                pass

    def on_new_snapshot( self, snapshot_id, snapshot_path ):
        for plugin in self.plugins:
            try:
                plugin.on_new_snapshot( snapshot_id, snapshot_path )
            except:
                pass

    def on_message( self, profile_id, profile_name, level, message, timeout = -1 ):
        for plugin in self.plugins:
            try:
                plugin.on_message( profile_id, profile_name, level, message, timeout )
            except:
                pass