MiKTeX 26.5-next
A scalable TeX distribution
Loading...
Searching...
No Matches
SetupService.h
1
13
14#pragma once
15
16// DLL import/export switch
17#if !defined(C09CDC45E4B649EDA745DAF436D18309)
18#if defined(MIKTEX_SETUP_SHARED)
19#define MIKTEXSETUPEXPORT MIKTEXDLLIMPORT
20#else
21#define MIKTEXSETUPEXPORT
22#endif
23#endif
24
25// API decoration for exported member functions
26#define MIKTEXSETUPCEEAPI(type) MIKTEXSETUPEXPORT type MIKTEXCEECALL
27
28#define MIKTEX_SETUP_BEGIN_NAMESPACE \
29 namespace MiKTeX { \
30 namespace Setup {
31
32#define MIKTEX_SETUP_END_NAMESPACE \
33 } \
34 }
35
36#include <functional>
37#include <memory>
38#include <ostream>
39#include <string>
40#include <vector>
41
42#include <miktex/Configuration/TriState>
43
44#include <miktex/Util/OptionSet>
45#include <miktex/Util/PathName>
46#include <miktex/Core/Session>
47#include <miktex/Core/TemporaryDirectory>
48
49#include <miktex/PackageManager/PackageManager>
50
53MIKTEX_SETUP_BEGIN_NAMESPACE;
54
55enum class SetupTask
56{
57 None,
58 Download,
59 InstallFromCD,
60 InstallFromLocalRepository,
61 InstallFromRemoteRepository, // <todo/>
62 PrepareMiKTeXDirect,
63 FinishSetup,
64 FinishUpdate,
65 CleanUp
66};
67
68enum class CleanupOption
69{
70 Components,
71 Links,
72 FileTypes,
73 LogFiles,
74 Path,
75 Registry,
76 RootDirectories,
77 StartMenu
78};
79
80typedef MiKTeX::Util::OptionSet<CleanupOption> CleanupOptionSet;
81
82enum class ReportOption
83{
84 General,
85 CurrentUser,
86 Environment,
87 Processes,
88 RootDirectories,
89 BrokenPackages
90};
91
92typedef MiKTeX::Util::OptionSet<ReportOption> ReportOptionSet;
93
94enum class IssueType
95{
96 Path,
97 AdminUpdateCheckOverdue,
98 UserUpdateCheckOverdue,
99 RootDirectoryCoverage,
100 PackageDamaged,
101 Windows32bit,
102 UnsupportedPlatform,
103};
104
105enum class IssueSeverity
106{
107 Critical = 1,
108 Major = 6,
109 Minor = 15,
110 Trivial = 43
111};
112
113struct Issue
114{
115 IssueType type;
116 IssueSeverity severity;
117 std::string message;
118 std::string remedy;
119 std::string tag;
120 MIKTEXSETUPCEEAPI(std::string) GetUrl() const;
121 MIKTEXSETUPCEEAPI(std::string) ToString() const;
122};
123
124inline std::ostream& operator<<(std::ostream& os, const Issue& issue)
125{
126 return os << issue.ToString();
127}
128
129
131{
132
133public:
134
135 std::string Banner;
136 CleanupOptionSet CleanupOptions;
137 MiKTeX::Util::PathName CommonLinkTargetDirectory;
139#if defined(MIKTEX_WINDOWS)
140 MiKTeX::Util::PathName FolderName;
141#endif
142 bool IsCommonSetup = false;
143 bool IsDryRun = false;
145 bool IsPortable = false;
146 bool IsPrefabricated = false;
147 bool IsRegisterPathEnabled = false;
148#if defined(MIKTEX_WINDOWS)
149 bool IsRegistryEnabled = false;
150#endif
151 MiKTeX::Util::PathName LocalPackageRepository;
152 MiKTeX::Util::PathName MiKTeXDirectRoot;
153 MiKTeX::Packages::PackageLevel PackageLevel = MiKTeX::Packages::PackageLevel::None;
154 std::string PaperSize = "A4";
155 MiKTeX::Util::PathName PortableRoot;
156 std::string RemotePackageRepository;
157 SetupTask Task = SetupTask::None;
158 MiKTeX::Util::PathName UserLinkTargetDirectory;
159 std::string Version;
160};
161
190
192class MIKTEXNOVTABLE SetupServiceCallback
193{
194
195public:
196
200 virtual void MIKTEXTHISCALL ReportLine(const std::string& str) = 0;
201
206 virtual bool MIKTEXTHISCALL OnRetryableError(const std::string& message) = 0;
207
213 virtual bool MIKTEXTHISCALL OnProgress(Notification nf) = 0;
214
220 virtual bool MIKTEXTHISCALL OnProcessOutput(const void* output, size_t n) = 0;
221};
222
223class MIKTEXNOVTABLE SetupService
224{
225
226public:
227
230 {
232 std::string packageId;
233
235 std::string displayName;
236
239
241 unsigned long cFilesRemoveCompleted = 0;
242
244 unsigned long cFilesRemoveTotal = 0;
245
247 unsigned long cPackagesRemoveCompleted = 0;
248
250 unsigned long cPackagesRemoveTotal = 0;
251
254
257
260
262 size_t cbDownloadTotal = 0;
263
266
268 unsigned long cFilesPackageInstallTotal = 0;
269
271 unsigned long cFilesInstallCompleted = 0;
272
274 unsigned long cFilesInstallTotal = 0;
275
277 unsigned long cPackagesInstallCompleted = 0;
278
280 unsigned long cPackagesInstallTotal = 0;
281
284
287
290
292 size_t cbInstallTotal = 0;
293
295 unsigned long bytesPerSecond = 0;
296
298 unsigned long timeRemaining = 0;
299
301 bool ready = false;
302
304 unsigned numErrors = 0;
305
306 bool cancelled = false;
307 };
308
309 virtual MIKTEXTHISCALL ~SetupService() noexcept = 0;
310
312 virtual ProgressInfo MIKTEXTHISCALL GetProgressInfo() = 0;
313
316 virtual void MIKTEXTHISCALL SetCallback(SetupServiceCallback* callback) = 0;
317
318 virtual void MIKTEXTHISCALL Initialize() = 0;
319 virtual SetupOptions MIKTEXTHISCALL GetOptions() = 0;
320 virtual SetupOptions MIKTEXTHISCALL SetOptions(const SetupOptions& options) = 0;
321 virtual void MIKTEXTHISCALL OpenLog() = 0;
322 virtual MiKTeX::Util::PathName MIKTEXTHISCALL CloseLog(bool cancel) = 0;
323 virtual void MIKTEXTHISCALL Log(const std::string& s) = 0;
324 virtual void MIKTEXTHISCALL ULogOpen() = 0;
325 virtual void MIKTEXTHISCALL ULogClose() = 0;
326 virtual MiKTeX::Util::PathName MIKTEXTHISCALL GetULogFileName() = 0;
327 virtual void ULogAddFile(const MiKTeX::Util::PathName& path) = 0;
328 virtual void MIKTEXTHISCALL SetCallbacks(std::function<void(const std::string&)> f_ReportLine, std::function<bool(const std::string&)> f_OnRetryableError, std::function<bool(MiKTeX::Setup::Notification)> f_OnProgress, std::function<bool(const void*, size_t)> f_OnProcessOutput) = 0;
329 virtual void MIKTEXTHISCALL Run() = 0;
330 virtual void MIKTEXTHISCALL WriteReport(std::ostream& s, ReportOptionSet options) = 0;
331 virtual void MIKTEXTHISCALL WriteReport(std::ostream& s) = 0;
332 virtual void MIKTEXTHISCALL CollectDiagnosticInfo(const MiKTeX::Util::PathName& outputFileName) = 0;
333 virtual std::vector<Issue> MIKTEXTHISCALL FindIssues(bool checkPath, bool checkPackageIntegrity) = 0;
334 virtual std::vector<Issue> MIKTEXTHISCALL GetIssues() = 0;
335
336#if defined(MIKTEX_WINDOWS)
337 virtual void MIKTEXTHISCALL CreateProgramIcons() = 0;
338 virtual void ULogAddRegValue(HKEY hkey, const std::string& valueName, const std::string& value) = 0;
339#endif
340
341 static MIKTEXSETUPCEEAPI(std::unique_ptr<SetupService>) Create();
342 static MIKTEXSETUPCEEAPI(std::unique_ptr<MiKTeX::Core::TemporaryDirectory>) CreateSandbox(MiKTeX::Core::StartupConfig& startupConfig);
343 static MIKTEXSETUPCEEAPI(MiKTeX::Packages::PackageLevel) TestLocalRepository(const MiKTeX::Util::PathName& pathRepository, MiKTeX::Packages::PackageLevel requestedPackageLevel);
344 static MIKTEXSETUPCEEAPI(MiKTeX::Util::PathName) GetDefaultLocalRepository();
345 static MIKTEXSETUPCEEAPI(MiKTeX::Packages::PackageLevel) SearchLocalRepository(MiKTeX::Util::PathName& localRepository, MiKTeX::Packages::PackageLevel requestedPackageLevel, bool& prefabricated);
346 static MIKTEXSETUPCEEAPI(MiKTeX::Util::PathName) GetDefaultCommonInstallDir();
347 static MIKTEXSETUPCEEAPI(MiKTeX::Util::PathName) GetDefaultUserInstallDir();
348 static MIKTEXSETUPCEEAPI(MiKTeX::Util::PathName) GetDefaultPortableRoot();
349 static MIKTEXSETUPCEEAPI(bool) IsMiKTeXDirect(MiKTeX::Util::PathName& MiKTeXDirectRoot);
350 static MIKTEXSETUPCEEAPI(std::unique_ptr<MiKTeX::Core::TemporaryDirectory>) ExtractFiles();
351};
352
353MIKTEX_SETUP_END_NAMESPACE;
354
355#undef MIKTEX_SETUP_BEGIN_NAMESPACE
356#undef MIKTEX_SETUP_END_NAMESPACE
TriState
Tri-state enum class.
Definition TriState.h:22
@ Undetermined
Undetermined.
Definition TriState.h:28
Callback interface.
Definition SetupService.h:193
virtual bool OnRetryableError(const std::string &message)=0
virtual void ReportLine(const std::string &str)=0
virtual bool OnProgress(Notification nf)=0
virtual bool OnProcessOutput(const void *output, size_t n)=0
Definition SetupService.h:224
virtual ProgressInfo GetProgressInfo()=0
Gets progress information.
virtual void SetCallback(SetupServiceCallback *callback)=0
Definition OptionSet.h:26
Instances of this class can be used to store path names.
Definition PathName.h:64
PackageLevel
Package level.
Definition RepositoryInfo.h:40
Setup utilities.
Notification
Notification enum class.
Definition SetupService.h:164
@ RemoveFileStart
File removal is about to start.
Definition SetupService.h:179
@ InstallFileStart
File installation is about to start.
Definition SetupService.h:171
@ DownloadPackageEnd
Package download has finished.
Definition SetupService.h:169
@ RemoveFileEnd
File removal has finished.
Definition SetupService.h:181
@ DownloadPackageStart
Package download is about to start.
Definition SetupService.h:167
@ RemovePackageEnd
Package removal has finished.
Definition SetupService.h:185
@ InstallPackageStart
Package installation is about to start.
Definition SetupService.h:175
@ RemovePackageStart
Package removal is about to start.
Definition SetupService.h:183
@ InstallPackageEnd
Package installation has finished.
Definition SetupService.h:177
@ InstallFileEnd
File installation has finished.
Definition SetupService.h:173
Generic utilities.
Definition CharBuffer.h:26
Startup configuration.
Definition Session.h:124
Definition SetupService.h:114
Definition SetupService.h:131
Progress info struct.
Definition SetupService.h:230
unsigned long cFilesInstallTotal
Number of files to be installed.
Definition SetupService.h:274
size_t cbPackageInstallTotal
Number of bytes to be written (current package).
Definition SetupService.h:286
unsigned long cFilesRemoveCompleted
Number of removed files.
Definition SetupService.h:241
unsigned numErrors
Number of errors.
Definition SetupService.h:304
size_t cbInstallCompleted
Number of bytes written.
Definition SetupService.h:289
unsigned long cFilesPackageInstallTotal
Number of files to be installed (current package).
Definition SetupService.h:268
unsigned long cPackagesInstallTotal
Number of packages to be installed.
Definition SetupService.h:280
unsigned long bytesPerSecond
Current transfer speed.
Definition SetupService.h:295
size_t cbPackageDownloadTotal
Number of bytes to be received (current package).
Definition SetupService.h:256
size_t cbPackageInstallCompleted
Number of written bytes (current package).
Definition SetupService.h:283
size_t cbInstallTotal
Number of bytes to be written.
Definition SetupService.h:292
size_t cbDownloadCompleted
Number of bytes received.
Definition SetupService.h:259
std::string packageId
Package ID.
Definition SetupService.h:232
MiKTeX::Util::PathName fileName
Path name of current file.
Definition SetupService.h:238
size_t cbDownloadTotal
Number of bytes to be received.
Definition SetupService.h:262
unsigned long cFilesInstallCompleted
Number of installed files.
Definition SetupService.h:271
size_t cbPackageDownloadCompleted
Number of received bytes (current package).
Definition SetupService.h:253
size_t cFilesPackageInstallCompleted
Number of installed files (current package).
Definition SetupService.h:265
unsigned long cPackagesRemoveTotal
Number of packages to be removed.
Definition SetupService.h:250
std::string displayName
Display name of package.
Definition SetupService.h:235
unsigned long cPackagesRemoveCompleted
Number of removed packages.
Definition SetupService.h:247
unsigned long cFilesRemoveTotal
Number of files to be removed.
Definition SetupService.h:244
bool ready
Ready flag.
Definition SetupService.h:301
unsigned long timeRemaining
estimated time of arrival (millisecs remaining).
Definition SetupService.h:298
unsigned long cPackagesInstallCompleted
Number of installed packages.
Definition SetupService.h:277