Skip to content

Commit dd37ee2

Browse files
committed
Merge #4398 Exception handling revamp, parallel multi-host inflation
2 parents c3038b5 + 40bd7c7 commit dd37ee2

104 files changed

Lines changed: 1047 additions & 2252 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

AutoUpdate/CKAN-autoupdate.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<Nullable>enable</Nullable>
2121
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
2222
<ApplicationIcon>..\assets\ckan.ico</ApplicationIcon>
23-
<TargetFrameworks>net48;net8.0-windows</TargetFrameworks>
23+
<TargetFrameworks>net481;net8.0-windows</TargetFrameworks>
2424
<UseWindowsForms Condition=" '$(TargetFramework)' == 'net8.0-windows' ">true</UseWindowsForms>
2525
<EnableWindowsTargeting>true</EnableWindowsTargeting>
2626
<FileAlignment>512</FileAlignment>
@@ -29,7 +29,7 @@
2929
<NoWarn>IDE1006</NoWarn>
3030
<CoreCompileDependsOn>PrepareResources;$(CompileDependsOn)</CoreCompileDependsOn>
3131
</PropertyGroup>
32-
<ItemGroup Condition=" '$(TargetFramework)' == 'net48' ">
32+
<ItemGroup Condition=" '$(TargetFramework)' == 'net481' ">
3333
<Reference Include="System" />
3434
<Reference Include="System.Core" />
3535
<Reference Include="System.Windows.Forms" />

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ All notable changes to this project will be documented in this file.
3333
- [Multiple] Migrate metadata tester from Mono to dotnet (#4390 by: HebaruSan)
3434
- [Multiple] Writethrough when saving files, add Netkan tests (#4392 by: HebaruSan)
3535
- [Core] More tests for Core (#4396 by: HebaruSan)
36+
- [Multiple] Exception handling revamp, parallel multi-host inflation (#4398 by: HebaruSan)
3637

3738
## v1.36.0 (Quasar)
3839

CKAN.schema

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,16 @@
260260
"description" : "Purchase DLC on Steam here",
261261
"type" : "string",
262262
"format" : "uri"
263+
},
264+
"gogstore": {
265+
"description" : "Purchase DLC on GOG here",
266+
"type" : "string",
267+
"format" : "uri"
268+
},
269+
"epicstore": {
270+
"description" : "Purchase DLC on Epic Games Store here",
271+
"type" : "string",
272+
"format" : "uri"
263273
}
264274
}
265275
},

Cmdline/Action/Install.cs

Lines changed: 18 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010
using CKAN.Configuration;
1111
using CKAN.IO;
12-
using CKAN.Versioning;
1312

1413
namespace CKAN.CmdLine
1514
{
@@ -134,33 +133,6 @@ public int RunCommand(CKAN.GameInstance instance, object raw_options)
134133
user.RaiseMessage("");
135134
done = true;
136135
}
137-
catch (DependenciesNotSatisfiedKraken ex)
138-
{
139-
user.RaiseError("{0}", ex.Message);
140-
user.RaiseMessage(Properties.Resources.InstallTryAgain);
141-
return Exit.ERROR;
142-
}
143-
catch (ModuleNotFoundKraken ex)
144-
{
145-
if (ex.version == null)
146-
{
147-
user.RaiseError(Properties.Resources.InstallUnversionedDependencyNotSatisfied,
148-
ex.module, instance.game.ShortName);
149-
}
150-
else
151-
{
152-
user.RaiseError(Properties.Resources.InstallVersionedDependencyNotSatisfied,
153-
ex.module, ex.version, instance.game.ShortName);
154-
}
155-
user.RaiseMessage(Properties.Resources.InstallTryAgain);
156-
return Exit.ERROR;
157-
}
158-
catch (BadMetadataKraken ex)
159-
{
160-
user.RaiseError(Properties.Resources.InstallBadMetadata,
161-
ex.module?.ToString() ?? "", ex.Message);
162-
return Exit.ERROR;
163-
}
164136
catch (TooManyModsProvideKraken ex)
165137
{
166138
// Request the user selects one of the mods
@@ -169,9 +141,9 @@ public int RunCommand(CKAN.GameInstance instance, object raw_options)
169141
{
170142
result = user.RaiseSelectionDialog(
171143
ex.Message,
172-
ex.modules
173-
.Select(m => string.Format("{0} ({1})", m.identifier, m.name))
174-
.ToArray());
144+
ex.modules.Select(m => string.Format("{0} ({1})",
145+
m.identifier, m.name))
146+
.ToArray());
175147
}
176148
catch (Kraken e)
177149
{
@@ -189,72 +161,35 @@ public int RunCommand(CKAN.GameInstance instance, object raw_options)
189161
modules.Add(ex.modules[result]);
190162
// DON'T return so we can loop around and try again
191163
}
192-
catch (FileExistsKraken ex)
193-
{
194-
if (ex.owningModule != null)
195-
{
196-
user.RaiseError(Properties.Resources.InstallFileConflictOwned,
197-
ex.filename, ex.installingModule?.ToString() ?? "", ex.owningModule,
198-
Meta.GetVersion(VersionFormat.Full));
199-
}
200-
else
201-
{
202-
user.RaiseError(Properties.Resources.InstallFileConflictUnowned,
203-
ex.installingModule?.ToString() ?? "", ex.filename);
204-
}
205-
206-
user.RaiseMessage(Properties.Resources.InstallGamedataReturned, instance.game.PrimaryModDirectoryRelative);
207-
return Exit.ERROR;
208-
}
209-
catch (InconsistentKraken ex)
210-
{
211-
user.RaiseError("{0}", ex.Message);
212-
user.RaiseMessage(Properties.Resources.InstallCancelled);
213-
return Exit.ERROR;
214-
}
215164
catch (CancelledActionKraken k)
216165
{
217-
user.RaiseError(Properties.Resources.InstallAborted, k.Message);
218-
return Exit.ERROR;
219-
}
220-
catch (MissingCertificateKraken kraken)
221-
{
222-
// Another very pretty kraken.
223-
user.RaiseError("{0}", kraken.ToString());
166+
user.RaiseError(Properties.Resources.InstallAborted,
167+
k.Message);
224168
return Exit.ERROR;
225169
}
226170
catch (RequestThrottledKraken kraken)
227171
{
228172
user.RaiseError("{0}", kraken.Message);
229-
user.RaiseMessage(Properties.Resources.InstallTryAuthToken, kraken.infoUrl);
173+
user.RaiseMessage(Properties.Resources.InstallTryAuthToken,
174+
kraken.infoUrl);
230175
return Exit.ERROR;
231176
}
232-
catch (DownloadErrorsKraken)
233-
{
234-
user.RaiseError(Properties.Resources.InstallDownloadFailed);
235-
return Exit.ERROR;
236-
}
237-
catch (ModuleDownloadErrorsKraken kraken)
238-
{
239-
user.RaiseError("{0}", kraken.ToString());
240-
return Exit.ERROR;
241-
}
242-
catch (DirectoryNotFoundKraken kraken)
177+
catch (Kraken kraken)
243178
{
179+
// Show nice message for mod problems
244180
user.RaiseError("{0}", kraken.Message);
181+
user.RaiseMessage("{0}", kraken switch
182+
{
183+
DependenciesNotSatisfiedKraken or ModuleNotFoundKraken => Properties.Resources.InstallTryAgain,
184+
_ => Properties.Resources.InstallCancelled,
185+
});
245186
return Exit.ERROR;
246187
}
247-
catch (ModuleIsDLCKraken kraken)
188+
catch (Exception exc)
248189
{
249-
user.RaiseError(Properties.Resources.InstallDLC, kraken.module.name);
250-
var res = kraken?.module?.resources;
251-
var storePagesMsg = new Uri?[] { res?.store, res?.steamstore }
252-
.OfType<Uri>()
253-
.Aggregate("", (a, b) => $"{a}\r\n- {b}");
254-
if (!string.IsNullOrEmpty(storePagesMsg))
255-
{
256-
user.RaiseMessage(Properties.Resources.InstallDLCStorePage, storePagesMsg);
257-
}
190+
// Show stack trace for code problems
191+
user.RaiseError("{0}", exc.ToString());
192+
user.RaiseMessage(Properties.Resources.InstallCancelled);
258193
return Exit.ERROR;
259194
}
260195
}

