Esempio n. 1
0
 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);
     }
 }
Esempio n. 2
0
        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);
        }