using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json.Linq; namespace Online.Controllers { public class Jackett : BaseController { [HttpGet] [Route("lite/jac")] async public ValueTask Index(string title, string original_title, string original_language, int year, int serial, int quality = -1) { if (!AppInit.conf.litejac) return Content(string.Empty); #region Кеш запроса string localhost = $"http://{AppInit.conf.listen.localhost}:{AppInit.conf.listen.port}"; string memkey = $"lite/jac:{title}:{original_title}:{year}"; if (!hybridCache.TryGetValue(memkey, out JArray results, inmemory: false) || quality == -1) { var root = await Http.Get($"{localhost}/api/v2.0/indexers/all/results?apikey={AppInit.conf.apikey}&title={HttpUtility.UrlEncode(title)}&title_original={HttpUtility.UrlEncode(original_title)}&year={year}&is_serial={(original_language == "ja" ? 5 : (serial + 1))}", timeoutSeconds: 11, headers: HeadersModel.Init("localrequest", AppInit.rootPasswd)); if (root == null) return Content(string.Empty, "text/html; charset=utf-8"); results = root.GetValue("Results")?.ToObject(); if (results == null || results.Count == 0) return Content(string.Empty, "text/html; charset=utf-8"); hybridCache.Set(memkey, results, DateTime.Now.AddMinutes(5), inmemory: false); } #endregion bool firstjson = true; string html = string.Empty; #region Меню качества HashSet qualitys = new HashSet(); foreach (var item in results) { var info = item.Value("Info"); if (info != null) qualitys.Add(info.Value("quality")); } html = "
"; foreach (int q in qualitys.OrderByDescending(i => i)) { string link = $"{host}/lite/jac?year={year}&serial={serial}&title={HttpUtility.UrlEncode(title)}&original_title={HttpUtility.UrlEncode(original_title)}&quality={q}"; string active = q == quality ? "active" : ""; html += "
" + $"{q}p" + "
"; firstjson = false; } firstjson = true; html += "
"; #endregion foreach (var item in results) { int sid = item.Value("Seeders"), pir = item.Value("Peers"), q = 0; string magnet = item.Value("MagnetUri"); string tracker = item.Value("Tracker"); string sizeName = null; if (string.IsNullOrWhiteSpace(magnet)) magnet = item.Value("Link").Replace(localhost, host); var info = item.Value("Info"); if (info != null) { q = info.Value("quality"); sizeName = info.Value("sizeName"); if (quality != -1 && quality != q) continue; } html += "
" + item.Value("Title") + $"
Размер {sizeName} / Раздают {sid} / Качают {pir} / {q}p / {tracker}
"; firstjson = false; } return ContentTo(html); } } }