# -*- 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

        return #@TODO remove when working correctly
    
        if not os.name == "posix":
            return
        
        self.core.check_file(self.core.make_path("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])