Skip to content

Commit c1e7f49

Browse files
committed
added support for favorite addons, addon id refactoring
1 parent d8abdc7 commit c1e7f49

File tree

97 files changed

+1077
-683
lines changed

Some content is hidden

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

97 files changed

+1077
-683
lines changed

Web.Blazor/Pages/Error.cshtml.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
using Microsoft.AspNetCore.Mvc;
1+
using System.Diagnostics;
2+
using Microsoft.AspNetCore.Mvc;
23
using Microsoft.AspNetCore.Mvc.RazorPages;
3-
using System.Diagnostics;
44

55
namespace Web.Blazor.Pages;
66

Web.Blazor/Providers/DatabaseAddonsRetriever.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
using Common.Common.Serializable.Downloadable;
1+
using System.Diagnostics;
2+
using Common.Common.Serializable.Downloadable;
23
using Common.Enums;
34
using Common.Serializable.Addon;
45
using CommunityToolkit.Diagnostics;
56
using Database.Server;
67
using Database.Server.DbEntities;
78
using Microsoft.EntityFrameworkCore;
8-
using System.Diagnostics;
99

1010
namespace Web.Blazor.Providers;
1111

src/Addons/Addons/BaseAddonEntity.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
using Common;
1+
using System.Collections.Immutable;
2+
using System.Text;
3+
using Common;
24
using Common.Enums;
35
using Common.Interfaces;
4-
using System.Collections.Immutable;
5-
using System.Text;
66

77
namespace Addons.Addons;
88

