mirror of
https://github.com/GreemDev/Ryujinx.git
synced 2024-12-22 13:25:45 +00:00
Remove unused workflows, remove FUNDING.yml, remove GTK3.
This commit is contained in:
parent
a2c0035013
commit
12358182aa
11 changed files with 10 additions and 280 deletions
1
.github/FUNDING.yml
vendored
1
.github/FUNDING.yml
vendored
|
@ -1 +0,0 @@
|
||||||
patreon: Ryujinx
|
|
2
.github/labeler.yml
vendored
2
.github/labeler.yml
vendored
|
@ -20,7 +20,7 @@ gpu:
|
||||||
|
|
||||||
gui:
|
gui:
|
||||||
- changed-files:
|
- changed-files:
|
||||||
- any-glob-to-any-file: ['src/Ryujinx/**', 'src/Ryujinx.UI.Common/**', 'src/Ryujinx.UI.LocaleGenerator/**', 'src/Ryujinx.Gtk3/**']
|
- any-glob-to-any-file: ['src/Ryujinx/**', 'src/Ryujinx.UI.Common/**', 'src/Ryujinx.UI.LocaleGenerator/**']
|
||||||
|
|
||||||
horizon:
|
horizon:
|
||||||
- changed-files:
|
- changed-files:
|
||||||
|
|
18
.github/reviewers.yml
vendored
18
.github/reviewers.yml
vendored
|
@ -1,25 +1,17 @@
|
||||||
|
|
||||||
cpu:
|
cpu:
|
||||||
- gdkchan
|
- GreemDev
|
||||||
- riperiperi
|
|
||||||
- LDj3SNuD
|
|
||||||
|
|
||||||
gpu:
|
gpu:
|
||||||
- gdkchan
|
- GreemDev
|
||||||
- riperiperi
|
|
||||||
|
|
||||||
gui:
|
gui:
|
||||||
- Ack77
|
- GreemDev
|
||||||
- emmauss
|
|
||||||
- TSRBerry
|
|
||||||
|
|
||||||
horizon:
|
horizon:
|
||||||
- gdkchan
|
- GreemDev
|
||||||
- Ack77
|
|
||||||
- TSRBerry
|
|
||||||
|
|
||||||
infra:
|
infra:
|
||||||
- TSRBerry
|
- GreemDev
|
||||||
|
|
||||||
default:
|
default:
|
||||||
- '@developers'
|
- '@developers'
|
||||||
|
|
212
.github/workflows/flatpak.yml
vendored
212
.github/workflows/flatpak.yml
vendored
|
@ -1,212 +0,0 @@
|
||||||
name: Flatpak release job
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
ryujinx_version:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
|
|
||||||
|
|
||||||
concurrency: flatpak-release
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
release:
|
|
||||||
timeout-minutes: ${{ fromJSON(vars.JOB_TIMEOUT) }}
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
env:
|
|
||||||
NUGET_PACKAGES: ${{ github.workspace }}/.nuget/packages
|
|
||||||
GIT_COMMITTER_NAME: "RyujinxBot"
|
|
||||||
GIT_COMMITTER_EMAIL: "61127645+RyujinxBot@users.noreply.github.com"
|
|
||||||
RYUJINX_PROJECT_FILE: "src/Ryujinx/Ryujinx.csproj"
|
|
||||||
NUGET_SOURCES_DESTDIR: "nuget-sources"
|
|
||||||
RYUJINX_VERSION: "${{ inputs.ryujinx_version }}"
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
path: Ryujinx
|
|
||||||
|
|
||||||
- uses: actions/setup-dotnet@v4
|
|
||||||
with:
|
|
||||||
global-json-file: Ryujinx/global.json
|
|
||||||
|
|
||||||
- name: Get version info
|
|
||||||
id: version_info
|
|
||||||
working-directory: Ryujinx
|
|
||||||
run: |
|
|
||||||
echo "git_hash=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
repository: flathub/org.ryujinx.Ryujinx
|
|
||||||
token: ${{ secrets.RYUJINX_BOT_PAT }}
|
|
||||||
submodules: recursive
|
|
||||||
path: flathub
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: python -m pip install PyYAML lxml
|
|
||||||
|
|
||||||
- name: Restore Nuget packages
|
|
||||||
# With .NET 8.0.100, Microsoft.NET.ILLink.Tasks isn't restored by default and only seems to appears when publishing.
|
|
||||||
# So we just publish to grab the dependencies
|
|
||||||
run: |
|
|
||||||
dotnet publish -c Release -r linux-x64 Ryujinx/${{ env.RYUJINX_PROJECT_FILE }} --self-contained
|
|
||||||
dotnet publish -c Release -r linux-arm64 Ryujinx/${{ env.RYUJINX_PROJECT_FILE }} --self-contained
|
|
||||||
|
|
||||||
- name: Generate nuget_sources.json
|
|
||||||
shell: python
|
|
||||||
run: |
|
|
||||||
import hashlib
|
|
||||||
from pathlib import Path
|
|
||||||
import base64
|
|
||||||
import binascii
|
|
||||||
import json
|
|
||||||
import os
|
|
||||||
import urllib.request
|
|
||||||
|
|
||||||
sources = []
|
|
||||||
|
|
||||||
|
|
||||||
def create_source_from_external(name, version):
|
|
||||||
full_dir_path = Path(os.environ["NUGET_PACKAGES"]).joinpath(name).joinpath(version)
|
|
||||||
os.makedirs(full_dir_path, exist_ok=True)
|
|
||||||
|
|
||||||
filename = "{}.{}.nupkg".format(name, version)
|
|
||||||
url = "https://api.nuget.org/v3-flatcontainer/{}/{}/{}".format(
|
|
||||||
name, version, filename
|
|
||||||
)
|
|
||||||
|
|
||||||
print(f"Processing {url}...")
|
|
||||||
response = urllib.request.urlopen(url)
|
|
||||||
sha512 = hashlib.sha512(response.read()).hexdigest()
|
|
||||||
|
|
||||||
return {
|
|
||||||
"type": "file",
|
|
||||||
"url": url,
|
|
||||||
"sha512": sha512,
|
|
||||||
"dest": os.environ["NUGET_SOURCES_DESTDIR"],
|
|
||||||
"dest-filename": filename,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
has_added_x64_apphost = False
|
|
||||||
|
|
||||||
for path in Path(os.environ["NUGET_PACKAGES"]).glob("**/*.nupkg.sha512"):
|
|
||||||
name = path.parent.parent.name
|
|
||||||
version = path.parent.name
|
|
||||||
filename = "{}.{}.nupkg".format(name, version)
|
|
||||||
url = "https://api.nuget.org/v3-flatcontainer/{}/{}/{}".format(
|
|
||||||
name, version, filename
|
|
||||||
)
|
|
||||||
|
|
||||||
with path.open() as fp:
|
|
||||||
sha512 = binascii.hexlify(base64.b64decode(fp.read())).decode("ascii")
|
|
||||||
|
|
||||||
sources.append(
|
|
||||||
{
|
|
||||||
"type": "file",
|
|
||||||
"url": url,
|
|
||||||
"sha512": sha512,
|
|
||||||
"dest": os.environ["NUGET_SOURCES_DESTDIR"],
|
|
||||||
"dest-filename": filename,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
# .NET will not add current installed application host to the list, force inject it here.
|
|
||||||
if not has_added_x64_apphost and name.startswith('microsoft.netcore.app.host'):
|
|
||||||
sources.append(create_source_from_external("microsoft.netcore.app.host.linux-x64", version))
|
|
||||||
has_added_x64_apphost = True
|
|
||||||
|
|
||||||
with open("flathub/nuget_sources.json", "w") as fp:
|
|
||||||
json.dump(sources, fp, indent=4)
|
|
||||||
|
|
||||||
- name: Update flatpak metadata
|
|
||||||
id: metadata
|
|
||||||
env:
|
|
||||||
RYUJINX_GIT_HASH: ${{ steps.version_info.outputs.git_hash }}
|
|
||||||
shell: python
|
|
||||||
run: |
|
|
||||||
import hashlib
|
|
||||||
import hmac
|
|
||||||
import json
|
|
||||||
import os
|
|
||||||
import yaml
|
|
||||||
from datetime import datetime
|
|
||||||
from lxml import etree
|
|
||||||
|
|
||||||
|
|
||||||
# Ensure we don't destroy multiline strings
|
|
||||||
def str_presenter(dumper, data):
|
|
||||||
if len(data.splitlines()) > 1:
|
|
||||||
return dumper.represent_scalar("tag:yaml.org,2002:str", data, style="|")
|
|
||||||
return dumper.represent_scalar("tag:yaml.org,2002:str", data)
|
|
||||||
|
|
||||||
|
|
||||||
yaml.representer.SafeRepresenter.add_representer(str, str_presenter)
|
|
||||||
|
|
||||||
yaml_file = "flathub/org.ryujinx.Ryujinx.yml"
|
|
||||||
xml_file = "flathub/org.ryujinx.Ryujinx.appdata.xml"
|
|
||||||
|
|
||||||
with open(yaml_file, "r") as f:
|
|
||||||
data = yaml.safe_load(f)
|
|
||||||
|
|
||||||
for source in data["modules"][0]["sources"]:
|
|
||||||
if type(source) is str:
|
|
||||||
continue
|
|
||||||
if (
|
|
||||||
source["type"] == "git"
|
|
||||||
and source["url"] == "https://github.com/Ryujinx/Ryujinx.git"
|
|
||||||
):
|
|
||||||
source["commit"] = os.environ['RYUJINX_GIT_HASH']
|
|
||||||
|
|
||||||
is_same_version = data["modules"][0]["build-options"]["env"]["RYUJINX_VERSION"] == os.environ['RYUJINX_VERSION']
|
|
||||||
|
|
||||||
with open(os.environ['GITHUB_OUTPUT'], "a") as gh_out:
|
|
||||||
if is_same_version:
|
|
||||||
gh_out.write(f"commit_message=Retry update to {os.environ['RYUJINX_VERSION']}")
|
|
||||||
else:
|
|
||||||
gh_out.write(f"commit_message=Update to {os.environ['RYUJINX_VERSION']}")
|
|
||||||
|
|
||||||
if not is_same_version:
|
|
||||||
data["modules"][0]["build-options"]["env"]["RYUJINX_VERSION"] = os.environ['RYUJINX_VERSION']
|
|
||||||
|
|
||||||
with open(yaml_file, "w") as f:
|
|
||||||
yaml.safe_dump(data, f, sort_keys=False)
|
|
||||||
|
|
||||||
parser = etree.XMLParser(remove_blank_text=True)
|
|
||||||
tree = etree.parse(xml_file, parser)
|
|
||||||
|
|
||||||
root = tree.getroot()
|
|
||||||
|
|
||||||
releases = root.find("releases")
|
|
||||||
|
|
||||||
element = etree.Element("release")
|
|
||||||
element.set("version", os.environ['RYUJINX_VERSION'])
|
|
||||||
element.set("date", datetime.now().date().isoformat())
|
|
||||||
releases.insert(0, element)
|
|
||||||
|
|
||||||
# Ensure 4 spaces
|
|
||||||
etree.indent(root, space=" ")
|
|
||||||
|
|
||||||
with open(xml_file, "wb") as f:
|
|
||||||
f.write(
|
|
||||||
etree.tostring(
|
|
||||||
tree,
|
|
||||||
pretty_print=True,
|
|
||||||
encoding="UTF-8",
|
|
||||||
doctype='<?xml version="1.0" encoding="UTF-8"?>',
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
- name: Push flatpak update
|
|
||||||
working-directory: flathub
|
|
||||||
env:
|
|
||||||
COMMIT_MESSAGE: ${{ steps.metadata.outputs.commit_message }}
|
|
||||||
run: |
|
|
||||||
git config user.name "${{ env.GIT_COMMITTER_NAME }}"
|
|
||||||
git config user.email "${{ env.GIT_COMMITTER_EMAIL }}"
|
|
||||||
git add .
|
|
||||||
git commit -m "$COMMIT_MESSAGE"
|
|
||||||
git push origin master
|
|
41
.github/workflows/mako.yml
vendored
41
.github/workflows/mako.yml
vendored
|
@ -1,41 +0,0 @@
|
||||||
name: Mako
|
|
||||||
on:
|
|
||||||
discussion:
|
|
||||||
types: [created, edited, answered, unanswered, category_changed]
|
|
||||||
discussion_comment:
|
|
||||||
types: [created, edited]
|
|
||||||
gollum:
|
|
||||||
issue_comment:
|
|
||||||
types: [created, edited]
|
|
||||||
issues:
|
|
||||||
types: [opened, edited, reopened, pinned, milestoned, demilestoned, assigned, unassigned, labeled, unlabeled]
|
|
||||||
pull_request_target:
|
|
||||||
types: [opened, edited, reopened, synchronize, ready_for_review, assigned, unassigned]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
tasks:
|
|
||||||
name: Run Ryujinx tasks
|
|
||||||
permissions:
|
|
||||||
actions: read
|
|
||||||
contents: read
|
|
||||||
discussions: write
|
|
||||||
issues: write
|
|
||||||
pull-requests: write
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
if: github.event_name == 'pull_request_target'
|
|
||||||
with:
|
|
||||||
# Ensure we pin the source origin as pull_request_target run under forks.
|
|
||||||
fetch-depth: 0
|
|
||||||
repository: Ryujinx/Ryujinx
|
|
||||||
ref: master
|
|
||||||
|
|
||||||
- name: Run Mako command
|
|
||||||
uses: Ryujinx/Ryujinx-Mako@master
|
|
||||||
with:
|
|
||||||
command: exec-ryujinx-tasks
|
|
||||||
args: --event-name "${{ github.event_name }}" --event-path "${{ github.event_path }}" -w "${{ github.workspace }}" "${{ github.repository }}" "${{ github.run_id }}"
|
|
||||||
app_id: ${{ secrets.MAKO_APP_ID }}
|
|
||||||
private_key: ${{ secrets.MAKO_PRIVATE_KEY }}
|
|
||||||
installation_id: ${{ secrets.MAKO_INSTALLATION_ID }}
|
|
2
.github/workflows/pr_triage.yml
vendored
2
.github/workflows/pr_triage.yml
vendored
|
@ -18,7 +18,7 @@ jobs:
|
||||||
with:
|
with:
|
||||||
# Ensure we pin the source origin as pull_request_target run under forks.
|
# Ensure we pin the source origin as pull_request_target run under forks.
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
repository: Ryujinx/Ryujinx
|
repository: GreemDev/Ryujinx
|
||||||
ref: master
|
ref: master
|
||||||
|
|
||||||
- name: Update labels based on changes
|
- name: Update labels based on changes
|
||||||
|
|
|
@ -15,8 +15,6 @@
|
||||||
<PackageVersion Include="DiscordRichPresence" Version="1.2.1.24" />
|
<PackageVersion Include="DiscordRichPresence" Version="1.2.1.24" />
|
||||||
<PackageVersion Include="DynamicData" Version="9.0.4" />
|
<PackageVersion Include="DynamicData" Version="9.0.4" />
|
||||||
<PackageVersion Include="FluentAvaloniaUI" Version="2.0.5" />
|
<PackageVersion Include="FluentAvaloniaUI" Version="2.0.5" />
|
||||||
<PackageVersion Include="GtkSharp.Dependencies" Version="1.1.1" />
|
|
||||||
<PackageVersion Include="GtkSharp.Dependencies.osx" Version="0.0.5" />
|
|
||||||
<PackageVersion Include="LibHac" Version="0.19.0" />
|
<PackageVersion Include="LibHac" Version="0.19.0" />
|
||||||
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4" />
|
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4" />
|
||||||
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.9.2" />
|
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.9.2" />
|
||||||
|
@ -34,7 +32,6 @@
|
||||||
<PackageVersion Include="Ryujinx.Audio.OpenAL.Dependencies" Version="1.21.0.1" />
|
<PackageVersion Include="Ryujinx.Audio.OpenAL.Dependencies" Version="1.21.0.1" />
|
||||||
<PackageVersion Include="Ryujinx.Graphics.Nvdec.Dependencies" Version="5.0.3-build14" />
|
<PackageVersion Include="Ryujinx.Graphics.Nvdec.Dependencies" Version="5.0.3-build14" />
|
||||||
<PackageVersion Include="Ryujinx.Graphics.Vulkan.Dependencies.MoltenVK" Version="1.2.0" />
|
<PackageVersion Include="Ryujinx.Graphics.Vulkan.Dependencies.MoltenVK" Version="1.2.0" />
|
||||||
<PackageVersion Include="Ryujinx.GtkSharp" Version="3.24.24.59-ryujinx" />
|
|
||||||
<PackageVersion Include="Ryujinx.SDL2-CS" Version="2.30.0-build32" />
|
<PackageVersion Include="Ryujinx.SDL2-CS" Version="2.30.0-build32" />
|
||||||
<PackageVersion Include="securifybv.ShellLink" Version="0.1.0" />
|
<PackageVersion Include="securifybv.ShellLink" Version="0.1.0" />
|
||||||
<PackageVersion Include="shaderc.net" Version="0.1.0" />
|
<PackageVersion Include="shaderc.net" Version="0.1.0" />
|
||||||
|
@ -49,4 +46,4 @@
|
||||||
<PackageVersion Include="System.Management" Version="8.0.0" />
|
<PackageVersion Include="System.Management" Version="8.0.0" />
|
||||||
<PackageVersion Include="UnicornEngine.Unicorn" Version="2.0.2-rc1-fb78016" />
|
<PackageVersion Include="UnicornEngine.Unicorn" Version="2.0.2-rc1-fb78016" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -3,8 +3,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio Version 17
|
# Visual Studio Version 17
|
||||||
VisualStudioVersion = 17.1.32228.430
|
VisualStudioVersion = 17.1.32228.430
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Gtk3", "src\Ryujinx.Gtk3\Ryujinx.Gtk3.csproj", "{074045D4-3ED2-4711-9169-E385F2BFB5A0}"
|
|
||||||
EndProject
|
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests", "src\Ryujinx.Tests\Ryujinx.Tests.csproj", "{EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests", "src\Ryujinx.Tests\Ryujinx.Tests.csproj", "{EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests.Unicorn", "src\Ryujinx.Tests.Unicorn\Ryujinx.Tests.Unicorn.csproj", "{D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests.Unicorn", "src\Ryujinx.Tests.Unicorn\Ryujinx.Tests.Unicorn.csproj", "{D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}"
|
||||||
|
@ -95,10 +93,6 @@ Global
|
||||||
Release|Any CPU = Release|Any CPU
|
Release|Any CPU = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{074045D4-3ED2-4711-9169-E385F2BFB5A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{074045D4-3ED2-4711-9169-E385F2BFB5A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{074045D4-3ED2-4711-9169-E385F2BFB5A0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{074045D4-3ED2-4711-9169-E385F2BFB5A0}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
|
|
@ -25,7 +25,7 @@ namespace Ryujinx.HLE.UI
|
||||||
bool DisplayMessageDialog(ControllerAppletUIArgs args);
|
bool DisplayMessageDialog(ControllerAppletUIArgs args);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Tell the UI that we need to transisition to another program.
|
/// Tell the UI that we need to transition to another program.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="device">The device instance.</param>
|
/// <param name="device">The device instance.</param>
|
||||||
/// <param name="kind">The program kind.</param>
|
/// <param name="kind">The program kind.</param>
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 193 KiB |
|
@ -11,6 +11,7 @@ namespace Ryujinx.Ava.UI.Helpers
|
||||||
/// This <see cref="IValueConverter"/> makes sure that the string "Never" that's returned by <see cref="ValueFormatUtils.FormatDateTime"/> is properly localized in the Avalonia UI.
|
/// This <see cref="IValueConverter"/> makes sure that the string "Never" that's returned by <see cref="ValueFormatUtils.FormatDateTime"/> is properly localized in the Avalonia UI.
|
||||||
/// After the Avalonia UI has been made the default and the GTK UI is removed, <see cref="ValueFormatUtils"/> should be updated to directly return a localized string.
|
/// After the Avalonia UI has been made the default and the GTK UI is removed, <see cref="ValueFormatUtils"/> should be updated to directly return a localized string.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
// TODO: localize ValueFormatUtils.FormateDateTime
|
||||||
internal class LocalizedNeverConverter : MarkupExtension, IValueConverter
|
internal class LocalizedNeverConverter : MarkupExtension, IValueConverter
|
||||||
{
|
{
|
||||||
private static readonly LocalizedNeverConverter _instance = new();
|
private static readonly LocalizedNeverConverter _instance = new();
|
||||||
|
|
Loading…
Reference in a new issue