MiKTeX 26.5-next
A scalable TeX distribution
Loading...
Searching...
No Matches
NoRemoteService.h
1/* NoRemoteService.h: -*- C++ -*-
2
3 Copyright (C) 2001-2019 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#if !defined(A5D4990A62304F209D9688619234D364)
23#define A5D4990A62304F209D9688619234D364
24
25#include <string>
26#include <utility>
27#include <vector>
28
29#include <miktex/Core/Session>
30
31#include <miktex/PackageManager/PackageManager>
32
33#include "RemoteService.h"
34#include "text.h"
35
36MPM_INTERNAL_BEGIN_NAMESPACE;
37
38class NoRemoteService :
39 public RemoteService
40{
41private:
42 std::vector<MiKTeX::Packages::RepositoryInfo> repositories;
43
44public:
45 NoRemoteService(const std::vector<std::string>& wellKnownBaseUrls)
46 {
47 for (const std::string& url : wellKnownBaseUrls)
48 {
50 rep.url = url + "systems/win32/miktex/tm/packages/";
54 repositories.push_back(rep);
55 rep.url += "next/";
57 repositories.push_back(rep);
58 }
59 }
60
61public:
62 std::vector<MiKTeX::Packages::RepositoryInfo> GetRepositories(MiKTeX::Packages::RepositoryReleaseState repositoryReleaseState) override
63 {
64 std::vector<MiKTeX::Packages::RepositoryInfo> result;
65 for (const MiKTeX::Packages::RepositoryInfo& rep : repositories)
66 {
67 if (rep.releaseState == repositoryReleaseState)
68 {
69 result.push_back(rep);
70 }
71 }
72 return result;
73 }
74
75public:
76 std::string PickRepositoryUrl(MiKTeX::Packages::RepositoryReleaseState repositoryReleaseState) override
77 {
78 for (const RepositoryInfo& rep : repositories)
79 {
80 if (rep.releaseState == repositoryReleaseState)
81 {
82 return rep.url;
83 }
84 }
85 MIKTEX_FATAL_ERROR(T_("No package repository available."));
86 }
87
88public:
89 std::pair<bool, MiKTeX::Packages::RepositoryInfo> TryGetRepositoryInfo(const std::string& repositoryUrl) override
90 {
91 for (const MiKTeX::Packages::RepositoryInfo& rep : repositories)
92 {
93 if (rep.url == repositoryUrl)
94 {
95 return std::make_pair(true, rep);
96 }
97 }
98 return std::make_pair(false, MiKTeX::Packages::RepositoryInfo());
99 }
100
101public:
102 MiKTeX::Packages::RepositoryInfo Verify(const std::string& repositoryUrl) override
103 {
104 std::pair<bool, MiKTeX::Packages::RepositoryInfo> p = TryGetRepositoryInfo(repositoryUrl);
105 if (!p.first)
106 {
107 MIKTEX_FATAL_ERROR_2(T_("The remote package repository is not registered. You have to choose another repository."), "url", repositoryUrl);
108 }
109 return p.second;
110 }
111};
112
113MPM_INTERNAL_END_NAMESPACE;
114
115#endif
Definition RemoteService.h:35
@ Online
Repository is known to be online.
Definition RepositoryInfo.h:117
@ Complete
Complete package set.
Definition RepositoryInfo.h:49
RepositoryReleaseState
Repository release state.
Definition RepositoryInfo.h:174
@ Next
Experimental channel.
Definition RepositoryInfo.h:179
@ Stable
Stable channel.
Definition RepositoryInfo.h:177
Package repository info struct.
Definition RepositoryInfo.h:204
std::string url
URL of (or path to) the repository.
Definition RepositoryInfo.h:208
RepositoryReleaseState releaseState
Repository release State.
Definition RepositoryInfo.h:230
RepositoryStatus status
Status of the repository.
Definition RepositoryInfo.h:222
PackageLevel packageLevel
Package level.
Definition RepositoryInfo.h:216