fix #2427 - issue with upgrade available in Language Management

This commit is contained in:
Shaun Walker 2022-09-28 16:16:46 -04:00
parent 26ec3fc7cf
commit 1438e61f1b
9 changed files with 59 additions and 55 deletions

View File

@ -47,7 +47,7 @@ else
protected override async Task OnParametersSetAsync() protected override async Task OnParametersSetAsync()
{ {
_languages = await LanguageService.GetLanguagesAsync(PageState.Site.SiteId, Constants.PackageId); _languages = await LanguageService.GetLanguagesAsync(PageState.Site.SiteId, Constants.ClientId);
var cultures = await LocalizationService.GetCulturesAsync(); var cultures = await LocalizationService.GetCulturesAsync();
var culture = cultures.First(c => c.Name.Equals(Constants.DefaultCulture)); var culture = cultures.First(c => c.Name.Equals(Constants.DefaultCulture));
@ -78,7 +78,7 @@ else
private bool UpgradeAvailable(string code, string version) private bool UpgradeAvailable(string code, string version)
{ {
var upgradeavailable = false; var upgradeavailable = false;
if (_packages != null) if (_packages != null && version != null)
{ {
var package = _packages.Where(item => item.PackageId == (Constants.PackageId + "." + code)).FirstOrDefault(); var package = _packages.Where(item => item.PackageId == (Constants.PackageId + "." + code)).FirstOrDefault();
if (package != null) if (package != null)

View File

@ -102,46 +102,43 @@
<NavLink class="btn btn-secondary" href="@NavigateUrl()">@SharedLocalizer["Cancel"]</NavLink> <NavLink class="btn btn-secondary" href="@NavigateUrl()">@SharedLocalizer["Cancel"]</NavLink>
</TabPanel> </TabPanel>
<TabPanel Name="Translations" ResourceKey="Translations"> <TabPanel Name="Translations" ResourceKey="Translations">
@if (_languages != null) @if (_languages != null && _languages.Count > 0)
{ {
@if (_languages.Count > 0) <Pager Items="@_languages">
{ <Header>
<Pager Items="@_languages"> <th>@SharedLocalizer["Name"]</th>
<Header> <th>@Localizer["Code"]</th>
<th>@SharedLocalizer["Name"]</th> <th>@Localizer["Version"]</th>
<th>@Localizer["Code"]</th> <th style="width: 1px;">&nbsp;</th>
<th>@Localizer["Version"]</th> </Header>
<th style="width: 1px;">&nbsp;</th> <Row>
</Header> <td>@context.Name</td>
<Row> <td>@context.Code</td>
<td>@context.Name</td> <td>@context.Version</td>
<td>@context.Code</td> <td>
<td>@context.Version</td> @if (context.IsDefault)
<td> {
@if (context.IsDefault) <button type="button" class="btn btn-primary" @onclick=@(async () => await GetPackage(_packagename + "." + context.Code))>@SharedLocalizer["Download"]</button>
}
else
{
if (UpgradeAvailable(_packagename + "." + context.Code, context.Version))
{ {
<button type="button" class="btn btn-primary" @onclick=@(async () => await GetPackage(_packagename + "." + context.Code))>@SharedLocalizer["Download"]</button> <button type="button" class="btn btn-primary" @onclick=@(async () => await DownloadPackage(_packagename + "." + context.Code))>@SharedLocalizer["Upgrade"]</button>
} }
else }
{ </td>
if (UpgradeAvailable(_packagename + "." + context.Code, context.Version)) </Row>
{ </Pager>
<button type="button" class="btn btn-primary" @onclick=@(async () => await DownloadPackage(_packagename + "." + context.Code))>@SharedLocalizer["Upgrade"]</button> <button type="button" class="btn btn-success" @onclick="InstallTranslations">@SharedLocalizer["Install"]</button>
} }
} else
</td> {
</Row> <br />
</Pager> <div class="mx-auto text-center">
<button type="button" class="btn btn-success" @onclick="InstallTranslations">@SharedLocalizer["Install"]</button> @Localizer["Search.NoResults"]
} </div>
else <br />
{
<br />
<div class="mx-auto text-center">
@Localizer["Search.NoResults"]
</div>
<br />
}
} }
</TabPanel> </TabPanel>
</TabStrip> </TabStrip>
@ -237,17 +234,20 @@
_modifiedby = moduleDefinition.ModifiedBy; _modifiedby = moduleDefinition.ModifiedBy;
_modifiedon = moduleDefinition.ModifiedOn; _modifiedon = moduleDefinition.ModifiedOn;
_packages = await PackageService.GetPackagesAsync("translation", "", "", _packagename); if (!string.IsNullOrEmpty(_packagename))
_languages = await LanguageService.GetLanguagesAsync(-1, _packagename);
foreach (var package in _packages)
{ {
var code = package.PackageId.Split('.').Last(); _packages = await PackageService.GetPackagesAsync("translation", "", "", _packagename);
if (!_languages.Any(item => item.Code == code)) _languages = await LanguageService.GetLanguagesAsync(-1, _packagename);
foreach (var package in _packages)
{ {
_languages.Add(new Language { Code = code, Name = CultureInfo.GetCultureInfo(code).DisplayName, Version = package.Version, IsDefault = true }); var code = package.PackageId.Split('.').Last();
if (!_languages.Any(item => item.Code == code))
{
_languages.Add(new Language { Code = code, Name = CultureInfo.GetCultureInfo(code).DisplayName, Version = package.Version, IsDefault = true });
}
} }
_languages = _languages.OrderBy(item => item.Name).ToList();
} }
_languages = _languages.OrderBy(item => item.Name).ToList();
} }
} }
catch (Exception ex) catch (Exception ex)

View File

@ -50,7 +50,7 @@ else
<Row> <Row>
<td><ActionLink Action="Edit" Parameters="@($"id=" + context.ModuleDefinitionId.ToString())" ResourceKey="EditModule" /></td> <td><ActionLink Action="Edit" Parameters="@($"id=" + context.ModuleDefinitionId.ToString())" ResourceKey="EditModule" /></td>
<td> <td>
@if (context.AssemblyName != "Oqtane.Client") @if (context.AssemblyName != Constants.ClientId)
{ {
<ActionDialog Header="Delete Module" Message="@string.Format(Localizer["Confirm.Module.Delete", context.Name])" Action="Delete" Security="SecurityAccessLevel.Host" Class="btn btn-danger" OnClick="@(async () => await DeleteModule(context))" ResourceKey="DeleteModule" /> <ActionDialog Header="Delete Module" Message="@string.Format(Localizer["Confirm.Module.Delete", context.Name])" Action="Delete" Security="SecurityAccessLevel.Host" Class="btn btn-danger" OnClick="@(async () => await DeleteModule(context))" ResourceKey="DeleteModule" />
} }
@ -58,7 +58,7 @@ else
<td>@context.Name</td> <td>@context.Name</td>
<td>@context.Version</td> <td>@context.Version</td>
<td> <td>
@if(context.AssemblyName == "Oqtane.Client" || PageState.Modules.Where(m => m.ModuleDefinition?.ModuleDefinitionId == context.ModuleDefinitionId).FirstOrDefault() != null) @if (context.AssemblyName == Constants.ClientId || PageState.Modules.Where(m => m.ModuleDefinition?.ModuleDefinitionId == context.ModuleDefinitionId).FirstOrDefault() != null)
{ {
<span>@SharedLocalizer["Yes"]</span> <span>@SharedLocalizer["Yes"]</span>
} }

View File

@ -29,7 +29,7 @@ else
<Row> <Row>
<td><ActionLink Action="View" Parameters="@($"name=" + WebUtility.UrlEncode(context.ThemeName))" ResourceKey="ViewTheme" /></td> <td><ActionLink Action="View" Parameters="@($"name=" + WebUtility.UrlEncode(context.ThemeName))" ResourceKey="ViewTheme" /></td>
<td> <td>
@if (context.AssemblyName != "Oqtane.Client") @if (context.AssemblyName != Constants.ClientId)
{ {
<ActionDialog Header="Delete Theme" Message="@string.Format(Localizer["Confirm.Theme.Delete"], context.Name)" Action="Delete" Security="SecurityAccessLevel.Host" Class="btn btn-danger" OnClick="@(async () => await DeleteTheme(context))" ResourceKey="DeleteTheme" /> <ActionDialog Header="Delete Theme" Message="@string.Format(Localizer["Confirm.Theme.Delete"], context.Name)" Action="Delete" Security="SecurityAccessLevel.Host" Class="btn btn-danger" OnClick="@(async () => await DeleteTheme(context))" ResourceKey="DeleteTheme" />
} }

View File

@ -42,10 +42,13 @@ namespace Oqtane.Controllers
{ {
if (!string.IsNullOrEmpty(packagename)) if (!string.IsNullOrEmpty(packagename))
{ {
foreach (var file in Directory.EnumerateFiles(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), $"{packagename}.*{Constants.SatelliteAssemblyExtension}", SearchOption.AllDirectories)) foreach (var file in Directory.EnumerateFiles(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), $"{packagename}*{Constants.SatelliteAssemblyExtension}", SearchOption.AllDirectories))
{ {
var code = Path.GetFileName(Path.GetDirectoryName(file)); var code = Path.GetFileName(Path.GetDirectoryName(file));
languages.Add(new Language { Code = code, Name = CultureInfo.GetCultureInfo(code).DisplayName, Version = FileVersionInfo.GetVersionInfo(file).FileVersion, IsDefault = false }); if (!languages.Any(item => item.Code == code))
{
languages.Add(new Language { Code = code, Name = CultureInfo.GetCultureInfo(code).DisplayName, Version = FileVersionInfo.GetVersionInfo(file).FileVersion, IsDefault = false });
}
} }
} }
} }
@ -54,7 +57,7 @@ namespace Oqtane.Controllers
languages = _languages.GetLanguages(SiteId).ToList(); languages = _languages.GetLanguages(SiteId).ToList();
if (!string.IsNullOrEmpty(packagename)) if (!string.IsNullOrEmpty(packagename))
{ {
foreach (var file in Directory.EnumerateFiles(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), $"{packagename}.*{Constants.SatelliteAssemblyExtension}", SearchOption.AllDirectories)) foreach (var file in Directory.EnumerateFiles(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), $"{packagename}*{Constants.SatelliteAssemblyExtension}", SearchOption.AllDirectories))
{ {
var code = Path.GetFileName(Path.GetDirectoryName(file)); var code = Path.GetFileName(Path.GetDirectoryName(file));
if (languages.Any(item => item.Code == code)) if (languages.Any(item => item.Code == code))

View File

@ -56,7 +56,7 @@ namespace Oqtane.Controllers
{ {
List<Theme> themes = _themes.GetThemes().ToList(); List<Theme> themes = _themes.GetThemes().ToList();
Theme theme = themes.Where(item => item.ThemeName == themename).FirstOrDefault(); Theme theme = themes.Where(item => item.ThemeName == themename).FirstOrDefault();
if (theme != null && Utilities.GetAssemblyName(theme.ThemeName) != "Oqtane.Client") if (theme != null && Utilities.GetAssemblyName(theme.ThemeName) != Constants.ClientId)
{ {
// remove theme assets // remove theme assets
if (_installationManager.UninstallPackage(theme.PackageName)) if (_installationManager.UninstallPackage(theme.PackageName))

View File

@ -40,7 +40,7 @@ namespace Oqtane.Infrastructure
public string[] GetInstalledCultures() public string[] GetInstalledCultures()
{ {
var cultures = new List<string>(); var cultures = new List<string>();
foreach (var file in Directory.EnumerateFiles(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), $"Oqtane.Client{Constants.SatelliteAssemblyExtension}", SearchOption.AllDirectories)) foreach (var file in Directory.EnumerateFiles(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), $"{Constants.ClientId}{Constants.SatelliteAssemblyExtension}", SearchOption.AllDirectories))
{ {
cultures.Add(Path.GetFileName(Path.GetDirectoryName(file))); cultures.Add(Path.GetFileName(Path.GetDirectoryName(file)));
} }

View File

@ -79,7 +79,7 @@ namespace System.Reflection
{ {
return appDomain.GetOqtaneAssemblies() return appDomain.GetOqtaneAssemblies()
.Where(a => a.GetTypes<IModuleControl>().Any() || a.GetTypes<IThemeControl>().Any() || a.GetTypes<IClientStartup>().Any()) .Where(a => a.GetTypes<IModuleControl>().Any() || a.GetTypes<IThemeControl>().Any() || a.GetTypes<IClientStartup>().Any())
.Where(a => Utilities.GetFullTypeName(a.GetName().Name) != "Oqtane.Client"); .Where(a => Utilities.GetFullTypeName(a.GetName().Name) != Constants.ClientId);
} }
/// <summary> /// <summary>

View File

@ -7,6 +7,7 @@ namespace Oqtane.Shared
public static readonly string Version = "3.2.0"; public static readonly string Version = "3.2.0";
public const string ReleaseVersions = "1.0.0,1.0.1,1.0.2,1.0.3,1.0.4,2.0.0,2.0.1,2.0.2,2.1.0,2.2.0,2.3.0,2.3.1,3.0.0,3.0.1,3.0.2,3.0.3,3.1.0,3.1.1,3.1.2,3.1.3,3.1.4,3.2.0"; public const string ReleaseVersions = "1.0.0,1.0.1,1.0.2,1.0.3,1.0.4,2.0.0,2.0.1,2.0.2,2.1.0,2.2.0,2.3.0,2.3.1,3.0.0,3.0.1,3.0.2,3.0.3,3.1.0,3.1.1,3.1.2,3.1.3,3.1.4,3.2.0";
public const string PackageId = "Oqtane.Framework"; public const string PackageId = "Oqtane.Framework";
public const string ClientId = "Oqtane.Client";
public const string UpdaterPackageId = "Oqtane.Updater"; public const string UpdaterPackageId = "Oqtane.Updater";
public const string PackageRegistryUrl = "https://www.oqtane.net"; public const string PackageRegistryUrl = "https://www.oqtane.net";