修复图片流递归读取的bug (#461)

This commit is contained in:
Poker 2024-05-12 22:51:37 +08:00 committed by GitHub
parent b994b29687
commit b6d69dbb94
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 124 additions and 165 deletions

View File

@ -59,17 +59,15 @@ public static partial class AppInfo
public static bool CustomizeTitleBarSupported => AppWindowTitleBar.IsCustomizationSupported();
private static readonly WeakReference<SoftwareBitmapSource?> _imageNotAvailable = new(null);
public static AsyncLazy<SoftwareBitmapSource> ImageNotAvailable { get; } = new(async () => await GetImageNotAvailableStream().GetSoftwareBitmapSourceAsync(true));
private static readonly WeakReference<Stream?> _imageNotAvailableStream = new(null);
public static Stream GetImageNotAvailableStream() => GetAssetStream("Images/image-not-available.png");
private static readonly WeakReference<SoftwareBitmapSource?> _pixivNoProfile = new(null);
public static AsyncLazy<SoftwareBitmapSource> PixivNoProfile { get; } = new(async () => await GetPixivNoProfileStream().GetSoftwareBitmapSourceAsync(true));
private static readonly WeakReference<Stream?> _pixivNoProfileStream = new(null);
public static Stream GetPixivNoProfileStream() => GetAssetStream("Images/pixiv_no_profile.png");
private static readonly WeakReference<SoftwareBitmapSource?> _icon = new(null);
private static readonly WeakReference<Stream?> _iconStream = new(null);
public static AsyncLazy<SoftwareBitmapSource> Icon { get; } = new(async () => await GetAssetStream("Images/logo.ico").GetSoftwareBitmapSourceAsync(true));
static AppInfo()
{
@ -105,48 +103,6 @@ public static partial class AppInfo
return Path.Combine(Package.Current.InstalledPath, uri.Host, path);
}
public static async Task<SoftwareBitmapSource> GetNotAvailableImageAsync()
{
if (!_imageNotAvailable.TryGetTarget(out var target))
_imageNotAvailable.SetTarget(target = await GetNotAvailableImageStream().GetSoftwareBitmapSourceAsync(false));
return target;
}
public static Stream GetNotAvailableImageStream()
{
if (!_imageNotAvailableStream.TryGetTarget(out var target))
_imageNotAvailableStream.SetTarget(target = GetAssetStream("Images/image-not-available.png"));
return target;
}
public static async Task<SoftwareBitmapSource> GetPixivNoProfileImageAsync()
{
if (!_pixivNoProfile.TryGetTarget(out var target))
_pixivNoProfile.SetTarget(target = await GetPixivNoProfileImageStream().GetSoftwareBitmapSourceAsync(false));
return target;
}
public static Stream GetPixivNoProfileImageStream()
{
if (!_pixivNoProfileStream.TryGetTarget(out var target))
_pixivNoProfileStream.SetTarget(target = GetAssetStream("Images/pixiv_no_profile.png"));
return target;
}
public static async Task<SoftwareBitmapSource> GetIconImageAsync()
{
if (!_icon.TryGetTarget(out var target))
_icon.SetTarget(target = await GetIconImageStream().GetSoftwareBitmapSourceAsync(false));
return target;
}
public static Stream GetIconImageStream()
{
if (!_iconStream.TryGetTarget(out var target))
_iconStream.SetTarget(target = GetAssetStream("Images/logo.ico"));
return target;
}
/// <summary>
/// Get the byte array of a file in the Assets folder
/// </summary>

View File

@ -51,7 +51,7 @@ public sealed partial class CommentBlock
var result = await App.AppViewModel.MakoClient.DownloadSoftwareBitmapSourceAsync(viewModel.StampSource);
block.StickerImageContent.Source = result is Result<SoftwareBitmapSource>.Success { Value: var avatar }
? avatar
: await AppInfo.GetNotAvailableImageAsync();
: await AppInfo.ImageNotAvailable.ValueAsync;
}
else
{

View File

@ -96,7 +96,7 @@ public partial class CommentBlockViewModel(Comment comment, SimpleWorkType type,
var result = await App.AppViewModel.MakoClient.DownloadSoftwareBitmapSourceAsync(Comment.CommentPoster.ProfileImageUrls.Medium);
AvatarSource = result is Result<SoftwareBitmapSource>.Success { Value: var avatar }
? avatar
: await AppInfo.GetPixivNoProfileImageAsync();
: await AppInfo.PixivNoProfile.ValueAsync;
}
public void AddComment(Comment comment)

View File

@ -215,7 +215,7 @@ public class DocumentViewerViewModel(NovelContent novelContent) : ObservableObje
}
}
public Stream TryGetNotAvailableImageStream(Stream? result) => result ?? AppInfo.GetNotAvailableImageStream();
public Stream TryGetNotAvailableImageStream(Stream? result) => result ?? AppInfo.GetImageNotAvailableStream();
private async Task<Stream> LoadThumbnailAsync(string url)
{
@ -242,7 +242,7 @@ public class DocumentViewerViewModel(NovelContent novelContent) : ObservableObje
return await App.AppViewModel.MakoClient.DownloadStreamAsync(url, cancellationHandle: LoadingCancellationHandle) is
Result<Stream>.Success(var stream)
? stream
: AppInfo.GetNotAvailableImageStream();
: AppInfo.GetImageNotAvailableStream();
}
public static async Task<DocumentViewerViewModel> CreateAsync(NovelItemViewModel novelItem, Action<Task> callback)

