Files
NebulaLauncher/Nebula.Shared/FileApis/HashApi.cs

72 lines
2.1 KiB
C#
Raw Normal View History

2025-03-13 14:58:47 +03:00
using System.Collections.Frozen;
using System.Collections.ObjectModel;
using System.Diagnostics.CodeAnalysis;
using Nebula.Shared.FileApis.Interfaces;
2025-01-19 22:52:29 +03:00
using Nebula.Shared.Models;
2024-12-22 16:38:47 +03:00
using Robust.LoaderApi;
2025-01-05 17:05:23 +03:00
namespace Nebula.Shared.FileApis;
2024-12-22 16:38:47 +03:00
public class HashApi : IFileApi
{
2025-03-13 14:58:47 +03:00
private readonly IReadWriteFileApi _fileApi;
private readonly Dictionary<string, RobustManifestItem> _manifest;
public IReadOnlyDictionary<string, RobustManifestItem> Manifest => _manifest;
2024-12-22 16:38:47 +03:00
2025-03-13 14:58:47 +03:00
public HashApi(List<RobustManifestItem> manifest, IReadWriteFileApi fileApi)
2024-12-22 16:38:47 +03:00
{
_fileApi = fileApi;
2025-03-13 14:58:47 +03:00
_manifest = new Dictionary<string, RobustManifestItem>();
foreach (var item in manifest) _manifest.TryAdd(item.Path, item);
2024-12-22 16:38:47 +03:00
}
2025-01-19 22:52:29 +03:00
public bool TryOpen(string path,[NotNullWhen(true)] out Stream? stream)
2024-12-22 16:38:47 +03:00
{
if (path[0] == '/') path = path.Substring(1);
2025-03-13 14:58:47 +03:00
if (_manifest.TryGetValue(path, out var a) && _fileApi.TryOpen(GetManifestPath(a), out stream))
2024-12-22 16:38:47 +03:00
return true;
stream = null;
return false;
}
2025-03-13 14:58:47 +03:00
public bool TryOpen(RobustManifestItem item ,[NotNullWhen(true)] out Stream? stream){
if(_fileApi.TryOpen(GetManifestPath(item), out stream))
return true;
stream = null;
return false;
}
public bool TryOpenByHash(string hash ,[NotNullWhen(true)] out Stream? stream){
if(_fileApi.TryOpen(GetManifestPath(hash), out stream))
return true;
stream = null;
return false;
}
public bool Save(RobustManifestItem item, Stream stream){
return _fileApi.Save(GetManifestPath(item), stream);
}
public bool Has(RobustManifestItem item){
return _fileApi.Has(GetManifestPath(item));
}
2025-07-02 21:32:51 +03:00
public bool Remove(RobustManifestItem item)
{
return _fileApi.Remove(GetManifestPath(item));
}
2025-03-13 14:58:47 +03:00
private string GetManifestPath(RobustManifestItem item){
return GetManifestPath(item.Hash);
}
public static string GetManifestPath(string hash){
return hash[0].ToString() + hash[1].ToString() + '/' + hash;
}
public IEnumerable<string> AllFiles => _manifest.Keys;
2024-12-22 16:38:47 +03:00
}