eric7/WebBrowser/Tools/DelayedFileWatcher.py

branch
eric7
changeset 8312
800c432b34c8
parent 8218
7c09585bd960
child 8318
962bce857696
equal deleted inserted replaced
8311:4e8b98454baa 8312:800c432b34c8
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2016 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a file system watcher with a delay.
8 """
9
10 from PyQt5.QtCore import pyqtSignal, pyqtSlot, QFileSystemWatcher, QTimer
11
12
13 class DelayedFileWatcher(QFileSystemWatcher):
14 """
15 Class implementing a file system watcher with a delay.
16
17 @signal delayedDirectoryChanged(path) emitted to indicate a changed
18 directory
19 @signal delayedFileChanged(path) emitted to indicate a changed file
20 """
21 delayedDirectoryChanged = pyqtSignal(str)
22 delayedFileChanged = pyqtSignal(str)
23
24 def __init__(self, paths=None, parent=None):
25 """
26 Constructor
27
28 @param paths list of paths to be watched
29 @type list of str
30 @param parent reference to the parent object
31 @type QObject
32 """
33 if paths:
34 super().__init__(paths, parent)
35 else:
36 super().__init__(parent)
37
38 self.__dirQueue = []
39 self.__fileQueue = []
40
41 self.directoryChanged.connect(self.__directoryChanged)
42 self.fileChanged.connect(self.__fileChanged)
43
44 @pyqtSlot(str)
45 def __directoryChanged(self, path):
46 """
47 Private slot handling a changed directory.
48
49 @param path name of the changed directory
50 @type str
51 """
52 self.__dirQueue.append(path)
53 QTimer.singleShot(500, self.__dequeueDirectory)
54
55 @pyqtSlot(str)
56 def __fileChanged(self, path):
57 """
58 Private slot handling a changed file.
59
60 @param path name of the changed file
61 @type str
62 """
63 self.__fileQueue.append(path)
64 QTimer.singleShot(500, self.__dequeueFile)
65
66 @pyqtSlot()
67 def __dequeueDirectory(self):
68 """
69 Private slot to signal a directory change.
70 """
71 self.delayedDirectoryChanged.emit(self.__dirQueue.pop(0))
72
73 @pyqtSlot()
74 def __dequeueFile(self):
75 """
76 Private slot to signal a file change.
77 """
78 self.delayedFileChanged.emit(self.__fileQueue.pop(0))

eric ide

mercurial