Fix downloadFile
This commit is contained in:
6
salesbook.Maui/Core/Interface/IFilePreviewService.cs
Normal file
6
salesbook.Maui/Core/Interface/IFilePreviewService.cs
Normal file
@@ -0,0 +1,6 @@
|
||||
namespace salesbook.Maui.Core.Interface;
|
||||
|
||||
public interface IFilePreviewService
|
||||
{
|
||||
Task Preview(string fileName, string filePath);
|
||||
}
|
||||
@@ -1,9 +1,10 @@
|
||||
using salesbook.Shared.Core.Dto;
|
||||
using salesbook.Maui.Core.Interface;
|
||||
using salesbook.Shared.Core.Dto;
|
||||
using salesbook.Shared.Core.Interface;
|
||||
|
||||
namespace salesbook.Maui.Core.Services;
|
||||
|
||||
public class AttachedService : IAttachedService
|
||||
public class AttachedService(IFilePreviewService filePreviewService) : IAttachedService
|
||||
{
|
||||
public async Task<AttachedDTO?> SelectImageFromCamera()
|
||||
{
|
||||
@@ -95,48 +96,34 @@ public class AttachedService : IAttachedService
|
||||
};
|
||||
}
|
||||
|
||||
private static async Task<string?> SaveToTempStorage(Stream file, string fileName)
|
||||
public async Task<string> SaveToTempStorage(Stream file, string fileName, CancellationToken ct = default)
|
||||
{
|
||||
var cacheDirectory = FileSystem.CacheDirectory;
|
||||
var targetDirectory = Path.Combine(cacheDirectory, "file");
|
||||
ArgumentNullException.ThrowIfNull(file);
|
||||
|
||||
if (!Directory.Exists(targetDirectory)) Directory.CreateDirectory(targetDirectory);
|
||||
if (file.CanSeek)
|
||||
file.Position = 0;
|
||||
|
||||
var tempFilePath = Path.Combine(targetDirectory, fileName + ".temp");
|
||||
var filePath = Path.Combine(targetDirectory, fileName);
|
||||
fileName = Path.GetFileName(fileName);
|
||||
|
||||
if (File.Exists(filePath)) return filePath;
|
||||
var dir = FileSystem.CacheDirectory;
|
||||
var filePath = Path.Combine(dir, fileName);
|
||||
|
||||
try
|
||||
{
|
||||
await using var fileStream =
|
||||
new FileStream(tempFilePath, FileMode.Create, FileAccess.Write, FileShare.None);
|
||||
await file.CopyToAsync(fileStream);
|
||||
|
||||
File.Move(tempFilePath, filePath);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine($"Errore durante il salvataggio dello stream: {e.Message}");
|
||||
SentrySdk.CaptureException(e);
|
||||
return null;
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (File.Exists(tempFilePath)) File.Delete(tempFilePath);
|
||||
}
|
||||
await using var fileStream = File.Create(filePath);
|
||||
await file.CopyToAsync(fileStream, ct);
|
||||
|
||||
return filePath;
|
||||
}
|
||||
|
||||
public async Task OpenFile(Stream file, string fileName)
|
||||
public Task OpenFile(string fileName, string filePath)
|
||||
{
|
||||
var filePath = await SaveToTempStorage(file, fileName);
|
||||
|
||||
if (filePath is null) return;
|
||||
await Launcher.OpenAsync(new OpenFileRequest
|
||||
#if IOS
|
||||
return filePreviewService.Preview(fileName, filePath);
|
||||
#else
|
||||
return Launcher.OpenAsync(new OpenFileRequest
|
||||
{
|
||||
Title = "Apri file",
|
||||
File = new ReadOnlyFile(filePath)
|
||||
});
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,8 @@ using Microsoft.AspNetCore.Components.Authorization;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using MudBlazor.Services;
|
||||
using MudExtensions.Services;
|
||||
using salesbook.Maui.Core;
|
||||
using salesbook.Maui.Core.Interface;
|
||||
using salesbook.Maui.Core.RestClient.IntegryApi;
|
||||
using salesbook.Maui.Core.Services;
|
||||
using salesbook.Maui.Core.System;
|
||||
@@ -106,6 +108,7 @@ namespace salesbook.Maui
|
||||
builder.Services.AddSingleton<INetworkService, NetworkService>();
|
||||
builder.Services.AddSingleton<IGenericSystemService, GenericSystemService>();
|
||||
builder.Services.AddSingleton<LocalDbService>();
|
||||
builder.Services.AddSingleton<IFilePreviewService, FilePreviewService>();
|
||||
|
||||
_ = typeof(System.Runtime.InteropServices.SafeHandle);
|
||||
_ = typeof(System.IO.FileStream);
|
||||
|
||||
11
salesbook.Maui/Platforms/Android/Core/FilePreviewService.cs
Normal file
11
salesbook.Maui/Platforms/Android/Core/FilePreviewService.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
using salesbook.Maui.Core.Interface;
|
||||
|
||||
namespace salesbook.Maui.Core;
|
||||
|
||||
public class FilePreviewService :IFilePreviewService
|
||||
{
|
||||
public Task Preview(string fileName, string filePath)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
24
salesbook.Maui/Platforms/iOS/Core/FilePreviewService.cs
Normal file
24
salesbook.Maui/Platforms/iOS/Core/FilePreviewService.cs
Normal file
@@ -0,0 +1,24 @@
|
||||
using QuickLook;
|
||||
using salesbook.Maui.Core.Interface;
|
||||
using salesbook.Maui.Helpers;
|
||||
using UIKit;
|
||||
|
||||
namespace salesbook.Maui.Core;
|
||||
|
||||
public class FilePreviewService : IFilePreviewService
|
||||
{
|
||||
public Task Preview(string fileName, string filePath)
|
||||
{
|
||||
var currentController = UIApplication.SharedApplication.KeyWindow?.RootViewController;
|
||||
while (currentController?.PresentedViewController != null)
|
||||
currentController = currentController.PresentedViewController;
|
||||
|
||||
var currentView = currentController?.View;
|
||||
var qLPreview = new QLPreviewController();
|
||||
var item = new QlPreviewItemBundle(fileName, filePath);
|
||||
qLPreview.DataSource = new PreviewControllerDs(item);
|
||||
currentController?.PresentViewController(qLPreview, true, null);
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
16
salesbook.Maui/Platforms/iOS/Helpers/PreviewControllerDs.cs
Normal file
16
salesbook.Maui/Platforms/iOS/Helpers/PreviewControllerDs.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using QuickLook;
|
||||
|
||||
namespace salesbook.Maui.Helpers;
|
||||
|
||||
public class PreviewControllerDs(QLPreviewItem item) : QLPreviewControllerDataSource
|
||||
{
|
||||
public override nint PreviewItemCount(QLPreviewController controller)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
public override IQLPreviewItem GetPreviewItem(QLPreviewController controller, nint index)
|
||||
{
|
||||
return item;
|
||||
}
|
||||
}
|
||||
19
salesbook.Maui/Platforms/iOS/Helpers/QlPreviewItemBundle.cs
Normal file
19
salesbook.Maui/Platforms/iOS/Helpers/QlPreviewItemBundle.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
using Foundation;
|
||||
using QuickLook;
|
||||
|
||||
namespace salesbook.Maui.Helpers;
|
||||
|
||||
public class QlPreviewItemBundle(string fileName, string filePath) : QLPreviewItem
|
||||
{
|
||||
public override string PreviewItemTitle => fileName;
|
||||
public override NSUrl PreviewItemUrl
|
||||
{
|
||||
get
|
||||
{
|
||||
var documents = NSBundle.MainBundle.BundlePath;
|
||||
var lib = Path.Combine(documents, filePath);
|
||||
var url = NSUrl.FromFilename(lib);
|
||||
return url;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
using Foundation;
|
||||
using QuickLook;
|
||||
|
||||
namespace salesbook.Maui.Helpers;
|
||||
|
||||
public class QlPreviewItemFileSystem(string fileName, string filePath) : QLPreviewItem
|
||||
{
|
||||
public override string PreviewItemTitle => fileName;
|
||||
|
||||
public override NSUrl PreviewItemUrl => NSUrl.FromString(filePath);
|
||||
|
||||
}
|
||||
@@ -156,7 +156,7 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="CommunityToolkit.Maui" Version="12.2.0" />
|
||||
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
|
||||
<PackageReference Include="IntegryApiClient.MAUI" Version="1.2.2" />
|
||||
<PackageReference Include="IntegryApiClient.MAUI" Version="1.2.3" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="9.0.10" />
|
||||
<PackageReference Include="Microsoft.Maui.Controls" Version="9.0.120" />
|
||||
<PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="9.0.120" />
|
||||
|
||||
Reference in New Issue
Block a user