< Summary

Information
Class: Chronicis.Client.Components.Settings.WorldResourceProviders
Assembly: Chronicis.Client
File(s): /home/runner/work/chronicis/chronicis/src/Chronicis.Client/Components/Settings/WorldResourceProviders.razor.cs
Line coverage
100%
Covered lines: 1
Uncovered lines: 0
Coverable lines: 1
Total lines: 175
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor()100%11100%

File(s)

/home/runner/work/chronicis/chronicis/src/Chronicis.Client/Components/Settings/WorldResourceProviders.razor.cs

#LineLine coverage
 1using Chronicis.Client.Services;
 2using Chronicis.Shared.DTOs;
 3using Microsoft.AspNetCore.Components;
 4using MudBlazor;
 5
 6namespace Chronicis.Client.Components.Settings;
 7
 8public partial class WorldResourceProviders : ComponentBase
 9{
 10    [Inject] private IResourceProviderApiService ResourceProviderService { get; set; } = default!;
 11    [Inject] private ISnackbar Snackbar { get; set; } = default!;
 12    [Inject] private ILogger<WorldResourceProviders> Logger { get; set; } = default!;
 13
 14    [Parameter] public Guid WorldId { get; set; }
 15
 16    private List<WorldResourceProviderDto>? _providers;
 1317    private bool _loading = true;
 18    private bool _updating = false;
 19    private bool _error = false;
 20
 21    protected override async Task OnParametersSetAsync()
 22    {
 23        await LoadProviders();
 24    }
 25
 26    private async Task LoadProviders()
 27    {
 28        _loading = true;
 29        _error = false;
 30        StateHasChanged();
 31
 32        try
 33        {
 34            _providers = await ResourceProviderService.GetWorldProvidersAsync(WorldId);
 35
 36            if (_providers == null)
 37            {
 38                _error = true;
 39                Logger.LogWarning("Failed to load providers for world {WorldId}", WorldId);
 40            }
 41            else
 42            {
 43                // Sort providers alphabetically by name
 44                _providers = _providers.OrderBy(p => p.Provider.Name).ToList();
 45
 46                // Ensure lookup keys are always initialized with effective defaults.
 47                foreach (var provider in _providers)
 48                {
 49                    if (string.IsNullOrWhiteSpace(provider.LookupKey))
 50                    {
 51                        provider.LookupKey = provider.Provider.Code;
 52                    }
 53                }
 54            }
 55        }
 56        catch (Exception ex)
 57        {
 58            _error = true;
 59            Logger.LogError(ex, "Error loading providers for world {WorldId}", WorldId);
 60        }
 61        finally
 62        {
 63            _loading = false;
 64            StateHasChanged();
 65        }
 66    }
 67
 68    private async Task OnToggleProvider(string providerCode, bool enabled)
 69    {
 70        _updating = true;
 71        StateHasChanged();
 72
 73        try
 74        {
 75            var success = await ResourceProviderService.ToggleProviderAsync(WorldId, providerCode, enabled);
 76
 77            if (success)
 78            {
 79                // Update local state
 80                var provider = _providers?.FirstOrDefault(p => p.Provider.Code == providerCode);
 81                if (provider != null)
 82                {
 83                    provider.IsEnabled = enabled;
 84                }
 85
 86                Snackbar.Add(
 87                    $"{providerCode} {(enabled ? "enabled" : "disabled")} successfully",
 88                    Severity.Success);
 89
 90                Logger.LogDebug(
 91                    "Provider {ProviderCode} {Action} for world {WorldId}",
 92                    providerCode,
 93                    enabled ? "enabled" : "disabled",
 94                    WorldId);
 95            }
 96            else
 97            {
 98                Snackbar.Add(
 99                    $"Failed to {(enabled ? "enable" : "disable")} {providerCode}",
 100                    Severity.Error);
 101
 102                Logger.LogWarning(
 103                    "Failed to toggle provider {ProviderCode} for world {WorldId}",
 104                    providerCode,
 105                    WorldId);
 106            }
 107        }
 108        catch (Exception ex)
 109        {
 110            Snackbar.Add(
 111                $"Error updating provider: {ex.Message}",
 112                Severity.Error);
 113
 114            Logger.LogError(
 115                ex,
 116                "Error toggling provider {ProviderCode} for world {WorldId}",
 117                providerCode,
 118                WorldId);
 119        }
 120        finally
 121        {
 122            _updating = false;
 123            StateHasChanged();
 124        }
 125    }
 126
 127    private async Task OnSaveLookupKey(WorldResourceProviderDto provider)
 128    {
 129        if (provider == null)
 130        {
 131            return;
 132        }
 133
 134        _updating = true;
 135        StateHasChanged();
 136
 137        try
 138        {
 139            var requestedLookupKey = provider.LookupKey ?? string.Empty;
 140            var success = await ResourceProviderService.ToggleProviderAsync(
 141                WorldId,
 142                provider.Provider.Code,
 143                provider.IsEnabled,
 144                requestedLookupKey);
 145
 146            if (success)
 147            {
 148                var normalized = requestedLookupKey.Trim().ToLowerInvariant();
 149                provider.LookupKey = string.IsNullOrWhiteSpace(normalized)
 150                    ? provider.Provider.Code
 151                    : normalized;
 152
 153                Snackbar.Add($"Lookup key saved: {provider.LookupKey}", Severity.Success);
 154            }
 155            else
 156            {
 157                Snackbar.Add("Failed to save lookup key", Severity.Error);
 158            }
 159        }
 160        catch (Exception ex)
 161        {
 162            Snackbar.Add($"Error saving lookup key: {ex.Message}", Severity.Error);
 163            Logger.LogError(
 164                ex,
 165                "Error saving lookup key for provider {ProviderCode} in world {WorldId}",
 166                provider.Provider.Code,
 167                WorldId);
 168        }
 169        finally
 170        {
 171            _updating = false;
 172            StateHasChanged();
 173        }
 174    }
 175}

Methods/Properties

.ctor()