using System.Threading.Tasks; using MyAnimeListSharp.Auth; using MyAnimeListSharp.Core; using MyAnimeListSharp.Facade.Async; using Serilog; using StackExchange.Redis; namespace Geekbot.net.Lib { public class MalClient : IMalClient { private readonly IDatabase _redis; private readonly ILogger _logger; private ICredentialContext _credentials; private AnimeSearchMethodsAsync _animeSearch; private MangaSearchMethodsAsync _mangaSearch; public MalClient(IDatabase redis, ILogger logger) { _redis = redis; _logger = logger; reloadClient(); } public bool reloadClient() { var malCredentials = _redis.HashGetAll("malCredentials"); if (malCredentials.Length != 0) { _credentials = new CredentialContext(); foreach (var c in malCredentials) { switch (c.Name) { case "Username": _credentials.UserName = c.Value; break; case "Password": _credentials.Password = c.Value; break; } } _animeSearch = new AnimeSearchMethodsAsync(_credentials); _mangaSearch = new MangaSearchMethodsAsync(_credentials); _logger.Verbose($"[Geekbot] [MalClient] Logged in to Mal"); return true; } _logger.Warning("[Geekbot] [MalClient] No Credentials Set!"); return false; } public bool isLoggedIn() { return _credentials != null; } public async Task getAnime(string query) { var response = await _animeSearch.SearchDeserializedAsync(query); return response.Entries.Count == 0 ? null : response.Entries[0]; } public async Task getManga(string query) { var response = await _mangaSearch.SearchDeserializedAsync(query); return response.Entries.Count == 0 ? null : response.Entries[0]; } } public interface IMalClient { bool reloadClient(); bool isLoggedIn(); Task getAnime(string query); Task getManga(string query); } }