View File

@ -33,7 +33,7 @@ public partial class IllustratorItemViewModel
var result = await App.AppViewModel.MakoClient.DownloadStreamAsync(AvatarUrl);
var stream = result is Result<Stream>.Success { Value: var avatar }
? avatar
: AppInfo.GetPixivNoProfileImageStream();
: AppInfo.GetPixivNoProfileStream();
var dominantColor = await UiHelper.GetDominantColorAsync(stream, false);
AvatarBorderBrush = new SolidColorBrush(dominantColor);
stream.Position = 0;

View File

@ -131,7 +131,7 @@ public abstract class ThumbnailEntryViewModel<T>(T entry) : EntryViewModel<T>(en
break;
}
return AppInfo.GetNotAvailableImageStream();
return AppInfo.GetImageNotAvailableStream();
}
/// <summary>

View File

@ -156,10 +156,11 @@ public sealed partial class WorkView : IEntryView<ISortableEntryViewViewModel>
{
if (ViewModel == null!)
return;
foreach (var viewModel in ViewModel.Source)
viewModel.UnloadThumbnail(ViewModel);
ViewModel.Dispose();
var viewModel = ViewModel;
ViewModel = null!;
foreach (var vm in viewModel.Source)
vm.UnloadThumbnail(viewModel);
viewModel.Dispose();
}
private void AddToBookmarkTeachingTip_OnCloseButtonClick(TeachingTip sender, object e)

View File

@ -101,13 +101,13 @@ public partial class IllustratorViewerPageViewModel : UiObservableObject
var result = await App.AppViewModel.MakoClient.DownloadBitmapImageAsync(AvatarUrl, 100);
AvatarSource = result is Result<ImageSource>.Success { Value: var avatar }
? avatar
: await AppInfo.GetPixivNoProfileImageAsync();
: await AppInfo.PixivNoProfile.ValueAsync;
if (BackgroundUrl is not null)
{
var result2 = await App.AppViewModel.MakoClient.DownloadBitmapImageAsync(BackgroundUrl);
BackgroundSource = result2 is Result<ImageSource>.Success { Value: var background }
? background
: await AppInfo.GetNotAvailableImageAsync();
: await AppInfo.ImageNotAvailable.ValueAsync;
}
else
{

View File

@ -97,7 +97,7 @@ public partial class MainPageViewModel : ObservableObject
var result = await makoClient.DownloadSoftwareBitmapSourceAsync(makoClient.Session.AvatarUrl!);
AvatarSource = result is Result<SoftwareBitmapSource>.Success { Value: var avatar }
? avatar
: await AppInfo.GetNotAvailableImageAsync();
: await AppInfo.ImageNotAvailable.ValueAsync;
}
public async Task ReverseSearchAsync(Stream stream)

View File

@ -49,7 +49,7 @@ public partial class WorkInfoPageViewModel<T>(T entry) : ObservableObject, IDisp
var result = await App.AppViewModel.MakoClient.DownloadSoftwareBitmapSourceAsync(profileImage);
AvatarSource = result is Result<SoftwareBitmapSource>.Success { Value: var avatar }
? avatar
: await AppInfo.GetPixivNoProfileImageAsync();
: await AppInfo.PixivNoProfile.ValueAsync;
}
}

