diff options
Diffstat (limited to 'module/plugins')
| -rw-r--r-- | module/plugins/hooks/LinuxFileEvents.py | 74 | 
1 files changed, 74 insertions, 0 deletions
| diff --git a/module/plugins/hooks/LinuxFileEvents.py b/module/plugins/hooks/LinuxFileEvents.py new file mode 100644 index 000000000..f71521b33 --- /dev/null +++ b/module/plugins/hooks/LinuxFileEvents.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- + +""" +    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 3 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, see <http://www.gnu.org/licenses/>. +     +    @author: mkaay +    @interface-version: 0.1 +""" + +from module.plugins.Hook import Hook +import os + +class LinuxFileEvents(Hook): +    def __init__(self, core): +        Hook.__init__(self, core) +        props = {} +        props['name'] = "LinuxFileEvents" +        props['version'] = "0.1" +        props['description'] = """monitors files and directories for changes""" +        props['author_name'] = ("mkaay") +        props['author_mail'] = ("mkaay@mkaay.de") +        self.props = props +         +        if not os.name == "posix": +            return +         +        self.core.check_file("container", _("folder for container"), True) +        self.core.check_install("pyinotify", _("pyinotify for LinuxFileEvents")) +         +        try: +            import pyinotify +        except: +            return +        wm = pyinotify.WatchManager() +         +        class FileChangeHandler(pyinotify.ProcessEvent): +            def __init__(self, hook): +                self.hook = hook +             +            def process_default(self, event): +                self.hook.fileChangeEvent(event.path) +         +        notifier = pyinotify.ThreadedNotifier(wm, FileChangeHandler(self)) +        notifier.start() +        mask = pyinotify.IN_MODIFY | pyinotify.IN_CLOSE_WRITE | pyinotify.IN_MOVED_TO +        wm.add_watch(os.path.join(self.core.path, "links.txt"), mask) +        wm.add_watch(os.path.join(self.core.path, "container"), mask, rec=True, auto_add=True) +     +    def fileChangeEvent(self, path): +        path = os.path.abspath(path) +        if self.isValidContainer(path): +            self.addNewFile(path) +     +    def isValidContainer(self, path): +        ext = [".txt", ".dlc", ".ccf", ".rsdf"] +        for e in ext: +            if path.endswith(e): +                return True +        return False +     +    def addNewFile(self, path): +        self.core.server_methods.add_package("Container", [path]) +         | 
