19#include <miktex/Core/AutoResource>
20#include <miktex/Core/Fndb>
21#include <miktex/Core/LockFile>
22#include <miktex/Core/MD5>
24#include <miktex/PackageManager/PackageManager>
29#include "PackageRepositoryDataStore.h"
30#include "WebSession.h"
32#define MPM_LOCK_BEGIN(packageManager) \
34 packageManager->Lock(std::chrono::seconds(10)); \
35 MIKTEX_AUTO(packageManager->Unlock());
37#define MPM_LOCK_END() \
40MPM_INTERNAL_BEGIN_NAMESPACE;
42typedef std::map<std::string, MiKTeX::Core::MD5, MiKTeX::Core::less_icase_dos> FileDigestTable;
45 public std::enable_shared_from_this<PackageManagerImpl>,
56 std::unique_ptr<MiKTeX::Packages::PackageInstaller> MIKTEXTHISCALL CreateInstaller()
override;
57 std::unique_ptr<class MiKTeX::Packages::PackageIterator> MIKTEXTHISCALL CreateIterator()
override;
61 if (!packageDataStore.LoadedAllPackageManifests())
65 packageDataStore.Load();
69 return CreateMpmFndbNoLock();
72 void MIKTEXTHISCALL CreateMpmFndbNoLock();
75 void MIKTEXTHISCALL UnloadDatabase()
override;
79 return repositories.GetRepositoryReleaseState();
84 repositories.SetRepositoryReleaseState(repositoryReleaseState);
89 repositories.Download();
92 std::vector<MiKTeX::Packages::RepositoryInfo> MIKTEXTHISCALL
GetRepositories()
override
94 return repositories.GetRepositories();
99 return repositories.PickRepositoryUrl();
106 bool MIKTEXTHISCALL ReadDirectory(
const MiKTeX::Util::PathName& path, std::vector<std::string>& subDirNames, std::vector<std::string>& fileNames, std::vector<std::string>& fileNameInfos)
override;
111 void OnProgress()
override;
115 return repositories.TryGetRepositoryInfo(url, repositoryInfo);
120 return repositories.CheckPackageRepository(url);
125 return repositories.VerifyPackageRepository(url);
130 if (!packageDataStore.LoadedAllPackageManifests())
134 packageDataStore.Load();
138 return TryVerifyInstalledPackageNoLock(packageId);
141 bool MIKTEXTHISCALL TryVerifyInstalledPackageNoLock(
const std::string& packageId);
143 std::string MIKTEXTHISCALL
GetContainerPath(
const std::string& packageId,
bool useDisplayNames)
override
145 if (!packageDataStore.LoadedAllPackageManifests())
149 packageDataStore.Load();
153 return GetContainerPathNoLock(packageId, useDisplayNames);
156 std::string MIKTEXTHISCALL GetContainerPathNoLock(
const std::string& packageId,
bool useDisplayNames);
159 void Lock(std::chrono::milliseconds timeout);
166 bool TryCollectFileDigests(
const MiKTeX::Util::PathName& prefix,
const std::vector<std::string>& files, FileDigestTable& fileDigests);
169 std::unique_ptr<MiKTeX::Core::LockFile> lockFile;
170 std::string remoteServiceBaseUrl;
171 std::unique_ptr<MiKTeX::Trace::TraceStream> trace_error;
172 std::unique_ptr<MiKTeX::Trace::TraceStream> trace_mpm;
173 std::unique_ptr<MiKTeX::Trace::TraceStream> trace_stopwatch;
174 std::shared_ptr<MiKTeX::Core::Session> session = MIKTEX_SESSION();
175 std::shared_ptr<WebSession> webSession = WebSession::Create(
this);
181 return webSession.get();
186 PackageDataStore packageDataStore;
190 PackageDataStore* GetPackageDataStore()
192 return &packageDataStore;
197 PackageRepositoryDataStore repositories;
201 static std::string proxyUser;
202 static std::string proxyPassword;
203#if defined(MIKTEX_WINDOWS) && USE_LOCAL_SERVER
204 static bool localServer;
208MPM_INTERNAL_END_NAMESPACE;
Instances of this struct represent MD5 values.
Definition: MD5.h:46
The package manager interface.
Definition: PackageManager.h:77
Definition: WebSession.h:34
Definition: PackageManagerImpl.h:49
bool TryGetRepositoryInfo(const std::string &url, MiKTeX::Packages::RepositoryInfo &repositoryInfo) override
Definition: PackageManagerImpl.h:113
void DownloadRepositoryList() override
Downloads the repositiry list from the server.
Definition: PackageManagerImpl.h:87
std::unique_ptr< class PackageInstaller > CreateInstaller(const MiKTeX::Packages::PackageInstaller::InitInfo &initInfo) override
MiKTeX::Packages::RepositoryReleaseState GetRepositoryReleaseState() override
Definition: PackageManagerImpl.h:77
void SetRepositoryReleaseState(MiKTeX::Packages::RepositoryReleaseState repositoryReleaseState) override
Definition: PackageManagerImpl.h:82
bool TryVerifyInstalledPackage(const std::string &packageId) override
Verifies an installed package.
Definition: PackageManagerImpl.h:128
MiKTeX::Packages::RepositoryInfo CheckPackageRepository(const std::string &url) override
Definition: PackageManagerImpl.h:118
std::vector< MiKTeX::Packages::RepositoryInfo > GetRepositories() override
Definition: PackageManagerImpl.h:92
std::string GetContainerPath(const std::string &packageId, bool useDisplayNames) override
Definition: PackageManagerImpl.h:143
MiKTeX::Packages::RepositoryInfo VerifyPackageRepository(const std::string &url) override
Definition: PackageManagerImpl.h:123
void CreateMpmFndb() override
Recreates the file name database of the package manager.
Definition: PackageManagerImpl.h:59
std::string PickRepositoryUrl() override
Definition: PackageManagerImpl.h:97
Definition: WebSession.h:40
Instances of this class can be used to store path names.
Definition: PathName.h:73
RepositoryReleaseState
Repository release state.
Definition: RepositoryInfo.h:174
Installation summary.
Definition: PackageManager.h:64
Package record.
Definition: PackageInfo.h:34
Initialization options.
Definition: PackageInstaller.h:373
Initialization options.
Definition: PackageManager.h:194
Package repository info struct.
Definition: RepositoryInfo.h:204