eric6/WebBrowser/Tools/DelayedFileWatcher.py

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

eric ide

mercurial