syncthingtray/syncthingconnector/syncthingignorepattern.h

48 lines
1.8 KiB
C++

#ifndef DATA_SYNCTHINGIGNOREPATTERN_H
#define DATA_SYNCTHINGIGNOREPATTERN_H
#include "./global.h"
#include <QString>
#include <vector>
namespace Data {
namespace SyncthingIgnorePatternState {
struct Asterisk;
struct CharacterRange;
struct AlternativeRange;
} // namespace SyncthingIgnorePatternState
struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingIgnorePattern {
explicit SyncthingIgnorePattern(QString &&pattern);
SyncthingIgnorePattern(const SyncthingIgnorePattern &) = delete;
SyncthingIgnorePattern(SyncthingIgnorePattern &&);
~SyncthingIgnorePattern();
bool matches(const QString &path, QChar pathSeparator = QChar('/')) const;
static QString forPath(const QString &path, bool ignore = true, bool caseInsensitive = false, bool allowRemovalOnParentDirRemoval = false);
/// \brief The full ignore pattern as passed to the c'tor (unless modified).
QString pattern;
/// \brief The part of the pattern that will actually be used for globbing by the matches() function.
QString glob;
/// \brief Whether the pattern is a comment.
bool comment = false;
/// \brief Whether the pattern will lead to ignoring matching items (the default).
bool ignore = true;
/// \brief Whether the pattern will match case-insensetively.
bool caseInsensitive = false;
/// \brief Whether matching items may be removed when the otherwise empty parent directory would be removed.
bool allowRemovalOnParentDirRemoval = false;
private:
mutable std::vector<SyncthingIgnorePatternState::Asterisk> asterisks;
mutable std::vector<SyncthingIgnorePatternState::CharacterRange> characterRange;
mutable std::vector<SyncthingIgnorePatternState::AlternativeRange> alternatives;
};
} // namespace Data
#endif // DATA_SYNCTHINGIGNOREPATTERN_H