public void Special__gen(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoa_url url, Xoa_ttl ttl) { int slash_pos = Bry_find_.Find_fwd(ttl.Page_txt_wo_qargs(), Xoa_ttl.Subpage_spr); // check for slash byte[] special_name = slash_pos == Bry_find_.Not_found ? ttl .Base_txt_wo_qarg() // no slash found; use base_txt; ignore qry args and just get // page_names; EX: Search/Earth?fulltext=y; // Allpages?from=Earth... : Bry_.Mid( ttl.Page_txt_wo_qargs(), 0, slash_pos); // slash found; use root page; EX: Special:ItemByTitle/enwiki/Earth special_name = Xoa_ttl.Replace_spaces(special_name); // handle spaces; EX:Spezial:Zufällige_Seite Xow_special_page special = (Xow_special_page) hash.Get_by_bry(special_name); if (special != null) { // special found; generate it; special = special.Special__clone(); page.Db().Page().Modified_on_(Datetime_now.Get()); try { special.Special__gen(wiki, page, url, ttl); } catch (Exception e) { Gfo_log_.Instance.Warn( "failed to generate special page", "url", url.To_str(), "err", Err_.Message_gplx_log(e)); } } }
public Xow_special_mgr(Xowe_wiki wiki, Xol_lang_itm lang) { this.app = wiki.App(); hash = Hash_adp_bry.ci_u8(lang.Case_mgr()); page_allpages = new Xows_page_allpages(wiki); page_search = new Srch_special_page(wiki); Evt_lang_changed(wiki.Lang()); }
public void Evt_lang_changed(Xol_lang_itm lang) { // add special pages by old manual method; DEPRECATED hash.Clear(); hash.Add_str_obj(Xow_special_meta_.Ttl__search, page_search); hash.Add_str_obj(Xow_special_meta_.Ttl__all_pages, page_allpages); hash.Add_str_obj("prefixindex", page_allpages); hash.Add_bry_obj(Xou_history_mgr.Ttl_name, page_history); hash.Add_str_obj(Xow_special_meta_.Ttl__page_history, page_history2); hash.Add_str_obj(Xow_special_meta_.Ttl__nearby, page_nearby); hash.Add_str_obj(Xow_special_meta_.Ttl__my_language, page_mylanguage); hash.Add_str_obj(Xow_special_meta_.Ttl__item_by_title, page_itemByTitle); hash.Add_str_obj(Xow_special_meta_.Ttl__statistics, page_statistics); hash.Add_str_obj(Xow_special_meta_.Ttl__move_page, page_movePage); hash.Add_str_obj(Xow_special_meta_.Ttl__system_data, page_system_data); hash.Add_str_obj(Xow_special_meta_.Ttl__default_tab, page_default_tab); hash.Add_str_obj(Xow_special_meta_.Ttl__popup_history, page_popup_history); hash.Add_str_obj(Xow_special_meta_.Ttl__bookmarks, page_bmk); hash.Add_str_obj(Xow_special_meta_.Ttl__diag, page_diag); // add app's Special_regy to hash table; needed for case insensitivity by wiki's lang; EX: // Special:rANDom; NOTE: needs to go before lang aliases Xoa_special_regy special_regy = app.Special_regy(); int len = special_regy.Len(); for (int i = 0; i < len; ++i) { Xow_special_page proto = special_regy.Get_at(i); Xow_special_meta proto_meta = proto.Special__meta(); hash.Add_if_dupe_use_1st(proto_meta.Key_bry(), proto); for (byte[] alias : proto_meta.Aliases()) hash.Add_if_dupe_use_1st(alias, proto); } // add lang's special aliases to hash table; EX: Special:Recherche Xol_specials_mgr lang_mgr = lang.Specials_mgr(); len = lang_mgr.Len(); for (int i = 0; i < len; ++i) { Xol_specials_itm lang_itm = lang_mgr.Get_at(i); Xow_special_page page = (Xow_special_page) hash.Get_by_bry(lang_itm.Special()); if (page == null) continue; // NOTE: ignore specials that are not in XOWA; EX: Special:ChangeEmail for (byte[] alias : lang_itm.Aliases()) hash.Add_if_dupe_use_1st(alias, page); } }