Cmdline/Action/Remove.cs

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -89,27 +89,19 @@ public int RunCommand(CKAN.GameInstance instance, object raw_options)
8989
installer.UninstallList(options.modules, ref possibleConfigOnlyDirs, regMgr);
9090
user.RaiseMessage("");
9191
}
92-
catch (ModNotInstalledKraken kraken)
92+
catch (CancelledActionKraken k)
9393
{
94-
user.RaiseMessage(Properties.Resources.RemoveNotInstalled, kraken.mod);
95-
return Exit.BADOPT;
94+
user.RaiseMessage(Properties.Resources.RemoveCancelled, k.Message);
95+
return Exit.ERROR;
9696
}
97-
catch (ModuleIsDLCKraken kraken)
97+
catch (Kraken kraken)
9898
{
99-
user.RaiseMessage(Properties.Resources.RemoveDLC, kraken.module.name);
100-
var res = kraken?.module?.resources;
101-
var storePagesMsg = new Uri?[] { res?.store, res?.steamstore }
102-
.OfType<Uri>()
103-
.Aggregate("", (a, b) => $"{a}\r\n- {b}");
104-
if (!string.IsNullOrEmpty(storePagesMsg))
105-
{
106-
user.RaiseMessage(Properties.Resources.RemoveDLCStorePage, storePagesMsg);
107-
}
108-
return Exit.BADOPT;
99+
user.RaiseMessage("{0}", kraken.Message);
100+
return Exit.ERROR;
109101
}
110-
catch (CancelledActionKraken k)
102+
catch (Exception exc)
111103
{
112-
user.RaiseMessage(Properties.Resources.RemoveCancelled, k.Message);
104+
user.RaiseMessage("{0}", exc.ToString());
113105
return Exit.ERROR;
114106
}
115107
}

