aboutsummaryrefslogtreecommitdiff
path: root/libs/check_fnis/src/checkfnis.h
blob: 8971ab24b2233194a24c4dea9ecb469157f14c51 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#ifndef CHECKFNIS_H
#define CHECKFNIS_H

#include <uibase/imoinfo.h>
#include <uibase/iplugin.h>
#include <uibase/versioninfo.h>

#include <QList>
#include <QMap>
#include <QObject>
#include <QString>

#include <QtGlobal>  // for QT_VERSION, QT_VERSION_CHECK

#include <vector>

namespace MOBase
{
struct PluginSetting;
}

class CheckFNIS : public QObject, public MOBase::IPlugin
{

  Q_OBJECT
  Q_INTERFACES(MOBase::IPlugin)
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
  Q_PLUGIN_METADATA(IID "org.tannin.CheckFNIS")
#endif

public:
  CheckFNIS();
  ~CheckFNIS();

public:  // IPlugin
  virtual bool init(MOBase::IOrganizer* moInfo) override;
  virtual QString name() const override;
  virtual QString localizedName() const override;
  virtual std::vector<std::shared_ptr<const MOBase::IPluginRequirement>>
  requirements() const override;
  virtual QString author() const override;
  virtual QString description() const override;
  virtual MOBase::VersionInfo version() const override;
  virtual QList<MOBase::PluginSetting> settings() const override;

private:
  bool fnisCheck(const QString& application);
  void fnisEndCheck(const QString& application, unsigned int code);

  QString getFnisPath() const;
  static bool appIsFNIS(QString const& application, const QString& fnisApp);

  bool testFileRelevant(const MOBase::IOrganizer::FileInfo& fileName) const;
  void findRelevantFilesRecursive(const QString& path,
                                  QMap<QString, QString>& fileList) const;
  // generates a map of file-names and hashes. Any change prompts a new fnis run
  QString generateIdentifier() const;

private:
  MOBase::IOrganizer* m_MOInfo;
  bool m_Active;

  std::vector<QRegularExpression> const m_MatchExpressions;
  std::vector<QRegularExpression> const m_SensitiveMatchExpressions;
};

#endif  // CHECKFNIS_H