MiKTeX 23.10-next
A scalable TeX distribution
Loading...
Searching...
No Matches
PackageManager.h
1/* miktex/PackageManager/PackageManager.h: -*- C++ -*-
2
3 Copyright (C) 2001-2020 Christian Schenk
4
5 This file is part of MiKTeX Package Manager.
6
7 MiKTeX Package Manager is free software; you can redistribute it
8 and/or modify it under the terms of the GNU General Public License
9 as published by the Free Software Foundation; either version 2, or
10 (at your option) any later version.
11
12 MiKTeX Package Manager is distributed in the hope that it will be
13 useful, but WITHOUT ANY WARRANTY; without even the implied warranty
14 of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with MiKTeX Package Manager; if not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA. */
21
22#pragma once
23
24#if !defined(D5760AC70396FF41BBDD7DD560BDBBBC)
26#define D5760AC70396FF41BBDD7DD560BDBBBC
28
29#include "config.h"
30
31#include <ctime>
32
33#include <memory>
34#include <string>
35#include <vector>
36
37#include <miktex/Core/Cfg>
38#include <miktex/Util/PathName>
39
40#include <miktex/Trace/TraceCallback>
41#include <miktex/Trace/TraceStream>
42
43#include "PackageInfo.h"
44#include "PackageInstaller.h"
45#include "PackageIterator.h"
46#include "RepositoryInfo.h"
47
50MIKTEX_PACKAGES_BEGIN_NAMESPACE;
51
53{
54 bool useProxy = false;
55 std::string proxy;
56 int port = 0;
57 bool authenticationRequired = false;
58 std::string user;
59 std::string password;
60};
61
64{
66 std::time_t lastUpdateCheck = InvalidTimeT;
68 std::time_t lastUpdate = InvalidTimeT;
70 std::time_t lastUpdateDb = InvalidTimeT;
72 std::size_t packageCount = 0;
73};
74
76class MIKTEXNOVTABLE PackageManager
77{
78public:
79 virtual MIKTEXTHISCALL ~PackageManager() noexcept = 0;
80
84public:
85 virtual std::unique_ptr<class PackageInstaller> MIKTEXTHISCALL CreateInstaller(const PackageInstaller::InitInfo& initInfo) = 0;
86
89public:
90 virtual std::unique_ptr<class PackageInstaller> MIKTEXTHISCALL CreateInstaller() = 0;
91
93public:
94 virtual std::unique_ptr<class PackageIterator> MIKTEXTHISCALL CreateIterator() = 0;
95
97public:
98 virtual void MIKTEXTHISCALL CreateMpmFndb() = 0;
99
103public:
104 virtual PackageInfo MIKTEXTHISCALL GetPackageInfo(const std::string& packageId) = 0;
105
109public:
110 virtual void MIKTEXTHISCALL LoadDatabase(const MiKTeX::Util::PathName& path, bool isArchive) = 0;
111
113public:
114 virtual void MIKTEXTHISCALL UnloadDatabase() = 0;
115
118public:
120
123public:
124 virtual void MIKTEXTHISCALL SetRepositoryReleaseState(RepositoryReleaseState repositoryReleaseState) = 0;
125
127public:
128 virtual void MIKTEXTHISCALL DownloadRepositoryList() = 0;
129
132public:
133 virtual std::vector<RepositoryInfo> MIKTEXTHISCALL GetRepositories() = 0;
134
137public:
138 virtual std::string MIKTEXTHISCALL PickRepositoryUrl() = 0;
139
144public:
145 virtual bool MIKTEXTHISCALL TryGetPackageInfo(const std::string& packageId, PackageInfo& packageInfo) = 0;
146
151public:
152 virtual bool MIKTEXTHISCALL TryGetRepositoryInfo(const std::string& url, RepositoryInfo& repositoryInfo) = 0;
153
158public:
159 virtual RepositoryInfo MIKTEXTHISCALL CheckPackageRepository(const std::string& url) = 0;
160
165public:
166 virtual RepositoryInfo MIKTEXTHISCALL VerifyPackageRepository(const std::string& url) = 0;
167
175public:
176 virtual bool MIKTEXTHISCALL TryVerifyInstalledPackage(const std::string& packageId) = 0;
177
182public:
183 virtual std::string MIKTEXTHISCALL GetContainerPath(const std::string& packageId, bool useDisplayNames) = 0;
184
188public:
189 virtual InstallationSummary MIKTEXTHISCALL GetInstallationSummary(bool userScope) = 0;
190
191public:
193 struct InitInfo
194 {
195 InitInfo() = default;
196 InitInfo(const InitInfo& other) = default;
197 InitInfo& operator=(const InitInfo& other) = default;
198 InitInfo(InitInfo&& other) = default;
199 InitInfo& operator=(InitInfo&& other) = default;
200 ~InitInfo() = default;
201 InitInfo(MiKTeX::Trace::TraceCallback* traceCallback) :
202 traceCallback(traceCallback)
203 {
204 }
205 MiKTeX::Trace::TraceCallback* traceCallback = nullptr;
206 };
207
211public:
212 static MIKTEXMPMCEEAPI(std::shared_ptr<PackageManager>) Create(const InitInfo& initInfo);
213
216public:
217 static std::shared_ptr<PackageManager> Create()
218 {
219 return Create(InitInfo());
220 }
221
227public:
228 static MIKTEXMPMCEEAPI(std::string) GetRemotePackageRepository(RepositoryReleaseState& repositoryReleaseState);
229
235public:
236 static std::string GetRemotePackageRepository()
237 {
238 RepositoryReleaseState unusedRepositoryReleaseState;
239 return GetRemotePackageRepository(unusedRepositoryReleaseState);
240 }
241
247public:
248 static MIKTEXMPMCEEAPI(bool) TryGetRemotePackageRepository(std::string& url, RepositoryReleaseState& repositoryReleaseState);
249
254public:
255 static bool TryGetRemotePackageRepository(std::string& url)
256 {
257 RepositoryReleaseState unusedRepositoryReleaseState;
258 return TryGetRemotePackageRepository(url, unusedRepositoryReleaseState);
259 }
260
265public:
266 static MIKTEXMPMCEEAPI(MiKTeX::Util::PathName) GetLocalPackageRepository();
267
272public:
273 static MIKTEXMPMCEEAPI(bool) TryGetLocalPackageRepository(MiKTeX::Util::PathName& path);
274
277public:
278 static MIKTEXMPMCEEAPI(MiKTeX::Util::PathName) GetMiKTeXDirectRoot();
279
282public:
283 static MIKTEXMPMCEEAPI(bool) TryGetMiKTeXDirectRoot(MiKTeX::Util::PathName& path);
284
288public:
289 static MIKTEXMPMCEEAPI(RepositoryInfo) GetDefaultPackageRepository();
290
297public:
298 static MIKTEXMPMCEEAPI(bool) TryGetDefaultPackageRepository(RepositoryType& repositoryType, RepositoryReleaseState& repositoryReleaseState, std::string& urlOrPath);
299
305public:
306 static bool TryGetDefaultPackageRepository(RepositoryType& repositoryType, std::string& urlOrPath)
307 {
308 RepositoryReleaseState unusedRepositoryReleaseState;
309 return TryGetDefaultPackageRepository(repositoryType, unusedRepositoryReleaseState, urlOrPath);
310 }
311
315public:
316 static MIKTEXMPMCEEAPI(void) SetDefaultPackageRepository(const RepositoryInfo& repository);
317
323public:
324 static MIKTEXMPMCEEAPI(void) SetDefaultPackageRepository(RepositoryType repositoryType, RepositoryReleaseState repositoryReleaseState, const std::string& urlOrPath);
325
330public:
331 static void SetDefaultPackageRepository(RepositoryType repositoryType, const std::string& urlOrPath)
332 {
333 SetDefaultPackageRepository(repositoryType, RepositoryReleaseState::Unknown, urlOrPath);
334 }
335
339public:
340 static MIKTEXMPMCEEAPI(bool) IsLocalPackageRepository(const MiKTeX::Util::PathName& path);
341
346public:
347 static MIKTEXMPMCEEAPI(void) SetRemotePackageRepository(const std::string& url, RepositoryReleaseState repositoryReleaseState);
348
352public:
353 static void SetRemotePackageRepository(const std::string& url)
354 {
355 SetRemotePackageRepository(url, RepositoryReleaseState::Unknown);
356 }
357
361public:
362 static MIKTEXMPMCEEAPI(void) SetLocalPackageRepository(const MiKTeX::Util::PathName& path);
363
366public:
367 static MIKTEXMPMCEEAPI(void) SetMiKTeXDirectRoot(const MiKTeX::Util::PathName& path);
368
373public:
374 static MIKTEXMPMCEEAPI(PackageInfo) ReadPackageManifestFile(const MiKTeX::Util::PathName& path, const std::string& texmfPrefix);
375
380public:
381 static MIKTEXMPMCEEAPI(void) WritePackageManifestFile(const MiKTeX::Util::PathName& path, const PackageInfo& packageInfo, std::time_t timePackaged);
382
387public:
388 static MIKTEXMPMCEEAPI(void) PutPackageManifest(MiKTeX::Core::Cfg& cfg, const PackageInfo& packageInfo, std::time_t timePackaged);
389
395public:
396 static MIKTEXMPMCEEAPI(PackageInfo) GetPackageManifest(const MiKTeX::Core::Cfg& cfg, const std::string& packageId, const std::string& texmfPrefix);
397
402public:
403 static MIKTEXMPMCEEAPI(bool) StripTeXMFPrefix(const std::string& str, std::string& result);
404
410public:
411 static MIKTEXMPMCEEAPI(bool) TryGetProxy(const std::string& url, ProxySettings& proxySettings);
412
417public:
418 static MIKTEXMPMCEEAPI(bool) TryGetProxy(ProxySettings& proxySettings);
419
422public:
423 static MIKTEXMPMCEEAPI(void) SetProxy(const ProxySettings& proxySettings);
424};
425
426MIKTEX_PACKAGES_END_NAMESPACE;
427
428#endif
Package information.
INI container.
Definition: Cfg.h:60
The package manager interface.
Definition: PackageManager.h:77
virtual bool TryGetPackageInfo(const std::string &packageId, PackageInfo &packageInfo)=0
virtual std::string PickRepositoryUrl()=0
virtual void SetRepositoryReleaseState(RepositoryReleaseState repositoryReleaseState)=0
static std::shared_ptr< PackageManager > Create()
Definition: PackageManager.h:217
virtual InstallationSummary GetInstallationSummary(bool userScope)=0
virtual std::unique_ptr< class PackageInstaller > CreateInstaller(const PackageInstaller::InitInfo &initInfo)=0
static bool TryGetDefaultPackageRepository(RepositoryType &repositoryType, std::string &urlOrPath)
Definition: PackageManager.h:306
virtual RepositoryInfo VerifyPackageRepository(const std::string &url)=0
static bool TryGetRemotePackageRepository(std::string &url)
Definition: PackageManager.h:255
virtual std::vector< RepositoryInfo > GetRepositories()=0
static void SetDefaultPackageRepository(RepositoryType repositoryType, const std::string &urlOrPath)
Definition: PackageManager.h:331
virtual std::unique_ptr< class PackageIterator > CreateIterator()=0
Creates a new package iterator object.
virtual void DownloadRepositoryList()=0
Downloads the repositiry list from the server.
virtual void UnloadDatabase()=0
Unloads the package database.
static void SetRemotePackageRepository(const std::string &url)
Definition: PackageManager.h:353
virtual PackageInfo GetPackageInfo(const std::string &packageId)=0
virtual void LoadDatabase(const MiKTeX::Util::PathName &path, bool isArchive)=0
virtual RepositoryInfo CheckPackageRepository(const std::string &url)=0
virtual bool TryGetRepositoryInfo(const std::string &url, RepositoryInfo &repositoryInfo)=0
virtual bool TryVerifyInstalledPackage(const std::string &packageId)=0
Verifies an installed package.
virtual std::unique_ptr< class PackageInstaller > CreateInstaller()=0
static std::string GetRemotePackageRepository()
Definition: PackageManager.h:236
virtual std::string GetContainerPath(const std::string &packageId, bool useDisplayNames)=0
virtual RepositoryReleaseState GetRepositoryReleaseState()=0
virtual void CreateMpmFndb()=0
Recreates the file name database of the package manager.
Definition: TraceCallback.h:45
Instances of this class can be used to store path names.
Definition: PathName.h:73
constexpr std::time_t InvalidTimeT
An invalid timestamp.
Definition: definitions.h:30
RepositoryReleaseState
Repository release state.
Definition: RepositoryInfo.h:174
RepositoryType
Repository type.
Definition: RepositoryInfo.h:78
Installation summary.
Definition: PackageManager.h:64
Package record.
Definition: PackageInfo.h:34
Initialization options.
Definition: PackageInstaller.h:373
Initialization options.
Definition: PackageManager.h:194
Definition: PackageManager.h:53
Package repository info struct.
Definition: RepositoryInfo.h:204