Compare commits

...

19 Commits

Author SHA1 Message Date
Daenorth 2666a15ffb Merge branch 'master' into master 2025-01-08 19:51:36 +01:00
Evan Husted 2226521f6c docs: compat: remove quotes around everything but game titles 2025-01-08 12:36:26 -06:00
Evan Husted 384416953d docs: compat: list title ID column first 2025-01-08 12:30:13 -06:00
Evan Husted 1343fabe41 docs: compat: some more missing title ids 2025-01-08 12:20:20 -06:00
Evan Husted bc6de21846 unnecessary escaping 2025-01-08 05:50:34 -06:00
Daenorth 8052a5480c no_No Norwegian locales update 2025-01-08 12:34:08 +01:00
Daenorth 2df1d50901 Merge branch 'Ryubing:master' into master 2025-01-08 12:13:27 +01:00
Evan Husted 1e52af5e29 docs: compat: Multiple big changes:
Sort alphabetically,
Remove title IDs in "issue_title" column,
and remove all entries without a playability status.
2025-01-07 20:17:09 -06:00
Evan Husted 672f5df0f9 docs: compat: Remove issue_number & events_count columns
That's mostly for archival purposes; we don't need it.
2025-01-07 18:49:04 -06:00
Evan Husted 804d9c1efe docs: compat: remove invalid dupe 2025-01-07 06:03:35 -06:00
Evan Husted 9270b35648 no. 2025-01-07 05:53:31 -06:00
Evan Husted 5a6d01db3c docs: compat: trine 4 -> nothing
added Soul Reaver 1 & 2
2025-01-07 05:50:30 -06:00
Evan Husted ef9c1416ec UI: compat: Only use monospaced font for title ID 2025-01-07 04:49:20 -06:00
Evan Husted 5efa7d5dfa UI: compat: remove custom ContentDialog derived type 2025-01-07 04:37:36 -06:00
Evan Husted a82569d615 docs: compat: LEGO Horizon Adventures 2025-01-07 04:28:10 -06:00
Evan Husted ed5832ca73 docs: compat: Add new releases to the end of the file 2025-01-07 04:21:33 -06:00
Evan Husted 574aa9ff9c add a couple missing title IDs 2025-01-07 04:21:08 -06:00
Evan Husted 8a29428de2 docs: compat: update hogwarts legacy compat 2025-01-07 03:57:13 -06:00
Daenorth 95a8890bc2 Update to no_NO Norwegian Translation with new resync & Metal backend text. 2024-12-31 16:56:41 +01:00
9 changed files with 3473 additions and 4381 deletions
+3433 -4303
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -402,7 +402,7 @@
<x:Double x:Key="ControlContentThemeFontSize">13</x:Double> <x:Double x:Key="ControlContentThemeFontSize">13</x:Double>
<x:Double x:Key="MenuItemHeight">26</x:Double> <x:Double x:Key="MenuItemHeight">26</x:Double>
<x:Double x:Key="TabItemMinHeight">28</x:Double> <x:Double x:Key="TabItemMinHeight">28</x:Double>
<x:Double x:Key="ContentDialogMaxWidth">700</x:Double> <x:Double x:Key="ContentDialogMaxWidth">900</x:Double>
<x:Double x:Key="ContentDialogMaxHeight">756</x:Double> <x:Double x:Key="ContentDialogMaxHeight">756</x:Double>
</Styles.Resources> </Styles.Resources>
</Styles> </Styles>
+10 -10
View File
@@ -10435,7 +10435,7 @@
"it_IT": "Finestra di input", "it_IT": "Finestra di input",
"ja_JP": "入力ダイアログ", "ja_JP": "入力ダイアログ",
"ko_KR": "대화 상자 입력", "ko_KR": "대화 상자 입력",
"no_NO": "", "no_NO": "Dialogboksen Inndata",
"pl_PL": "Okno Dialogowe Wprowadzania", "pl_PL": "Okno Dialogowe Wprowadzania",
"pt_BR": "Diálogo de texto", "pt_BR": "Diálogo de texto",
"ru_RU": "Диалоговое окно ввода", "ru_RU": "Диалоговое окно ввода",
@@ -22610,7 +22610,7 @@
"it_IT": "", "it_IT": "",
"ja_JP": "", "ja_JP": "",
"ko_KR": "", "ko_KR": "",
"no_NO": "", "no_NO": "Denne kompatibilitetslisten kan inneholde oppføringer som er tomme for data.\nVær ikke imot å teste spill i statusen «Ingame».",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "", "ru_RU": "",
@@ -22635,7 +22635,7 @@
"it_IT": "", "it_IT": "",
"ja_JP": "", "ja_JP": "",
"ko_KR": "", "ko_KR": "",
"no_NO": "", "no_NO": "Søk i kompatibilitetsoppføringer...",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "", "ru_RU": "",
@@ -22660,7 +22660,7 @@
"it_IT": "", "it_IT": "",
"ja_JP": "", "ja_JP": "",
"ko_KR": "", "ko_KR": "",
"no_NO": "", "no_NO": "Åpne kompatibilitetslisten",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "", "ru_RU": "",
@@ -22685,7 +22685,7 @@
"it_IT": "", "it_IT": "",
"ja_JP": "", "ja_JP": "",
"ko_KR": "", "ko_KR": "",
"no_NO": "", "no_NO": "Vis bare eide spill",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "", "ru_RU": "",
@@ -22710,7 +22710,7 @@
"it_IT": "", "it_IT": "",
"ja_JP": "", "ja_JP": "",
"ko_KR": "", "ko_KR": "",
"no_NO": "", "no_NO": "Spillbar",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "", "ru_RU": "",
@@ -22760,7 +22760,7 @@
"it_IT": "", "it_IT": "",
"ja_JP": "", "ja_JP": "",
"ko_KR": "", "ko_KR": "",
"no_NO": "", "no_NO": "Menyer",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "", "ru_RU": "",
@@ -22785,7 +22785,7 @@
"it_IT": "", "it_IT": "",
"ja_JP": "", "ja_JP": "",
"ko_KR": "", "ko_KR": "",
"no_NO": "", "no_NO": "Starter",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "", "ru_RU": "",
@@ -22810,7 +22810,7 @@
"it_IT": "", "it_IT": "",
"ja_JP": "", "ja_JP": "",
"ko_KR": "", "ko_KR": "",
"no_NO": "", "no_NO": "Ingenting",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "", "ru_RU": "",
@@ -22823,4 +22823,4 @@
} }
} }
] ]
} }
-6
View File
@@ -171,12 +171,6 @@
<ItemGroup> <ItemGroup>
<AdditionalFiles Include="Assets\locales.json" /> <AdditionalFiles Include="Assets\locales.json" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Compile Update="Utilities\Compat\CompatibilityContentDialog.axaml.cs">
<DependentUpon>CompatibilityContentDialog.axaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
</ItemGroup>
<ItemGroup> <ItemGroup>
<Folder Include="Assets\Fonts\Mono\" /> <Folder Include="Assets\Fonts\Mono\" />
</ItemGroup> </ItemGroup>
@@ -1,20 +0,0 @@
<ui:ContentDialog xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="using:Ryujinx.Ava.Utilities.Compat"
xmlns:ui="using:FluentAvalonia.UI.Controls"
xmlns:ext="using:Ryujinx.Ava.Common.Markup"
x:Class="Ryujinx.Ava.Utilities.Compat.CompatibilityContentDialog"
mc:Ignorable="d" d:DesignWidth="600" d:DesignHeight="400"
CloseButtonText="{ext:Locale SettingsButtonClose}"
DefaultButton="Close"
x:DataType="local:CompatibilityViewModel">
<ui:ContentDialog.DataContext>
<local:CompatibilityViewModel/>
</ui:ContentDialog.DataContext>
<ui:ContentDialog.Resources>
<x:Double x:Key="ContentDialogMaxWidth">900</x:Double>
</ui:ContentDialog.Resources>
</ui:ContentDialog>
@@ -1,13 +0,0 @@
using FluentAvalonia.UI.Controls;
using System;
namespace Ryujinx.Ava.Utilities.Compat
{
public partial class CompatibilityContentDialog : ContentDialog
{
protected override Type StyleKeyOverride => typeof(ContentDialog);
public CompatibilityContentDialog() => InitializeComponent();
}
}
@@ -3,6 +3,7 @@ using nietras.SeparatedValues;
using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Common.Locale;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
@@ -32,21 +33,18 @@ namespace Ryujinx.Ava.Utilities.Compat
{ {
public CompatibilityEntry(SepReaderHeader header, SepReader.Row row) public CompatibilityEntry(SepReaderHeader header, SepReader.Row row)
{ {
IssueNumber = row[header.IndexOf("issue_number")].Parse<int>(); if (row.ColCount != header.ColNames.Count)
throw new InvalidDataException($"CSV row {row.RowIndex} ({row.ToString()}) has mismatched column count");
var titleIdRow = row[header.IndexOf("extracted_game_id")].ToString();
var titleIdRow = ColStr(row[header.IndexOf("\"title_id\"")]);
TitleId = !string.IsNullOrEmpty(titleIdRow) TitleId = !string.IsNullOrEmpty(titleIdRow)
? titleIdRow ? titleIdRow
: default(Optional<string>); : default(Optional<string>);
GameName = ColStr(row[header.IndexOf("\"game_name\"")]).Trim().Trim('"');
var issueTitleRow = row[header.IndexOf("issue_title")].ToString(); IssueLabels = ColStr(row[header.IndexOf("\"labels\"")]).Split(';');
if (TitleId.HasValue) Status = ColStr(row[header.IndexOf("\"status\"")]).ToLower() switch
issueTitleRow = issueTitleRow.ReplaceIgnoreCase($" - {TitleId}", string.Empty);
GameName = issueTitleRow.Trim().Trim('"');
IssueLabels = row[header.IndexOf("issue_labels")].ToString().Split(';');
Status = row[header.IndexOf("extracted_status")].ToString().ToLower() switch
{ {
"playable" => LocaleKeys.CompatibilityListPlayable, "playable" => LocaleKeys.CompatibilityListPlayable,
"ingame" => LocaleKeys.CompatibilityListIngame, "ingame" => LocaleKeys.CompatibilityListIngame,
@@ -56,23 +54,23 @@ namespace Ryujinx.Ava.Utilities.Compat
_ => null _ => null
}; };
if (row[header.IndexOf("last_event_date")].TryParse<DateTime>(out var dt)) if (DateTime.TryParse(ColStr(row[header.IndexOf("\"last_updated\"")]), out var dt))
LastEvent = dt; LastEvent = dt;
if (row[header.IndexOf("events_count")].TryParse<int>(out var eventsCount)) return;
EventCount = eventsCount;
string ColStr(SepReader.Col col) => col.ToString().Trim('"');
} }
public int IssueNumber { get; }
public string GameName { get; } public string GameName { get; }
public Optional<string> TitleId { get; } public Optional<string> TitleId { get; }
public string[] IssueLabels { get; } public string[] IssueLabels { get; }
public LocaleKeys? Status { get; } public LocaleKeys? Status { get; }
public DateTime LastEvent { get; } public DateTime LastEvent { get; }
public int EventCount { get; }
public string LocalizedStatus => LocaleManager.Instance[Status!.Value]; public string LocalizedStatus => LocaleManager.Instance[Status!.Value];
public string FormattedTitleId => TitleId.OrElse(new string(' ', 16)); public string FormattedTitleId => TitleId
.OrElse(new string(' ', 16));
public string FormattedIssueLabels => IssueLabels public string FormattedIssueLabels => IssueLabels
.Where(it => !it.StartsWithIgnoreCase("status")) .Where(it => !it.StartsWithIgnoreCase("status"))
@@ -82,13 +80,11 @@ namespace Ryujinx.Ava.Utilities.Compat
public override string ToString() public override string ToString()
{ {
var sb = new StringBuilder("CompatibilityEntry: {"); var sb = new StringBuilder("CompatibilityEntry: {");
sb.Append($"{nameof(IssueNumber)}={IssueNumber}, ");
sb.Append($"{nameof(GameName)}=\"{GameName}\", "); sb.Append($"{nameof(GameName)}=\"{GameName}\", ");
sb.Append($"{nameof(TitleId)}={TitleId}, "); sb.Append($"{nameof(TitleId)}={TitleId}, ");
sb.Append($"{nameof(IssueLabels)}=\"{IssueLabels}\", "); sb.Append($"{nameof(IssueLabels)}=\"{IssueLabels}\", ");
sb.Append($"{nameof(Status)}=\"{Status}\", "); sb.Append($"{nameof(Status)}=\"{Status}\", ");
sb.Append($"{nameof(LastEvent)}=\"{LastEvent}\", "); sb.Append($"{nameof(LastEvent)}=\"{LastEvent}\"");
sb.Append($"{nameof(EventCount)}={EventCount}");
sb.Append('}'); sb.Append('}');
return sb.ToString(); return sb.ToString();
@@ -47,9 +47,8 @@
<Grid Width="750" ColumnDefinitions="Auto,Auto,Auto,*" <Grid Width="750" ColumnDefinitions="Auto,Auto,Auto,*"
Margin="5"> Margin="5">
<TextBlock Grid.Column="0" <TextBlock Grid.Column="0"
FontFamily="{StaticResource JetBrainsMono}"
Text="{Binding GameName}" Text="{Binding GameName}"
Width="333" Width="320"
TextWrapping="Wrap" /> TextWrapping="Wrap" />
<TextBlock Grid.Column="1" <TextBlock Grid.Column="1"
Width="135" Width="135"
@@ -60,14 +59,12 @@
<TextBlock Grid.Column="2" <TextBlock Grid.Column="2"
Padding="7, 0" Padding="7, 0"
VerticalAlignment="Center" VerticalAlignment="Center"
FontFamily="{StaticResource JetBrainsMono}"
Text="{Binding LocalizedStatus}" Text="{Binding LocalizedStatus}"
Width="85" Width="85"
Foreground="{Binding Status, Converter={x:Static helpers:PlayabilityStatusConverter.Shared}}" Foreground="{Binding Status, Converter={x:Static helpers:PlayabilityStatusConverter.Shared}}"
TextWrapping="NoWrap" /> TextWrapping="NoWrap" />
<TextBlock Grid.Column="3" <TextBlock Grid.Column="3"
VerticalAlignment="Center" VerticalAlignment="Center"
FontFamily="{StaticResource JetBrainsMono}"
Text="{Binding FormattedIssueLabels}" Text="{Binding FormattedIssueLabels}"
TextWrapping="WrapWithOverflow" /> TextWrapping="WrapWithOverflow" />
</Grid> </Grid>
@@ -1,6 +1,8 @@
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Styling; using Avalonia.Styling;
using FluentAvalonia.UI.Controls;
using nietras.SeparatedValues; using nietras.SeparatedValues;
using Ryujinx.Ava.Common.Locale;
using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Helpers;
using System.IO; using System.IO;
using System.Reflection; using System.Reflection;
@@ -19,11 +21,17 @@ namespace Ryujinx.Ava.Utilities.Compat
csvStream.Position = 0; csvStream.Position = 0;
CompatibilityCsv.Shared = new CompatibilityCsv(Sep.Reader().From(csvStream)); CompatibilityCsv.Shared = new CompatibilityCsv(Sep.Reader().From(csvStream));
} }
CompatibilityContentDialog contentDialog = new() ContentDialog contentDialog = new()
{ {
Content = new CompatibilityList { DataContext = new CompatibilityViewModel(RyujinxApp.MainWindow.ViewModel.ApplicationLibrary) } PrimaryButtonText = string.Empty,
SecondaryButtonText = string.Empty,
CloseButtonText = LocaleManager.Instance[LocaleKeys.SettingsButtonClose],
Content = new CompatibilityList
{
DataContext = new CompatibilityViewModel(RyujinxApp.MainWindow.ViewModel.ApplicationLibrary)
}
}; };
Style closeButton = new(x => x.Name("CloseButton")); Style closeButton = new(x => x.Name("CloseButton"));