#ifndef MOUNTDISKLISTENER_H #define MOUNTDISKLISTENER_H #include "dir-watcher-adaptor.h" #include #include #include #include #include #include #include #include #include #include #undef slots #undef signals #undef emit #include #include class DirWatcher : public QObject { Q_OBJECT Q_CLASSINFO("D-Bus Interface","org.ukui.search.fileindex") public: static DirWatcher *getDirWatcher(); static void mountAddCallback(GVolumeMonitor *monitor, GMount *gmount, DirWatcher *pThis); static void mountRemoveCallback(GVolumeMonitor *monitor, GMount *gmount, DirWatcher *pThis); void appendBlackListItemOfIndex(const QString &path); void appendBlackListItemOfIndex(const QStringList &pathList); void removeBlackListItemOfIndex(const QString &path); void removeBlackListItemOfIndex(const QStringList &pathList); public Q_SLOTS: void initDbusService(); QStringList currentIndexableDir(); QStringList currentBlackListOfIndex(); QStringList currentSearchableDir(); QStringList searchableDirForSearchApplication(); QStringList blackListOfDir(const QString &dirPath); /** * @brief DirWatcher::appendIndexableListItem * add a item to indexable dirs * @param path: the path to be added to the index dirs list * @return int: the result code * 1: successful * -1: path or its parent dir has been added * -2: path is or under blacklist * -3: path is in repeat mounted devices and another path which is in the same device has been indexed * -4: another path which is in the same device has been indexed * -5: path is not exists */ Q_SCRIPTABLE int appendIndexableListItem(const QString &path); Q_SCRIPTABLE bool removeIndexableListItem(const QString &path); private: DirWatcher(QObject *parent = nullptr); ~DirWatcher(); void initData(); void initDiskWatcher(); void updateIndexableDirs(); void handleDisk(); bool handleIndexItemAppend(const QString &path, QStringList &blackList); bool handleIndexItemRemove(const QString &path); static QMutex s_mutex; DirWatcherAdaptor *m_adaptor = nullptr; GVolumeMonitor *m_volumeMonitor = nullptr; quint64 m_mountAddHandle; quint64 m_mountRemoveHandle; QSettings *m_qSettings = nullptr; QStringList m_blackListOfIndex; QStringList m_indexableDirList; QStringList m_searchableDirList; QStringList m_searchableListForApplication; QStringList m_autoMountList; QMultiMap m_infoOfSubvolume; QMap m_currentMountedDeviceInfo; QMap m_repeatedlyMountedDeviceInfo; QStringList m_currentUDiskDeviceList; QString m_removedUDiskDevice; QMap m_currentUDiskDeviceInfo; private Q_SLOTS: void handleAddedUDiskDevice(QDBusMessage msg); void handleRemovedUDiskDevice(QDBusMessage msg); Q_SIGNALS: void udiskRemoved(); void appendIndexItem(const QString&, const QStringList&); void removeIndexItem(const QString&); }; #endif // MOUNTDISKLISTENER_H