Cmdline/Action/Replace.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ public int RunCommand(CKAN.GameInstance instance, object raw_options)
136136
}
137137
catch (ModuleNotFoundKraken kraken)
138138
{
139-
user.RaiseMessage(Properties.Resources.ReplaceModuleNotFound, kraken.module);
139+
user.RaiseMessage(Properties.Resources.ReplaceModuleNotFound, kraken.identifier);
140140
}
141141
}
142142
}

Cmdline/Action/Show.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,10 @@ private int ShowMod(CkanModule module, ShowOptions opts)
288288
module.resources.store);
289289
RaiseResource(Properties.Resources.ShowSteamStore,
290290
module.resources.steamstore);
291+
RaiseResource(Properties.Resources.ShowGogStore,
292+
module.resources.gogstore);
293+
RaiseResource(Properties.Resources.ShowEpicStore,
294+
module.resources.epicstore);
291295
RaiseResource(Properties.Resources.ShowVersionFile,
292296
module.resources.remoteAvc);
293297
RaiseResource(Properties.Resources.ShowSpaceWarpInfo,

Cmdline/Action/Update.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,7 @@ public int RunCommand(object raw_options)
9696
}
9797
catch (MissingCertificateKraken kraken)
9898
{
99-
// Handling the kraken means we have prettier output.
100-
user.RaiseMessage("{0}", kraken.ToString());
99+
user.RaiseMessage("{0}", kraken.Message);
101100
return Exit.ERROR;
102101
}
103102

