using System.Collections.Concurrent; using System.Collections.Frozen; using System.Collections.ObjectModel; using System.Security.Cryptography; using System.Text.Json; using System.Text.Json.Nodes; using System.Text.Json.Serialization; using ArcaneLibs; using ArcaneLibs.Collections; using ArcaneLibs.Extensions; using LibMatrix.EventTypes; using LibMatrix.EventTypes.Spec.State; using LibMatrix.Responses; namespace LibMatrix.HomeserverEmulator.Services; public class MediaStore { private readonly HSEConfiguration _config; private List index = new(); public MediaStore(HSEConfiguration config) { _config = config; if (config.StoreData) { var path = Path.Combine(config.DataStoragePath, "media"); if (!Directory.Exists(path)) Directory.CreateDirectory(path); if(File.Exists(Path.Combine(path, "index.json"))) index = JsonSerializer.Deserialize>(File.ReadAllText(Path.Combine(path, "index.json"))); } else Console.WriteLine("Data storage is disabled, not loading rooms from disk"); } public async Task UploadMedia(string userId, string mimeType, Stream stream, string? filename = null) { var mediaId = $"mxc://{Guid.NewGuid().ToString()}"; var path = Path.Combine(_config.DataStoragePath, "media", mediaId); if (!Directory.Exists(path)) Directory.CreateDirectory(path); var file = Path.Combine(path, filename ?? "file"); await using var fs = File.Create(file); await stream.CopyToAsync(fs); index.Add(new() { }); return media; } public class MediaInfo { } }