Baloo

fileindexerconfig.h
1 /*
2  SPDX-FileCopyrightText: 2008-2009 Sebastian Trueg <[email protected]>
3  SPDX-FileCopyrightText: 2012-2014 Vishesh Handa <[email protected]>
4  SPDX-FileCopyrightText: 2020 Benjamin Port <[email protected]>
5 
6  SPDX-License-Identifier: LGPL-2.0-or-later
7 */
8 
9 #ifndef BALOO_FILEINDEXER_CONFIG_H_
10 #define BALOO_FILEINDEXER_CONFIG_H_
11 
12 #include <QObject>
13 #include <QList>
14 #include <QSet>
15 #include <QDebug>
16 
17 #include "regexpcache.h"
18 
19 class BalooSettings;
20 
21 namespace Baloo
22 {
23 
24 class StorageDevices;
25 
26 /**
27  * Active config class which emits signals if the config
28  * was changed, for example if the KCM saved the config file.
29  */
30 class FileIndexerConfig : public QObject
31 {
32  Q_OBJECT
33 
34 public:
35 
36  explicit FileIndexerConfig(QObject* parent = nullptr);
37  ~FileIndexerConfig() override;
38 
39  /**
40  * Folders to search for files to index and analyze.
41  * \return list of paths.
42  */
44 
45  /**
46  * Folders that are excluded from indexing.
47  * (Descendant folders of an excluded folder can be added
48  * and they will be indexed.)
49  * \return list of paths.
50  */
52 
53  QStringList excludeFilters() const;
54 
55  QStringList excludeMimetypes() const;
56 
57  bool indexHiddenFilesAndFolders() const;
58 
59  bool onlyBasicIndexing() const;
60 
61  /**
62  * Check if \p folder can be searched.
63  * \p folder can be searched if itself or one of its descendants is indexed.
64  *
65  * Example:
66  * if ~/foo is not indexed and ~/foo/bar is indexed
67  * then ~/foo can be searched.
68  *
69  * \return \c true if the \p folder can be searched.
70  */
71  bool canBeSearched(const QString& folder) const;
72 
73  /**
74  * Check if file or folder \p path should be indexed taking into account
75  * the includeFolders(), the excludeFolders(), and the excludeFilters().
76  * Inclusion takes precedence.
77  *
78  * Be aware that this method does not check if parent dirs
79  * match any of the exclude filters. Only the path of the
80  * dir itself it checked.
81  *
82  * \return \c true if the file or folder at \p path should
83  * be indexed according to the configuration.
84  */
85  bool shouldBeIndexed(const QString& path) const;
86 
87  /**
88  * Check if the folder at \p path should be indexed.
89  *
90  * Be aware that this method does not check if parent dirs
91  * match any of the exclude filters. Only the name of the
92  * dir itself it checked.
93  *
94  * \return \c true if the folder at \p path should
95  * be indexed according to the configuration.
96  */
97  bool shouldFolderBeIndexed(const QString& path) const;
98 
99  /**
100  * Check \p fileName for all exclude filters. This does
101  * not take file paths into account.
102  *
103  * \return \c true if a file with name \p filename should
104  * be indexed according to the configuration.
105  */
106  bool shouldFileBeIndexed(const QString& fileName) const;
107 
108  /**
109  * Checks if \p mimeType should be indexed
110  *
111  * \return \c true if the mimetype should be indexed according
112  * to the configuration
113  */
114  bool shouldMimeTypeBeIndexed(const QString& mimeType) const;
115 
116  /**
117  * Check if \p path is in the list of folders to be indexed taking
118  * include and exclude folders into account.
119  * \p folder is set to the folder which was the reason for the decision.
120  */
121  bool folderInFolderList(const QString& path, QString& folder) const;
122 
123  /**
124  * Returns the internal version number of the Baloo database
125  */
126  int databaseVersion() const;
127  void setDatabaseVersion(int version);
128 
129  bool indexingEnabled() const;
130 
131  /**
132  * Returns batch size
133  */
134  uint maxUncomittedFiles() const;
135 
136 public Q_SLOTS:
137  /**
138  * Reread the config from disk and update the configuration cache.
139  * This is only required for testing as normally the config updates
140  * itself whenever the config file on disk changes.
141  *
142  * \return \c true if the config has actually changed
143  */
144  void forceConfigUpdate();
145 
146 private:
147 
148  void buildFolderCache();
149  void buildExcludeFilterRegExpCache();
150  void buildMimeTypeCache();
151 
152  BalooSettings *m_settings;
153 
154  struct FolderConfig
155  {
156  QString path;
157  bool isIncluded;
158 
159  /// Sort by path length, and on ties lexicographically.
160  /// Longest path first
161  bool operator<(const FolderConfig& other) const;
162  };
163 
164  class FolderCache : public std::vector<FolderConfig>
165  {
166  public:
167  void cleanup();
168 
169  bool addFolderConfig(const FolderConfig&);
170  };
171  friend QDebug operator<<(QDebug dbg, const FolderConfig& config);
172 
173  /// Caching cleaned up list (no duplicates, no non-default entries, etc.)
174  FolderCache m_folderCache;
175  /// Whether the folder cache needs to be rebuilt the next time it is used
176  bool m_folderCacheDirty;
177 
178  /// cache of regexp objects for all exclude filters
179  /// to prevent regexp parsing over and over
180  RegExpCache m_excludeFilterRegExpCache;
181 
182  /// A set of mimetypes which should never be indexed
183  QSet<QString> m_excludeMimetypes;
184 
185  bool m_indexHidden;
186  bool m_onlyBasicIndexing;
187 
188  StorageDevices* m_devices;
189 
190  const uint m_maxUncomittedFiles;
191 };
192 
193 QDebug operator<<(QDebug dbg, const FileIndexerConfig::FolderCache::value_type&);
194 
195 }
196 
197 #endif
Q_OBJECTQ_OBJECT
int databaseVersion() const
Returns the internal version number of the Baloo database.
KCALENDARCORE_EXPORT QDataStream & operator<<(QDataStream &out, const KCalendarCore::Alarm::Ptr &)
QStringList includeFolders() const
Folders to search for files to index and analyze.
Q_SLOTSQ_SLOTS
uint maxUncomittedFiles() const
Returns batch size.
void forceConfigUpdate()
Reread the config from disk and update the configuration cache.
bool shouldBeIndexed(const QString &path) const
Check if file or folder path should be indexed taking into account the includeFolders(),...
Implements storage for docIds without any associated data Instantiated for:
Definition: coding.cpp:11
Active config class which emits signals if the config was changed, for example if the KCM saved the c...
KSharedConfigPtr config()
bool folderInFolderList(const QString &path, QString &folder) const
Check if path is in the list of folders to be indexed taking include and exclude folders into account...
bool shouldFileBeIndexed(const QString &fileName) const
Check fileName for all exclude filters.
bool shouldMimeTypeBeIndexed(const QString &mimeType) const
Checks if mimeType should be indexed.
The removable media cache media that are supported by Baloo.
bool canBeSearched(const QString &folder) const
Check if folder can be searched.
QStringList excludeFolders() const
Folders that are excluded from indexing.
QObject * parent() const const
bool shouldFolderBeIndexed(const QString &path) const
Check if the folder at path should be indexed.
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Wed Nov 29 2023 03:56:26 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.