- Handled shows announced with seasons > 1 - Handled cases where status posting failed
79 lines
2.2 KiB
C#
79 lines
2.2 KiB
C#
using System.Security.Cryptography;
|
|
using System.Text.Json;
|
|
using StackExchange.Redis;
|
|
using TMDbLib.Utilities.Converters;
|
|
|
|
namespace AnimeAnnouncer.Cache;
|
|
|
|
public class TMDBCache
|
|
{
|
|
private readonly ConnectionMultiplexer redis;
|
|
|
|
public TimeSpan CacheExpiration { get; set; }
|
|
|
|
|
|
public TMDBCache(String redisConnectionString)
|
|
{
|
|
CacheExpiration = TimeSpan.FromDays(3);
|
|
redis = ConnectionMultiplexer.Connect(redisConnectionString);
|
|
}
|
|
public async Task SetCacheItem(String key, TMDBCacheItem item)
|
|
{
|
|
var db = redis.GetDatabase();
|
|
|
|
String jsonItem = JsonSerializer.Serialize(item);
|
|
await db.StringSetAsync(key, jsonItem, CacheExpiration);
|
|
}
|
|
public async Task<TMDBCacheItem> GetCacheItem(String key)
|
|
{
|
|
var db = redis.GetDatabase();
|
|
String jsonItem = await db.StringGetAsync(key);
|
|
|
|
if (!String.IsNullOrEmpty(jsonItem))
|
|
return JsonSerializer.Deserialize<TMDBCacheItem>(jsonItem);
|
|
else
|
|
return null;
|
|
}
|
|
|
|
public async Task RemoveCacheItem(String key)
|
|
{
|
|
var db = redis.GetDatabase();
|
|
_ = await db.KeyDeleteAsync(key);
|
|
}
|
|
|
|
public async Task SetAiringSoon(List<AiringSoonItem> list)
|
|
{
|
|
var db = redis.GetDatabase();
|
|
String jsonItem = JsonSerializer.Serialize(list);
|
|
await db.StringSetAsync("AiringSoon", jsonItem, TimeSpan.FromDays(60));
|
|
}
|
|
|
|
|
|
public async Task<List<AiringSoonItem>> GetAiringList()
|
|
{
|
|
var db = redis.GetDatabase();
|
|
|
|
String jsonItem = await db.StringGetAsync("AiringSoon");
|
|
|
|
if (!String.IsNullOrEmpty(jsonItem))
|
|
return JsonSerializer.Deserialize<List<AiringSoonItem>>(jsonItem);
|
|
else
|
|
return null;
|
|
}
|
|
public async Task<bool> KeyExists(String key)
|
|
{
|
|
var db = redis.GetDatabase();
|
|
return await db.KeyExistsAsync(key);
|
|
}
|
|
public async Task SetPair(String key, String value)
|
|
{
|
|
var db = redis.GetDatabase();
|
|
await db.StringSetAsync(key, value);
|
|
}
|
|
public async Task<String?> GetStringValue(String key)
|
|
{
|
|
var db = redis.GetDatabase();
|
|
return await db.StringGetAsync(key);
|
|
}
|
|
}
|