View File

@ -56,9 +56,8 @@
<PackageReference Include="PininSharp" Version="1.2.0" />
<PackageReference Include="Pixeval.Bypass" Version="1.1.7" />
<PackageReference Include="Pixeval.QRCoder" Version="1.4.5" />
<PackageReference Include="QuestPDF" Version="2024.3.3" />
<PackageReference Include="ReverseMarkdown" Version="4.3.0" />
<PackageReference Include="Select.HtmlToPdf.NetCore" Version="23.2.0" />
<PackageReference Include="QuestPDF" Version="2024.3.5" />
<PackageReference Include="ReverseMarkdown" Version="4.4.0" />
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.4" />
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="2.1.3" />
<PackageReference Include="System.Linq.Async" Version="6.0.1" />
@ -76,7 +75,10 @@
<RemoveDir Directories="Generated" />
<ItemGroup>
<TextFiles Include="%(TextFile.OutputTarget)">
<Content>{&#xD;&#xA;@(TextFile->Metadata('Content'), ',&#xD;&#xA;')&#xD;&#xA;}</Content>
<Content>{
@(TextFile-&gt;Metadata('Content'), ',
')
}</Content>
</TextFiles>
</ItemGroup>
<WriteLinesToFile Condition="%(TextFiles.Identity) != ''" File="%(TextFiles.Identity)" Overwrite="true" Lines="@(TextFiles->'%(Content)')" />
@ -88,9 +90,10 @@
<ItemGroup>
<CompilerVisibleItemMetadata Include="AdditionalFiles" MetadataName="SourceItemGroup" />
<TextFile Include="Strings\*\*.txt" >
<TextFile Include="Strings\*\*.txt">
<OutputTarget>Generated\%(RecursiveDir)\TextGenerated.resjson</OutputTarget>
<Content> "$([System.String]::Concat(%(Filename), '"').Replace('_', '/')) : "$([System.IO.File]::ReadAllText(%(FullPath)).Replace('\', '\\').Replace('&#xD;&#xA;', '\n').Replace('&quot;', '\&quot;'))"</Content>
<Content> "$([System.String]::Concat(%(Filename), '"').Replace('_', '/')) : "$([System.IO.File]::ReadAllText(%(FullPath)).Replace('\', '\\').Replace('
', '\n').Replace('"', '\"'))"</Content>
</TextFile>
</ItemGroup>
@ -130,4 +133,80 @@
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<None Remove="C:\Users\poker\.nuget\packages\questpdf\2024.3.5\buildTransitive\..\LatoFont\OFL.txt" />
</ItemGroup>
<ItemGroup>
<None Remove="C:\Users\poker\.nuget\packages\questpdf\2024.3.5\buildTransitive\..\LatoFont\Lato-ThinItalic.ttf" />
</ItemGroup>
<ItemGroup>
<None Remove="C:\Users\poker\.nuget\packages\questpdf\2024.3.5\buildTransitive\..\LatoFont\Lato-Thin.ttf" />
</ItemGroup>
<ItemGroup>
<None Remove="C:\Users\poker\.nuget\packages\questpdf\2024.3.5\buildTransitive\..\LatoFont\Lato-SemiBoldItalic.ttf" />
</ItemGroup>
<ItemGroup>
<None Remove="C:\Users\poker\.nuget\packages\questpdf\2024.3.5\buildTransitive\..\LatoFont\Lato-SemiBold.ttf" />
</ItemGroup>
<ItemGroup>
<None Remove="C:\Users\poker\.nuget\packages\questpdf\2024.3.5\buildTransitive\..\LatoFont\Lato-Regular.ttf" />
</ItemGroup>
<ItemGroup>
<None Remove="C:\Users\poker\.nuget\packages\questpdf\2024.3.5\buildTransitive\..\LatoFont\Lato-MediumItalic.ttf" />
</ItemGroup>
<ItemGroup>
<None Remove="C:\Users\poker\.nuget\packages\questpdf\2024.3.5\buildTransitive\..\LatoFont\Lato-Medium.ttf" />
</ItemGroup>
<ItemGroup>
<None Remove="C:\Users\poker\.nuget\packages\questpdf\2024.3.5\buildTransitive\..\LatoFont\Lato-LightItalic.ttf" />
</ItemGroup>
<ItemGroup>
<None Remove="C:\Users\poker\.nuget\packages\questpdf\2024.3.5\buildTransitive\..\LatoFont\Lato-Light.ttf" />
</ItemGroup>
<ItemGroup>
<None Remove="C:\Users\poker\.nuget\packages\questpdf\2024.3.5\buildTransitive\..\LatoFont\Lato-Italic.ttf" />
</ItemGroup>
<ItemGroup>
<None Remove="C:\Users\poker\.nuget\packages\questpdf\2024.3.5\buildTransitive\..\LatoFont\Lato-ExtraLightItalic.ttf" />
</ItemGroup>
<ItemGroup>
<None Remove="C:\Users\poker\.nuget\packages\questpdf\2024.3.5\buildTransitive\..\LatoFont\Lato-ExtraLight.ttf" />
</ItemGroup>
<ItemGroup>
<None Remove="C:\Users\poker\.nuget\packages\questpdf\2024.3.5\buildTransitive\..\LatoFont\Lato-ExtraBoldItalic.ttf" />
</ItemGroup>
<ItemGroup>
<None Remove="C:\Users\poker\.nuget\packages\questpdf\2024.3.5\buildTransitive\..\LatoFont\Lato-ExtraBold.ttf" />
</ItemGroup>
<ItemGroup>
<None Remove="C:\Users\poker\.nuget\packages\questpdf\2024.3.5\buildTransitive\..\LatoFont\Lato-BoldItalic.ttf" />
</ItemGroup>
<ItemGroup>
<None Remove="C:\Users\poker\.nuget\packages\questpdf\2024.3.5\buildTransitive\..\LatoFont\Lato-Bold.ttf" />
</ItemGroup>
<ItemGroup>
<None Remove="C:\Users\poker\.nuget\packages\questpdf\2024.3.5\buildTransitive\..\LatoFont\Lato-BlackItalic.ttf" />
</ItemGroup>
<ItemGroup>
<None Remove="C:\Users\poker\.nuget\packages\questpdf\2024.3.5\buildTransitive\..\LatoFont\Lato-Black.ttf" />
</ItemGroup>
</Project>

View File

@ -69,7 +69,7 @@ public static partial class IoHelper
}
catch
{
return await AppInfo.GetNotAvailableImageAsync();
return await AppInfo.ImageNotAvailable.ValueAsync;
}
finally
{
@ -104,7 +104,7 @@ public static partial class IoHelper
}
catch
{
stream = AppInfo.GetNotAvailableImageStream();
stream = AppInfo.GetImageNotAvailableStream();
}
return stream;
}

