RADLib
RADical C++ application framework
RADInstaller.h
Go to the documentation of this file.
1 #ifndef RADINSTALLER_H
2 #define RADINSTALLER_H
3 
9 #pragma once
10 
11 #include <RADCore/RADCore.h>
12 
13 #include <functional>
14 #include <string>
15 #include <vector>
16 
17 namespace RADInstaller {
18 
20  struct FileEntry {
22  std::string source;
24  std::string destination;
26  std::string checksum;
27  };
28 
30  struct DesktopEntry {
32  std::string fileName;
34  std::string name;
36  std::string exec;
38  std::string categories = "Development;";
39  };
40 
42  struct Component {
44  std::string id;
46  std::string name;
48  bool defaultSelected = true;
50  std::vector<FileEntry> files;
51  };
52 
54  struct Manifest {
56  std::string productName;
58  std::string version;
60  std::string publisher;
62  std::string license;
64  std::vector<Component> components;
66  std::vector<DesktopEntry> desktopEntries;
67  };
68 
70  struct Result {
72  bool ok = false;
74  std::string error;
76  std::vector<std::string> installedFiles;
77  };
78 
80  using ProgressCallback = std::function<void(int, const std::string&)>;
81 
83  class Installer {
84  public:
86  static RADCore::RADResult<Manifest> loadManifest(const std::string& path);
88  static Result install(const Manifest& manifest, const std::string& sourceRoot,
89  const std::string& targetRoot, const std::vector<std::string>& selectedComponents = {},
90  ProgressCallback progress = {});
92  static Result uninstall(const std::string& uninstallManifestPath, ProgressCallback progress = {});
94  static bool writeUninstallManifest(const std::string& path, const Manifest& manifest,
95  const std::vector<std::string>& installedFiles, std::string* error = nullptr);
96  };
97 
98 } // namespace RADInstaller
99 
100 #endif
Success-or-error return value for APIs that should not throw.
Definition: RADCore.h:126
Manifest-driven installer engine with rollback and uninstall manifest support.
Definition: RADInstaller.h:83
static Result uninstall(const std::string &uninstallManifestPath, ProgressCallback progress={})
Uninstalls files recorded in uninstallManifestPath.
static Result install(const Manifest &manifest, const std::string &sourceRoot, const std::string &targetRoot, const std::vector< std::string > &selectedComponents={}, ProgressCallback progress={})
Installs selected components from sourceRoot to targetRoot.
static RADCore::RADResult< Manifest > loadManifest(const std::string &path)
Loads a manifest from JSON.
static bool writeUninstallManifest(const std::string &path, const Manifest &manifest, const std::vector< std::string > &installedFiles, std::string *error=nullptr)
Writes an uninstall manifest for installed files.
Definition: RADInstaller.h:17
std::function< void(int, const std::string &)> ProgressCallback
Progress callback receiving 0..100 percentage and status text.
Definition: RADInstaller.h:80
Installable component from a manifest.
Definition: RADInstaller.h:42
std::string name
Display name.
Definition: RADInstaller.h:46
std::vector< FileEntry > files
Files in this component.
Definition: RADInstaller.h:50
bool defaultSelected
Whether the component is selected by default.
Definition: RADInstaller.h:48
std::string id
Stable component id.
Definition: RADInstaller.h:44
Optional desktop entry created by the installer.
Definition: RADInstaller.h:30
std::string exec
Executable command.
Definition: RADInstaller.h:36
std::string categories
Category string.
Definition: RADInstaller.h:38
std::string fileName
Launcher file name.
Definition: RADInstaller.h:32
std::string name
Display name.
Definition: RADInstaller.h:34
One file copied by the installer.
Definition: RADInstaller.h:20
std::string source
Source path relative to package root.
Definition: RADInstaller.h:22
std::string destination
Destination path relative to install root.
Definition: RADInstaller.h:24
std::string checksum
Optional file checksum. Use "fnv1a64:<hex>" or a raw FNV-1a 64-bit hex string.
Definition: RADInstaller.h:26
Installer manifest loaded from radinstall.json.
Definition: RADInstaller.h:54
std::vector< DesktopEntry > desktopEntries
Desktop entries to create.
Definition: RADInstaller.h:66
std::string productName
Product name.
Definition: RADInstaller.h:56
std::string publisher
Publisher name.
Definition: RADInstaller.h:60
std::string license
License text or path.
Definition: RADInstaller.h:62
std::string version
Product version.
Definition: RADInstaller.h:58
std::vector< Component > components
Installable components.
Definition: RADInstaller.h:64
Installer result.
Definition: RADInstaller.h:70
std::vector< std::string > installedFiles
Installed file paths.
Definition: RADInstaller.h:76
std::string error
Error message on failure.
Definition: RADInstaller.h:74
bool ok
True on success.
Definition: RADInstaller.h:72