feat: 初始功能

This commit is contained in:
Shiqvlizi Name
2026-05-23 18:16:50 +08:00
parent a5bfd8792e
commit 9a51259e9e
63 changed files with 5377 additions and 1 deletions

View File

@@ -0,0 +1,9 @@
using CloudPrint.Client.Models;
namespace CloudPrint.Client.Services.Abstractions;
public interface IAppLogger
{
string LogDirectory { get; }
void Write(AppLogEntry entry);
}

View File

@@ -0,0 +1,16 @@
using CloudPrint.Client.Models;
namespace CloudPrint.Client.Services.Abstractions;
public interface IFileService
{
long MaxFileSizeBytes { get; }
IReadOnlyCollection<string> SupportedExtensions { get; }
bool IsSupported(string path);
FileValidationResult ValidateFile(string path, long? maxFileSizeBytes = null);
CloudPrintDocument CreateLocalDocument(string path);
CloudPrintDocument CopyToLibrary(string sourcePath, string libraryRoot, string categoryName, int categoryId = 0);
string PrepareForPrint(PrintJob job);
Task<FilePreparationResult> PrepareForPrintAsync(PrintJob job, string cacheRoot, CancellationToken cancellationToken = default);
}

View File

@@ -0,0 +1,27 @@
using CloudPrint.Client.Models;
namespace CloudPrint.Client.Services.Abstractions;
public interface IPrintBackendClient : IAsyncDisposable
{
event EventHandler<PrintJobReceivedEventArgs>? PrintJobReceived;
event EventHandler<AppLogEntry>? LogReceived;
bool IsConnected { get; }
int PrinterId { get; }
string Token { get; }
AdminSession AdminSession { get; }
Task ConnectAsync(string address, string apiKey, CancellationToken cancellationToken = default);
Task<AdminSession> LoginAdminAsync(string username, string password, CancellationToken cancellationToken = default);
void SetAdminToken(string username, string accessToken);
void LogoutAdmin();
Task RegisterPrinterAsync(PrinterInfo printer, string apiKey, CancellationToken cancellationToken = default);
Task SubscribePrintJobsAsync(PrinterInfo printer, CancellationToken cancellationToken = default);
Task<string> DownloadPrintFileAsync(PrintJob job, string cacheRoot, CancellationToken cancellationToken = default);
Task UploadLibraryDocumentAsync(CloudPrintDocument document, CancellationToken cancellationToken = default);
Task CancelPrintJobAsync(PrintJob job, CancellationToken cancellationToken = default);
Task SendStatusUpdateAsync(PrintJob job, CancellationToken cancellationToken = default);
Task SendHeartbeatAsync(PrinterInfo printer, CancellationToken cancellationToken = default);
void Disconnect();
}

View File

@@ -0,0 +1,13 @@
using CloudPrint.Client.Models;
namespace CloudPrint.Client.Services.Abstractions;
public interface IPrintService
{
IReadOnlyList<PrinterInfo> GetPrinters();
PrinterStatus GetPrinterStatus(string printerName);
Task<string> SubmitPrintJobAsync(PrintJob job, IProgress<int>? progress = null, CancellationToken cancellationToken = default);
bool CancelPrintJob(string jobId);
bool CancelPrintJob(PrintJob job);
PrintJobStatus GetJobStatus(string jobId);
}

View File

@@ -0,0 +1,7 @@
namespace CloudPrint.Client.Services.Abstractions;
public interface ISecretProtector
{
string Protect(string plainText);
string Unprotect(string protectedText);
}

View File

@@ -0,0 +1,9 @@
using CloudPrint.Client.Models;
namespace CloudPrint.Client.Services.Abstractions;
public interface ISettingsService
{
ClientSettings Load();
void Save(ClientSettings settings);
}

View File

@@ -0,0 +1,14 @@
using CloudPrint.Client.Models;
namespace CloudPrint.Client.Services.Abstractions;
public interface IWebSocketService
{
event EventHandler<AppLogEntry>? LogReceived;
bool IsConnected { get; }
Uri? Endpoint { get; }
Task ConnectAsync(Uri endpoint, CancellationToken cancellationToken = default);
Task DisconnectAsync(CancellationToken cancellationToken = default);
}