MiKTeX 23.10-next
A scalable TeX distribution
Loading...
Searching...
No Matches
RepositoryInfo.h
1/* miktex/PackageManager/RepositoryInfo.h: -*- C++ -*-
2
3 Copyright (C) 2001-2022 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(AE9D0FE238A0478AB880D039796623E3)
25#define AE9D0FE238A0478AB880D039796623E3
26
27#include "config.h"
28
29#include <ctime>
30
31#include <ostream>
32#include <string>
33
34#include "definitions.h"
35
36MIKTEX_PACKAGES_BEGIN_NAMESPACE;
37
39enum class PackageLevel
40{
41 None = 0,
43 Essential = 10,
45 Basic = 1000,
47 Advanced = 100000,
49 Complete = 1000000000,
50};
51
52inline std::string PackageLevelToString(PackageLevel packageLevel)
53{
54 switch (packageLevel)
55 {
56 case PackageLevel::None:
57 return "none";
58 case PackageLevel::Essential:
59 return "essential";
60 case PackageLevel::Basic:
61 return "basic";
62 case PackageLevel::Advanced:
63 return "advanced";
64 case PackageLevel::Complete:
65 return "complete";
66 default:
67 return "?";
68 }
69}
70
71inline std::ostream& operator<<(std::ostream& os, const PackageLevel packageLevel)
72{
73 return os << PackageLevelToString(packageLevel);
74}
75
78{
79 Unknown,
80 MiKTeXDirect,
82 Local,
84 Remote,
85 MiKTeXInstallation
86};
87
88inline std::string RepositoryTypeToString(RepositoryType repositoryType)
89{
90 switch (repositoryType)
91 {
92 case RepositoryType::Unknown:
93 return "unknown";
94 case RepositoryType::MiKTeXDirect:
95 return "miktexdirect";
96 case RepositoryType::Local:
97 return "local";
98 case RepositoryType::Remote:
99 return "remote";
100 case RepositoryType::MiKTeXInstallation:
101 return "miktexinstallation";
102 default:
103 return "?";
104 }
105}
106
107inline std::ostream& operator<<(std::ostream& os, const RepositoryType repositoryType)
108{
109 return os << RepositoryTypeToString(repositoryType);
110}
111
114{
115 Unknown,
117 Online,
119 Offline,
120};
121
122inline std::string RepositoryStatusToString(RepositoryStatus repositoryStatus)
123{
124 switch (repositoryStatus)
125 {
126 case RepositoryStatus::Unknown:
127 return "unknown";
128 case RepositoryStatus::Online:
129 return "online";
130 case RepositoryStatus::Offline:
131 return "offline";
132 default:
133 return "?";
134 }
135}
136
137inline std::ostream& operator<<(std::ostream& os, const RepositoryStatus repositoryStatus)
138{
139 return os << RepositoryStatusToString(repositoryStatus);
140}
141
144{
145 Unknown,
147 Intact,
149 Corrupted,
150};
151
152inline std::string RepositoryIntegrityToString(RepositoryIntegrity repositoryIntegrity)
153{
154 switch (repositoryIntegrity)
155 {
156 case RepositoryIntegrity::Unknown:
157 return "unknown";
158 case RepositoryIntegrity::Intact:
159 return "intact";
160 case RepositoryIntegrity::Corrupted:
161 return "corrupted";
162 default:
163 return "?";
164 }
165}
166
167inline std::ostream& operator<<(std::ostream& os, const RepositoryIntegrity repositoryIntegrity)
168{
169 return os << RepositoryIntegrityToString(repositoryIntegrity);
170}
171
174{
175 Unknown,
177 Stable,
179 Next,
180};
181
182inline std::string RepositoryReleaseStateToString(RepositoryReleaseState repositoryReleaseState)
183{
184 switch (repositoryReleaseState)
185 {
186 case RepositoryReleaseState::Unknown:
187 return "unknown";
188 case RepositoryReleaseState::Stable:
189 return "stable";
190 case RepositoryReleaseState::Next:
191 return "next";
192 default:
193 return "?";
194 }
195}
196
197inline std::ostream& operator<<(std::ostream& os, const RepositoryReleaseState repositoryReleaseState)
198{
199 return os << RepositoryReleaseStateToString(repositoryReleaseState);
200}
201
204{
208 std::string url;
210 std::string description;
212 std::string country;
214 std::string town;
216 PackageLevel packageLevel = PackageLevel::None;
218 unsigned int version = 0;
220 std::time_t timeDate = InvalidTimeT;
222 RepositoryStatus status = RepositoryStatus::Unknown;
224 RepositoryIntegrity integrity = RepositoryIntegrity::Unknown;
226 unsigned delay = 0;
228 unsigned relativeDelay = 0;
230 RepositoryReleaseState releaseState = RepositoryReleaseState::Unknown;
232 unsigned ranking = 0;
234 double dataTransferRate = 0.0;
236 std::time_t lastCheckTime = InvalidTimeT;
238 std::time_t lastVisitTime = InvalidTimeT;
239};
240
241inline bool operator==(const RepositoryInfo& lhs, const RepositoryInfo& rhs)
242{
243 return lhs.type == rhs.type && lhs.url == rhs.url;
244}
245
246inline bool operator!=(const RepositoryInfo& lhs, const RepositoryInfo& rhs)
247{
248 return !(lhs == rhs);
249}
250
251MIKTEX_PACKAGES_END_NAMESPACE;
252
253#endif
RepositoryStatus
Repository status.
Definition: RepositoryInfo.h:114
@ Online
Repository is known to be online.
@ Offline
Remote repository is known to be offline.
RepositoryIntegrity
Repository integrrity.
Definition: RepositoryInfo.h:144
@ Corrupted
The repository is known to be corrupted.
@ Intact
The repository is known to be intact.
constexpr std::time_t InvalidTimeT
An invalid timestamp.
Definition: definitions.h:30
PackageLevel
Package level.
Definition: RepositoryInfo.h:40
@ Basic
Basic package set.
@ Advanced
Advanced package set.
@ Complete
Complete package set.
@ Essential
Essential package set.
RepositoryReleaseState
Repository release state.
Definition: RepositoryInfo.h:174
RepositoryType
Repository type.
Definition: RepositoryInfo.h:78
@ Local
Local (file system) directory.
@ Remote
Remote (Internet) directory.
Package repository info struct.
Definition: RepositoryInfo.h:204
std::string url
URL of (or path to) the repository.
Definition: RepositoryInfo.h:208
std::string description
One-line description.
Definition: RepositoryInfo.h:210
std::string country
Country where the repository is resident.
Definition: RepositoryInfo.h:212
std::string town
Town where the repository is resident.
Definition: RepositoryInfo.h:214
RepositoryType type
Type of repository.
Definition: RepositoryInfo.h:206