mirror of
https://github.com/claunia/marechai.git
synced 2026-07-08 17:57:08 +00:00
feat: Enhance SoftwareReleaseDialog with region and language attachment handling
This commit is contained in:
@@ -663,17 +663,36 @@
|
||||
|
||||
async Task AddRegion()
|
||||
{
|
||||
if(_selectedRegionToAdd?.Id is null || ReleaseId <= 0) return;
|
||||
if(_selectedRegionToAdd?.Id is null) return;
|
||||
|
||||
if(ReleaseId > 0)
|
||||
{
|
||||
await SoftwareReleasesService.AddRegionToReleaseAsync(ReleaseId, _selectedRegionToAdd.Id ?? 0);
|
||||
_releaseRegions = await SoftwareReleasesService.GetReleaseRegionsAsync(ReleaseId);
|
||||
}
|
||||
else
|
||||
{
|
||||
_releaseRegions ??= [];
|
||||
_releaseRegions.Add(new UnM49BySoftwareReleaseDto
|
||||
{
|
||||
UnM49Id = _selectedRegionToAdd.Id,
|
||||
RegionName = _selectedRegionToAdd.Name
|
||||
});
|
||||
}
|
||||
|
||||
await SoftwareReleasesService.AddRegionToReleaseAsync(ReleaseId, _selectedRegionToAdd.Id ?? 0);
|
||||
_releaseRegions = await SoftwareReleasesService.GetReleaseRegionsAsync(ReleaseId);
|
||||
_selectedRegionToAdd = null;
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
async Task RemoveRegion(UnM49BySoftwareReleaseDto region)
|
||||
{
|
||||
if(ReleaseId <= 0) return;
|
||||
if(ReleaseId <= 0)
|
||||
{
|
||||
_releaseRegions?.Remove(region);
|
||||
StateHasChanged();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
await SoftwareReleasesService.RemoveRegionFromReleaseAsync(ReleaseId, region.UnM49Id ?? 0);
|
||||
_releaseRegions = await SoftwareReleasesService.GetReleaseRegionsAsync(ReleaseId);
|
||||
@@ -691,17 +710,38 @@
|
||||
|
||||
async Task AddLanguage()
|
||||
{
|
||||
if(_selectedLanguageToAdd?.Id is null || ReleaseId <= 0) return;
|
||||
if(_selectedLanguageToAdd?.Id is null) return;
|
||||
|
||||
if(ReleaseId > 0)
|
||||
{
|
||||
await SoftwareReleasesService.AddLanguageToReleaseAsync(ReleaseId, _selectedLanguageToAdd.Id);
|
||||
_releaseLanguages = await SoftwareReleasesService.GetReleaseLanguagesAsync(ReleaseId);
|
||||
}
|
||||
else
|
||||
{
|
||||
_releaseLanguages ??= [];
|
||||
_releaseLanguages.Add(new LanguageBySoftwareReleaseDto
|
||||
{
|
||||
LanguageCode = _selectedLanguageToAdd.Id,
|
||||
Language = _selectedLanguageToAdd.ReferenceName
|
||||
});
|
||||
}
|
||||
|
||||
await SoftwareReleasesService.AddLanguageToReleaseAsync(ReleaseId, _selectedLanguageToAdd.Id);
|
||||
_releaseLanguages = await SoftwareReleasesService.GetReleaseLanguagesAsync(ReleaseId);
|
||||
_selectedLanguageToAdd = null;
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
async Task RemoveLanguage(LanguageBySoftwareReleaseDto lang)
|
||||
{
|
||||
if(ReleaseId <= 0 || lang.LanguageCode is null) return;
|
||||
if(ReleaseId <= 0)
|
||||
{
|
||||
_releaseLanguages?.Remove(lang);
|
||||
StateHasChanged();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if(lang.LanguageCode is null) return;
|
||||
|
||||
await SoftwareReleasesService.RemoveLanguageFromReleaseAsync(ReleaseId, lang.LanguageCode);
|
||||
_releaseLanguages = await SoftwareReleasesService.GetReleaseLanguagesAsync(ReleaseId);
|
||||
@@ -939,7 +979,18 @@
|
||||
PlatformId = _selectedPlatform?.Id,
|
||||
PublisherId = _selectedPublisher?.Id,
|
||||
ReleaseDate = ReleaseDate,
|
||||
ReleaseDatePrecision = ReleaseDatePrecision
|
||||
ReleaseDatePrecision = ReleaseDatePrecision,
|
||||
RegionIds = (_releaseRegions ?? [])
|
||||
.Select(r => r.UnM49Id)
|
||||
.OfType<int>()
|
||||
.Distinct()
|
||||
.ToList(),
|
||||
LanguageCodes = (_releaseLanguages ?? [])
|
||||
.Select(l => l.LanguageCode)
|
||||
.Where(code => !string.IsNullOrWhiteSpace(code))
|
||||
.Select(code => code!)
|
||||
.Distinct(StringComparer.OrdinalIgnoreCase)
|
||||
.ToList()
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,12 +5,14 @@ namespace Marechai.Pages.Admin;
|
||||
|
||||
public sealed class SoftwareReleaseDialogResult
|
||||
{
|
||||
public string Title { get; set; }
|
||||
public bool IsCompilation { get; set; }
|
||||
public int? SoftwareId { get; set; }
|
||||
public int? SoftwareVersionId { get; set; }
|
||||
public int? PlatformId { get; set; }
|
||||
public int? PublisherId { get; set; }
|
||||
public DateTime? ReleaseDate { get; set; }
|
||||
public int ReleaseDatePrecision { get; set; }
|
||||
public string Title { get; set; }
|
||||
public bool IsCompilation { get; set; }
|
||||
public int? SoftwareId { get; set; }
|
||||
public int? SoftwareVersionId { get; set; }
|
||||
public int? PlatformId { get; set; }
|
||||
public int? PublisherId { get; set; }
|
||||
public DateTime? ReleaseDate { get; set; }
|
||||
public int ReleaseDatePrecision { get; set; }
|
||||
public List<int> RegionIds { get; set; } = [];
|
||||
public List<string> LanguageCodes { get; set; } = [];
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Marechai.ApiClient.Models;
|
||||
@@ -169,16 +170,60 @@ public partial class SoftwareReleases
|
||||
|
||||
if(id is not null)
|
||||
{
|
||||
_successMessage = L["Release created successfully."];
|
||||
List<string> attachErrors = [];
|
||||
|
||||
foreach(int regionId in data.RegionIds.Distinct())
|
||||
{
|
||||
(bool succeeded, string attachError) =
|
||||
await SoftwareReleasesService.AddRegionToReleaseAsync(id.Value, regionId);
|
||||
|
||||
if(!succeeded)
|
||||
attachErrors.Add(attachError ?? L["Unknown error"]);
|
||||
}
|
||||
|
||||
foreach(string languageCode in data.LanguageCodes
|
||||
.Where(code => !string.IsNullOrWhiteSpace(code))
|
||||
.Distinct(StringComparer.OrdinalIgnoreCase))
|
||||
{
|
||||
(bool succeeded, string attachError) =
|
||||
await SoftwareReleasesService.AddLanguageToReleaseAsync(id.Value, languageCode);
|
||||
|
||||
if(!succeeded)
|
||||
attachErrors.Add(attachError ?? L["Unknown error"]);
|
||||
}
|
||||
|
||||
await _dataGrid.ReloadServerData();
|
||||
|
||||
if(attachErrors.Count == 0)
|
||||
{
|
||||
_errorMessage = null;
|
||||
_successMessage = L["Release created successfully."];
|
||||
}
|
||||
else
|
||||
{
|
||||
_successMessage = null;
|
||||
_errorMessage = BuildAttachmentFailureMessage(id.Value, attachErrors);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_successMessage = null;
|
||||
_errorMessage = errorMessage;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
string BuildAttachmentFailureMessage(int releaseId, List<string> attachErrors)
|
||||
{
|
||||
StringBuilder builder = new();
|
||||
builder.Append($"Release {releaseId} was created, but one or more region/language attachments failed.");
|
||||
|
||||
if(attachErrors.Count > 0)
|
||||
builder.Append($" {string.Join(" | ", attachErrors)}");
|
||||
|
||||
return builder.ToString();
|
||||
}
|
||||
|
||||
async Task OpenEditDialog(SoftwareReleaseDto release)
|
||||
{
|
||||
SoftwareReleaseDto full = await SoftwareReleasesService.GetByIdAsync(release.Id ?? 0);
|
||||
|
||||
Reference in New Issue
Block a user