using System; using System.IO; namespace UniGLTF { public interface IStorage { ArraySegment Get(string url); /// /// Get original filepath if exists /// /// /// string GetPath(string url); } public class SimpleStorage : IStorage { ArraySegment m_bytes; public SimpleStorage():this(new ArraySegment()) { } public SimpleStorage(ArraySegment bytes) { m_bytes = bytes; } public ArraySegment Get(string url) { return m_bytes; } public string GetPath(string url) { return null; } } public class FileSystemStorage : IStorage { string m_root; public FileSystemStorage(string root) { m_root = Path.GetFullPath(root); } public ArraySegment Get(string url) { var bytes = (url.StartsWith("data:")) ? UriByteBuffer.ReadEmbeded(url) : File.ReadAllBytes(Path.Combine(m_root, url)) ; return new ArraySegment(bytes); } public string GetPath(string url) { if (url.StartsWith("data:")) { return null; } else { return Path.Combine(m_root, url).Replace("\\", "/"); } } } }