View File

@ -256,33 +256,17 @@
},
"QuestPDF": {
"type": "Direct",
"requested": "[2024.3.3, )",
"resolved": "2024.3.3",
"contentHash": "S2T+iE8RGw3OCBZ6bZmPhw6oIbXa92MuewcvwzJgeNKGIoc6t1lHnCWwH+UTGVFV9eGUCEjkxQCC6xooDYOUGw=="
"requested": "[2024.3.5, )",
"resolved": "2024.3.5",
"contentHash": "KLBgMYx0+/88B1F2V8Qr9J6N51fMxn9jQ1LCF7P4wE6d5R/7qnsz5ahFychICdsiYzQ96ZWJJOTMQjy2hzFOAw=="
},
"ReverseMarkdown": {
"type": "Direct",
"requested": "[4.3.0, )",
"resolved": "4.3.0",
"contentHash": "KykyBe7Q26pkYbmMP7zwRgAy74xglCCU4lPilii0Vj++LMdvTcm2EZ6EvzaNKvaBNhWQtcI69V/4tW52sceEOw==",
"requested": "[4.4.0, )",
"resolved": "4.4.0",
"contentHash": "16jv/gdvhmIpPxQpsdVCSAkAioXZkWX6ttxpb3ddaD+LJ4Dc+KlAhk1t21y+NZ6VMihJCw3Tum36b41N1J6cvA==",
"dependencies": {
"HtmlAgilityPack": "1.11.57"
}
},
"Select.HtmlToPdf.NetCore": {
"type": "Direct",
"requested": "[23.2.0, )",
"resolved": "23.2.0",
"contentHash": "1npSC6l2TVqRSvBocT865LBcgqcrhA+lAQPzFNUyq3xHu5hh7c/ERPcEbZA5QKE2TFUj10wrIBmxgTUihVz5+w==",
"dependencies": {
"Microsoft.Bcl.AsyncInterfaces": "1.1.0",
"Newtonsoft.Json": "13.0.1",
"System.Buffers": "4.5.1",
"System.Drawing.Common": "4.5.1",
"System.Numerics.Vectors": "4.5.0",
"System.Security.Principal.Windows": "4.5.1",
"System.Text.Encoding.CodePages": "4.5.1",
"System.Threading.Tasks.Extensions": "4.5.2"
"HtmlAgilityPack": "1.11.61"
}
},
"SixLabors.ImageSharp": {
@ -362,8 +346,8 @@
},
"HtmlAgilityPack": {
"type": "Transitive",
"resolved": "1.11.57",
"contentHash": "zDxnHcAvi+qhZG602eKaPJKmzm0T8npKVML0RMwjrRBabpmTRtu2OVpfNkMUfYMgQ+5EllOkSeGxu0uFVV2zFw=="
"resolved": "1.11.61",
"contentHash": "hqZASeEFHS9quHvfZSwaULoAJLWkOYVPiQjc3P9J4pQS8vSYzrP3bxe04Vm7vYYuxwbQhq9hCSVvZVLTyRaNaQ=="
},
"Markdig": {
"type": "Transitive",
@ -410,11 +394,6 @@
"Microsoft.NETCore.Platforms": "3.1.0"
}
},
"Newtonsoft.Json": {
"type": "Transitive",
"resolved": "13.0.1",
"contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A=="
},
"Refit": {
"type": "Transitive",
"resolved": "7.0.0",
@ -434,11 +413,6 @@
"resolved": "2.0.3",
"contentHash": "IY+i5JsUoFTyLvNOlLFUak4nJajSZdfxYqCbDCSYeGDGwHNBtJo0ICduAFGaYaqdL41+YHn7LMrp1AwIU/29Ag=="
},
"System.Buffers": {
"type": "Transitive",
"resolved": "4.5.1",
"contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg=="
},
"System.Drawing.Common": {
"type": "Transitive",
"resolved": "4.7.0",
@ -456,21 +430,11 @@
"System.Text.Json": "7.0.2"
}
},
"System.Numerics.Vectors": {
"type": "Transitive",
"resolved": "4.5.0",
"contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ=="
},
"System.Reflection.Emit": {
"type": "Transitive",
"resolved": "4.7.0",
"contentHash": "VR4kk8XLKebQ4MZuKuIni/7oh+QGFmZW3qORd1GvBq/8026OpW501SzT/oypwiQl4TvT8ErnReh/NzY9u+C6wQ=="
},
"System.Runtime.CompilerServices.Unsafe": {
"type": "Transitive",
"resolved": "4.5.2",
"contentHash": "wprSFgext8cwqymChhrBLu62LMg/1u92bU+VOwyfBimSPVFXtsNqEWC92Pf9ofzJFlk4IHmJA75EDJn1b2goAQ=="
},
"System.Security.AccessControl": {
"type": "Transitive",
"resolved": "4.7.0",
@ -485,15 +449,6 @@
"resolved": "4.7.0",
"contentHash": "ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ=="
},
"System.Text.Encoding.CodePages": {
"type": "Transitive",
"resolved": "4.5.1",
"contentHash": "4J2JQXbftjPMppIHJ7IC+VXQ9XfEagN92vZZNoG12i+zReYlim5dMoXFC1Zzg7tsnKDM7JPo5bYfFK4Jheq44w==",
"dependencies": {
"Microsoft.NETCore.Platforms": "2.1.2",
"System.Runtime.CompilerServices.Unsafe": "4.5.2"
}
},
"System.Text.Encodings.Web": {
"type": "Transitive",
"resolved": "7.0.0",
@ -507,11 +462,6 @@
"System.Text.Encodings.Web": "7.0.0"
}
},
"System.Threading.Tasks.Extensions": {
"type": "Transitive",
"resolved": "4.5.2",
"contentHash": "BG/TNxDFv0svAzx8OiMXDlsHfGw623BZ8tCXw4YLhDFDvDhNUEV58jKYMGRnkbJNm7c3JNNJDiN7JBMzxRBR2w=="
},
"System.ValueTuple": {
"type": "Transitive",
"resolved": "4.5.0",
@ -567,9 +517,9 @@
},
"QuestPDF": {
"type": "Direct",
"requested": "[2024.3.3, )",
"resolved": "2024.3.3",
"contentHash": "S2T+iE8RGw3OCBZ6bZmPhw6oIbXa92MuewcvwzJgeNKGIoc6t1lHnCWwH+UTGVFV9eGUCEjkxQCC6xooDYOUGw=="
"requested": "[2024.3.5, )",
"resolved": "2024.3.5",
"contentHash": "KLBgMYx0+/88B1F2V8Qr9J6N51fMxn9jQ1LCF7P4wE6d5R/7qnsz5ahFychICdsiYzQ96ZWJJOTMQjy2hzFOAw=="
},
"Microsoft.Graphics.Win2D": {
"type": "Transitive",
@ -619,15 +569,6 @@
"resolved": "4.7.0",
"contentHash": "ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ=="
},
"System.Text.Encoding.CodePages": {
"type": "Transitive",
"resolved": "4.5.1",
"contentHash": "4J2JQXbftjPMppIHJ7IC+VXQ9XfEagN92vZZNoG12i+zReYlim5dMoXFC1Zzg7tsnKDM7JPo5bYfFK4Jheq44w==",
"dependencies": {
"Microsoft.NETCore.Platforms": "2.1.2",
"System.Runtime.CompilerServices.Unsafe": "4.5.2"
}
},
"System.Text.Encodings.Web": {
"type": "Transitive",
"resolved": "7.0.0",
@ -652,9 +593,9 @@
},
"QuestPDF": {
"type": "Direct",
"requested": "[2024.3.3, )",
"resolved": "2024.3.3",
"contentHash": "S2T+iE8RGw3OCBZ6bZmPhw6oIbXa92MuewcvwzJgeNKGIoc6t1lHnCWwH+UTGVFV9eGUCEjkxQCC6xooDYOUGw=="
"requested": "[2024.3.5, )",
"resolved": "2024.3.5",
"contentHash": "KLBgMYx0+/88B1F2V8Qr9J6N51fMxn9jQ1LCF7P4wE6d5R/7qnsz5ahFychICdsiYzQ96ZWJJOTMQjy2hzFOAw=="
},
"Microsoft.Graphics.Win2D": {
"type": "Transitive",
@ -704,15 +645,6 @@
"resolved": "4.7.0",
"contentHash": "ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ=="
},
"System.Text.Encoding.CodePages": {
"type": "Transitive",
"resolved": "4.5.1",
"contentHash": "4J2JQXbftjPMppIHJ7IC+VXQ9XfEagN92vZZNoG12i+zReYlim5dMoXFC1Zzg7tsnKDM7JPo5bYfFK4Jheq44w==",
"dependencies": {
"Microsoft.NETCore.Platforms": "2.1.2",
"System.Runtime.CompilerServices.Unsafe": "4.5.2"
}
},
"System.Text.Encodings.Web": {
"type": "Transitive",
"resolved": "7.0.0",
@ -737,9 +669,9 @@
},
"QuestPDF": {
"type": "Direct",
"requested": "[2024.3.3, )",
"resolved": "2024.3.3",
"contentHash": "S2T+iE8RGw3OCBZ6bZmPhw6oIbXa92MuewcvwzJgeNKGIoc6t1lHnCWwH+UTGVFV9eGUCEjkxQCC6xooDYOUGw=="
"requested": "[2024.3.5, )",
"resolved": "2024.3.5",
"contentHash": "KLBgMYx0+/88B1F2V8Qr9J6N51fMxn9jQ1LCF7P4wE6d5R/7qnsz5ahFychICdsiYzQ96ZWJJOTMQjy2hzFOAw=="
},
"Microsoft.Graphics.Win2D": {
"type": "Transitive",
@ -789,15 +721,6 @@
"resolved": "4.7.0",
"contentHash": "ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ=="
},
"System.Text.Encoding.CodePages": {
"type": "Transitive",
"resolved": "4.5.1",
"contentHash": "4J2JQXbftjPMppIHJ7IC+VXQ9XfEagN92vZZNoG12i+zReYlim5dMoXFC1Zzg7tsnKDM7JPo5bYfFK4Jheq44w==",
"dependencies": {
"Microsoft.NETCore.Platforms": "2.1.2",
"System.Runtime.CompilerServices.Unsafe": "4.5.2"
}
},
"System.Text.Encodings.Web": {
"type": "Transitive",
"resolved": "7.0.0",