Cmdline/Action/Upgrade.cs

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,10 @@ public int RunCommand(CKAN.GameInstance instance, object raw_options)
8181
try
8282
{
8383
var upd = new AutoUpdate();
84-
var update = upd.GetUpdate(config.DevBuilds ?? false, options.NetUserAgent);
85-
var latestVersion = update.Version;
86-
var currentVersion = new ModuleVersion(Meta.GetVersion());
87-
88-
if (!currentVersion.Equals(latestVersion))
84+
var update = upd.GetUpdate(config.DevBuilds ?? false,
85+
options.NetUserAgent);
86+
if (update.Version is CkanModuleVersion latestVersion
87+
&& !latestVersion.SameClientVersion(Meta.ReleaseVersion))
8988
{
9089
user.RaiseMessage(Properties.Resources.UpgradeNewCKANAvailable,
9190
latestVersion?.ToString() ?? "");
@@ -110,7 +109,7 @@ public int RunCommand(CKAN.GameInstance instance, object raw_options)
110109
}
111110
catch (Exception exc)
112111
{
113-
user.RaiseError("Upgrade failed: {0}", exc.Message);
112+
user.RaiseError(Properties.Resources.UpgradeFailed, exc.Message);
114113
return Exit.ERROR;
115114
}
116115
}
@@ -151,27 +150,14 @@ public int RunCommand(CKAN.GameInstance instance, object raw_options)
151150
user.RaiseMessage(Properties.Resources.UpgradeAborted, k.Message);
152151
return Exit.ERROR;
153152
}
154-
catch (ModuleNotFoundKraken kraken)
155-
{
156-
user.RaiseMessage(Properties.Resources.UpgradeNotFound, $"{kraken.module} {kraken.version}");
157-
return Exit.ERROR;
158-
}
159-
catch (InconsistentKraken kraken)
153+
catch (Kraken kraken)
160154
{
161-
user.RaiseMessage("{0}", kraken.ToString());
155+
user.RaiseMessage("{0}", kraken.Message);
162156
return Exit.ERROR;
163157
}
164-
catch (ModuleIsDLCKraken kraken)
158+
catch (Exception exc)
165159
{
166-
user.RaiseMessage(Properties.Resources.UpgradeDLC, kraken.module.name);
167-
var res = kraken?.module?.resources;
168-
var storePagesMsg = new Uri?[] { res?.store, res?.steamstore }
169-
.OfType<Uri>()
170-
.Aggregate("", (a, b) => $"{a}\r\n- {b}");
171-
if (!string.IsNullOrEmpty(storePagesMsg))
172-
{
173-
user.RaiseMessage(Properties.Resources.UpgradeDLCStorePage, storePagesMsg);
174-
}
160+
user.RaiseMessage("{0}", exc.ToString());
175161
return Exit.ERROR;
176162
}
177163

Cmdline/CKAN-cmdline.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
2222
<StartupObject>CKAN.CmdLine.MainClass</StartupObject>
2323
<ApplicationIcon>..\assets\ckan.ico</ApplicationIcon>
24-
<TargetFrameworks>net48;net8.0;net8.0-windows</TargetFrameworks>
24+
<TargetFrameworks>net481;net8.0;net8.0-windows</TargetFrameworks>
2525
<BaseTargetFramework>$(TargetFramework.Replace("-windows", ""))</BaseTargetFramework>
2626
<FileAlignment>512</FileAlignment>
2727
<ErrorReport>prompt</ErrorReport>
@@ -37,7 +37,7 @@
3737
<PackageReference Include="ReadLine" Version="1.2.0" />
3838
<PackageReference Include="DotNet.Glob" Version="3.1.3" />
3939
</ItemGroup>
40-
<ItemGroup Condition=" '$(TargetFramework)' == 'net48' ">
40+
<ItemGroup Condition=" '$(TargetFramework)' == 'net481' ">
4141
<Reference Include="System" />
4242
<Reference Include="System.Transactions" />
4343
</ItemGroup>

0 commit comments

Comments
 (0)