58 lines
2.5 KiB
C#
58 lines
2.5 KiB
C#
using System.Globalization;
|
|
using System.Text.Json;
|
|
using System.Text.Json.Serialization;
|
|
|
|
namespace File_Folder_Helper.Models;
|
|
|
|
internal record NginxFileSystem([property: JsonPropertyName("name")] string Name,
|
|
DateTime? LastModified,
|
|
[property: JsonPropertyName("mtime")] string MTime,
|
|
Uri? URI,
|
|
[property: JsonPropertyName("type")] string Type,
|
|
[property: JsonPropertyName("size")] float? Length)
|
|
{
|
|
|
|
public override string ToString()
|
|
{
|
|
string result = JsonSerializer.Serialize(this, NginxFileSystemSourceGenerationContext.Default.NginxFileSystem);
|
|
return result;
|
|
}
|
|
|
|
public static NginxFileSystem Get(string format, TimeZoneInfo timeZoneInfo, string name, string mTime, Uri uri, string type, float? size)
|
|
{
|
|
NginxFileSystem result;
|
|
DateTime dateTime;
|
|
DateTime? nullableDateTime;
|
|
if (mTime.Length != format.Length + 4 || !DateTime.TryParseExact(mTime[..format.Length], format, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime))
|
|
nullableDateTime = null;
|
|
else
|
|
nullableDateTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(dateTime, mTime[(format.Length + 1)..], timeZoneInfo.Id);
|
|
result = new(name, nullableDateTime, mTime, uri, type, size);
|
|
return result;
|
|
}
|
|
|
|
public static string GetFormat() =>
|
|
"ddd, dd MMM yyyy HH:mm:ss";
|
|
|
|
public static NginxFileSystem Get(string format, TimeZoneInfo timeZoneInfo, Uri uri, NginxFileSystem nginxFileSystem) =>
|
|
Get(format, timeZoneInfo, nginxFileSystem.Name, nginxFileSystem.MTime, uri, nginxFileSystem.Type, nginxFileSystem.Length);
|
|
|
|
}
|
|
|
|
[JsonSourceGenerationOptions(WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)]
|
|
[JsonSerializable(typeof(NginxFileSystem))]
|
|
internal partial class NginxFileSystemSourceGenerationContext : JsonSerializerContext
|
|
{
|
|
}
|
|
|
|
[JsonSourceGenerationOptions(WriteIndented = false, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)]
|
|
[JsonSerializable(typeof(NginxFileSystem))]
|
|
internal partial class NginxFileSystemSingleLineSourceGenerationContext : JsonSerializerContext
|
|
{
|
|
}
|
|
|
|
[JsonSourceGenerationOptions(WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)]
|
|
[JsonSerializable(typeof(NginxFileSystem[]))]
|
|
internal partial class NginxFileSystemCollectionSourceGenerationContext : JsonSerializerContext
|
|
{
|
|
} |