1// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
2//
3// SPDX-License-Identifier: GPL-3.0-or-later
4
5#ifndef INOTIFY_HOOK_H
6#define INOTIFY_HOOK_H
7
8#include <QThread>
9#include <QHash>
10#include <QReadWriteLock>
11
12class InotifyHook : public QThread
13{
14 Q_OBJECT
15public:
16 enum Type
17 {
18 ACCESS, // 文件被访问
19 MODIFY, // 文件被修改
20 ATTRIB, // 文件属性被修改
21 CLOSE_WRITE, // 以写打开的文件被关闭
22 CLOSE_NOWRITE, // 已不可写打开的文件被关闭
23 CLOSE, // 文件关闭
24 OPEN, // 文件打开
25 MOVED_FROM, // 文件被移出监控目录
26 MOVED_TO, // 文件移入监控目录
27 MOVE, // 文件被移动
28 CREATE, // 新建文件或文件夹
29 DELETE, // 文件或目录被删除
30 DELETE_SELF, // 监控目录被删除
31 MOVE_SELF, // 监控目录被移动
32 };
33 Q_ENUM(Type)
34 Q_DECLARE_FLAGS(Types, Type)
35 Q_FLAG(Types)
36
37 virtual void stop() { stopFlag = true; }
38
39 virtual void addPath(const QString &path)
40 { Q_UNUSED(path); }
41
42 virtual void removePath(const QString &path)
43 { Q_UNUSED(path); }
44
45signals:
46 void inotifyEvent(Type type, const QString &filePath);
47
48protected:
49 bool stopFlag = false;
50};
51
52#endif // INOTIFY_HOOK_H
53