using System; using System.Collections.Generic; using System.Data; using System.Threading; using System.Threading.Tasks; using Duplicati.Library.Interface; using Duplicati.Library.Main.Database; using Duplicati.Library.Main.Volumes; using Duplicati.Library.Utility; using IFileEntry = Duplicati.Library.Interface.IFileEntry; #nullable enable namespace Duplicati.Library.Main; /// /// Interface for the backend manager /// internal interface IBackendManager : IDisposable { /// /// Uploads a block volume to the backend, including an optional index volume /// /// The block volume to upload /// The index volume to upload, if any /// The action to call when the index volume is finished /// Whether to wait for the upload to complete /// The cancellation token /// An awaitable task Task PutAsync(VolumeWriterBase blockVolume, IndexVolumeWriter? indexVolume, Action? indexVolumeFinished, bool waitForComplete, CancellationToken cancelToken); /// /// Uploads a file to the backend without encryption /// /// The name of the file to upload to /// The file to upload /// The cancellation token /// An awaitable task Task PutVerificationFileAsync(string remotename, TempFile tempFile, CancellationToken cancelToken); /// /// Waits for the backend queue to be empty and flushes any pending messages to the database /// /// The database to write pending messages to /// The transaction to use, if any /// The cancellation token /// An awaitable task Task WaitForEmptyAsync(LocalDatabase database, IDbTransaction? transaction, CancellationToken cancellationToken); /// /// Lists the files on the backend /// /// The cancellation token /// An enumerable of file entries Task> ListAsync(CancellationToken cancelToken); /// /// Decrypts the given file and returns the decrypted file /// /// The file to decrypt /// The name of the file. Used for detecting encryption algorithm if not specified in options or if it differs from the options /// The Duplicati options /// The decrypted file TempFile DecryptFile(TempFile volume, string volume_name, Options options); /// /// Deletes a file on the backend /// /// The name of the file to delete /// The size of the file to delete, or -1 if not known /// Whether to wait for the delete to complete /// The cancellation token /// An awaitable task Task DeleteAsync(string remotename, long size, bool waitForComplete, CancellationToken cancelToken); /// /// Gets the quota information for the backend /// /// The cancellation token /// The quota information, or null if not available or disabled Task GetQuotaInfoAsync(CancellationToken cancelToken); /// /// Gets a file with the hash and size /// /// The name of the file to get /// The hash of the file to get, or null if not known /// The size of the file to get, or -1 if not known /// The cancellation token /// The file, hash, and size Task<(TempFile File, string Hash, long Size)> GetWithInfoAsync(string remotename, string hash, long size, CancellationToken cancelToken); /// /// Gets a file from the backend /// /// The name of the file to get /// The hash of the file to get, or null if not known /// The size of the file to get, or -1 if not known /// The cancellation token /// The downloaded file Task GetAsync(string remotename, string hash, long size, CancellationToken cancelToken); /// /// Gets a file from the backend without decrypting it /// /// The name of the remote volume /// The hash of the volume /// The size of the volume /// The cancellation token /// The downloaded file Task GetDirectAsync(string remotename, string hash, long size, CancellationToken cancelToken); /// /// Performs a download of the files specified, with pre-fetch to overlap the download and processing /// /// The volumes to download /// The cancellation token /// The downloaded files, hash, size, and name IAsyncEnumerable<(TempFile File, string Hash, long Size, string Name)> GetFilesOverlappedAsync(IEnumerable volumes, CancellationToken cancelToken); /// /// Gets the size of the last read operation /// long LastReadSize { get; } /// /// Gets the size of the last write operation /// long LastWriteSize { get; } }