protected override void OnUnload(EventArgs e) { base.OnUnload(e); // If lookup returned a results provider, dispose it if (prov != null) { prov.Dispose(); } // If we had a POST query, log it if (queryInfo != null && !isStaticQuery) { TimeSpan tsLookup = queryInfo.DTLookup.Subtract(queryInfo.DTStart); TimeSpan tsTotal = DateTime.UtcNow.Subtract(queryInfo.DTStart); QueryLogger.SearchMode smode = QueryLogger.SearchMode.Target; if (queryInfo.Lang == SearchLang.Target) { smode = QueryLogger.SearchMode.Target; } else if (queryInfo.ResCount > 0) { smode = QueryLogger.SearchMode.Source; } else if (queryInfo.AnnCount > 0) { smode = QueryLogger.SearchMode.Annotate; } int cnt = smode == QueryLogger.SearchMode.Annotate ? queryInfo.AnnCount : queryInfo.ResCount; QueryLogger.Instance.LogQuery(queryInfo.HostAddr, isMobile, Master.UILang, Master.UiScript, Master.UiTones, cnt, (int)tsLookup.TotalMilliseconds, (int)tsTotal.TotalMilliseconds, smode, queryInfo.Query); } }
private PageResult doSearchInner(string rel, string lang, string searchScript, string searchTones, bool isMobile, out string query) { query = ""; if (rel == "" || rel == "search" || rel == "search/") { return(doWelcome(lang)); } Stopwatch swatch = new Stopwatch(); swatch.Restart(); PageResult pr; // Search settings UiScript uiScript = UiScript.Both; if (searchScript == "simp") { uiScript = UiScript.Simp; } else if (searchScript == "trad") { uiScript = UiScript.Trad; } UiTones uiTones = UiTones.Pleco; if (searchTones == "dummitt") { uiTones = UiTones.Dummitt; } else if (searchTones == "none") { uiTones = UiTones.None; } // Perform query query = rel.Replace("search/", ""); query = query.Trim(); query = WebUtility.UrlDecode(query); query = query.Trim(); CedictLookupResult lr = dict.Lookup(query); int msecLookup = (int)swatch.ElapsedMilliseconds; int msecFull = msecLookup; // No results if (lr.Results.Count == 0 && lr.Annotations.Count == 0) { pr = pageProvider.GetPage(lang, "?/noresults", false); pr.Data = query; // Can add word now? if (canAddWord(query)) { pr.Html = pr.Html.Replace("{addnowclass}", "visible"); } else { pr.Html = pr.Html.Replace("{addnowclass}", ""); } } else { // Render results StringBuilder sb = new StringBuilder(); ResultsRenderer rr = new ResultsRenderer(lang, lr, uiScript, uiTones); rr.Render(sb, lang); // Title string title; if (lr.ActualSearchLang == SearchLang.Chinese) { title = TextProvider.Instance.Mut == Mutation.CHD ? TextProvider.Instance.GetString(lang, "misc.searchResultTitleCHD") : TextProvider.Instance.GetString(lang, "misc.searchResultTitleHDD"); } else { title = TextProvider.Instance.Mut == Mutation.CHD ? TextProvider.Instance.GetString(lang, "misc.searchResultTitleTrgCHD") : TextProvider.Instance.GetString(lang, "misc.searchResultTitleTrgHDD"); } title = string.Format(title, query); msecFull = (int)swatch.ElapsedMilliseconds; // Wrap up pr = new PageResult { RelNorm = rel, Title = title, Html = sb.ToString(), Data = query, }; } // Query log string country; string xfwd = HttpContext.Request.Headers["X-Real-IP"]; if (xfwd != null) { country = cres.GetContryCode(IPAddress.Parse(xfwd)); } else { country = cres.GetContryCode(HttpContext.Connection.RemoteIpAddress); } int resCount = lr.Results.Count > 0 ? lr.Results.Count : lr.Annotations.Count; QueryLogger.SearchMode smode = QueryLogger.SearchMode.Target; if (lr.ActualSearchLang == SearchLang.Target) { smode = QueryLogger.SearchMode.Target; } else if (lr.Results.Count > 0) { smode = QueryLogger.SearchMode.Source; } else if (lr.Annotations.Count > 0) { smode = QueryLogger.SearchMode.Annotate; } qlog.LogQuery(country, isMobile, lang, uiScript, uiTones, resCount, msecLookup, msecFull, smode, query); // Done return(pr); }