1 /*
2 * Copyright 2024, Andrew Lindesay <apl@lindesay.co.nz>.
3 * All rights reserved. Distributed under the terms of the MIT License.
4 */
5
6 #include "PackageUtils.h"
7
8 #include "Logger.h"
9
10 /*! This method will obtain the title from the package if this is possible or
11 otherwise it will return the name of the package.
12 */
13
14 /*static*/ void
TitleOrName(const PackageInfoRef & package,BString & title)15 PackageUtils::TitleOrName(const PackageInfoRef& package, BString& title)
16 {
17 PackageUtils::Title(package, title);
18 if (title.IsEmpty() && package.IsSet())
19 title.SetTo(package->Name());
20 }
21
22
23 /*static*/ void
Title(const PackageInfoRef & package,BString & title)24 PackageUtils::Title(const PackageInfoRef& package, BString& title)
25 {
26 if (package.IsSet()) {
27 PackageLocalizedTextRef localizedText = package->LocalizedText();
28
29 if (localizedText.IsSet())
30 title.SetTo(localizedText->Title());
31 else
32 title.SetTo("");
33 } else {
34 title.SetTo("");
35 }
36 }
37
38
39 /*static*/ void
Summary(const PackageInfoRef & package,BString & summary)40 PackageUtils::Summary(const PackageInfoRef& package, BString& summary)
41 {
42 if (package.IsSet()) {
43 PackageLocalizedTextRef localizedText = package->LocalizedText();
44
45 if (localizedText.IsSet())
46 summary.SetTo(localizedText->Summary());
47 else
48 summary.SetTo("");
49 } else {
50 summary.SetTo("");
51 }
52 }
53
54
55 /*static*/ bool
IsNativeDesktop(const PackageInfoRef & package)56 PackageUtils::IsNativeDesktop(const PackageInfoRef& package)
57 {
58 if (package.IsSet()) {
59 PackageClassificationInfoRef classificationInfo = package->PackageClassificationInfo();
60
61 if (classificationInfo.IsSet())
62 return classificationInfo->IsNativeDesktop();
63 }
64
65 return false;
66 }
67
68
69 /*static*/ PackageLocalizedTextRef
NewLocalizedText(const PackageInfoRef & package)70 PackageUtils::NewLocalizedText(const PackageInfoRef& package)
71 {
72 if (!package.IsSet())
73 HDFATAL("it is not possible to get the `LocalizedText` from a not-existing package");
74
75 PackageLocalizedTextRef localizedText = package->LocalizedText();
76
77 if (localizedText.IsSet())
78 return PackageLocalizedTextRef(new PackageLocalizedText(*(localizedText.Get())), true);
79
80 return PackageLocalizedTextRef(new PackageLocalizedText(), true);
81 }
82
83
84 /*static*/ PackageState
State(const PackageInfoRef & package)85 PackageUtils::State(const PackageInfoRef& package)
86 {
87 if (package.IsSet()) {
88 PackageLocalInfoRef localInfo = package->LocalInfo();
89
90 if (localInfo.IsSet())
91 return localInfo->State();
92 }
93
94 return NONE;
95 }
96
97
98 /*static*/ off_t
Size(const PackageInfoRef & package)99 PackageUtils::Size(const PackageInfoRef& package)
100 {
101 if (package.IsSet()) {
102 PackageLocalInfoRef localInfo = package->LocalInfo();
103
104 if (localInfo.IsSet())
105 return localInfo->Size();
106 }
107
108 return 0;
109 }
110
111
112 /*static*/ bool
Viewed(const PackageInfoRef & package)113 PackageUtils::Viewed(const PackageInfoRef& package)
114 {
115 if (package.IsSet()) {
116 PackageLocalInfoRef localInfo = package->LocalInfo();
117
118 if (localInfo.IsSet())
119 return localInfo->Viewed();
120 }
121
122 return false;
123 }
124
125
126 /*static*/ bool
IsActivatedOrLocalFile(const PackageInfoRef & package)127 PackageUtils::IsActivatedOrLocalFile(const PackageInfoRef& package)
128 {
129 if (package.IsSet()) {
130 PackageLocalInfoRef localInfo = package->LocalInfo();
131
132 if (localInfo.IsSet())
133 return localInfo->IsLocalFile() || localInfo->State() == ACTIVATED;
134 }
135
136 return false;
137 }
138
139
140 /*static*/ float
DownloadProgress(const PackageInfoRef & package)141 PackageUtils::DownloadProgress(const PackageInfoRef& package)
142 {
143 if (package.IsSet()) {
144 PackageLocalInfoRef localInfo = package->LocalInfo();
145
146 if (localInfo.IsSet())
147 return localInfo->DownloadProgress();
148 }
149
150 return 0.0f;
151 }
152
153
154 /*static*/ int32
Flags(const PackageInfoRef & package)155 PackageUtils::Flags(const PackageInfoRef& package)
156 {
157 if (package.IsSet()) {
158 PackageLocalInfoRef localInfo = package->LocalInfo();
159
160 if (localInfo.IsSet())
161 return localInfo->Flags();
162 }
163
164 return false;
165 }
166
167
168 /*static*/ PackageLocalInfoRef
NewLocalInfo(const PackageInfoRef & package)169 PackageUtils::NewLocalInfo(const PackageInfoRef& package)
170 {
171 if (!package.IsSet())
172 HDFATAL("it is not possible to get the `LocalInfo` from a not-existing package");
173
174 PackageLocalInfoRef localInfo = package->LocalInfo();
175
176 if (localInfo.IsSet())
177 return PackageLocalInfoRef(new PackageLocalInfo(*(localInfo.Get())), true);
178
179 return PackageLocalInfoRef(new PackageLocalInfo(), true);
180 }
181
182
183 /*static*/ const char*
StateToString(PackageState state)184 PackageUtils::StateToString(PackageState state)
185 {
186 switch (state) {
187 case NONE:
188 return "NONE";
189 case INSTALLED:
190 return "INSTALLED";
191 case DOWNLOADING:
192 return "DOWNLOADING";
193 case ACTIVATED:
194 return "ACTIVATED";
195 case UNINSTALLED:
196 return "UNINSTALLED";
197 case PENDING:
198 return "PENDING";
199 default:
200 debugger("unknown package state");
201 return "???";
202 }
203 }
204