using LibationFileManager;
using LibationUiBase.Forms;
using System.Threading.Tasks;
namespace LibationUiBase;
///
/// Optional bulk-backup gate before titles are queued. Skipped for single-book backups.
/// Network paths that do not report free space pass through with no dialog; failures are handled at download time.
///
public static class DiskSpaceBackupPreflight
{
private const int BulkBackupBookThreshold = 2;
private static bool bulkPreflightConfirmedForQueueRun;
/// Clears the per-queue-run preflight flag when the backup queue finishes.
public static void ResetBulkPreflightForQueueRun() => bulkPreflightConfirmedForQueueRun = false;
public static async Task ConfirmBulkBackupAsync(
int bookCount,
Configuration config,
bool backupQueueAlreadyRunning = false)
{
if (bookCount < BulkBackupBookThreshold
|| backupQueueAlreadyRunning
|| bulkPreflightConfirmedForQueueRun)
return true;
var drives = DiskSpaceHelper.GetBackupDriveSpaces(config, bookCount);
if (DiskSpaceHelper.HasSufficientSpaceForBulkBackup(drives))
{
bulkPreflightConfirmedForQueueRun = true;
return true;
}
if (DiskSpaceHelper.AnyDriveCriticallyLow(drives))
{
await MessageBoxBase.Show(
DiskFullUserMessage.BuildPreflightBlockedBody(drives, bookCount),
DiskFullUserMessage.DialogCaption,
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
return false;
}
var result = await MessageBoxBase.Show(
DiskFullUserMessage.BuildPreflightWarningBody(drives, bookCount),
DiskFullUserMessage.DialogCaption,
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2);
if (result == DialogResult.Yes)
bulkPreflightConfirmedForQueueRun = true;
return result == DialogResult.Yes;
}
}