4.1 KiB
UpdateBackupService.cs
Source:
src/EchoHub.Client/Services/UpdateBackupService.cs
Contents
BackupJsonContext
File:
src/EchoHub.Client/Services/UpdateBackupService.cs
Kind: class
[System.Text.Json.Serialization.JsonSerializable(typeof(BackupInfo))]
internal partial class BackupJsonContext : System.Text.Json.Serialization.JsonSerializerContext
Defines a source-generated JSON serialization context for BackupInfo by annotating the internal partial class BackupJsonContext with JsonSerializable(typeof(BackupInfo)). This enables high-performance, reflection-free JSON serialization and deserialization via System.Text.Json's source generator when working with BackupInfo.
Remarks
By centralizing the JSON metadata in BackupJsonContext, the codebase gains a single, version-stable contract for serializing BackupInfo. The generated JsonTypeInfo<BackupInfo> exposed as BackupJsonContext.Default.BackupInfo is consumed by JsonSerializer overloads that accept type metadata, reducing runtime reflection and enabling better inlining and optimization. This scope-limited context also makes it straightforward to extend serialization support to additional related types by extending the same context without changing call-sites.
UpdateBackupService
File:
src/EchoHub.Client/Services/UpdateBackupService.cs
Kind: class
public static class UpdateBackupService
UpdateBackupService is a centralized helper that manages pre-update backups and rollback restoration for the auto-updater. It stores backups under the user profile in ~/.echohub/update-backup/ and exposes operations to create a snapshot, verify an existing backup, and read its metadata. Before applying an update, CreateBackup() snapshots the current application directory (via AppContext.BaseDirectory) into a ZIP named backup.zip and writes a backup-info.json containing the version, app directory, and timestamp. It skips log files to avoid locking issues, uses CompressionLevel.Fastest for speed, and annotates the backup with the current version from UpdateChecker.CurrentVersion. BackupExists() checks for the presence of both backup.zip and backup-info.json, while GetBackupInfo() reads and deserializes the metadata using BackupJsonContext.Default.BackupInfo. The IsPostUpdate flag signals that a post-update backup was produced and may influence rollback or recovery flow.
BackupInfo
File:
src/EchoHub.Client/Services/UpdateBackupService.cs
Kind: record
public record BackupInfo(
string Version,
string AppDirectory,
DateTimeOffset CreatedAt)
Parameters:
| Parameter | Type | Default |
|---|---|---|
Version |
string |
— |
AppDirectory |
string |
— |
CreatedAt |
DateTimeOffset |
— |
BackupInfo is a record that encapsulates the metadata for a backup produced by the application. It aggregates the Version string, the AppDirectory path where the backup resides, and the creation timestamp CreatedAt as a DateTimeOffset, providing a single, immutable value that callers can transport, compare, or display without reconstructing individual fields. Use this type whenever you need to pass around a complete snapshot of backup identity and location rather than scattering primitive values.
Remarks
Because BackupInfo is a record, it provides value-based equality and immutability, so two backups with the same Version, AppDirectory, and CreatedAt compare as equal. This makes it ideal as a transport object across service boundaries and as a stable key or result in collections. It also supports deconstruction, enabling concise extraction of its three fields when needed.
Notes
- This object is immutable; its properties are set at construction time and cannot be changed afterward.
- The
CreatedAtvalue usesDateTimeOffsetto preserve the exact point in time including offset, which is important for cross-system backups and logs.