1
0
mirror of https://github.com/chylex/TweetDuck.git synced 2025-04-30 05:34:06 +02:00
TweetDuck/Browser/Data/ResourceHandlers.cs

51 lines
1.5 KiB
C#

using System;
using System.Collections.Concurrent;
using CefSharp;
namespace TweetDuck.Browser.Data {
sealed class ResourceHandlers {
private readonly ConcurrentDictionary<string, Func<IResourceHandler>> handlers = new ConcurrentDictionary<string, Func<IResourceHandler>>(StringComparer.OrdinalIgnoreCase);
public bool HasHandler(IRequest request) {
return handlers.ContainsKey(request.Url);
}
public IResourceHandler GetHandler(IRequest request) {
return handlers.TryGetValue(request.Url, out var factory) ? factory() : null;
}
public bool Register(string url, Func<IResourceHandler> factory) {
if (Uri.TryCreate(url, UriKind.Absolute, out Uri uri)) {
handlers.AddOrUpdate(uri.AbsoluteUri, factory, (key, prev) => factory);
return true;
}
return false;
}
public bool Register(ResourceLink link) {
return Register(link.Url, link.Factory);
}
public bool Unregister(string url) {
return handlers.TryRemove(url, out _);
}
public bool Unregister(ResourceLink link) {
return Unregister(link.Url);
}
public static Func<IResourceHandler> ForString(string str) {
return () => ResourceHandler.FromString(str);
}
public static Func<IResourceHandler> ForString(string str, string mimeType) {
return () => ResourceHandler.FromString(str, mimeType: mimeType);
}
public static Func<IResourceHandler> ForBytes(byte[] bytes, string mimeType) {
return () => ResourceHandler.FromByteArray(bytes, mimeType);
}
}
}