@@ -11,6 +11,9 @@ namespace Addons.Addons;
1111
/// </summary>
1212
public abstract class BaseAddonEntity : IAddon
1313
{
14+
/// <inheritdoc/>
15+
public required AddonId AddonId { get; init; }
16+
1417
/// <inheritdoc/>
1518
public required AddonTypeEnum Type { get; init; }
1619

@@ -20,15 +23,9 @@ public abstract class BaseAddonEntity : IAddon
2023
/// <inheritdoc/>
2124
public required ImmutableArray<FeatureEnum>? RequiredFeatures { get; init; }
2225

23-
/// <inheritdoc/>
24-
public required string Id { get; init; }
25-
2626
/// <inheritdoc/>
2727
public required string Title { get; init; }
2828

29-
/// <inheritdoc/>
30-
public required string? Version { get; init; }
31-
3229
/// <inheritdoc/>
3330
public required string? Author { get; init; }
3431

@@ -62,6 +59,9 @@ public abstract class BaseAddonEntity : IAddon
6259
/// <inheritdoc/>
6360
public required bool IsFolder { get; init; }
6461

62+
/// <inheritdoc/>
63+
public bool IsFavorite { get; set; }
64+
6565
/// <inheritdoc/>
6666
public required IReadOnlyDictionary<OSEnum, string>? Executables { get; init; }
6767

@@ -76,9 +76,9 @@ public string ToMarkdownString()
7676
{
7777
StringBuilder description = new($"## {Title}");
7878

79-
if (Version is not null)
79+
if (AddonId.Version is not null)
8080
{
81-
_ = description.Append($"{Environment.NewLine}{Environment.NewLine}#### v{Version}");
81+
_ = description.Append($"{Environment.NewLine}{Environment.NewLine}#### v{AddonId.Version}");
8282
}
8383

8484
if (Author is not null)

src/Addons/DI/ProvidersBindings.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@ public static void Load(ServiceCollection container)
99
{
1010
_ = container.AddSingleton<InstalledAddonsProviderFactory>();
1111
_ = container.AddSingleton<DownloadableAddonsProviderFactory>();
12+
_ = container.AddSingleton<OriginalCampaignsProvider>();
1213
}
1314
}

src/Addons/Helpers/AutoloadModsValidator.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public static class AutoloadModsValidator
1515
/// <param name="campaign">Campaign</param>
1616
/// <param name="mods">Autoload mods</param>
1717
/// <param name="features">Features supported by the port</param>
18-
public static bool ValidateAutoloadMod(AutoloadModEntity autoloadMod, IAddon campaign, IEnumerable<KeyValuePair<AddonVersion, IAddon>> mods, List<FeatureEnum> features)
18+
public static bool ValidateAutoloadMod(AutoloadModEntity autoloadMod, IAddon campaign, IEnumerable<KeyValuePair<AddonId, IAddon>> mods, List<FeatureEnum> features)
1919
{
2020
if (!autoloadMod.IsEnabled)
2121
{
@@ -61,16 +61,16 @@ public static bool ValidateAutoloadMod(AutoloadModEntity autoloadMod, IAddon cam
6161
private static bool CheckDependencies(
6262
AutoloadModEntity autoloadMod,
6363
IAddon campaign,
64-
IEnumerable<KeyValuePair<AddonVersion, IAddon>> mods)
64+
IEnumerable<KeyValuePair<AddonId, IAddon>> mods)
6565
{
6666
if (autoloadMod.DependentAddons is not null)
6767
{
6868
byte passedDependenciesCount = 0;
6969

7070
foreach (var dependentAddon in autoloadMod.DependentAddons)
7171
{
72-
if (dependentAddon.Key.Equals(campaign.Id, StringComparison.InvariantCultureIgnoreCase) &&
73-
(dependentAddon.Value is null || VersionComparer.Compare(campaign.Version, dependentAddon.Value)))
72+
if (dependentAddon.Key.Equals(campaign.AddonId.Id, StringComparison.InvariantCultureIgnoreCase) &&
73+
(dependentAddon.Value is null || VersionComparer.Compare(campaign.AddonId.Version, dependentAddon.Value)))
7474
{
7575
passedDependenciesCount++;
7676
continue;
@@ -108,7 +108,7 @@ private static bool CheckDependencies(
108108
private static bool CheckIncompatibles(
109109
AutoloadModEntity autoloadMod,
110110
IAddon campaign,
111-
IEnumerable<KeyValuePair<AddonVersion,
111+
IEnumerable<KeyValuePair<AddonId,
112112
IAddon>> mods
113113
)
114114
{
@@ -121,13 +121,13 @@ private static bool CheckIncompatibles(
121121
{
122122
//What a fucking mess...
123123
//if campaign id equals addon id
124-
if (campaign.Id.Equals(incompatibleAddon.Key, StringComparison.InvariantCultureIgnoreCase) &&
124+
if (campaign.AddonId.Id.Equals(incompatibleAddon.Key, StringComparison.InvariantCultureIgnoreCase) &&
125125
//AND either incompatible addon's version is null
126126
(incompatibleAddon.Value is null ||
127127
//OR campaign's version is null
128-
campaign.Version is null ||
128+
campaign.AddonId.Version is null ||
129129
//OR addon's and campaigns's versions match
130-
VersionComparer.Compare(campaign.Version, incompatibleAddon.Value)
130+
VersionComparer.Compare(campaign.AddonId.Version, incompatibleAddon.Value)
131131
))
132132
{
133133
//the addon is incompatible

src/Addons/Providers/DownloadableAddonsProvider.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Common;
1+
using System.Collections.Immutable;
2+
using Common;
23
using Common.Client.Helpers;
34
using Common.Client.Interfaces;
45
using Common.Client.Tools;
@@ -8,7 +9,6 @@
89
using Common.Interfaces;
910
using CommunityToolkit.Diagnostics;
1011
using Microsoft.Extensions.Logging;
11-
using System.Collections.Immutable;
1212

1313
namespace Addons.Providers;
1414

@@ -23,7 +23,7 @@ public sealed class DownloadableAddonsProvider : IDownloadableAddonsProvider
2323
private readonly InstalledAddonsProvider _installedAddonsProvider;
2424
private readonly ILogger _logger;
2525

26-
private Dictionary<AddonTypeEnum, Dictionary<AddonVersion, DownloadableAddonJsonModel>>? _cache;
26+
private Dictionary<AddonTypeEnum, Dictionary<AddonId, DownloadableAddonJsonModel>>? _cache;
2727

2828
private static readonly SemaphoreSlim _semaphore = new(1);
2929

src/Addons/Providers/GrpInfoProvider.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using Addons.Addons;
2+
using Common;
23
using Common.Enums;
34
using Common.Enums.Versions;
45
using Common.Interfaces;
@@ -39,16 +40,17 @@ public static List<IAddon> GetAddonsFromGrpInfo(List<string> foldersGrpInfos)
3940
continue;
4041
}
4142

43+
AddonId version = new(addon.Name.ToLower().Replace(" ", "_"), null);
44+
4245
DukeCampaignEntity camp = new()
4346
{
44-
Id = addon.Name.ToLower().Replace(" ", "_"),
47+
AddonId = version,
4548
Type = AddonTypeEnum.TC,
4649
SupportedGame = new(GameEnum.Duke3D, addon.DukeVersion),
4750
Title = addon.Name,
4851
GridImageHash = null,
4952
PreviewImageHash = null,
5053
Description = null,
51-
Version = null,
5254
Author = null,
5355
PathToFile = grp,
5456
DependentAddons = null,
@@ -61,7 +63,8 @@ public static List<IAddon> GetAddonsFromGrpInfo(List<string> foldersGrpInfos)
6163
RTS = null,
6264
RequiredFeatures = [FeatureEnum.EDuke32_CON],
6365
IsFolder = false,
64-
Executables = null
66+
Executables = null,
67+
IsFavorite = false
6568
};
6669

6770
newAddons.Add(camp);

0 commit comments

Comments
 (0)