OneDrive Backup

OneDrive Backup
This commit is contained in:
2023-07-28 22:36:06 +07:00
parent e1c6e91a0a
commit d70d81ebdf
244 changed files with 75229 additions and 0 deletions
+164
View File
@@ -0,0 +1,164 @@
using hassio_onedrive_backup.Contracts;
using hassio_onedrive_backup.Hass.Events;
using Newtonsoft.Json;
using onedrive_backup.Contracts;
using System.Diagnostics;
using System.Net.Http;
using static hassio_onedrive_backup.Contracts.HassAddonsResponse;
using static hassio_onedrive_backup.Contracts.HassBackupsResponse;
namespace hassio_onedrive_backup.Hass
{
internal class HassioClientMock : IHassioClient
{
private List<Backup> _backups = new List<Backup>
{
new Backup
{
Compressed = true,
Date = DateTime.Now.AddDays(-10),
Name = "Mock1",
Protected = false,
Size = 1,
Slug = "Mock1",
Type = "partial",
Content = new Content
{
Addons = new string[]
{
"Addon1", "Addon2"
}
}
},
new Backup
{
Compressed = true,
Date = DateTime.Now.AddDays(-1),
Name = "Mock2",
Protected = false,
Size = 2,
Slug = "Mock2",
Type = "full",
Content = new Content
{
Addons = new string[]
{
"Addon1", "Addon2"
},
Folders = new string[]
{
"Folder1"
}
}
}
};
public Task<bool> CreateBackupAsync(string backupName, bool appendTimestamp = true, bool compressed = true, string? password = null, IEnumerable<string>? folders = null, IEnumerable<string>? addons = null)
{
DateTime timeStamp = DateTimeHelper.Instance!.Now;
string finalBackupName = appendTimestamp ? $"{backupName}_{timeStamp.ToString("yyyy-MM-dd-HH-mm")}" : backupName;
var backup = new Backup
{
Compressed = compressed,
Name = finalBackupName,
Protected = !string.IsNullOrEmpty(password),
Type = folders == null && addons == null ? "full" : "partial",
Date = DateTime.Now,
Slug = Guid.NewGuid().ToString()
};
_backups.Add(backup);
return Task.FromResult(true);
}
public Task<bool> DeleteBackupAsync(Backup backup)
{
var backupToRemove = _backups.SingleOrDefault(bck => bck.Slug.Equals(backup.Slug, StringComparison.OrdinalIgnoreCase));
if (backupToRemove != null)
{
_backups.Remove(backupToRemove);
return Task.FromResult(true);
}
return Task.FromResult(false);
}
public Task<string> DownloadBackupAsync(string backupSlug)
{
string backupFile = $"./{backupSlug}.tar";
// 15MB File
byte[] data = new byte[100 * 1024 * 1024];
new Random().NextBytes(data);
File.WriteAllBytes(backupFile, data);
return Task.FromResult(backupFile);
}
public Task<HassAddonInfoResponse> GetAddonInfo(string slug)
{
return Task.FromResult(new HassAddonInfoResponse
{
DataProperty = new HassAddonInfoResponse.Data
{
IngressEntry = "/",
IngressUrl = "/"
}
});
}
public Task<List<HassAddonsResponse.Addon>> GetAddonsAsync()
{
return Task.FromResult(new List<HassAddonsResponse.Addon>()
{
new HassAddonsResponse.Addon{ Slug = "Addon1", Name = "First Addon" },
new HassAddonsResponse.Addon { Slug = "Addon2", Name = "Second Addon" }
});
}
public Task<List<Backup>> GetBackupsAsync(Predicate<Backup> filter)
{
return Task.FromResult(_backups);
}
public Task<string> GetTimeZoneAsync()
{
return Task.FromResult("Local");
}
public Task PublishEventAsync(OneDriveEvents eventType, string payload = "")
{
Debug.WriteLine($"EventType: {eventType}. Payload: {payload}");
return Task.CompletedTask;
}
public Task SendPersistentNotificationAsync(string message)
{
var payload = new
{
message = message,
title = "hassio-onedrive-backup"
};
string payloadStr = JsonConvert.SerializeObject(payload);
Debug.WriteLine(payloadStr);
return Task.CompletedTask;
}
public Task UpdateHassEntityStateAsync(string entityId, string payload)
{
Debug.WriteLine($"EntityId: {entityId}. State: {payload}");
return Task.CompletedTask;
}
public Task<bool> UploadBackupAsync(string filePath)
{
_backups.Add(new Backup
{
Name = Path.GetFileNameWithoutExtension(filePath),
Slug = Guid.NewGuid().ToString()
});
return Task.FromResult(true);
}
}
}