From d279c70606d6f2be0ce06f1b93943c1d6df9e95f Mon Sep 17 00:00:00 2001 From: gnosygnu Date: Sun, 1 Mar 2015 21:59:12 -0500 Subject: [PATCH] v2.3.1.1 --- 100_core/src_110_primitive/gplx/Byte_.java | 6 + .../src_200_io/gplx/ios/IoEngine_system.java | 12 +- 140_dbs/src/gplx/dbs/Db_conn.java | 7 +- 140_dbs/src/gplx/dbs/Db_meta_fld.java | 8 +- 140_dbs/src/gplx/dbs/Db_meta_fld_list.java | 31 ++-- 140_dbs/src/gplx/dbs/engines/Db_engine.java | 5 +- .../gplx/dbs/engines/Db_engine_sql_base.java | 7 +- .../gplx/dbs/engines/mems/Db_engine__mem.java | 5 +- .../gplx/dbs/engines/nulls/Null_engine.java | 5 +- .../src/gplx/dbs/engines/tdbs/TdbEngine.java | 6 +- .../src/gplx/dbs/sqls/Db_sqlbldr__sqlite.java | 36 +++- 140_dbs/src/gplx/dbs/sqls/Db_sqlbldr_tst.java | 18 +- .../src/gplx/dbs/sqls/Sql_qry_wtr_ansi.java | 2 +- .../src/gplx/dbs/utls/Db_sys_regy_tbl.java | 22 +-- 400_xowa/src/gplx/core/brys/Bry_rdr.java | 7 +- .../src/gplx/core/btries/Btrie_slim_mgr.java | 1 + 400_xowa/src/gplx/dbs/cfgs/Db_cfg_tbl.java | 7 +- 400_xowa/src/gplx/fsdb/data/Fsd_bin_tbl.java | 4 +- 400_xowa/src/gplx/fsdb/data/Fsd_dir_tbl.java | 4 +- 400_xowa/src/gplx/fsdb/data/Fsd_fil_tbl.java | 4 +- 400_xowa/src/gplx/fsdb/data/Fsd_thm_tbl.java | 4 +- 400_xowa/src/gplx/fsdb/meta/Fsm_abc_mgr.java | 8 +- 400_xowa/src/gplx/fsdb/meta/Fsm_atr_fil.java | 8 +- 400_xowa/src/gplx/fsdb/meta/Fsm_atr_mgr.java | 4 +- 400_xowa/src/gplx/fsdb/meta/Fsm_atr_tbl.java | 4 +- 400_xowa/src/gplx/fsdb/meta/Fsm_bin_mgr.java | 4 +- 400_xowa/src/gplx/fsdb/meta/Fsm_bin_tbl.java | 4 +- 400_xowa/src/gplx/fsdb/meta/Fsm_cfg_mgr.java | 4 +- 400_xowa/src/gplx/fsdb/meta/Fsm_mnt_mgr.java | 24 +-- 400_xowa/src/gplx/fsdb/meta/Fsm_mnt_tbl.java | 4 +- 400_xowa/src/gplx/xowa/Xoa_app.java | 4 + 400_xowa/src/gplx/xowa/Xoa_app_.java | 11 +- 400_xowa/src/gplx/xowa/Xoae_app.java | 9 +- .../xowa/apis/xowa/gui/pages/Xoapi_view.java | 2 +- .../gplx/xowa/apps/progs/Xoa_prog_mgr.java | 2 +- 400_xowa/src/gplx/xowa/bldrs/Db_mgr_fxt.java | 4 +- .../gplx/xowa/bldrs/files/Xob_fsdb_make.java | 1 + .../xowa/bldrs/files/Xob_lnki_temp_wkr.java | 3 +- .../xowa/bldrs/files/Xob_page_regy_tbl.java | 3 +- .../bldrs/files/Xob_xfer_temp_itm_tst.java | 1 - .../xowa/bldrs/imports/Xob_cmd_exec_sql.java | 6 +- .../gplx/xowa/bldrs/imports/Xob_page_sql.java | 33 ++-- .../xowa/bldrs/imports/Xob_search_base.java | 6 +- .../bldrs/imports/Xob_search_sql_cmd.java | 12 +- .../bldrs/imports/Xob_search_sql_wkr.java | 7 +- .../gplx/xowa/bldrs/imports/Xob_term_sql.java | 2 +- .../xowa/bldrs/imports/Xobc_core_cleanup.java | 2 +- .../ctgs/Xob_category_registry_sql.java | 2 +- .../ctgs/Xob_categorylinks_sql_make.java | 25 +-- .../ctgs/Xob_categorylinks_sql_tst.java | 2 +- .../bldrs/imports/ctgs/Xob_ctg_v1_base.java | 2 +- .../bldrs/imports/ctgs/Xob_ctg_v1_sql.java | 2 +- .../ctgs/Xoctg_hiddencat_parser_sql.java | 5 +- .../ctgs/Xoctg_hiddencat_parser_sql_tst.java | 4 +- .../xowa/bldrs/oimgs/Xob_dump_mgr_base.java | 13 +- .../bldrs/oimgs/Xob_parse_all_src_sql.java | 27 ++- .../xowa/bldrs/oimgs/Xob_text_db_prep.java | 24 ++- .../wikis/images/Xob_image_ext_calc_tst.java | 3 +- .../wikis/images/Xob_wiki_image_sql.java | 2 +- .../wikis/redirects/Xob_redirect_cmd.java | 8 +- .../src/gplx/xowa/ctgs/Xoctg_fmtr_all.java | 4 +- .../src/gplx/xowa/ctgs/Xoctg_fmtr_itm.java | 2 +- .../src/gplx/xowa/ctgs/Xoctg_html_mgr.java | 2 +- .../gplx/xowa/ctgs/Xoctg_html_mgr_tst.java | 6 +- .../src/gplx/xowa/ctgs/Xoctg_idx_mgr_tst.java | 2 +- 400_xowa/src/gplx/xowa/dbs/Xodb_file.java | 44 ----- 400_xowa/src/gplx/xowa/dbs/Xodb_fsys_mgr.java | 109 ------------ .../src/gplx/xowa/dbs/Xodb_load_mgr_sql.java | 15 +- .../gplx/xowa/dbs/Xodb_load_mgr_sql_tst.java | 2 +- .../src/gplx/xowa/dbs/Xodb_load_mgr_txt.java | 2 +- 400_xowa/src/gplx/xowa/dbs/Xodb_mgr.java | 3 +- 400_xowa/src/gplx/xowa/dbs/Xodb_mgr_sql.java | 55 +++--- 400_xowa/src/gplx/xowa/dbs/Xodb_mgr_txt.java | 4 +- .../src/gplx/xowa/dbs/Xodb_save_mgr_sql.java | 16 +- .../src/gplx/xowa/dbs/Xodb_save_mgr_txt.java | 8 +- .../src/gplx/xowa/dbs/Xodb_upgrade_mgr.java | 2 +- .../src/gplx/xowa/dbs/tbls/Xodb_page_tbl.java | 18 +- .../src/gplx/xowa/dbs/tbls/Xodb_text_tbl.java | 7 +- .../gplx/xowa/dbs/tbls/Xodb_xowa_db_tbl.java | 69 +++----- .../gplx/xowa/dbs/tbls/Xodb_xowa_ns_tbl.java | 97 +++++++---- .../src/gplx/xowa/files/Xof_doc_thumb.java | 6 +- .../xowa => src/gplx/xowa/files}/Xof_ext.java | 8 +- .../gplx/xowa/files}/Xof_ext_.java | 2 +- .../src/gplx/xowa/files/Xof_file_itm.java | 2 +- .../src/gplx/xowa/files/Xof_fsdb_mode.java | 37 ++++ .../src/gplx/xowa/files/Xof_img_size.java | 3 +- .../gplx/xowa/files/Xof_lnki_file_mgr.java | 2 +- .../gplx/xowa/files}/Xof_media_type.java | 2 +- .../gplx/xowa/files}/Xof_mime_minor_.java | 2 +- .../src/gplx/xowa/files/Xof_url_bldr.java | 10 +- .../src/gplx/xowa/files/Xof_xfer_itm.java | 20 +-- .../src/gplx/xowa/files/Xow_file_mgr.java | 15 +- .../src/gplx/xowa/files/bins/Xof_bin_mgr.java | 13 +- .../gplx/xowa/files/caches/Xof_cache_mgr.java | 8 +- .../gplx/xowa/files/caches/Xofc_cfg_mgr.java | 4 +- .../gplx/xowa/files/caches/Xofc_dir_mgr.java | 2 +- .../gplx/xowa/files/caches/Xofc_dir_tbl.java | 4 +- .../gplx/xowa/files/caches/Xofc_fil_mgr.java | 6 +- .../gplx/xowa/files/caches/Xofc_fil_tbl.java | 6 +- .../gplx/xowa/files/fsdb/Xof_fsdb_mgr.java | 4 +- .../gplx/xowa/files/fsdb/Xof_fsdb_mgr_.java | 20 +-- .../xowa/files/fsdb/Xof_fsdb_mgr__sql.java | 26 ++- .../xowa/files/fsdb/fs_roots/Fs_root_dir.java | 6 +- .../files/fsdb/fs_roots/Fs_root_fsdb_mgr.java | 4 +- .../files/fsdb/fs_roots/Orig_fil_tbl.java | 4 +- .../xowa/files/fsdb/tsts/Xof_file_fxt.java | 6 +- .../src/gplx/xowa/files/gui/Js_img_mgr.java | 27 ++- .../src/gplx/xowa/files/gui/Js_img_wkr.java | 2 +- .../gui/Xog_js_wkr.java} | 12 +- .../src/gplx/xowa/files/gui/Xog_js_wkr_.java | 26 +++ .../xowa/files/origs/Xob_orig_tbl_bldr.java | 4 +- .../gplx/xowa/files/origs/Xof_orig_mgr.java | 27 ++- .../gplx/xowa/files/origs/Xof_orig_tbl.java | 24 ++- .../gplx/xowa/files/origs/Xof_orig_wkr.java | 2 + .../files/origs/Xof_orig_wkr__orig_db.java | 6 +- .../files/origs/Xof_orig_wkr__wmf_api.java | 6 +- .../gplx/xowa/files/repos/Xow_repo_mgr.java | 1 + .../src/gplx/xowa/gui/urls/Xog_url_wkr.java | 8 +- .../src/gplx/xowa/gui/views/Xog_html_itm.java | 8 +- .../src/gplx/xowa/gui/views/Xog_tab_itm.java | 31 ++-- .../xowa/gui/views/Xog_tab_itm_edit_mgr.java | 6 +- .../gui/views/Xog_win_itm__prog_href_mgr.java | 2 +- .../src/gplx/xowa/hdumps/Xob_hdump_bldr.java | 98 ----------- .../src/gplx/xowa/hdumps/Xodb_hdump_mgr.java | 101 ----------- .../xowa/hdumps/Xodb_hdump_mgr__save_tst.java | 150 ----------------- .../xowa/hdumps/Xodb_hdump_mgr_setup.java | 58 ------- .../src/gplx/xowa/hdumps/Xodbv_dbs_tbl.java | 51 ------ .../src/gplx/xowa/hdumps/Xowd_hdump_mgr.java | 49 ------ .../hdumps/core/Hdump_data_img__base.java | 77 --------- .../hdumps/dbs/Xodb_wiki_page_html_tbl.java | 76 --------- .../dbs/Xodb_wiki_page_html_tbl_mem.java | 45 ----- .../xowa/hdumps/loads/Hdump_load_mgr.java | 94 ----------- .../xowa/hdumps/loads/Hdump_load_mgr_tst.java | 99 ----------- .../hdumps/loads/Hdump_page_body_srl.java | 117 ------------- .../xowa/hdumps/pages/Xopg_hdump_data.java | 39 ----- .../xowa/hdumps/saves/Hdump_save_mgr.java | 63 ------- .../xowa/hdumps/saves/Hdump_stats_tbl.java | 112 ------------- .../gplx/xowa/hdumps/srls/Hpg_srl_itm_.java | 157 ----------------- .../xowa/hdumps/srls/Hpg_srl_itm_tst.java | 100 ----------- .../gplx/xowa/hdumps/srls/Hpg_srl_mgr.java | 41 ----- 400_xowa/src/gplx/xowa/html/Xoh_html_wtr.java | 4 +- .../src/gplx/xowa/html/Xoh_page_wtr_mgr.java | 6 +- .../src/gplx/xowa/html/Xoh_page_wtr_wkr.java | 6 +- .../src/gplx/xowa/html/Xohp_ctg_grp_mgr.java | 4 +- 400_xowa/src/gplx/xowa/html/Xow_html_mgr.java | 8 +- .../gplx/xowa/html/hdumps/Xohd_hdump_rdr.java | 78 +++++++++ .../gplx/xowa/html/hdumps/Xohd_hdump_wtr.java | 54 ++++++ .../hdumps/Xohd_hdump_wtr_tst.java} | 26 +-- .../html/hdumps/Xowd_db_init_wkr__html.java | 57 +++++++ .../hdumps/abrvs/Xohd_abrv_.java} | 16 +- .../hdumps/abrvs/Xohd_abrv_mgr.java} | 86 +++++----- .../hdumps/abrvs/Xohd_abrv_mgr_tst.java} | 40 ++--- .../html/hdumps/bldrs/Xob_hdump_bldr.java | 97 +++++++++++ .../hdumps/bldrs/Xob_hdump_img_cmd.java} | 21 +-- .../hdumps/bldrs}/Xob_lnki_regy_mgr.java | 18 +- .../xowa/html/hdumps/core/Xohd_data_itm.java | 23 +++ .../html/hdumps/core/Xohd_data_itm__base.java | 86 ++++++++++ .../core/Xohd_data_itm__gallery_itm.java} | 8 +- .../core/Xohd_data_itm__gallery_mgr.java} | 10 +- .../html/hdumps/core/Xohd_data_itm__img.java | 21 +++ .../xowa/html/hdumps/core/Xohd_data_tid.java | 26 +++ .../hdumps/data/Xohd_page_html_mgr__load.java | 93 +++++++++++ .../hdumps/data/Xohd_page_html_mgr__save.java | 54 ++++++ .../html/hdumps/data/Xohd_page_html_row.java | 29 ++++ .../html/hdumps/data/Xohd_page_html_tbl.java | 74 ++++++++ .../hdumps/data/srl/Xohd_page_srl_itm.java | 46 +++++ .../hdumps/data/srl/Xohd_page_srl_itm_.java | 34 ++++ .../data/srl/Xohd_page_srl_itm_tst.java | 98 +++++++++++ .../hdumps/data/srl/Xohd_page_srl_itms.java | 75 +++++++++ .../hdumps/data/srl/Xohd_page_srl_mgr.java | 44 +++++ .../html/hdumps/pages/Xopg_hdump_data.java | 36 ++++ .../hdumps/pages/Xopg_module_mgr.java} | 4 +- ..._hzip_stats.java => Xodump_stats_itm.java} | 2 +- .../xowa/html/hzips/Xodump_stats_tbl.java | 76 +++++++++ .../gplx/xowa/html/hzips/Xow_hzip_int_.java | 64 +++++++ .../hzips/Xow_hzip_int__tst.java} | 14 +- .../xowa/html/hzips/Xow_hzip_itm__anchor.java | 18 +- .../html/hzips/Xow_hzip_itm__anchor_tst.java | 4 +- .../html/hzips/Xow_hzip_itm__file_tst.java | 2 +- .../xowa/html/hzips/Xow_hzip_itm__header.java | 4 +- .../html/hzips/Xow_hzip_itm__header_tst.java | 2 +- .../xowa/html/hzips/Xow_hzip_itm__href.java | 2 +- .../gplx/xowa/html/hzips/Xow_hzip_mgr.java | 27 +-- .../xowa/html/hzips/Xow_hzip_mgr_fxt.java | 8 +- .../html/lnkis/Xoh_arg_img_core__hdump.java | 2 +- .../html/lnkis/Xoh_file_html_fmtr__base.java | 2 +- .../html/lnkis/Xoh_file_html_fmtr__hdump.java | 10 +- .../xowa/html/lnkis/Xoh_file_wtr__basic.java | 8 +- .../gplx/xowa/html/lnkis/Xoh_lnki_wtr.java | 4 +- .../html/modules/Xoh_module_itm__globals.java | 2 +- .../modules/popups/Xow_popup_html_mkr.java | 2 +- .../html/modules/popups/Xow_popup_parser.java | 2 +- .../html/portal/Xoa_available_wikis_mgr.java | 2 +- .../gplx/xowa/html/portal/Xow_portal_mgr.java | 4 +- .../xowa/html/portal/Xow_portal_mgr_tst.java | 2 +- .../xowa/html/sidebar/Xowh_sidebar_mgr.java | 6 +- .../src/gplx/xowa/html/tocs/Xow_hdr_mgr.java | 2 +- .../src/gplx/xowa/html/tocs/Xow_toc_mgr.java | 2 +- .../gplx/xowa/html/utils/Xoh_js_cleaner.java | 2 +- .../src/gplx/xowa/langs/Xol_lang_itm_.java | 7 +- .../gplx/xowa/langs/msgs/Xol_msg_mgr_.java | 2 +- .../src/gplx/xowa/langs/vnts/Xol_vnt_mgr.java | 2 +- .../langs/vnts/Xolg_vnt_grp_fmtr_tst.java | 66 ++++++++ .../gplx/xowa/langs/vnts/Xolg_vnt_mgr.java | 68 ++++++++ .../xowa/langs/vnts/Xop_vnt_flag_parser.java | 2 +- .../src/gplx/xowa/langs/vnts/Xop_vnt_tkn.java | 2 +- .../pages/skins/Xopg_xtn_skin_itm_stub.java | 25 +++ .../gplx/xowa/parsers/lnkes/Xoh_lnke_wtr.java | 4 +- .../gplx/xowa/parsers/lnkes/Xop_lnke_wkr.java | 2 +- .../lnkis/redlinks/Xog_redlink_mgr.java | 2 +- .../gplx/xowa/servers/Gxw_html_server.java | 2 +- .../maints/Wmf_dump_list_parser_tst.java | 12 +- .../specials/allPages/Xows_page_allpages.java | 8 +- .../xowa/specials/movePage/Move_page.java | 2 +- .../gplx/xowa/specials/search/Xosrh_core.java | 2 +- .../xowa/specials/search/Xosrh_core_tst.java | 4 +- .../xowa/specials/search/Xosrh_html_mgr.java | 2 +- .../statistics/Xop_statistics_page.java | 2 +- .../popup_history/Popup_history_page.java | 2 +- .../xowa/system_data/System_data_page.java | 2 +- 400_xowa/src/gplx/xowa/users/Xou_user.java | 2 +- .../gplx/xowa/users/data/Xoud_cfg_mgr.java | 61 +++++++ .../gplx/xowa/users/data/Xoud_cfg_tbl.java | 80 +++++++++ .../gplx/xowa/users/data/Xoud_data_mgr.java | 20 +-- .../xowa/users/data/Xoud_history_mgr.java | 5 +- .../xowa/users/data/Xoud_history_special.java | 2 +- .../src/gplx/xowa/users/data/Xoud_id_mgr.java | 30 ++++ .../gplx/xowa/users/data/Xoud_opt_scope.java | 84 ++++++++++ .../xowa/users/data/Xoud_opt_scope_tst.java | 51 ++++++ .../gplx/xowa/users/data/Xoud_regy_mgr.java | 54 ------ .../gplx/xowa/users/data/Xoud_regy_tbl.java | 31 ++-- .../xowa/users/history/Xou_history_html.java | 2 +- 400_xowa/src/gplx/xowa/wikis/Xow_domain_.java | 5 +- .../{dbs => wikis/data}/Xodb_ns_map_mgr.java | 2 +- .../data}/Xodb_ns_map_mgr_tst.java | 2 +- .../data/Xow_core_data_map.java} | 11 +- .../xowa/wikis/data/Xow_core_data_mgr.java | 31 ++++ .../gplx/xowa/wikis/data/Xowd_db_file.java | 57 +++++++ .../data/Xowd_db_file_.java} | 4 +- .../data/Xowd_db_init_db_mgr.java} | 17 +- .../data/Xowd_db_init_db_wkr.java} | 7 +- .../data/Xowd_db_init_tbl_mgr.java} | 16 +- .../data/Xowd_db_init_tbl_wkr.java} | 7 +- .../wikis/data/Xowd_ns_regy_tbl.java | 21 ++- .../wikis/data/Xowd_pg_regy_tbl.java} | 81 +++++---- .../xowa/wikis/data/Xowe_core_data_mgr.java | 142 ++++++++++++++++ .../xowa/wikis/data/Xowv_core_data_mgr.java | 64 +++++++ .../gplx/xowa/wikis/xwikis/Xow_lang_mgr.java | 2 +- .../gplx/xowa/wikis/xwikis/Xow_xwiki_mgr.java | 2 +- .../gplx/xowa/wmfs/apis/Xoapi_orig_base.java | 2 +- .../xtns/gallery/Gallery_box_w_fmtr_arg.java | 6 +- .../xowa/xtns/gallery/Gallery_html_wtr.java | 8 +- .../gplx/xowa/xtns/gallery/Gallery_itm.java | 8 +- .../xowa/xtns/gallery/Gallery_itm_parser.java | 2 +- .../xowa/xtns/gallery/Gallery_mgr_base.java | 10 +- .../xowa/xtns/geoCrumbs/Geoc_isin_func.java | 2 +- .../gplx/xowa/xtns/hieros/Hiero_html_wtr.java | 2 +- .../xowa/xtns/imaps/Imap_img_fmtr_arg.java | 2 +- .../gplx/xowa/xtns/imaps/Imap_itm_shape.java | 2 +- .../src/gplx/xowa/xtns/imaps/Imap_map.java | 16 +- .../gplx/xowa/xtns/listings/Listing_xnde.java | 6 +- .../src/gplx/xowa/xtns/lst/Lst_pfunc_wkr.java | 2 +- .../xowa/xtns/mapSources/Map_dd2dms_func.java | 2 +- .../xtns/mapSources/Map_geolink_func.java | 2 +- .../xowa/xtns/math/Xof_math_html_wtr.java | 2 +- .../xowa/xtns/pfuncs/ifs/Pfunc_switch.java | 2 +- .../xtns/pfuncs/pages/Pfunc_displaytitle.java | 2 +- .../pfuncs/scribunto/Pfunc_scrib_lib.java | 2 +- .../xowa/xtns/pfuncs/strings/Pfunc_case.java | 2 +- .../xowa/xtns/pfuncs/strings/Pfunc_tag.java | 2 +- .../pfuncs/times/Pft_func_formatdate.java | 2 +- .../xtns/pfuncs/ttls/Pfunc_anchorencode.java | 2 +- .../xowa/xtns/pfuncs/ttls/Pfunc_rel2abs.java | 2 +- .../xtns/pfuncs/ttls/Pfunc_urlencode.java | 2 +- .../xowa/xtns/pfuncs/ttls/Pfunc_urlfunc.java | 2 +- .../pfuncs/wikis/Pfunc_pagesincategory.java | 2 +- .../src/gplx/xowa/xtns/poems/Poem_nde.java | 2 +- .../xowa/xtns/proofreadPage/Pp_pages_nde.java | 6 +- .../src/gplx/xowa/xtns/scores/Score_xnde.java | 4 +- .../xowa/xtns/scribunto/Scrib_proc_args.java | 2 +- .../engines/process/Process_engine.java | 2 +- .../scribunto/libs/Scrib_lib_language.java | 6 +- .../scribunto/libs/Scrib_lib_message.java | 10 +- .../scribunto/libs/Scrib_lib_message_tst.java | 4 + .../xtns/scribunto/libs/Scrib_lib_mw.java | 8 +- .../xtns/scribunto/libs/Scrib_lib_text.java | 2 +- .../xtns/scribunto/libs/Scrib_lib_title.java | 8 +- .../scribunto/libs/Scrib_lib_title_tst.java | 29 ++-- .../xtns/scribunto/libs/Scrib_lib_uri.java | 8 +- .../libs/Scrib_lib_wikibase_entity.java | 2 +- .../gplx/xowa/xtns/wdatas/Wdata_wiki_mgr.java | 2 +- .../xowa/xtns/wdatas/Wdata_wiki_mgr_fxt.java | 8 +- .../xtns/wdatas/Wdata_xwiki_link_wtr.java | 2 +- .../wdatas/imports/Xob_wdata_pid_sql.java | 6 +- .../wdatas/imports/Xob_wdata_qid_sql.java | 10 +- .../Wdata_external_lang_links_data.java | 2 +- .../wdatas/pfuncs/Wdata_pf_property_data.java | 2 +- .../specials/Wdata_itemByTitle_page.java | 4 +- .../specials/Wdata_itemByTitle_page_tst.java | 2 +- 400_xowa/src/gplx/xowa2/apps/Xoav_app.java | 4 +- .../src/gplx/xowa2/files/Xofv_file_itm.java | 2 +- .../gplx/xowa2/files/Xofv_file_mgr_tst.java | 6 +- 400_xowa/src/gplx/xowa2/gui/Xog_page.java | 34 ++-- 400_xowa/src/gplx/xowa2/gui/Xogv_img_wkr.java | 82 +++++++++ .../src/gplx/xowa2/gui/Xogv_tab_base.java | 2 +- .../gplx/xowa2/users/data/Xoud_site_mgr.java | 18 +- .../gplx/xowa2/users/data/Xoud_user_tbl.java | 75 +++++++++ .../src/gplx/xowa2/wikis/Xowv_repo_mgr.java | 21 ++- 400_xowa/src/gplx/xowa2/wikis/Xowv_wiki.java | 41 +++-- .../gplx/xowa2/wikis/data/Xowd_data_mgr.java | 51 ------ .../xowa2/wikis/data/Xowd_db_regy_tbl.java | 63 ------- .../src_100_app/gplx/xowa/Xoa_hive_mgr.java | 2 +- .../gplx/xowa/Xoa_url_alias_mgr.java | 2 +- .../gplx/xowa/Xow_fragment_mgr.java | 2 +- .../gplx/xowa/Xow_mainpage_finder.java | 2 +- .../src_120_wiki/gplx/xowa/Xow_msg_mgr.java | 8 +- .../gplx/xowa/Xow_script_mgr.java | 2 +- 400_xowa/src_120_wiki/gplx/xowa/Xow_wiki.java | 31 ++-- .../src_120_wiki/gplx/xowa/Xowe_wiki.java | 158 ++++++++++-------- .../gplx/xowa/Xob_hive_mgr.java | 2 +- .../gplx/xowa/Xow_data_mgr.java | 2 +- .../gplx/xowa/Xow_hive_mgr_fxt.java | 4 +- .../gplx/xowa/Xowd_hive_mgr.java | 6 +- .../src_160_file/gplx/xowa/Xof_file_mgr.java | 4 +- .../src_162_xfer/gplx/xowa/Xof_xfer_mgr.java | 2 +- .../gplx/xowa/Xof_xfer_queue.java | 4 +- .../gplx/xowa/Xoa_css_extractor.java | 2 +- .../gplx/xowa/Xoa_page.java} | 10 +- .../src_300_html/gplx/xowa/Xoae_page.java | 7 +- .../gplx/xowa/Xoh_file_main_wkr.java | 2 +- .../src_310_url/gplx/xowa/Xoa_url_parser.java | 4 +- .../gplx/xowa/Xoh_href_parser.java | 2 +- .../gplx/xowa/Xoh_href_parser_tst.java | 2 +- .../src_400_parser/gplx/xowa/Xoa_ttl.java | 2 +- .../src_400_parser/gplx/xowa/Xop_fxt.java | 2 +- .../src_400_parser/gplx/xowa/Xop_parser.java | 2 +- .../src_400_parser/gplx/xowa/Xop_parser_.java | 2 +- .../gplx/xowa/Xop_redirect_mgr.java | 6 +- .../src_440_lnki/gplx/xowa/Xop_lnki_wkr_.java | 4 +- .../src_490_xnde/gplx/xowa/Xop_xnde_wkr.java | 2 +- .../src_500_tmpl/gplx/xowa/Xot_defn_tmpl.java | 2 +- .../src_500_tmpl/gplx/xowa/Xot_invk_tkn.java | 4 +- .../src_500_tmpl/gplx/xowa/Xot_tmpl_wtr.java | 4 +- .../en.wikipedia.org.000.sqlite3 | Bin 0 -> 57344 bytes .../en.wikipedia.org.001.sqlite3 | Bin 0 -> 57344 bytes .../en.wikipedia.org.002.sqlite3 | Bin 73728 -> 73728 bytes 346 files changed, 3516 insertions(+), 2970 deletions(-) delete mode 100644 400_xowa/src/gplx/xowa/dbs/Xodb_file.java delete mode 100644 400_xowa/src/gplx/xowa/dbs/Xodb_fsys_mgr.java rename 400_xowa/{src_160_file/gplx/xowa => src/gplx/xowa/files}/Xof_ext.java (77%) rename 400_xowa/{src_160_file/gplx/xowa => src/gplx/xowa/files}/Xof_ext_.java (97%) create mode 100644 400_xowa/src/gplx/xowa/files/Xof_fsdb_mode.java rename 400_xowa/{src_160_file/gplx/xowa => src/gplx/xowa/files}/Xof_media_type.java (95%) rename 400_xowa/{src_160_file/gplx/xowa => src/gplx/xowa/files}/Xof_mime_minor_.java (96%) rename 400_xowa/src/gplx/xowa/{hdumps/Xowd_db_tbl_mgr.java => files/gui/Xog_js_wkr.java} (69%) create mode 100644 400_xowa/src/gplx/xowa/files/gui/Xog_js_wkr_.java delete mode 100644 400_xowa/src/gplx/xowa/hdumps/Xob_hdump_bldr.java delete mode 100644 400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr.java delete mode 100644 400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr__save_tst.java delete mode 100644 400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr_setup.java delete mode 100644 400_xowa/src/gplx/xowa/hdumps/Xodbv_dbs_tbl.java delete mode 100644 400_xowa/src/gplx/xowa/hdumps/Xowd_hdump_mgr.java delete mode 100644 400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_img__base.java delete mode 100644 400_xowa/src/gplx/xowa/hdumps/dbs/Xodb_wiki_page_html_tbl.java delete mode 100644 400_xowa/src/gplx/xowa/hdumps/dbs/Xodb_wiki_page_html_tbl_mem.java delete mode 100644 400_xowa/src/gplx/xowa/hdumps/loads/Hdump_load_mgr.java delete mode 100644 400_xowa/src/gplx/xowa/hdumps/loads/Hdump_load_mgr_tst.java delete mode 100644 400_xowa/src/gplx/xowa/hdumps/loads/Hdump_page_body_srl.java delete mode 100644 400_xowa/src/gplx/xowa/hdumps/pages/Xopg_hdump_data.java delete mode 100644 400_xowa/src/gplx/xowa/hdumps/saves/Hdump_save_mgr.java delete mode 100644 400_xowa/src/gplx/xowa/hdumps/saves/Hdump_stats_tbl.java delete mode 100644 400_xowa/src/gplx/xowa/hdumps/srls/Hpg_srl_itm_.java delete mode 100644 400_xowa/src/gplx/xowa/hdumps/srls/Hpg_srl_itm_tst.java delete mode 100644 400_xowa/src/gplx/xowa/hdumps/srls/Hpg_srl_mgr.java create mode 100644 400_xowa/src/gplx/xowa/html/hdumps/Xohd_hdump_rdr.java create mode 100644 400_xowa/src/gplx/xowa/html/hdumps/Xohd_hdump_wtr.java rename 400_xowa/src/gplx/xowa/{hdumps/Xodb_hdump_mgr__write_tst.java => html/hdumps/Xohd_hdump_wtr_tst.java} (79%) create mode 100644 400_xowa/src/gplx/xowa/html/hdumps/Xowd_db_init_wkr__html.java rename 400_xowa/src/gplx/xowa/{hdumps/htmls/Hdump_html_consts.java => html/hdumps/abrvs/Xohd_abrv_.java} (86%) rename 400_xowa/src/gplx/xowa/{hdumps/htmls/Hdump_html_body.java => html/hdumps/abrvs/Xohd_abrv_mgr.java} (60%) rename 400_xowa/src/gplx/xowa/{hdumps/htmls/Hdump_html_mgr_tst.java => html/hdumps/abrvs/Xohd_abrv_mgr_tst.java} (68%) create mode 100644 400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_hdump_bldr.java rename 400_xowa/src/gplx/xowa/{hdumps/core/Hdump_img_bldr.java => html/hdumps/bldrs/Xob_hdump_img_cmd.java} (75%) rename 400_xowa/src/gplx/xowa/{hdumps/core => html/hdumps/bldrs}/Xob_lnki_regy_mgr.java (90%) create mode 100644 400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_itm.java create mode 100644 400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_itm__base.java rename 400_xowa/src/gplx/xowa/{hdumps/core/Hdump_data_img__gallery.java => html/hdumps/core/Xohd_data_itm__gallery_itm.java} (76%) rename 400_xowa/src/gplx/xowa/{hdumps/core/Hdump_data_gallery.java => html/hdumps/core/Xohd_data_itm__gallery_mgr.java} (72%) create mode 100644 400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_itm__img.java create mode 100644 400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_tid.java create mode 100644 400_xowa/src/gplx/xowa/html/hdumps/data/Xohd_page_html_mgr__load.java create mode 100644 400_xowa/src/gplx/xowa/html/hdumps/data/Xohd_page_html_mgr__save.java create mode 100644 400_xowa/src/gplx/xowa/html/hdumps/data/Xohd_page_html_row.java create mode 100644 400_xowa/src/gplx/xowa/html/hdumps/data/Xohd_page_html_tbl.java create mode 100644 400_xowa/src/gplx/xowa/html/hdumps/data/srl/Xohd_page_srl_itm.java create mode 100644 400_xowa/src/gplx/xowa/html/hdumps/data/srl/Xohd_page_srl_itm_.java create mode 100644 400_xowa/src/gplx/xowa/html/hdumps/data/srl/Xohd_page_srl_itm_tst.java create mode 100644 400_xowa/src/gplx/xowa/html/hdumps/data/srl/Xohd_page_srl_itms.java create mode 100644 400_xowa/src/gplx/xowa/html/hdumps/data/srl/Xohd_page_srl_mgr.java create mode 100644 400_xowa/src/gplx/xowa/html/hdumps/pages/Xopg_hdump_data.java rename 400_xowa/src/gplx/xowa/{hdumps/core/Hdump_module_mgr.java => html/hdumps/pages/Xopg_module_mgr.java} (90%) rename 400_xowa/src/gplx/xowa/html/hzips/{Xow_hzip_stats.java => Xodump_stats_itm.java} (97%) create mode 100644 400_xowa/src/gplx/xowa/html/hzips/Xodump_stats_tbl.java create mode 100644 400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_int_.java rename 400_xowa/src/gplx/xowa/{hdumps/srls/Hpg_srl_itm__tst.java => html/hzips/Xow_hzip_int__tst.java} (78%) create mode 100644 400_xowa/src/gplx/xowa/langs/vnts/Xolg_vnt_grp_fmtr_tst.java create mode 100644 400_xowa/src/gplx/xowa/langs/vnts/Xolg_vnt_mgr.java create mode 100644 400_xowa/src/gplx/xowa/pages/skins/Xopg_xtn_skin_itm_stub.java create mode 100644 400_xowa/src/gplx/xowa/users/data/Xoud_cfg_mgr.java create mode 100644 400_xowa/src/gplx/xowa/users/data/Xoud_cfg_tbl.java create mode 100644 400_xowa/src/gplx/xowa/users/data/Xoud_id_mgr.java create mode 100644 400_xowa/src/gplx/xowa/users/data/Xoud_opt_scope.java create mode 100644 400_xowa/src/gplx/xowa/users/data/Xoud_opt_scope_tst.java delete mode 100644 400_xowa/src/gplx/xowa/users/data/Xoud_regy_mgr.java rename 400_xowa/src/gplx/xowa/{dbs => wikis/data}/Xodb_ns_map_mgr.java (94%) rename 400_xowa/src/gplx/xowa/{dbs => wikis/data}/Xodb_ns_map_mgr_tst.java (93%) rename 400_xowa/src/gplx/xowa/{hdumps/srls/Hpg_srl_itm.java => wikis/data/Xow_core_data_map.java} (64%) create mode 100644 400_xowa/src/gplx/xowa/wikis/data/Xow_core_data_mgr.java create mode 100644 400_xowa/src/gplx/xowa/wikis/data/Xowd_db_file.java rename 400_xowa/src/gplx/xowa/{dbs/Xodb_file_tid.java => wikis/data/Xowd_db_file_.java} (91%) rename 400_xowa/src/gplx/xowa/{hdumps/loads/Xopg_xtn_skin_itm_mock.java => wikis/data/Xowd_db_init_db_mgr.java} (58%) rename 400_xowa/src/gplx/xowa/{hdumps/core/Hdump_data_tid.java => wikis/data/Xowd_db_init_db_wkr.java} (76%) rename 400_xowa/src/gplx/xowa/{hdumps/dbs/Xodb_wiki_page_html_row.java => wikis/data/Xowd_db_init_tbl_mgr.java} (57%) rename 400_xowa/src/gplx/xowa/{hdumps/core/Hdump_data_img__basic.java => wikis/data/Xowd_db_init_tbl_wkr.java} (75%) rename 400_xowa/src/gplx/{xowa2 => xowa}/wikis/data/Xowd_ns_regy_tbl.java (85%) rename 400_xowa/src/gplx/{xowa2/wikis/data/Xowd_page_regy_tbl.java => xowa/wikis/data/Xowd_pg_regy_tbl.java} (56%) create mode 100644 400_xowa/src/gplx/xowa/wikis/data/Xowe_core_data_mgr.java create mode 100644 400_xowa/src/gplx/xowa/wikis/data/Xowv_core_data_mgr.java create mode 100644 400_xowa/src/gplx/xowa2/gui/Xogv_img_wkr.java create mode 100644 400_xowa/src/gplx/xowa2/users/data/Xoud_user_tbl.java delete mode 100644 400_xowa/src/gplx/xowa2/wikis/data/Xowd_data_mgr.java delete mode 100644 400_xowa/src/gplx/xowa2/wikis/data/Xowd_db_regy_tbl.java rename 400_xowa/{src/gplx/xowa/hdumps/core/Hdump_data_itm.java => src_300_html/gplx/xowa/Xoa_page.java} (78%) create mode 100644 tst/400_xowa/root/wiki/en.wikipedia.org/en.wikipedia.org.000.sqlite3 create mode 100644 tst/400_xowa/root/wiki/en.wikipedia.org/en.wikipedia.org.001.sqlite3 diff --git a/100_core/src_110_primitive/gplx/Byte_.java b/100_core/src_110_primitive/gplx/Byte_.java index 9d95b3d02..ff3beeb2a 100644 --- a/100_core/src_110_primitive/gplx/Byte_.java +++ b/100_core/src_110_primitive/gplx/Byte_.java @@ -26,6 +26,12 @@ public class Byte_ { ; public static byte cast_(Object o) {try {return (Byte)o;} catch (Exception e) {throw Err_.type_mismatch_exc_(e, byte.class, o);}} public static byte parse_(String raw) {return Byte.parseByte(raw);} + public static byte parse_or_(String raw, byte or) { + if (raw == null) return or; + try { + return parse_(raw); + } catch (Exception e) {Err_.Noop(e); return or;} + } public static byte By_int(int v) {return v > 127 ? (byte)(v - 256) : (byte)v;} // PERF?: (byte)(v & 0xff) public static int Xto_int(byte v) {return v < 0 ? (int)v + 256 : v;} public static String Xto_str(byte v) {return new Byte(v).toString();} diff --git a/100_core/src_200_io/gplx/ios/IoEngine_system.java b/100_core/src_200_io/gplx/ios/IoEngine_system.java index a5fd6cacd..0ce261750 100644 --- a/100_core/src_200_io/gplx/ios/IoEngine_system.java +++ b/100_core/src_200_io/gplx/ios/IoEngine_system.java @@ -47,7 +47,8 @@ public class IoEngine_system extends IoEngine_base { DeleteFil_lang(fil, url); } @Override public boolean ExistsFil_api(Io_url url) { - return new File(url.Xto_api()).exists(); + File f = new File(url.Xto_api()); + return f.exists(); } @Override public void SaveFilText_api(IoEngine_xrg_saveFilStr mpo) { Io_url url = mpo.Url(); @@ -85,7 +86,11 @@ public class IoEngine_system extends IoEngine_base { @SuppressWarnings("resource") @Override public String LoadFilStr(IoEngine_xrg_loadFilStr args) { Io_url url = args.Url(); - + boolean file_exists = ExistsFil_api(url); // check if file exists first to avoid throwing exception; note that most callers pass Missing_ignored; DATE:2015-02-24 + if (!file_exists) { + if (args.MissingIgnored()) return ""; + else throw Err_Fil_NotFound(url); + } // get reader for file InputStream stream = null; try {stream = new FileInputStream(url.Xto_api());} @@ -600,7 +605,8 @@ class Io_stream_rdr_http implements Io_stream_rdr { if (read_failed) { } else { - prog_dlg.Log_wtr().Log_msg_to_url_fmt(session_fil, "download pass: src='~{0}' trg='~{1}'", src_str, xrg.Trg().Raw()); + if (prog_dlg != null) + prog_dlg.Log_wtr().Log_msg_to_url_fmt(session_fil, "download pass: src='~{0}' trg='~{1}'", src_str, xrg.Trg().Raw()); xrg.Rslt_(IoEngine_xrg_downloadFil.Rslt_pass); } xrg.Prog_running_(false); diff --git a/140_dbs/src/gplx/dbs/Db_conn.java b/140_dbs/src/gplx/dbs/Db_conn.java index b5a6d0c32..414cbc1db 100644 --- a/140_dbs/src/gplx/dbs/Db_conn.java +++ b/140_dbs/src/gplx/dbs/Db_conn.java @@ -34,10 +34,11 @@ public class Db_conn { public Db_stmt Stmt_select(String tbl, String[] cols, String... where) {return engine.New_stmt_prep(Db_qry__select_in_tbl.new_(tbl, where, cols));} public Db_stmt Stmt_select(String tbl, Db_meta_fld_list flds, String... where) {return engine.New_stmt_prep(Db_qry__select_in_tbl.new_(tbl, where, flds.To_str_ary()));} public void Exec_create_tbl_and_idx(Db_meta_tbl meta) { - engine.Exec_create_tbl(meta); - engine.Exec_create_idx(Gfo_usr_dlg_.Null, meta.Idxs()); + engine.Exec_ddl_create_tbl(meta); + engine.Exec_ddl_create_idx(Gfo_usr_dlg_.Null, meta.Idxs()); } - public void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... idxs) {engine.Exec_create_idx(usr_dlg, idxs);} + public void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... idxs) {engine.Exec_ddl_create_idx(usr_dlg, idxs);} + public void Exec_ddl_append_fld(String tbl, Db_meta_fld fld) {engine.Exec_ddl_append_fld(tbl, fld);} public Db_stmt Rls_reg(Db_stmt stmt) {rls_list.Add(stmt); return stmt;} public void Conn_term() { int len = rls_list.Count(); diff --git a/140_dbs/src/gplx/dbs/Db_meta_fld.java b/140_dbs/src/gplx/dbs/Db_meta_fld.java index 861aafc72..5c385af96 100644 --- a/140_dbs/src/gplx/dbs/Db_meta_fld.java +++ b/140_dbs/src/gplx/dbs/Db_meta_fld.java @@ -17,9 +17,9 @@ along with this program. If not, see . */ package gplx.dbs; import gplx.*; public class Db_meta_fld { - public Db_meta_fld(String name, int tid, int len, boolean nullable, boolean primary, boolean autoincrement) { + public Db_meta_fld(String name, int tid, int len, boolean nullable, boolean primary, boolean autoincrement, Object default_value) { this.name = name; this.tid = tid; this.len = len; - this.nullable = nullable; this.primary = primary; this.autoincrement = autoincrement; + this.nullable = nullable; this.primary = primary; this.autoincrement = autoincrement; this.default_value = default_value; } public int Tid() {return tid;} private final int tid; public String Name() {return name;} private final String name; @@ -27,7 +27,9 @@ public class Db_meta_fld { public boolean Nullable() {return nullable;} private final boolean nullable; public boolean Primary() {return primary;} private final boolean primary; public boolean Autoincrement() {return autoincrement;} private final boolean autoincrement; + public Object Default_value() {return default_value;} private final Object default_value; public static final int Tid_bool = 0, Tid_byte = 1, Tid_short = 2, Tid_int = 3, Tid_long = 4, Tid_float = 5, Tid_double = 6, Tid_str = 7, Tid_text = 8, Tid_bry = 9; - public static final String[] Ary_empy = String_.Ary_empty; public static final String Key_null = null; + public static final String[] Ary_empy = String_.Ary_empty; + public static final Object Default_value_null = null; } diff --git a/140_dbs/src/gplx/dbs/Db_meta_fld_list.java b/140_dbs/src/gplx/dbs/Db_meta_fld_list.java index c033d5e07..a1fbf6a08 100644 --- a/140_dbs/src/gplx/dbs/Db_meta_fld_list.java +++ b/140_dbs/src/gplx/dbs/Db_meta_fld_list.java @@ -40,20 +40,23 @@ public class Db_meta_fld_list { } return rv.XtoStrAry(); } - public String Add_bool(String name) {return Add(name, Db_meta_fld.Tid_bool, Len_null, Bool_.N, Bool_.N, Bool_.N);} - public String Add_byte(String name) {return Add(name, Db_meta_fld.Tid_byte, Len_null, Bool_.N, Bool_.N, Bool_.N);} - public String Add_short(String name) {return Add(name, Db_meta_fld.Tid_short, Len_null, Bool_.N, Bool_.N, Bool_.N);} - public String Add_int(String name) {return Add(name, Db_meta_fld.Tid_int, Len_null, Bool_.N, Bool_.N, Bool_.N);} - public String Add_int_pkey(String name) {return Add(name, Db_meta_fld.Tid_int, Len_null, Bool_.N, Bool_.Y, Bool_.N);} - public String Add_int_pkey_autonum(String name) {return Add(name, Db_meta_fld.Tid_int, Len_null, Bool_.N, Bool_.Y, Bool_.Y);} - public String Add_long(String name) {return Add(name, Db_meta_fld.Tid_long, Len_null, Bool_.N, Bool_.N, Bool_.N);} - public String Add_float(String name) {return Add(name, Db_meta_fld.Tid_float, Len_null, Bool_.N, Bool_.N, Bool_.N);} - public String Add_double(String name) {return Add(name, Db_meta_fld.Tid_double, Len_null, Bool_.N, Bool_.N, Bool_.N);} - public String Add_str(String name, int len) {return Add(name, Db_meta_fld.Tid_str, len, Bool_.N, Bool_.N, Bool_.N);} - public String Add_text(String name) {return Add(name, Db_meta_fld.Tid_text, Len_null, Bool_.N, Bool_.N, Bool_.N);} - public String Add_bry(String name) {return Add(name, Db_meta_fld.Tid_bry, Len_null, Bool_.N, Bool_.N, Bool_.N);} - public String Add(String name, int tid, int len, boolean nullable, boolean primary, boolean autoincrement) { - Db_meta_fld fld = new Db_meta_fld(name, tid, len, nullable, primary, autoincrement); + public String Add_bool(String name) {return Add(name, Db_meta_fld.Tid_bool, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);} + public String Add_byte(String name) {return Add(name, Db_meta_fld.Tid_byte, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);} + public String Add_short(String name) {return Add(name, Db_meta_fld.Tid_short, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);} + public String Add_int(String name) {return Add(name, Db_meta_fld.Tid_int, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);} + public String Add_int_pkey(String name) {return Add(name, Db_meta_fld.Tid_int, Len_null, Bool_.N, Bool_.Y, Bool_.N, Db_meta_fld.Default_value_null);} + public String Add_int_pkey_autonum(String name) {return Add(name, Db_meta_fld.Tid_int, Len_null, Bool_.N, Bool_.Y, Bool_.Y, Db_meta_fld.Default_value_null);} + public String Add_int_dflt(String name, int dflt) {return Add(name, Db_meta_fld.Tid_int, Len_null, Bool_.N, Bool_.N, Bool_.N, dflt);} + public String Add_long(String name) {return Add(name, Db_meta_fld.Tid_long, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);} + public String Add_float(String name) {return Add(name, Db_meta_fld.Tid_float, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);} + public String Add_double(String name) {return Add(name, Db_meta_fld.Tid_double, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);} + public String Add_str(String name, int len) {return Add(name, Db_meta_fld.Tid_str, len, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);} + public String Add_str_dflt(String name, int len, String dflt) + {return Add(name, Db_meta_fld.Tid_str, len, Bool_.N, Bool_.N, Bool_.N, dflt);} + public String Add_text(String name) {return Add(name, Db_meta_fld.Tid_text, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);} + public String Add_bry(String name) {return Add(name, Db_meta_fld.Tid_bry, Len_null, Bool_.N, Bool_.N, Bool_.N, Db_meta_fld.Default_value_null);} + public String Add(String name, int tid, int len, boolean nullable, boolean primary, boolean autoincrement, Object default_value) { + Db_meta_fld fld = new Db_meta_fld(name, tid, len, nullable, primary, autoincrement, default_value); flds.Add(name, fld); keys.Add(name); return name; diff --git a/140_dbs/src/gplx/dbs/engines/Db_engine.java b/140_dbs/src/gplx/dbs/engines/Db_engine.java index 0b7d5bb35..8dcd1947b 100644 --- a/140_dbs/src/gplx/dbs/engines/Db_engine.java +++ b/140_dbs/src/gplx/dbs/engines/Db_engine.java @@ -29,6 +29,7 @@ public interface Db_engine { void Conn_open(); void Conn_term(); Object Exec_as_obj(Db_qry qry); - void Exec_create_tbl(Db_meta_tbl meta); - void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary); + void Exec_ddl_create_tbl(Db_meta_tbl meta); + void Exec_ddl_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary); + void Exec_ddl_append_fld(String tbl, Db_meta_fld fld); } diff --git a/140_dbs/src/gplx/dbs/engines/Db_engine_sql_base.java b/140_dbs/src/gplx/dbs/engines/Db_engine_sql_base.java index fd2abf666..0e9ae9c1b 100644 --- a/140_dbs/src/gplx/dbs/engines/Db_engine_sql_base.java +++ b/140_dbs/src/gplx/dbs/engines/Db_engine_sql_base.java @@ -53,8 +53,8 @@ public abstract class Db_engine_sql_base implements Db_engine { } catch (Exception exc) {throw Err_.err_(exc, "exec reader failed").Add("sql", sql).Add("err", Err_.Message_gplx_brief(exc));} } - public void Exec_create_tbl(Db_meta_tbl meta) {Exec_as_int(meta.To_sql_create());} - public void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) { + public void Exec_ddl_create_tbl(Db_meta_tbl meta) {Exec_as_int(meta.To_sql_create());} + public void Exec_ddl_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) { int len = ary.length; for (int i = 0; i < len; ++i) { Db_meta_idx idx = ary[i]; @@ -62,6 +62,9 @@ public abstract class Db_engine_sql_base implements Db_engine { Exec_as_int(idx.To_sql_create()); } } + public void Exec_ddl_append_fld(String tbl, Db_meta_fld fld) { + Exec_as_int(Db_sqlbldr__sqlite.I.Bld_alter_tbl_add(tbl, fld)); + } @gplx.Virtual public DataRdr New_rdr(ResultSet rdr, String sql) {return gplx.stores.Db_data_rdr_.new_(rdr, sql);} @gplx.Virtual public Sql_qry_wtr SqlWtr() {return Sql_qry_wtr_.new_ansi();} @gplx.Internal protected abstract Connection Conn_new(); diff --git a/140_dbs/src/gplx/dbs/engines/mems/Db_engine__mem.java b/140_dbs/src/gplx/dbs/engines/mems/Db_engine__mem.java index 6171c99f4..1dce12495 100644 --- a/140_dbs/src/gplx/dbs/engines/mems/Db_engine__mem.java +++ b/140_dbs/src/gplx/dbs/engines/mems/Db_engine__mem.java @@ -34,10 +34,11 @@ public class Db_engine__mem implements Db_engine { public Db_rdr New_rdr_by_obj(Object rdr, String sql) {throw Err_.not_implemented_();} public DataRdr New_rdr(java.sql.ResultSet rdr, String sql) {throw Err_.not_implemented_();} public Object New_stmt_prep_as_obj(String sql) {throw Err_.not_implemented_();} - public void Exec_create_tbl(Db_meta_tbl meta) { + public void Exec_ddl_create_tbl(Db_meta_tbl meta) { Mem_tbl mem_tbl = new Mem_tbl(); tbl_hash.AddReplace(meta.Name(), mem_tbl); } - public void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {} // TODO: implement unique index + public void Exec_ddl_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {} // TODO: implement unique index + public void Exec_ddl_append_fld(String tbl, Db_meta_fld fld) {} public static final Db_engine__mem _ = new Db_engine__mem(); Db_engine__mem() {} } diff --git a/140_dbs/src/gplx/dbs/engines/nulls/Null_engine.java b/140_dbs/src/gplx/dbs/engines/nulls/Null_engine.java index ae2112ac1..895a20431 100644 --- a/140_dbs/src/gplx/dbs/engines/nulls/Null_engine.java +++ b/140_dbs/src/gplx/dbs/engines/nulls/Null_engine.java @@ -29,7 +29,8 @@ public class Null_engine implements Db_engine { public void Txn_bgn() {} public void Txn_end() {} public Object Exec_as_obj(Db_qry cmd) {return cmd.Exec_is_rdr() ? (Object)DataRdr_.Null : -1;} - public void Exec_create_tbl(Db_meta_tbl meta) {} - public void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {} + public void Exec_ddl_create_tbl(Db_meta_tbl meta) {} + public void Exec_ddl_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {} + public void Exec_ddl_append_fld(String tbl, Db_meta_fld fld) {} public static final Null_engine _ = new Null_engine(); Null_engine() {} } diff --git a/140_dbs/src/gplx/dbs/engines/tdbs/TdbEngine.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbEngine.java index 7f4d13de5..997cb404f 100644 --- a/140_dbs/src/gplx/dbs/engines/tdbs/TdbEngine.java +++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbEngine.java @@ -54,8 +54,10 @@ public class TdbEngine implements Db_engine { public void FlushTbl(TdbTable tbl) { saveMgr.SaveFile(db, tbl.File()); } - public void Exec_create_tbl(Db_meta_tbl meta) {throw Err_.not_implemented_();} - public void Exec_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {throw Err_.not_implemented_();} + public void Exec_ddl_create_tbl(Db_meta_tbl meta) {throw Err_.not_implemented_();} + public void Exec_ddl_create_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... ary) {throw Err_.not_implemented_();} + public void Exec_ddl_append_fld(String tbl, Db_meta_fld fld) {throw Err_.not_implemented_();} + HashAdp wkrs = HashAdp_.new_(); TdbDbLoadMgr loadMgr = TdbDbLoadMgr.new_(); TdbDbSaveMgr saveMgr = TdbDbSaveMgr.new_(); public static final TdbEngine _ = new TdbEngine(); diff --git a/140_dbs/src/gplx/dbs/sqls/Db_sqlbldr__sqlite.java b/140_dbs/src/gplx/dbs/sqls/Db_sqlbldr__sqlite.java index 6af3a4da1..eb6e210b2 100644 --- a/140_dbs/src/gplx/dbs/sqls/Db_sqlbldr__sqlite.java +++ b/140_dbs/src/gplx/dbs/sqls/Db_sqlbldr__sqlite.java @@ -40,24 +40,44 @@ public class Db_sqlbldr__sqlite implements Db_sqlbldr { return tmp_bfr.Xto_str_and_clear(); } public String Bld_create_tbl(Db_meta_tbl tbl) { - tmp_bfr.Add_str_ascii("CREATE TABLE ").Add_str_ascii(tbl.Name()).Add_byte_nl(); + tmp_bfr.Add_str_ascii("CREATE TABLE IF NOT EXISTS ").Add_str_ascii(tbl.Name()).Add_byte_nl(); Db_meta_fld[] flds = tbl.Flds(); int flds_len = flds.length; for (int i = 0; i < flds_len; ++i) { Db_meta_fld fld = flds[i]; tmp_bfr.Add_byte(i == 0 ? Byte_ascii.Paren_bgn : Byte_ascii.Comma).Add_byte_space(); - tmp_bfr.Add_str_ascii(fld.Name()).Add_byte_space(); - Tid_to_sql(tmp_bfr, fld.Tid(), fld.Len()); tmp_bfr.Add_byte_space(); - tmp_bfr.Add_str_ascii(fld.Nullable() ? "NULL " : "NOT NULL "); - if (fld.Primary()) tmp_bfr.Add_str_ascii("PRIMARY KEY "); - if (fld.Autoincrement()) tmp_bfr.Add_str_ascii("AUTOINCREMENT "); - tmp_bfr.Del_by_1(); // remove trailing space + Bld_fld(tmp_bfr, fld); tmp_bfr.Add_byte_nl(); } tmp_bfr.Add_str_ascii(");"); return tmp_bfr.Xto_str_and_clear(); } - public void Tid_to_sql(Bry_bfr tmp_bfr, int tid, int len) {// REF: https://www.sqlite.org/datatype3.html + public String Bld_alter_tbl_add(String tbl, Db_meta_fld fld) { + tmp_bfr.Add_str_ascii("ALTER TABLE ").Add_str_ascii(tbl).Add_str_ascii(" ADD "); + Bld_fld(tmp_bfr, fld); + tmp_bfr.Add_byte_semic(); + return tmp_bfr.Xto_str_and_clear(); + } + private void Bld_fld(Bry_bfr tmp_bfr, Db_meta_fld fld) { + tmp_bfr.Add_str_ascii(fld.Name()).Add_byte_space(); + Tid_to_sql(tmp_bfr, fld.Tid(), fld.Len()); tmp_bfr.Add_byte_space(); + tmp_bfr.Add_str_ascii(fld.Nullable() ? "NULL " : "NOT NULL "); + if (fld.Default_value() != Db_meta_fld.Default_value_null) { + tmp_bfr.Add_str_ascii("DEFAULT "); + boolean quote = Bool_.N; + switch (fld.Tid()) { + case Db_meta_fld.Tid_str: case Db_meta_fld.Tid_text: quote = Bool_.Y; break; + } + if (quote) tmp_bfr.Add_byte_apos(); + tmp_bfr.Add_str_utf8(Object_.Xto_str_strict_or_null(fld.Default_value())); + if (quote) tmp_bfr.Add_byte_apos(); + tmp_bfr.Add_byte_space(); + } + if (fld.Primary()) tmp_bfr.Add_str_ascii("PRIMARY KEY "); + if (fld.Autoincrement()) tmp_bfr.Add_str_ascii("AUTOINCREMENT "); + tmp_bfr.Del_by_1(); // remove trailing space + } + public static void Tid_to_sql(Bry_bfr tmp_bfr, int tid, int len) {// REF: https://www.sqlite.org/datatype3.html switch (tid) { case Db_meta_fld.Tid_bool: tmp_bfr.Add_str_ascii("boolean"); break; case Db_meta_fld.Tid_byte: tmp_bfr.Add_str_ascii("tinyint"); break; diff --git a/140_dbs/src/gplx/dbs/sqls/Db_sqlbldr_tst.java b/140_dbs/src/gplx/dbs/sqls/Db_sqlbldr_tst.java index 55ccf8520..d72c57fab 100644 --- a/140_dbs/src/gplx/dbs/sqls/Db_sqlbldr_tst.java +++ b/140_dbs/src/gplx/dbs/sqls/Db_sqlbldr_tst.java @@ -38,7 +38,7 @@ public class Db_sqlbldr_tst { flds.Add_bry("fld_bry"); fxt.Test_create_tbl(Db_meta_tbl.new_("tbl_name", flds.To_fld_ary()) , String_.Concat_lines_nl_skip_last - ( "CREATE TABLE tbl_name" + ( "CREATE TABLE IF NOT EXISTS tbl_name" , "( fld_int_pkey integer NOT NULL PRIMARY KEY" , ", fld_bool boolean NOT NULL" , ", fld_short smallint NOT NULL" @@ -52,13 +52,17 @@ public class Db_sqlbldr_tst { , ");" )); } + @Test public void Tbl_alter_tbl_add() { + Db_meta_fld_list flds = Db_meta_fld_list.new_(); + flds.Add_int_dflt("fld_int", -1); + flds.Add_str_dflt("fld_str", 255, "a"); + fxt.Test_alter_tbl_add("tbl_name", flds.Get_by("fld_int"), "ALTER TABLE tbl_name ADD fld_int integer NOT NULL DEFAULT -1;"); + fxt.Test_alter_tbl_add("tbl_name", flds.Get_by("fld_str"), "ALTER TABLE tbl_name ADD fld_str varchar(255) NOT NULL DEFAULT 'a';"); + } } class Db_sqlbldr_fxt { private Db_sqlbldr__sqlite sqlbldr = Db_sqlbldr__sqlite.I; - public void Test_create_idx(Db_meta_idx idx, String expd) { - Tfds.Eq(expd, sqlbldr.Bld_create_idx(idx)); - } - public void Test_create_tbl(Db_meta_tbl tbl, String expd) { - Tfds.Eq_str_lines(expd, sqlbldr.Bld_create_tbl(tbl)); - } + public void Test_create_idx(Db_meta_idx idx, String expd) {Tfds.Eq(expd, sqlbldr.Bld_create_idx(idx));} + public void Test_create_tbl(Db_meta_tbl tbl, String expd) {Tfds.Eq_str_lines(expd, sqlbldr.Bld_create_tbl(tbl));} + public void Test_alter_tbl_add(String tbl, Db_meta_fld fld, String expd) {Tfds.Eq_str_lines(expd, sqlbldr.Bld_alter_tbl_add(tbl, fld));} } diff --git a/140_dbs/src/gplx/dbs/sqls/Sql_qry_wtr_ansi.java b/140_dbs/src/gplx/dbs/sqls/Sql_qry_wtr_ansi.java index 956130689..69445c055 100644 --- a/140_dbs/src/gplx/dbs/sqls/Sql_qry_wtr_ansi.java +++ b/140_dbs/src/gplx/dbs/sqls/Sql_qry_wtr_ansi.java @@ -20,7 +20,7 @@ import gplx.core.strings.*; import gplx.core.criterias.*; import gplx.dbs.qrys.*; public class Sql_qry_wtr_ansi implements Sql_qry_wtr { private final String_bldr sb = String_bldr_.new_(); - private boolean prepare = false; + public boolean prepare = false; public String Xto_str(Db_qry cmd, boolean prepare) { synchronized (sb) { this.prepare = prepare; diff --git a/140_dbs/src/gplx/dbs/utls/Db_sys_regy_tbl.java b/140_dbs/src/gplx/dbs/utls/Db_sys_regy_tbl.java index c5ce94a4e..bca97e0b0 100644 --- a/140_dbs/src/gplx/dbs/utls/Db_sys_regy_tbl.java +++ b/140_dbs/src/gplx/dbs/utls/Db_sys_regy_tbl.java @@ -18,6 +18,17 @@ along with this program. If not, see . package gplx.dbs.utls; import gplx.*; import gplx.dbs.*; class Db_sys_regy_tbl { private final String tbl_name; + private static final Db_meta_fld_list Flds = Db_meta_fld_list.new_(); + private static final String + Fld_regy_grp = Flds.Add_str("regy_grp", 1024) + , Fld_regy_key = Flds.Add_str("regy_key", 1024) + , Fld_regy_val = Flds.Add_str("regy_val", 4096) + ; + public static Db_meta_tbl new_meta(String tbl) { + return Db_meta_tbl.new_(tbl, Flds.To_fld_ary() + , Db_meta_idx.new_unique_by_tbl(tbl, "key", Flds.To_str_ary()) + ); + } private Db_meta_tbl meta; private Db_conn conn; public Db_sys_regy_tbl(Db_url url, String tbl_name) { @@ -46,15 +57,4 @@ class Db_sys_regy_tbl { return rdr.Move_next() ? rdr.Read_str(Fld_regy_val) : or; } finally {rdr.Rls();} } - private static final Db_meta_fld_list Flds = Db_meta_fld_list.new_(); - private static final String - Fld_regy_grp = Flds.Add_str("regy_grp", 1024) - , Fld_regy_key = Flds.Add_str("regy_key", 1024) - , Fld_regy_val = Flds.Add_str("regy_val", 4096) - ; - public static Db_meta_tbl new_meta(String tbl) { - return Db_meta_tbl.new_(tbl, Flds.To_fld_ary() - , Db_meta_idx.new_unique_by_tbl(tbl, "key", Flds.To_str_ary()) - ); - } } diff --git a/400_xowa/src/gplx/core/brys/Bry_rdr.java b/400_xowa/src/gplx/core/brys/Bry_rdr.java index c498cb092..1706e9200 100644 --- a/400_xowa/src/gplx/core/brys/Bry_rdr.java +++ b/400_xowa/src/gplx/core/brys/Bry_rdr.java @@ -75,9 +75,10 @@ public class Bry_rdr { } return bgn == pos ? or_bry : Bry_.Mid(src, bgn, src_len); } - public boolean Read_yn_to_pipe() { - boolean rv = src[pos] == Byte_ascii.Ltr_y; - pos += 2; // 1 for y/n; 1 for pipe + public boolean Read_yn_to_pipe() {return Read_byte_to_pipe() == Byte_ascii.Ltr_y;} + public byte Read_byte_to_pipe() { + byte rv = src[pos]; + pos += 2; // 1 for byte; 1 for pipe; return rv; } public double Read_double_to_pipe() {return Read_double_to(Byte_ascii.Pipe);} diff --git a/400_xowa/src/gplx/core/btries/Btrie_slim_mgr.java b/400_xowa/src/gplx/core/btries/Btrie_slim_mgr.java index 84ecb781f..df2e282e2 100644 --- a/400_xowa/src/gplx/core/btries/Btrie_slim_mgr.java +++ b/400_xowa/src/gplx/core/btries/Btrie_slim_mgr.java @@ -42,6 +42,7 @@ public class Btrie_slim_mgr implements Btrie_mgr { } public Btrie_slim_mgr Add_bry_tid(byte[] bry, byte tid) {return (Btrie_slim_mgr)Add_obj(bry, Byte_obj_val.new_(tid));} public Btrie_slim_mgr Add_str_byte(String key, byte val) {return (Btrie_slim_mgr)Add_obj(Bry_.new_utf8_(key), Byte_obj_val.new_(val));} + public Btrie_slim_mgr Add_str_int(String key, int val) {return (Btrie_slim_mgr)Add_obj(Bry_.new_utf8_(key), Int_obj_val.new_(val));} public Btrie_slim_mgr Add_bry(String key, String val) {return (Btrie_slim_mgr)Add_obj(Bry_.new_utf8_(key), Bry_.new_utf8_(val));} public Btrie_slim_mgr Add_bry(String key, byte[] val) {return (Btrie_slim_mgr)Add_obj(Bry_.new_utf8_(key), val);} public Btrie_slim_mgr Add_bry(byte[] v) {return (Btrie_slim_mgr)Add_obj(v, v);} diff --git a/400_xowa/src/gplx/dbs/cfgs/Db_cfg_tbl.java b/400_xowa/src/gplx/dbs/cfgs/Db_cfg_tbl.java index 2b00c9b60..54cd7f0ff 100644 --- a/400_xowa/src/gplx/dbs/cfgs/Db_cfg_tbl.java +++ b/400_xowa/src/gplx/dbs/cfgs/Db_cfg_tbl.java @@ -21,10 +21,11 @@ public class Db_cfg_tbl { private String tbl_name; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); private String fld_grp, fld_key, fld_val; private Db_conn conn; private Db_stmt stmt_insert, stmt_update, stmt_select; - public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1, String tbl_v1, String tbl_v2) { + public Db_conn Conn() {return conn;} + public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1, String tbl_v1, String tbl_v2) { this.conn = new_conn; flds.Clear(); String fld_prefix = ""; - if (version_is_1) { + if (schema_is_1) { tbl_name = tbl_v1; fld_prefix = "cfg_"; } @@ -54,6 +55,8 @@ public class Db_cfg_tbl { if (rv == Int_.MinValue) throw Err_.new_fmt_("dbs.cfg_tbl.Select_as_int_or_fail: tbl={0} grp={1} key={2}", tbl_name, grp, key); return rv; } + public long Select_as_long_or(String grp, String key, long or) {return Long_.parse_or_(Select_as_str_or(grp, key, null), or);} + public byte Select_as_byte_or(String grp, String key, byte or) {return Byte_.parse_or_(Select_as_str_or(grp, key, null), or);} public int Select_as_int_or(String grp, String key, int or) {return Int_.parse_or_(Select_as_str_or(grp, key, null), or);} public String Select_as_str_or(String grp, String key, String or) { if (stmt_select == null) stmt_select = conn.Rls_reg(conn.Stmt_select(tbl_name, String_.Ary(fld_val), fld_grp, fld_key)); diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_bin_tbl.java b/400_xowa/src/gplx/fsdb/data/Fsd_bin_tbl.java index 3b8000acf..8c0be927c 100644 --- a/400_xowa/src/gplx/fsdb/data/Fsd_bin_tbl.java +++ b/400_xowa/src/gplx/fsdb/data/Fsd_bin_tbl.java @@ -23,10 +23,10 @@ public class Fsd_bin_tbl { private String fld_owner_id, fld_owner_tid, fld_part_id, fld_data_url, fld_data; private Db_conn conn; private Bry_bfr tmp_bfr = Bry_bfr.reset_(Io_mgr.Len_kb); - public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) { + public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1) { this.conn = new_conn; flds.Clear(); String fld_prefix = ""; - if (version_is_1) { + if (schema_is_1) { tbl_name = "fsdb_bin"; fld_prefix = "bin_"; } diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_dir_tbl.java b/400_xowa/src/gplx/fsdb/data/Fsd_dir_tbl.java index 75a807063..60a7cc792 100644 --- a/400_xowa/src/gplx/fsdb/data/Fsd_dir_tbl.java +++ b/400_xowa/src/gplx/fsdb/data/Fsd_dir_tbl.java @@ -21,10 +21,10 @@ public class Fsd_dir_tbl { private String tbl_name = "file_data_dir"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); private String fld_id, fld_owner_id, fld_name; private Db_conn conn; private Db_stmt stmt_insert, stmt_update, stmt_select_by_name; - public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) { + public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1) { this.conn = new_conn; flds.Clear(); String fld_prefix = ""; - if (version_is_1) { + if (schema_is_1) { tbl_name = "fsdb_dir"; fld_prefix = "dir_"; } diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_fil_tbl.java b/400_xowa/src/gplx/fsdb/data/Fsd_fil_tbl.java index f62a3d51e..c7915ba0a 100644 --- a/400_xowa/src/gplx/fsdb/data/Fsd_fil_tbl.java +++ b/400_xowa/src/gplx/fsdb/data/Fsd_fil_tbl.java @@ -22,10 +22,10 @@ public class Fsd_fil_tbl { private String fld_id, fld_owner_id, fld_name, fld_xtn_id, fld_ext_id, fld_size, fld_modified, fld_hash, fld_bin_db_id; private String Idx_owner; private Db_conn conn; private Db_stmt stmt_insert, stmt_update, stmt_select_by_name; - public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) { + public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1) { this.conn = new_conn; flds.Clear(); String fld_prefix = ""; - if (version_is_1) { + if (schema_is_1) { tbl_name = "fsdb_fil"; fld_prefix = "fil_"; } diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_thm_tbl.java b/400_xowa/src/gplx/fsdb/data/Fsd_thm_tbl.java index 35d64e61f..04fb30c84 100644 --- a/400_xowa/src/gplx/fsdb/data/Fsd_thm_tbl.java +++ b/400_xowa/src/gplx/fsdb/data/Fsd_thm_tbl.java @@ -23,10 +23,10 @@ public class Fsd_thm_tbl { private String fld_id, fld_owner_id, fld_w, fld_h, fld_time, fld_page, fld_bin_db_id, fld_size, fld_modified, fld_hash, fld_thumbtime; private Db_conn conn; private Db_stmt stmt_insert, stmt_select_by_fil_w; private Fsm_atr_fil atr_fil; - public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1, Fsm_atr_fil atr_fil) { + public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1, Fsm_atr_fil atr_fil) { this.conn = new_conn; flds.Clear(); this.atr_fil = atr_fil; String fld_prefix = ""; - if (version_is_1) { + if (schema_is_1) { tbl_name = "fsdb_xtn_thm"; fld_prefix = "thm_"; } diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_abc_mgr.java b/400_xowa/src/gplx/fsdb/meta/Fsm_abc_mgr.java index b2b8d7320..3f8babe02 100644 --- a/400_xowa/src/gplx/fsdb/meta/Fsm_abc_mgr.java +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_abc_mgr.java @@ -25,14 +25,14 @@ public class Fsm_abc_mgr implements RlsAble { public Fsm_cfg_mgr Cfg_mgr() {return cfg_mgr;} private final Fsm_cfg_mgr cfg_mgr = new Fsm_cfg_mgr(); public int Next_id() {return cfg_mgr.Next_id();} private static final String Db_conn_bldr_type = "gplx.fsdb.abc"; - public void Init_for_db(boolean version_is_1, Io_url dir) { + public void Init_for_db(boolean schema_is_1, Io_url dir) { Io_url abc_url = dir.GenSubFil("fsdb.abc.sqlite3"); Db_conn_bldr_data conn_data = Db_conn_bldr.I.Get_or_new(Db_conn_bldr_type, abc_url); boolean created = conn_data.Created(); conn = conn_data.Conn(); - atr_mgr.Init_for_db(conn, created, version_is_1, dir, this); - bin_mgr.Init_for_db(conn, created, version_is_1, dir); - cfg_mgr.Init_for_db(conn, created, version_is_1); + atr_mgr.Init_for_db(conn, created, schema_is_1, dir, this); + bin_mgr.Init_for_db(conn, created, schema_is_1, dir); + cfg_mgr.Init_for_db(conn, created, schema_is_1); if (created) { this.Txn_save(); // immediately save new entries in atr,cfg } diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_atr_fil.java b/400_xowa/src/gplx/fsdb/meta/Fsm_atr_fil.java index 268e325d6..523e6fa35 100644 --- a/400_xowa/src/gplx/fsdb/meta/Fsm_atr_fil.java +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_atr_fil.java @@ -27,10 +27,10 @@ public class Fsm_atr_fil implements RlsAble { this.abc_mgr = abc_mgr; Db_conn_bldr_data conn_data = Db_conn_bldr.I.Get_or_new(Db_conn_bldr_type, io_url); boolean created = conn_data.Created(); conn = conn_data.Conn(); - boolean version_is_1 = Bool_.Y; - tbl_dir.Conn_(conn, created, version_is_1); - tbl_fil.Conn_(conn, created, version_is_1); - tbl_thm.Conn_(conn, created, version_is_1, this); + boolean schema_is_1 = Bool_.Y; + tbl_dir.Conn_(conn, created, schema_is_1); + tbl_fil.Conn_(conn, created, schema_is_1); + tbl_thm.Conn_(conn, created, schema_is_1, this); } public Fsm_abc_mgr Abc_mgr() {return abc_mgr;} private Fsm_abc_mgr abc_mgr; public Db_conn Conn() {return conn;} private Db_conn conn; diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_atr_mgr.java b/400_xowa/src/gplx/fsdb/meta/Fsm_atr_mgr.java index 29968c678..7025eea49 100644 --- a/400_xowa/src/gplx/fsdb/meta/Fsm_atr_mgr.java +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_atr_mgr.java @@ -56,8 +56,8 @@ public class Fsm_atr_mgr implements RlsAble { itm.Rls(); } } - public void Init_for_db(Db_conn conn, boolean created, boolean version_is_1, Io_url dir, Fsm_abc_mgr abc_mgr) { - tbl.Conn_(conn, created, version_is_1); + public void Init_for_db(Db_conn conn, boolean created, boolean schema_is_1, Io_url dir, Fsm_abc_mgr abc_mgr) { + tbl.Conn_(conn, created, schema_is_1); if (created) { Fsm_atr_fil itm = Fsm_atr_fil.make_(abc_mgr, Id_0, url_(dir, Id_0), Path_bgn_0); this.itms = new Fsm_atr_fil[] {itm}; diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_atr_tbl.java b/400_xowa/src/gplx/fsdb/meta/Fsm_atr_tbl.java index 126019710..9b19ec4bb 100644 --- a/400_xowa/src/gplx/fsdb/meta/Fsm_atr_tbl.java +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_atr_tbl.java @@ -21,9 +21,9 @@ public class Fsm_atr_tbl { private String tbl_name = "file_meta_atr"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); private String fld_uid, fld_url, fld_path_bgn; private Db_conn conn; private final Db_stmt_bldr stmt_bldr = new Db_stmt_bldr(); - public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) { + public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1) { this.conn = new_conn; flds.Clear(); - if (version_is_1) { + if (schema_is_1) { tbl_name = "fsdb_db_atr"; } fld_uid = flds.Add_int("uid"); diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_bin_mgr.java b/400_xowa/src/gplx/fsdb/meta/Fsm_bin_mgr.java index 4e022e3b4..31717bc6d 100644 --- a/400_xowa/src/gplx/fsdb/meta/Fsm_bin_mgr.java +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_bin_mgr.java @@ -61,9 +61,9 @@ public class Fsm_bin_mgr implements RlsAble { Fsm_bin_fil bin_fil = fil_ary[db_id]; return bin_fil.Insert(bin_id, owner_tid, bin_len, bin_rdr); } - public void Init_for_db(Db_conn conn, boolean created, boolean version_is_1, Io_url dir) { + public void Init_for_db(Db_conn conn, boolean created, boolean schema_is_1, Io_url dir) { this.dir = dir; - tbl.Conn_(conn, created, version_is_1); + tbl.Conn_(conn, created, schema_is_1); if (created) this.Itms_add(0); else { diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_bin_tbl.java b/400_xowa/src/gplx/fsdb/meta/Fsm_bin_tbl.java index 80e0acf1a..590bc208a 100644 --- a/400_xowa/src/gplx/fsdb/meta/Fsm_bin_tbl.java +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_bin_tbl.java @@ -21,9 +21,9 @@ public class Fsm_bin_tbl { private String tbl_name = "file_meta_bin"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); private String fld_uid, fld_url, fld_bin_len, fld_bin_max; private Db_conn conn; private final Db_stmt_bldr stmt_bldr = new Db_stmt_bldr(); - public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) { + public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1) { this.conn = new_conn; flds.Clear(); - if (version_is_1) { + if (schema_is_1) { tbl_name = "fsdb_db_bin"; } fld_uid = flds.Add_int("uid"); diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_cfg_mgr.java b/400_xowa/src/gplx/fsdb/meta/Fsm_cfg_mgr.java index fb27148da..e502e51dd 100644 --- a/400_xowa/src/gplx/fsdb/meta/Fsm_cfg_mgr.java +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_cfg_mgr.java @@ -59,8 +59,8 @@ public class Fsm_cfg_mgr { return grp; } public static Fsm_cfg_mgr new_() {return new Fsm_cfg_mgr();} - public void Init_for_db(Db_conn conn, boolean created, boolean version_is_1) { - cfg_tbl.Conn_(conn, created, version_is_1, Fsm_abc_mgr.Cfg_tbl_v1, Fsm_abc_mgr.Cfg_tbl_v2); + public void Init_for_db(Db_conn conn, boolean created, boolean schema_is_1) { + cfg_tbl.Conn_(conn, created, schema_is_1, Fsm_abc_mgr.Cfg_tbl_v1, Fsm_abc_mgr.Cfg_tbl_v2); if (created) { cfg_tbl.Insert(Fsm_cfg_mgr.Grp_core, Fsm_cfg_mgr.Key_next_id , "1"); // start next_id at 1 cfg_tbl.Insert(Fsm_cfg_mgr.Grp_core, Fsm_cfg_mgr.Key_schema_thm_page , "y"); // new dbs automatically have page and time in fsdb_xtn_tm diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_mgr.java b/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_mgr.java index 3898a1e47..64f37c06a 100644 --- a/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_mgr.java +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_mgr.java @@ -22,24 +22,27 @@ import gplx.fsdb.data.*; import gplx.fsdb.meta.*; public class Fsm_mnt_mgr implements GfoInvkAble { private final Db_cfg_tbl cfg_tbl = new Db_cfg_tbl(); private final Fsm_mnt_tbl mnt_tbl = new Fsm_mnt_tbl(); private Fsm_abc_mgr[] ary; private int ary_len = 0; - private static final String Db_conn_bldr_type_mnt = "gplx.fsdb.mnt"; - public void Init_by_wiki(Io_url db_dir, boolean version_is_1) { - Db_conn_bldr_data conn_data = Db_conn_bldr.I.Get_or_new(Db_conn_bldr_type_mnt, db_dir.GenSubFil("wiki.mnt.sqlite3")); - Fsm_mnt_itm[] mnts = Mnts__load_or_make(conn_data, version_is_1); + public static final String Mnt_name = "wiki.mnt.sqlite3"; + public void Init_by_wiki(Io_url db_dir, boolean schema_is_1) { + Io_url mnt_dir = db_dir.GenSubFil(Mnt_name); + Db_conn_bldr_data conn_data = Db_conn_bldr.I.Get_or_new("", mnt_dir); + Db_conn conn = conn_data.Conn(); + boolean created = conn_data.Created(); + Fsm_mnt_itm[] mnts = Mnts__load_or_make(conn, created, schema_is_1); ary_len = mnts.length; ary = new Fsm_abc_mgr[ary_len]; for (int i = 0; i < ary_len; i++) { Fsm_mnt_itm itm = mnts[i]; Fsm_abc_mgr abc_mgr = new Fsm_abc_mgr(); ary[i] = abc_mgr; - if (version_is_1) { + if (schema_is_1) { Io_url abc_url = db_dir.GenSubFil_nest(itm.Url(), "fsdb.abc.sqlite3"); - abc_mgr.Init_for_db(version_is_1, abc_url.OwnerDir()); + abc_mgr.Init_for_db(schema_is_1, abc_url.OwnerDir()); } else throw Err_.not_implemented_(); } - if (conn_data.Created()) Fsm_mnt_mgr.Patch(this); + if (created) Fsm_mnt_mgr.Patch(this); insert_to_mnt = cfg_tbl.Select_as_int_or_fail("core", "mnt.insert_idx"); if (ary_len > 0) { Db_cfg_grp cfg_grp = this.Mnts__at(0).Cfg_mgr().Grps_get_or_load(Xof_fsdb_mgr_cfg.Grp_xowa); @@ -120,10 +123,9 @@ public class Fsm_mnt_mgr implements GfoInvkAble { .Update(Xof_fsdb_mgr_cfg.Grp_xowa, Xof_fsdb_mgr_cfg.Key_upright_fix_default , "y") ; } - private Fsm_mnt_itm[] Mnts__load_or_make(Db_conn_bldr_data conn_data, boolean version_is_1) { - Db_conn conn = conn_data.Conn(); boolean created = conn_data.Created(); - cfg_tbl.Conn_(conn, created, version_is_1, Fsm_abc_mgr.Cfg_tbl_v1, Fsm_abc_mgr.Cfg_tbl_v2); - mnt_tbl.Conn_(conn, created, version_is_1); + private Fsm_mnt_itm[] Mnts__load_or_make(Db_conn conn, boolean created, boolean schema_is_1) { + cfg_tbl.Conn_(conn, created, schema_is_1, Fsm_abc_mgr.Cfg_tbl_v1, Fsm_abc_mgr.Cfg_tbl_v2); + mnt_tbl.Conn_(conn, created, schema_is_1); if (created) cfg_tbl.Insert("core", "mnt.insert_idx", Int_.Xto_str(Mnt_idx_user)); return mnt_tbl.Select_all(); } diff --git a/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_tbl.java b/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_tbl.java index 048e0bd3b..47b327a10 100644 --- a/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_tbl.java +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_tbl.java @@ -21,10 +21,10 @@ public class Fsm_mnt_tbl { private String tbl_name = "file_meta_mnt"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); private String fld_id, fld_name, fld_url; private Db_conn conn; - public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) { + public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1) { this.conn = new_conn; flds.Clear(); String fld_prefix = ""; - if (version_is_1) { + if (schema_is_1) { tbl_name = "fsdb_mnt"; fld_prefix = "mnt_"; } diff --git a/400_xowa/src/gplx/xowa/Xoa_app.java b/400_xowa/src/gplx/xowa/Xoa_app.java index f1758f1d6..234457017 100644 --- a/400_xowa/src/gplx/xowa/Xoa_app.java +++ b/400_xowa/src/gplx/xowa/Xoa_app.java @@ -18,10 +18,14 @@ along with this program. If not, see . package gplx.xowa; import gplx.*; import gplx.xowa.apps.fsys.*; import gplx.xowa.files.caches.*; import gplx.xowa.files.imgs.*; +import gplx.xowa.urls.encoders.*; import gplx.xowa.wmfs.*; public interface Xoa_app { Xoa_fsys_mgr Fsys_mgr(); Xof_cache_mgr File_mgr__cache_mgr(); Xof_img_mgr File_mgr__img_mgr(); Xowmf_mgr Wmf_mgr(); + Gfo_usr_dlg Usr_dlg(); + Bry_bfr_mkr Utl__bfr_mkr(); + Url_encoder_mgr Utl__encoder_mgr(); } diff --git a/400_xowa/src/gplx/xowa/Xoa_app_.java b/400_xowa/src/gplx/xowa/Xoa_app_.java index 3973e422a..93f3ea7f7 100644 --- a/400_xowa/src/gplx/xowa/Xoa_app_.java +++ b/400_xowa/src/gplx/xowa/Xoa_app_.java @@ -16,9 +16,9 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa; import gplx.*; -import gplx.dbs.*; import gplx.gfui.*; +import gplx.dbs.*; import gplx.ios.*; import gplx.gfui.*; import gplx.xowa.apps.*; import gplx.xowa.langs.*; import gplx.xowa.users.*; -import gplx.xowa.hdumps.*; import gplx.xowa.hdumps.core.*; +import gplx.xowa.html.hdumps.*; import gplx.xowa.html.hdumps.core.*; import gplx.xowa.urls.encoders.*; public class Xoa_app_ { public static void Run(String... args) { @@ -26,7 +26,7 @@ public class Xoa_app_ { boot_mgr.Run(args); } public static final String Name = "xowa"; - public static final String Version = "2.2.4.1"; + public static final String Version = "2.3.1.1"; public static String Build_date = "2012-12-30 00:00:00"; public static String Op_sys; public static String User_agent = ""; @@ -41,8 +41,9 @@ public class Xoa_app_ { public static byte Mode = Xoa_app_.Mode_console; public static Gfo_usr_dlg Usr_dlg() {return usr_dlg;} public static void Usr_dlg_(Gfo_usr_dlg v) {usr_dlg = v;} private static Gfo_usr_dlg usr_dlg; - public static Bry_bfr_mkr Utl_bry_bfr_mkr() {return utl_bry_bfr_mkr;} private static final Bry_bfr_mkr utl_bry_bfr_mkr = new Bry_bfr_mkr(); - public static Url_encoder_mgr Utl_encoder_mgr() {return encoder_mgr;} private static final Url_encoder_mgr encoder_mgr = new Url_encoder_mgr(); + public static Bry_bfr_mkr Utl__bfr_mkr() {return utl__bry_bfr_mkr;} private static final Bry_bfr_mkr utl__bry_bfr_mkr = new Bry_bfr_mkr(); + public static Url_encoder_mgr Utl__encoder_mgr() {return utl__encoder_mgr;} private static final Url_encoder_mgr utl__encoder_mgr = new Url_encoder_mgr(); + public static Io_stream_zip_mgr Utl__zip_mgr() {return utl__zip_mgr;} private static final Io_stream_zip_mgr utl__zip_mgr = new Io_stream_zip_mgr(); public static Xoa_gfs_mgr Gfs_mgr() {return gfs_mgr;} public static void Gfs_mgr_(Xoa_gfs_mgr v) {gfs_mgr = v;} private static Xoa_gfs_mgr gfs_mgr; // public static Xoa_lang_mgr Lang_mgr() {return lang_mgr;} public static void Lang_mgr_(Xoa_lang_mgr v) {lang_mgr = v;} private static Xoa_lang_mgr lang_mgr; diff --git a/400_xowa/src/gplx/xowa/Xoae_app.java b/400_xowa/src/gplx/xowa/Xoae_app.java index 1519ad53c..ac962c384 100644 --- a/400_xowa/src/gplx/xowa/Xoae_app.java +++ b/400_xowa/src/gplx/xowa/Xoae_app.java @@ -28,7 +28,7 @@ import gplx.xowa.wmfs.*; public class Xoae_app implements Xoa_app, GfoInvkAble { public Xoae_app(Gfo_usr_dlg usr_dlg, Io_url root_dir, Io_url user_dir, String bin_dir_name) { Xoa_app_.Usr_dlg_(usr_dlg); - Io_url.Http_file_str_encoder = Xoa_app_.Utl_encoder_mgr().Fsys(); + Io_url.Http_file_str_encoder = Xoa_app_.Utl__encoder_mgr().Fsys(); fsys_mgr = new Xoa_fsys_mgr(bin_dir_name, root_dir); log_wtr = usr_dlg.Log_wtr(); cfg_mgr = new Xoa_cfg_mgr(this); @@ -42,7 +42,7 @@ public class Xoae_app implements Xoa_app, GfoInvkAble { gui_mgr = new Xoa_gui_mgr(this); bldr = new Xob_bldr(this); file_mgr.Ctor_by_app(this); - href_parser = new Xoh_href_parser(Xoa_app_.Utl_encoder_mgr().Href(), url_parser.Url_parser()); + href_parser = new Xoh_href_parser(Xoa_app_.Utl__encoder_mgr().Href(), url_parser.Url_parser()); sanitizer = new Xop_sanitizer(parser_amp_mgr, msg_log); user_mgr = new Xou_user_mgr(this, user); sys_cfg = new Xoa_sys_cfg(this); @@ -65,6 +65,8 @@ public class Xoae_app implements Xoa_app, GfoInvkAble { public Xof_cache_mgr File_mgr__cache_mgr() {return file_mgr.Cache_mgr();} public Xof_img_mgr File_mgr__img_mgr() {return file_mgr.Img_mgr();} public Xowmf_mgr Wmf_mgr() {return wmf_mgr;} private final Xowmf_mgr wmf_mgr = new Xowmf_mgr(); + public Bry_bfr_mkr Utl__bfr_mkr() {return Xoa_app_.Utl__bfr_mkr();} + public Url_encoder_mgr Utl__encoder_mgr() {return Xoa_app_.Utl__encoder_mgr();} public Xoa_wiki_mgr Wiki_mgr() {return wiki_mgr;} private Xoa_wiki_mgr wiki_mgr; @@ -101,7 +103,6 @@ public class Xoae_app implements Xoa_app, GfoInvkAble { public Xoh_file_main_wkr File_main_wkr() {return file_main_wkr;} private Xoh_file_main_wkr file_main_wkr = new Xoh_file_main_wkr(); public Btrie_slim_mgr Utl_trie_tblw_ws() {return utl_trie_tblw_ws;} private Btrie_slim_mgr utl_trie_tblw_ws = Xop_tblw_ws_itm.trie_(); - public Bry_bfr_mkr Utl_bry_bfr_mkr() {return Xoa_app_.Utl_bry_bfr_mkr();} public Gfo_fld_rdr Utl_fld_rdr() {return utl_fld_rdr;} Gfo_fld_rdr utl_fld_rdr = Gfo_fld_rdr.xowa_(); public Gfo_log_bfr Log_bfr() {return log_bfr;} private Gfo_log_bfr log_bfr = new Gfo_log_bfr(); public Xoa_sys_cfg Sys_cfg() {return sys_cfg;} private Xoa_sys_cfg sys_cfg; @@ -167,7 +168,7 @@ public class Xoae_app implements Xoa_app, GfoInvkAble { Env_.GarbageCollect(); } public void Free_mem(boolean clear_ctx) { - this.Utl_bry_bfr_mkr().Clear(); + this.Utl__bfr_mkr().Clear(); msg_log.Clear(); wiki_mgr.Free_mem(clear_ctx); } diff --git a/400_xowa/src/gplx/xowa/apis/xowa/gui/pages/Xoapi_view.java b/400_xowa/src/gplx/xowa/apis/xowa/gui/pages/Xoapi_view.java index 7ce2527c2..cb2e9ea90 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/gui/pages/Xoapi_view.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/gui/pages/Xoapi_view.java @@ -36,7 +36,7 @@ public class Xoapi_view implements GfoInvkAble { public void Save_as() { if (this.Active_tab_is_null()) return; Xog_tab_itm tab = win.Tab_mgr().Active_tab(); - String file_name = Xoa_app_.Utl_encoder_mgr().Fsys_safe().Encode_str(String_.new_utf8_(tab.Page().Ttl().Full_url())) + ".html"; + String file_name = Xoa_app_.Utl__encoder_mgr().Fsys_safe().Encode_str(String_.new_utf8_(tab.Page().Ttl().Full_url())) + ".html"; String file_url = app.Gui_mgr().Kit().New_dlg_file(Gfui_kit_.File_dlg_type_save, "Select file to save to:").Init_file_(file_name).Ask(); if (String_.Len_eq_0(file_url)) return; Io_mgr._.SaveFilStr(file_url, tab.Html_box().Text()); diff --git a/400_xowa/src/gplx/xowa/apps/progs/Xoa_prog_mgr.java b/400_xowa/src/gplx/xowa/apps/progs/Xoa_prog_mgr.java index 9be7cd96f..3061ee3cb 100644 --- a/400_xowa/src/gplx/xowa/apps/progs/Xoa_prog_mgr.java +++ b/400_xowa/src/gplx/xowa/apps/progs/Xoa_prog_mgr.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.apps.progs; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; -import gplx.xowa.apps.fsys.*; +import gplx.xowa.apps.fsys.*; import gplx.xowa.files.*; public class Xoa_prog_mgr implements GfoInvkAble { public void Init_by_app(Xoa_fsys_eval cmd_eval) { Gfo_usr_dlg usr_dlg = Xoa_app_.Usr_dlg(); diff --git a/400_xowa/src/gplx/xowa/bldrs/Db_mgr_fxt.java b/400_xowa/src/gplx/xowa/bldrs/Db_mgr_fxt.java index 9f6e1ab49..e4f109d41 100644 --- a/400_xowa/src/gplx/xowa/bldrs/Db_mgr_fxt.java +++ b/400_xowa/src/gplx/xowa/bldrs/Db_mgr_fxt.java @@ -38,7 +38,7 @@ public class Db_mgr_fxt { Xodb_page_tbl tbl_page = wiki.Db_mgr_as_sql().Tbl_page(); Db_stmt stmt = Db_stmt_.Null; try { - stmt = tbl_page.Insert_stmt(wiki.Db_mgr_as_sql().Fsys_mgr().Conn_page()); + stmt = tbl_page.Insert_stmt(wiki.Db_mgr_as_sql().Core_data_mgr().Conn_page()); int len = ttls.length; DateAdp modified_on = Tfds.Now_time0_add_min(0); for (int i = 0; i < len; i++) { @@ -132,7 +132,7 @@ public class Db_mgr_fxt { Xodb_mgr_sql db_mgr = wiki.Db_mgr_create_as_sql(); db_mgr.Data_storage_format_(gplx.ios.Io_stream_.Tid_file); db_mgr.Init_by_ns_map(""); - Db_conn conn = db_mgr.Fsys_mgr().Conn_core(); + Db_conn conn = db_mgr.Core_data_mgr().Conn_core(); conn.Exec_qry(Db_qry_delete.new_all_("xowa_cfg")); conn.Exec_qry(Db_qry_delete.new_all_("xowa_db")); conn.Exec_qry(Db_qry_delete.new_all_("xowa_ns")); diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_fsdb_make.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_fsdb_make.java index b3374c17d..32078d89c 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_fsdb_make.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_fsdb_make.java @@ -41,6 +41,7 @@ public class Xob_fsdb_make extends Xob_itm_basic_base implements Xob_cmd { private Xof_fsdb_mgr__sql src_fsdb_mgr; public Xob_fsdb_make(Xob_bldr bldr, Xowe_wiki wiki) { this.Cmd_ctor(bldr, wiki); + wiki.File_mgr__fsdb_mode().Tid_make_y_(); trg_fsdb_mgr = new Xof_fsdb_mgr__sql(); trg_fsdb_mgr.Init_by_wiki(wiki); src_fsdb_mgr = new Xof_fsdb_mgr__sql(); diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_wkr.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_wkr.java index 3f34cdf4c..f9328a960 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_wkr.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_wkr.java @@ -19,7 +19,7 @@ package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xo import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.pages.*; import gplx.xowa.wikis.*; import gplx.xowa.bldrs.oimgs.*; import gplx.xowa.files.*; import gplx.xowa.gui.*; -import gplx.xowa.parsers.lnkis.redlinks.*; import gplx.xowa.parsers.logs.*; import gplx.xowa.hdumps.*; +import gplx.xowa.parsers.lnkis.redlinks.*; import gplx.xowa.parsers.logs.*; import gplx.xowa.html.hdumps.bldrs.*; import gplx.xowa.xtns.scribunto.*; import gplx.xowa.xtns.wdatas.*; import gplx.xowa.files.fsdb.*; import gplx.fsdb.meta.*; public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xopg_redlink_logger { @@ -65,6 +65,7 @@ public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xopg_redlink gplx.xowa.xtns.scores.Score_xnde.Log_wkr = log_mgr.Make_wkr(); gplx.xowa.xtns.hieros.Hiero_xnde.Log_wkr = log_mgr.Make_wkr(); Xof_fsdb_mgr__sql trg_fsdb_mgr = new Xof_fsdb_mgr__sql(); + wiki.File_mgr__fsdb_mode().Tid_make_y_(); trg_fsdb_mgr.Init_by_wiki(wiki); Fsm_mnt_mgr trg_mnt_mgr = trg_fsdb_mgr.Mnt_mgr(); trg_mnt_mgr.Insert_to_mnt_(Fsm_mnt_mgr.Mnt_idx_main); diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_page_regy_tbl.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_page_regy_tbl.java index 1e194839c..40dd229ef 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_page_regy_tbl.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_page_regy_tbl.java @@ -17,11 +17,12 @@ along with this program. If not, see . */ package gplx.xowa.bldrs.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.bldrs.oimgs.*; +import gplx.xowa.wikis.data.*; import gplx.xowa.files.repos.*; class Xob_page_regy_tbl { public static void Reset_table(Db_conn p) {Sqlite_engine_.Tbl_create_and_delete(p, Tbl_name, Tbl_sql);} public static void Create_data(Gfo_usr_dlg usr_dlg, Db_conn p, byte repo_tid, Xowe_wiki wiki) { - Create_data__insert_page(usr_dlg, p, repo_tid, wiki.Db_mgr_as_sql().Fsys_mgr().Get_url(Xodb_file_tid.Tid_core)); + Create_data__insert_page(usr_dlg, p, repo_tid, wiki.Db_mgr_as_sql().Core_data_mgr().Get_url(Xowd_db_file_.Tid_core)); Create_data__insert_redirect(usr_dlg, p, repo_tid, wiki.Fsys_mgr().Root_dir().GenSubFil(Xodb_db_file.Name__wiki_redirect)); } public static void Delete_local(Db_conn p) { diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_itm_tst.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_itm_tst.java index 2aa736630..9e432a917 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_itm_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_itm_tst.java @@ -128,7 +128,6 @@ class Xob_xfer_temp_itm_fxt { ; public Xob_xfer_temp_itm_fxt Reset() { itm.Clear(); - img_size.Clear(); return this; } public Xob_xfer_temp_itm_fxt Init_rdr_image() { diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_cmd_exec_sql.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_cmd_exec_sql.java index 06a195b33..851609f3c 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_cmd_exec_sql.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_cmd_exec_sql.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.xowa.dbs.*; +import gplx.xowa.wikis.data.*; import gplx.xowa.dbs.*; public class Xob_cmd_exec_sql implements Xob_cmd { private Xowe_wiki wiki; private int file_idx = -1; private String sql; public Xob_cmd_exec_sql(Xob_bldr bldr, Xowe_wiki wiki) {this.wiki = wiki;} @@ -26,8 +26,8 @@ public class Xob_cmd_exec_sql implements Xob_cmd { Xoae_app app = wiki.Appe(); wiki.Init_assert(); // force load; needed to pick up MediaWiki ns for MediaWiki:mainpage Xodb_mgr_sql db_mgr = wiki.Db_mgr_as_sql(); - Xodb_fsys_mgr fsys_mgr = db_mgr.Fsys_mgr(); - Xodb_file file = fsys_mgr.Get_by_idx(file_idx); + Xowe_core_data_mgr fsys_mgr = db_mgr.Core_data_mgr(); + Xowd_db_file file = fsys_mgr.Dbs__get_at(file_idx); app.Usr_dlg().Plog_many("", "", "exec_sql: running sql; file_idx=~{0} sql=~{1}", file_idx, sql); file.Conn().Exec_sql(sql); } diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_sql.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_sql.java index f331da7eb..f7a1cad9e 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_sql.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_sql.java @@ -16,12 +16,13 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.ios.*; import gplx.xowa.bldrs.wikis.redirects.*; +import gplx.dbs.*; import gplx.ios.*; import gplx.xowa.bldrs.wikis.redirects.*; +import gplx.xowa.wikis.data.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.bldrs.filters.dansguardians.*; public class Xob_page_sql extends Xob_itm_basic_base implements Xobd_wkr, GfoInvkAble { private Db_idx_mode idx_mode = Db_idx_mode.Itm_end; private Io_stream_zip_mgr zip_mgr; private byte data_storage_format; private boolean redirect_id_enabled; - private Xodb_mgr_sql db_mgr; private Xodb_fsys_mgr fsys_mgr; private Db_conn page_conn; private Db_stmt page_stmt; private Xob_text_stmts_mgr text_stmts_mgr; + private Xodb_mgr_sql db_mgr; private Xowe_core_data_mgr fsys_mgr; private Db_conn page_conn; private Db_stmt page_stmt; private Xob_text_stmts_mgr text_stmts_mgr; private int page_count_all, page_count_main = 0; private int txn_commit_interval = 100000; // 100 k private DateAdp modified_latest = DateAdp_.MinValue; private Xop_redirect_mgr redirect_mgr; private Xob_redirect_tbl redirect_tbl; @@ -39,7 +40,7 @@ public class Xob_page_sql extends Xob_itm_basic_base implements Xobd_wkr, GfoInv // init db db_mgr = wiki.Db_mgr_as_sql(); db_mgr.Data_storage_format_(data_storage_format); - fsys_mgr = db_mgr.Fsys_mgr(); + fsys_mgr = db_mgr.Core_data_mgr(); page_conn = fsys_mgr.Conn_page(); page_stmt = db_mgr.Tbl_page().Insert_stmt(page_conn); page_conn.Txn_mgr().Txn_bgn_if_none(); @@ -47,7 +48,7 @@ public class Xob_page_sql extends Xob_itm_basic_base implements Xobd_wkr, GfoInv if (idx_mode.Tid_is_bgn()) Idx_create(); if (redirect_id_enabled) { - redirect_tbl = new Xob_redirect_tbl(wiki.Fsys_mgr().Root_dir(), Xoa_app_.Utl_encoder_mgr().Url_ttl()).Create_table(); + redirect_tbl = new Xob_redirect_tbl(wiki.Fsys_mgr().Root_dir(), Xoa_app_.Utl__encoder_mgr().Url_ttl()).Create_table(); redirect_tbl.Conn().Txn_mgr().Txn_bgn_if_none(); } @@ -102,18 +103,18 @@ public class Xob_page_sql extends Xob_itm_basic_base implements Xobd_wkr, GfoInv Xow_ns_mgr ns_mgr = wiki.Ns_mgr(); db_mgr.Tbl_site_stats().Update(page_count_main, page_count_all, ns_mgr.Ns_file().Count()); // save page stats db_mgr.Tbl_xowa_ns().Insert(ns_mgr); // save ns - db_mgr.Tbl_xowa_db().Commit_all(db_mgr.Fsys_mgr().Files_ary()); // save dbs; note that dbs can be saved again later + db_mgr.Core_data_mgr().Dbs__save(); // save dbs; note that dbs can be saved again later db_mgr.Tbl_xowa_cfg().Insert_str(Xodb_mgr_sql.Grp_wiki_init, "props.modified_latest", modified_latest.XtoStr_fmt(DateAdp_.Fmt_iso8561_date_time)); if (idx_mode.Tid_is_end()) Idx_create(); if (redirect_id_enabled) { redirect_tbl.Conn().Txn_mgr().Txn_end_all(); - Xodb_file core_file = fsys_mgr.Get_tid_root(Xodb_file_tid.Tid_core); + Xowd_db_file core_file = fsys_mgr.Dbs__get_by_tid_1st(Xowd_db_file_.Tid_core); redirect_tbl.Update_trg_redirect_id(core_file.Url(), 1); redirect_tbl.Update_src_redirect_id(core_file.Url(), page_conn); } } private void Idx_create() { - fsys_mgr.Index_create(usr_dlg, Byte_.Ary(Xodb_file_tid.Tid_core, Xodb_file_tid.Tid_text), Idx_page_title, Idx_page_random); + fsys_mgr.Index_create(usr_dlg, Byte_.Ary(Xowd_db_file_.Tid_core, Xowd_db_file_.Tid_text), Idx_page_title, Idx_page_random); } @Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_txn_commit_interval_)) txn_commit_interval = m.ReadInt("v"); @@ -131,11 +132,11 @@ public class Xob_page_sql extends Xob_itm_basic_base implements Xobd_wkr, GfoInv ; } class Xob_text_stmts_mgr { - public Xob_text_stmts_mgr(Xodb_mgr_sql db_mgr, Xodb_fsys_mgr fsys_mgr) {this.db_mgr = db_mgr; this.fsys_mgr = fsys_mgr;} private Xodb_mgr_sql db_mgr; Xodb_fsys_mgr fsys_mgr; + public Xob_text_stmts_mgr(Xodb_mgr_sql db_mgr, Xowe_core_data_mgr fsys_mgr) {this.db_mgr = db_mgr; this.fsys_mgr = fsys_mgr;} private Xodb_mgr_sql db_mgr; Xowe_core_data_mgr fsys_mgr; public Db_stmt Stmt_at(int i) {return text_stmts[i];} public Db_conn Conn_at(int i) {return text_providers[i];} public int Stmt_by_ns(int ns_file_idx, int text_len) { - Xodb_file file = File_get(ns_file_idx, text_len); + Xowd_db_file file = File_get(ns_file_idx, text_len); int stmt_idx = file.Id(); Db_stmt stmt = null; if (stmt_idx < text_stmts_len) { @@ -160,15 +161,15 @@ class Xob_text_stmts_mgr { } text_stmts = null; } - Xodb_file File_get(int file_idx, int text_len) { + Xowd_db_file File_get(int file_idx, int text_len) { if (file_idx == Xow_ns.Bldr_file_idx_heap) { file_idx = fsys_mgr.Tid_text_idx(); - Xodb_file file = fsys_mgr.Get_or_make(Xodb_file_tid.Tid_text, file_idx); + Xowd_db_file file = Dbs__get_or_make(fsys_mgr, Xowd_db_file_.Tid_text, file_idx); long file_len = file.File_len(); long file_max = fsys_mgr.Tid_text_max(); - if (file_max != Xodb_fsys_mgr.Heap_max_infinite && (file_len + text_len > file_max)) { // file is "full" + if (file_max != Xowe_core_data_mgr.Heap_max_infinite && (file_len + text_len > file_max)) { // file is "full" file.Conn().Txn_mgr().Txn_end_all(); // close txn - file = fsys_mgr.Make(Xodb_file_tid.Tid_text); + file = fsys_mgr.Dbs__add_new(Xowd_db_file_.Tid_text); file_idx = file.Id(); fsys_mgr.Tid_text_idx_(file_idx); } @@ -176,7 +177,11 @@ class Xob_text_stmts_mgr { return file; } else - return fsys_mgr.Get_or_make(Xodb_file_tid.Tid_text, file_idx); + return Dbs__get_or_make(fsys_mgr, Xowd_db_file_.Tid_text, file_idx); + } + private static Xowd_db_file Dbs__get_or_make(Xowe_core_data_mgr core_data_mgr, byte file_tid, int file_idx) { + int len = core_data_mgr.Dbs__len(); + return file_idx < len ? core_data_mgr.Dbs__get_at(file_idx) : core_data_mgr.Dbs__add_new(file_tid); } private void Add(Db_conn conn, Db_stmt stmt, int stmt_idx) { int new_len = stmt_idx + 1; diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_base.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_base.java index c67a0c36a..e346b2d99 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_base.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_base.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.core.primitives.*; import gplx.ios.*; -import gplx.xowa.dbs.*; import gplx.xowa.tdbs.*; +import gplx.xowa.wikis.data.*; import gplx.xowa.dbs.*; import gplx.xowa.tdbs.*; public abstract class Xob_search_base extends Xob_itm_dump_base implements Xobd_wkr, GfoInvkAble { public abstract String Wkr_key(); public abstract Io_make_cmd Make_cmd_site(); @@ -59,8 +59,8 @@ public abstract class Xob_search_base extends Xob_itm_dump_base implements Xobd_ tmp_wtr_mgr.Rls_all(); if (delete_temp) Io_mgr._.DeleteDirDeep(temp_dir); if (wiki.Db_mgr().Tid() == Xodb_mgr_sql.Tid_sql) { - Xodb_fsys_mgr db_fs = wiki.Db_mgr_as_sql().Fsys_mgr(); - wiki.Db_mgr_as_sql().Tbl_xowa_db().Commit_all(db_fs.Files_ary()); // always save files now; need to commit created search_db_idx to xowa_db, else will be reused by ctg v2; DATE:2014-02-07 + Xowe_core_data_mgr core_data_mgr = (Xowe_core_data_mgr)wiki.Data_mgr__core_mgr(); + core_data_mgr.Dbs__save(); // always save files now; need to commit created search_db_idx to xowa_db, else will be reused by ctg v2; DATE:2014-02-07 } } public void Wkr_print() {} diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_sql_cmd.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_sql_cmd.java index 5811b449e..6fceafa34 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_sql_cmd.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_sql_cmd.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; +import gplx.xowa.wikis.data.*; import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; public class Xob_search_sql_cmd extends Xob_itm_basic_base implements Xob_cmd { public Xob_search_sql_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Cmd_key() {return KEY_search_sql;} public static final String KEY_search_sql = "import.sql.search_title.cmd"; @@ -28,14 +28,14 @@ public class Xob_search_sql_cmd extends Xob_itm_basic_base implements Xob_cmd { public void Exec(Xowe_wiki wiki) { usr_dlg.Log_many("", "", "search_title.cmd: initing wiki"); if (!Env_.Mode_testing()) wiki.Init_assert(); - Xodb_fsys_mgr db_fs = wiki.Db_mgr_as_sql().Fsys_mgr(); + Xowe_core_data_mgr db_fs = wiki.Db_mgr_as_sql().Core_data_mgr(); usr_dlg.Log_many("", "", "search_title.cmd: getting core db"); - Xodb_file page_db = db_fs.Get_tid_root(Xodb_file_tid.Tid_core); + Xowd_db_file page_db = db_fs.Dbs__get_by_tid_1st(Xowd_db_file_.Tid_core); usr_dlg.Log_many("", "", "search_title.cmd: getting existing searchdb"); - Xodb_file search_db = db_fs.Get_tid_root(Xodb_file_tid.Tid_search); + Xowd_db_file search_db = db_fs.Dbs__get_by_tid_1st(Xowd_db_file_.Tid_search); if (search_db == null) { usr_dlg.Log_many("", "", "search_title.cmd: making new searchdb"); - search_db = db_fs.Make(Xodb_file_tid.Tid_search); + search_db = db_fs.Dbs__add_new(Xowd_db_file_.Tid_search); } DataRdr page_rdr = DataRdr_.Null; Db_conn search_provider = search_db.Conn(); @@ -76,7 +76,7 @@ public class Xob_search_sql_cmd extends Xob_itm_basic_base implements Xob_cmd { search_provider.Txn_mgr().Txn_end_all_bgn_if_none(); search_temp_tbl.Make_data(usr_dlg, search_provider); search_provider.Txn_mgr().Txn_bgn_if_none(); - wiki.Db_mgr_as_sql().Tbl_xowa_db().Commit_all(db_fs.Files_ary()); + wiki.Db_mgr_as_sql().Core_data_mgr().Dbs__save(); search_provider.Txn_mgr().Txn_end_all(); } private int commit_interval = 100000, progress_interval = 10000; private void Commit(Db_conn search_provider) { diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_sql_wkr.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_sql_wkr.java index 293081b81..425d3a0a7 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_sql_wkr.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_search_sql_wkr.java @@ -16,7 +16,8 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.ios.*; import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; +import gplx.ios.*; +import gplx.xowa.wikis.data.*; import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; public class Xob_search_sql_wkr extends Xob_search_base implements Io_make_cmd { public Xob_search_sql_wkr(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} private Xodb_mgr_sql db_mgr = null; @Override public String Wkr_key() {return KEY;} public static final String KEY = "import.sql.search_title.wkr"; @@ -25,9 +26,9 @@ public class Xob_search_sql_wkr extends Xob_search_base implements Io_make_cmd { public void Sort_bgn() { db_mgr = wiki.Db_mgr_as_sql(); boolean created = false; - Xodb_file search_db = db_mgr.Fsys_mgr().Get_tid_root(Xodb_file_tid.Tid_search); + Xowd_db_file search_db = db_mgr.Core_data_mgr().Dbs__get_by_tid_1st(Xowd_db_file_.Tid_search); if (search_db == null) { - search_db = db_mgr.Fsys_mgr().Make(Xodb_file_tid.Tid_search); + search_db = db_mgr.Core_data_mgr().Dbs__add_new(Xowd_db_file_.Tid_search); created = true; } conn = search_db.Conn(); diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_sql.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_sql.java index e517fe02c..49f1c4113 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_sql.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_sql.java @@ -27,6 +27,6 @@ public class Xob_term_sql extends Xob_term_base { db_mgr.Tbl_xowa_cfg().Insert_bry_as_str (Xodb_mgr_sql.Grp_wiki_init, "props.main_page", wiki.Props().Main_page()); db_mgr.Tbl_xowa_cfg().Insert_bry_as_str (Xodb_mgr_sql.Grp_wiki_init, "props.siteinfo_misc", wiki.Props().Siteinfo_misc()); db_mgr.Tbl_xowa_cfg().Insert_bry_as_str (Xodb_mgr_sql.Grp_wiki_init, "props.siteinfo_mainpage", wiki.Props().Siteinfo_mainpage()); - wiki.Db_mgr_as_sql().Fsys_mgr().Rls(); + wiki.Db_mgr_as_sql().Core_data_mgr().Rls(); } } diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_cleanup.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_cleanup.java index b603dac23..fde74871a 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_cleanup.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_cleanup.java @@ -106,7 +106,7 @@ public class Xobc_core_cleanup extends Xob_itm_basic_base implements Xob_cmd { public static void Delete_wiki_sql(Xowe_wiki wiki) { Gfo_usr_dlg usr_dlg = wiki.Appe().Usr_dlg(); Io_url wiki_root_dir = wiki.Fsys_mgr().Root_dir(); if (wiki.Db_mgr().Tid() == gplx.xowa.dbs.Xodb_mgr_sql.Tid_sql) // NOTE: must check; if empty dir (or text db) than db_mgr will be txt - wiki.Db_mgr_as_sql().Fsys_mgr().Rls(); // NOTE: if sqlite files, must rls; + wiki.Db_mgr_as_sql().Core_data_mgr().Rls(); // NOTE: if sqlite files, must rls; Io_url[] sqlite3_files = Io_mgr._.QueryDir_args(wiki_root_dir).FilPath_("*.sqlite3").ExecAsUrlAry(); int sqlite3_files_len = sqlite3_files.length; usr_dlg.Note_many("", "delete_wiki", "deleting sqlite3 files: ~{0} ~{1}", sqlite3_files_len, wiki_root_dir.Raw()); diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_category_registry_sql.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_category_registry_sql.java index 0db4a30cb..7c06887fe 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_category_registry_sql.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_category_registry_sql.java @@ -30,7 +30,7 @@ public class Xob_category_registry_sql implements Xob_cmd { Xob_tmp_wtr rslt_wtr = Xob_tmp_wtr.new_wo_ns_(Io_url_gen_.dir_(rslt_dir), Io_mgr.Len_mb); Xodb_mgr_sql db_mgr = Xodb_mgr_sql.Get_or_load(wiki); - Db_conn conn = db_mgr.Fsys_mgr().Conn_core(); + Db_conn conn = db_mgr.Core_data_mgr().Conn_core(); Db_qry_select qry = Db_qry_select.new_() .Cols_(Xodb_page_tbl.Fld_page_title, Xodb_page_tbl.Fld_page_id) .From_(Xodb_page_tbl.Tbl_name) diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql_make.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql_make.java index 19e1a81a2..b2d23cab5 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql_make.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql_make.java @@ -17,6 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*; import gplx.core.flds.*; import gplx.ios.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.ctgs.*; +import gplx.xowa.wikis.data.*; public class Xob_categorylinks_sql_make implements Io_make_cmd { private Xowe_wiki wiki; private Sql_file_parser sql_parser; private Db_idx_mode idx_mode; private Xodb_mgr_sql db_mgr; @@ -30,15 +31,15 @@ public class Xob_categorylinks_sql_make implements Io_make_cmd { name_id_rdr = New_registry_rdr(wiki, usr_dlg); cur_cat_file_max = wiki.Appe().Setup_mgr().Dump_mgr().Db_categorylinks_max(); - db_mgr.Delete_by_tid(Xodb_file_tid.Tid_category); - Xodb_fsys_mgr fsys_mgr = db_mgr.Fsys_mgr(); - Xodb_file category_file = fsys_mgr.Get_tid_root(Xodb_file_tid.Tid_core); + db_mgr.Delete_by_tid(Xowd_db_file_.Tid_category); + Xowe_core_data_mgr fsys_mgr = db_mgr.Core_data_mgr(); + Xowd_db_file category_file = fsys_mgr.Dbs__get_by_tid_1st(Xowd_db_file_.Tid_core); if (cur_cat_file_max > 0) { - category_file = fsys_mgr.Make(Xodb_file_tid.Tid_category); + category_file = fsys_mgr.Dbs__add_new(Xowd_db_file_.Tid_category); fsys_mgr.Conn_ctg_(category_file); } - cat_provider = db_mgr.Fsys_mgr().Conn_ctg(); + cat_provider = db_mgr.Core_data_mgr().Conn_ctg(); ctg_stmt = db_mgr.Tbl_category().Insert_stmt(cat_provider); File_open(category_file); first_provider = true; @@ -67,35 +68,35 @@ public class Xob_categorylinks_sql_make implements Io_make_cmd { } catch (Exception e) {usr_dlg.Warn_many("", "", "ctg_links.insert failed: name=~{0} err=~{1}", String_.new_utf8_(ctg_name), Err_.Message_gplx_brief(e));} } public void Sort_end() { - Xodb_fsys_mgr fsys_mgr = db_mgr.Fsys_mgr(); + Xowe_core_data_mgr core_data_mgr = db_mgr.Core_data_mgr(); Ctg_grp_end(Ttl_last); File_close(); - db_mgr.Tbl_xowa_db().Commit_all(fsys_mgr.Files_ary()); + core_data_mgr.Dbs__save(); if (db_mgr.Category_version() == Xoa_ctg_mgr.Version_null) // NOTE: ctg_v1 wkr will set this to v1; only set to v2 if null db_mgr.Category_version_update(false); usr_dlg.Log_many("", "", "import.category.v2: insert done; committing; rows=~{0}", row_count); cat_provider.Txn_mgr().Txn_end_all(); ctg_stmt.Rls(); - if (idx_mode.Tid_is_end()) Idx_create(fsys_mgr); + if (idx_mode.Tid_is_end()) Idx_create(core_data_mgr); name_id_rdr.Rls(); if (String_.Eq(sql_parser.Src_fil().NameAndExt(), Xob_ctg_v1_sql_make.Url_sql)) // delete temp xowa_categorylinks.sql file created by cat_v1 Io_mgr._.DeleteFil(sql_parser.Src_fil()); } - private void Idx_create(Xodb_fsys_mgr fsys_mgr) { - fsys_mgr.Index_create(usr_dlg, Byte_.Ary(Xodb_file_tid.Tid_core, Xodb_file_tid.Tid_category), Idx_categorylinks_from, Idx_categorylinks_main); + private void Idx_create(Xowe_core_data_mgr fsys_mgr) { + fsys_mgr.Index_create(usr_dlg, Byte_.Ary(Xowd_db_file_.Tid_core, Xowd_db_file_.Tid_category), Idx_categorylinks_from, Idx_categorylinks_main); } int Ctg_grp_end(byte[] new_ctg_ttl) { if (cur_cat_ttl != Bry_.Empty && cur_cat_id != -1) db_mgr.Tbl_category().Insert(ctg_stmt, cur_cat_id, cur_cat_counts[Xoa_ctg_mgr.Tid_page], cur_cat_counts[Xoa_ctg_mgr.Tid_subc], cur_cat_counts[Xoa_ctg_mgr.Tid_file], Xoa_ctg_mgr.Hidden_n, cur_cat_file_idx); if (new_ctg_ttl == Ttl_last) return Cur_cat_id_null; // last ttl; called by this.End(); exit early else will fail in Cur_cat_id_find() - if (cur_cat_file_max > 0 && cur_cat_file_size > cur_cat_file_max) {File_close(); File_open(db_mgr.Fsys_mgr().Make(Xodb_file_tid.Tid_category));} + if (cur_cat_file_max > 0 && cur_cat_file_size > cur_cat_file_max) {File_close(); File_open(db_mgr.Core_data_mgr().Dbs__add_new(Xowd_db_file_.Tid_category));} cur_cat_id = Cur_cat_id_find(new_ctg_ttl); for (int i = 0; i < Xoa_ctg_mgr.Tid__max; i++) cur_cat_counts[i] = 0; cur_cat_ttl = new_ctg_ttl; return cur_cat_id; } - private void File_open(Xodb_file file) { + private void File_open(Xowd_db_file file) { cl_provider = file.Conn(); cl_stmt = db_mgr.Tbl_categorylinks().Insert_stmt(cl_provider); cl_provider.Txn_mgr().Txn_bgn_if_none(); diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql_tst.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql_tst.java index 1dc956a92..318f3b97e 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql_tst.java @@ -34,7 +34,7 @@ public class Xob_categorylinks_sql_tst { )); fxt.Exec_run(new Xob_category_registry_sql(fxt.Bldr(), fxt.Wiki())); fxt.Exec_run(new Xob_categorylinks_sql(fxt.Bldr(), fxt.Wiki())); - Db_conn conn = fxt.Wiki().Db_mgr_as_sql().Fsys_mgr().Conn_ctg(); + Db_conn conn = fxt.Wiki().Db_mgr_as_sql().Core_data_mgr().Conn_ctg(); Db_tst_qry.tbl_(Xodb_category_tbl.Tbl_name, Xodb_category_tbl.Fld_cat_id) .Cols_(Xodb_category_tbl.Fld_cat_id, Xodb_category_tbl.Fld_cat_subcats, Xodb_category_tbl.Fld_cat_files, Xodb_category_tbl.Fld_cat_pages) .Rows_add_vals(1, 0, 0, 2) diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_base.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_base.java index dae185aec..d29f5380d 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_base.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_base.java @@ -25,7 +25,7 @@ public abstract class Xob_ctg_v1_base extends Xob_itm_dump_base implements Xobd_ public OrderedHash Wkr_hooks() {return wkr_hooks;} private OrderedHash wkr_hooks = OrderedHash_.new_bry_(); public void Wkr_bgn(Xob_bldr bldr) { this.Init_dump(this.Wkr_key(), wiki.Tdb_fsys_mgr().Site_dir().GenSubDir(Xotdb_dir_info_.Name_category)); - Bry_bfr tmp_bfr = bldr.App().Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = bldr.App().Utl__bfr_mkr().Get_b512(); Xol_lang lang = wiki.Lang(); wkr_hooks_add(tmp_bfr, lang.Ns_names()); wkr_hooks_add(tmp_bfr, lang.Ns_aliases()); diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_sql.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_sql.java index 27c2fdc90..63fd2e215 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_sql.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_sql.java @@ -57,7 +57,7 @@ class Xob_ctg_v1_sql_make implements Io_make_cmd { Bry_fmtr fmtr = Bry_fmtr.new_("(~{page_id},'~{cat_name}','','','','','~{cat_type}')\n", "page_id", "cat_name", "cat_type"); public static final String Url_sql = "xowa_categorylinks.sql"; private static byte[] Escape_for_sql(Xowe_wiki wiki, byte[] bry) { - Bry_bfr bfr = wiki.Appe().Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr bfr = wiki.Appe().Utl__bfr_mkr().Get_b512(); int len = bry.length; boolean dirty = false; for (int i = 0; i < len; i++) { diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_sql.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_sql.java index eebba82c6..6ca7f704e 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_sql.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_sql.java @@ -17,14 +17,15 @@ along with this program. If not, see . */ package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; +import gplx.xowa.wikis.data.*; public class Xoctg_hiddencat_parser_sql extends Xoctg_hiddencat_parser_base { public Xoctg_hiddencat_parser_sql(Xob_bldr bldr, Xowe_wiki wiki) {this.Ctor(bldr, wiki);} private Db_conn conn; @Override public String Cmd_key() {return KEY;} public static final String KEY = "import.sql.hiddencat"; @Override public void Cmd_bgn_hook(Xob_bldr bldr, Sql_file_parser parser) { super.Cmd_bgn_hook(bldr, parser); Xodb_mgr_sql db_mgr = wiki.Db_mgr_as_sql(); - Xodb_fsys_mgr fsys_mgr = db_mgr.Fsys_mgr(); - conn = fsys_mgr.Conn_ctg(); + Xowe_core_data_mgr core_data_mgr = db_mgr.Core_data_mgr(); + conn = core_data_mgr.Conn_ctg(); conn.Txn_mgr().Txn_bgn_if_none(); tbl = db_mgr.Tbl_category(); stmt = tbl.Update_stmt(conn); diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_sql_tst.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_sql_tst.java index 67b06842f..c7aba883e 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_sql_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xoctg_hiddencat_parser_sql_tst.java @@ -40,7 +40,7 @@ public class Xoctg_hiddencat_parser_sql_tst { private void Init_ctgs(int... ctgs) { int len = ctgs.length; Xodb_category_tbl tbl = fxt.Wiki().Db_mgr_as_sql().Tbl_category(); - Db_conn conn = fxt.Wiki().Db_mgr_as_sql().Fsys_mgr().Conn_ctg(); + Db_conn conn = fxt.Wiki().Db_mgr_as_sql().Core_data_mgr().Conn_ctg(); Db_stmt stmt = tbl.Insert_stmt(conn); try { for (int i = 0; i < len; i++) { @@ -52,7 +52,7 @@ public class Xoctg_hiddencat_parser_sql_tst { private void Tst_ctg_hidden(boolean expd_hidden, int... ctgs) { int len = ctgs.length; Xodb_category_tbl tbl = fxt.Wiki().Db_mgr_as_sql().Tbl_category(); - Db_conn conn = fxt.Wiki().Db_mgr_as_sql().Fsys_mgr().Conn_ctg(); + Db_conn conn = fxt.Wiki().Db_mgr_as_sql().Core_data_mgr().Conn_ctg(); for (int i = 0; i < len; i++) { int ctg_id = ctgs[i]; Xodb_category_itm ctg_itm = tbl.Select(conn, ctg_id); diff --git a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_dump_mgr_base.java b/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_dump_mgr_base.java index 685db3a1a..428be763f 100644 --- a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_dump_mgr_base.java +++ b/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_dump_mgr_base.java @@ -16,11 +16,12 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.oimgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.wikis.caches.*; import gplx.xowa.bldrs.files.*; +import gplx.dbs.*; import gplx.xowa.wikis.caches.*; import gplx.xowa.bldrs.files.*; +import gplx.xowa.wikis.data.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xob_cmd, GfoInvkAble { private Xob_dump_src_id page_src; - private Xodb_fsys_mgr db_fsys_mgr; protected Xop_parser parser; protected Xop_ctx ctx; protected Xop_root_tkn root; - private int[] ns_ary; private Xodb_file[] db_ary; + private Xowe_core_data_mgr db_fsys_mgr; protected Xop_parser parser; protected Xop_ctx ctx; protected Xop_root_tkn root; + private int[] ns_ary; private Xowd_db_file[] db_ary; private int ns_bgn = -1, db_bgn = -1, pg_bgn = -1; private int ns_end = -1, db_end = -1, pg_end = Int_.MaxValue; private int commit_interval = 1000, progress_interval = 250, cleanup_interval = 2500, select_size = 10 * Io_mgr.Len_mb; @@ -40,7 +41,7 @@ public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xo root = ctx.Tkn_mkr().Root(Bry_.Empty); wiki.Init_assert(); // NOTE: must init wiki for db_mgr_as_sql wiki.Db_mgr_as_sql().Init_load(Db_url_.sqlite_(Xodb_mgr_sql.Find_core_url(wiki))); // NOTE: must reinit providers as previous steps may have rls'd (and left member variable conn which is closed) - db_fsys_mgr = wiki.Db_mgr_as_sql().Fsys_mgr(); + db_fsys_mgr = wiki.Db_mgr_as_sql().Core_data_mgr(); db_ary = Xob_dump_src_ttl.Init_text_files_ary(db_fsys_mgr); poll_interval = poll_mgr.Poll_interval(); @@ -136,7 +137,7 @@ public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xo , Env_.TickCount_elapsed_in_sec(time_bgn), rate_mgr.Rate_as_str(), String_.new_utf8_(page.Ttl_wo_ns())); ctx.Clear(); Exec_pg_itm_hook(ns, page, page.Text()); - ctx.App().Utl_bry_bfr_mkr().Clear_fail_check(); // make sure all bfrs are released + ctx.App().Utl__bfr_mkr().Clear_fail_check(); // make sure all bfrs are released if (ctx.Wiki().Cache_mgr().Tmpl_result_cache().Count() > 50000) ctx.Wiki().Cache_mgr().Tmpl_result_cache().Clear(); ++exec_count; @@ -150,7 +151,7 @@ public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xo } catch (Exception exc) { bldr.Usr_dlg().Warn_many(GRP_KEY, "parse", "failed to parse ~{0} error ~{1}", String_.new_utf8_(page.Ttl_wo_ns()), Err_.Message_lang(exc)); - ctx.App().Utl_bry_bfr_mkr().Clear(); + ctx.App().Utl__bfr_mkr().Clear(); this.Free(); } } diff --git a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_parse_all_src_sql.java b/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_parse_all_src_sql.java index 9ac39b670..2f2eb073c 100644 --- a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_parse_all_src_sql.java +++ b/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_parse_all_src_sql.java @@ -16,13 +16,13 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.oimgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.xowa.dbs.*; import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.dbs.tbls.*; +import gplx.xowa.wikis.data.*; import gplx.xowa.dbs.*; import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.dbs.tbls.*; class Xob_dump_src_ttl implements Xob_parse_all_db { - private Xodb_mgr_sql db_mgr; private Db_stmt page_stmt; private Xodb_file[] text_files_ary; private int text_files_len; private byte redirect; + private Xodb_mgr_sql db_mgr; private Db_stmt page_stmt; private Xowd_db_file[] text_files_ary; private int text_files_len; private byte redirect; public Xob_dump_src_ttl Init(Xowe_wiki wiki, int limit, byte redirect) { this.db_mgr = wiki.Db_mgr_as_sql(); this.redirect = redirect; - page_stmt = db_mgr.Tbl_page().Select_for_parse_all_stmt(db_mgr.Fsys_mgr().Conn_core(), limit, redirect); - text_files_ary = Init_text_files_ary(db_mgr.Fsys_mgr()); + page_stmt = db_mgr.Tbl_page().Select_for_parse_all_stmt(db_mgr.Core_data_mgr().Conn_core(), limit, redirect); + text_files_ary = Init_text_files_ary(db_mgr.Core_data_mgr()); text_files_len = text_files_ary.length; return this; } @@ -30,21 +30,20 @@ class Xob_dump_src_ttl implements Xob_parse_all_db { Cancelable cancelable = Cancelable_.Never; db_mgr.Tbl_page().Select_for_parse_all(cancelable, hash, page_stmt, ns_id, ttl, redirect); for (int i = 0; i < text_files_len; i++) { - Xodb_file text_file = text_files_ary[i]; + Xowd_db_file text_file = text_files_ary[i]; db_mgr.Tbl_text().Select_in(cancelable, text_file, hash); } } - public static Xodb_file[] Init_text_files_ary(Xodb_fsys_mgr fsys_mgr) { + public static Xowd_db_file[] Init_text_files_ary(Xowe_core_data_mgr core_data_mgr) { ListAdp text_files_list = ListAdp_.new_(); - Xodb_file[] file_ary = fsys_mgr.Files_ary(); - int len = file_ary.length; - if (len == 1) return new Xodb_file[] {file_ary[0]}; // single file: return core; note that there are no Tid = Text + int len = core_data_mgr.Dbs__len(); + if (len == 1) return new Xowd_db_file[] {core_data_mgr.Dbs__get_at(0)}; // single file: return core; note that there are no Tid = Text for (int i = 0; i < len; i++) { - Xodb_file file = file_ary[i]; - if (file.Tid() == Xodb_file_tid.Tid_text) + Xowd_db_file file = core_data_mgr.Dbs__get_at(i); + if (file.Tid() == Xowd_db_file_.Tid_text) text_files_list.Add(file); } - return (Xodb_file[])text_files_list.Xto_ary_and_clear(Xodb_file.class); + return (Xowd_db_file[])text_files_list.Xto_ary_and_clear(Xowd_db_file.class); } } class Xob_dump_src_id { @@ -54,7 +53,7 @@ class Xob_dump_src_id { public Xob_dump_src_id Init(Xowe_wiki wiki, byte redirect, int size_max) { this.db_mgr = wiki.Db_mgr_as_sql(); this.redirect = redirect; this.size_max = size_max; - page_db_url = db_mgr.Fsys_mgr().Get_tid_root(Xodb_file_tid.Tid_core).Url().Raw(); + page_db_url = db_mgr.Core_data_mgr().Dbs__get_by_tid_1st(Xowd_db_file_.Tid_core).Url().Raw(); return this; } public void Get_pages(ListAdp list, int text_db_idx, int cur_ns, int prv_id) { @@ -76,7 +75,7 @@ class Xob_dump_src_id { private DataRdr New_rdr(Xodb_mgr_sql db_mgr, String page_db_url, int text_db_idx, int cur_ns, int prv_id, byte redirect) { if (cur_text_db_idx != text_db_idx) { cur_text_db_idx = text_db_idx; - Xodb_file text_db = db_mgr.Fsys_mgr().Get_by_idx(text_db_idx); + Xowd_db_file text_db = db_mgr.Core_data_mgr().Dbs__get_at(text_db_idx); Db_conn conn = text_db.Conn(); String sql = String_.Format(Sql_select, New_rdr__redirect_clause(redirect)); text_stmt = conn.Stmt_new(Db_qry_sql.rdr_(sql)); diff --git a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_text_db_prep.java b/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_text_db_prep.java index a2a501f01..6f016ca45 100644 --- a/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_text_db_prep.java +++ b/400_xowa/src/gplx/xowa/bldrs/oimgs/Xob_text_db_prep.java @@ -16,9 +16,8 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.oimgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; -import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; +import gplx.xowa.wikis.data.*; import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; public class Xob_text_db_prep extends Xob_itm_basic_base implements Xob_cmd { - private Xodb_file[] db_files; public Xob_text_db_prep(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "wiki.text_db_prep"; public void Cmd_ini(Xob_bldr bldr) {} @@ -26,27 +25,26 @@ public class Xob_text_db_prep extends Xob_itm_basic_base implements Xob_cmd { wiki.Init_assert(); } public void Cmd_run() { - Xodb_fsys_mgr db_fsys_mgr = wiki.Db_mgr_as_sql().Fsys_mgr(); - String page_db_url = db_fsys_mgr.Get_tid_root(Xodb_file_tid.Tid_core).Url().Raw(); - db_files = db_fsys_mgr.Files_ary(); - int len = db_files.length; + Xowe_core_data_mgr core_data_mgr = wiki.Db_mgr_as_sql().Core_data_mgr(); + String page_db_url = core_data_mgr.Dbs__get_db_core().Url().Raw(); + int len = core_data_mgr.Dbs__len(); for (int i = 0; i < len; i++) { - Xodb_file db_file = db_files[i]; - if (db_file.Tid() == Xodb_file_tid.Tid_text) + Xowd_db_file db_file = core_data_mgr.Dbs__get_at(i); + if (db_file.Tid() == Xowd_db_file_.Tid_text) Prep_db(page_db_url, db_file); } } public void Cmd_end() { - int len = db_files.length; + Xowe_core_data_mgr core_data_mgr = wiki.Db_mgr_as_sql().Core_data_mgr(); + int len = core_data_mgr.Dbs__len(); for (int i = 0; i < len; i++) { - Xodb_file db_file = db_files[i]; - if (db_file.Tid() == Xodb_file_tid.Tid_text) + Xowd_db_file db_file = core_data_mgr.Dbs__get_at(i); + if (db_file.Tid() == Xowd_db_file_.Tid_text) db_file.Rls(); } - db_files = null; } public void Cmd_print() {} - private void Prep_db(String page_db_url, Xodb_file text_db) { + private void Prep_db(String page_db_url, Xowd_db_file text_db) { usr_dlg.Note_many("", "", "copying page_rows to text_db: ~{0}", text_db.Url().NameOnly()); Db_conn conn = text_db.Conn(); Sqlite_engine_.Tbl_create_and_delete(conn, "page_dump", Sql_create_tbl); diff --git a/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_image_ext_calc_tst.java b/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_image_ext_calc_tst.java index e6c5622ad..2865f10d3 100644 --- a/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_image_ext_calc_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_image_ext_calc_tst.java @@ -16,8 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.wikis.images; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wikis.*; -import org.junit.*; -import gplx.ios.*; +import org.junit.*; import gplx.ios.*; import gplx.xowa.files.*; public class Xob_image_ext_calc_tst { private Xob_image_ext_calc_fxt fxt = new Xob_image_ext_calc_fxt(); @Test public void Basic() {fxt.Init_("A.png" , Xof_media_type.Name_bitmap , Xof_ext_.Bry_png, 220, 110) .Test(Xof_ext_.Id_png);} // A.png -> png diff --git a/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_wiki_image_sql.java b/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_wiki_image_sql.java index 86641b54d..7c519a6e1 100644 --- a/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_wiki_image_sql.java +++ b/400_xowa/src/gplx/xowa/bldrs/wikis/images/Xob_wiki_image_sql.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.wikis.images; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wikis.*; -import gplx.ios.*; import gplx.xowa.bldrs.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.bldrs.oimgs.*; +import gplx.ios.*; import gplx.xowa.bldrs.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.bldrs.oimgs.*; import gplx.xowa.files.*; public class Xob_wiki_image_sql extends Xob_itm_dump_base implements Xob_cmd, GfoInvkAble, Sql_file_parser_cmd { private Db_conn conn = null; private Db_stmt stmt = null; private Xob_wiki_image_tbl tbl_image = new Xob_wiki_image_tbl(); diff --git a/400_xowa/src/gplx/xowa/bldrs/wikis/redirects/Xob_redirect_cmd.java b/400_xowa/src/gplx/xowa/bldrs/wikis/redirects/Xob_redirect_cmd.java index d1881760a..350a79300 100644 --- a/400_xowa/src/gplx/xowa/bldrs/wikis/redirects/Xob_redirect_cmd.java +++ b/400_xowa/src/gplx/xowa/bldrs/wikis/redirects/Xob_redirect_cmd.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.bldrs.wikis.redirects; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wikis.*; -import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.bldrs.oimgs.*; +import gplx.xowa.wikis.data.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.bldrs.oimgs.*; public class Xob_redirect_cmd extends Xob_dump_mgr_base { private Db_conn conn; private Xob_redirect_tbl redirect_tbl; private Xodb_mgr_sql db_mgr; private Xop_redirect_mgr redirect_mgr; private Url_encoder encoder; @@ -31,8 +31,8 @@ public class Xob_redirect_cmd extends Xob_dump_mgr_base { @Override protected Db_conn Init_db_file() { this.db_mgr = wiki.Db_mgr_as_sql(); redirect_mgr = wiki.Redirect_mgr(); - encoder = Xoa_app_.Utl_encoder_mgr().Url_ttl(); - redirect_tbl = new Xob_redirect_tbl(wiki.Fsys_mgr().Root_dir(), Xoa_app_.Utl_encoder_mgr().Url_ttl()).Create_table(); + encoder = Xoa_app_.Utl__encoder_mgr().Url_ttl(); + redirect_tbl = new Xob_redirect_tbl(wiki.Fsys_mgr().Root_dir(), Xoa_app_.Utl__encoder_mgr().Url_ttl()).Create_table(); conn = redirect_tbl.Conn(); conn.Txn_mgr().Txn_bgn_if_none(); return conn; @@ -51,6 +51,6 @@ public class Xob_redirect_cmd extends Xob_dump_mgr_base { @Override public void Exec_end_hook() { conn.Txn_mgr().Txn_end_all(); redirect_tbl.Create_indexes(usr_dlg); - redirect_tbl.Update_trg_redirect_id(db_mgr.Fsys_mgr().Get_url(Xodb_file_tid.Tid_core), 4); + redirect_tbl.Update_trg_redirect_id(db_mgr.Core_data_mgr().Get_url(Xowd_db_file_.Tid_core), 4); } } diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_all.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_all.java index be235828e..9af00d0d3 100644 --- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_all.java +++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_all.java @@ -108,13 +108,13 @@ class Xoctg_fmtr_all { } public byte[] Bld_bwd_fwd(Xowe_wiki wiki, Xoa_ttl ttl, Xoctg_view_grp view_grp) { if (view_grp.Total() < grp_max) return Bry_.Empty; - Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_k004(); + Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_k004(); Html_nav_bry(bfr, wiki, ttl, view_grp, Bool_.N); Html_nav_bry(bfr, wiki, ttl, view_grp, Bool_.Y); return bfr.Mkr_rls().Xto_bry_and_clear(); } private void Html_nav_bry(Bry_bfr bfr, Xowe_wiki wiki, Xoa_ttl ttl, Xoctg_view_grp view_grp, boolean fill_at_bgn) { - Bry_bfr href_bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr href_bfr = wiki.Utl__bfr_mkr().Get_b512(); wiki.Appe().Href_parser().Build_to_bfr(href_bfr, wiki, ttl); byte[] arg_idx_lbl = null; byte[] arg_sortkey = null; if (fill_at_bgn) { diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_itm.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_itm.java index c8ac9e11a..59065508e 100644 --- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_itm.java +++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_fmtr_itm.java @@ -104,7 +104,7 @@ class Xoctg_fmtr_itm_subc extends Xoctg_fmtr_itm_base { } byte[] Bld_contains_text(int sub_ctgs, int sub_pages, int sub_files) { if (sub_ctgs == 0 && sub_pages == 0 && sub_files == 0) return Bry_.Empty; - Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_b128(); + Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_b128(); bfr.Add_byte(Byte_ascii.Paren_bgn); Bld_contains_text_itm(bfr, Xol_msg_itm_.Id_ctgtree_subc_counts_ctg, sub_ctgs); Bld_contains_text_itm(bfr, Xol_msg_itm_.Id_ctgtree_subc_counts_page, sub_pages); diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr.java index 92981cea0..48af24bbf 100644 --- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr.java +++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr.java @@ -24,7 +24,7 @@ public class Xoctg_html_mgr implements GfoInvkAble { private final Xoctg_fmtr_all mgr_files = new Xoctg_fmtr_all(Xoa_ctg_mgr.Tid_file); public Xoctg_data_cache Data_cache() {return data_cache;} private Xoctg_data_cache data_cache = new Xoctg_data_cache(); public void Bld_html(Xowe_wiki wiki, Xoae_page page, Bry_bfr bfr) { - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_m001(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_m001(); try { if (wiki.Db_mgr().Category_version() == Xoa_ctg_mgr.Version_2) Bld_html_v2(wiki, page, tmp_bfr); diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr_tst.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr_tst.java index bd386a119..d238c895a 100644 --- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr_tst.java @@ -250,7 +250,7 @@ class Xoh_ctg_page_fxt { fmtr_itm.Init_from_all(wiki, wiki.Lang(), ctg, list_mgr, list, list.Len()); fmtr_itm.Init_from_grp(new byte[] {grp_char_0}, 0); fmtr_itm.Col_idx_(0, 0); - Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_b512(); fmtr_itm.XferAry(bfr, 0); Tfds.Eq_str_lines(expd, bfr.Mkr_rls().Xto_str_and_clear()); } @@ -258,12 +258,12 @@ class Xoh_ctg_page_fxt { Xoctg_fmtr_all list_mgr = ctg_html.Fmtr(tid); Xoctg_fmtr_grp fmtr_grp = ctg_html.Fmtr_grp(); fmtr_grp.Init_from_all(wiki, wiki.Lang(), ctg, list_mgr, ctg.Grp_by_tid(tid)); - Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_b512(); fmtr_grp.XferAry(bfr, 0); Tfds.Eq_str_lines(expd, bfr.Mkr_rls().Xto_str_and_clear()); } public void Test_html_all(byte tid, String expd) { - Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_b512(); ctg_html.Bld_all(bfr, wiki, wiki.Lang(), ctg, tid); Tfds.Eq_str_lines(expd, bfr.Mkr_rls().Xto_str_and_clear()); } diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_idx_mgr_tst.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_idx_mgr_tst.java index fb1e7ac03..9a8d0b1a9 100644 --- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_idx_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_idx_mgr_tst.java @@ -76,7 +76,7 @@ class Xoctg_idx_mgr_fxt { return this; } private Xoae_app app; Xowe_wiki wiki; Xoctg_idx_mgr idx_mgr; static final byte[] Ctg_name = Bry_.new_ascii_("Ctg_test"); public byte[] Make_src(int len) { - Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_k004().Mkr_rls(); + Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_k004().Mkr_rls(); bfr.Add_byte_pipe(); // always have leading pipe for (int i = 0; i < len; i++) { bfr.Add_base85_len_5(i).Add_byte(Byte_ascii.Semic); // idx.Id() = i diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_file.java b/400_xowa/src/gplx/xowa/dbs/Xodb_file.java deleted file mode 100644 index 52610e348..000000000 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_file.java +++ /dev/null @@ -1,44 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*; -import gplx.dbs.*; -public class Xodb_file { - public Xodb_file(int id, byte tid) {this.id = id; this.tid = tid;} - public int Id() {return id;} private final int id; // unique id in xowa_db - public byte Tid() {return tid;} private final byte tid; // db type id - public Io_url Url() {return url;} public Xodb_file Url_(Io_url v) {url = v; return this;} private Io_url url; - public String Url_rel() {return url_rel;} public Xodb_file Url_rel_(String v) {url_rel = v; return this;} private String url_rel; - public long File_len() {return file_len;} public Xodb_file File_len_add(int v) {file_len += v; return this;} private long file_len; - public long File_max() {return file_max;} public Xodb_file File_max_(long v) {file_max = v; return this;} private long file_max; - public byte Cmd_mode() {return cmd_mode;} public Xodb_file Cmd_mode_(byte v) {cmd_mode = v; return this;} private byte cmd_mode; - public Db_url Connect() {return connect;} public Xodb_file Connect_(Db_url v) {connect = v; return this;} private Db_url connect; - public Db_conn Conn() { - if (conn == null) conn = Db_conn_pool.I.Get_or_new(connect); - return conn; - } private Db_conn conn; - public void Conn_(Db_conn p) {conn = p;} - public void Rls() { - if (conn == null) return; - try { - conn.Txn_mgr().Txn_end_all(); // close any open transactions - conn.Conn_term(); - } finally {conn = null;} - } - public static Xodb_file load_(int id, byte tid, String url) {return new Xodb_file(id, tid).Url_rel_(url).Cmd_mode_(Db_cmd_mode.Tid_ignore);} - public static Xodb_file make_(int id, byte tid, String url) {return new Xodb_file(id, tid).Url_rel_(url).Cmd_mode_(Db_cmd_mode.Tid_create);} -} diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_fsys_mgr.java b/400_xowa/src/gplx/xowa/dbs/Xodb_fsys_mgr.java deleted file mode 100644 index 3afc2d222..000000000 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_fsys_mgr.java +++ /dev/null @@ -1,109 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*; -import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.tbls.*; -public class Xodb_fsys_mgr { - private final Io_url src_dir; private final Io_url trg_dir; private final String wiki_name; - public Xodb_fsys_mgr(Io_url src_dir, Io_url trg_dir, String wiki_name) {this.src_dir = src_dir; this.trg_dir = trg_dir; this.wiki_name = wiki_name;} - public Xodb_file[] Files_ary() {return files_ary;} - public Db_conn Conn_core() {return provider_core;} private Db_conn provider_core; - public Db_conn Conn_page() {return provider_page;} private Db_conn provider_page; - public Db_conn Conn_ctg() {return provider_ctg;} public void Conn_ctg_(Xodb_file file) {provider_ctg = file.Conn();} private Db_conn provider_ctg; - public Db_conn Conn_wdata() {return provider_wdata;}public void Conn_wdata_(Xodb_file file) {provider_wdata = file.Conn();} private Db_conn provider_wdata; - public int Tid_text_idx() {return tid_text_idx;} public Xodb_fsys_mgr Tid_text_idx_(int v) {tid_text_idx = v; return this;} private int tid_text_idx = File_id_core; - public long Tid_text_max() {return tid_text_max;} private long tid_text_max = Heap_max_infinite; - public void Init_by_files(Db_conn p, Xodb_file[] v) { - files_ary = v; files_ary_len = v.length; - boolean category_provider_core_null = true; - for (int i = 0; i < files_ary_len; i++) { - Xodb_file file = files_ary[i]; - Io_url url = trg_dir.GenSubFil(file.Url_rel()); // relative name only - file.Connect_(Db_url_.sqlite_(url)).Url_(url); - switch (file.Tid()) { - case Xodb_file_tid.Tid_core : file.Conn_(p); Set_file_core(file); break; - case Xodb_file_tid.Tid_category : if (category_provider_core_null) {Conn_ctg_(file); category_provider_core_null = false;} break; - case Xodb_file_tid.Tid_wikidata : Conn_wdata_(file); break; - case Xodb_file_tid.Tid_text : Set_file_text(file); break; - } - } - } - public void Init_by_ns_map(Xow_ns_mgr ns_mgr, String ns_map_str, long text_max) { - Set_file_core(Make(Xodb_file_tid.Tid_core)); - Xodb_ns_map_mgr ns_map = Xodb_ns_map_mgr.Parse(Bry_.new_ascii_(ns_map_str)); - Xodb_ns_map_itm[] ns_map_itms = ns_map.Itms(); - int ns_map_itms_len = ns_map_itms.length; - for (int i = 0; i < ns_map_itms_len; i++) { - Xodb_ns_map_itm itm = ns_map_itms[i]; - int[] ns_ids = itm.Ns_ids(); - int ns_ids_len = ns_ids.length; - Xodb_file file = Make(Xodb_file_tid.Tid_text); - for (int j = 0; j < ns_ids_len; j++) { - int ns_id = ns_ids[j]; - Xow_ns ns = ns_mgr.Ids_get_or_null(ns_id); if (ns == null) continue; // some dumps may not have ns; for example, pre-2013 dumps won't have Module (828) - ns.Bldr_file_idx_(file.Id()); - } - } - if (text_max > 0) - Set_file_text(Make(Xodb_file_tid.Tid_text).File_max_(text_max)); - } - private void Set_file_core(Xodb_file file) {provider_core = provider_page = provider_ctg = provider_wdata = file.Conn();} - private void Set_file_text(Xodb_file file) {tid_text_idx = file.Id(); tid_text_max = file.File_max();} - public Io_url Get_url(byte file_tid) { - Xodb_file file = Get_tid_root(file_tid); - return trg_dir.GenSubFil(file.Url_rel()); - } - public Xodb_file Get_by_idx(int idx) {return files_ary[idx];} - public Xodb_file Get_or_make(byte file_tid, int file_idx) {return file_idx < files_ary_len ? files_ary[file_idx] : Make(file_tid);} - public Xodb_file Get_tid_root(byte file_tid) { - for (int i = 0; i < files_ary_len; i++) { - Xodb_file file = files_ary[i]; - if (file.Tid() == file_tid) return file; // assume 1st found file is root - } - return null; - } - public void Index_create(Gfo_usr_dlg usr_dlg, byte[] tids, Db_idx_itm... idxs) { - for (int i = 0; i < files_ary_len; i++) { - Xodb_file file = files_ary[i]; - if (Byte_.In(file.Tid(), tids)) - Sqlite_engine_.Idx_create(usr_dlg, file.Conn(), Int_.Xto_str(file.Id()), idxs); - } - } - public Xodb_file Make(byte file_tid) { - int file_idx = files_ary_len; - Io_url url = Create_sqlite3(src_dir, trg_dir, wiki_name, file_idx); - Xodb_file rv = Xodb_file.make_(file_idx, file_tid, url.NameAndExt()).Connect_(Db_url_.sqlite_(url)); - rv.Url_(url); - Xodb_xowa_cfg_tbl.Insert_str(rv.Conn(), Cfg_grp_db_meta, "type_name", Xodb_file_tid.Xto_key(file_tid)); - files_ary = (Xodb_file[])Array_.Resize(files_ary, files_ary_len + 1); - files_ary[files_ary_len++] = rv; - return rv; - } private Xodb_file[] files_ary = new Xodb_file[0]; private int files_ary_len = 0; - public void Rls() { - for (int i = 0; i < files_ary_len; i++) - files_ary[i].Rls(); - } - private static Io_url Create_sqlite3(Io_url src_dir, Io_url trg_dir, String wiki_name, int file_idx) { - Io_url src_fil = src_dir.GenSubFil("xowa.sqlite3"); // /bin/any/sql/xowa/xowa.sqlite3 - Io_url trg_fil = trg_dir.GenSubFil_ary(wiki_name, ".", Int_.Xto_str_pad_bgn(file_idx, 3), ".sqlite3"); // /wiki/en.wikipedia.org/en.wikipedia.org.000.sqlite3 - Io_mgr._.CopyFil(src_fil, trg_fil, true); - return trg_fil; - } - private static final int File_id_core = 0; - public static final int Heap_max_infinite = 0; - public static final String Cfg_grp_db_meta = "db.meta"; -} diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql.java b/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql.java index 99e31db36..3b1713f55 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql.java @@ -18,8 +18,9 @@ along with this program. If not, see . package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*; import gplx.core.primitives.*; import gplx.dbs.*; import gplx.xowa.apps.*; import gplx.xowa.bldrs.imports.ctgs.*; import gplx.xowa.ctgs.*; import gplx.xowa.specials.search.*; import gplx.xowa.dbs.tbls.*; +import gplx.xowa.wikis.data.*; public class Xodb_load_mgr_sql implements Xodb_load_mgr { - public Xodb_load_mgr_sql(Xodb_mgr_sql db_mgr, Xodb_fsys_mgr fsys_mgr) {this.db_mgr = db_mgr; this.fsys_mgr = fsys_mgr;} private Xodb_mgr_sql db_mgr; Xodb_fsys_mgr fsys_mgr; + public Xodb_load_mgr_sql(Xodb_mgr_sql db_mgr, Xowe_core_data_mgr fsys_mgr) {this.db_mgr = db_mgr; this.fsys_mgr = fsys_mgr;} private Xodb_mgr_sql db_mgr; Xowe_core_data_mgr fsys_mgr; public byte Search_version() { if (search_provider == null) Search_version_init(); return search_version; @@ -38,7 +39,7 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr { String version_key = Xoa_gfs_mgr.Build_code(Xowe_wiki.Invk_props, Xow_wiki_props.Invk_bldr_version); KeyVal[] kv_ary = db_mgr.Tbl_xowa_cfg().Select_kvs(Xodb_mgr_sql.Grp_wiki_init, version_key, version_val); Xodb_upgrade_mgr.Upgrade(db_mgr, kv_ary, version_key, version_val.Val()); - Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_k004(); + Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_k004(); Xoa_gfs_mgr gfs_mgr = wiki.Appe().Gfs_mgr(); try { int len = kv_ary.length; @@ -57,14 +58,14 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr { public boolean Load_ctg_v1(Xoctg_view_ctg rv, byte[] ctg_bry) { int cat_page_id = db_mgr.Tbl_page().Select_id(Xow_ns_.Id_category, ctg_bry); if (cat_page_id == Xodb_mgr_sql.Page_id_null) return false; Xodb_category_itm ctg = db_mgr.Tbl_category().Select(fsys_mgr.Conn_ctg(), cat_page_id); if (ctg == Xodb_category_itm.Null) return false; - Db_conn p = fsys_mgr.Get_by_idx(ctg.File_idx()).Conn(); + Db_conn p = fsys_mgr.Dbs__get_at(ctg.File_idx()).Conn(); return db_mgr.Ctg_select_v1(rv, p, ctg); } public boolean Load_ctg_v2(Xoctg_data_ctg rv, byte[] ctg_bry) {throw Err_.not_implemented_();} public void Load_ctg_v2a(Xoctg_view_ctg rv, Xoctg_url ctg_url, byte[] ctg_ttl, int load_max) { int cat_page_id = db_mgr.Tbl_page().Select_id(Xow_ns_.Id_category, ctg_ttl); if (cat_page_id == Xodb_mgr_sql.Page_id_null) return; Xodb_category_itm ctg = db_mgr.Tbl_category().Select(fsys_mgr.Conn_ctg(), cat_page_id); if (ctg == Xodb_category_itm.Null) return; - Db_conn p = fsys_mgr.Get_by_idx(ctg.File_idx()).Conn(); + Db_conn p = fsys_mgr.Dbs__get_at(ctg.File_idx()).Conn(); ListAdp list = ListAdp_.new_(); Load_ctg_v2a_db_retrieve(rv, ctg_url, cat_page_id, load_max, p, list); Load_ctg_v2a_ui_sift(rv, ctg, list); @@ -112,8 +113,8 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr { private Db_conn search_provider = null; private void Search_version_init() { if (search_provider == null) { - Xodb_file search_file = db_mgr.Fsys_mgr().Get_tid_root(Xodb_file_tid.Tid_search); - if (search_file == null) { + Xowd_db_file search_file = db_mgr.Core_data_mgr().Dbs__get_by_tid_1st(Xowd_db_file_.Tid_search); + if (search_file == Xowd_db_file.Null) { search_provider = Db_conn_.Null; search_version = gplx.xowa.specials.search.Xosrh_core.Version_1; } @@ -128,7 +129,7 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr { if (search_version == gplx.xowa.specials.search.Xosrh_core.Version_1) db_mgr.Tbl_page().Select_by_search(cancelable, rv, search, results_max); else { - Xodb_search_title_word_tbl.Select_by_word(cancelable, rv, db_mgr.Db_ctx(), search, results_max, db_mgr.Fsys_mgr().Get_tid_root(Xodb_file_tid.Tid_search).Conn()); + Xodb_search_title_word_tbl.Select_by_word(cancelable, rv, db_mgr.Db_ctx(), search, results_max, db_mgr.Core_data_mgr().Dbs__get_by_tid_1st(Xowd_db_file_.Tid_search).Conn()); db_mgr.Tbl_page().Select_by_id_list(cancelable, true, rv); } } diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql_tst.java b/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql_tst.java index 052b1241e..3cbfec9f6 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql_tst.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql_tst.java @@ -59,7 +59,7 @@ class Xodb_load_mgr_sql_fxt { public void Init_save_ctgs(Xodb_page[] ary) { int len = ary.length; Xodb_mgr_sql db_mgr = wiki.Db_mgr_as_sql(); - Db_conn p = db_mgr.Fsys_mgr().Conn_core(); + Db_conn p = db_mgr.Core_data_mgr().Conn_core(); p.Txn_mgr().Txn_bgn_if_none(); Db_stmt page_stmt = db_mgr.Tbl_page().Insert_stmt(p); Db_stmt category_stmt = db_mgr.Tbl_category().Insert_stmt(p); diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_txt.java b/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_txt.java index 4058a92ba..812b9a67a 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_txt.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_txt.java @@ -211,7 +211,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { public boolean Load_xdat_file(Cancelable cancelable, Xob_xdat_file xdat_file, Io_url url) { boolean rv = false; if (cancelable.Canceled()) return false; - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_m001(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_m001(); byte[] tmp_bry = tmp_bfr.Bfr(); if (cancelable.Canceled()) return false; tmp_bry = Io_mgr._.LoadFilBry_reuse(url, tmp_bry, tmp_len); diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_mgr.java b/400_xowa/src/gplx/xowa/dbs/Xodb_mgr.java index c6fe36f9f..7eb6e0e77 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_mgr.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_mgr.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*; -import gplx.dbs.*; import gplx.xowa.hdumps.*; +import gplx.dbs.*; import gplx.xowa.html.hdumps.*; public interface Xodb_mgr extends GfoInvkAble, RlsAble { byte Tid(); String Tid_name(); @@ -27,5 +27,4 @@ public interface Xodb_mgr extends GfoInvkAble, RlsAble { DateAdp Dump_date_query(); Xodb_load_mgr Load_mgr(); Xodb_save_mgr Save_mgr(); - Xodb_hdump_mgr Hdump_mgr(); } diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_sql.java b/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_sql.java index a930b01b3..f6761955e 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_sql.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_sql.java @@ -17,19 +17,18 @@ along with this program. If not, see . */ package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*; import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.dbs.engines.sqlite.*; -import gplx.xowa.apps.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.ctgs.*; import gplx.xowa.hdumps.*; -import gplx.xowa2.wikis.data.*; +import gplx.xowa.apps.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.ctgs.*; import gplx.xowa.html.hdumps.*; +import gplx.xowa.wikis.data.*; public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble { private boolean html_db_enabled; public Xodb_mgr_sql(Xowe_wiki wiki) { this.wiki = wiki; Io_url bin_db_dir = wiki.Appe().Fsys_mgr().Bin_any_dir().GenSubDir_nest("sql", "xowa"); - fsys_mgr = new Xodb_fsys_mgr(bin_db_dir, wiki.Fsys_mgr().Root_dir(), wiki.Domain_str()); - load_mgr = new Xodb_load_mgr_sql(this, fsys_mgr); + core_data_mgr = new Xowe_core_data_mgr(bin_db_dir, wiki.Fsys_mgr().Root_dir(), wiki.Domain_str()); + load_mgr = new Xodb_load_mgr_sql(this, core_data_mgr); save_mgr = new Xodb_save_mgr_sql(this); tbl_text = new Xodb_text_tbl(this); tbl_page = new Xodb_page_tbl(wiki); - hdump_mgr = new Xodb_hdump_mgr(wiki); } public byte Tid() {return Tid_sql;} public static final byte Tid_sql = 1; public String Tid_name() {return "sqlite3";} @@ -40,18 +39,15 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble { public void Search_version_refresh() {load_mgr.Search_version_refresh();} public void Html_db_enabled_(boolean v) { html_db_enabled = v; db_ctx.Html_db_enabled_(v); - hdump_mgr.Enabled_(v); tbl_page.Html_db_enabled_(v); - if (v) Xodb_hdump_mgr_setup.Hdump_db_file_init(hdump_mgr); + core_data_mgr.Tbl__pg().Conn_(core_data_mgr.Conn_core(), Bool_.N, core_data_mgr.Cfg__schema_is_1(), core_data_mgr.Cfg__db_id(), v); } public Xodb_ctx Db_ctx() {return db_ctx;} private Xodb_ctx db_ctx = new Xodb_ctx(); - public Xodb_fsys_mgr Fsys_mgr() {return fsys_mgr;} private Xodb_fsys_mgr fsys_mgr; + public Xowe_core_data_mgr Core_data_mgr() {return core_data_mgr;} private Xowe_core_data_mgr core_data_mgr; public Xodb_load_mgr Load_mgr() {return load_mgr;} private Xodb_load_mgr_sql load_mgr; public Xodb_save_mgr Save_mgr() {return save_mgr;} private Xodb_save_mgr_sql save_mgr; - public Xodb_hdump_mgr Hdump_mgr() {return hdump_mgr;} private Xodb_hdump_mgr hdump_mgr; public Xodb_xowa_cfg_tbl Tbl_xowa_cfg() {return tbl_cfg;} private Xodb_xowa_cfg_tbl tbl_cfg = new Xodb_xowa_cfg_tbl(); public Xodb_xowa_ns_tbl Tbl_xowa_ns() {return tbl_ns;} private Xodb_xowa_ns_tbl tbl_ns = new Xodb_xowa_ns_tbl(); - public Xodb_xowa_db_tbl Tbl_xowa_db() {return tbl_db;} private Xodb_xowa_db_tbl tbl_db = new Xodb_xowa_db_tbl(); public Xodb_page_tbl Tbl_page() {return tbl_page;} private Xodb_page_tbl tbl_page; public Xodb_text_tbl Tbl_text() {return tbl_text;} private Xodb_text_tbl tbl_text; public Xodb_site_stats_tbl Tbl_site_stats() {return tbl_site_stats;} private Xodb_site_stats_tbl tbl_site_stats = new Xodb_site_stats_tbl(); @@ -65,33 +61,34 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble { public DateAdp Dump_date_query() { DateAdp rv = wiki.Props().Modified_latest(); if (rv != null) return rv; - Io_url url = fsys_mgr.Get_url(Xodb_file_tid.Tid_core); + Io_url url = core_data_mgr.Get_url(Xowd_db_file_.Tid_core); return Io_mgr._.QueryFil(url).ModifiedTime(); } public void Init_by_ns_map(String ns_map) { Xoi_dump_mgr dump_mgr = wiki.Appe().Setup_mgr().Dump_mgr(); data_storage_format = dump_mgr.Data_storage_format(); - fsys_mgr.Init_by_ns_map(wiki.Ns_mgr(), ns_map, dump_mgr.Db_text_max()); - Core_provider_(fsys_mgr.Conn_core()); + core_data_mgr.Init_by_ns_map(wiki.Ns_mgr(), ns_map, dump_mgr.Db_text_max()); + Core_conn_(core_data_mgr.Conn_core()); state = State_make; } - public void Init_load(Db_url url) { - Db_conn conn = Db_conn_pool.I.Get_or_new(url); - Core_provider_(conn); - Xodb_file[] files = tbl_db.Select_all(); - fsys_mgr.Init_by_files(conn, files); + public void Init_load(Db_url core_db_url) { + Db_conn core_conn = Db_conn_pool.I.Get_or_new(core_db_url); + Core_conn_(core_conn); + Xowd_db_file[] files = core_data_mgr.Tbl__db().Select_all(wiki.Fsys_mgr().Root_dir()); + core_data_mgr.Init_by_files(core_conn, files); state = State_load; } - private void Core_provider_(Db_conn conn) { + private void Core_conn_(Db_conn conn) { + boolean created = Bool_.N; boolean schema_is_1 = core_data_mgr.Cfg__schema_is_1(); int db_id = core_data_mgr.Cfg__db_id(); // schema_is_1 always has pre-created xowa_db tbl tbl_cfg.Conn_(conn); - tbl_ns.Conn_(conn); - tbl_db.Conn_(conn, Bool_.N, Bool_.Y); // version_is_1 always has pre-created xowa_db tbl + tbl_ns.Conn_(conn, created, schema_is_1, db_id); tbl_page.Conn_(conn); tbl_site_stats.Conn_(conn); + core_data_mgr.Core_conn_(conn, created, schema_is_1, db_id, Bool_.N); } public void Page_create(Db_stmt page_stmt, Db_stmt text_stmt, int page_id, int ns_id, byte[] ttl_wo_ns, boolean redirect, DateAdp modified_on, byte[] text, int random_int, int file_idx) { int text_len = text.length; - int html_db_id = (html_db_enabled) ? -1 : hdump_mgr.Html_db_id_default(text_len); + int html_db_id = (html_db_enabled) ? -1 : -1; //hdump_mgr.Html_db_id_default(text_len); tbl_page.Insert(page_stmt, page_id, ns_id, ttl_wo_ns, redirect, modified_on, text_len, random_int, file_idx, html_db_id); tbl_text.Insert(text_stmt, page_id, text, data_storage_format); } @@ -135,7 +132,7 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble { return rv; } public void Rls() { - fsys_mgr.Rls(); + core_data_mgr.Rls(); } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_data_storage_format)) return Xoi_dump_mgr.Wtr_tid_to_str(data_storage_format); @@ -144,14 +141,13 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble { else if (ctx.Match(k, Invk_category_version_)) category_version = m.ReadByte("v"); else if (ctx.Match(k, Invk_search_version)) return this.Search_version(); else if (ctx.Match(k, Invk_tid_name)) return this.Tid_name(); - else if (ctx.Match(k, Invk_html_mgr)) return hdump_mgr; return this; } public static final String Invk_data_storage_format = "data_storage_format", Invk_data_storage_format_ = "data_storage_format_" , Invk_category_version = "category_version", Invk_category_version_ = "category_version_" , Invk_search_version = "search_version" - , Invk_tid_name = "tid_name", Invk_html_mgr = "hdump_mgr" + , Invk_tid_name = "tid_name" ; public void Category_version_update(boolean version_is_1) { String grp = Xodb_mgr_sql.Grp_wiki_init; @@ -162,18 +158,17 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble { tbl_cfg.Insert_str(grp, key, Byte_.Xto_str(category_version)); } public void Delete_by_tid(byte tid) { - Xodb_file[] ary = fsys_mgr.Files_ary(); - int len = ary.length; + int len = core_data_mgr.Dbs__len(); for (int i = 0; i < len; i++) { - Xodb_file file = ary[i] ; + Xowd_db_file file = core_data_mgr.Dbs__get_at(i) ; if (file.Tid() != tid) continue; file.Rls(); Sqlite_url sqlite = (Sqlite_url)file.Connect(); Io_mgr._.DeleteFil_args(sqlite.Url()).MissingFails_off().Exec(); file.Cmd_mode_(Db_cmd_mode.Tid_delete); } - tbl_db.Commit_all(ary); - this.Init_load(fsys_mgr.Conn_core().Url()); + core_data_mgr.Dbs__save(); + this.Init_load(core_data_mgr.Conn_core().Url()); } public static final String Grp_wiki_init = "wiki.init"; diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_txt.java b/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_txt.java index 2a2fe4ac0..1ac8145a0 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_txt.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_txt.java @@ -16,20 +16,18 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*; -import gplx.dbs.*; import gplx.xowa.ctgs.*; import gplx.xowa.hdumps.*; import gplx.xowa.tdbs.*; +import gplx.dbs.*; import gplx.xowa.ctgs.*; import gplx.xowa.html.hdumps.*; import gplx.xowa.tdbs.*; public class Xodb_mgr_txt implements Xodb_mgr { public Xodb_mgr_txt(Xowe_wiki wiki, Xow_data_mgr data_mgr) { this.wiki = wiki; load_mgr = new Xodb_load_mgr_txt(wiki); save_mgr = new Xodb_save_mgr_txt(wiki, load_mgr); - hdump_mgr = new Xodb_hdump_mgr(wiki); } private Xowe_wiki wiki; public byte Tid() {return Tid_txt;} public static final byte Tid_txt = 0; public String Tid_name() {return "xdat";} public byte Data_storage_format() {return data_storage_format;} public void Data_storage_format_(byte v) {data_storage_format = v;} private byte data_storage_format = gplx.ios.Io_stream_.Tid_file; public Xodb_load_mgr Load_mgr() {return load_mgr;} private Xodb_load_mgr_txt load_mgr; public Xodb_save_mgr Save_mgr() {return save_mgr;} private Xodb_save_mgr_txt save_mgr; - public Xodb_hdump_mgr Hdump_mgr() {return hdump_mgr;} private Xodb_hdump_mgr hdump_mgr; public Xodb_ctx Db_ctx() {return db_ctx;} private Xodb_ctx db_ctx = new Xodb_ctx(); public DateAdp Dump_date_query() { Io_url url = wiki.Tdb_fsys_mgr().Url_ns_fil(Xotdb_dir_info_.Tid_page, Xow_ns_.Id_main, 0); diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr_sql.java b/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr_sql.java index 3da3a9ffd..d876025a8 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr_sql.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr_sql.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*; -import gplx.dbs.*; import gplx.ios.*; +import gplx.ios.*; import gplx.dbs.*; import gplx.xowa.wikis.data.*; public class Xodb_save_mgr_sql implements Xodb_save_mgr { public Xodb_save_mgr_sql(Xodb_mgr_sql db_mgr) { this.db_mgr = db_mgr; zip_mgr = db_mgr.Wiki().Appe().Zip_mgr(); @@ -41,11 +41,11 @@ public class Xodb_save_mgr_sql implements Xodb_save_mgr { else page_id_int = Int_.parse_(page_id); - Xodb_fsys_mgr fsys_mgr = db_mgr.Fsys_mgr(); + Xowe_core_data_mgr fsys_mgr = db_mgr.Core_data_mgr(); int file_idx = fsys_mgr.Tid_text_idx(); boolean redirect = db_mgr.Wiki().Redirect_mgr().Is_redirect(text, text.length); Db_stmt page_stmt = db_mgr.Tbl_page().Insert_stmt(fsys_mgr.Conn_page()); - Db_conn text_provider = db_mgr.Fsys_mgr().Get_by_idx(file_idx).Conn(); + Db_conn text_provider = db_mgr.Core_data_mgr().Dbs__get_at(file_idx).Conn(); Db_stmt text_stmt = db_mgr.Tbl_text().Insert_stmt(text_provider); text = zip_mgr.Zip(db_mgr.Data_storage_format(), text); try { @@ -72,7 +72,7 @@ public class Xodb_save_mgr_sql implements Xodb_save_mgr { if (redirect_changed) kv_ary[kv_idx++] = KeyVal_.new_("page_is_redirect", redirect_changed); if (modified_changed) kv_ary[kv_idx++] = KeyVal_.new_("page_touched", Xto_touched_str(modified)); qry = Db_qry_.update_common_("page", Db_crt_.eq_("page_id", page.Revision_data().Id()), kv_ary); - Db_conn conn = db_mgr.Fsys_mgr().Conn_core(); + Db_conn conn = db_mgr.Core_data_mgr().Conn_core(); conn.Txn_mgr().Txn_bgn_if_none(); conn.Exec_qry(qry); conn.Txn_mgr().Txn_end_all(); @@ -88,12 +88,12 @@ public class Xodb_save_mgr_sql implements Xodb_save_mgr { , KeyVal_.new_("page_title", String_.new_utf8_(trg_ttl)) ); try { - db_mgr.Fsys_mgr().Conn_core().Exec_qry(qry); + db_mgr.Core_data_mgr().Conn_core().Exec_qry(qry); } catch (Exception exc) { if (String_.Has(Err_.Message_gplx_brief(exc), "columns page_namespace, page_random_int are not unique")) { // HACK: terrible hack, but moving pages across ns will break UNIQUE index - db_mgr.Fsys_mgr().Conn_core().Exec_sql("DROP INDEX page__name_random;"); // is UNIQUE by default - db_mgr.Fsys_mgr().Conn_core().Exec_sql("CREATE INDEX page__name_random ON page (page_namespace, page_random_int);"); - db_mgr.Fsys_mgr().Conn_core().Exec_qry(qry); + db_mgr.Core_data_mgr().Conn_core().Exec_sql("DROP INDEX page__name_random;"); // is UNIQUE by default + db_mgr.Core_data_mgr().Conn_core().Exec_sql("CREATE INDEX page__name_random ON page (page_namespace, page_random_int);"); + db_mgr.Core_data_mgr().Conn_core().Exec_qry(qry); } } } diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr_txt.java b/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr_txt.java index 82f959e6b..f2bcdded2 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr_txt.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_save_mgr_txt.java @@ -34,7 +34,7 @@ public class Xodb_save_mgr_txt implements Xodb_save_mgr { boolean found = load_mgr.Load_by_ttl(db_page, ns_itm, ttl_bry); if (found) throw Err_mgr._.fmt_(GRP_KEY, "title_exists", "create requested but title already exists: ~{0}", String_.new_utf8_(ttl_bry)); int text_len = text.length; - Bry_bfr tmp = wiki.Utl_bry_bfr_mkr().Get_m001(); + Bry_bfr tmp = wiki.Utl__bfr_mkr().Get_m001(); int page_id = page_id_next++; int fil_idx = 0; int ns_id = ttl.Ns().Id(); @@ -44,7 +44,7 @@ public class Xodb_save_mgr_txt implements Xodb_save_mgr { Xob_xdat_file page_rdr = new Xob_xdat_file(); if (Bry_.Len_gt_0(page_rdr_bry)) page_rdr.Parse(page_rdr_bry, page_rdr_bry.length, page_rdr_url); int row_idx = page_rdr.Count(); - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b512(); page_rdr.Insert(tmp_bfr, tmp.Xto_bry_and_clear()); this.Data_save(Xotdb_dir_info_.Tid_page, page_rdr, page_rdr_url, tmp_bfr); tmp_bfr.Mkr_rls(); @@ -78,7 +78,7 @@ public class Xodb_save_mgr_txt implements Xodb_save_mgr { // update page Xob_xdat_file page_rdr = new Xob_xdat_file(); Xob_xdat_itm page_itm = new Xob_xdat_itm(); load_mgr.Load_page(tmp_page, db_page.Text_db_id(), db_page.Db_row_idx(), ns, true, page_rdr, page_itm); - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b512(); if (text == null) text = tmp_page.Text(); int text_len = text.length; DateAdp modified_on = tmp_page.Modified_on(); @@ -95,7 +95,7 @@ public class Xodb_save_mgr_txt implements Xodb_save_mgr { Xoa_ttl redirect_ttl = redirect_mgr.Extract_redirect(text, text_len); db_page.Text_len_(text_len); db_page.Type_redirect_(redirect_ttl != null); - Bry_bfr tmp = wiki.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp = wiki.Utl__bfr_mkr().Get_b512(); Xodb_page_.Txt_ttl_save(tmp, db_page); byte[] ttl_row_bry = tmp.Xto_bry_and_clear(); tmp.Mkr_rls(); diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_upgrade_mgr.java b/400_xowa/src/gplx/xowa/dbs/Xodb_upgrade_mgr.java index 8af07d589..f27810571 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_upgrade_mgr.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_upgrade_mgr.java @@ -62,7 +62,7 @@ class Xodb_upgrade_mgr { // ++types; // } // } finally {rdr.Rls(); stmt.Rls();} -// boolean version_is_1 = types <= 1; // if 0 or 1 types assume version_1 (1=page only; 0=not set up) +// boolean schema_is_1 = types <= 1; // if 0 or 1 types assume version_1 (1=page only; 0=not set up) // db_mgr.Category_version_update(true); // assume version_1; will be wrong if user actually did version_2, but currently version_1 vs version_2 has no // } // } diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_page_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_page_tbl.java index c06fc818a..50c7662de 100644 --- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_page_tbl.java +++ b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_page_tbl.java @@ -45,16 +45,16 @@ public class Xodb_page_tbl { return false; } public static void Read_page__all2(Xodb_page page, Db_rdr rdr, boolean html_db_enabled) { - page.Id_ (rdr.Read_int(0)); - page.Ns_id_ (rdr.Read_int(1)); - page.Ttl_wo_ns_ (rdr.Read_bry_by_str(2)); - page.Modified_on_ (DateAdp_.parse_fmt(rdr.Read_str(3), Page_touched_fmt)); - page.Type_redirect_ (rdr.Read_byte(4) == 1); - page.Text_len_ (rdr.Read_int(5)); - page.Text_db_id_ (rdr.Read_int(6)); + page.Id_ (rdr.Read_int(Fld_page_id)); + page.Ns_id_ (rdr.Read_int(Fld_page_ns)); + page.Ttl_wo_ns_ (rdr.Read_bry_by_str(Fld_page_title)); + page.Modified_on_ (DateAdp_.parse_fmt(rdr.Read_str(Fld_page_touched), Page_touched_fmt)); + page.Type_redirect_ (rdr.Read_byte(Fld_page_is_redirect) == 1); + page.Text_len_ (rdr.Read_int(Fld_page_len)); + page.Text_db_id_ (rdr.Read_int(Fld_page_file_idx)); if (html_db_enabled) { - page.Html_db_id_(rdr.Read_int(7)); - page.Redirect_id_(rdr.Read_int(8)); + page.Html_db_id_(rdr.Read_int(Fld_page_html_db_id)); + page.Redirect_id_(rdr.Read_int(Fld_page_is_redirect)); } } public boolean Select_by_id(Xodb_page rv, int page_id) { diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_text_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_text_tbl.java index 37a799ef2..6a214a9c5 100644 --- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_text_tbl.java +++ b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_text_tbl.java @@ -17,6 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*; import gplx.core.primitives.*; import gplx.dbs.*; import gplx.ios.*; +import gplx.xowa.wikis.data.*; public class Xodb_text_tbl { public Xodb_text_tbl(Xodb_mgr_sql db_mgr) {this.db_mgr = db_mgr; zip_mgr = db_mgr.Wiki().Appe().Zip_mgr();} private Xodb_mgr_sql db_mgr; private Io_stream_zip_mgr zip_mgr; public void Delete_all(Db_conn conn) {conn.Exec_qry(Db_qry_.delete_tbl_(Tbl_name));} @@ -27,7 +28,7 @@ public class Xodb_text_tbl { public void Update(int file_id, int page_id, byte[] text) { Db_stmt stmt = Db_stmt_.Null; try { - Db_conn conn = db_mgr.Fsys_mgr().Get_by_idx(file_id).Conn(); + Db_conn conn = db_mgr.Core_data_mgr().Dbs__get_at(file_id).Conn(); stmt = Db_stmt_.new_update_(conn, Tbl_name, String_.Ary(Fld_page_id), Fld_old_text); stmt.Val_bry(text).Val_int(page_id).Exec_update(); } finally {stmt.Rls();} @@ -35,14 +36,14 @@ public class Xodb_text_tbl { public byte[] Select(int file_id, int page_id) { Db_stmt stmt = Db_stmt_.Null; try { - Db_conn conn = db_mgr.Fsys_mgr().Get_by_idx(file_id).Conn(); + Db_conn conn = db_mgr.Core_data_mgr().Dbs__get_at(file_id).Conn(); stmt = Db_stmt_.new_select_(conn, Tbl_name, String_.Ary(Fld_page_id), Fld_old_text); byte[] rv = (byte[])stmt.Val_int(page_id).Exec_select_val(); rv = zip_mgr.Unzip(db_mgr.Data_storage_format(), rv); return rv; } finally {stmt.Rls();} } - public void Select_in(Cancelable cancelable, Xodb_file file, OrderedHash hash) { + public void Select_in(Cancelable cancelable, Xowd_db_file file, OrderedHash hash) { DataRdr rdr = DataRdr_.Null; Db_stmt stmt = Db_stmt_.Null; try { diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_db_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_db_tbl.java index c670929de..8fc351e85 100644 --- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_db_tbl.java +++ b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_db_tbl.java @@ -17,40 +17,50 @@ along with this program. If not, see . */ package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*; import gplx.dbs.*; import gplx.dbs.qrys.*; +import gplx.xowa.wikis.data.*; public class Xodb_xowa_db_tbl { private String tbl_name = "wiki_db_regy"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); private String fld_id, fld_type, fld_url; private Db_conn conn; private final Db_stmt_bldr stmt_bldr = new Db_stmt_bldr(); - public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) { + public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1) { this.conn = new_conn; flds.Clear(); String fld_prefix = ""; - if (version_is_1) { + if (schema_is_1) { tbl_name = "xowa_db"; fld_prefix = "db_"; } - fld_id = flds.Add_int_pkey(fld_prefix + "id"); - fld_type = flds.Add_byte(fld_prefix + "type"); // 1=core;2=wikidata;3=data - fld_url = flds.Add_str(fld_prefix + "url", 512); + fld_id = flds.Add_int_pkey (fld_prefix + "id"); + fld_type = flds.Add_byte (fld_prefix + "type"); // 1=core;2=wikidata;3=data + fld_url = flds.Add_str (fld_prefix + "url", 512); if (created) { Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds); conn.Exec_create_tbl_and_idx(meta); } stmt_bldr.Conn_(conn, tbl_name, flds, fld_id); } - public void Update_url(int id, String url) { - Db_stmt stmt = conn.Stmt_update(tbl_name, String_.Ary(fld_id), fld_url); - stmt.Clear().Val_str(fld_url, url).Crt_int(fld_id, id).Exec_update(); + public Xowd_db_file[] Select_all(Io_url wiki_root_dir) { + Db_rdr rdr = Db_rdr_.Null; + ListAdp list = ListAdp_.new_(); + try { + rdr = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empy).Exec_select_as_rdr(); + while (rdr.Move_next()) { + Xowd_db_file db = Xowd_db_file.load_(rdr.Read_int(fld_id), rdr.Read_byte(fld_type), rdr.Read_str(fld_url)); + db.Url_(wiki_root_dir.GenSubFil(db.Url_rel())); + list.Add(db); + } + } finally {rdr.Rls();} + list.SortBy(Xodb_file_sorter__id.I); + return (Xowd_db_file[])list.Xto_ary(Xowd_db_file.class); } - public void Commit_all(Xodb_fsys_mgr db_fs) {this.Commit_all(db_fs.Files_ary());} - public void Commit_all(Xodb_file[] ary) { + public void Commit_all(Xowe_core_data_mgr core_data_mgr) { stmt_bldr.Batch_bgn(); try { - int len = ary.length; + int len = core_data_mgr.Dbs__len(); for (int i = 0; i < len; i++) - Commit_itm(ary[i]); + Commit_itm(core_data_mgr.Dbs__get_at(i)); } finally {stmt_bldr.Batch_end();} } - private void Commit_itm(Xodb_file itm) { + private void Commit_itm(Xowd_db_file itm) { Db_stmt stmt = stmt_bldr.Get(itm.Cmd_mode()); switch (itm.Cmd_mode()) { case Db_cmd_mode.Tid_create: stmt.Clear().Val_int(fld_id, itm.Id()) .Val_byte(fld_type, itm.Tid()).Val_str(fld_url, itm.Url_rel()).Exec_insert(); break; @@ -61,37 +71,12 @@ public class Xodb_xowa_db_tbl { } itm.Cmd_mode_(Db_cmd_mode.Tid_ignore); } - public Xodb_file[] Select_all() { - Db_rdr rdr = Db_rdr_.Null; - ListAdp list = ListAdp_.new_(); - try { - Db_qry qry = Db_qry_.select_tbl_(tbl_name).OrderBy_asc_(fld_id); - rdr = conn.Stmt_new(qry).Exec_select_as_rdr(); - while (rdr.Move_next()) { - Xodb_file itm = Xodb_file.load_(rdr.Read_int(fld_id), rdr.Read_byte(fld_type), rdr.Read_str(fld_url)); - list.Add(itm); - } - } finally {rdr.Rls();} - Xodb_file[] rv = (Xodb_file[])list.Xto_ary(Xodb_file.class); - Chk_sequential(rv); - return rv; - } - private void Chk_sequential(Xodb_file[] ary) { - int len = ary.length; - int expd_id = 0; - for (int i = 0; i < len; ++i) { - Xodb_file itm = ary[i]; - int actl_id = itm.Id(); - if (expd_id != actl_id) throw Err_.new_fmt_("database ids are not sequential; expd={0} actl={1}", expd_id, actl_id); - ++expd_id; - } - } } -class Xodb_db_sorter implements gplx.lists.ComparerAble { +class Xodb_file_sorter__id implements gplx.lists.ComparerAble { public int compare(Object lhsObj, Object rhsObj) { - Xodb_file lhs = (Xodb_file)lhsObj; - Xodb_file rhs = (Xodb_file)rhsObj; + Xowd_db_file lhs = (Xowd_db_file)lhsObj; + Xowd_db_file rhs = (Xowd_db_file)rhsObj; return Int_.Compare(lhs.Id(), rhs.Id()); } - public static final Xodb_db_sorter _ = new Xodb_db_sorter(); + public static final Xodb_file_sorter__id I = new Xodb_file_sorter__id(); Xodb_file_sorter__id() {} } diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_ns_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_ns_tbl.java index 3105567e1..ed6e01492 100644 --- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_ns_tbl.java +++ b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_ns_tbl.java @@ -18,37 +18,57 @@ along with this program. If not, see . package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*; import gplx.dbs.*; import gplx.dbs.qrys.*; public class Xodb_xowa_ns_tbl { - public void Conn_(Db_conn conn) {this.conn = conn;} private Db_conn conn; + private String tbl_name = "wiki_ns_regy"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); + private String fld_db_id, fld_ns_id, fld_ns_name, fld_ns_case, fld_ns_count, fld_ns_is_alias; + private Db_conn conn; private int db_id; + public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1, int db_id) { + this.conn = new_conn; flds.Clear(); this.db_id = db_id; + if (schema_is_1) { + tbl_name = "xowa_ns"; + fld_db_id = Db_meta_fld.Key_null; + } + else { + fld_db_id = flds.Add_int("db_id"); + } + fld_ns_id = flds.Add_int("ns_id"); + fld_ns_name = flds.Add_str("ns_name", 255); + fld_ns_case = flds.Add_byte("ns_case"); + fld_ns_is_alias = flds.Add_bool("ns_is_alias"); + fld_ns_count = flds.Add_int("ns_count"); + if (created) { + Db_meta_tbl meta_tbl = Db_meta_tbl.new_(tbl_name, flds + , Db_meta_idx.new_unique_by_tbl_wo_null(tbl_name, "pkey" , fld_db_id, fld_ns_id) + ); + conn.Exec_create_tbl_and_idx(meta_tbl); + } + } public void Insert(Xow_ns_mgr ns_mgr) { - Db_stmt stmt = Db_stmt_.Null; - try { - stmt = Db_stmt_.new_insert_(conn, Tbl_name, Fld_ns_id, Fld_ns_name, Fld_ns_case, Fld_ns_is_alias, Fld_ns_count); - int len = ns_mgr.Ids_len(); - for (int i = 0; i < len; i++) { - Xow_ns ns = ns_mgr.Ids_get_at(i); - stmt.Clear() - .Val_int(ns.Id()) - .Val_str(ns.Name_str()) - .Val_byte(ns.Case_match()) - .Val_bool_as_byte(ns.Is_alias()) - .Val_int(ns.Count()) - .Exec_insert(); - ; - } - } finally {stmt.Rls();} + Db_stmt stmt = conn.Stmt_insert(tbl_name, flds); + int len = ns_mgr.Ids_len(); + for (int i = 0; i < len; i++) { + Xow_ns ns = ns_mgr.Ids_get_at(i); + stmt.Clear() + .Val_int(fld_db_id, db_id) + .Val_int(fld_ns_id, ns.Id()) + .Val_str(fld_ns_name, ns.Name_str()) + .Val_byte(fld_ns_case, ns.Case_match()) + .Val_bool_as_byte(fld_ns_is_alias, ns.Is_alias()) + .Val_int(fld_ns_count, ns.Count()) + .Exec_insert(); + ; + } } public void Select_all(Xow_ns_mgr ns_mgr) { - Db_rdr rdr = Db_rdr_.Null; Db_stmt stmt = Db_stmt_.Null; + Db_rdr rdr = Db_rdr_.Null; try { - stmt = Db_stmt_.new_select_as_rdr(conn, Db_qry__select_in_tbl.new_(Tbl_name, Db_qry__select_in_tbl.Where_flds__all, Flds__all)); - rdr = stmt.Exec_select_as_rdr(); + rdr = conn.Stmt_select(tbl_name, flds, String_.Ary_wo_null(fld_db_id)).Crt_int(fld_db_id, db_id).Exec_select_as_rdr(); ns_mgr.Clear(); while (rdr.Move_next()) { - int ns_id = rdr.Read_int(0); - byte[] ns_name = rdr.Read_bry_by_str(1); - byte ns_case_match = rdr.Read_byte(2); - int ns_count = rdr.Read_int(3); - boolean ns_is_alias = rdr.Read_byte(4) == Bool_.Y_byte; + int ns_id = rdr.Read_int(fld_ns_id); + byte[] ns_name = rdr.Read_bry_by_str(fld_ns_name); + byte ns_case_match = rdr.Read_byte(fld_ns_case); + int ns_count = rdr.Read_int(fld_ns_count); + boolean ns_is_alias = rdr.Read_byte(fld_ns_is_alias) == Bool_.Y_byte; ns_mgr.Add_new(ns_id, ns_name, ns_case_match, ns_is_alias); if (ns_id < 0) continue; // don't load counts for Special / Media Xow_ns ns = ns_mgr.Ids_get_or_null(ns_id); @@ -56,21 +76,24 @@ public class Xodb_xowa_ns_tbl { if (ns_count > 0) ns.Exists_(true); // ns has article; mark it as exists, else Talk tab won't show; DATE:2013-12-04 } ns_mgr.Init(); - } finally {rdr.Rls(); stmt.Rls();} + } finally {rdr.Rls();} } public int Select_ns_count(int ns_id) { - Db_qry_select qry = Db_qry_.select_val_(Tbl_name, Fld_ns_count, Db_crt_.eq_(Fld_ns_id, ns_id)); - return Int_.cast_(qry.ExecRdr_val(conn)); + Db_rdr rdr = Db_rdr_.Null; + try { + rdr = conn.Stmt_select(tbl_name, flds, String_.Ary_wo_null(fld_db_id, fld_ns_id)) + .Crt_int(fld_db_id, db_id) + .Crt_int(fld_ns_id, ns_id) + .Exec_select_as_rdr(); + return rdr.Move_next() ? Int_.cast_(rdr.Read_int(fld_ns_count)) : 0; + } finally {rdr.Rls();} } public void Update_ns_count(int ns_id, int ns_count) { - conn.Exec_qry(Db_qry_.update_common_(Tbl_name - , Db_crt_.eq_(Fld_ns_id, ns_id) - , KeyVal_.Ary - ( KeyVal_.new_(Fld_ns_count, ns_count) - ))); + Db_stmt stmt = conn.Stmt_update(tbl_name, String_.Ary_wo_null(fld_db_id, fld_ns_id), fld_ns_count); + stmt.Clear() + .Val_int(fld_ns_count, ns_count) + .Crt_int(fld_db_id, db_id) + .Crt_int(fld_ns_id, ns_id) + .Exec_update(); } - public static final String Tbl_name = "xowa_ns" - , Fld_ns_id = "ns_id", Fld_ns_name = "ns_name", Fld_ns_case = "ns_case", Fld_ns_count = "ns_count", Fld_ns_is_alias = "ns_is_alias" - ; - private static final String[] Flds__all = new String[] {Fld_ns_id, Fld_ns_name, Fld_ns_case, Fld_ns_count, Fld_ns_is_alias}; } diff --git a/400_xowa/src/gplx/xowa/files/Xof_doc_thumb.java b/400_xowa/src/gplx/xowa/files/Xof_doc_thumb.java index 84ff065ed..c85bcae6b 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_doc_thumb.java +++ b/400_xowa/src/gplx/xowa/files/Xof_doc_thumb.java @@ -32,11 +32,11 @@ public class Xof_doc_thumb { public static boolean Null_n(double v) {return v != Null;} public static final int Null_as_int = -1; - public static double Convert_to_xowa_thumbtime (int ext, double val) {return gplx.xowa.Xof_ext_.Id_supports_thumbtime(ext) ? val : Null;} - public static int Convert_to_xowa_page (int ext, double val) {return gplx.xowa.Xof_ext_.Id_supports_page(ext) ? (int)val : Xof_doc_page.Null;} + public static double Convert_to_xowa_thumbtime (int ext, double val) {return Xof_ext_.Id_supports_thumbtime(ext) ? val : Null;} + public static int Convert_to_xowa_page (int ext, double val) {return Xof_ext_.Id_supports_page(ext) ? (int)val : Xof_doc_page.Null;} public static double Convert_to_fsdb_thumbtime (int ext, double thumbtime, int page) { return page != Xof_doc_page.Null - && gplx.xowa.Xof_ext_.Id_supports_page(ext) // redefine thumbtime to page if pdf + && Xof_ext_.Id_supports_page(ext) // redefine thumbtime to page if pdf ? page : thumbtime ; diff --git a/400_xowa/src_160_file/gplx/xowa/Xof_ext.java b/400_xowa/src/gplx/xowa/files/Xof_ext.java similarity index 77% rename from 400_xowa/src_160_file/gplx/xowa/Xof_ext.java rename to 400_xowa/src/gplx/xowa/files/Xof_ext.java index f6e223dd0..cb9b99e82 100644 --- a/400_xowa/src_160_file/gplx/xowa/Xof_ext.java +++ b/400_xowa/src/gplx/xowa/files/Xof_ext.java @@ -15,7 +15,7 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa; import gplx.*; +package gplx.xowa.files; import gplx.*; import gplx.xowa.*; public class Xof_ext { public Xof_ext(int id, byte[] ext) {this.id = id; this.ext = ext;} public int Id() {return id;} private int id; @@ -38,4 +38,10 @@ public class Xof_ext { public boolean Id_supports_page() {return Xof_ext_.Id_supports_page(id);} public boolean Id_needs_convert() {return Xof_ext_.Id_needs_convert(id);} public int Id_view() {return Xof_ext_.Id_view(id);} + public boolean Is_not_viewable(byte exec_tid) { + return exec_tid != Xof_exec_tid.Tid_viewer_app // only apply logic if !Tid_viewer_app; note that if Tid_viewer_app, then user clicked on file, so return true; + && ( this.Id_is_audio() // NOTE: was audio_strict, but v2 always redefines .ogg as .ogv; DATE:2014-02-02 + || id == Xof_ext_.Id_unknown // ignore unknown exts, else will download needlessly when viewing page; EX: .wav before .wav was registered; PAGE:pl.s:Spiaca_kr�lewna_(Oppman); DATE:2014-08-17 + ); + } } diff --git a/400_xowa/src_160_file/gplx/xowa/Xof_ext_.java b/400_xowa/src/gplx/xowa/files/Xof_ext_.java similarity index 97% rename from 400_xowa/src_160_file/gplx/xowa/Xof_ext_.java rename to 400_xowa/src/gplx/xowa/files/Xof_ext_.java index baed5ff75..cbd6e6f1b 100644 --- a/400_xowa/src_160_file/gplx/xowa/Xof_ext_.java +++ b/400_xowa/src/gplx/xowa/files/Xof_ext_.java @@ -15,7 +15,7 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa; import gplx.*; +package gplx.xowa.files; import gplx.*; import gplx.xowa.*; import gplx.core.primitives.*; public class Xof_ext_ { public static final int Id_unknown = 0 // SERIALIZED; ids are saved to fsdb; diff --git a/400_xowa/src/gplx/xowa/files/Xof_file_itm.java b/400_xowa/src/gplx/xowa/files/Xof_file_itm.java index 3fd00003c..be8fe7d3f 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_file_itm.java +++ b/400_xowa/src/gplx/xowa/files/Xof_file_itm.java @@ -25,7 +25,7 @@ public interface Xof_file_itm { int Lnki_w(); int Lnki_h(); double Lnki_upright(); - double Lnki_thumbtime(); + double Lnki_time(); int Orig_w(); int Orig_h(); // byte Orig_repo(); diff --git a/400_xowa/src/gplx/xowa/files/Xof_fsdb_mode.java b/400_xowa/src/gplx/xowa/files/Xof_fsdb_mode.java new file mode 100644 index 000000000..4c4537083 --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/Xof_fsdb_mode.java @@ -0,0 +1,37 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.files; import gplx.*; import gplx.xowa.*; +public class Xof_fsdb_mode { + private int tid; + Xof_fsdb_mode(int tid) {this.tid = tid;} + public boolean Tid_unknown() {return tid == Tid_int_unknown;} + public boolean Tid_wmf() {return tid == Tid_int_wmf;} + public boolean Tid_view() {return tid == Tid_int_view;} + public boolean Tid_make() {return tid == Tid_int_make;} + public void Tid_view_y_() {tid = Tid_int_view;} + public void Tid_make_y_() {tid = Tid_int_make;} + private static final int + Tid_int_unknown = 0 + , Tid_int_wmf = 1 + , Tid_int_view = 2 + , Tid_int_make = 3 + ; +// public static Xof_fsdb_mode new_unknown() {return new Xof_fsdb_mode(Tid_int_unknown);} + public static Xof_fsdb_mode new_wmf() {return new Xof_fsdb_mode(Tid_int_wmf);} + public static Xof_fsdb_mode new_view() {return new Xof_fsdb_mode(Tid_int_view);} +} diff --git a/400_xowa/src/gplx/xowa/files/Xof_img_size.java b/400_xowa/src/gplx/xowa/files/Xof_img_size.java index 3f9258de4..364be2911 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_img_size.java +++ b/400_xowa/src/gplx/xowa/files/Xof_img_size.java @@ -16,14 +16,13 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.files; import gplx.*; import gplx.xowa.*; -import gplx.gfui.*; public class Xof_img_size { public int Html_w() {return html_w;} private int html_w; public int Html_h() {return html_h;} private int html_h; public int File_w() {return file_w;} private int file_w; // NOTE: file_w will always equal html_w, unless rounding is implemented; EX: html_w=150,151,152 -> file_w=150 public int File_h() {return file_h;} private int file_h; public boolean File_is_orig() {return file_is_orig;} private boolean file_is_orig; - public void Clear() { + private void Clear() { html_w = html_h = file_w = file_h = 0; file_is_orig = false; } diff --git a/400_xowa/src/gplx/xowa/files/Xof_lnki_file_mgr.java b/400_xowa/src/gplx/xowa/files/Xof_lnki_file_mgr.java index a3999e6b7..aad574977 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_lnki_file_mgr.java +++ b/400_xowa/src/gplx/xowa/files/Xof_lnki_file_mgr.java @@ -106,7 +106,7 @@ public class Xof_lnki_file_mgr { fsdb_itm.Lnki_size_(xfer_itm.Lnki_w(), xfer_itm.Lnki_h()); // NOTE: must overwrite fsdb_itm.size with xfer_itm.size when the same image shows up in multiple sizes on a page; (only one item in wiki_orig); EX: w:Portal:Canada; [[File:Flag of Canada.svg|300x150px]]; [[File:Flag of Canada.svg|23px]]; DATE:2014-02-14 fsdb_itm.Lnki_type_(xfer_itm.Lnki_type()); // NOTE: must overwrite lnki_type, else multiple images on same page with different type wont show; PAGE:en.w:History_of_painting; DATE:2014-03-06 fsdb_itm.Lnki_page_(xfer_itm.Lnki_page()); - fsdb_itm.Lnki_time_(xfer_itm.Lnki_thumbtime()); + fsdb_itm.Lnki_time_(xfer_itm.Lnki_time()); // byte[] lnki_ttl = xfer_itm.Lnki_ttl(); // Xof_ext lnki_ext = xfer_itm.Lnki_ext(); // byte[] lnki_md5 = Xof_xfer_itm_.Md5_(lnki_ttl); diff --git a/400_xowa/src_160_file/gplx/xowa/Xof_media_type.java b/400_xowa/src/gplx/xowa/files/Xof_media_type.java similarity index 95% rename from 400_xowa/src_160_file/gplx/xowa/Xof_media_type.java rename to 400_xowa/src/gplx/xowa/files/Xof_media_type.java index eb5fab446..c70742366 100644 --- a/400_xowa/src_160_file/gplx/xowa/Xof_media_type.java +++ b/400_xowa/src/gplx/xowa/files/Xof_media_type.java @@ -15,7 +15,7 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa; import gplx.*; +package gplx.xowa.files; import gplx.*; import gplx.xowa.*; public class Xof_media_type { public static final byte Tid_null = 0, Tid_audio = 1, Tid_bitmap = 2, Tid_drawing = 2, Tid_office = 3, Tid_video = 4; public static final String Name_null = "", Name_audio = "AUDIO", Name_bitmap = "BITMAP", Name_drawing = "DRAWING", Name_office = "OFFICE", Name_video = "VIDEO"; diff --git a/400_xowa/src_160_file/gplx/xowa/Xof_mime_minor_.java b/400_xowa/src/gplx/xowa/files/Xof_mime_minor_.java similarity index 96% rename from 400_xowa/src_160_file/gplx/xowa/Xof_mime_minor_.java rename to 400_xowa/src/gplx/xowa/files/Xof_mime_minor_.java index ef982ef8a..047c464e1 100644 --- a/400_xowa/src_160_file/gplx/xowa/Xof_mime_minor_.java +++ b/400_xowa/src/gplx/xowa/files/Xof_mime_minor_.java @@ -15,7 +15,7 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa; import gplx.*; +package gplx.xowa.files; import gplx.*; import gplx.xowa.*; import gplx.core.primitives.*; public class Xof_mime_minor_ { public static Xof_ext ext_(byte[] minor_mime) { diff --git a/400_xowa/src/gplx/xowa/files/Xof_url_bldr.java b/400_xowa/src/gplx/xowa/files/Xof_url_bldr.java index f1ae07429..9c6accee1 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_url_bldr.java +++ b/400_xowa/src/gplx/xowa/files/Xof_url_bldr.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.files; import gplx.*; import gplx.xowa.*; -import gplx.xowa.files.repos.*; +import gplx.xowa.files.repos.*; import gplx.xowa.files.fsdb.*; public class Xof_url_bldr { private final Bry_bfr bfr = Bry_bfr.reset_(400); private byte[] ttl; private byte[] md5; private Xof_ext ext; private boolean file_is_thumb; private int file_w; @@ -63,6 +63,14 @@ public class Xof_url_bldr { public byte[] Xto_bry() {Bld(); byte[] rv = bfr.Xto_bry_and_clear(); Clear(); return rv;} public String Xto_str() {Bld(); String rv = bfr.Xto_str(); Clear(); return rv;} public Io_url Xto_url() {Bld(); Io_url rv = Io_url_.new_fil_(bfr.Xto_str()); Clear(); return rv;} + public Io_url To_url(Xow_repo_mgr repo_mgr, Xof_fsdb_itm itm, boolean orig) {return To_url(repo_mgr.Repos_get_by_wiki(itm.Orig_repo_name()), itm, orig ? Xof_repo_itm.Mode_orig : Xof_repo_itm.Mode_thumb, Bool_.N);} + public Io_url To_url(Xof_repo_pair repo_pair, Xof_fsdb_itm itm, boolean orig) {return To_url(repo_pair, itm, orig ? Xof_repo_itm.Mode_orig : Xof_repo_itm.Mode_thumb, Bool_.N);} + public Io_url To_url(Xof_repo_pair repo_pair, Xof_fsdb_itm itm, byte mode, boolean src) { + return src + ? this.Init_for_src_file(mode, repo_pair.Src(), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), itm.Html_w(), itm.Lnki_time(), itm.Lnki_page()).Xto_url() + : this.Init_for_trg_file(mode, repo_pair.Trg(), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), itm.Html_w(), itm.Lnki_time(), itm.Lnki_page()).Xto_url() + ; + } private void Bld() { Add_core(); if (file_is_thumb) { diff --git a/400_xowa/src/gplx/xowa/files/Xof_xfer_itm.java b/400_xowa/src/gplx/xowa/files/Xof_xfer_itm.java index ee1f1354b..344ec9f1f 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_xfer_itm.java +++ b/400_xowa/src/gplx/xowa/files/Xof_xfer_itm.java @@ -26,7 +26,7 @@ public class Xof_xfer_itm implements Xof_file_itm { public int Lnki_w() {return lnki_w;} private int lnki_w; public int Lnki_h() {return lnki_h;} private int lnki_h; public double Lnki_upright() {return lnki_upright;} private double lnki_upright; - public double Lnki_thumbtime() {return lnki_thumbtime;} private double lnki_thumbtime = Xof_doc_thumb.Null; + public double Lnki_time() {return lnki_time;} private double lnki_time = Xof_doc_thumb.Null; public int Lnki_page() {return lnki_page;} private int lnki_page = Xof_doc_page.Null; public int Orig_w() {return orig_w;} private int orig_w; public int Orig_h() {return orig_h;} private int orig_h; @@ -53,15 +53,15 @@ public class Xof_xfer_itm implements Xof_file_itm { } private Xof_repo_itm trg_repo; public int Trg_repo_idx() {return trg_repo_idx;} public Xof_xfer_itm Trg_repo_idx_(int trg_repo_idx) {this.trg_repo_idx = trg_repo_idx; return this;} private int trg_repo_idx = Xof_meta_itm.Repo_unknown; public byte[] Trg_repo_root() {return trg_repo_root;} private byte[] trg_repo_root = Bry_.Empty; // HACK: needed for hdump - private byte[] Trg_html(byte mode_id, int width) {return url_bldr.Init_for_trg_html(mode_id, trg_repo, lnki_ttl, lnki_md5, lnki_ext, width, lnki_thumbtime, lnki_page).Xto_bry();} - public Io_url Trg_file(byte mode_id, int width) {return url_bldr.Init_for_trg_file(mode_id, trg_repo, lnki_ttl, lnki_md5, lnki_ext, width, lnki_thumbtime, lnki_page).Xto_url();} + private byte[] Trg_html(byte mode_id, int width) {return url_bldr.Init_for_trg_html(mode_id, trg_repo, lnki_ttl, lnki_md5, lnki_ext, width, lnki_time, lnki_page).Xto_bry();} + public Io_url Trg_file(byte mode_id, int width) {return url_bldr.Init_for_trg_file(mode_id, trg_repo, lnki_ttl, lnki_md5, lnki_ext, width, lnki_time, lnki_page).Xto_url();} public byte Lnki_exec_tid() {return lnki_exec_tid;} public void Lnki_exec_tid_(byte v) {lnki_exec_tid = v;} private byte lnki_exec_tid = Xof_exec_tid.Tid_wiki_page; public Xof_url_bldr Url_bldr(){ return url_bldr;} public Xof_xfer_itm Url_bldr_(Xof_url_bldr v) {url_bldr = v; return this;} private Xof_url_bldr url_bldr = Xof_url_bldr.Temp; public Xof_xfer_itm Clear() { lnki_type = Byte_.Max_value_127; lnki_w = lnki_h = file_w = orig_w = orig_h = html_w = html_h = gallery_mgr_h = Int_.Neg1; - lnki_upright = Int_.Neg1; lnki_thumbtime = Xof_doc_thumb.Null; lnki_page = Xof_doc_page.Null; + lnki_upright = Int_.Neg1; lnki_time = Xof_doc_thumb.Null; lnki_page = Xof_doc_page.Null; img_is_thumbable = false; orig_file_len = 0; // NOTE: cannot be -1, or else will always download orig; see ext rule chk and (orig_file_len < 0) lnki_redirect = null; lnki_ttl = null; lnki_md5 = null; lnki_ext = null; @@ -72,7 +72,7 @@ public class Xof_xfer_itm implements Xof_file_itm { } public Xof_xfer_itm Clone() { Xof_xfer_itm rv = new Xof_xfer_itm(); - rv.lnki_type = lnki_type; rv.lnki_w = lnki_w; rv.lnki_h = lnki_h; rv.lnki_upright = lnki_upright; rv.lnki_thumbtime = lnki_thumbtime; rv.lnki_page = lnki_page; + rv.lnki_type = lnki_type; rv.lnki_w = lnki_w; rv.lnki_h = lnki_h; rv.lnki_upright = lnki_upright; rv.lnki_time = lnki_time; rv.lnki_page = lnki_page; rv.img_is_thumbable = img_is_thumbable; rv.orig_w = orig_w; rv.orig_h = orig_h; rv.orig_file_len = orig_file_len; rv.lnki_redirect = lnki_redirect; rv.lnki_ttl = lnki_ttl; rv.lnki_md5 = lnki_md5; rv.lnki_ext = lnki_ext; @@ -87,10 +87,10 @@ public class Xof_xfer_itm implements Xof_file_itm { } public Xof_xfer_itm Init_by_lnki(byte[] ttl, byte[] redirect, byte lnki_type, int w, int h, double upright, double thumbtime, int lnki_page) { this.Set__ttl(ttl, redirect); - this.lnki_type = lnki_type; this.lnki_w = w; this.lnki_h = h; this.lnki_upright = upright; this.lnki_thumbtime = thumbtime; this.lnki_page = lnki_page; + this.lnki_type = lnki_type; this.lnki_w = w; this.lnki_h = h; this.lnki_upright = upright; this.lnki_time = thumbtime; this.lnki_page = lnki_page; img_is_thumbable = Xof_xfer_itm_.Lnki_thumbable_calc(lnki_type, lnki_w, lnki_h); - if (lnki_thumbtime != Xof_doc_thumb.Null && !lnki_ext.Id_is_media()) // thumbtime is set, but ext is not media; PAGE:en.w:Moon; EX:[[File:A.png|thumbtime=0:02]] DATE:2014-07-22 - lnki_thumbtime = Xof_doc_thumb.Null; // disable thumbtime + if (lnki_time != Xof_doc_thumb.Null && !lnki_ext.Id_is_media()) // thumbtime is set, but ext is not media; PAGE:en.w:Moon; EX:[[File:A.png|thumbtime=0:02]] DATE:2014-07-22 + lnki_time = Xof_doc_thumb.Null; // disable thumbtime return this; } public void Init_for_gallery(int html_w, int html_h, int file_w) { @@ -145,7 +145,7 @@ public class Xof_xfer_itm implements Xof_file_itm { if (lnki_ext.Id_is_video()) { // video is a special case; src is thumb_w but html_w / html_h is based on calc html_orig_src = Trg_html(Xof_repo_itm.Mode_orig, Xof_img_size.Size_null_deprecated); if (meta_itm.Thumbs_indicates_oga() && lnki_ext.Id_is_ogv()) {lnki_ext = Xof_ext_.new_by_ext_(Xof_ext_.Bry_oga); return true;} // if audio, do not thumb; NOTE: must happen after html_orig_src, b/c html must still be generated to auto-download files; NOTE: must change ext to oga b/c ogg may trigger video code elsewhere - Xof_meta_thumb thumb = meta_itm.Thumbs_get_vid(Xof_doc_thumb.X_int(lnki_thumbtime)); + Xof_meta_thumb thumb = meta_itm.Thumbs_get_vid(Xof_doc_thumb.X_int(lnki_time)); if (thumb != null) { Xof_xfer_itm_.Calc_xfer_size(calc_size, lnki_type, thumb_w_img, thumb.Width(), thumb.Height(), html_w, html_h, img_is_thumbable, lnki_upright); html_w = calc_size.Val_0(); html_h = calc_size.Val_1(); @@ -205,7 +205,7 @@ public class Xof_xfer_itm implements Xof_file_itm { if (meta_itm.Thumbs_indicates_oga() && lnki_ext.Id_is_ogv()) {lnki_ext = Xof_ext_.new_by_ext_(Xof_ext_.Bry_oga); return true;} // if audio, do not thumb; NOTE: must happen after html_orig_src, b/c html must still be generated to auto-download files; NOTE: must change ext to oga b/c ogg may trigger video code elsewhere if (lnki_ext.Id_is_audio()) return true; // if audio, return true; SEE:NOTE_2 else if (lnki_ext.Id_is_video()) { - Xof_meta_thumb thumb = meta_itm.Thumbs_get_vid(Xof_doc_thumb.X_int(lnki_thumbtime)); // get thumb at lnki_thumbtime; NOTE: in most cases this will just be the 1st thumb; note that orig video files don't have an official thumb + Xof_meta_thumb thumb = meta_itm.Thumbs_get_vid(Xof_doc_thumb.X_int(lnki_time)); // get thumb at lnki_time; NOTE: in most cases this will just be the 1st thumb; note that orig video files don't have an official thumb if (thumb != null) { html_w = thumb.Width(); html_h = thumb.Height(); // NOTE: take thumb_size; do not rescale to html_w, html_h b/c html_w will default to 220; native width of thumbnail should be used; DATE:2013-04-11 html_view_src = Trg_html(Xof_repo_itm.Mode_thumb, thumb.Width()); // NOTE: must pass thumb.Width() not html_w b/c only one thumb generated for a video file diff --git a/400_xowa/src/gplx/xowa/files/Xow_file_mgr.java b/400_xowa/src/gplx/xowa/files/Xow_file_mgr.java index 68475bc48..190c246fb 100644 --- a/400_xowa/src/gplx/xowa/files/Xow_file_mgr.java +++ b/400_xowa/src/gplx/xowa/files/Xow_file_mgr.java @@ -27,15 +27,24 @@ public class Xow_file_mgr implements GfoInvkAble { fsdb_mgr = new Xof_fsdb_mgr__sql(); wkr_mgr = new Xof_wkr_mgr(this); } + public Xof_fsdb_mode Fsdb_mode() { + if (fsdb_mode == null) { + Version(); + } + return fsdb_mode; + } private Xof_fsdb_mode fsdb_mode = null; public Xowe_wiki Wiki() {return wiki;} private Xowe_wiki wiki; public byte Version() { if (version == Bool_.__byte) { Io_url file_dir = wiki.Fsys_mgr().File_dir(); - Io_url[] sqlite_fils = Io_mgr._.QueryDir_args(file_dir).FilPath_("*.sqlite3").ExecAsUrlAry(); - if (sqlite_fils.length == 0) + if (!Io_mgr._.ExistsFil(file_dir.GenSubFil(Fsm_mnt_mgr.Mnt_name))) { version = Version_1; - else + fsdb_mode = Xof_fsdb_mode.new_wmf(); + } + else { version = Version_2; + fsdb_mode = Xof_fsdb_mode.new_view(); + } } return version; } private byte version = Version_null; diff --git a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_mgr.java b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_mgr.java index 9607bbd25..81ffd10be 100644 --- a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_mgr.java +++ b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_mgr.java @@ -52,7 +52,7 @@ public class Xof_bin_mgr implements GfoInvkAble { Io_stream_rdr rv = Io_stream_rdr_.Null; boolean file_is_orig = itm.File_is_orig(); if (file_is_orig || exec_tid == Xof_exec_tid.Tid_viewer_app) { // orig or viewer_app; note that viewer_app always return orig - Io_url trg = Bld_url(itm, Xof_repo_itm.Mode_orig, Bool_.N); + Io_url trg = url_bldr.To_url(repo_mgr, itm, Bool_.Y); itm.Html_view_url_(trg); for (int i = 0; i < wkrs_len; i++) { Xof_bin_wkr wkr = wkrs[i]; @@ -63,7 +63,7 @@ public class Xof_bin_mgr implements GfoInvkAble { } } else { // thumb - Io_url trg = Bld_url(itm, Xof_repo_itm.Mode_thumb, Bool_.N); + Io_url trg = url_bldr.To_url(repo_mgr, itm, Bool_.N); itm.Html_view_url_(trg); for (int i = 0; i < wkrs_len; i++) { Xof_bin_wkr wkr = wkrs[i]; @@ -79,7 +79,7 @@ public class Xof_bin_mgr implements GfoInvkAble { continue; // nothing found; continue; } if (!wkr.Resize_allowed()) continue; - Io_url orig = Bld_url(itm, Xof_repo_itm.Mode_orig, Bool_.N); // get orig url + Io_url orig = url_bldr.To_url(repo_mgr, itm, Bool_.Y); // get orig url Io_stream_wtr_.Save_rdr(orig, rv); boolean resized = Resize(exec_tid, itm, file_is_orig, orig, trg); if (!resized) continue; @@ -98,13 +98,6 @@ public class Xof_bin_mgr implements GfoInvkAble { itm.Rslt_cnv_(rv ? Xof_cnv_wkr_.Tid_y : Xof_cnv_wkr_.Tid_n); return rv; } - private Io_url Bld_url(Xof_fsdb_itm itm, byte mode, boolean src) { - Xof_repo_pair repo = repo_mgr.Repos_get_by_wiki(itm.Orig_repo_name()); - return src - ? url_bldr.Init_for_src_file(mode, repo.Src(), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), itm.Html_w(), itm.Lnki_time(), itm.Lnki_page()).Xto_url() - : url_bldr.Init_for_trg_file(mode, repo.Trg(), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), itm.Html_w(), itm.Lnki_time(), itm.Lnki_page()).Xto_url() - ; - } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_add)) return Wkrs__get_or_new(m.ReadStr("type"), m.ReadStrOr("key", null)); else return GfoInvkAble_.Rv_unhandled; diff --git a/400_xowa/src/gplx/xowa/files/caches/Xof_cache_mgr.java b/400_xowa/src/gplx/xowa/files/caches/Xof_cache_mgr.java index 1b8c21f08..d3632ca6a 100644 --- a/400_xowa/src/gplx/xowa/files/caches/Xof_cache_mgr.java +++ b/400_xowa/src/gplx/xowa/files/caches/Xof_cache_mgr.java @@ -28,10 +28,10 @@ public class Xof_cache_mgr implements GfoInvkAble { this.fil_mgr = new Xofc_fil_mgr(this); } public int Next_id() {return cfg_mgr.Next_id();} public void Next_id_(int v) {cfg_mgr.Next_id_(v);} - public void Init_for_db(Db_conn conn, boolean created, boolean version_is_1) { - cfg_mgr.Conn_(conn, created, version_is_1); - dir_mgr.Conn_(conn, created, version_is_1); - fil_mgr.Conn_(conn, created, version_is_1); + public void Init_for_db(Db_conn conn, boolean created, boolean schema_is_1) { + cfg_mgr.Conn_(conn, created, schema_is_1); + dir_mgr.Conn_(conn, created, schema_is_1); + fil_mgr.Conn_(conn, created, schema_is_1); } public void Db_save() { try { diff --git a/400_xowa/src/gplx/xowa/files/caches/Xofc_cfg_mgr.java b/400_xowa/src/gplx/xowa/files/caches/Xofc_cfg_mgr.java index 73cbaa6be..2f0bc7b0f 100644 --- a/400_xowa/src/gplx/xowa/files/caches/Xofc_cfg_mgr.java +++ b/400_xowa/src/gplx/xowa/files/caches/Xofc_cfg_mgr.java @@ -24,8 +24,8 @@ class Xofc_cfg_mgr { public void Cache_len_add(long v) {cache_len += v;} public long Cache_min() {return cache_min;} public void Cache_min_(long v) {cache_min = v;} private long cache_min = Io_mgr.Len_mb * 75; public long Cache_max() {return cache_max;} public void Cache_max_(long v) {cache_max = v;} private long cache_max = Io_mgr.Len_mb * 100; - public void Conn_(Db_conn v, boolean created, boolean version_is_1) { - tbl.Conn_(v, created, version_is_1, "xowa_cfg", "file_cache_cfg"); + public void Conn_(Db_conn v, boolean created, boolean schema_is_1) { + tbl.Conn_(v, created, schema_is_1, "xowa_cfg", "file_cache_cfg"); if (created) { tbl.Insert(Cfg_grp, Cfg_key__next_id, Int_.Xto_str(1)); tbl.Insert(Cfg_grp, Cfg_key__cache_len, Long_.Xto_str(0)); diff --git a/400_xowa/src/gplx/xowa/files/caches/Xofc_dir_mgr.java b/400_xowa/src/gplx/xowa/files/caches/Xofc_dir_mgr.java index 14343fb2f..1cf58f708 100644 --- a/400_xowa/src/gplx/xowa/files/caches/Xofc_dir_mgr.java +++ b/400_xowa/src/gplx/xowa/files/caches/Xofc_dir_mgr.java @@ -22,7 +22,7 @@ class Xofc_dir_mgr { private final OrderedHash hash_by_names = OrderedHash_.new_bry_(); private final HashAdp hash_by_ids = HashAdp_.new_(); private Xof_cache_mgr cache_mgr; public Xofc_dir_mgr(Xof_cache_mgr v) {this.cache_mgr = v;} - public void Conn_(Db_conn v, boolean created, boolean version_is_1) {tbl.Conn_(v, created, version_is_1);} + public void Conn_(Db_conn v, boolean created, boolean schema_is_1) {tbl.Conn_(v, created, schema_is_1);} public Xofc_dir_itm Get_by_id(int id) {return (Xofc_dir_itm)hash_by_ids.Fetch(id);} public Xofc_dir_itm Get_by_name_or_make(byte[] name) { Xofc_dir_itm itm = Get_by_name_or_null(name); diff --git a/400_xowa/src/gplx/xowa/files/caches/Xofc_dir_tbl.java b/400_xowa/src/gplx/xowa/files/caches/Xofc_dir_tbl.java index e66764fe2..7533fc047 100644 --- a/400_xowa/src/gplx/xowa/files/caches/Xofc_dir_tbl.java +++ b/400_xowa/src/gplx/xowa/files/caches/Xofc_dir_tbl.java @@ -21,10 +21,10 @@ class Xofc_dir_tbl { private String tbl_name = "file_cache_dir"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); private String fld_id, fld_name; private Db_conn conn; private final Db_stmt_bldr stmt_bldr = new Db_stmt_bldr(); private Db_stmt select_stmt; - public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) { + public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1) { this.conn = new_conn; flds.Clear(); String fld_prefix = ""; - if (version_is_1) { + if (schema_is_1) { tbl_name = "cache_dir"; fld_prefix = "dir_"; } diff --git a/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_mgr.java b/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_mgr.java index 7e00d9b9d..116164d65 100644 --- a/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_mgr.java +++ b/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_mgr.java @@ -22,7 +22,7 @@ class Xofc_fil_mgr { private Xof_cache_mgr cache_mgr; private final Xofc_fil_tbl tbl = new Xofc_fil_tbl(); private final OrderedHash hash = OrderedHash_.new_bry_(); private final Bry_bfr key_bldr = Bry_bfr.reset_(255); public Xofc_fil_mgr(Xof_cache_mgr v) {this.cache_mgr = v;} - public void Conn_(Db_conn v, boolean created, boolean version_is_1) {tbl.Conn_(v, created, version_is_1);} + public void Conn_(Db_conn v, boolean created, boolean schema_is_1) {tbl.Conn_(v, created, schema_is_1);} public void Save_all() { int len = hash.Count(); boolean err_seen = false; @@ -68,10 +68,10 @@ class Xofc_fil_mgr { } private Xofc_fil_itm Make_v1(int dir_id, byte[] name, boolean is_orig, int w, int h, double time, int page, Xof_ext ext, long size) {return Make(Bool_.Y, dir_id, name, is_orig, w, h, time, page, ext, size);} public Xofc_fil_itm Make_v2(int dir_id, byte[] name, boolean is_orig, int w, int h, double time, int page, Xof_ext ext, long size) {return Make(Bool_.N, dir_id, name, is_orig, w, h, time, page, ext, size);} - private Xofc_fil_itm Make(boolean version_is_1, int dir_id, byte[] name, boolean is_orig, int w, int h, double time, int page, Xof_ext ext, long size) { + private Xofc_fil_itm Make(boolean schema_is_1, int dir_id, byte[] name, boolean is_orig, int w, int h, double time, int page, Xof_ext ext, long size) { int id = cache_mgr.Next_id(); Xofc_fil_itm rv = new Xofc_fil_itm(id, dir_id, name, is_orig, w, h, time, page, ext, size, 0, Db_cmd_mode.Tid_create).Cache_time_now_(); - byte[] key = version_is_1 ? rv.Gen_hash_key_v1(key_bldr) : rv.Gen_hash_key_v2(key_bldr); + byte[] key = schema_is_1 ? rv.Gen_hash_key_v1(key_bldr) : rv.Gen_hash_key_v2(key_bldr); hash.Add(key, rv); return rv; } diff --git a/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_tbl.java b/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_tbl.java index d8f8816b4..9c1c95550 100644 --- a/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_tbl.java +++ b/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_tbl.java @@ -22,10 +22,10 @@ class Xofc_fil_tbl { private String fld_uid, fld_dir_id, fld_name, fld_is_orig, fld_w, fld_h, fld_time, fld_page, fld_ext, fld_size, fld_cache_time; private Db_conn conn; private final Db_stmt_bldr stmt_bldr = new Db_stmt_bldr(); private Db_stmt select_itm_stmt, select_itm_v2_stmt; public Db_conn Conn() {return conn;} - public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) { + public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1) { this.conn = new_conn; flds.Clear(); String fld_prefix = ""; - if (version_is_1) { + if (schema_is_1) { tbl_name = "cache_fil"; fld_prefix = "fil_"; } @@ -36,7 +36,7 @@ class Xofc_fil_tbl { fld_w = flds.Add_int(fld_prefix + "w"); fld_h = flds.Add_int(fld_prefix + "h"); fld_time = flds.Add_int(fld_prefix + "thumbtime"); - if (version_is_1) { + if (schema_is_1) { fld_page = Db_meta_fld.Key_null; } else { diff --git a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr.java b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr.java index 9da03047f..577b1f205 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr.java @@ -17,11 +17,11 @@ along with this program. If not, see . */ package gplx.xowa.files.fsdb; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.fsdb.*; import gplx.fsdb.data.*; import gplx.fsdb.meta.*; -import gplx.xowa.files.bins.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.caches.*; +import gplx.xowa.files.bins.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.caches.*; import gplx.xowa.files.gui.*; public interface Xof_fsdb_mgr extends RlsAble { Xof_orig_mgr Orig_mgr(); Xof_bin_mgr Bin_mgr(); Fsm_mnt_mgr Mnt_mgr(); void Init_by_wiki(Xow_wiki wiki); - void Fsdb_search_by_list(byte exec_tid, ListAdp itms, Xoae_page page); + void Fsdb_search_by_list(byte exec_tid, ListAdp itms, Xoa_page page, Xog_js_wkr js_wkr); } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr_.java b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr_.java index ae848b2f4..4e0059c84 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr_.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr_.java @@ -24,7 +24,7 @@ class Xof_fsdb_wkr { public Xof_fsdb_wkr(Xof_fsdb_mgr fsdb_mgr, Gfo_usr_dlg usr_dlg, Xof_cache_mgr cache_mgr, Xow_repo_mgr repo_mgr, Xof_url_bldr url_bldr) { this.fsdb_mgr = fsdb_mgr; this.usr_dlg = usr_dlg; this.cache_mgr = cache_mgr; this.repo_mgr = repo_mgr; this.url_bldr = url_bldr; } - public void Fsdb_search(byte exec_tid, ListAdp itms, Xoae_page page) { + public void Fsdb_search(byte exec_tid, ListAdp itms, Xoa_page page, Xog_js_wkr js_wkr) { synchronized (get_list) { get_list.Clear(); int itms_len = itms.Count(); @@ -35,7 +35,7 @@ class Xof_fsdb_wkr { case Xof_orig_wkr_.Status_found: // item is on disk and in orig_regy; just update data, html_view and cache_mgr; Xof_repo_itm repo_itm = repo_mgr.Repos_get_by_wiki(itm.Orig_repo_name()).Trg(); itm.Ctor_by_html(repo_itm, url_bldr, img_size, exec_tid); - Js_img_mgr.Update_img(page, itm); // NOTE: needed when opening 2+ tabs and missing image is on 2+ pages; 2nd page will have img as Xof_orig_wkr_.Status_found; DATE:2014-10-20 + Js_img_mgr.Update_img(page, js_wkr, itm); // NOTE: needed when opening 2+ tabs and missing image is on 2+ pages; 2nd page will have img as Xof_orig_wkr_.Status_found; DATE:2014-10-20 cache_mgr.Reg_and_check_for_size_0(itm); break; case Xof_orig_wkr_.Status_missing_orig: @@ -51,13 +51,13 @@ class Xof_fsdb_wkr { if (usr_dlg.Canceled()) return; Xof_fsdb_itm itm = (Xof_fsdb_itm)get_list.FetchAt(i); try { - Get_itm(exec_tid, itm, page); + Get_itm(exec_tid, itm, page, js_wkr); } catch (Exception e) {usr_dlg.Warn_many("", "", "file.search.error: page=~{0} img=~{1} err=~{2}", String_.new_utf8_(page.Ttl().Raw()), String_.new_utf8_(itm.Lnki_ttl()), Err_.Message_gplx_brief(e));} } } } - private void Get_itm(byte exec_tid, Xof_fsdb_itm itm, Xoae_page page) { - if (Ext_is_not_viewable_in_exec_tid(exec_tid, itm.Lnki_ext())) return; // do not get if not needed; EX: exec_tid = page and itm is audio + private void Get_itm(byte exec_tid, Xof_fsdb_itm itm, Xoa_page page, Xog_js_wkr js_wkr) { + if (itm.Lnki_ext().Is_not_viewable(exec_tid)) return; // do not get if not needed; EX: exec_tid = page and itm is audio if (Find_by_itm(exec_tid, itm, fsdb_mgr.Orig_mgr(), img_size)) { // itm exists in orig_regy Xof_repo_pair repo_pair = repo_mgr.Repos_get_by_wiki(itm.Orig_repo_name()); if (repo_pair == null) { @@ -65,7 +65,7 @@ class Xof_fsdb_wkr { return; } byte repo_tid = repo_pair.Repo_idx(); // NOTE: should be itm.Orig_repo, but throws null refs - if (Ext_is_not_viewable_in_exec_tid(exec_tid, itm.Lnki_ext())) { // check viewable again b/c orig_mgr may have changed ext; EX: ogg -> oga + if (itm.Lnki_ext().Is_not_viewable(exec_tid)) { // check viewable again b/c orig_mgr may have changed ext; EX: ogg -> oga itm.Rslt_bin_(Xof_bin_wkr_.Tid_noop); fsdb_mgr.Orig_mgr().Insert(repo_tid, itm.Orig_ttl(), itm.Lnki_ext().Id(), itm.Orig_w(), itm.Orig_h(), itm.Orig_redirect(), Xof_orig_wkr_.Status_noop); return; @@ -75,7 +75,7 @@ class Xof_fsdb_wkr { // TODO: this "breaks" tests b/c mock bin_wkr is fsdb; if (itm.Rslt_bin() != Xof_bin_wkr_.Tid_fsdb_xowa) // if bin is from fsdb, don't save it; occurs when page has new file listed twice; 1st file inserts into fsdb; 2nd file should find in fsdb and not save again Save_itm(itm); - Js_img_mgr.Update_img(page, itm); + Js_img_mgr.Update_img(page, js_wkr, itm); } else { usr_dlg.Warn_many("", "", "file not found: page=~{0} file=~{1} width=~{2}", page.Url().Xto_full_str_safe(), String_.new_utf8_(itm.Lnki_ttl()), itm.Lnki_w()); @@ -123,12 +123,6 @@ class Xof_fsdb_wkr { } finally {bin_rdr.Rls();} } - private static boolean Ext_is_not_viewable_in_exec_tid(byte exec_tid, Xof_ext ext) { - return exec_tid != Xof_exec_tid.Tid_viewer_app // only apply logic if !Tid_viewer_app; note that if Tid_viewer_app, then user clicked on file, so return true; - && ( ext.Id_is_audio() // NOTE: was audio_strict, but v2 always redefines .ogg as .ogv; DATE:2014-02-02 - || ext.Id() == Xof_ext_.Id_unknown // ignore unknown exts, else will download needlessly when viewing page; EX: .wav before .wav was registered; PAGE:pl.s:Śpiąca_królewna_(Oppman); DATE:2014-08-17 - ); - } private static boolean Find_by_itm(byte get_exec_tid, Xof_fsdb_itm itm, Xof_orig_mgr orig_mgr, Xof_img_size img_size) { byte[] itm_ttl = itm.Lnki_ttl(); Xof_orig_itm orig = orig_mgr.Find_by_ttl_or_null(itm_ttl); diff --git a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr__sql.java b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr__sql.java index 0c2113426..adf25ec90 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr__sql.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr__sql.java @@ -16,11 +16,12 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.files.fsdb; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.dbs.*; -import gplx.fsdb.*; import gplx.fsdb.meta.*; -import gplx.xowa.files.repos.*; import gplx.xowa.files.imgs.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.caches.*; +import gplx.core.primitives.*; +import gplx.dbs.*; import gplx.xowa.wikis.data.*; +import gplx.fsdb.*; import gplx.fsdb.meta.*; +import gplx.xowa.files.*; import gplx.xowa.files.repos.*; import gplx.xowa.files.imgs.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.caches.*; import gplx.xowa.files.gui.*; public class Xof_fsdb_mgr__sql implements Xof_fsdb_mgr, GfoInvkAble { - private Xof_fsdb_wkr wkr; private boolean init = false; + private Xof_fsdb_wkr wkr; private boolean init = false; private boolean fsdb_enabled = false; public Xof_orig_mgr Orig_mgr() {return orig_mgr;} private final Xof_orig_mgr orig_mgr = new Xof_orig_mgr(); public Xof_bin_mgr Bin_mgr() {return bin_mgr;} private Xof_bin_mgr bin_mgr; public Fsm_mnt_mgr Mnt_mgr() {return mnt_mgr;} private final Fsm_mnt_mgr mnt_mgr = new Fsm_mnt_mgr(); @@ -29,28 +30,35 @@ public class Xof_fsdb_mgr__sql implements Xof_fsdb_mgr, GfoInvkAble { try { init = true; // wiki.Rls_list().Add(this); - boolean version_is_1 = wiki.File_mgr__version_is_1(); + Xow_core_data_mgr core_data_mgr = wiki.Data_mgr__core_mgr(); + boolean schema_is_1 = core_data_mgr == null ? Bool_.Y : core_data_mgr.Cfg__schema_is_1(); // TEST: needed b/c some tests rely on txt_data_mgr Xoa_app app = wiki.App(); Xof_cache_mgr cache_mgr = app.File_mgr__cache_mgr(); Xof_url_bldr url_bldr = Xof_url_bldr.new_v2_(); Xow_repo_mgr repo_mgr = wiki.File_mgr__repo_mgr(); Xof_img_mgr img_mgr = app.File_mgr__img_mgr(); Io_url db_dir = wiki.Fsys_mgr().File_dir(); - orig_mgr.Init_by_wiki(db_dir, version_is_1, repo_mgr, url_bldr); - mnt_mgr.Init_by_wiki(db_dir, version_is_1); + Xof_fsdb_mode fsdb_mode = wiki.File_mgr__fsdb_mode(); + orig_mgr.Init_by_wiki(db_dir, schema_is_1, wiki.Domain_bry(), app.Wmf_mgr().Download_wkr(), repo_mgr, url_bldr, fsdb_mode); + if (wiki.File_mgr__fsdb_mode().Tid_wmf()) return; + fsdb_enabled = true; + mnt_mgr.Init_by_wiki(db_dir, schema_is_1); this.bin_mgr = new Xof_bin_mgr(mnt_mgr, repo_mgr, cache_mgr, app.Wmf_mgr(), url_bldr); bin_mgr.Init_by_wiki(img_mgr.Wkr_resize_img()); wkr = new Xof_fsdb_wkr(this, Xoa_app_.Usr_dlg(), cache_mgr, repo_mgr, url_bldr); } catch (Exception exc) {throw Err_.new_fmt_("failed to initialize fsdb_mgr: wiki={0) err={1}", wiki.Domain_str(), Err_.Message_gplx_brief(exc));} } - public void Fsdb_search_by_list(byte exec_tid, ListAdp itms, Xoae_page page) { + public void Fsdb_search_by_list(byte exec_tid, ListAdp itms, Xoa_page page, Xog_js_wkr js_wkr) { + if (!fsdb_enabled) return; OrderedHash rv = OrderedHash_.new_bry_(); orig_mgr.Find_by_list(rv, itms, exec_tid); - wkr.Fsdb_search(exec_tid, itms, page); + wkr.Fsdb_search(exec_tid, itms, page, js_wkr); } public void Txn_save() { + if (!fsdb_enabled) return; mnt_mgr.Txn_save(); orig_mgr.Txn_save(); } public void Rls() { + if (!fsdb_enabled) return; this.Txn_save(); // NOTE: must call save, else user db will not update next id; DATE:2014-02-11 mnt_mgr.Rls(); orig_mgr.Rls(); diff --git a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_dir.java b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_dir.java index 529114769..7603a4146 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_dir.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_dir.java @@ -80,14 +80,14 @@ class Fs_root_dir { private static final String Db_conn_bldr_type = "gplx.xowa.fs_root"; private Db_conn Init_db_fil_mgr() { Io_url db_url = url.GenSubFil("^orig_regy.sqlite3"); - boolean created = false; boolean version_is_1 = Bool_.Y; + boolean created = false; boolean schema_is_1 = Bool_.Y; Db_conn conn = Db_conn_bldr.I.Get(Db_conn_bldr_type, db_url); if (conn == null) { conn = Db_conn_bldr.I.New(Db_conn_bldr_type, db_url); created = true; } - cfg_tbl.Conn_(conn, created, version_is_1, Fsm_abc_mgr.Cfg_tbl_v1, Fsm_abc_mgr.Cfg_tbl_v2); - fil_tbl.Conn_(conn, created, version_is_1); + cfg_tbl.Conn_(conn, created, schema_is_1, Fsm_abc_mgr.Cfg_tbl_v1, Fsm_abc_mgr.Cfg_tbl_v2); + fil_tbl.Conn_(conn, created, schema_is_1); if (created) cfg_tbl.Insert(Cfg_grp_root_dir, Cfg_key_fil_id_next, Int_.Xto_str(fil_id_next)); else { diff --git a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_fsdb_mgr.java b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_fsdb_mgr.java index 6c73a9b93..106b8ecff 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_fsdb_mgr.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_fsdb_mgr.java @@ -23,12 +23,12 @@ public class Fs_root_fsdb_mgr implements Xof_fsdb_mgr, GfoInvkAble { // read ima private Xowe_wiki wiki; private Fs_root_wkr_fsdb fsdb_wkr; public Fs_root_fsdb_mgr(Xowe_wiki wiki) {this.Init_by_wiki(wiki); fsdb_wkr = new Fs_root_wkr_fsdb(wiki);} public void Init_by_wiki(Xow_wiki wiki) {this.wiki = (Xowe_wiki)wiki;} - public void Fsdb_search_by_list(byte exec_tid, ListAdp itms, Xoae_page page) { + public void Fsdb_search_by_list(byte exec_tid, ListAdp itms, Xoa_page page, Xog_js_wkr js_wkr) { int itms_len = itms.Count(); for (int i = 0; i < itms_len; i++) { Xof_fsdb_itm itm = (Xof_fsdb_itm)itms.FetchAt(i); if (fsdb_wkr.Find_file(exec_tid, itm)) - Js_img_mgr.Update_img(page, itm); + Js_img_mgr.Update_img(page, js_wkr, itm); } } private Io_url Xto_url(byte[] v) { diff --git a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Orig_fil_tbl.java b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Orig_fil_tbl.java index d6b7635b4..b429587d8 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Orig_fil_tbl.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Orig_fil_tbl.java @@ -21,10 +21,10 @@ public class Orig_fil_tbl { private String tbl_name = "orig_fil"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); private String fld_uid, fld_name, fld_ext_id, fld_w, fld_h, fld_dir_url; private Db_conn conn; private Db_stmt stmt_insert, stmt_select; - public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) { + public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1) { this.conn = new_conn; flds.Clear(); String fld_prefix = ""; - if (version_is_1) { + if (schema_is_1) { fld_prefix = "fil_"; } fld_uid = flds.Add_int(fld_prefix + "uid"); diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_fxt.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_fxt.java index 99eb1ab11..e98236f69 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_fxt.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_fxt.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.files.fsdb.tsts; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; -import gplx.fsdb.*; import gplx.dbs.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.cnvs.*; import gplx.xowa.files.exts.*; +import gplx.fsdb.*; import gplx.dbs.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.cnvs.*; import gplx.xowa.files.exts.*; import gplx.xowa.files.gui.*; import gplx.xowa.wikis.*; import gplx.xowa.files.repos.*; import gplx.fsdb.data.*; class Xof_file_fxt { @@ -29,7 +29,9 @@ class Xof_file_fxt { Xoa_test_.Db_init(fsys_db); app = Xoa_app_fxt.app_(Op_sys.Cur().Os_name(), fsys_db); Xowe_wiki wiki = Xoa_app_fxt.wiki_tst_(app); + wiki.File_mgr__fsdb_mode().Tid_make_y_(); Xof_repo_fxt.Repos_init(app.File_mgr(), true, wiki); + wiki.Db_mgr_create_as_sql(); // NOTE: must create as sql_db_mgr not txt_db_mgr fsdb_mgr = new Xof_fsdb_mgr__sql(); // NOTE: must new Xof_fsdb_mgr__sql b/c it keeps a local init; fsdb_mgr.Init_by_wiki(wiki); fsdb_mgr.Bin_mgr().Wkrs__clear(); @@ -57,7 +59,7 @@ class Xof_file_fxt { Xof_fsdb_itm itm = new Xof_fsdb_itm(); itm.Ctor_by_lnki(ttl, ext, md5, arg.Lnki_type(), arg.Lnki_w(), arg.Lnki_h(), Xof_patch_upright_tid_.Tid_all, arg.Lnki_upright(), arg.Lnki_time(), Xof_doc_page.Null); ListAdp itms_list = ListAdp_.new_(); itms_list.Add(itm); - fsdb_mgr.Fsdb_search_by_list(arg.Exec_tid(), itms_list, Xoae_page.Empty); + fsdb_mgr.Fsdb_search_by_list(arg.Exec_tid(), itms_list, Xoae_page.Empty, Xog_js_wkr_.Null); if (arg.Rslt_orig() != Xof_orig_wkr_.Status_null) Tfds.Eq(arg.Rslt_orig(), itm.Orig_status(), "rslt_orig"); if (arg.Rslt_fsdb() != Xof_bin_wkr_.Tid_null) Tfds.Eq(arg.Rslt_fsdb(), itm.Rslt_bin(), "rslt_fsdb"); if (arg.Rslt_conv() != Xof_cnv_wkr_.Tid_null) Tfds.Eq(arg.Rslt_conv(), itm.Rslt_cnv(), "rslt_conv"); diff --git a/400_xowa/src/gplx/xowa/files/gui/Js_img_mgr.java b/400_xowa/src/gplx/xowa/files/gui/Js_img_mgr.java index 1f3876503..464e628dd 100644 --- a/400_xowa/src/gplx/xowa/files/gui/Js_img_mgr.java +++ b/400_xowa/src/gplx/xowa/files/gui/Js_img_mgr.java @@ -20,40 +20,39 @@ import gplx.xowa.xtns.gallery.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.gui.views.*; public class Js_img_mgr { public static void Update_img(Xoae_page page, Xof_xfer_itm itm) { - Js_img_mgr.Update_img(page, itm.Html_uid(), itm.Lnki_type(), itm.Html_elem_tid(), itm.Html_w(), itm.Html_h(), String_.new_utf8_(itm.Html_view_src()), itm.Orig_w(), itm.Orig_h(), String_.new_utf8_(itm.Html_orig_src()), itm.Lnki_ttl(), itm.Gallery_mgr_h(), itm.Html_img_wkr()); + Xog_js_wkr js_wkr = Env_.Mode_testing() ? Xog_js_wkr_.Null : page.Tab().Html_itm(); + Js_img_mgr.Update_img(page, js_wkr, itm.Html_img_wkr(), itm.Html_uid(), itm.Lnki_type(), itm.Html_elem_tid(), itm.Html_w(), itm.Html_h(), String_.new_utf8_(itm.Html_view_src()), itm.Orig_w(), itm.Orig_h(), String_.new_utf8_(itm.Html_orig_src()), itm.Lnki_ttl(), itm.Gallery_mgr_h()); } - public static void Update_img(Xoae_page page, Xof_fsdb_itm itm) { - Js_img_mgr.Update_img(page, itm.Html_uid(), itm.Lnki_type(), itm.Html_elem_tid(), itm.Html_w(), itm.Html_h(), itm.Html_view_url().To_http_file_str(), itm.Orig_w(), itm.Orig_h(), itm.Html_orig_url().To_http_file_str(), itm.Lnki_ttl(), itm.Gallery_mgr_h(), itm.Html_img_wkr()); + public static void Update_img(Xoa_page page, Xog_js_wkr js_wkr, Xof_fsdb_itm itm) { + Js_img_mgr.Update_img(page, js_wkr, itm.Html_img_wkr(), itm.Html_uid(), itm.Lnki_type(), itm.Html_elem_tid(), itm.Html_w(), itm.Html_h(), itm.Html_view_url().To_http_file_str(), itm.Orig_w(), itm.Orig_h(), itm.Html_orig_url().To_http_file_str(), itm.Lnki_ttl(), itm.Gallery_mgr_h()); } public static void Update_link_missing(Xog_html_itm html_itm, String html_id) { html_itm.Html_elem_atr_set_append(html_id, "class", " new"); } - private static void Update_img(Xoae_page page, int uid, byte lnki_type, byte elem_tid, int html_w, int html_h, String html_src, int orig_w, int orig_h, String orig_src, byte[] lnki_ttl, int gallery_mgr_h, Js_img_wkr img_wkr) { - if (Env_.Mode_testing()) return; + private static void Update_img(Xoa_page page, Xog_js_wkr js_wkr, Js_img_wkr img_wkr, int uid, byte lnki_type, byte elem_tid, int html_w, int html_h, String html_src, int orig_w, int orig_h, String orig_src, byte[] lnki_ttl, int gallery_mgr_h) { if (Xoa_app_.Mode != Xoa_app_.Mode_gui) return; // do not update html widget unless app is gui; null ref on http server; DATE:2014-09-17 - Xog_html_itm html_itm = page.Tab().Html_itm(); switch (elem_tid) { case Xof_html_elem.Tid_gallery_v2: - img_wkr.Html_update(page, html_itm, uid, html_w, html_h, html_src, orig_w, orig_h, orig_src, lnki_ttl); + img_wkr.Html_update(page, js_wkr, uid, html_w, html_h, html_src, orig_w, orig_h, orig_src, lnki_ttl); return; } String html_id = "xowa_file_img_" + uid; - html_itm.Html_img_update(html_id, html_src, html_w, html_h); + js_wkr.Html_img_update(html_id, html_src, html_w, html_h); if (Xop_lnki_type.Id_is_thumbable(lnki_type)) { // thumb needs to set cls and width - html_itm.Html_atr_set(html_id, "class", gplx.xowa.html.lnkis.Xoh_lnki_consts.Str_img_cls_thumbimage); - html_itm.Html_atr_set("xowa_file_div_" + uid, "style", "width:" + html_w + "px;"); + js_wkr.Html_atr_set(html_id, "class", gplx.xowa.html.lnkis.Xoh_lnki_consts.Str_img_cls_thumbimage); + js_wkr.Html_atr_set("xowa_file_div_" + uid, "style", "width:" + html_w + "px;"); } switch (elem_tid) { case Xof_html_elem.Tid_gallery: - html_itm.Html_atr_set("xowa_gallery_div3_" + uid, "style", "margin:" + Gallery_html_wtr_utl.Calc_vpad(gallery_mgr_h, html_h) + "px auto;"); + js_wkr.Html_atr_set("xowa_gallery_div3_" + uid, "style", "margin:" + Gallery_html_wtr_utl.Calc_vpad(gallery_mgr_h, html_h) + "px auto;"); break; case Xof_html_elem.Tid_imap: - img_wkr.Html_update(page, html_itm, uid, html_w, html_h, html_src, orig_w, orig_h, orig_src, lnki_ttl); + img_wkr.Html_update(page, js_wkr, uid, html_w, html_h, html_src, orig_w, orig_h, orig_src, lnki_ttl); break; case Xof_html_elem.Tid_vid: String html_id_vid = "xowa_file_play_" + uid; - html_itm.Html_atr_set(html_id_vid, "style", "width:" + html_w + "px;max-width:" + (html_w - 2) + "px;"); - html_itm.Html_atr_set(html_id_vid, "href", orig_src); + js_wkr.Html_atr_set(html_id_vid, "style", "width:" + html_w + "px;max-width:" + (html_w - 2) + "px;"); + js_wkr.Html_atr_set(html_id_vid, "href", orig_src); break; } } diff --git a/400_xowa/src/gplx/xowa/files/gui/Js_img_wkr.java b/400_xowa/src/gplx/xowa/files/gui/Js_img_wkr.java index fa90b33e1..131eb971c 100644 --- a/400_xowa/src/gplx/xowa/files/gui/Js_img_wkr.java +++ b/400_xowa/src/gplx/xowa/files/gui/Js_img_wkr.java @@ -18,5 +18,5 @@ along with this program. If not, see . package gplx.xowa.files.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.gui.views.*; public interface Js_img_wkr { - void Html_update(Xoae_page page, Xog_html_itm html_itm, int html_uid, int html_w, int html_h, String html_src, int orig_w, int orig_h, String orig_src, byte[] lnki_ttl); + void Html_update(Xoa_page page, Xog_js_wkr js_wkr, int html_uid, int html_w, int html_h, String html_src, int orig_w, int orig_h, String orig_src, byte[] lnki_ttl); } diff --git a/400_xowa/src/gplx/xowa/hdumps/Xowd_db_tbl_mgr.java b/400_xowa/src/gplx/xowa/files/gui/Xog_js_wkr.java similarity index 69% rename from 400_xowa/src/gplx/xowa/hdumps/Xowd_db_tbl_mgr.java rename to 400_xowa/src/gplx/xowa/files/gui/Xog_js_wkr.java index 844c25604..61b0a3588 100644 --- a/400_xowa/src/gplx/xowa/hdumps/Xowd_db_tbl_mgr.java +++ b/400_xowa/src/gplx/xowa/files/gui/Xog_js_wkr.java @@ -15,9 +15,9 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa.hdumps; import gplx.*; import gplx.xowa.*; -import gplx.xowa.dbs.tbls.*; -public class Xowd_db_tbl_mgr { - public Xodb_xowa_ns_tbl Tbl__ns() {return tbl__ns;} private final Xodb_xowa_ns_tbl tbl__ns = new Xodb_xowa_ns_tbl(); - public Xodbv_dbs_tbl Tbl__dbs_new() {return new Xodbv_dbs_tbl();} -} +package gplx.xowa.files.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +public interface Xog_js_wkr { + void Html_img_update (String uid, String src, int w, int h); + void Html_atr_set (String uid, String key, String val); + void Html_elem_replace_html (String uid, String html); +} diff --git a/400_xowa/src/gplx/xowa/files/gui/Xog_js_wkr_.java b/400_xowa/src/gplx/xowa/files/gui/Xog_js_wkr_.java new file mode 100644 index 000000000..ab056508f --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/gui/Xog_js_wkr_.java @@ -0,0 +1,26 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.files.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +public class Xog_js_wkr_ { + public static final Xog_js_wkr Null = new Xog_js_wkr__null(); +} +class Xog_js_wkr__null implements Xog_js_wkr { + public void Html_img_update (String uid, String src, int w, int h) {} + public void Html_atr_set (String uid, String key, String val) {} + public void Html_elem_replace_html (String uid, String html) {} +} diff --git a/400_xowa/src/gplx/xowa/files/origs/Xob_orig_tbl_bldr.java b/400_xowa/src/gplx/xowa/files/origs/Xob_orig_tbl_bldr.java index 089bf2966..78d8e4580 100644 --- a/400_xowa/src/gplx/xowa/files/origs/Xob_orig_tbl_bldr.java +++ b/400_xowa/src/gplx/xowa/files/origs/Xob_orig_tbl_bldr.java @@ -23,8 +23,10 @@ public class Xob_orig_tbl_bldr extends Xob_itm_basic_base implements Xob_cmd { public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.wiki_orig"; public void Cmd_ini(Xob_bldr bldr) {} public void Cmd_bgn(Xob_bldr bldr) { + Xof_fsdb_mode fsdb_mode = wiki.File_mgr__fsdb_mode(); + fsdb_mode.Tid_make_y_(); wiki.Init_assert(); - conn = Xof_orig_tbl.Conn__get_or_make(wiki.Fsys_mgr().File_dir(), new Xof_orig_tbl(), Bool_.Y); // NOTE: Xof_orig_tbl needed if db doesn't exist and tbl.meta needs to be created + conn = Xof_orig_tbl.Conn__get_or_make(wiki.Fsys_mgr().File_dir(), new Xof_orig_tbl(), Bool_.Y, fsdb_mode); // NOTE: Xof_orig_tbl needed if db doesn't exist and tbl.meta needs to be created Io_url make_db_url = Xodb_db_file.init__file_make(wiki.Fsys_mgr().Root_dir()).Url(); Sqlite_engine_.Db_attach(conn, "make_db", make_db_url.Raw()); } diff --git a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_mgr.java b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_mgr.java index 314168e43..f12e6f6db 100644 --- a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_mgr.java +++ b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_mgr.java @@ -16,19 +16,24 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.files.origs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.core.primitives.*; import gplx.dbs.*; import gplx.xowa.files.repos.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.wmfs.apis.*; public class Xof_orig_mgr { private Xof_orig_wkr[] wkrs; private int wkrs_len; - private final Xof_orig_wkr__orig_db wkr_xowa_db = new Xof_orig_wkr__orig_db(); private Db_conn orig_conn = null; private Xof_url_bldr url_bldr; private Xow_repo_mgr repo_mgr; public Xof_orig_mgr() {this.Wkrs__clear();} - public Xof_orig_wkr__orig_db Wkrs__get_xowa_db() {return wkr_xowa_db;} - public void Init_by_wiki(Io_url db_dir, boolean version_is_1, Xow_repo_mgr repo_mgr, Xof_url_bldr url_bldr) { + public void Init_by_wiki(Io_url db_dir, boolean schema_is_1, byte[] domain_bry, Xof_download_wkr download_wkr, Xow_repo_mgr repo_mgr, Xof_url_bldr url_bldr, Xof_fsdb_mode fsdb_mode) { this.repo_mgr = repo_mgr; this.url_bldr = url_bldr; - this.orig_conn = Xof_orig_tbl.Conn__get_or_make(db_dir, wkr_xowa_db.Tbl(), version_is_1); - // Xof_orig_wkr wmf_api = new Xof_orig_wkr__wmf_api(new Xoapi_orig_wmf(), wiki.Appe().File_mgr().Wmf_mgr().Download_wkr(), wiki.File_mgr().Repo_mgr(), wiki.Domain_bry()); // NOTE: do not reinstate without handling scrib / pfunc calls to Orig_mgr - this.Wkrs__add_many(wkr_xowa_db); + if (fsdb_mode.Tid_wmf()) { + Xof_orig_wkr wmf_api = new Xof_orig_wkr__wmf_api(new Xoapi_orig_wmf(), download_wkr, repo_mgr, domain_bry); // NOTE: do not reinstate without handling scrib / pfunc calls to Orig_mgr + this.Wkrs__add_many(wmf_api); + } + else { + Xof_orig_wkr__orig_db wkr_xowa_db = new Xof_orig_wkr__orig_db(); + Xof_orig_tbl.Conn__get_or_make(db_dir, wkr_xowa_db.Tbl(), schema_is_1, fsdb_mode); + this.Wkrs__add_many(wkr_xowa_db); + } } public Xof_orig_itm Find_by_ttl_or_null(byte[] ttl) { for (int i = 0; i < wkrs_len; i++) { @@ -52,10 +57,16 @@ public class Xof_orig_mgr { } } public void Txn_save() { - orig_conn.Txn_mgr().Txn_end_all(); + for (int i = 0; i < wkrs_len; i++) { + Xof_orig_wkr wkr = wkrs[i]; + wkr.Db_txn_save(); + } } public void Rls() { - orig_conn.Conn_term(); + for (int i = 0; i < wkrs_len; i++) { + Xof_orig_wkr wkr = wkrs[i]; + wkr.Db_rls(); + } } private void Wkrs__clear() {wkrs = Xof_orig_wkr_.Ary_empty; wkrs_len = 0;} private void Wkrs__add_many(Xof_orig_wkr... v) { diff --git a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl.java b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl.java index e202f369a..d9370e710 100644 --- a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl.java +++ b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl.java @@ -16,16 +16,18 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.files.origs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.core.primitives.*; import gplx.dbs.*; import gplx.dbs.utls.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.files.repos.*; public class Xof_orig_tbl { private String tbl_name = "file_orig_regy"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); private String fld_repo, fld_ttl, fld_status, fld_ext, fld_w, fld_h, fld_redirect; private Db_conn conn; private final Xof_orig_tbl__in_wkr select_in_wkr = new Xof_orig_tbl__in_wkr(); - public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) { + public Db_conn Conn() {return conn;} + public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1) { this.conn = new_conn; flds.Clear(); String fld_prefix = ""; - if (version_is_1) { + if (schema_is_1) { tbl_name = "wiki_orig"; fld_prefix = "orig_"; } @@ -78,11 +80,19 @@ public class Xof_orig_tbl { return rv; } public static final String Db_conn_bldr_type = "xowa.file.orig_regy"; - public static Db_conn Conn__get_or_make(Io_url root_dir, Xof_orig_tbl tbl, boolean version_is_1) { - Io_url conn_url = root_dir.GenSubFil("wiki.orig#00.sqlite3"); - Db_conn_bldr_data conn_data = Db_conn_bldr.I.Get_or_new(Db_conn_bldr_type, conn_url); - Db_conn conn = conn_data.Conn(); - tbl.Conn_(conn, conn_data.Created(), version_is_1); + public static Db_conn Conn__get_or_make(Io_url root_dir, Xof_orig_tbl tbl, boolean schema_is_1, Xof_fsdb_mode fsdb_mode) { + Io_url conn_url = root_dir.GenSubFil("wiki.orig#00.sqlite3"); +// boolean created = Bool_.N; Db_conn conn = null; +// if (fsdb_create.Val()) { + Db_conn_bldr_data conn_data = Db_conn_bldr.I.Get_or_new("", conn_url); + Db_conn conn = conn_data.Conn(); + boolean created = conn_data.Created(); +// } +// else { +// conn = Db_conn_bldr.I.Get("", conn_url); +// created = false; +// } + tbl.Conn_(conn, created, schema_is_1); return conn; } } diff --git a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr.java b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr.java index 2f0b81235..0c285e160 100644 --- a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr.java +++ b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr.java @@ -22,4 +22,6 @@ public interface Xof_orig_wkr { Xof_orig_itm Find_as_itm(byte[] ttl); boolean Find_by_list(OrderedHash rv, ListAdp itms); boolean Add_orig(byte repo, byte[] page, int ext_id, int w, int h, byte[] redirect); + void Db_txn_save(); + void Db_rls(); } diff --git a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr__orig_db.java b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr__orig_db.java index 1efe69d61..228d48bfd 100644 --- a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr__orig_db.java +++ b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr__orig_db.java @@ -20,12 +20,14 @@ import gplx.dbs.*; public class Xof_orig_wkr__orig_db implements Xof_orig_wkr { public byte Tid() {return Xof_orig_wkr_.Tid_xowa_reg;} public Xof_orig_tbl Tbl() {return tbl;} private final Xof_orig_tbl tbl = new Xof_orig_tbl(); - public void Conn_(Db_conn conn, boolean created, boolean version_is_1) {tbl.Conn_(conn, created, version_is_1);} + public void Conn_(Db_conn conn, boolean created, boolean schema_is_1) {tbl.Conn_(conn, created, schema_is_1);} public boolean Find_by_list(OrderedHash rv, ListAdp itms) {tbl.Select_by_list(rv, itms); return true;} public Xof_orig_itm Find_as_itm(byte[] ttl) {return tbl.Select_itm(ttl);} public boolean Add_orig(byte repo, byte[] page, int ext_id, int w, int h, byte[] redirect) { - if (tbl.Select_itm(page) != Xof_orig_itm.Null) return false; // do not add if already there; probably not needed + if (tbl.Select_itm(page) != Xof_orig_itm.Null) return false; // do not add if already there; needed b/c fsdb_wkr always calls Insert when itm is found; tbl.Insert(repo, page, ext_id, w, h, redirect); return true; } + public void Db_txn_save() {tbl.Conn().Txn_mgr().Txn_end_all();} + public void Db_rls() {tbl.Conn().Conn_term();} } diff --git a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr__wmf_api.java b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr__wmf_api.java index c1071d1d0..3f1bc1532 100644 --- a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr__wmf_api.java +++ b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr__wmf_api.java @@ -18,9 +18,9 @@ along with this program. If not, see . package gplx.xowa.files.origs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.repos.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.wmfs.apis.*; public class Xof_orig_wkr__wmf_api implements Xof_orig_wkr { - private final Xoapi_orig_base orig_api; private final Xof_download_wkr download_wkr; private final Xowe_repo_mgr repo_mgr; private final byte[] wiki_domain; + private final Xoapi_orig_base orig_api; private final Xof_download_wkr download_wkr; private final Xow_repo_mgr repo_mgr; private final byte[] wiki_domain; private final Xoapi_orig_rslts api_rv = new Xoapi_orig_rslts(); - public Xof_orig_wkr__wmf_api(Xoapi_orig_base orig_api, Xof_download_wkr download_wkr, Xowe_repo_mgr repo_mgr, byte[] wiki_domain) { + public Xof_orig_wkr__wmf_api(Xoapi_orig_base orig_api, Xof_download_wkr download_wkr, Xow_repo_mgr repo_mgr, byte[] wiki_domain) { this.orig_api = orig_api; this.download_wkr = download_wkr; this.repo_mgr = repo_mgr; this.wiki_domain = wiki_domain; } public byte Tid() {return Xof_orig_wkr_.Tid_wmf_api;} @@ -38,6 +38,8 @@ public class Xof_orig_wkr__wmf_api implements Xof_orig_wkr { return rv; } public boolean Add_orig(byte repo, byte[] page, int ext_id, int w, int h, byte[] redirect) {return false;} + public void Db_txn_save() {} + public void Db_rls() {} public static Xof_ext Ext__handle_ogg(Xof_ext ext, int w, int h) { if (!ext.Id_is_ogg()) return ext; boolean is_audio = w == 0 && h == 0; // wmf returns back w/h of 0 if audio; non-0 if video; DATE:2013-11-11 diff --git a/400_xowa/src/gplx/xowa/files/repos/Xow_repo_mgr.java b/400_xowa/src/gplx/xowa/files/repos/Xow_repo_mgr.java index 77d455a29..ee8620518 100644 --- a/400_xowa/src/gplx/xowa/files/repos/Xow_repo_mgr.java +++ b/400_xowa/src/gplx/xowa/files/repos/Xow_repo_mgr.java @@ -20,4 +20,5 @@ public interface Xow_repo_mgr { Xof_repo_pair Repos_get_at(int i); Xof_repo_pair Repos_get_by_id(int id); Xof_repo_pair Repos_get_by_wiki(byte[] wiki); + Xof_repo_pair[] Repos_ary(); } diff --git a/400_xowa/src/gplx/xowa/gui/urls/Xog_url_wkr.java b/400_xowa/src/gplx/xowa/gui/urls/Xog_url_wkr.java index 8026c9d9b..c45e98041 100644 --- a/400_xowa/src/gplx/xowa/gui/urls/Xog_url_wkr.java +++ b/400_xowa/src/gplx/xowa/gui/urls/Xog_url_wkr.java @@ -69,15 +69,15 @@ public class Xog_url_wkr { return Rslt_handled; } private Xoa_url Exec_url_file(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xog_win_itm win, byte[] href_bry) { // EX: file:///xowa/A.png - href_bry = Xoa_app_.Utl_encoder_mgr().Url().Decode(href_bry); + href_bry = Xoa_app_.Utl__encoder_mgr().Url().Decode(href_bry); Io_url href_url = Io_url_.http_any_(String_.new_utf8_(href_bry), Op_sys.Cur().Tid_is_wnt()); gplx.gfui.Gfui_html html_box = win.Active_html_box(); String xowa_ttl = wiki.Gui_mgr().Cfg_browser().Content_editable() ? html_box.Html_active_atr_get_str(gplx.xowa.html.Xoh_consts.Atr_xowa_title_str, null) - : Xoh_dom_.Title_by_href(Xoa_app_.Utl_encoder_mgr().Comma(), app.Utl_bry_bfr_mkr().Get_b512().Mkr_rls(), href_bry, Bry_.new_utf8_(html_box.Html_doc_html())); + : Xoh_dom_.Title_by_href(Xoa_app_.Utl__encoder_mgr().Comma(), app.Utl__bfr_mkr().Get_b512().Mkr_rls(), href_bry, Bry_.new_utf8_(html_box.Html_doc_html())); if (!Io_mgr._.ExistsFil(href_url)) { Xof_xfer_itm xfer_itm = new Xof_xfer_itm(); - byte[] title = Xoa_app_.Utl_encoder_mgr().Url().Decode(Bry_.new_utf8_(xowa_ttl)); + byte[] title = Xoa_app_.Utl__encoder_mgr().Url().Decode(Bry_.new_utf8_(xowa_ttl)); xfer_itm.Init_by_lnki(title, Bry_.Empty, Xop_lnki_type.Id_none, -1, -1, -1, Xof_doc_thumb.Null, Xof_doc_page.Null); wiki.File_mgr().Find_meta(xfer_itm); page.File_queue().Clear(); @@ -113,7 +113,7 @@ public class Xog_url_wkr { segs_bgn = 2; // start from seg_2; seg_0="/en.wikipedia.org/" and seg_1="/wiki/"; note that > 2 segs possible; EX: "/site/en.wikipedia.org/wiki/A/B/C } if (segs_iterate) { - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b128(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b128(); for (int i = segs_bgn; i < segs_ary_len; i++) { tmp_bfr.Add(segs_ary[i]); tmp_bfr.Add_byte(Byte_ascii.Slash); diff --git a/400_xowa/src/gplx/xowa/gui/views/Xog_html_itm.java b/400_xowa/src/gplx/xowa/gui/views/Xog_html_itm.java index ac4643dab..b1f1b022e 100644 --- a/400_xowa/src/gplx/xowa/gui/views/Xog_html_itm.java +++ b/400_xowa/src/gplx/xowa/gui/views/Xog_html_itm.java @@ -16,8 +16,10 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.gui.views; import gplx.*; import gplx.xowa.*; import gplx.xowa.gui.*; -import gplx.core.primitives.*; import gplx.core.btries.*; import gplx.gfui.*; import gplx.html.*; import gplx.xowa.gui.menus.*; import gplx.xowa.gui.menus.dom.*; import gplx.xowa.html.modules.*; import gplx.xowa.pages.*; -public class Xog_html_itm implements GfoInvkAble, GfoEvObj { +import gplx.core.primitives.*; import gplx.core.btries.*; +import gplx.gfui.*; import gplx.xowa.gui.menus.*; import gplx.xowa.gui.menus.dom.*; import gplx.xowa.files.gui.*; +import gplx.html.*; import gplx.xowa.html.modules.*; import gplx.xowa.pages.*; +public class Xog_html_itm implements Xog_js_wkr, GfoInvkAble, GfoEvObj { private Xoae_app app; public Xog_html_itm(Xog_tab_itm owner_tab) { this.owner_tab = owner_tab; @@ -150,7 +152,7 @@ public class Xog_html_itm implements GfoInvkAble, GfoEvObj { private boolean Scroll_page_by_id(String id) { return (id == null) ? false - : html_box.Html_elem_scroll_into_view(Xoa_app_.Utl_encoder_mgr().Id().Encode_str(id)); + : html_box.Html_elem_scroll_into_view(Xoa_app_.Utl__encoder_mgr().Id().Encode_str(id)); } public void Js_enabled_(boolean v) { html_box.Html_js_enabled_(v); diff --git a/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm.java b/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm.java index 90e023ed0..307795a90 100644 --- a/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm.java +++ b/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm.java @@ -17,7 +17,8 @@ along with this program. If not, see . */ package gplx.xowa.gui.views; import gplx.*; import gplx.xowa.*; import gplx.xowa.gui.*; import gplx.threads.*; import gplx.gfui.*; import gplx.xowa.gui.history.*; import gplx.xowa.gui.bnds.*; -import gplx.xowa.parsers.*; import gplx.xowa.parsers.lnkis.redlinks.*; import gplx.xowa.cfgs2.*; import gplx.xowa.pages.*; +import gplx.xowa.parsers.*; import gplx.xowa.parsers.lnkis.redlinks.*; import gplx.xowa.cfgs2.*; +import gplx.xowa.pages.*; import gplx.xowa.pages.skins.*; public class Xog_tab_itm implements GfoInvkAble { private Xog_win_itm win; private Xocfg_tab_mgr cfg_tab_mgr; public Xog_tab_itm(Xog_tab_mgr tab_mgr, Gfui_tab_itm_data tab_data, Xowe_wiki wiki, Xoae_page page) { @@ -153,7 +154,17 @@ public class Xog_tab_itm implements GfoInvkAble { } usr_dlg.Prog_none("", "", "rendering html"); // win.Page__async__bgn(this); - app.Thread_mgr().File_load_mgr().Add_at_end(new Load_files_wkr(this)).Run(); + Gfo_thread_wkr async_wkr = null; + if (wkr.Hdump_enabled()) { + wiki.File_mgr().Fsdb_mgr().Init_by_wiki(wiki); + async_wkr = new gplx.xowa2.gui.Xogv_img_wkr(wiki.File_mgr().Fsdb_mgr().Orig_mgr(), wiki.File_mgr().Fsdb_mgr().Bin_mgr(), app.File_mgr__cache_mgr(), wiki.File_mgr__repo_mgr(), html_itm, page, page.Hdump_data().Imgs(), gplx.xowa.files.Xof_exec_tid.Tid_wiki_page); + if (wiki.Html_mgr__hdump_enabled()) { + wiki.Html_mgr__hdump_wtr().Save(page); + } + } + else + async_wkr = new Load_files_wkr(this); + app.Thread_mgr().File_load_mgr().Add_at_end(async_wkr).Run(); } finally { app.Thread_mgr().Page_load_mgr().Resume(); @@ -182,10 +193,10 @@ public class Xog_tab_itm implements GfoInvkAble { page.File_queue().Exec(gplx.xowa.files.Xof_exec_tid.Tid_wiki_page, usr_dlg, wiki, page); if (page.Html_data().Xtn_gallery_packed_exists()) // packed_gallery exists; fire js once; PAGE:en.w:National_Sculpture_Museum_(Valladolid); DATE:2014-07-21 html_itm.Html_gallery_packed_exec(); - if ( page.Html_data().Xtn_imap_exists() // imap exists; DATE:2014-08-07 + if ( page.Html_data().Xtn_imap_exists() // imap exists; DATE:2014-08-07 && page.Html_data().Module_mgr().Itm_popups().Enabled() ) - html_itm.Html_popups_bind_hover_to_doc(); // rebind all elements to popup + html_itm.Html_popups_bind_hover_to_doc(); // rebind all elements to popup } catch (Exception e) {usr_dlg.Warn_many("", "", "page.thread.image: page=~{0} err=~{1}", page_ttl_str, Err_.Message_gplx_brief(e));} } @@ -219,9 +230,6 @@ public class Xog_tab_itm implements GfoInvkAble { } catch (Exception e) {usr_dlg.Warn_many("", "", "page.thread.redlinks: page=~{0} err=~{1}", page_ttl_str, Err_.Message_gplx_brief(e));} try {app.File_mgr().Cache_mgr().Compress_check();} catch (Exception e) {usr_dlg.Warn_many("", "", "page.thread.cache: page=~{0} err=~{1}", page_ttl_str, Err_.Message_gplx_brief(e));} - if (wiki.Db_mgr().Hdump_mgr().Enabled()) { - wiki.Db_mgr().Hdump_mgr().Save_if_missing(page); - } app.Log_wtr().Queue_enabled_(false); } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { @@ -241,6 +249,7 @@ class Load_page_wkr implements Gfo_thread_wkr { public Xoae_page Page() {return page;} private Xoae_page page; public Xoa_url Url() {return url;} private Xoa_url url; public Xoa_ttl Ttl() {return ttl;} private Xoa_ttl ttl; + public boolean Hdump_enabled() {return hdump_enabled;} private boolean hdump_enabled; public Exception Exc() {return exc;} private Exception exc; public void Exec() { try { @@ -249,11 +258,13 @@ class Load_page_wkr implements Gfo_thread_wkr { if (Env_.System_memory_free() < app.Sys_cfg().Free_mem_when()) // check if low in memory app.Free_mem(false); // clear caches (which will clear bry_bfr_mk) else // not low in memory - app.Utl_bry_bfr_mkr().Clear(); // clear bry_bfr_mk only; NOTE: call before page parse, not when page is first added, else threading errors; DATE:2014-05-30 + app.Utl__bfr_mkr().Clear(); // clear bry_bfr_mk only; NOTE: call before page parse, not when page is first added, else threading errors; DATE:2014-05-30 this.page = wiki.GetPageByTtl(url, ttl, wiki.Lang(), tab, false); int html_db_id = page.Revision_data().Html_db_id(); - if (wiki.Db_mgr().Hdump_mgr().Enabled() && html_db_id != -1) - wiki.Db_mgr().Hdump_mgr().Load(wiki, page, html_db_id); + if (wiki.Html_mgr__hdump_enabled() && html_db_id != -1) { + wiki.Html_mgr__hdump_rdr().Get_by_ttl(page); + hdump_enabled = true; + } else wiki.ParsePage(page, false); GfoInvkAble_.InvkCmd_val(tab.Cmd_sync(), Xog_tab_itm.Invk_show_url_loaded_swt, this); diff --git a/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm_edit_mgr.java b/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm_edit_mgr.java index 3b40bcb26..c37c0d3dd 100644 --- a/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm_edit_mgr.java +++ b/400_xowa/src/gplx/xowa/gui/views/Xog_tab_itm_edit_mgr.java @@ -40,7 +40,7 @@ public class Xog_tab_itm_edit_mgr { win_itm.Page__mode_(Xopg_view_mode.Tid_read); win_itm.Page__async__bgn(tab); } - wiki.Db_mgr().Hdump_mgr().Save(page); +// wiki.Db_mgr().Hdump_mgr().Save(page); } public static void Preview(Xog_tab_itm tab) { if (tab.View_mode() != Xopg_view_mode.Tid_edit) return; // exit if not edit; handles preview somehow being called? @@ -54,7 +54,7 @@ public class Xog_tab_itm_edit_mgr { wiki.ParsePage_root(new_page, true); // refresh html tab.Page_(new_page); new_page.Tab_(tab); // replace old page with new_page; DATE:2014-10-09 - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_m001(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_m001(); Xoh_page_wtr_wkr wkr = wiki.Html_mgr().Page_wtr_mgr().Wkr(Xopg_view_mode.Tid_read); wkr.Page_(new_page); wkr.XferAry(tmp_bfr, 0); @@ -103,7 +103,7 @@ public class Xog_tab_itm_edit_mgr { byte[] data = tab.Html_itm().Get_elem_value_for_edit_box_as_bry(); new_page.Data_raw_(data); wiki.ParsePage_root(new_page, true); - Bry_bfr bfr = win.App().Utl_bry_bfr_mkr().Get_m001(); + Bry_bfr bfr = win.App().Utl__bfr_mkr().Get_m001(); bfr.Add(new_page.Root().Root_src()); wiki.Ctx().Defn_trace().Print(data, bfr); new_page.Data_raw_(bfr.Mkr_rls().Xto_bry_and_clear()); diff --git a/400_xowa/src/gplx/xowa/gui/views/Xog_win_itm__prog_href_mgr.java b/400_xowa/src/gplx/xowa/gui/views/Xog_win_itm__prog_href_mgr.java index aa226b911..b56c198cd 100644 --- a/400_xowa/src/gplx/xowa/gui/views/Xog_win_itm__prog_href_mgr.java +++ b/400_xowa/src/gplx/xowa/gui/views/Xog_win_itm__prog_href_mgr.java @@ -22,7 +22,7 @@ public class Xog_win_itm__prog_href_mgr { private static Bry_bfr tmp_bfr = Bry_bfr.reset_(512); public static void Print(Xog_win_itm win) { // PURPOSE: print href in prog box when in content editable mode String href = win.Active_html_box().Html_active_atr_get_str(Gfui_html.Atr_href, "");// get selected href from html_box - href = Xoa_app_.Utl_encoder_mgr().Href().Decode_str(href); // remove url encodings + href = Xoa_app_.Utl__encoder_mgr().Href().Decode_str(href); // remove url encodings if (!String_.Eq(href, win.Prog_box().Text())) win.Usr_dlg().Prog_direct(href); } diff --git a/400_xowa/src/gplx/xowa/hdumps/Xob_hdump_bldr.java b/400_xowa/src/gplx/xowa/hdumps/Xob_hdump_bldr.java deleted file mode 100644 index 774b1d5f9..000000000 --- a/400_xowa/src/gplx/xowa/hdumps/Xob_hdump_bldr.java +++ /dev/null @@ -1,98 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.hdumps; import gplx.*; import gplx.xowa.*; -import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.ios.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.hdumps.saves.*; import gplx.xowa.hdumps.dbs.*; import gplx.xowa.hdumps.core.*; import gplx.xowa.html.hzips.*; -public class Xob_hdump_bldr { - private Xodb_fsys_mgr fsys_mgr; private Xodb_file core_db; private Xodb_xowa_db_tbl db_tbl; private Xodb_xowa_cfg_tbl cfg_tbl; private Db_stmt cfg_update_stmt; - private int hdump_db_id; private long hdump_db_size, hdump_db_max; private Db_conn hdump_db_provider; - private Xodb_hdump_mgr hdump_mgr; private Hdump_save_mgr hdump_save_mgr; - public Xob_hdump_bldr(Xodb_mgr_sql db_mgr, Db_conn make_provider, long hdump_db_max) { - this.hdump_db_max = hdump_db_max; - this.fsys_mgr = db_mgr.Fsys_mgr(); - core_db = fsys_mgr.Get_tid_root(Xodb_file_tid.Tid_core); - db_tbl = db_mgr.Tbl_xowa_db(); - cfg_tbl = new Xodb_xowa_cfg_tbl().Conn_(make_provider); cfg_update_stmt = cfg_tbl.Update_stmt(); - Xodb_hdump_mgr_setup.Assert_col__page_html_db_id(core_db.Conn(), cfg_tbl); - hdump_mgr = db_mgr.Hdump_mgr(); hdump_save_mgr = hdump_mgr.Save_mgr(); - hdump_save_mgr.Hdump_stats_enable_y_(make_provider); - } - public void Bld_init() { - Db_init(Db_get_last_or_make(fsys_mgr), cfg_tbl.Select_val_as_long_or(Cfg_grp_hdump_make, Cfg_itm_hdump_size, 0)); - hdump_db_provider.Txn_mgr().Txn_bgn_if_none(); - } - public void Bld_term() { - this.Commit(); - Db_term(core_db, hdump_db_provider, hdump_db_id); - } - private Bry_bfr tmp_bfr = Bry_bfr.reset_(Io_mgr.Len_mb); private Xow_hzip_stats hzip_stats = new Xow_hzip_stats(); - public void Insert_page(Xoae_page page) { - hdump_mgr.Write2(tmp_bfr, page, hzip_stats); - hdump_db_size += hdump_save_mgr.Insert_body(page, hzip_stats, page.Revision_data().Id()); - if (hdump_db_size > hdump_db_max) { - Db_term(core_db, hdump_db_provider, hdump_db_id); - Db_init(Db_make(fsys_mgr), 0); - } - } - public void Commit() { - db_tbl.Commit_all(fsys_mgr); // commit new html_dbs - hdump_db_provider.Txn_mgr().Txn_end_all_bgn_if_none(); // commit entries - cfg_tbl.Update(cfg_update_stmt, Cfg_grp_hdump_make, Cfg_itm_hdump_size, Long_.Xto_str(hdump_db_size)); // update cfg; should happen after commit entries - } - private static Xodb_file Db_get_last_or_make(Xodb_fsys_mgr fsys_mgr) { - Xodb_file rv = fsys_mgr.Get_tid_root(Xodb_file_tid.Tid_html); - if (rv == null) rv = Db_make(fsys_mgr); - return rv; - } - private void Db_init(Xodb_file db_file, long hdump_db_size) { - this.hdump_db_id = db_file.Id(); - this.hdump_db_size = hdump_db_size; - this.hdump_db_provider = db_file.Conn(); - this.hdump_save_mgr.Tbl().Conn_(hdump_db_provider); - } - private static Xodb_file Db_make(Xodb_fsys_mgr fsys_mgr) { - Xodb_file rv = fsys_mgr.Make(Xodb_file_tid.Tid_html); - rv.Conn().Exec_sql(Xodb_wiki_page_html_tbl.Tbl_sql); - return rv; - } - private static void Db_term(Xodb_file core_db_file, Db_conn hdump_db_provider, int hdump_db_id) { - hdump_db_provider.Txn_mgr().Txn_end_all(); // commit transactions - Sqlite_engine_.Idx_create(hdump_db_provider, Xodb_wiki_page_html_tbl.Idx_core); // create index - Sqlite_engine_.Db_attach(hdump_db_provider, "page_db", core_db_file.Url().Raw()); // update page_db.page with page_html_db_id - hdump_db_provider.Txn_mgr().Txn_bgn(); - hdump_db_provider.Exec_sql(String_.Format(Sql_update_page_html_db_id, hdump_db_id)); - hdump_db_provider.Txn_mgr().Txn_end(); - Sqlite_engine_.Db_detach(hdump_db_provider, "page_db"); - hdump_db_provider.Conn_term(); // release conn - } - private static final String Cfg_grp_hdump_make = "hdump.make", Cfg_itm_hdump_size = "hdump.size"; - private static final String Sql_update_page_html_db_id = String_.Concat_lines_nl_skip_last - ( "REPLACE INTO page_db.page (page_id, page_namespace, page_title, page_is_redirect, page_touched, page_len, page_random_int, page_file_idx, page_redirect_id, page_html_db_id)" - , "SELECT p.page_id" - , ", p.page_namespace" - , ", p.page_title" - , ", p.page_is_redirect" - , ", p.page_touched" - , ", p.page_len" - , ", p.page_random_int" - , ", p.page_file_idx" - , ", p.page_redirect_id" - , ", {0}" - , "FROM page_db.page p" - , " JOIN wiki_page_html h ON p.page_id = h.page_id" - ); -} diff --git a/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr.java b/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr.java deleted file mode 100644 index b7123c6bb..000000000 --- a/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr.java +++ /dev/null @@ -1,101 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.hdumps; import gplx.*; import gplx.xowa.*; -import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.html.*; import gplx.xowa.gui.*; -import gplx.xowa.hdumps.core.*; import gplx.xowa.hdumps.saves.*; import gplx.xowa.pages.*; import gplx.xowa.hdumps.loads.*; import gplx.xowa.hdumps.htmls.*; import gplx.xowa.hdumps.dbs.*; import gplx.xowa.html.hzips.*; -import gplx.xowa2.gui.*; -public class Xodb_hdump_mgr { - private Xodb_file hdump_db_file; private Xow_hzip_mgr hzip_mgr; - public Xodb_hdump_mgr(Xowe_wiki wiki) { - this.wiki = wiki; - load_mgr = new Hdump_load_mgr(); - Tbl_(new Xodb_wiki_page_html_tbl()); - text_tbl.Init_by_wiki(wiki); - Xoae_app app = wiki.Appe(); - html_mgr.Init_by_app(app.Usr_dlg(), app.Fsys_mgr(), Xoa_app_.Utl_encoder_mgr().Fsys()); - hzip_mgr = wiki.Html_mgr().Hzip_mgr(); - } - public Xowe_wiki Wiki() {return wiki;} private final Xowe_wiki wiki; - @gplx.Internal protected Hdump_load_mgr Load_mgr() {return load_mgr;} private Hdump_load_mgr load_mgr; - @gplx.Internal protected Hdump_save_mgr Save_mgr() {return save_mgr;} private Hdump_save_mgr save_mgr = new Hdump_save_mgr(); - public Hdump_html_body Html_mgr() {return html_mgr;} private Hdump_html_body html_mgr = new Hdump_html_body(); - public Xodb_wiki_page_html_tbl Text_tbl() {return text_tbl;} private Xodb_wiki_page_html_tbl text_tbl; - public boolean Enabled() {return enabled;} public void Enabled_(boolean v) {enabled = v;} private boolean enabled; - @gplx.Internal protected void Tbl_mem_() {Tbl_(new Xodb_wiki_page_html_tbl_mem());} - public int Html_db_id_default(int page_len) { - return -1; - } - public Db_conn Db_conn_by_page(int page_id) { - return text_tbl.Conn(); - } - public void Save_if_missing(Xoae_page page) { - if (page.Revision_data().Html_db_id() == -1) Save(page); - } - public void Save(Xoae_page page) { - if (!Enabled_chk()) return; - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_m001(); - this.Write(tmp_bfr, page); - save_mgr.Update(page); - wiki.Db_mgr_as_sql().Tbl_page().Update_html_db_id(page.Revision_data().Id(), hdump_db_file.Id()); - tmp_bfr.Mkr_rls(); - } - public void Write(Bry_bfr bfr, Xoae_page page) { - page.File_queue().Clear(); // need to reset uid to 0, else xowa_file_# will resume from last - Xoh_page_wtr_wkr wkr = wiki.Html_mgr().Page_wtr_mgr().Wkr(Xopg_view_mode.Tid_read); - wkr.Write_body(bfr, Xoh_wtr_ctx.Hdump, page); - page.Hdump_data().Body_(bfr.Xto_bry_and_clear()); - } - public void Write2(Bry_bfr tmp_bfr, Xoae_page page, Xow_hzip_stats stats) { - page.File_queue().Clear(); // need to reset uid to 0, else xowa_file_# will resume from last - Xoh_page_wtr_wkr wkr = wiki.Html_mgr().Page_wtr_mgr().Wkr(Xopg_view_mode.Tid_read); - wkr.Write_body(tmp_bfr, Xoh_wtr_ctx.Hdump, page); - hzip_mgr.Save(tmp_bfr, stats, page.Url().Xto_full_bry(), tmp_bfr.Xto_bry_and_clear()); - page.Hdump_data().Body_(tmp_bfr.Xto_bry_and_clear()); - hpg.Init(tmp_bfr, page); - } private Xog_page hpg = new Xog_page(); - public void Load(Xowe_wiki wiki, Xoae_page page, int html_db_id) { - if (!Enabled_chk()) return; - page.Root_(new Xop_root_tkn()); - Xog_page hpg = new Xog_page().Init(page.Revision_data().Id(), page.Url(), page.Ttl()); - load_mgr.Load(hpg, wiki.Db_mgr_as_sql().Fsys_mgr(), html_db_id, page.Revision_data().Id(), page.Ttl()); - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); - hzip_mgr.Load(tmp_bfr, page.Url().Xto_full_bry(), hpg.Page_body()); - hpg.Page_body_(tmp_bfr.Mkr_rls().Xto_bry_and_clear()); - Load_page(wiki, page, hpg); - } - private void Load_page(Xowe_wiki wiki, Xoae_page page, Xog_page hpg) { - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_m001(); - html_mgr.Init_by_page(wiki.Domain_bry(), hpg).Write(tmp_bfr); - page.Hdump_data().Body_(tmp_bfr.Xto_bry_and_clear()); - Xopg_html_data html_data = page.Html_data(); - html_data.Display_ttl_(hpg.Display_ttl()); - html_data.Content_sub_(hpg.Content_sub()); - html_data.Xtn_skin_mgr().Add(new Xopg_xtn_skin_itm_mock(hpg.Sidebar_div())); - Hdump_page_body_srl.Load_html_modules(html_data.Module_mgr(), hpg); - tmp_bfr.Mkr_rls(); - } - private void Tbl_(Xodb_wiki_page_html_tbl v) { - text_tbl = v; - save_mgr.Tbl_(text_tbl); -// load_mgr.Tbl_(text_tbl); - } - private boolean Enabled_chk() { - if (enabled && hdump_db_file == null) hdump_db_file = Xodb_hdump_mgr_setup.Hdump_db_file_init(this); - return enabled; - } -} diff --git a/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr__save_tst.java b/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr__save_tst.java deleted file mode 100644 index 425d17491..000000000 --- a/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr__save_tst.java +++ /dev/null @@ -1,150 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.hdumps; import gplx.*; import gplx.xowa.*; -import org.junit.*; import gplx.dbs.*; import gplx.xowa.files.*; import gplx.xowa.parsers.lnkis.redlinks.*; -import gplx.xowa.hdumps.core.*; import gplx.xowa.hdumps.dbs.*; import gplx.xowa.hdumps.saves.*; import gplx.xowa.hdumps.loads.*; import gplx.xowa.hdumps.pages.*; -public class Xodb_hdump_mgr__save_tst { - @Before public void init() {fxt.Clear();} private Xodb_hdump_mgr__save_fxt fxt = new Xodb_hdump_mgr__save_fxt(); -// @Test public void Body() { -// fxt.Test_save("abc", fxt.Make_row_body(0, "abc")); -// } -// @Test public void Img() { -// fxt.Test_save("a[[File:A.png|test_caption]]b[[File:B.png|test_caption]]" -// , fxt.Make_row_body(2, "a\"test_caption\"b\"test_caption\"") -// , fxt.Make_row_img -// ( fxt.Make_xfer("A.png", 0, 0, 0, Bool_.Y, Xof_ext_.Id_png) -// , fxt.Make_xfer("B.png", 1, 0, 0, Bool_.Y, Xof_ext_.Id_png) -// ) -// ); -// } - @Test public void Display_title() { - fxt.Test_write("{{DISPLAYTITLE:A}}bcd", String_.Concat_lines_nl_skip_last - ( "0|0" - , "n|n|n|n|" - , "A" - , "bcd" - )); - } - @Test public void Content_sub() { - fxt.Test_write("{{#isin:A}}bcd", String_.Concat_lines_nl_skip_last - ( "0|0" - , "n|n|n|n|" - , "A" - , "bcd" - )); - } - @Test public void Sidebar_div() { - fxt.Test_write("{{#related:A}}bcd", String_.Concat_lines_nl_skip_last - ( "0|0" - , "n|n|n|n|" - , "
" - , "

" - , "
" - , "
    " - , "
  • A
  • " - , "
" - , "
" - , "
" - , "bcd" - )); - } -// @Test public void Redlink() { -// fxt.Init_redlinks(1); -// fxt.Test_save("[[A]] [[B]]" -// , fxt.Make_row_body(0, "A B") -// , fxt.Make_row_redlink(1) -// ); -// } -} -class Xodb_hdump_mgr__save_fxt extends Xodb_hdump_mgr__base_fxt { - private int page_id = 0; - private Bry_bfr tmp_bfr = Bry_bfr.reset_(255); - private ListAdp expd_rows = ListAdp_.new_(); - @Override public void Clear_end() { - hdump_mgr.Tbl_mem_(); - hdump_mgr.Text_tbl().Conn_(Xodb_wiki_page_html_tbl_mem.Null_provider); - init_redlinks = null; - } - public void Init_redlinks(int... uids) { - this.init_redlinks = uids; - page.Redlink_lnki_list().Clear(); - } private int[] init_redlinks; - public Xodb_wiki_page_html_row Make_row_body(int imgs_count, String body) { - page.Hdump_data().Body_(Bry_.new_utf8_(body)); - page.Hdump_data().Data_count_imgs_(imgs_count); - Hdump_page_body_srl.Save(tmp_bfr, page); - return new Xodb_wiki_page_html_row(page_id, Xodb_wiki_page_html_row.Tid_page, tmp_bfr.Xto_bry_and_clear()); - } - public Xodb_wiki_page_html_row Make_row_img(Hdump_data_img__base... itms) { - ListAdp tmp_list = ListAdp_.new_(); - tmp_list.AddMany((Object[])itms); - byte[] imgs_bry = Hdump_save_mgr.Write_imgs(tmp_bfr, tmp_list); - return new Xodb_wiki_page_html_row(page_id, Xodb_wiki_page_html_row.Tid_data, imgs_bry); - } - public Xodb_wiki_page_html_row Make_row_redlink(int... uids) { - Xopg_redlink_idx_list redlink_mgr = new Xopg_redlink_idx_list(); - for (int uid : uids) - redlink_mgr.Add(uid); - byte[] redlinks_bry = Hdump_save_mgr.Write_redlinks(tmp_bfr, redlink_mgr); - return new Xodb_wiki_page_html_row(page_id, Hdump_data_tid.Tid_redlink, redlinks_bry); - } - @Override public void Exec_write(String raw) { - super.Exec_write(raw); - if (init_redlinks != null) { - Xopg_redlink_idx_list redlink_mgr = page.Hdump_data().Redlink_mgr(); - int len = init_redlinks.length; - for (int i = 0; i < len; ++i) { - redlink_mgr.Add(init_redlinks[i]); - } - } - } - public void Test_write(String raw, String expd) { - this.Exec_write(raw); - Hdump_page_body_srl.Save(tmp_bfr, page); - Tfds.Eq(expd, tmp_bfr.Xto_str_and_clear()); - } - public void Test_save(String raw, Xodb_wiki_page_html_row... expd) { - this.Exec_write(raw); - hdump_mgr.Save_mgr().Update(page); - hdump_mgr.Text_tbl().Select_by_page(expd_rows, 0); - Xodb_wiki_page_html_row[] actl = (Xodb_wiki_page_html_row[])expd_rows.Xto_ary_and_clear(Xodb_wiki_page_html_row.class); - Tfds.Eq_ary_str(Xto_str_ary(tmp_bfr, expd), Xto_str_ary(tmp_bfr, actl)); - } - private static String[] Xto_str_ary(Bry_bfr bfr, Xodb_wiki_page_html_row[] ary) { - int len = ary.length; - String[] rv = new String[len]; - for (int i = 0; i < len; ++i) { - Xodb_wiki_page_html_row itm = ary[i]; - bfr .Add_int_variable(itm.Page_id()) - .Add_byte_pipe().Add_int_variable(itm.Tid()) - .Add_byte_pipe().Add(itm.Data()) - ; - rv[i] = bfr.Xto_str_and_clear(); - } - return rv; - } -} -class Hdump_text_row_img { - public Hdump_text_row_img(int uid, int img_w, int img_h, byte[] lnki_ttl, byte[] img_src_rel) {this.uid = uid; this.img_w = img_w; this.img_h = img_h; this.lnki_ttl = lnki_ttl; this.img_src_rel = img_src_rel;} - public int Uid() {return uid;} private int uid; - public int Img_w() {return img_w;} private int img_w; - public int Img_h() {return img_h;} private int img_h; - public byte[] Lnki_ttl() {return lnki_ttl;} private byte[] lnki_ttl; - public byte[] Img_src_rel() {return img_src_rel;} private byte[] img_src_rel; - // return new Xodb_wiki_page_html_row(page_id, Xodb_wiki_page_html_row.Tid_img, 0, Hdump_save_mgr.Write_img(bfr, uid, img_w, img_h, Bry_.new_utf8_(lnki_ttl), Bry_.new_utf8_(img_src_rel))) -} diff --git a/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr_setup.java b/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr_setup.java deleted file mode 100644 index 1f018ccd4..000000000 --- a/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr_setup.java +++ /dev/null @@ -1,58 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.hdumps; import gplx.*; import gplx.xowa.*; -import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.xowa.hdumps.dbs.*; -public class Xodb_hdump_mgr_setup { - public static Xodb_file Hdump_db_file_init(Xodb_hdump_mgr hdump_mgr) { - Xowe_wiki wiki = hdump_mgr.Wiki(); - Xodb_mgr_sql db_mgr_as_sql = wiki.Db_mgr_as_sql(); - Xodb_file rv = db_mgr_as_sql.Fsys_mgr().Get_tid_root(Xodb_file_tid.Tid_html); - if (rv == null) rv = Setup(db_mgr_as_sql); - hdump_mgr.Text_tbl().Conn_(rv.Conn()); - return rv; - } - private static Xodb_file Setup(Xodb_mgr_sql db_mgr) { - Xodb_fsys_mgr fsys_mgr = db_mgr.Fsys_mgr(); - Assert_col__page_html_db_id(fsys_mgr.Conn_core(), db_mgr.Tbl_xowa_cfg()); - Xodb_file html_db_file = Create_db(db_mgr, fsys_mgr); - Create_idx(html_db_file); - return html_db_file; - } - public static void Assert_col__page_html_db_id(Db_conn core_provider, Xodb_xowa_cfg_tbl cfg_tbl) { - String val = cfg_tbl.Select_val_or(Xodb_fsys_mgr.Cfg_grp_db_meta, Cfg_itm_html_db_exists, "n"); - if (String_.Eq(val, "y")) return; - try { - core_provider.Exec_sql(Sql_ddl__page_html_db_id); - cfg_tbl.Insert_str(Xodb_fsys_mgr.Cfg_grp_db_meta, Cfg_itm_html_db_exists, "y"); - cfg_tbl.Conn().Txn_mgr().Txn_end_all_bgn_if_none(); - } catch (Exception e) {Gfo_usr_dlg_._.Warn_many("", "", "failed to update core: db=~{0} err=~{1}", core_provider.Url().Xto_raw(), Err_.Message_gplx(e));} - } - private static Xodb_file Create_db(Xodb_mgr_sql db_mgr, Xodb_fsys_mgr fsys_mgr) { - Xodb_file html_db_file = fsys_mgr.Make(Xodb_file_tid.Tid_html); - html_db_file.Conn().Exec_sql(Xodb_wiki_page_html_tbl.Tbl_sql); - db_mgr.Tbl_xowa_db().Commit_all(db_mgr.Fsys_mgr().Files_ary()); - return html_db_file; - } - private static void Create_idx(Xodb_file html_db_file) { - Sqlite_engine_.Idx_create(html_db_file.Conn(), Xodb_wiki_page_html_tbl.Idx_core); - } - private static final String Cfg_itm_html_db_exists = "html_db.exists"; - public static final String - Sql_ddl__page_html_db_id = "ALTER TABLE page ADD COLUMN page_html_db_id integer NOT NULL DEFAULT '-1'" - ; -} diff --git a/400_xowa/src/gplx/xowa/hdumps/Xodbv_dbs_tbl.java b/400_xowa/src/gplx/xowa/hdumps/Xodbv_dbs_tbl.java deleted file mode 100644 index 0564d6c1d..000000000 --- a/400_xowa/src/gplx/xowa/hdumps/Xodbv_dbs_tbl.java +++ /dev/null @@ -1,51 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.hdumps; import gplx.*; import gplx.xowa.*; -import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.dbs.*; -public class Xodbv_dbs_tbl { - public static final String Tbl_name = "xowa_db", Fld_db_id = "db_id", Fld_db_type = "db_type", Fld_db_url = "db_url"; - private static final String[] Flds__all = new String[] {Fld_db_id, Fld_db_type, Fld_db_url}; - public Xodb_file[] Select_all(Db_conn conn, Io_url wiki_root_dir) { - Db_rdr rdr = Db_rdr_.Null; - ListAdp list = ListAdp_.new_(); - try { - Db_qry__select_in_tbl qry = Db_qry__select_in_tbl.new_(Tbl_name, Db_qry__select_in_tbl.Where_flds__all, Flds__all).Order_by_sql_(Fld_db_id); - Db_stmt stmt = Db_stmt_.new_select_as_rdr(conn, qry); - rdr = stmt.Exec_select_as_rdr(); - while (rdr.Move_next()) { - Xodb_file db = Xodb_file.load_(rdr.Read_int(0), rdr.Read_byte(1), rdr.Read_str(2)); - db.Url_(wiki_root_dir.GenSubFil(db.Url_rel())); - list.Add(db); - } - } finally {rdr.Rls();} - Xodb_file[] rv = (Xodb_file[])list.Xto_ary(Xodb_file.class); - Chk_sequential(rv); - return rv; - } - private void Chk_sequential(Xodb_file[] ary) { - int len = ary.length; - int expd_id = 0; - for (int i = 0; i < len; i++) { - Xodb_file itm = ary[i]; - int actl_id = itm.Id(); - if (expd_id != actl_id) throw Err_.new_fmt_("database ids are not sequential; expd={0} actl={1}", expd_id, actl_id); - ++expd_id; - } - } - //Db_stmt_bldr stmt_bldr = new Db_stmt_bldr(Tbl_name, String_.Ary(Fld_db_id), Fld_db_type, Fld_db_url); -} diff --git a/400_xowa/src/gplx/xowa/hdumps/Xowd_hdump_mgr.java b/400_xowa/src/gplx/xowa/hdumps/Xowd_hdump_mgr.java deleted file mode 100644 index f32764593..000000000 --- a/400_xowa/src/gplx/xowa/hdumps/Xowd_hdump_mgr.java +++ /dev/null @@ -1,49 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.hdumps; import gplx.*; import gplx.xowa.*; -import gplx.intl.*; import gplx.dbs.*; import gplx.xowa.html.hzips.*; -import gplx.xowa.hdumps.core.*; import gplx.xowa.hdumps.loads.*; import gplx.xowa.hdumps.htmls.*; import gplx.xowa.apps.fsys.*; -import gplx.xowa2.apps.*; import gplx.xowa2.wikis.*; import gplx.xowa2.wikis.data.*; import gplx.xowa2.gui.*; -public class Xowd_hdump_mgr { - private final Xoav_app app; private final Xowv_wiki wiki; private final Xowd_data_mgr wiki_db_mgr; - private Xodb_page dbpg = new Xodb_page(); - private Hdump_load_mgr load_mgr = new Hdump_load_mgr(); - private Hdump_html_body html_body = new Hdump_html_body(); - public Xowd_hdump_mgr(Xoav_app app, Xowv_wiki wiki) { - this.app = app; this.wiki = wiki; this.wiki_db_mgr = wiki.Db_mgr(); - html_body.Init_by_app(app.Usr_dlg(), app.Fsys_mgr(), app.Utl_encoder_fsys()); - } - public void Get_by_ttl(Xog_page rv, Gfo_url url, Xoa_ttl ttl) { - wiki_db_mgr.Tbl__page().Select_by_ttl(dbpg, ttl.Ns(), ttl.Page_db()); - if (dbpg.Redirect_id() != -1) Select_by_id(rv, dbpg); - if (dbpg.Html_db_id() == -1) return; // should return "not found" message - load_mgr.Load2(rv, Db_conn_pool.I.Get_or_new(wiki_db_mgr.Url_by_idx(dbpg.Html_db_id())), dbpg.Id(), ttl); - Bry_bfr bfr = app.Utl_bfr_mkr().Get_m001(); - html_body.Init_by_page(wiki.Domain_bry(), rv).Write(bfr); - wiki.Hzip_mgr().Load(bfr, ttl.Page_db(), bfr.Xto_bry_and_clear()); - rv.Page_body_(bfr.Mkr_rls().Xto_bry_and_clear()); - } - private void Select_by_id(Xog_page hpg, Xodb_page dbpg) { - int redirect_count = 0; - while (redirect_count < 5) { - int redirect_id = dbpg.Redirect_id(); - wiki_db_mgr.Tbl__page().Select_by_id(dbpg, redirect_id); - if (redirect_id == -1) break; - } - } -} diff --git a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_img__base.java b/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_img__base.java deleted file mode 100644 index 0412331e3..000000000 --- a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_img__base.java +++ /dev/null @@ -1,77 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.hdumps.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -import gplx.xowa.hdumps.dbs.*; import gplx.xowa.files.repos.*; -public abstract class Hdump_data_img__base implements Hdump_data_itm { - public Hdump_data_img__base Init_by_base(byte[] lnki_ttl, int html_uid, int html_w, int html_h, int file_repo_id, int file_ext_id, boolean file_is_orig, int file_w, double file_time, int file_page) { - this.lnki_ttl = lnki_ttl; - this.html_uid = html_uid; - this.html_w = html_w; - this.html_h = html_h; - this.file_repo_id = file_repo_id; - this.file_ext_id = file_ext_id; - this.file_is_orig = file_is_orig; - this.file_w = file_w; - this.file_time = file_time; - this.file_page = file_page; - return this; - } - public int Data_tid() {return Hdump_data_tid.Tid_img;} - public abstract int Img_tid(); - public byte[] Lnki_ttl() {return lnki_ttl;} private byte[] lnki_ttl; - public int Html_uid() {return html_uid;} private int html_uid; - public int Html_w() {return html_w;} private int html_w; - public int Html_h() {return html_h;} private int html_h; - public int File_repo_id() {return file_repo_id;} private int file_repo_id; - public int File_ext_id() {return file_ext_id;} private int file_ext_id; - public boolean File_is_orig() {return file_is_orig;} private boolean file_is_orig; - public int File_w() {return file_w;} private int file_w; - public double File_time() {return file_time;} private double file_time; - public int File_page() {return file_page;} private int file_page; - public Io_url File_url() {return file_url;} public void File_url_(Io_url v) {file_url = v;} private Io_url file_url; - public String Data_print() { - return String_.Concat_with_str("|", Int_.Xto_str(this.Img_tid()), String_.new_utf8_(lnki_ttl), Int_.Xto_str(html_uid), Int_.Xto_str(html_w), Int_.Xto_str(html_h) - , Int_.Xto_str(file_repo_id), Int_.Xto_str(file_ext_id), Yn.Xto_str(file_is_orig), Int_.Xto_str(file_w), Double_.Xto_str(file_time), Int_.Xto_str(file_page) - ); - } - public void Data_write(Bry_bfr bfr) { - Data_write_static(bfr, this.Img_tid(), lnki_ttl, html_uid, html_w, html_h, file_repo_id, file_ext_id, file_is_orig, file_w, file_time, file_page); - Data_write_hook(bfr); - bfr.Add_byte_nl(); - } - public static void Data_write_static(Bry_bfr bfr, int img_tid, byte[] lnki_ttl, int html_uid, int html_w, int html_h, int file_repo_id, int file_ext_id, boolean file_is_orig, int file_w, double file_time, int file_page) { - bfr .Add_int_variable(Hdump_data_tid.Tid_img).Add_byte_pipe() - .Add_int_variable(img_tid).Add_byte_pipe() - .Add(lnki_ttl).Add_byte_pipe() - .Add_int_variable(html_uid).Add_byte_pipe() - .Add_int_variable(html_w).Add_byte_pipe() - .Add_int_variable(html_h).Add_byte_pipe() - .Add_int_variable(file_repo_id).Add_byte_pipe() - .Add_int_variable(file_ext_id).Add_byte_pipe() - .Add_yn(file_is_orig).Add_byte_pipe() - .Add_int_variable(file_w).Add_byte_pipe() - .Add_double(file_time).Add_byte_pipe() - .Add_int_variable(file_page).Add_byte_pipe() - ; - } - @gplx.Virtual public void Data_write_hook(Bry_bfr bfr) {} - public static final Hdump_data_img__base[] Ary_empty = new Hdump_data_img__base[0]; - public static final int Tid_basic = 0, Tid_gallery = 1; - @Override public String toString() {return this.Data_print();} // TEST - public static final int File_repo_id_commons = Xof_repo_itm.Repo_remote, File_repo_id_local = Xof_repo_itm.Repo_local, File_repo_id_null = Xof_repo_itm.Repo_null; -} diff --git a/400_xowa/src/gplx/xowa/hdumps/dbs/Xodb_wiki_page_html_tbl.java b/400_xowa/src/gplx/xowa/hdumps/dbs/Xodb_wiki_page_html_tbl.java deleted file mode 100644 index 081a44540..000000000 --- a/400_xowa/src/gplx/xowa/hdumps/dbs/Xodb_wiki_page_html_tbl.java +++ /dev/null @@ -1,76 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.hdumps.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -import gplx.ios.*; import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.dbs.*; -public class Xodb_wiki_page_html_tbl { - private Io_stream_zip_mgr zip_mgr = new Io_stream_zip_mgr(); - private Db_stmt stmt_select, stmt_insert, stmt_delete; - public void Init_by_wiki(Xowe_wiki wiki) { - this.zip_mgr = wiki.Appe().Zip_mgr(); - } - public byte Zip_tid() {return zip_tid;} public void Zip_tid_(byte v) {zip_tid = v;} private byte zip_tid = Io_stream_.Tid_gzip; - public Db_conn Conn() {return conn;} public Xodb_wiki_page_html_tbl Conn_(Db_conn v) {this.Rls_all(); conn = v; return this;} private Db_conn conn; - @gplx.Virtual public int Insert(int page_id, int tid, byte[] data) { - if (stmt_insert == null) stmt_insert = Db_stmt_.new_insert_(conn, Tbl_name, Flds__all); - try { - data = zip_mgr.Zip(zip_tid, data); - stmt_insert.Clear().Val_int(page_id).Val_int(tid).Val_bry(data).Exec_insert(); - return data.length; - } - catch (Exception exc) {stmt_insert = null; throw Err_.err_(exc, "stmt failed");} // must reset stmt, else next call will fail - } - @gplx.Virtual public void Delete(int page_id) { - if (stmt_delete == null) stmt_delete = Db_stmt_.new_delete_(conn, Tbl_name, Fld_page_id); - try {stmt_delete.Clear().Val_int(page_id).Exec_delete();} - catch (Exception exc) {stmt_delete = null; throw Err_.err_(exc, "stmt failed");} // must reset stmt, else next call will fail - } - @gplx.Virtual public void Select_by_page(ListAdp rv, int page_id) { - if (stmt_select == null) stmt_select = Db_stmt_.new_select_as_rdr(conn, Db_qry__select_in_tbl.new_(Tbl_name, String_.Ary(Fld_page_id), Flds__all)); - try { - Db_rdr rdr = stmt_select.Clear().Val_int(page_id).Exec_select_as_rdr(); - while (rdr.Move_next()) { - Xodb_wiki_page_html_row row = new Xodb_wiki_page_html_row - ( rdr.Read_int(0) - , rdr.Read_int(1) - , zip_mgr.Unzip(zip_tid, rdr.Read_bry(2)) - ); - rv.Add(row); - } - rdr.Rls(); - } - catch (Exception exc) {stmt_select = null; throw Err_.err_(exc, "stmt failed");} // must reset stmt, else next call will fail - } - public void Rls_all() { - if (stmt_select != null) {stmt_select.Rls(); stmt_select = null;} - if (stmt_insert != null) {stmt_insert.Rls(); stmt_insert = null;} - if (stmt_delete != null) {stmt_delete.Rls(); stmt_delete = null;} - conn = null; - } - public static final String Tbl_name = "wiki_page_html", Fld_page_id = "page_id", Fld_html_tid = "html_tid", Fld_html_data = "html_data"; - private static final String[] Flds__all = new String[] {Fld_page_id, Fld_html_tid, Fld_html_data}; - public static final String Tbl_sql = String_.Concat_lines_nl - ( "CREATE TABLE IF NOT EXISTS wiki_page_html" - , "( page_id integer NOT NULL" - , ", html_tid integer NOT NULL" - , ", html_data blob NOT NULL" - , ");" - ); - public static final Db_idx_itm - Idx_core = Db_idx_itm.sql_("CREATE UNIQUE INDEX IF NOT EXISTS wiki_page_html__core ON wiki_page_html (page_id, html_tid);") - ; -} diff --git a/400_xowa/src/gplx/xowa/hdumps/dbs/Xodb_wiki_page_html_tbl_mem.java b/400_xowa/src/gplx/xowa/hdumps/dbs/Xodb_wiki_page_html_tbl_mem.java deleted file mode 100644 index c7fc91fa3..000000000 --- a/400_xowa/src/gplx/xowa/hdumps/dbs/Xodb_wiki_page_html_tbl_mem.java +++ /dev/null @@ -1,45 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.hdumps.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -import gplx.dbs.*; -public class Xodb_wiki_page_html_tbl_mem extends Xodb_wiki_page_html_tbl { private HashAdp pages = HashAdp_.new_(); - @Override public int Insert(int page_id, int tid, byte[] data) { - Xodb_wiki_page_html_row row = new Xodb_wiki_page_html_row(page_id, tid, data); - ListAdp rows = Get_or_new(pages, page_id); - rows.Add(row); - return data.length; - } - @Override public void Select_by_page(ListAdp rv, int page_id) { - ListAdp rows = Get_or_new(pages, page_id); - int len = rows.Count(); - for (int i = 0; i < len; ++i) { - Xodb_wiki_page_html_row row = (Xodb_wiki_page_html_row)rows.FetchAt(i); - rv.Add(row); - } - } - @Override public void Delete(int page_id) {pages.Del(page_id);} - private static ListAdp Get_or_new(HashAdp pages, int page_id) { - ListAdp rv = (ListAdp)pages.Fetch(page_id); - if (rv == null) { - rv = ListAdp_.new_(); - pages.Add(page_id, rv); - } - return rv; - } - public static final Db_conn Null_provider = null; -} diff --git a/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_load_mgr.java b/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_load_mgr.java deleted file mode 100644 index a3ac7094a..000000000 --- a/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_load_mgr.java +++ /dev/null @@ -1,94 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.hdumps.loads; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -import gplx.core.brys.*; import gplx.core.btries.*; import gplx.dbs.*; import gplx.ios.*; -import gplx.xowa.dbs.*; import gplx.xowa.pages.*; import gplx.xowa.hdumps.core.*; import gplx.xowa.hdumps.dbs.*; import gplx.xowa.hdumps.pages.*; import gplx.xowa.pages.skins.*; import gplx.xowa.hdumps.srls.*; -import gplx.xowa2.gui.*; -public class Hdump_load_mgr { - private Xodb_wiki_page_html_tbl text_tbl = new Xodb_wiki_page_html_tbl(); private Bry_rdr rdr = new Bry_rdr(); - private ListAdp tmp_rows = ListAdp_.new_(), img_itms = ListAdp_.new_(); - public Hdump_load_mgr() {} - public void Zip_tid_(byte v) {text_tbl.Zip_tid_(v);} - public void Load2(Xog_page hpg, Db_conn conn, int page_id, Xoa_ttl page_ttl) { - text_tbl.Conn_(conn).Select_by_page(tmp_rows, page_id); - Load_rows(hpg, page_id, Xoa_url.blank_(), page_ttl, tmp_rows); - } - public void Load(Xog_page hpg, Xodb_fsys_mgr db_fsys_mgr, int html_db_id, int page_id, Xoa_ttl page_ttl) { - Db_conn conn = db_fsys_mgr.Get_by_idx(html_db_id).Conn(); - text_tbl.Conn_(conn).Select_by_page(tmp_rows, page_id); - Load_rows(hpg, page_id, hpg.Page_url(), page_ttl, tmp_rows); - } - public void Load_rows(Xog_page hpg, int page_id, Xoa_url page_url, Xoa_ttl page_ttl, ListAdp rows) { - hpg.Init(page_id, page_url, page_ttl); - img_itms.Clear(); - int len = rows.Count(); - for (int i = 0; i < len; ++i) { - Xodb_wiki_page_html_row row = (Xodb_wiki_page_html_row)rows.FetchAt(i); - switch (row.Tid()) { - case Xodb_wiki_page_html_row.Tid_page: srl_mgr.Load(hpg, row.Data()); break; - case Xodb_wiki_page_html_row.Tid_data: Load_data(hpg, row); break; - } - } - rows.Clear(); - } private Hpg_srl_mgr srl_mgr = Hpg_srl_mgr._i_; - public void Load_data(Xog_page hpg, Xodb_wiki_page_html_row row) { - rdr.Src_(row.Data()); - while (!rdr.Pos_is_eos()) { - int tid = rdr.Read_int_to_pipe(); - switch (tid) { - case Hdump_data_tid.Tid_img : Load_data_img(); break; // 1|0|A.png|0|220|110|... - case Hdump_data_tid.Tid_gallery : Load_data_gallery(hpg); break; // 3|0|800 - case Hdump_data_tid.Tid_redlink : Load_data_redlink(hpg); break; // 2|2|0|1 - } - } - if (img_itms.Count() > 0) hpg.Img_itms_((Hdump_data_img__base[])img_itms.Xto_ary_and_clear(Hdump_data_img__base.class)); - } - private void Load_data_img() { - int tid = rdr.Read_int_to_pipe(); - byte[] lnki_ttl = rdr.Read_bry_to_pipe(); - int html_uid = rdr.Read_int_to_pipe(); - int html_w = rdr.Read_int_to_pipe(); - int html_h = rdr.Read_int_to_pipe(); - int file_repo_id = rdr.Read_int_to_pipe(); - int file_ext_id = rdr.Read_int_to_pipe(); - boolean file_is_orig = rdr.Read_yn_to_pipe(); - int file_w = rdr.Read_int_to_pipe(); - double file_time = rdr.Read_double_to_pipe(); - int file_page = rdr.Read_int_to_pipe(); - Hdump_data_img__base img_itm = null; - switch (tid) { - case Hdump_data_img__base.Tid_basic : img_itm = new Hdump_data_img__basic(); break; - case Hdump_data_img__base.Tid_gallery : img_itm = new Hdump_data_img__gallery().Init_by_gallery(rdr.Read_int_to_pipe(), rdr.Read_int_to_pipe(), rdr.Read_int_to_pipe()); break; - } - img_itm.Init_by_base(lnki_ttl, html_uid, html_w, html_h, file_repo_id, file_ext_id, file_is_orig, file_w, file_time, file_page); - rdr.Pos_add_one(); - img_itms.Add(img_itm); - } - public void Load_data_redlink(Xog_page hpg) { - int len = rdr.Read_int_to_pipe(); - int[] redlink_uids = new int[len]; - for (int i = 0; i < len; ++i) - redlink_uids[i] = rdr.Read_int_to_pipe(); - hpg.Redlink_uids_(redlink_uids); - } - public void Load_data_gallery(Xog_page hpg) { - int uid = rdr.Read_int_to_pipe(); - int box_max = rdr.Read_int_to_pipe(); - hpg.Gly_itms().Add(uid, new Hdump_data_gallery(uid, box_max)); - } -} diff --git a/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_load_mgr_tst.java b/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_load_mgr_tst.java deleted file mode 100644 index e5ca39877..000000000 --- a/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_load_mgr_tst.java +++ /dev/null @@ -1,99 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.hdumps.loads; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -import org.junit.*; import gplx.xowa.files.*; import gplx.xowa.hdumps.dbs.*; import gplx.xowa.hdumps.core.*; import gplx.xowa.hdumps.saves.*; import gplx.xowa.hdumps.pages.*; import gplx.xowa.dbs.*; -import gplx.xowa2.gui.*; -public class Hdump_load_mgr_tst { - @Before public void init() {fxt.Clear();} private Hdump_load_mgr_fxt fxt = new Hdump_load_mgr_fxt(); -// @Test public void Body() { -// fxt.Init_row_body("", null, null, null); -// fxt.Expd_body(""); -// fxt.Test_load(0); -// } -// @Test public void Body_all() { -// fxt.Init_row_body("", "test_display_ttl", "test_content_sub", "test_sidebar_div"); -// fxt.Expd_body(""); -// fxt.Expd_display_ttl("test_display_ttl"); -// fxt.Expd_content_sub("test_content_sub"); -// fxt.Expd_sidebar_div("test_sidebar_div"); -// fxt.Test_load(0); -// } - @Test public void Img() { - fxt.Init_row_img - ( fxt.Make_img("A.png", 0, 220, 110) - , fxt.Make_img("B.png", 1, 200, 100) - ); - fxt.Expd_img(fxt.Make_img("A.png", 0, 220, 110)); - fxt.Expd_img(fxt.Make_img("B.png", 1, 200, 100)); - fxt.Test_load(0); - } -} -class Hdump_load_mgr_fxt { - private Hdump_load_mgr load_mgr; - private Xog_page hpg = new Xog_page(); - private ListAdp init_rows = ListAdp_.new_(); - private String expd_body, expd_display_ttl, expd_content_sub, expd_sidebar_div; - private ListAdp expd_imgs = ListAdp_.new_(); - private int page_id = 0; private Xoa_url page_url; - public void Clear() { - load_mgr = new Hdump_load_mgr(); - load_mgr.Zip_tid_(gplx.ios.Io_stream_.Tid_file); - init_rows.Clear(); - expd_body = expd_display_ttl = expd_content_sub = expd_sidebar_div = null; - expd_imgs.Clear(); - page_url = Xoa_url.new_(Bry_.new_ascii_("enwiki"), Bry_.new_ascii_("Page_1")); - } - public Hdump_data_img__base Make_img(String lnki_ttl, int html_uid, int html_w, int html_h) { - return new Hdump_data_img__basic().Init_by_base(Bry_.new_utf8_(lnki_ttl), html_uid, html_w, html_h, Hdump_data_img__base.File_repo_id_commons, Xof_ext_.Id_png, Bool_.N, html_w, Xof_doc_thumb.Null, Xof_doc_page.Null); - } - public void Init_row_img(Hdump_data_img__base... itms) { - ListAdp tmp_list = ListAdp_.new_(); - Bry_bfr bfr = Bry_bfr.new_(255); - tmp_list.AddMany((Object[])itms); - byte[] imgs_bry = Hdump_save_mgr.Write_imgs(bfr, tmp_list); - init_rows.Add(new Xodb_wiki_page_html_row(0, Xodb_wiki_page_html_row.Tid_data, imgs_bry)); - } - public Hdump_load_mgr_fxt Init_row_body(String body, String display_ttl, String content_sub, String sidebar_div) { - Bry_bfr tmp_bfr = Bry_bfr.reset_(255); - Xoae_app app = Xoa_app_fxt.app_(); - Xowe_wiki wiki = Xoa_app_fxt.wiki_tst_(app); - Xoae_page page = Xoae_page.new_(wiki, Xoa_ttl.parse_(wiki, Bry_.new_ascii_("Page_1"))); - if (display_ttl != null) page.Html_data().Display_ttl_(Bry_.new_utf8_(display_ttl)); - if (content_sub != null) page.Html_data().Content_sub_(Bry_.new_utf8_(content_sub)); - if (sidebar_div != null) page.Html_data().Xtn_skin_mgr().Add(new Xopg_xtn_skin_itm_mock(Bry_.new_utf8_(sidebar_div))); - page.Hdump_data().Body_(Bry_.new_utf8_(body)); - Hdump_page_body_srl.Save(tmp_bfr, page); - init_rows.Add(new Xodb_wiki_page_html_row(page_id, Xodb_wiki_page_html_row.Tid_page, tmp_bfr.Xto_bry_and_clear())); - return this; - } - public Hdump_load_mgr_fxt Init_row_img (String data) {init_rows.Add(new Xodb_wiki_page_html_row(page_id, Xodb_wiki_page_html_row.Tid_data, Bry_.new_utf8_(data))); return this;} - public Hdump_load_mgr_fxt Expd_body(String v) {this.expd_body = v; return this;} - public Hdump_load_mgr_fxt Expd_display_ttl(String v) {this.expd_display_ttl = v; return this;} - public Hdump_load_mgr_fxt Expd_content_sub(String v) {this.expd_content_sub = v; return this;} - public Hdump_load_mgr_fxt Expd_sidebar_div(String v) {this.expd_sidebar_div = v; return this;} - public Hdump_load_mgr_fxt Expd_img(Hdump_data_img__base img) {expd_imgs.Add(img); return this;} - public Hdump_load_mgr_fxt Test_load(int page_id) { - load_mgr.Load_rows(hpg, page_id, page_url, Xoa_ttl.Null, init_rows); - if (expd_body != null) Tfds.Eq(expd_body, String_.new_utf8_(hpg.Page_body())); - if (expd_display_ttl != null) Tfds.Eq(expd_display_ttl, String_.new_utf8_(hpg.Display_ttl())); - if (expd_content_sub != null) Tfds.Eq(expd_content_sub, String_.new_utf8_(hpg.Content_sub())); - if (expd_sidebar_div != null) Tfds.Eq(expd_sidebar_div, String_.new_utf8_(hpg.Sidebar_div())); - if (expd_imgs.Count() != 0) Tfds.Eq_ary_str((Hdump_data_img__base[])expd_imgs.Xto_ary_and_clear(Hdump_data_img__base.class), hpg.Img_itms()); - return this; - } -} diff --git a/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_page_body_srl.java b/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_page_body_srl.java deleted file mode 100644 index dbbce9c64..000000000 --- a/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_page_body_srl.java +++ /dev/null @@ -1,117 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.hdumps.loads; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -import gplx.core.brys.*; import gplx.xowa.pages.*; import gplx.xowa.hdumps.core.*; import gplx.xowa.hdumps.pages.*; import gplx.xowa.pages.skins.*; -import gplx.xowa.html.modules.*; -import gplx.xowa2.gui.*; -public class Hdump_page_body_srl { - private static final Bry_bfr tmp_bfr = Bry_bfr.reset_(255); - public static void Save(Bry_bfr bfr, Xoae_page page) { - bfr.Add_int_fixed(0, 1).Add_byte_pipe(); // version - Xopg_hdump_data hdump_data = page.Hdump_data(); - bfr.Add_int_variable(hdump_data.Data_count_imgs()); // imgs_count - Xopg_html_data html_data = page.Html_data(); - Save_html_modules(bfr, html_data); - Save_data(bfr, Tid_display_ttl , html_data.Display_ttl()); - Save_data(bfr, Tid_content_sub , html_data.Content_sub()); - Save_sidebars(bfr, page , html_data); - Save_data(bfr, Tid_body , hdump_data.Body()); - } - private static void Save_html_modules(Bry_bfr bfr, Xopg_html_data html_data) { - Xoh_module_mgr module_mgr = html_data.Module_mgr(); - Save_html_modules__itm(tmp_bfr, module_mgr.Itm_mathjax().Enabled()); - Save_html_modules__itm(tmp_bfr, module_mgr.Itm_popups().Bind_hover_area()); - Save_html_modules__itm(tmp_bfr, module_mgr.Itm_gallery().Enabled()); - Save_html_modules__itm(tmp_bfr, module_mgr.Itm_hiero().Enabled()); - Save_data(bfr, Tid_html_module, tmp_bfr.Xto_bry_and_clear()); - } - public static void Load_html_modules(Xog_page hpg, byte[] src, int bgn, int end) { - Hdump_module_mgr module_mgr = hpg.Module_mgr(); - module_mgr.Math_exists_ (src[bgn + 0] == Byte_ascii.Ltr_y); - module_mgr.Imap_exists_ (src[bgn + 2] == Byte_ascii.Ltr_y); - module_mgr.Gallery_packed_exists_ (src[bgn + 4] == Byte_ascii.Ltr_y); - module_mgr.Hiero_exists_ (src[bgn + 6] == Byte_ascii.Ltr_y); - } - public static void Load_html_modules(Xoh_module_mgr page_module_mgr, Xog_page hpg) { - Hdump_module_mgr dump_module_mgr = hpg.Module_mgr(); - page_module_mgr.Itm_mathjax().Enabled_ (dump_module_mgr.Math_exists()); - page_module_mgr.Itm_popups().Bind_hover_area_ (dump_module_mgr.Imap_exists()); - page_module_mgr.Itm_gallery().Enabled_ (dump_module_mgr.Gallery_packed_exists()); - page_module_mgr.Itm_hiero().Enabled_ (dump_module_mgr.Hiero_exists()); - } - private static void Save_html_modules__itm(Bry_bfr tmp_bfr, boolean v) { - tmp_bfr.Add_yn(v); - tmp_bfr.Add_byte_pipe(); - } - private static void Save_sidebars(Bry_bfr bfr, Xoae_page page, Xopg_html_data html_data) { - Xopg_xtn_skin_mgr mgr = html_data.Xtn_skin_mgr(); - int len = mgr.Count(); - boolean sidebar_exists = false; - for (int i = 0; i < len; ++i) { - Xopg_xtn_skin_itm itm = mgr.Get_at(i); - if (itm.Tid() == Xopg_xtn_skin_itm_tid.Tid_sidebar) { - sidebar_exists = true; - itm.Write(tmp_bfr, page); - } - } - if (sidebar_exists) - Save_data(bfr, Tid_sidebar_div, tmp_bfr.Xto_bry_and_clear()); - } - private static void Save_data(Bry_bfr bfr, int tid, byte[] data) { - if (data != null) { - bfr.Add_byte_nl(); - bfr.Add(Sect_lhs); - bfr.Add_int_variable(tid); - bfr.Add(Sect_rhs); - bfr.Add(data); - } - } - public static void Load(Xog_page hpg, Bry_rdr rdr, byte[] src) { - rdr.Src_(src); - Load_body_meta(hpg, rdr); - while (!rdr.Pos_is_eos()) { - int idx_pos = rdr.Find_fwd__pos_at_rhs(Sect_lhs); - int idx = Byte_ascii.Xto_digit(src[idx_pos]); - int lhs_pos = idx_pos + 3; // 2=skip "#/>" - if (idx == Tid_body) { - hpg.Page_body_(Bry_.Mid(src, lhs_pos, src.length)); - return; - } - else { - int rhs_pos = rdr.Find_fwd__pos_at_lhs(Sect_lhs) - 1; // -1 to ignore \n - switch (idx) { - case Tid_html_module: Load_html_modules(hpg, src, lhs_pos, rhs_pos); break; - case Tid_display_ttl: hpg.Display_ttl_(Bry_.Mid(src, lhs_pos, rhs_pos)); break; - case Tid_content_sub: hpg.Content_sub_(Bry_.Mid(src, lhs_pos, rhs_pos)); break; - case Tid_sidebar_div: hpg.Sidebar_div_(Bry_.Mid(src, lhs_pos, rhs_pos)); break; - } - } - } - } private static final byte[] Sect_lhs = Bry_.new_ascii_(""); - private static void Load_body_meta(Xog_page hpg, Bry_rdr rdr) { - hpg.Version_id_(rdr.Read_int_to_pipe()); - hpg.Img_count_(rdr.Read_int_to_nl()); - } - private static final int // SERIALIZED - Tid_html_module = 1 - , Tid_display_ttl = 2 - , Tid_content_sub = 3 - , Tid_sidebar_div = 4 - , Tid_body = 5 - ; -} diff --git a/400_xowa/src/gplx/xowa/hdumps/pages/Xopg_hdump_data.java b/400_xowa/src/gplx/xowa/hdumps/pages/Xopg_hdump_data.java deleted file mode 100644 index 1c77d0acc..000000000 --- a/400_xowa/src/gplx/xowa/hdumps/pages/Xopg_hdump_data.java +++ /dev/null @@ -1,39 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.hdumps.pages; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -import gplx.xowa.hdumps.core.*; import gplx.xowa.files.*; -import gplx.xowa.parsers.lnkis.redlinks.*; -public class Xopg_hdump_data { - public Xopg_redlink_idx_list Redlink_mgr() {return redlink_mgr;} private Xopg_redlink_idx_list redlink_mgr = new Xopg_redlink_idx_list(); - public int Data_count_imgs() {return data_count_imgs;} public void Data_count_imgs_(int v) {data_count_imgs = v;} private int data_count_imgs; - public ListAdp Data() {return data;} private final ListAdp data = ListAdp_.new_(); - public void Data_add(Hdump_data_itm itm) {data.Add(itm);} - public void Data_add_img(Hdump_data_img__base img, Xof_xfer_itm xfer_itm, int tid) { - img.Init_by_base(xfer_itm.Lnki_ttl(), xfer_itm.Html_uid(), xfer_itm.Html_w(), xfer_itm.Html_h() - , xfer_itm.Trg_repo_idx(), xfer_itm.Lnki_ext().Id(), xfer_itm.Img_is_orig(), xfer_itm.File_w(), xfer_itm.Lnki_thumbtime(), xfer_itm.Lnki_page()); - data.Add(img); - ++data_count_imgs; - } - public byte[] Body() {return body;} public void Body_(byte[] v) {body = v;} private byte[] body; - public void Clear() { - data_count_imgs = 0; - data.Clear(); - body = null; - redlink_mgr.Clear(); - } -} diff --git a/400_xowa/src/gplx/xowa/hdumps/saves/Hdump_save_mgr.java b/400_xowa/src/gplx/xowa/hdumps/saves/Hdump_save_mgr.java deleted file mode 100644 index e7b6e9b2a..000000000 --- a/400_xowa/src/gplx/xowa/hdumps/saves/Hdump_save_mgr.java +++ /dev/null @@ -1,63 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.hdumps.saves; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -import gplx.dbs.*; import gplx.xowa.files.*; import gplx.xowa.hdumps.dbs.*; import gplx.xowa.hdumps.srls.*; import gplx.xowa.html.hzips.*; import gplx.xowa.parsers.lnkis.redlinks.*; -import gplx.xowa.hdumps.core.*; import gplx.xowa.hdumps.pages.*; import gplx.xowa.pages.*; import gplx.xowa.pages.skins.*; import gplx.xowa.hdumps.loads.*; -import gplx.xowa2.gui.*; -public class Hdump_save_mgr { - private Bry_bfr tmp_bfr = Bry_bfr.reset_(1 * Io_mgr.Len_mb); private Xow_hzip_stats hzip_stats = new Xow_hzip_stats(); - public Xodb_wiki_page_html_tbl Tbl() {return text_tbl;} public void Tbl_(Xodb_wiki_page_html_tbl v) {text_tbl = v;} private Xodb_wiki_page_html_tbl text_tbl; - public void Update(Xoae_page page) { - int page_id = page.Revision_data().Id(); - text_tbl.Delete(page_id); - this.Insert(page, hzip_stats); - } - public void Hdump_stats_enable_y_(Db_conn p) {hdump_stats_tbl = new Hdump_stats_tbl().Conn_(p).Create_tbl();} private Hdump_stats_tbl hdump_stats_tbl; - public void Insert(Xoae_page page, Xow_hzip_stats hzip_stats) { - int page_id = page.Revision_data().Id(); - Insert_body(page, hzip_stats, page_id); - byte[] redlinks_bry = Write_redlinks(tmp_bfr, page.Hdump_data().Redlink_mgr()); - if (redlinks_bry != null) text_tbl.Insert(page_id, Hdump_data_tid.Tid_redlink, redlinks_bry); - byte[] imgs_bry = Write_imgs(tmp_bfr, page.Hdump_data().Data()); - if (imgs_bry != null) text_tbl.Insert(page_id, Hdump_data_tid.Tid_img, imgs_bry); - } - public int Insert_body(Xoae_page page, Xow_hzip_stats hzip_stats, int page_id) { - hpg.Init(tmp_bfr, page); - srl_mgr.Save(hpg, tmp_bfr); - byte[] body_bry = tmp_bfr.Xto_bry_and_clear(); - int insert_len = text_tbl.Insert(page_id, Xodb_wiki_page_html_row.Tid_page, body_bry); - if (hdump_stats_tbl != null) hdump_stats_tbl.Insert(hpg, hzip_stats, page.Root().Root_src().length, body_bry.length, insert_len); - return insert_len; - } private Hpg_srl_mgr srl_mgr = Hpg_srl_mgr._i_; private Xog_page hpg = new Xog_page(); - public static byte[] Write_imgs(Bry_bfr bfr, ListAdp imgs) { - int len = imgs.Count(); if (len == 0) return null; // no images; exit early, else will write blank String - for (int i = 0; i < len; ++i) { - Hdump_data_itm itm = (Hdump_data_itm)imgs.FetchAt(i); - itm.Data_write(bfr); - } - return bfr.Xto_bry_and_clear(); - } - public static byte[] Write_redlinks(Bry_bfr bfr, Xopg_redlink_idx_list redlink_mgr) { - int len = redlink_mgr.Len(); if (len == 0) return null; - bfr.Add_int_variable(redlink_mgr.Max()); - for (int i = 0; i < len; ++i) { - bfr.Add_byte_pipe().Add_int_variable(redlink_mgr.Get_at(i)); - } - return bfr.Xto_bry_and_clear(); - } -} diff --git a/400_xowa/src/gplx/xowa/hdumps/saves/Hdump_stats_tbl.java b/400_xowa/src/gplx/xowa/hdumps/saves/Hdump_stats_tbl.java deleted file mode 100644 index dbc0d1238..000000000 --- a/400_xowa/src/gplx/xowa/hdumps/saves/Hdump_stats_tbl.java +++ /dev/null @@ -1,112 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.hdumps.saves; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.hdumps.core.*; import gplx.xowa.html.hzips.*; -import gplx.xowa2.gui.*; -class Hdump_stats_tbl { - private Db_stmt stmt_insert; - public Db_conn Conn() {return conn;} public Hdump_stats_tbl Conn_(Db_conn v) {this.Rls_all(); conn = v; return this;} private Db_conn conn; - public Hdump_stats_tbl Create_tbl() {Sqlite_engine_.Tbl_create_and_delete(conn, Tbl_name, Tbl_sql); return this;} - public void Insert(Xog_page hpg, Xow_hzip_stats hzip, int wtxt_len, int row_orig_len, int row_zip_len) { - Hdump_module_mgr js_mgr = hpg.Module_mgr(); - Insert - ( hpg.Page_id(), wtxt_len, row_orig_len, row_zip_len - , Len_or_0(hpg.Page_body()), Len_or_0(hpg.Display_ttl()), Len_or_0(hpg.Content_sub()), Len_or_0(hpg.Sidebar_div()) - , js_mgr.Math_exists(), js_mgr.Imap_exists(), js_mgr.Gallery_packed_exists(), js_mgr.Hiero_exists() - , hzip.A_rhs(), hzip.Lnki_text_n(), hzip.Lnki_text_y() - , hzip.Lnke_txt(), hzip.Lnke_brk_text_n(), hzip.Lnke_brk_text_y() - , hzip.Hdr_1(), hzip.Hdr_2(), hzip.Hdr_3(), hzip.Hdr_4(), hzip.Hdr_5(), hzip.Hdr_6() - , hzip.Img_full() - ); - } - private int Len_or_0(byte[] bry) {return bry == null ? 0 : bry.length;} - public void Insert - ( int page_id, int wtxt_len, int row_orig_len, int row_zip_len, int body_len - , int display_ttl_len, int content_sub_len, int sidebar_div_len - , boolean js_math, boolean js_imap, boolean js_packed, boolean js_hiero - , int a_rhs, int lnki_text_n, int lnki_text_y - , int lnke_txt, int lnke_brk_text_n, int lnke_brk_text_y - , int hdr_1, int hdr_2, int hdr_3, int hdr_4, int hdr_5, int hdr_6 - , int img_full - ) { - if (stmt_insert == null) stmt_insert = Db_stmt_.new_insert_(conn, Tbl_name, Flds__all); - try { - stmt_insert.Clear() - .Val_int(page_id).Val_int(wtxt_len).Val_int(row_orig_len).Val_int(row_zip_len) - .Val_int(body_len).Val_int(display_ttl_len).Val_int(content_sub_len).Val_int(sidebar_div_len) - .Val_bool_as_byte(js_math).Val_bool_as_byte(js_imap).Val_bool_as_byte(js_packed).Val_bool_as_byte(js_hiero) - .Val_int(a_rhs).Val_int(lnki_text_n).Val_int(lnki_text_y) - .Val_int(lnke_txt).Val_int(lnke_brk_text_n).Val_int(lnke_brk_text_y) - .Val_int(hdr_1).Val_int(hdr_2).Val_int(hdr_3).Val_int(hdr_4).Val_int(hdr_5).Val_int(hdr_6) - .Val_int(img_full) - .Exec_insert(); - } - catch (Exception exc) {stmt_insert = null; throw Err_.err_(exc, "stmt failed");} // must reset stmt, else next call will fail - } - public void Rls_all() { - if (stmt_insert != null) {stmt_insert.Rls(); stmt_insert = null;} - conn = null; - } - public static final String Tbl_name = "hdump_stats" - , Fld_page_id = "page_id", Fld_wtxt_len = "wtxt_len", Fld_row_orig_len = "row_orig_len", Fld_row_zip_len = "row_zip_len" - , Fld_body_len = "body_len", Fld_display_ttl_len = "display_ttl_len", Fld_content_sub_len = "content_sub_len", Fld_sidebar_div_len = "sidebar_div_len" - , Fld_js_math = "js_math", Fld_js_imap = "js_imap", Fld_js_packed = "js_packed", Fld_js_hiero = "js_hiero" - , Fld_a_rhs = "a_rhs", Fld_lnki_text_n = "lnki_text_n", Fld_lnki_text_y = "lnki_text_y" - , Fld_lnke_txt = "lnke_txt", Fld_lnke_brk_text_n = "lnke_brk_text_n", Fld_lnke_brk_text_y = "lnke_brk_text_y" - , Fld_hdr_1 = "hdr_1", Fld_hdr_2 = "hdr_2", Fld_hdr_3 = "hdr_3", Fld_hdr_4 = "hdr_4", Fld_hdr_5 = "hdr_5", Fld_hdr_6 = "hdr_6" - , Fld_img_full = "img_full" - ; - private static final String[] Flds__all = new String[] - { Fld_page_id, Fld_wtxt_len, Fld_row_orig_len, Fld_row_zip_len - , Fld_body_len, Fld_display_ttl_len, Fld_content_sub_len, Fld_sidebar_div_len - , Fld_js_math, Fld_js_imap, Fld_js_packed, Fld_js_hiero - , Fld_a_rhs, Fld_lnki_text_n, Fld_lnki_text_y - , Fld_lnke_txt, Fld_lnke_brk_text_n, Fld_lnke_brk_text_y - , Fld_hdr_1, Fld_hdr_2, Fld_hdr_3, Fld_hdr_4, Fld_hdr_5, Fld_hdr_6 - , Fld_img_full - }; - public static final String Tbl_sql = String_.Concat_lines_nl - ( "CREATE TABLE IF NOT EXISTS hdump_stats" - , "( page_id integer NOT NULL PRIMARY KEY" - , ", wtxt_len integer NOT NULL" - , ", row_orig_len integer NOT NULL" - , ", row_zip_len integer NOT NULL" - , ", body_len integer NOT NULL" - , ", display_ttl_len integer NOT NULL" - , ", content_sub_len integer NOT NULL" - , ", sidebar_div_len integer NOT NULL" - , ", js_math integer NOT NULL" - , ", js_imap integer NOT NULL" - , ", js_packed integer NOT NULL" - , ", js_hiero integer NOT NULL" - , ", a_rhs integer NOT NULL" - , ", lnki_text_n integer NOT NULL" - , ", lnki_text_y integer NOT NULL" - , ", lnke_txt integer NOT NULL" - , ", lnke_brk_text_n integer NOT NULL" - , ", lnke_brk_text_y integer NOT NULL" - , ", hdr_1 integer NOT NULL" - , ", hdr_2 integer NOT NULL" - , ", hdr_3 integer NOT NULL" - , ", hdr_4 integer NOT NULL" - , ", hdr_5 integer NOT NULL" - , ", hdr_6 integer NOT NULL" - , ", img_full integer NOT NULL" - , ");" - ); -} diff --git a/400_xowa/src/gplx/xowa/hdumps/srls/Hpg_srl_itm_.java b/400_xowa/src/gplx/xowa/hdumps/srls/Hpg_srl_itm_.java deleted file mode 100644 index d2479a62f..000000000 --- a/400_xowa/src/gplx/xowa/hdumps/srls/Hpg_srl_itm_.java +++ /dev/null @@ -1,157 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.hdumps.srls; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -import gplx.core.primitives.*; import gplx.xowa.hdumps.core.*; -import gplx.xowa2.gui.*; -public class Hpg_srl_itm_ { - public static final byte // SERIALIZED - Tid_body = 0 - , Tid_html_module = 1 - , Tid_display_ttl = 2 - , Tid_content_sub = 3 - , Tid_sidebar_div = 4 - ; - public static final Hpg_srl_itm[] Itms = new Hpg_srl_itm[] // NOTE: ary_idx must match tid above - { new Hpg_srl_itm__body() - , new Hpg_srl_itm__html_module() - , new Hpg_srl_itm__display_ttl() - , new Hpg_srl_itm__content_sub() - , new Hpg_srl_itm__sidebar_div() - }; - private static final int Base_255_int = 255; - private static final byte Base_255_byte = (byte)255; - public static byte[] Save_bin_int_abrv(int val_int) { - Bry_bfr bfr = Bry_bfr.reset_(10); - Save_bin_int_abrv(bfr, val_int); - return bfr.Xto_bry_and_clear(); - } - public static void Save_bin_int_abrv(Bry_bfr bfr, int val_int) { // save int in binary little endian form; range from -2,080,766,977 to 2,147,483,648; 255^4 or 4,228,250,625 - if (val_int == 0) {bfr.Add_byte(Byte_ascii.Nil); return;} - long val = val_int; - if (val < 0) val = Int_.MaxValue + -val; - int count = 0; - while (val > 0) { - byte mod = (byte)(val % Base_255_int); - int adj = 0; - if (mod == 0) {mod = Base_255_byte; adj = 1;} // if 0, then set byte to 255; also set adj to 1 to properly decrement value - bfr.Add_byte(mod); - ++count; - val = (val - adj) / Base_255_int; - } - if (count < 4) bfr.Add_byte(Byte_ascii.Nil); - } - public static int Load_bin_int_abrv(byte[] bry, int bry_len, int bgn, Int_obj_ref count_ref) { - int end = bgn + 4; // read no more than 4 bytes - int count = 0; - long rv = 0; int mult = 1; - for (int i = bgn; i < end; ++i) { - if (i == bry_len) break; - else { - ++count; - int b = bry[i] & 0xFF; // PATCH.JAVA:need to convert to unsigned byte - if (b == 0) break; - rv += (b * mult); - mult *= Base_255_int; - } - } - if (rv > Int_.MaxValue) { - rv -= Int_.MaxValue; - rv *= -1; - } - count_ref.Val_(count); - return (int)rv; - } -} -abstract class Hpg_srl_itm__blob_base implements Hpg_srl_itm { - public abstract byte Tid(); - public void Save_tid_n_() {save_tid = false;} private boolean save_tid = true; - public void Save(Xog_page hpg, Bry_bfr bfr) { - byte[] bry = Save_itm(hpg); if (bry == null) return; - int len = bry.length; if (len == 0) return; - if (save_tid) // body won't save tid - bfr.Add_byte(this.Tid()); - Hpg_srl_itm_.Save_bin_int_abrv(bfr, len); - bfr.Add(bry); - } - public int Load(Xog_page hpg, byte[] bry, int bry_len, int itm_bgn, Int_obj_ref count_ref) { - int itm_len = Hpg_srl_itm_.Load_bin_int_abrv(bry, bry_len, itm_bgn, count_ref); if (itm_len == -1) throw Err_.new_("bry_itm has invalid len: page={0} tid={1}", hpg.Page_id(), this.Tid()); - int data_bgn = itm_bgn + count_ref.Val(); - if (itm_len == 0) return data_bgn; - int data_end = data_bgn + itm_len; - byte[] itm_data = Bry_.Mid(bry, data_bgn, data_end); - this.Load_itm(hpg, itm_data); - return data_end - itm_bgn; - } - public abstract void Load_itm(Xog_page hpg, byte[] data); - public abstract byte[] Save_itm(Xog_page hpg); -} -class Hpg_srl_itm__body extends Hpg_srl_itm__blob_base { - public Hpg_srl_itm__body() {this.Save_tid_n_();} - @Override public byte Tid() {return Hpg_srl_itm_.Tid_body;} - @Override public byte[] Save_itm(Xog_page hpg) {return hpg.Page_body();} - @Override public void Load_itm(Xog_page hpg, byte[] data) {hpg.Page_body_(data);} -} -class Hpg_srl_itm__display_ttl extends Hpg_srl_itm__blob_base { - @Override public byte Tid() {return Hpg_srl_itm_.Tid_display_ttl;} - @Override public byte[] Save_itm(Xog_page hpg) {return hpg.Display_ttl();} - @Override public void Load_itm(Xog_page hpg, byte[] data) {hpg.Display_ttl_(data);} -} -class Hpg_srl_itm__content_sub extends Hpg_srl_itm__blob_base { - @Override public byte Tid() {return Hpg_srl_itm_.Tid_content_sub;} - @Override public byte[] Save_itm(Xog_page hpg) {return hpg.Content_sub();} - @Override public void Load_itm(Xog_page hpg, byte[] data) {hpg.Content_sub_(data);} -} -class Hpg_srl_itm__sidebar_div extends Hpg_srl_itm__blob_base { - @Override public byte Tid() {return Hpg_srl_itm_.Tid_sidebar_div;} - @Override public byte[] Save_itm(Xog_page hpg) {return hpg.Sidebar_div();} - @Override public void Load_itm(Xog_page hpg, byte[] data) {hpg.Sidebar_div_(data);} -} -class Hpg_srl_itm__html_module implements Hpg_srl_itm { - public byte Tid() {return Hpg_srl_itm_.Tid_html_module;} - public int Load(Xog_page hpg, byte[] bry, int bry_len, int itm_bgn, Int_obj_ref count_ref) { - itm_bgn += 2; // skip bin_int_abrv of [1, 0] - byte flag = bry[itm_bgn]; - hpg.Module_mgr().Init(Enm_.Has_byte(flag, Tid_math), Enm_.Has_byte(flag, Tid_imap), Enm_.Has_byte(flag, Tid_packed), Enm_.Has_byte(flag, Tid_hiero)); - return 3; - } - public void Save(Xog_page hpg, Bry_bfr bfr) { - byte flag = Calc_flag(hpg); - if (flag == 0) return; - bfr.Add_byte(this.Tid()); - Hpg_srl_itm_.Save_bin_int_abrv(bfr, 1); - bfr.Add_byte(flag); - } - private static byte Calc_flag(Xog_page hpg) { - Hdump_module_mgr module_mgr = hpg.Module_mgr(); - return Calc_flag(module_mgr.Math_exists(), module_mgr.Imap_exists(), module_mgr.Gallery_packed_exists(), module_mgr.Hiero_exists()); - } - public static byte Calc_flag(boolean math, boolean imap, boolean packed, boolean hiero) { - byte rv = 0; - if (math) rv = Enm_.Add_byte(rv, Tid_math); - if (imap) rv = Enm_.Add_byte(rv, Tid_imap); - if (packed) rv = Enm_.Add_byte(rv, Tid_packed); - if (hiero) rv = Enm_.Add_byte(rv, Tid_hiero); - return rv; - } - private static final byte // SERIALIZED; only supports 8 different types - Tid_math = 1 - , Tid_imap = 2 - , Tid_packed = 4 - , Tid_hiero = 8 - ; -} diff --git a/400_xowa/src/gplx/xowa/hdumps/srls/Hpg_srl_itm_tst.java b/400_xowa/src/gplx/xowa/hdumps/srls/Hpg_srl_itm_tst.java deleted file mode 100644 index 119e07743..000000000 --- a/400_xowa/src/gplx/xowa/hdumps/srls/Hpg_srl_itm_tst.java +++ /dev/null @@ -1,100 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.hdumps.srls; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -import org.junit.*; import gplx.xowa.hdumps.core.*; -import gplx.xowa2.gui.*; -public class Hpg_srl_itm_tst { - @Before public void init() {fxt.Clear();} private Hpg_srl_itm_fxt fxt = new Hpg_srl_itm_fxt(); - @Test public void Body() { - fxt.Test_page(fxt.Make_page().Body_("A"), fxt.Make_srl_body("A")); - } - @Test public void Html_modules() { - fxt.Test_page(fxt.Make_page().Body_("A").Html_modules_(Bool_.Y, Bool_.N, Bool_.Y, Bool_.N), fxt.Make_srl_body("A"), fxt.Make_srl_html_modules(Bool_.Y, Bool_.N, Bool_.Y, Bool_.N)); - } - @Test public void Body_all() { - fxt.Test_page(fxt.Make_page().Body_("A").Html_modules_(Bool_.Y, Bool_.N, Bool_.Y, Bool_.N).Display_ttl_("B").Content_sub_("C").Sidebar_div_("D") - , fxt.Make_srl_body("A") - , fxt.Make_srl_html_modules(Bool_.Y, Bool_.N, Bool_.Y, Bool_.N) - , fxt.Make_srl_display_ttl("B") - , fxt.Make_srl_content_sub("C") - , fxt.Make_srl_sidebar_div("D") - ); - } -} -class Hpg_srl_itm_fxt { - private Bry_bfr bfr = Bry_bfr.reset_(8); - public void Clear() {bfr.Clear();} - public Hdump_page_mok Make_page() {return new Hdump_page_mok();} - public Hpg_srl_itm_mok Make_srl_body(String s) {return Make_srl(Hpg_srl_itm_.Tid_body, s);} - public Hpg_srl_itm_mok Make_srl_display_ttl(String s) {return Make_srl(Hpg_srl_itm_.Tid_display_ttl, s);} - public Hpg_srl_itm_mok Make_srl_content_sub(String s) {return Make_srl(Hpg_srl_itm_.Tid_content_sub, s);} - public Hpg_srl_itm_mok Make_srl_sidebar_div(String s) {return Make_srl(Hpg_srl_itm_.Tid_sidebar_div, s);} - public Hpg_srl_itm_mok Make_srl(byte tid, String s) {return new Hpg_srl_itm_mok(tid, Bry_.new_utf8_(s));} - public Hpg_srl_itm_mok Make_srl_html_modules(boolean... v) { - return new Hpg_srl_itm_mok(Hpg_srl_itm_.Tid_html_module, new byte[] {Hpg_srl_itm__html_module.Calc_flag(v[0], v[1], v[2], v[3])}); - } - public void Test_page(Hdump_page_mok hpg_mok, Hpg_srl_itm_mok... expd_itms) { - Xog_page hpg = hpg_mok.Xto_hdump_page(); - Hpg_srl_mgr._i_.Save(hpg, bfr); - byte[] actl = bfr.Xto_bry_and_clear(); - Tfds.Eq_ary(Hpg_srl_itm_mok.Xto_bry(bfr, expd_itms), actl); - Xog_page actl_hpg = new Xog_page(); - Hpg_srl_mgr._i_.Load(actl_hpg, actl); - Hpg_srl_mgr._i_.Save(hpg, bfr); - Tfds.Eq_ary(actl, bfr.Xto_bry_and_clear()); - } -} -class Hdump_page_mok { - public byte[] Body() {return body;} public Hdump_page_mok Body_(String v) {body = Bry_.new_utf8_(v); return this;} private byte[] body; - public boolean[] Html_modules() {return html_modules;} public Hdump_page_mok Html_modules_(boolean... v) {html_modules = v; return this;} private boolean[] html_modules; - public byte[] Display_ttl() {return display_ttl;} public Hdump_page_mok Display_ttl_(String v) {display_ttl = Bry_.new_utf8_(v); return this;} private byte[] display_ttl; - public byte[] Content_sub() {return content_sub;} public Hdump_page_mok Content_sub_(String v) {content_sub = Bry_.new_utf8_(v); return this;} private byte[] content_sub; - public byte[] Sidebar_div() {return sidebar_div;} public Hdump_page_mok Sidebar_div_(String v) {sidebar_div = Bry_.new_utf8_(v); return this;} private byte[] sidebar_div; - public Xog_page Xto_hdump_page() { - Xog_page rv = new Xog_page(); - rv.Page_body_(body); - Hdump_module_mgr mod_mgr = rv.Module_mgr(); - if (html_modules != null) { - mod_mgr.Math_exists_(html_modules[0]); - mod_mgr.Imap_exists_(html_modules[1]); - mod_mgr.Gallery_packed_exists_(html_modules[2]); - mod_mgr.Hiero_exists_(html_modules[3]); - } - rv.Display_ttl_(display_ttl); - rv.Content_sub_(content_sub); - rv.Sidebar_div_(sidebar_div); - return rv; - } -} -class Hpg_srl_itm_mok { - public Hpg_srl_itm_mok(byte tid, byte[] data) {this.tid = tid; this.data = data;} - public byte Tid() {return tid;} private final byte tid; - public int Len() {return data.length;} - public byte[] Data() {return data;} private final byte[] data; - public static byte[] Xto_bry(Bry_bfr bfr, Hpg_srl_itm_mok[] ary) { - int len = ary.length; - for (int i = 0; i < len; ++i) { - Hpg_srl_itm_mok itm = ary[i]; - if (itm.Tid() != Hpg_srl_itm_.Tid_body) - bfr.Add_byte(itm.Tid()); - Hpg_srl_itm_.Save_bin_int_abrv(bfr, itm.Len()); - bfr.Add(itm.Data()); - } - return bfr.Xto_bry_and_clear(); - } -} diff --git a/400_xowa/src/gplx/xowa/hdumps/srls/Hpg_srl_mgr.java b/400_xowa/src/gplx/xowa/hdumps/srls/Hpg_srl_mgr.java deleted file mode 100644 index 544c2e6c2..000000000 --- a/400_xowa/src/gplx/xowa/hdumps/srls/Hpg_srl_mgr.java +++ /dev/null @@ -1,41 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.hdumps.srls; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -import gplx.core.primitives.*; import gplx.xowa.hdumps.core.*; -import gplx.xowa2.gui.*; -public class Hpg_srl_mgr { - private Int_obj_ref count_ref = Int_obj_ref.zero_(); - public Hpg_srl_mgr(Hpg_srl_itm[] itm_ary) {this.itm_ary = itm_ary;} - public Hpg_srl_itm Itm_body() {return itm_body;} private final Hpg_srl_itm itm_body = new Hpg_srl_itm__body(); - public Hpg_srl_itm[] Itm_ary() {return itm_ary;} private final Hpg_srl_itm[] itm_ary; - public void Load(Xog_page hpg, byte[] bry) { - if (bry == null) return; - int bry_len = bry.length; if (bry_len == 0) return; - int pos = itm_body.Load(hpg, bry, bry_len, 0, count_ref); // assume every page has a body; saves 1 byte by not specifying tid for body - while (pos < bry_len) { - byte itm_tid = bry[pos]; // itm_tid is always 1-byte - Hpg_srl_itm itm_parser = itm_ary[itm_tid]; // itm_tid always matches itm_ary's idx - pos += itm_parser.Load(hpg, bry, bry_len, pos + 1, count_ref) + 1; // +1 to skip tid - } - } - public void Save(Xog_page hpg, Bry_bfr bfr) { - for (Hpg_srl_itm itm : itm_ary) - itm.Save(hpg, bfr); - } - public static final Hpg_srl_mgr _i_ = new Hpg_srl_mgr(Hpg_srl_itm_.Itms); -} diff --git a/400_xowa/src/gplx/xowa/html/Xoh_html_wtr.java b/400_xowa/src/gplx/xowa/html/Xoh_html_wtr.java index bcdb93275..eca655890 100644 --- a/400_xowa/src/gplx/xowa/html/Xoh_html_wtr.java +++ b/400_xowa/src/gplx/xowa/html/Xoh_html_wtr.java @@ -441,7 +441,7 @@ public class Xoh_html_wtr { private void Write_xnde(Bry_bfr bfr, Xop_ctx ctx, Xoh_wtr_ctx hctx, Xop_xnde_tkn xnde, Xop_xnde_tag tag, int tag_id, byte[] src) { byte[] name = tag.Name_bry(); boolean at_bgn = true; - Bry_bfr ws_bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); // create separate ws_bfr to handle "a c d" -> "a c d" + Bry_bfr ws_bfr = wiki.Utl__bfr_mkr().Get_b512(); // create separate ws_bfr to handle "a c d" -> "a c d" int subs_len = xnde.Subs_len(); for (int i = 0; i < subs_len; i++) { Xop_tkn_itm sub = xnde.Subs_get(i); @@ -522,7 +522,7 @@ public class Xoh_html_wtr { bfr.Add_byte(quote_byte); } private static void Xnde_atr_write_id(Bry_bfr bfr, Xoae_app app, byte[] bry, int bgn, int end) { - Xoa_app_.Utl_encoder_mgr().Id().Encode(bfr, bry, bgn, end); + Xoa_app_.Utl__encoder_mgr().Id().Encode(bfr, bry, bgn, end); } private void Xnde_subs(Xop_ctx ctx, Xoh_wtr_ctx hctx, Bry_bfr bfr, byte[] src, Xop_xnde_tkn xnde) { int subs_len = xnde.Subs_len(); diff --git a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_mgr.java b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_mgr.java index e15e1a47f..e2ba08ab5 100644 --- a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_mgr.java +++ b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_mgr.java @@ -46,8 +46,8 @@ public class Xoh_page_wtr_mgr implements GfoInvkAble { } public boolean Html_capable() {return html_capable;} public Xoh_page_wtr_mgr Html_capable_(boolean v) {html_capable = v; return this;} private boolean html_capable; public Bry_fmtr Page_read_fmtr() {return page_read_fmtr;} - public byte[] Css_common_bry() {return css_common_bry;} public Xoh_page_wtr_mgr Css_common_bry_(Io_url v) {css_common_bry = Xoa_app_.Utl_encoder_mgr().Fsys().Encode_http(v); return this;} private byte[] css_common_bry; - public byte[] Css_wiki_bry() {return css_wiki_bry;} public Xoh_page_wtr_mgr Css_wiki_bry_(Io_url v) {css_wiki_bry = Xoa_app_.Utl_encoder_mgr().Fsys().Encode_http(v); return this;} private byte[] css_wiki_bry; + public byte[] Css_common_bry() {return css_common_bry;} public Xoh_page_wtr_mgr Css_common_bry_(Io_url v) {css_common_bry = Xoa_app_.Utl__encoder_mgr().Fsys().Encode_http(v); return this;} private byte[] css_common_bry; + public byte[] Css_wiki_bry() {return css_wiki_bry;} public Xoh_page_wtr_mgr Css_wiki_bry_(Io_url v) {css_wiki_bry = Xoa_app_.Utl__encoder_mgr().Fsys().Encode_http(v); return this;} private byte[] css_wiki_bry; private static final String[] Fmtr_keys = new String[] { "app_root_dir", "app_version", "app_build_date", "xowa_mode_is_server" , "page_id", "page_name", "page_title", "page_modified_on_msg" @@ -84,7 +84,7 @@ public class Xoh_page_wtr_mgr implements GfoInvkAble { page_edit_fmtr.Eval_mgr_(wiki.Eval_mgr()); page_html_fmtr.Eval_mgr_(wiki.Eval_mgr()); } - Bry_bfr tmp_bfr = Xoa_app_.Utl_bry_bfr_mkr().Get_m001(); + Bry_bfr tmp_bfr = Xoa_app_.Utl__bfr_mkr().Get_m001(); byte[] bry = wtr.Write(this, page, wiki.Ctx(), tmp_bfr); tmp_bfr.Mkr_rls(); return bry; diff --git a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr.java b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr.java index 25888ffbc..5cd689f90 100644 --- a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr.java +++ b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr.java @@ -74,8 +74,8 @@ public class Xoh_page_wtr_wkr implements Bry_fmtr_arg { , mgr.Css_common_bry(), mgr.Css_wiki_bry(), page.Html_data().Module_mgr().Init(app, wiki, page).Init_dflts() , page.Lang().Dir_ltr_bry(), page.Html_data().Indicators(), page_content_sub, wiki.Html_mgr().Portal_mgr().Div_jump_to(), page_body_class, html_content_editable , page_data, wtr_page_lang - , portal_mgr.Div_personal_bry(), portal_mgr.Div_ns_bry(app.Utl_bry_bfr_mkr(), page_ttl, wiki.Ns_mgr()), portal_mgr.Div_view_bry(app.Utl_bry_bfr_mkr(), view_tid, page.Html_data().Xtn_search_text()) - , portal_mgr.Div_logo_bry(), portal_mgr.Div_home_bry(), new Xopg_xtn_skin_fmtr_arg(page, Xopg_xtn_skin_itm_tid.Tid_sidebar), portal_mgr.Div_wikis_bry(app.Utl_bry_bfr_mkr()), portal_mgr.Sidebar_mgr().Html_bry() + , portal_mgr.Div_personal_bry(), portal_mgr.Div_ns_bry(app.Utl__bfr_mkr(), page_ttl, wiki.Ns_mgr()), portal_mgr.Div_view_bry(app.Utl__bfr_mkr(), view_tid, page.Html_data().Xtn_search_text()) + , portal_mgr.Div_logo_bry(), portal_mgr.Div_home_bry(), new Xopg_xtn_skin_fmtr_arg(page, Xopg_xtn_skin_itm_tid.Tid_sidebar), portal_mgr.Div_wikis_bry(app.Utl__bfr_mkr()), portal_mgr.Sidebar_mgr().Html_bry() , mgr.Edit_rename_div_bry(page_ttl), page.Html_data().Edit_preview_w_dbg(), js_edit_toolbar_bry ); Xoh_page_wtr_wkr_.Bld_head_end(html_bfr, page); @@ -119,7 +119,7 @@ public class Xoh_page_wtr_wkr implements Bry_fmtr_arg { app.File_main_wkr().Bld_html(wiki, ctx, bfr, page.Ttl(), wiki.Cfg_file_page(), page.File_queue()); gplx.xowa.html.tidy.Xoh_tidy_mgr tidy_mgr = app.Html_mgr().Tidy_mgr(); boolean tidy_enabled = tidy_mgr.Enabled(); - Bry_bfr hdom_bfr = tidy_enabled ? app.Utl_bry_bfr_mkr().Get_m001() : bfr; // if tidy, then write to tidy_bfr; note that bfr already has and written to it, so this can't be passed to tidy; DATE:2014-06-11 + Bry_bfr hdom_bfr = tidy_enabled ? app.Utl__bfr_mkr().Get_m001() : bfr; // if tidy, then write to tidy_bfr; note that bfr already has and written to it, so this can't be passed to tidy; DATE:2014-06-11 wiki.Html_mgr().Html_wtr().Write_all(hdom_bfr, page.Wikie().Ctx(), hctx, page.Root().Data_mid(), page.Root()); if (tidy_enabled) { tidy_mgr.Run_tidy_html(page, hdom_bfr); diff --git a/400_xowa/src/gplx/xowa/html/Xohp_ctg_grp_mgr.java b/400_xowa/src/gplx/xowa/html/Xohp_ctg_grp_mgr.java index 1e264fb3f..f72ab58f7 100644 --- a/400_xowa/src/gplx/xowa/html/Xohp_ctg_grp_mgr.java +++ b/400_xowa/src/gplx/xowa/html/Xohp_ctg_grp_mgr.java @@ -45,8 +45,8 @@ class Xoh_ctg_itm_fmtr implements Bry_fmtr_arg { public void Set(Xoae_page page, Bry_fmtr itm_fmtr) {this.page = page; this.itm_fmtr = itm_fmtr;} private Xoae_page page; Bry_fmtr itm_fmtr; public void XferAry(Bry_bfr bfr, int idx) { int ctgs_len = page.Category_list().length; - Bry_bfr tmp_bfr = Xoa_app_.Utl_bry_bfr_mkr().Get_b128(); - Bry_bfr tmp_href = Xoa_app_.Utl_bry_bfr_mkr().Get_b128(); + Bry_bfr tmp_bfr = Xoa_app_.Utl__bfr_mkr().Get_b128(); + Bry_bfr tmp_href = Xoa_app_.Utl__bfr_mkr().Get_b128(); byte[] ctg_prefix = page.Wiki().Ns_mgr().Ns_category().Name_db_w_colon(); for (int i = 0; i < ctgs_len; i++) { byte[] page_name = page.Category_list()[i]; diff --git a/400_xowa/src/gplx/xowa/html/Xow_html_mgr.java b/400_xowa/src/gplx/xowa/html/Xow_html_mgr.java index cdb2fc92b..4e59274b8 100644 --- a/400_xowa/src/gplx/xowa/html/Xow_html_mgr.java +++ b/400_xowa/src/gplx/xowa/html/Xow_html_mgr.java @@ -25,10 +25,10 @@ public class Xow_html_mgr implements GfoInvkAble { Xoae_app app = wiki.Appe(); page_wtr_mgr = new Xoh_page_wtr_mgr(app.Gui_mgr().Kit().Tid() != gplx.gfui.Gfui_kit_.Swing_tid); // reverse logic to handle swt,drd but not mem Io_url file_dir = app.User().Fsys_mgr().App_img_dir().GenSubDir_nest("file"); - img_media_play_btn = Xoa_app_.Utl_encoder_mgr().Fsys().Encode_http(file_dir.GenSubFil("play.png")); - img_media_info_btn = Xoa_app_.Utl_encoder_mgr().Fsys().Encode_http(file_dir.GenSubFil("info.png")); - img_thumb_magnify = Xoa_app_.Utl_encoder_mgr().Fsys().Encode_http(file_dir.GenSubFil("magnify-clip.png")); - img_xowa_protocol = Xoa_app_.Utl_encoder_mgr().Fsys().Encode_http(app.User().Fsys_mgr().App_img_dir().GenSubFil_nest("xowa", "protocol.png")); + img_media_play_btn = Xoa_app_.Utl__encoder_mgr().Fsys().Encode_http(file_dir.GenSubFil("play.png")); + img_media_info_btn = Xoa_app_.Utl__encoder_mgr().Fsys().Encode_http(file_dir.GenSubFil("info.png")); + img_thumb_magnify = Xoa_app_.Utl__encoder_mgr().Fsys().Encode_http(file_dir.GenSubFil("magnify-clip.png")); + img_xowa_protocol = Xoa_app_.Utl__encoder_mgr().Fsys().Encode_http(app.User().Fsys_mgr().App_img_dir().GenSubFil_nest("xowa", "protocol.png")); portal_mgr = new Xow_portal_mgr(wiki); imgs_mgr = new Xoh_imgs_mgr(this); module_mgr = new Xow_module_mgr(wiki); diff --git a/400_xowa/src/gplx/xowa/html/hdumps/Xohd_hdump_rdr.java b/400_xowa/src/gplx/xowa/html/hdumps/Xohd_hdump_rdr.java new file mode 100644 index 000000000..28623b547 --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/hdumps/Xohd_hdump_rdr.java @@ -0,0 +1,78 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.html.hdumps; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; +import gplx.xowa.html.hdumps.data.*; import gplx.xowa.html.hzips.*; import gplx.xowa.html.hdumps.abrvs.*; import gplx.xowa.html.hdumps.pages.*; +import gplx.xowa.pages.*; import gplx.xowa.pages.skins.*; import gplx.xowa.html.modules.*; +import gplx.xowa.wikis.data.*; import gplx.xowa2.gui.*; +public class Xohd_hdump_rdr { + private final Bry_bfr_mkr bfr_mkr; private final Xow_hzip_mgr hzip_mgr; + private final Xohd_abrv_mgr abrv_mgr; private final Xohd_page_html_mgr__load load_mgr; + private Xow_core_data_mgr core_data_mgr; private final Xodb_page dbpg = new Xodb_page(); + public Xohd_hdump_rdr(Xoa_app app, Xow_wiki wiki) { + this.bfr_mkr = app.Utl__bfr_mkr(); this.hzip_mgr = wiki.Html_mgr__hzip_mgr(); + abrv_mgr = new Xohd_abrv_mgr(app.Usr_dlg(), app.Fsys_mgr(), app.Utl__encoder_mgr().Fsys(), wiki.Domain_bry()); + load_mgr = new Xohd_page_html_mgr__load(); // TODO: get db_id + } + public void Init_by_db(Xow_core_data_mgr core_data_mgr) {this.core_data_mgr = core_data_mgr;} + public void Get_by_ttl(Xoae_page page) { + Xog_page hpg = new Xog_page(); + Get_by_ttl(hpg, page.Ttl()); + page.Hdump_data().Body_(hpg.Page_body()); + page.Root_(new Xop_root_tkn()); + Xopg_html_data html_data = page.Html_data(); + html_data.Display_ttl_(hpg.Display_ttl()); + html_data.Content_sub_(hpg.Content_sub()); + html_data.Xtn_skin_mgr().Add(new Xopg_xtn_skin_itm_stub(hpg.Sidebar_div())); + Load_module_mgr(html_data.Module_mgr(), hpg); + for (gplx.xowa.html.hdumps.core.Xohd_data_itm__base itm : hpg.Img_itms()) + page.Hdump_data().Imgs_add(itm); + } + public void Get_by_ttl(Xog_page rv, Xoa_ttl ttl) { + synchronized (dbpg) { + if (!Get_by_ttl__fill_hpg(rv, ttl)) return; + Bry_bfr bfr = bfr_mkr.Get_m001(); + byte[] body_bry = abrv_mgr.Parse(bfr, rv); + body_bry = hzip_mgr.Parse(bfr, ttl.Page_db(), body_bry); + bfr.Mkr_rls(); + rv.Page_body_(body_bry); + } + } + private boolean Get_by_ttl__fill_hpg(Xog_page rv, Xoa_ttl ttl) { + core_data_mgr.Tbl__pg().Select_by_ttl(dbpg, ttl.Ns(), ttl.Page_db()); // get rows from db + if (dbpg.Redirect_id() != -1) Get_by_ttl__resolve_redirect(dbpg, rv); + if (dbpg.Html_db_id() == -1) return false; // dbpg does not hdump; exit; + Xowd_db_file html_db = core_data_mgr.Dbs__get_at(dbpg.Html_db_id()); + load_mgr.Load_page(rv, Xohd_page_html_tbl.Get_from_db(core_data_mgr, html_db), dbpg.Id(), ttl); + return true; + } + private void Get_by_ttl__resolve_redirect(Xodb_page dbpg, Xog_page hpg) { + int redirect_count = 0; + while (redirect_count < 5) { + int redirect_id = dbpg.Redirect_id(); + core_data_mgr.Tbl__pg().Select_by_id(dbpg, redirect_id); + if (redirect_id == -1) break; + } + } + public static void Load_module_mgr(Xoh_module_mgr page_module_mgr, Xog_page hpg) { + Xopg_module_mgr dump_module_mgr = hpg.Module_mgr(); + page_module_mgr.Itm_mathjax().Enabled_ (dump_module_mgr.Math_exists()); + page_module_mgr.Itm_popups().Bind_hover_area_ (dump_module_mgr.Imap_exists()); + page_module_mgr.Itm_gallery().Enabled_ (dump_module_mgr.Gallery_packed_exists()); + page_module_mgr.Itm_hiero().Enabled_ (dump_module_mgr.Hiero_exists()); + } +} diff --git a/400_xowa/src/gplx/xowa/html/hdumps/Xohd_hdump_wtr.java b/400_xowa/src/gplx/xowa/html/hdumps/Xohd_hdump_wtr.java new file mode 100644 index 000000000..fccd23745 --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/hdumps/Xohd_hdump_wtr.java @@ -0,0 +1,54 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.html.hdumps; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; +import gplx.xowa.html.hdumps.data.*; import gplx.xowa.html.hzips.*; import gplx.xowa.html.hdumps.abrvs.*; import gplx.xowa.html.hdumps.pages.*; +import gplx.xowa.pages.*; import gplx.xowa.pages.skins.*; import gplx.xowa.dbs.*; +import gplx.xowa.wikis.data.*; import gplx.xowa2.gui.*; +public class Xohd_hdump_wtr { + private final Bry_bfr_mkr bfr_mkr; private final Xoh_page_wtr_mgr page_wtr_mgr; + private final Xohd_page_html_mgr__save save_mgr; private Xowe_core_data_mgr core_data_mgr; + public Xohd_hdump_wtr(Xoa_app app, Xowe_wiki wiki) { + this.bfr_mkr = app.Utl__bfr_mkr(); this.page_wtr_mgr = wiki.Html_mgr().Page_wtr_mgr(); + save_mgr = new Xohd_page_html_mgr__save(); + } + public void Init_by_db(Xowe_core_data_mgr core_data_mgr) { + this.core_data_mgr = core_data_mgr; + } + public void Save(Xoae_page page) { + Bry_bfr tmp_bfr = bfr_mkr.Get_m001(); + Generate_hdump(tmp_bfr, page); + int html_db_id = page.Revision_data().Html_db_id(); + Xowd_db_file hdump_db = Xowd_db_file.Null; + if (html_db_id == -1) { + hdump_db = core_data_mgr.Dbs__get_by_tid_nth_or_new(Xowd_db_file_.Tid_html); + html_db_id = hdump_db.Id(); + page.Revision_data().Html_db_id_(html_db_id); + core_data_mgr.Tbl__pg().Update_html_db_id(page.Revision_data().Id(), html_db_id); + } + else { + return; + } + save_mgr.Update(tmp_bfr, Xohd_page_html_tbl.Get_from_db(core_data_mgr, hdump_db), page); + tmp_bfr.Mkr_rls(); + } + public void Generate_hdump(Bry_bfr tmp_bfr, Xoae_page page) { + page.File_queue().Clear(); // need to reset uid to 0, else xowa_file_# will resume from last + page_wtr_mgr.Wkr(Xopg_view_mode.Tid_read).Write_body(tmp_bfr, Xoh_wtr_ctx.Hdump, page); + page.Hdump_data().Body_(tmp_bfr.Xto_bry_and_clear()); + } +} diff --git a/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr__write_tst.java b/400_xowa/src/gplx/xowa/html/hdumps/Xohd_hdump_wtr_tst.java similarity index 79% rename from 400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr__write_tst.java rename to 400_xowa/src/gplx/xowa/html/hdumps/Xohd_hdump_wtr_tst.java index 8a3af003b..30565405a 100644 --- a/400_xowa/src/gplx/xowa/hdumps/Xodb_hdump_mgr__write_tst.java +++ b/400_xowa/src/gplx/xowa/html/hdumps/Xohd_hdump_wtr_tst.java @@ -15,11 +15,11 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa.hdumps; import gplx.*; import gplx.xowa.*; +package gplx.xowa.html.hdumps; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import org.junit.*; import gplx.xowa.files.*; -import gplx.xowa.hdumps.core.*; import gplx.xowa.hdumps.dbs.*; import gplx.xowa.hdumps.pages.*; import gplx.xowa.xtns.hieros.*; import gplx.xowa.xtns.gallery.*; -public class Xodb_hdump_mgr__write_tst { - @Before public void init() {fxt.Clear();} private Xodb_hdump_mgr__write_fxt fxt = new Xodb_hdump_mgr__write_fxt(); +import gplx.xowa.html.hdumps.core.*; import gplx.xowa.html.hdumps.data.*; import gplx.xowa.html.hdumps.pages.*; import gplx.xowa.xtns.hieros.*; import gplx.xowa.xtns.gallery.*; +public class Xohd_hdump_wtr_tst { + @Before public void init() {fxt.Clear();} private Xohd_hdump_wtr_fxt fxt = new Xohd_hdump_wtr_fxt(); // @Test public void Image_full() { // fxt.Expd_itms_xfers(fxt.Make_xfer("A.png", 0, 0, 0, Bool_.Y, Xof_ext_.Id_png)); // fxt.Test_write_all @@ -101,16 +101,16 @@ public class Xodb_hdump_mgr__write_tst { } } class Xodb_hdump_mgr__base_fxt { - protected Xodb_hdump_mgr hdump_mgr; protected Bry_bfr bfr = Bry_bfr.reset_(255); protected Xowe_wiki wiki; protected Xoae_page page; + private Xohd_hdump_wtr hdump_wtr; public Xop_fxt Fxt() {return fxt;} protected Xop_fxt fxt; public void Clear() { if (fxt == null) { fxt = new Xop_fxt(); wiki = fxt.Wiki(); page = wiki.Ctx().Cur_page(); - hdump_mgr = new Xodb_hdump_mgr(wiki); + hdump_wtr = new Xohd_hdump_wtr(fxt.App(), fxt.Wiki()); } fxt.Reset(); page.Revision_data().Id_(0); @@ -120,16 +120,16 @@ class Xodb_hdump_mgr__base_fxt { @gplx.Virtual public void Exec_write(String raw) { Xop_root_tkn root = fxt.Exec_parse_page_all_as_root(Bry_.new_utf8_(raw)); page.Root_(root); - hdump_mgr.Write(bfr, page); + hdump_wtr.Generate_hdump(bfr, page); } - public Hdump_data_img__base Make_xfer(String lnki_ttl, int html_uid, int html_w, int html_h, boolean file_is_orig, int file_ext_id) { - return new Hdump_data_img__basic().Init_by_base(Bry_.new_utf8_(lnki_ttl), html_uid, html_w, html_h, Hdump_data_img__base.File_repo_id_null, file_ext_id, file_is_orig, html_w, Xof_doc_thumb.Null, Xof_doc_page.Null); + public Xohd_data_itm__base Make_xfer(String lnki_ttl, int html_uid, int html_w, int html_h, boolean file_is_orig, int file_ext_id) { + return new Xohd_data_itm__img().Init_by_base(Bry_.new_utf8_(lnki_ttl), Byte_.Zero, 0, 0, Xof_img_size.Upright_null, html_uid, html_w, html_h, Xohd_data_itm__base.File_repo_id_null, file_ext_id, file_is_orig, html_w, Xof_doc_thumb.Null, Xof_doc_page.Null); } } -class Xodb_hdump_mgr__write_fxt extends Xodb_hdump_mgr__base_fxt { +class Xohd_hdump_wtr_fxt extends Xodb_hdump_mgr__base_fxt { private ListAdp expd_itms_xfers = ListAdp_.new_(); @Override public void Clear_end() {expd_itms_xfers.Clear();} - public void Expd_itms_xfers(Hdump_data_img__base... itms) {expd_itms_xfers.AddMany((Object[])itms);} + public void Expd_itms_xfers(Xohd_data_itm__base... itms) {expd_itms_xfers.AddMany((Object[])itms);} public void Test_write_all (String raw, String expd_html) {Test_write(Bool_.N, raw, expd_html);} public void Test_write_frag(String raw, String expd_frag) {Test_write(Bool_.Y, raw, expd_frag);} public void Test_write(boolean frag, String raw, String expd_html) { @@ -139,13 +139,13 @@ class Xodb_hdump_mgr__write_fxt extends Xodb_hdump_mgr__base_fxt { Tfds.Eq_true(String_.Has(actl_html, expd_html), actl_html); else Tfds.Eq_str_lines(expd_html, actl_html); - if (expd_itms_xfers.Count() > 0) Tfds.Eq_ary_str(Xfer_to_str_ary(expd_itms_xfers), Xfer_to_str_ary(page.Hdump_data().Data())); + if (expd_itms_xfers.Count() > 0) Tfds.Eq_ary_str(Xfer_to_str_ary(expd_itms_xfers), Xfer_to_str_ary(page.Hdump_data().Imgs())); } private static String[] Xfer_to_str_ary(ListAdp list) { int len = list.Count(); String[] rv = new String[len]; for (int i = 0; i < len; ++i) { - Hdump_data_img__base itm = (Hdump_data_img__base)list.FetchAt(i); + Xohd_data_itm__base itm = (Xohd_data_itm__base)list.FetchAt(i); rv[i] = itm.Data_print(); } return rv; diff --git a/400_xowa/src/gplx/xowa/html/hdumps/Xowd_db_init_wkr__html.java b/400_xowa/src/gplx/xowa/html/hdumps/Xowd_db_init_wkr__html.java new file mode 100644 index 000000000..4d8ec01c1 --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/hdumps/Xowd_db_init_wkr__html.java @@ -0,0 +1,57 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.html.hdumps; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; +import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; +import gplx.xowa.wikis.data.*; +import gplx.xowa.html.hdumps.data.*; +public class Xowd_db_init_wkr__html implements Xowd_db_init_tbl_wkr, Xowd_db_init_db_wkr { + public String Tbl_key() {return Xohd_page_html_tbl.Hash_key;} + public Object Tbl_init(Xow_core_data_mgr core_data_mgr, Xowd_db_file db_file) {return Make_tbl(core_data_mgr, db_file, Bool_.N);} + public byte Db_tid() {return Xowd_db_file_.Tid_html;} + public Xowd_db_file Db_make(Xowe_core_data_mgr core_data_mgr) { + Xow_core_data_map map = core_data_mgr.Map(); + Assert_col__page_html_db_id(core_data_mgr); + Xowd_db_file rv = map.One_file() ? core_data_mgr.Dbs__get_db_core() : Create_db(core_data_mgr, this.Db_tid()); + Xohd_page_html_tbl html_tbl = Make_tbl(core_data_mgr, rv, Bool_.Y); + html_tbl.Create_idx(); + rv.Tbls__add(Xohd_page_html_tbl.Hash_key, html_tbl); + return rv; + } + private Xohd_page_html_tbl Make_tbl(Xow_core_data_mgr core_data_mgr, Xowd_db_file db_file, boolean created) { + Xohd_page_html_tbl rv = new Xohd_page_html_tbl(); + rv.Conn_(db_file.Conn(), created, core_data_mgr.Cfg__schema_is_1(), core_data_mgr.Cfg__db_id(), core_data_mgr.Tbl__cfg().Select_as_byte_or("xowa.schema.dbs.html", "zip_tid", gplx.ios.Io_stream_.Tid_bzip2)); + return rv; + } + public void Assert_col__page_html_db_id(Xowe_core_data_mgr core_data_mgr) { + Db_cfg_tbl cfg_tbl = core_data_mgr.Tbl__cfg(); + String exists = cfg_tbl.Select_as_str_or(Xowe_core_data_mgr.Cfg_grp_db_meta, Cfg_itm_html_db_exists, "n"); + if (String_.Eq(exists, "y")) return; + Xowd_pg_regy_tbl pg_tbl = core_data_mgr.Tbl__pg(); + Db_conn conn = core_data_mgr.Dbs__get_db_core().Conn(); + conn.Exec_ddl_append_fld(pg_tbl.Tbl_name(), pg_tbl.Fld_html_db_id()); // TODO: currently NULL; change to NOT NULL DEFAULT -1; ALTER TABLE page ADD html_db_id int NULL; + conn.Exec_ddl_append_fld(pg_tbl.Tbl_name(), pg_tbl.Fld_page_redirect_id()); // TODO: currently NULL; change to NOT NULL DEFAULT -1; ALTER TABLE page ADD html_db_id int NULL; + cfg_tbl.Insert(Xowe_core_data_mgr.Cfg_grp_db_meta, Cfg_itm_html_db_exists, "y"); + } + private Xowd_db_file Create_db(Xowe_core_data_mgr core_data_mgr, byte tid) { + Xowd_db_file rv = core_data_mgr.Dbs__add_new(tid); + core_data_mgr.Dbs__save(); + return rv; + } + private static final String Cfg_itm_html_db_exists = "html_db.exists"; + public static final Xowd_db_init_wkr__html I = new Xowd_db_init_wkr__html(); Xowd_db_init_wkr__html() {} +} diff --git a/400_xowa/src/gplx/xowa/hdumps/htmls/Hdump_html_consts.java b/400_xowa/src/gplx/xowa/html/hdumps/abrvs/Xohd_abrv_.java similarity index 86% rename from 400_xowa/src/gplx/xowa/hdumps/htmls/Hdump_html_consts.java rename to 400_xowa/src/gplx/xowa/html/hdumps/abrvs/Xohd_abrv_.java index 6008353c9..83ef435a7 100644 --- a/400_xowa/src/gplx/xowa/hdumps/htmls/Hdump_html_consts.java +++ b/400_xowa/src/gplx/xowa/html/hdumps/abrvs/Xohd_abrv_.java @@ -15,14 +15,9 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa.hdumps.htmls; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; +package gplx.xowa.html.hdumps.abrvs; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.hdumps.*; import gplx.core.btries.*; -public class Hdump_html_consts { - public static final byte[] - A_href_bgn = Bry_.new_ascii_("/wiki/File:") - , Bry_img_style_bgn = Bry_.new_ascii_("style='width:") - , Bry_img_style_end = Bry_.new_ascii_("px;'") - ; +public class Xohd_abrv_ { public static final byte Tid_dir = 1, Tid_img = 2, Tid_img_style = 3, Tid_file_play = 4, Tid_file_info = 5, Tid_file_mgnf = 6 , Tid_hiero_dir = 7, Tid_gallery_box_max = 8, Tid_gallery_box_w = 9, Tid_gallery_img_w = 10, Tid_gallery_img_pad = 11 @@ -44,10 +39,13 @@ public class Hdump_html_consts { , Key_toc = Bry_.new_ascii_("~{xowa_toc}") ; public static final byte[] - Html_redlink_bgn = Bry_.Add(Bry_.new_ascii_("\" "), Key_redlink) + A_href_bgn = Bry_.new_ascii_("/wiki/File:") + , Bry_img_style_bgn = Bry_.new_ascii_("style='width:") + , Bry_img_style_end = Bry_.new_ascii_("px;'") + , Html_redlink_bgn = Bry_.Add(Bry_.new_ascii_("\" "), Key_redlink) , Html_redlink_end = Bry_.new_ascii_("'>") ; - public static Btrie_slim_mgr trie_() { + public static Btrie_slim_mgr new_trie() { Btrie_slim_mgr rv = Btrie_slim_mgr.cs_(); trie_itm(rv, Tid_dir , Byte_ascii.Nil , Key_dir); trie_itm(rv, Tid_img , Byte_ascii.Apos , Key_img); diff --git a/400_xowa/src/gplx/xowa/hdumps/htmls/Hdump_html_body.java b/400_xowa/src/gplx/xowa/html/hdumps/abrvs/Xohd_abrv_mgr.java similarity index 60% rename from 400_xowa/src/gplx/xowa/hdumps/htmls/Hdump_html_body.java rename to 400_xowa/src/gplx/xowa/html/hdumps/abrvs/Xohd_abrv_mgr.java index c8be91c46..80cfc7d99 100644 --- a/400_xowa/src/gplx/xowa/hdumps/htmls/Hdump_html_body.java +++ b/400_xowa/src/gplx/xowa/html/hdumps/abrvs/Xohd_abrv_mgr.java @@ -15,33 +15,34 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa.hdumps.htmls; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -import gplx.core.brys.*; import gplx.core.btries.*; import gplx.html.*; import gplx.xowa.html.*; -import gplx.xowa.files.*; import gplx.xowa.files.repos.*; -import gplx.xowa.wikis.*; import gplx.xowa.apps.fsys.*; import gplx.xowa.hdumps.core.*; import gplx.xowa.html.lnkis.*; import gplx.xowa.xtns.gallery.*; +package gplx.xowa.html.hdumps.abrvs; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.hdumps.*; +import gplx.core.brys.*; import gplx.core.btries.*; +import gplx.html.*; import gplx.xowa.html.*; import gplx.xowa.html.hdumps.core.*; import gplx.xowa.html.lnkis.*; +import gplx.xowa.files.*; import gplx.xowa.files.repos.*; import gplx.xowa.xtns.gallery.*; +import gplx.xowa.wikis.*; import gplx.xowa.apps.fsys.*; import gplx.xowa2.gui.*; -public class Hdump_html_body { +public class Xohd_abrv_mgr { private Bry_bfr tmp_bfr = Bry_bfr.reset_(255); private Bry_rdr bry_rdr = new Bry_rdr(); private Gfo_usr_dlg usr_dlg = Gfo_usr_dlg_._; - private Xog_page hpg; private Xoh_cfg_file cfg_file; private Xof_url_bldr url_bldr = Xof_url_bldr.new_v2_(); private Xoh_file_html_fmtr__base html_fmtr; + private Xoh_cfg_file cfg_file; private Xof_url_bldr url_bldr = Xof_url_bldr.new_v2_(); private Xoh_file_html_fmtr__base html_fmtr; private byte[] root_dir, file_dir, file_dir_comm, file_dir_wiki, hiero_img_dir; - public Hdump_html_body Init_by_app(Gfo_usr_dlg usr_dlg, Xoa_fsys_mgr fsys_mgr, Url_encoder fsys_encoder) { + private byte[] wiki_domain; + public Xohd_abrv_mgr(Gfo_usr_dlg usr_dlg, Xoa_fsys_mgr fsys_mgr, Url_encoder fsys_encoder, byte[] wiki_domain) { this.usr_dlg = usr_dlg; this.root_dir = fsys_mgr.Root_dir().To_http_file_bry(); this.file_dir = fsys_mgr.File_dir().To_http_file_bry(); this.hiero_img_dir = gplx.xowa.xtns.hieros.Hiero_xtn_mgr.Hiero_root_dir(fsys_mgr).GenSubDir("img").To_http_file_bry(); this.cfg_file = new Xoh_cfg_file(fsys_encoder, fsys_mgr.Bin_xowa_dir()); this.html_fmtr = Xoh_file_html_fmtr__hdump.Base; - return this; + this.wiki_domain = wiki_domain; } - public Hdump_html_body Init_by_page(byte[] domain_bry, Xog_page hpg) { - this.hpg = hpg; + private void Init() { file_dir_comm = tmp_bfr.Add(file_dir).Add(Xow_domain_.Domain_bry_commons).Add_byte_slash().Xto_bry_and_clear(); - file_dir_wiki = tmp_bfr.Add(file_dir).Add(domain_bry).Add_byte_slash().Xto_bry_and_clear(); - return this; + file_dir_wiki = tmp_bfr.Add(file_dir).Add(wiki_domain).Add_byte_slash().Xto_bry_and_clear(); } - public void Write(Bry_bfr bfr) { + public byte[] Parse(Bry_bfr rv, Xog_page hpg) { + this.Init(); byte[] src = hpg.Page_body(); int len = src.length; - Hdump_data_img__base[] imgs = hpg.Img_itms(); int imgs_len = hpg.Img_itms().length; + Xohd_data_itm__base[] imgs = hpg.Img_itms(); int imgs_len = hpg.Img_itms().length; bry_rdr.Src_(src); int pos = 0; int rng_bgn = -1; while (pos < len) { @@ -53,77 +54,78 @@ public class Hdump_html_body { } else { if (rng_bgn != -1) { - bfr.Add_mid(src, rng_bgn, pos); + rv.Add_mid(src, rng_bgn, pos); rng_bgn = -1; } pos = trie.Match_pos(); // position after match; EX: "xowa_img='" positions after "'" Hdump_html_fmtr_itm itm = (Hdump_html_fmtr_itm)o; - pos = Write_data(bfr, html_fmtr, hpg, src, imgs, imgs_len, pos, itm); // note no +1; Write_data return pos after } + pos = Write_data(rv, html_fmtr, hpg, src, imgs, imgs_len, pos, itm); // note no +1; Write_data return pos after } } } - if (rng_bgn != -1) bfr.Add_mid(src, rng_bgn, len); + if (rng_bgn != -1) rv.Add_mid(src, rng_bgn, len); + return rv.Xto_bry_and_clear(); } - private int Write_data(Bry_bfr bfr, Xoh_file_html_fmtr__base fmtr, Xog_page hpg, byte[] src, Hdump_data_img__base[] imgs, int imgs_len, int uid_bgn, Hdump_html_fmtr_itm itm) { + private int Write_data(Bry_bfr bfr, Xoh_file_html_fmtr__base fmtr, Xog_page hpg, byte[] src, Xohd_data_itm__base[] imgs, int imgs_len, int uid_bgn, Hdump_html_fmtr_itm itm) { bry_rdr.Pos_(uid_bgn); int uid = itm.Subst_end_byte() == Byte_ascii.Nil ? -1 : bry_rdr.Read_int_to(itm.Subst_end_byte()); int uid_end = bry_rdr.Pos(); // set uid_end after subst_end int rv = uid_end; byte tid = itm.Tid(); switch (tid) { - case Hdump_html_consts.Tid_dir: bfr.Add(root_dir); return rv; - case Hdump_html_consts.Tid_hiero_dir: bfr.Add(hiero_img_dir); return rv; - case Hdump_html_consts.Tid_redlink: return Write_redlink(bfr, hpg, uid, rv); + case Xohd_abrv_.Tid_dir: bfr.Add(root_dir); return rv; + case Xohd_abrv_.Tid_hiero_dir: bfr.Add(hiero_img_dir); return rv; + case Xohd_abrv_.Tid_redlink: return Write_redlink(bfr, hpg, uid, rv); } if (itm.Elem_is_xnde()) rv += 2; // if xnde, skip "/>" - if (uid == bry_rdr.Or_int()) {usr_dlg.Warn_many("", "", "index is not a valid int; hpg=~{0} text=~{1}", hpg.Page_url().Xto_full_str_safe(), Bry_.Mid_safe(src, uid_bgn, uid_end)); return uid_end;} - if (!Int_.Between(uid, 0, imgs_len)) {usr_dlg.Warn_many("", "", "index is out of range; hpg=~{0} idx=~{1} len=~{2}", hpg.Page_url().Xto_full_str_safe(), uid, imgs_len); return uid_end;} + if (uid == bry_rdr.Or_int()) {usr_dlg.Warn_many("", "", "index is not a valid int; hpg=~{0} text=~{1}", hpg.Url().Xto_full_str_safe(), Bry_.Mid_safe(src, uid_bgn, uid_end)); return uid_end;} + if (!Int_.Between(uid, 0, imgs_len)) {usr_dlg.Warn_many("", "", "index is out of range; hpg=~{0} idx=~{1} len=~{2}", hpg.Url().Xto_full_str_safe(), uid, imgs_len); return uid_end;} if (uid >= imgs.length) return rv; - Hdump_data_img__base img = imgs[uid]; + Xohd_data_itm__base img = imgs[uid]; int img_view_w = img.Html_w(); switch (tid) { - case Hdump_html_consts.Tid_img_style: - bfr.Add(Hdump_html_consts.Bry_img_style_bgn); + case Xohd_abrv_.Tid_img_style: + bfr.Add(Xohd_abrv_.Bry_img_style_bgn); bfr.Add_int_variable(img_view_w); - bfr.Add(Hdump_html_consts.Bry_img_style_end); + bfr.Add(Xohd_abrv_.Bry_img_style_end); return rv; } byte[] a_title = img.Lnki_ttl(); - byte[] a_href = Bry_.Add(Hdump_html_consts.A_href_bgn, a_title); + byte[] a_href = Bry_.Add(Xohd_abrv_.A_href_bgn, a_title); switch (tid) { - case Hdump_html_consts.Tid_file_info: fmtr.Html_thumb_part_info (bfr, uid, a_href, cfg_file.Img_media_info_btn()); return rv; - case Hdump_html_consts.Tid_file_mgnf: fmtr.Html_thumb_part_magnify(bfr, uid, a_href, a_title, cfg_file.Img_thumb_magnify()); return rv; - case Hdump_html_consts.Tid_file_play: fmtr.Html_thumb_part_play (bfr, uid, img_view_w, Xoh_file_wtr__basic.Play_btn_max_width, a_href, a_title, cfg_file.Img_media_play_btn()); return rv; - case Hdump_html_consts.Tid_gallery_box_max: { - Hdump_data_gallery gly = (Hdump_data_gallery)hpg.Gly_itms().Fetch(uid); + case Xohd_abrv_.Tid_file_info: fmtr.Html_thumb_part_info (bfr, uid, a_href, cfg_file.Img_media_info_btn()); return rv; + case Xohd_abrv_.Tid_file_mgnf: fmtr.Html_thumb_part_magnify(bfr, uid, a_href, a_title, cfg_file.Img_thumb_magnify()); return rv; + case Xohd_abrv_.Tid_file_play: fmtr.Html_thumb_part_play (bfr, uid, img_view_w, Xoh_file_wtr__basic.Play_btn_max_width, a_href, a_title, cfg_file.Img_media_play_btn()); return rv; + case Xohd_abrv_.Tid_gallery_box_max: { + Xohd_data_itm__gallery_mgr gly = (Xohd_data_itm__gallery_mgr)hpg.Gly_itms().Fetch(uid); if (gly != null) { // -1 means no box_max byte[] style = Gallery_mgr_base.box_style_max_width_fmtr.Bld_bry_many(tmp_bfr, gly.Box_max()); Html_wtr.Write_atr_bry(bfr, Bool_.N, Byte_ascii.Quote, Html_atr_.Style_bry, style); } return rv; } - case Hdump_html_consts.Tid_gallery_box_w: { - Hdump_data_img__gallery gly = (Hdump_data_img__gallery)img; + case Xohd_abrv_.Tid_gallery_box_w: { + Xohd_data_itm__gallery_itm gly = (Xohd_data_itm__gallery_itm)img; byte[] style = Gallery_mgr_base.hdump_box_w_fmtr.Bld_bry_many(tmp_bfr, gly.Box_w()); Html_wtr.Write_atr_bry(bfr, Bool_.N, Byte_ascii.Quote, Html_atr_.Style_bry, style); return rv; } - case Hdump_html_consts.Tid_gallery_img_w: { - Hdump_data_img__gallery gly = (Hdump_data_img__gallery)img; + case Xohd_abrv_.Tid_gallery_img_w: { + Xohd_data_itm__gallery_itm gly = (Xohd_data_itm__gallery_itm)img; byte[] style = Gallery_mgr_base.hdump_box_w_fmtr.Bld_bry_many(tmp_bfr, gly.Img_w()); Html_wtr.Write_atr_bry(bfr, Bool_.N, Byte_ascii.Quote, Html_atr_.Style_bry, style); return rv; } - case Hdump_html_consts.Tid_gallery_img_pad: { - Hdump_data_img__gallery gly = (Hdump_data_img__gallery)img; + case Xohd_abrv_.Tid_gallery_img_pad: { + Xohd_data_itm__gallery_itm gly = (Xohd_data_itm__gallery_itm)img; byte[] style = Gallery_mgr_base.hdump_img_pad_fmtr.Bld_bry_many(tmp_bfr, gly.Img_pad()); Html_wtr.Write_atr_bry(bfr, Bool_.N, Byte_ascii.Quote, Html_atr_.Style_bry, style); return rv; } } url_bldr.Init_by_root(img.File_repo_id() == Xof_repo_itm.Repo_remote ? file_dir_comm : file_dir_wiki, Byte_ascii.Slash, false, false, 2); - url_bldr.Init_by_itm(img.File_is_orig() ? Xof_repo_itm.Mode_orig : Xof_repo_itm.Mode_thumb, img.Lnki_ttl(), Xof_xfer_itm_.Md5_(img.Lnki_ttl()), Xof_ext_.new_by_id_(img.File_ext_id()), img.File_w(), img.File_time(), img.File_page()); + url_bldr.Init_by_itm(img.File_is_orig() ? Xof_repo_itm.Mode_orig : Xof_repo_itm.Mode_thumb, img.Lnki_ttl(), Xof_xfer_itm_.Md5_(img.Lnki_ttl()), Xof_ext_.new_by_id_(img.Lnki_ext()), img.File_w(), img.Lnki_time(), img.Lnki_page()); byte[] img_src = url_bldr.Xto_bry(); - if (tid == Hdump_html_consts.Tid_img) { + if (tid == Xohd_abrv_.Tid_img) { fmtr_img.Bld_bfr_many(bfr, img_src, img_view_w, img.Html_h()); } return rv; @@ -138,7 +140,7 @@ public class Hdump_html_body { return rv; } private static final byte[] Redlink_cls_new = Bry_.new_ascii_("class='new'"); public static final Bry_fmtr fmtr_img = Bry_fmtr.new_("src='~{src}' width='~{w}' height='~{h}'", "src", "w", "h"); - private static final Btrie_slim_mgr trie = Hdump_html_consts.trie_(); + private static final Btrie_slim_mgr trie = Xohd_abrv_.new_trie(); } class Hdump_html_fmtr_itm { public Hdump_html_fmtr_itm(byte tid, boolean elem_is_xnde, byte subst_end_byte, byte[] key) {this.tid = tid; this.key = key; this.elem_is_xnde = elem_is_xnde; this.subst_end_byte = subst_end_byte;} diff --git a/400_xowa/src/gplx/xowa/hdumps/htmls/Hdump_html_mgr_tst.java b/400_xowa/src/gplx/xowa/html/hdumps/abrvs/Xohd_abrv_mgr_tst.java similarity index 68% rename from 400_xowa/src/gplx/xowa/hdumps/htmls/Hdump_html_mgr_tst.java rename to 400_xowa/src/gplx/xowa/html/hdumps/abrvs/Xohd_abrv_mgr_tst.java index 6f0eaaf59..1a6c5f9b4 100644 --- a/400_xowa/src/gplx/xowa/hdumps/htmls/Hdump_html_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/html/hdumps/abrvs/Xohd_abrv_mgr_tst.java @@ -15,14 +15,14 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa.hdumps.htmls; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -import org.junit.*; import gplx.xowa.hdumps.core.*; import gplx.xowa.hdumps.dbs.*; import gplx.xowa.files.*; +package gplx.xowa.html.hdumps.abrvs; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.hdumps.*; +import org.junit.*; import gplx.xowa.html.hdumps.core.*; import gplx.xowa.html.hdumps.data.*; import gplx.xowa.files.*; import gplx.xowa2.gui.*; -public class Hdump_html_mgr_tst { +public class Xohd_abrv_mgr_tst { @Before public void init() { fxt.Clear(); fxt.Init_data_img_basic("A.png", 0, 220, 110); - } private Hdump_html_mgr_fxt fxt = new Hdump_html_mgr_fxt(); + } private final Xohd_abrv_mgr_fxt fxt = new Xohd_abrv_mgr_fxt(); @Test public void Img() { fxt .Init_body("") .Test_html(""); @@ -101,8 +101,8 @@ public class Hdump_html_mgr_tst { )); } } -class Hdump_html_mgr_fxt { - private Hdump_html_body html_mgr; +class Xohd_abrv_mgr_fxt { + private Xohd_abrv_mgr abrv_mgr; private Bry_bfr bfr = Bry_bfr.reset_(255); private ListAdp img_list = ListAdp_.new_(); private Xowe_wiki wiki; @@ -110,25 +110,25 @@ class Hdump_html_mgr_fxt { public void Clear() { Xoae_app app = Xoa_app_fxt.app_(); wiki = Xoa_app_fxt.wiki_tst_(app); - html_mgr = wiki.Db_mgr().Hdump_mgr().Html_mgr(); + abrv_mgr = new Xohd_abrv_mgr(Gfo_usr_dlg_._, app.Fsys_mgr(), app.Utl__encoder_mgr().Fsys(), wiki.Domain_bry()); } public void Clear_imgs() {img_list.Clear();} - public Hdump_html_mgr_fxt Init_body(String body) {hpg.Page_body_(Bry_.new_utf8_(body)); return this;} - public Hdump_html_mgr_fxt Init_data_gly(int uid, int box_max) {hpg.Gly_itms().Add(uid, new Hdump_data_gallery(uid, box_max)); return this;} - public Hdump_html_mgr_fxt Init_data_img_basic(String ttl, int html_uid, int html_w, int html_h) { - Hdump_data_img__basic img = new Hdump_data_img__basic(); - img.Init_by_base(Bry_.new_utf8_(ttl), html_uid, html_w, html_h, Hdump_data_img__base.File_repo_id_commons, Xof_ext_.Id_png, Bool_.N, html_w, Xof_doc_thumb.Null, Xof_doc_page.Null); + public Xohd_abrv_mgr_fxt Init_body(String body) {hpg.Page_body_(Bry_.new_utf8_(body)); return this;} + public Xohd_abrv_mgr_fxt Init_data_gly(int uid, int box_max) {hpg.Gly_itms().Add(uid, new Xohd_data_itm__gallery_mgr(uid, box_max)); return this;} + public Xohd_abrv_mgr_fxt Init_data_img_basic(String ttl, int html_uid, int html_w, int html_h) { + Xohd_data_itm__img img = new Xohd_data_itm__img(); + img.Init_by_base(Bry_.new_utf8_(ttl), Xop_lnki_type.Id_none, Xof_img_size.Null, Xof_img_size.Null, Xof_img_size.Upright_null, html_uid, html_w, html_h, Xohd_data_itm__base.File_repo_id_commons, Xof_ext_.Id_png, Bool_.N, html_w, Xof_doc_thumb.Null, Xof_doc_page.Null); img_list.Add(img); return this; } - public Hdump_html_mgr_fxt Init_data_img_gly(String ttl, int html_uid, int html_w, int html_h, int box_w, int img_w, int img_pad) { - Hdump_data_img__gallery img = new Hdump_data_img__gallery(); + public Xohd_abrv_mgr_fxt Init_data_img_gly(String ttl, int html_uid, int html_w, int html_h, int box_w, int img_w, int img_pad) { + Xohd_data_itm__gallery_itm img = new Xohd_data_itm__gallery_itm(); img.Init_by_gallery(box_w, img_w, img_pad); - img.Init_by_base(Bry_.new_utf8_(ttl), html_uid, html_w, html_h, Hdump_data_img__base.File_repo_id_commons, Xof_ext_.Id_png, Bool_.N, html_w, Xof_doc_thumb.Null, Xof_doc_page.Null); + img.Init_by_base(Bry_.new_utf8_(ttl), Xop_lnki_type.Id_none, Xof_img_size.Null, Xof_img_size.Null, Xof_img_size.Upright_null, html_uid, html_w, html_h, Xohd_data_itm__base.File_repo_id_commons, Xof_ext_.Id_png, Bool_.N, html_w, Xof_doc_thumb.Null, Xof_doc_page.Null); img_list.Add(img); return this; } - public Hdump_html_mgr_fxt Init_data_redlink(int max, int... uids) { + public Xohd_abrv_mgr_fxt Init_data_redlink(int max, int... uids) { int[] ary = new int[max + ListAdp_.Base1]; int uids_len = uids.length; for (int i = 0; i < uids_len; ++i) { @@ -138,10 +138,10 @@ class Hdump_html_mgr_fxt { hpg.Redlink_uids_(ary); return this; } - public Hdump_html_mgr_fxt Test_html(String expd) { - if (img_list.Count() > 0) hpg.Img_itms_((Hdump_data_img__base[])img_list.Xto_ary_and_clear(Hdump_data_img__base.class)); - html_mgr.Init_by_page(wiki.Domain_bry(), hpg).Write(bfr); - Tfds.Eq_str_lines(expd, bfr.Xto_str_and_clear()); + public Xohd_abrv_mgr_fxt Test_html(String expd) { + if (img_list.Count() > 0) hpg.Img_itms_((Xohd_data_itm__base[])img_list.Xto_ary_and_clear(Xohd_data_itm__base.class)); + byte[] actl = abrv_mgr.Parse(bfr, hpg); + Tfds.Eq_str_lines(expd, String_.new_utf8_(actl)); return this; } } diff --git a/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_hdump_bldr.java b/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_hdump_bldr.java new file mode 100644 index 000000000..01259f749 --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_hdump_bldr.java @@ -0,0 +1,97 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.html.hdumps.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.hdumps.*; +import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; +import gplx.xowa.wikis.data.*; +import gplx.xowa.html.hdumps.data.*; import gplx.xowa.html.hzips.*; +import gplx.xowa.pages.*; import gplx.xowa2.gui.*; +public class Xob_hdump_bldr { + private final Xowe_core_data_mgr core_data_mgr; + private final Xodump_stats_itm stats_itm = new Xodump_stats_itm(); private final Xodump_stats_tbl stats_tbl = new Xodump_stats_tbl(); + private final Xog_page tmp_hpg = new Xog_page(); private final Bry_bfr tmp_bfr = Bry_bfr.reset_(Io_mgr.Len_mb); + private final Xohd_page_html_mgr__save hdump_save_mgr = new Xohd_page_html_mgr__save(); + private Xowd_db_file hdump_db; private Xohd_page_html_tbl hdump_tbl; private long hdump_db_size, hdump_db_max; + public Xob_hdump_bldr(Xodb_mgr_sql db_mgr, Db_conn make_conn, long hdump_db_max) { + this.core_data_mgr = db_mgr.Core_data_mgr(); this.hdump_db_max = hdump_db_max; + stats_tbl.Conn_(make_conn, Bool_.Y); + } + public void Bld_init() { + Db_init(core_data_mgr.Dbs__get_by_tid_nth_or_new(Xowd_db_file_.Tid_html), core_data_mgr.Tbl__cfg().Select_as_long_or(Cfg_grp_hdump_make, Cfg_itm_hdump_size, 0)); + hdump_db.Conn().Txn_mgr().Txn_bgn_if_none(); + } + public void Bld_term() { + this.Commit(); + Db_term(); + } + public void Insert_page(Xoae_page page) { + Hzip_data(page); + tmp_hpg.Ctor_from_page(tmp_bfr, page); + int row_len = hdump_save_mgr.Insert(tmp_bfr, hdump_tbl, tmp_hpg, page.Hdump_data()); + stats_tbl.Insert(tmp_hpg, stats_itm, page.Root().Root_src().length, tmp_hpg.Page_body().length, row_len); + hdump_db_size += row_len; + if (hdump_db_size > hdump_db_max) { + Db_term(); + Db_init(Xowd_db_init_wkr__html.I.Db_make(core_data_mgr), 0); + } + } + public void Commit() { + core_data_mgr.Dbs__save(); // commit new html_dbs + hdump_db.Conn().Txn_mgr().Txn_end_all_bgn_if_none(); // commit entries + core_data_mgr.Tbl__cfg().Update(Cfg_grp_hdump_make, Cfg_itm_hdump_size, Long_.Xto_str(hdump_db_size)); // update cfg; should happen after commit entries + } + private void Db_init(Xowd_db_file hdump_db, long hdump_db_size) { + this.hdump_db = hdump_db; + this.hdump_db_size = hdump_db_size; + this.hdump_tbl = Xohd_page_html_tbl.Get_from_db(core_data_mgr, hdump_db); + } + private void Db_term() { + Db_conn hdump_db_conn = hdump_db.Conn(); + hdump_db_conn.Txn_mgr().Txn_end_all(); // commit transactions + hdump_tbl.Create_idx(); + Sqlite_engine_.Db_attach(hdump_db_conn, "page_db", core_data_mgr.Dbs__get_db_core().Url().Raw()); // update page_db.page with page_html_db_id + hdump_db_conn.Txn_mgr().Txn_bgn(); + hdump_db_conn.Exec_sql(String_.Format(Sql_update_page_html_db_id, hdump_db.Id())); + hdump_db_conn.Txn_mgr().Txn_end(); + Sqlite_engine_.Db_detach(hdump_db_conn, "page_db"); + hdump_db_conn.Conn_term(); // release conn + } + private static final String Cfg_grp_hdump_make = "hdump.make", Cfg_itm_hdump_size = "hdump.size"; + private static final String Sql_update_page_html_db_id = String_.Concat_lines_nl_skip_last + ( "REPLACE INTO page_db.page (page_id, page_namespace, page_title, page_is_redirect, page_touched, page_len, page_random_int, page_file_idx, page_redirect_id, page_html_db_id)" + , "SELECT p.page_id" + , ", p.page_namespace" + , ", p.page_title" + , ", p.page_is_redirect" + , ", p.page_touched" + , ", p.page_len" + , ", p.page_random_int" + , ", p.page_file_idx" + , ", p.page_redirect_id" + , ", {0}" + , "FROM page_db.page p" + , " JOIN wiki_page_html h ON p.page_id = h.page_id" + ); + private void Hzip_data(Xoae_page page) { + Xowe_wiki wiki = page.Wikie(); + Xow_hzip_mgr hzip_mgr = wiki.Html_mgr().Hzip_mgr(); + page.File_queue().Clear(); // need to reset uid to 0, else xowa_file_# will resume from last + wiki.Html_mgr().Page_wtr_mgr().Wkr(Xopg_view_mode.Tid_read).Write_body(tmp_bfr, Xoh_wtr_ctx.Hdump, page); // write to html again, except in hdump mode + hzip_mgr.Write(tmp_bfr, stats_itm, page.Url().Xto_full_bry(), tmp_bfr.Xto_bry_and_clear()); // hzip data + page.Hdump_data().Body_(tmp_bfr.Xto_bry_and_clear()); // write to body bry + } +} diff --git a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_img_bldr.java b/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_hdump_img_cmd.java similarity index 75% rename from 400_xowa/src/gplx/xowa/hdumps/core/Hdump_img_bldr.java rename to 400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_hdump_img_cmd.java index 2f44a9d39..aabc8faad 100644 --- a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_img_bldr.java +++ b/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_hdump_img_cmd.java @@ -15,12 +15,13 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa.hdumps.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -import gplx.dbs.*; import gplx.xowa.hdumps.dbs.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.oimgs.*; +package gplx.xowa.html.hdumps.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.hdumps.*; +import gplx.dbs.*; import gplx.xowa.html.hdumps.data.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.oimgs.*; import gplx.xowa.html.hdumps.core.*; +import gplx.xowa.files.*; import gplx.xowa2.gui.*; -class Hdump_img_bldr_cmd extends Xob_itm_basic_base implements Xob_cmd { - private Xodb_wiki_page_html_tbl text_tbl = new Xodb_wiki_page_html_tbl(); - public Hdump_img_bldr_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} +class Xob_hdump_img_cmd extends Xob_itm_basic_base implements Xob_cmd { + private Xohd_page_html_tbl text_tbl = new Xohd_page_html_tbl(); + public Xob_hdump_img_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Cmd_key() {return Key_const;} public static final String Key_const = "hdump.make.imgs"; public void Cmd_ini(Xob_bldr bldr) {} public void Cmd_bgn(Xob_bldr bldr) {} @@ -48,13 +49,13 @@ class Hdump_img_bldr_cmd extends Xob_itm_basic_base implements Xob_cmd { boolean file_is_orig = rdr.Read_int(7) == 1; double file_time = rdr.Read_double(8); int file_page = rdr.Read_int(9); - Hdump_data_img__base.Data_write_static(bfr, 0, lnki_ttl, html_uid, html_w, html_h, file_repo_id, file_ext_id, file_is_orig, html_w, file_time, file_page); + Xohd_data_itm__base.Data_write_static(bfr, 0, lnki_ttl, Byte_.Zero, 0, 0, Xof_img_size.Upright_null, html_uid, html_w, html_h, file_repo_id, file_ext_id, file_is_orig, html_w, file_time, file_page); } Save(cur_page_id, bfr.Xto_bry_and_clear());; } private void Save(int page_id, byte[] data) { if (page_id == -1 || data.length == 0) return; - text_tbl.Insert(page_id, Hdump_data_tid.Tid_img, data); + text_tbl.Insert(page_id, Xohd_data_tid.Tid_img, data); } private static final String Sql_select = String_.Concat_lines_nl_skip_last ( "SELECT lt.lnki_page_id" @@ -86,10 +87,10 @@ class Page_async_cmd__img implements Page_async_cmd { public Page_async_cmd__img(Xog_page hpg) {this.hpg = hpg;} public void Prep() { int len = hpg.Img_count(); - Hdump_data_img__base[] ary = hpg.Img_itms(); + Xohd_data_itm__base[] ary = hpg.Img_itms(); missing.Clear(); for (int i = 0; i < len; ++i) { - Hdump_data_img__base itm = ary[i]; + Xohd_data_itm__base itm = ary[i]; boolean exists = Io_mgr._.ExistsFil(itm.File_url()); if (!exists) missing.Add(itm); } @@ -97,7 +98,7 @@ class Page_async_cmd__img implements Page_async_cmd { public void Exec() { int len = missing.Count(); for (int i = 0; i < len; ++i) { -// Hdump_data_img__base itm = (Hdump_data_img__base)missing.FetchAt(i); +// Xohd_data_itm__base itm = (Xohd_data_itm__base)missing.FetchAt(i); // byte[] bytes = null; //fsdb.Db_get()ttl, file_w,....): // Write file(bytes); } diff --git a/400_xowa/src/gplx/xowa/hdumps/core/Xob_lnki_regy_mgr.java b/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_lnki_regy_mgr.java similarity index 90% rename from 400_xowa/src/gplx/xowa/hdumps/core/Xob_lnki_regy_mgr.java rename to 400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_lnki_regy_mgr.java index 77adadda8..ccabdbf96 100644 --- a/400_xowa/src/gplx/xowa/hdumps/core/Xob_lnki_regy_mgr.java +++ b/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_lnki_regy_mgr.java @@ -15,10 +15,10 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa.hdumps.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; +package gplx.xowa.html.hdumps.bldrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.hdumps.*; import gplx.core.brys.*; import gplx.dbs.*; import gplx.xowa.bldrs.oimgs.*; -class Redlink_regy_mgr { +class Xob_lnki_regy_mgr { private final OrderedHash hash = OrderedHash_.new_bry_(); private final Bry_bfr tmp_bfr = Bry_bfr.reset_(255); private Rl_dump_tbl dump_tbl = new Rl_dump_tbl(); private Db_stmt dump_insert; private int itm_count, itm_max = 10000000; @@ -27,16 +27,16 @@ class Redlink_regy_mgr { } public void Page_bgn(int page_id) {this.page_id = page_id;} private int page_id; public void Add(int uid, int ns_id, byte[] ttl) { - Redlink_regy_itm regy_itm = Get_or_new(ns_id, ttl); + Xob_lnki_regy_itm regy_itm = Get_or_new(ns_id, ttl); regy_itm.Pages().Add(new Redlink_page_itm(page_id, uid)); if (++itm_count > itm_max) Save(); } - private Redlink_regy_itm Get_or_new(int ns_id, byte[] ttl) { + private Xob_lnki_regy_itm Get_or_new(int ns_id, byte[] ttl) { byte[] hash_key = tmp_bfr.Add_int_variable(ns_id).Add_byte_pipe().Add(ttl).Xto_bry_and_clear(); - Redlink_regy_itm rv = (Redlink_regy_itm)hash.Fetch(hash_key); + Xob_lnki_regy_itm rv = (Xob_lnki_regy_itm)hash.Fetch(hash_key); if (rv == null) { - rv = new Redlink_regy_itm(hash_key, ns_id, ttl); + rv = new Xob_lnki_regy_itm(hash_key, ns_id, ttl); hash.Add(hash_key, rv); } return rv; @@ -44,13 +44,13 @@ class Redlink_regy_mgr { public void Save() { int len = hash.Count(); for (int i = 0; i < len; ++i) { - Redlink_regy_itm itm = (Redlink_regy_itm)hash.FetchAt(i); + Xob_lnki_regy_itm itm = (Xob_lnki_regy_itm)hash.FetchAt(i); dump_tbl.Insert(dump_insert, itm.Ns_id(), itm.Ttl(), itm.Pages_to_bry(tmp_bfr)); } } } -class Redlink_regy_itm { - public Redlink_regy_itm(byte[] key, int ns_id, byte[] ttl) {this.key = key; this.ns_id = ns_id; this.ttl = ttl;} +class Xob_lnki_regy_itm { + public Xob_lnki_regy_itm(byte[] key, int ns_id, byte[] ttl) {this.key = key; this.ns_id = ns_id; this.ttl = ttl;} public byte[] Key() {return key;} private final byte[] key; public int Ns_id() {return ns_id;} private final int ns_id; public byte[] Ttl() {return ttl;} private final byte[] ttl; diff --git a/400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_itm.java b/400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_itm.java new file mode 100644 index 000000000..46a925892 --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_itm.java @@ -0,0 +1,23 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.html.hdumps.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.hdumps.*; +public interface Xohd_data_itm { + int Data_tid(); + void Data_write(Bry_bfr bfr); + String Data_print(); +} diff --git a/400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_itm__base.java b/400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_itm__base.java new file mode 100644 index 000000000..ff305f37d --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_itm__base.java @@ -0,0 +1,86 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.html.hdumps.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.hdumps.*; +import gplx.xowa.html.hdumps.data.*; import gplx.xowa.files.repos.*; +public abstract class Xohd_data_itm__base implements Xohd_data_itm { + public Xohd_data_itm__base Init_by_base(byte[] lnki_ttl, byte lnki_type, int lnki_w, int lnki_h, double lnki_upright, int html_uid, int html_w, int html_h, int file_repo_id, int lnki_ext, boolean file_is_orig, int file_w, double lnki_time, int lnki_page) { + this.lnki_ttl = lnki_ttl; this.lnki_type = lnki_type; this.lnki_w = lnki_w; this.lnki_h = lnki_h; this.lnki_upright = lnki_upright; + this.html_uid = html_uid; this.html_w = html_w; this.html_h = html_h; + this.file_repo_id = file_repo_id; this.lnki_ext = lnki_ext; + this.file_is_orig = file_is_orig; this.file_w = file_w; this.lnki_time = lnki_time; this.lnki_page = lnki_page; + return this; + } + public abstract int Img_tid(); + public int Data_tid() {return Xohd_data_tid.Tid_img;} + public byte[] Lnki_ttl() {return lnki_ttl;} private byte[] lnki_ttl; + public int Lnki_ext() {return lnki_ext;} private int lnki_ext; + public byte Lnki_type() {return lnki_type;} private byte lnki_type; + public int Lnki_w() {return lnki_w;} private int lnki_w; + public int Lnki_h() {return lnki_h;} private int lnki_h; + public double Lnki_upright() {return lnki_upright;} private double lnki_upright; + public double Lnki_time() {return lnki_time;} private double lnki_time; + public int Lnki_page() {return lnki_page;} private int lnki_page; + public int Html_uid() {return html_uid;} private int html_uid; + public int Html_w() {return html_w;} private int html_w; + public int Html_h() {return html_h;} private int html_h; + public int File_repo_id() {return file_repo_id;} private int file_repo_id; + public boolean File_is_orig() {return file_is_orig;} private boolean file_is_orig; + public int File_w() {return file_w;} private int file_w; + public Io_url File_url() {return file_url;} public void File_url_(Io_url v) {file_url = v;} private Io_url file_url; + public void Data_write(Bry_bfr bfr) { + Data_write_static(bfr, this.Img_tid(), lnki_ttl, lnki_type, lnki_w, lnki_h, lnki_upright, html_uid, html_w, html_h, file_repo_id, lnki_ext, file_is_orig, file_w, lnki_time, lnki_page); + Data_write_hook(bfr); + bfr.Add_byte_nl(); + } + public String Data_print() { + return String_.Concat_with_str("|", Int_.Xto_str(this.Img_tid()), String_.new_utf8_(lnki_ttl), Int_.Xto_str(html_uid), Int_.Xto_str(html_w), Int_.Xto_str(html_h) + , Int_.Xto_str(file_repo_id), Int_.Xto_str(lnki_ext), Yn.Xto_str(file_is_orig), Int_.Xto_str(file_w), Double_.Xto_str(lnki_time), Int_.Xto_str(lnki_page) + ); + } + public static void Data_write_static(Bry_bfr bfr, int img_tid + , byte[] lnki_ttl, byte lnki_type, int lnki_w, int lnki_h, double lnki_upright + , int html_uid, int html_w, int html_h + , int file_repo_id, int lnki_ext, boolean file_is_orig, int file_w, double lnki_time, int lnki_page) { + bfr .Add_int_variable(Xohd_data_tid.Tid_img).Add_byte_pipe() + .Add_int_variable(img_tid).Add_byte_pipe() + .Add(lnki_ttl).Add_byte_pipe() + .Add_int_variable(lnki_ext).Add_byte_pipe() + .Add_byte(lnki_type).Add_byte_pipe() + .Add_int_variable(lnki_w).Add_byte_pipe() + .Add_int_variable(lnki_h).Add_byte_pipe() + .Add_double(lnki_upright).Add_byte_pipe() + .Add_double(lnki_time).Add_byte_pipe() + .Add_int_variable(lnki_page).Add_byte_pipe() + .Add_int_variable(html_uid).Add_byte_pipe() + .Add_int_variable(html_w).Add_byte_pipe() + .Add_int_variable(html_h).Add_byte_pipe() + .Add_int_variable(file_repo_id).Add_byte_pipe() + .Add_yn(file_is_orig).Add_byte_pipe() + .Add_int_variable(file_w).Add_byte_pipe() + ; + } + @gplx.Virtual public void Data_write_hook(Bry_bfr bfr) {} + @Override public String toString() {return this.Data_print();} // TEST + public static final int Tid_basic = 0, Tid_gallery = 1; + public static final int + File_repo_id_commons = Xof_repo_itm.Repo_remote + , File_repo_id_local = Xof_repo_itm.Repo_local + , File_repo_id_null = Xof_repo_itm.Repo_null + ; + public static final Xohd_data_itm__base[] Ary_empty = new Xohd_data_itm__base[0]; +} diff --git a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_img__gallery.java b/400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_itm__gallery_itm.java similarity index 76% rename from 400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_img__gallery.java rename to 400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_itm__gallery_itm.java index 9c21b84ce..517fa1a76 100644 --- a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_img__gallery.java +++ b/400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_itm__gallery_itm.java @@ -15,10 +15,10 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa.hdumps.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -public class Hdump_data_img__gallery extends Hdump_data_img__base { - @Override public int Img_tid() {return Hdump_data_img__base.Tid_gallery;} - public Hdump_data_img__base Init_by_gallery(int box_w, int img_w, int img_pad) { +package gplx.xowa.html.hdumps.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.hdumps.*; +public class Xohd_data_itm__gallery_itm extends Xohd_data_itm__base { + @Override public int Img_tid() {return Xohd_data_itm__base.Tid_gallery;} + public Xohd_data_itm__base Init_by_gallery(int box_w, int img_w, int img_pad) { this.box_w = box_w; this.img_w = img_w; this.img_pad = img_pad; diff --git a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_gallery.java b/400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_itm__gallery_mgr.java similarity index 72% rename from 400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_gallery.java rename to 400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_itm__gallery_mgr.java index efda36754..33f1b228e 100644 --- a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_gallery.java +++ b/400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_itm__gallery_mgr.java @@ -15,15 +15,15 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa.hdumps.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -public class Hdump_data_gallery implements Hdump_data_itm { - public Hdump_data_gallery(int uid, int box_max) { +package gplx.xowa.html.hdumps.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.hdumps.*; +public class Xohd_data_itm__gallery_mgr implements Xohd_data_itm { + public Xohd_data_itm__gallery_mgr(int uid, int box_max) { this.uid = uid; this.box_max = box_max; } - public int Data_tid() {return Hdump_data_tid.Tid_gallery;} + public int Data_tid() {return Xohd_data_tid.Tid_gallery;} public void Data_write(Bry_bfr bfr) { - bfr .Add_int_variable(Hdump_data_tid.Tid_gallery).Add_byte_pipe() + bfr .Add_int_variable(Xohd_data_tid.Tid_gallery).Add_byte_pipe() .Add_int_variable(box_max).Add_byte_pipe() ; bfr.Add_byte_nl(); diff --git a/400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_itm__img.java b/400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_itm__img.java new file mode 100644 index 000000000..95b587f9d --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_itm__img.java @@ -0,0 +1,21 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.html.hdumps.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.hdumps.*; +public class Xohd_data_itm__img extends Xohd_data_itm__base { + @Override public int Img_tid() {return Xohd_data_itm__base.Tid_basic;} +} diff --git a/400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_tid.java b/400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_tid.java new file mode 100644 index 000000000..9a5282275 --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_tid.java @@ -0,0 +1,26 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.html.hdumps.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.hdumps.*; +public class Xohd_data_tid { // SERIALIZED + public static final int + Tid_img = 1 + , Tid_redlink = 2 + , Tid_gallery = 3 + , Tid_imap = 4 + ; +} diff --git a/400_xowa/src/gplx/xowa/html/hdumps/data/Xohd_page_html_mgr__load.java b/400_xowa/src/gplx/xowa/html/hdumps/data/Xohd_page_html_mgr__load.java new file mode 100644 index 000000000..62bc04e9e --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/hdumps/data/Xohd_page_html_mgr__load.java @@ -0,0 +1,93 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.html.hdumps.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.hdumps.*; +import gplx.core.brys.*; import gplx.core.btries.*; import gplx.dbs.*; import gplx.ios.*; +import gplx.xowa.dbs.*; import gplx.xowa.pages.*; import gplx.xowa.html.hdumps.core.*; import gplx.xowa.html.hdumps.data.*; import gplx.xowa.html.hdumps.pages.*; import gplx.xowa.pages.skins.*; import gplx.xowa.html.hdumps.data.srl.*; +import gplx.xowa.wikis.data.*; import gplx.xowa2.gui.*; +public class Xohd_page_html_mgr__load { + private final Xohd_page_srl_mgr srl_mgr = Xohd_page_srl_mgr.I; + private final Bry_rdr rdr = new Bry_rdr(); private final ListAdp rows = ListAdp_.new_(), imgs = ListAdp_.new_(); + public void Load_page(Xog_page hpg, Xohd_page_html_tbl tbl, int page_id, Xoa_ttl page_ttl) { + tbl.Select_by_page(rows, page_id); + Parse_rows(hpg, page_id, Xoa_url.blank_(), page_ttl, rows); + } + public void Parse_rows(Xog_page hpg, int page_id, Xoa_url page_url, Xoa_ttl page_ttl, ListAdp rows) { // TEST: + hpg.Init(page_id, page_url, page_ttl); + imgs.Clear(); + int len = rows.Count(); + for (int i = 0; i < len; ++i) { + Xohd_page_html_row row = (Xohd_page_html_row)rows.FetchAt(i); + switch (row.Tid()) { + case Xohd_page_html_row.Tid_html: srl_mgr.Load(hpg, row.Data()); break; + case Xohd_page_html_row.Tid_img: + case Xohd_page_html_row.Tid_redlink: + Parse_data(hpg, row); break; + } + } + rows.Clear(); + } + private void Parse_data(Xog_page hpg, Xohd_page_html_row row) { + rdr.Src_(row.Data()); + while (!rdr.Pos_is_eos()) { + int tid = rdr.Read_int_to_pipe(); + switch (tid) { + case Xohd_data_tid.Tid_img : Load_data_img(); break; // 1|0|A.png|0|220|110|... + case Xohd_data_tid.Tid_gallery : Load_data_gallery(hpg); break; // 3|0|800 + case Xohd_data_tid.Tid_redlink : Load_data_redlink(hpg); break; // 2|2|0|1 + } + } + if (imgs.Count() > 0) hpg.Img_itms_((Xohd_data_itm__base[])imgs.Xto_ary_and_clear(Xohd_data_itm__base.class)); + } + private void Load_data_img() { + int tid = rdr.Read_int_to_pipe(); + byte[] lnki_ttl = rdr.Read_bry_to_pipe(); + int lnki_ext = rdr.Read_int_to_pipe(); + byte lnki_type = rdr.Read_byte_to_pipe(); + int lnki_w = rdr.Read_int_to_pipe(); + int lnki_h = rdr.Read_int_to_pipe(); + double lnki_upright = rdr.Read_double_to_pipe(); + double lnki_time = rdr.Read_double_to_pipe(); + int lnki_page = rdr.Read_int_to_pipe(); + int html_uid = rdr.Read_int_to_pipe(); + int html_w = rdr.Read_int_to_pipe(); + int html_h = rdr.Read_int_to_pipe(); + int file_repo_id = rdr.Read_int_to_pipe(); + boolean file_is_orig = rdr.Read_yn_to_pipe(); + int file_w = rdr.Read_int_to_pipe(); + Xohd_data_itm__base img_itm = null; + switch (tid) { + case Xohd_data_itm__base.Tid_basic : img_itm = new Xohd_data_itm__img(); break; + case Xohd_data_itm__base.Tid_gallery : img_itm = new Xohd_data_itm__gallery_itm().Init_by_gallery(rdr.Read_int_to_pipe(), rdr.Read_int_to_pipe(), rdr.Read_int_to_pipe()); break; + } + img_itm.Init_by_base(lnki_ttl, lnki_type, lnki_w, lnki_h, lnki_upright, html_uid, html_w, html_h, file_repo_id, lnki_ext, file_is_orig, file_w, lnki_time, lnki_page); + rdr.Pos_add_one(); + imgs.Add(img_itm); + } + private void Load_data_redlink(Xog_page hpg) { + int len = rdr.Read_int_to_pipe(); + int[] redlink_uids = new int[len]; + for (int i = 0; i < len; ++i) + redlink_uids[i] = rdr.Read_int_to_pipe(); + hpg.Redlink_uids_(redlink_uids); + } + private void Load_data_gallery(Xog_page hpg) { + int uid = rdr.Read_int_to_pipe(); + int box_max = rdr.Read_int_to_pipe(); + hpg.Gly_itms().Add(uid, new Xohd_data_itm__gallery_mgr(uid, box_max)); + } +} diff --git a/400_xowa/src/gplx/xowa/html/hdumps/data/Xohd_page_html_mgr__save.java b/400_xowa/src/gplx/xowa/html/hdumps/data/Xohd_page_html_mgr__save.java new file mode 100644 index 000000000..c253b016c --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/hdumps/data/Xohd_page_html_mgr__save.java @@ -0,0 +1,54 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.html.hdumps.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.hdumps.*; +import gplx.xowa.html.hdumps.core.*; import gplx.xowa.html.hdumps.data.srl.*; +import gplx.xowa2.gui.*; import gplx.xowa.html.hdumps.pages.*; import gplx.xowa.parsers.lnkis.redlinks.*; +public class Xohd_page_html_mgr__save { + private Xohd_page_srl_mgr srl_mgr = Xohd_page_srl_mgr.I; + public void Update(Bry_bfr tmp_bfr, Xohd_page_html_tbl tbl, Xoae_page page) { + Xog_page hpg = new Xog_page(); + hpg.Ctor_from_page(tmp_bfr, page); + tbl.Delete(page.Revision_data().Id()); + this.Insert(tmp_bfr, tbl, hpg, page.Hdump_data()); + } + public int Insert(Bry_bfr tmp_bfr, Xohd_page_html_tbl tbl, Xog_page hpg, Xopg_hdump_data hdump_data) { + int rv = 0; + int page_id = hpg.Page_id(); + rv += Insert_row(tbl, page_id, Xohd_page_html_row.Tid_html , srl_mgr.Save(hpg, tmp_bfr)); + rv += Insert_row(tbl, page_id, Xohd_page_html_row.Tid_img , Write_imgs(tmp_bfr, hdump_data.Imgs())); + rv += Insert_row(tbl, page_id, Xohd_page_html_row.Tid_redlink , Write_redlinks(tmp_bfr, hdump_data.Redlink_mgr())); + return rv; + } + private int Insert_row(Xohd_page_html_tbl tbl, int page_id, int row_tid, byte[] bry) {return bry == null ? 0 : tbl.Insert(page_id, row_tid, bry);} + public static byte[] Write_redlinks(Bry_bfr bfr, Xopg_redlink_idx_list redlink_mgr) { + int len = redlink_mgr.Len(); if (len == 0) return null; + bfr.Add_int_variable(redlink_mgr.Max()); + for (int i = 0; i < len; ++i) { + bfr.Add_byte_pipe().Add_int_variable(redlink_mgr.Get_at(i)); + } + return bfr.Xto_bry_and_clear(); + } + public static byte[] Write_imgs(Bry_bfr bfr, ListAdp imgs) { + int len = imgs.Count(); if (len == 0) return null; // no images; exit early, else will write blank String + for (int i = 0; i < len; ++i) { + Xohd_data_itm itm = (Xohd_data_itm)imgs.FetchAt(i); + itm.Data_write(bfr); + } + return bfr.Xto_bry_and_clear(); + } +} diff --git a/400_xowa/src/gplx/xowa/html/hdumps/data/Xohd_page_html_row.java b/400_xowa/src/gplx/xowa/html/hdumps/data/Xohd_page_html_row.java new file mode 100644 index 000000000..859449ab0 --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/hdumps/data/Xohd_page_html_row.java @@ -0,0 +1,29 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.html.hdumps.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.hdumps.*; +public class Xohd_page_html_row { + public Xohd_page_html_row(int page_id, int tid, byte[] data) {this.page_id = page_id; this.tid = tid; this.data = data;} + public int Page_id() {return page_id;} private final int page_id; + public int Tid() {return tid;} private final int tid; + public byte[] Data() {return data;} private final byte[] data; + public static final int // SERIALIZED + Tid_html = 0 + , Tid_img = 1 + , Tid_redlink = 2 + ; +} diff --git a/400_xowa/src/gplx/xowa/html/hdumps/data/Xohd_page_html_tbl.java b/400_xowa/src/gplx/xowa/html/hdumps/data/Xohd_page_html_tbl.java new file mode 100644 index 000000000..7caaa8313 --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/hdumps/data/Xohd_page_html_tbl.java @@ -0,0 +1,74 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.html.hdumps.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.hdumps.*; +import gplx.ios.*; import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.dbs.*; +import gplx.xowa.wikis.data.*; +public class Xohd_page_html_tbl { + private String tbl_name = "wiki_page_html"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); + private String fld_db_id, fld_page_id, fld_html_tid, fld_html_data; + private Db_conn conn; private Db_stmt stmt_select, stmt_insert, stmt_delete; private int db_id; private byte zip_tid; + private final Io_stream_zip_mgr zip_mgr = Xoa_app_.Utl__zip_mgr(); + public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1, int db_id, byte zip_tid) { + this.conn = new_conn; flds.Clear(); this.db_id = db_id; this.zip_tid = zip_tid; + if (schema_is_1) { + fld_db_id = Db_meta_fld.Key_null; + } + else { + fld_db_id = flds.Add_int("db_id"); + } + fld_page_id = flds.Add_int("page_id"); + fld_html_tid = flds.Add_int("html_tid"); + fld_html_data = flds.Add_bry("html_data"); + if (created) { + Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds); + conn.Exec_create_tbl_and_idx(meta); + } + stmt_select = stmt_insert = stmt_delete = null; + } + public int Insert(int page_id, int tid, byte[] data) { + if (stmt_insert == null) stmt_insert = conn.Rls_reg(conn.Stmt_insert(tbl_name, flds)); + data = zip_mgr.Zip(zip_tid, data); + stmt_insert.Clear().Val_int(fld_db_id, db_id).Val_int(fld_page_id, page_id).Val_int(fld_html_tid, tid).Val_bry(fld_html_data, data).Exec_insert(); + return data.length; + } + public void Delete(int page_id) { + if (stmt_delete == null) stmt_delete = conn.Rls_reg(conn.Stmt_delete(tbl_name, String_.Ary_wo_null(fld_db_id, fld_page_id))); + stmt_delete.Clear().Crt_int(fld_db_id, db_id).Crt_int(fld_page_id, page_id).Exec_delete(); + } + public void Select_by_page(ListAdp rv, int page_id) { + if (stmt_select == null) stmt_select = conn.Rls_reg(conn.Stmt_select(tbl_name, flds, String_.Ary_wo_null(fld_db_id, fld_page_id))); + Db_rdr rdr = Db_rdr_.Null; + try { + rdr = stmt_select.Clear().Crt_int(fld_db_id, db_id).Crt_int(fld_page_id, page_id).Exec_select_as_rdr(); + while (rdr.Move_next()) { + Xohd_page_html_row row = new Xohd_page_html_row + ( rdr.Read_int(fld_page_id) + , rdr.Read_int(fld_html_tid) + , zip_mgr.Unzip(zip_tid, rdr.Read_bry(fld_html_data)) + ); + rv.Add(row); + } + } + finally {rdr.Rls();} + } + public void Create_idx() { + conn.Exec_create_idx(Gfo_usr_dlg_._, Db_meta_idx.new_unique_by_tbl_wo_null(tbl_name, "pkey", fld_db_id, fld_page_id, fld_html_tid)); + } + public static final String Hash_key = "wiki_page_html"; + public static Xohd_page_html_tbl Get_from_db(Xow_core_data_mgr core_data_mgr, Xowd_db_file db_file) {return (Xohd_page_html_tbl)db_file.Tbls__get_by(core_data_mgr, Hash_key);} +} diff --git a/400_xowa/src/gplx/xowa/html/hdumps/data/srl/Xohd_page_srl_itm.java b/400_xowa/src/gplx/xowa/html/hdumps/data/srl/Xohd_page_srl_itm.java new file mode 100644 index 000000000..db79bd6bc --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/hdumps/data/srl/Xohd_page_srl_itm.java @@ -0,0 +1,46 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.html.hdumps.data.srl; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.hdumps.*; import gplx.xowa.html.hdumps.data.*; +import gplx.core.primitives.*; import gplx.xowa.html.hzips.*; import gplx.xowa2.gui.*; +public interface Xohd_page_srl_itm { // INFO: serializes Xog_page to a byte[] before storing in the wiki_page_html table + byte Tid(); + void Save(Xog_page hpg, Bry_bfr bfr); + int Load(Xog_page hpg, byte[] bry, int bry_len, int itm_bgn, Int_obj_ref count_ref); +} +abstract class Xohd_page_srl_itm__base implements Xohd_page_srl_itm { + public abstract byte Tid(); + protected void Save_tid_n_() {save_tid = false;} private boolean save_tid = true; + public void Save(Xog_page hpg, Bry_bfr bfr) { + byte[] bry = Save_itm(hpg); if (bry == null) return; // subclasses return null if nothing to save + int len = bry.length; if (len == 0) return; // don't bother saving 0-len + if (save_tid) // body doesn't save tid + bfr.Add_byte(this.Tid()); + Xow_hzip_int_.Save_bin_int_abrv(bfr, len); + bfr.Add(bry); + } + public abstract byte[] Save_itm(Xog_page hpg); + public int Load(Xog_page hpg, byte[] bry, int bry_len, int itm_bgn, Int_obj_ref count_ref) { + int itm_len = Xow_hzip_int_.Load_bin_int_abrv(bry, bry_len, itm_bgn, count_ref); if (itm_len == -1) throw Err_.new_("bry_itm has invalid len: page={0} tid={1}", hpg.Page_id(), this.Tid()); + int data_bgn = itm_bgn + count_ref.Val(); if (itm_len == 0) return data_bgn; + int data_end = data_bgn + itm_len; + byte[] itm_data = Bry_.Mid(bry, data_bgn, data_end); + this.Load_itm(hpg, itm_data); + return data_end - itm_bgn; + } + public abstract void Load_itm(Xog_page hpg, byte[] data); +} diff --git a/400_xowa/src/gplx/xowa/html/hdumps/data/srl/Xohd_page_srl_itm_.java b/400_xowa/src/gplx/xowa/html/hdumps/data/srl/Xohd_page_srl_itm_.java new file mode 100644 index 000000000..0f3458f62 --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/hdumps/data/srl/Xohd_page_srl_itm_.java @@ -0,0 +1,34 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.html.hdumps.data.srl; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.hdumps.*; import gplx.xowa.html.hdumps.data.*; +public class Xohd_page_srl_itm_ { + public static final byte // SERIALIZED + Tid_body = 0 + , Tid_html_module = 1 + , Tid_display_ttl = 2 + , Tid_content_sub = 3 + , Tid_sidebar_div = 4 + ; + public static final Xohd_page_srl_itm[] Itms = new Xohd_page_srl_itm[] // NOTE: ary_idx must match tid above + { new Xohd_page_srl_itm__body() + , new Xohd_page_srl_itm__html_module() + , new Xohd_page_srl_itm__display_ttl() + , new Xohd_page_srl_itm__content_sub() + , new Xohd_page_srl_itm__sidebar_div() + }; +} diff --git a/400_xowa/src/gplx/xowa/html/hdumps/data/srl/Xohd_page_srl_itm_tst.java b/400_xowa/src/gplx/xowa/html/hdumps/data/srl/Xohd_page_srl_itm_tst.java new file mode 100644 index 000000000..b6447b8de --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/hdumps/data/srl/Xohd_page_srl_itm_tst.java @@ -0,0 +1,98 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.html.hdumps.data.srl; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.hdumps.*; import gplx.xowa.html.hdumps.data.*; +import org.junit.*; import gplx.xowa.html.hdumps.core.*; import gplx.xowa.html.hzips.*; import gplx.xowa.html.hdumps.pages.*; +import gplx.xowa2.gui.*; +public class Xohd_page_srl_itm_tst { + @Before public void init() {fxt.Clear();} private Xohd_page_srl_itm_fxt fxt = new Xohd_page_srl_itm_fxt(); + @Test public void Body() { + fxt.Test_page(fxt.Make_page().Body_("A"), fxt.Make_srl_body("A")); + } + @Test public void Html_modules() { + fxt.Test_page(fxt.Make_page().Body_("A").Html_modules_(Bool_.Y, Bool_.N, Bool_.Y, Bool_.N), fxt.Make_srl_body("A"), fxt.Make_srl_html_modules(Bool_.Y, Bool_.N, Bool_.Y, Bool_.N)); + } + @Test public void Body_all() { + fxt.Test_page(fxt.Make_page().Body_("A").Html_modules_(Bool_.Y, Bool_.N, Bool_.Y, Bool_.N).Display_ttl_("B").Content_sub_("C").Sidebar_div_("D") + , fxt.Make_srl_body("A") + , fxt.Make_srl_html_modules(Bool_.Y, Bool_.N, Bool_.Y, Bool_.N) + , fxt.Make_srl_display_ttl("B") + , fxt.Make_srl_content_sub("C") + , fxt.Make_srl_sidebar_div("D") + ); + } +} +class Xohd_page_srl_itm_fxt { + private final Bry_bfr bfr = Bry_bfr.reset_(8); + public void Clear() {bfr.Clear();} + public Xog_page_bldr Make_page() {return new Xog_page_bldr();} + public Xohd_page_srl_itm_mok Make_srl_body(String s) {return Make_srl(Xohd_page_srl_itm_.Tid_body, s);} + public Xohd_page_srl_itm_mok Make_srl_display_ttl(String s) {return Make_srl(Xohd_page_srl_itm_.Tid_display_ttl, s);} + public Xohd_page_srl_itm_mok Make_srl_content_sub(String s) {return Make_srl(Xohd_page_srl_itm_.Tid_content_sub, s);} + public Xohd_page_srl_itm_mok Make_srl_sidebar_div(String s) {return Make_srl(Xohd_page_srl_itm_.Tid_sidebar_div, s);} + public Xohd_page_srl_itm_mok Make_srl(byte tid, String s) {return new Xohd_page_srl_itm_mok(tid, Bry_.new_utf8_(s));} + public Xohd_page_srl_itm_mok Make_srl_html_modules(boolean... v) { + return new Xohd_page_srl_itm_mok(Xohd_page_srl_itm_.Tid_html_module, new byte[] {Xohd_page_srl_itm__html_module.Calc_flag(v[0], v[1], v[2], v[3])}); + } + public void Test_page(Xog_page_bldr hpg_bldr, Xohd_page_srl_itm_mok... expd_itms) { + Xog_page hpg = hpg_bldr.Bld(); + byte[] actl = Xohd_page_srl_mgr.I.Save(hpg, bfr); + Tfds.Eq_ary(Xohd_page_srl_itm_mok.Xto_bry(bfr, expd_itms), actl); + Xog_page actl_hpg = new Xog_page(); + Xohd_page_srl_mgr.I.Load(actl_hpg, actl); + Tfds.Eq_ary(actl, Xohd_page_srl_mgr.I.Save(hpg, bfr)); + } +} +class Xog_page_bldr { + public byte[] Body() {return body;} public Xog_page_bldr Body_(String v) {body = Bry_.new_utf8_(v); return this;} private byte[] body; + public boolean[] Html_modules() {return html_modules;} public Xog_page_bldr Html_modules_(boolean... v) {html_modules = v; return this;} private boolean[] html_modules; + public byte[] Display_ttl() {return display_ttl;} public Xog_page_bldr Display_ttl_(String v) {display_ttl = Bry_.new_utf8_(v); return this;} private byte[] display_ttl; + public byte[] Content_sub() {return content_sub;} public Xog_page_bldr Content_sub_(String v) {content_sub = Bry_.new_utf8_(v); return this;} private byte[] content_sub; + public byte[] Sidebar_div() {return sidebar_div;} public Xog_page_bldr Sidebar_div_(String v) {sidebar_div = Bry_.new_utf8_(v); return this;} private byte[] sidebar_div; + public Xog_page Bld() { + Xog_page rv = new Xog_page(); + rv.Page_body_(body); + Xopg_module_mgr mod_mgr = rv.Module_mgr(); + if (html_modules != null) { + mod_mgr.Math_exists_(html_modules[0]); + mod_mgr.Imap_exists_(html_modules[1]); + mod_mgr.Gallery_packed_exists_(html_modules[2]); + mod_mgr.Hiero_exists_(html_modules[3]); + } + rv.Display_ttl_(display_ttl); + rv.Content_sub_(content_sub); + rv.Sidebar_div_(sidebar_div); + return rv; + } +} +class Xohd_page_srl_itm_mok { + public Xohd_page_srl_itm_mok(byte tid, byte[] data) {this.tid = tid; this.data = data;} + public byte Tid() {return tid;} private final byte tid; + public int Len() {return data.length;} + public byte[] Data() {return data;} private final byte[] data; + public static byte[] Xto_bry(Bry_bfr bfr, Xohd_page_srl_itm_mok[] ary) { + int len = ary.length; + for (int i = 0; i < len; ++i) { + Xohd_page_srl_itm_mok itm = ary[i]; + if (itm.Tid() != Xohd_page_srl_itm_.Tid_body) + bfr.Add_byte(itm.Tid()); + Xow_hzip_int_.Save_bin_int_abrv(bfr, itm.Len()); + bfr.Add(itm.Data()); + } + return bfr.Xto_bry_and_clear(); + } +} diff --git a/400_xowa/src/gplx/xowa/html/hdumps/data/srl/Xohd_page_srl_itms.java b/400_xowa/src/gplx/xowa/html/hdumps/data/srl/Xohd_page_srl_itms.java new file mode 100644 index 000000000..cd8f6bc50 --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/hdumps/data/srl/Xohd_page_srl_itms.java @@ -0,0 +1,75 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.html.hdumps.data.srl; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.hdumps.*; import gplx.xowa.html.hdumps.data.*; +import gplx.core.primitives.*; import gplx.xowa.html.hdumps.core.*; import gplx.xowa.html.hzips.*; import gplx.xowa.html.hdumps.pages.*; +import gplx.xowa2.gui.*; +class Xohd_page_srl_itm__body extends Xohd_page_srl_itm__base { + public Xohd_page_srl_itm__body() {this.Save_tid_n_();} + @Override public byte Tid() {return Xohd_page_srl_itm_.Tid_body;} + @Override public byte[] Save_itm(Xog_page hpg) {return hpg.Page_body();} + @Override public void Load_itm(Xog_page hpg, byte[] data) {hpg.Page_body_(data);} +} +class Xohd_page_srl_itm__display_ttl extends Xohd_page_srl_itm__base { + @Override public byte Tid() {return Xohd_page_srl_itm_.Tid_display_ttl;} + @Override public byte[] Save_itm(Xog_page hpg) {return hpg.Display_ttl();} + @Override public void Load_itm(Xog_page hpg, byte[] data) {hpg.Display_ttl_(data);} +} +class Xohd_page_srl_itm__content_sub extends Xohd_page_srl_itm__base { + @Override public byte Tid() {return Xohd_page_srl_itm_.Tid_content_sub;} + @Override public byte[] Save_itm(Xog_page hpg) {return hpg.Content_sub();} + @Override public void Load_itm(Xog_page hpg, byte[] data) {hpg.Content_sub_(data);} +} +class Xohd_page_srl_itm__sidebar_div extends Xohd_page_srl_itm__base { + @Override public byte Tid() {return Xohd_page_srl_itm_.Tid_sidebar_div;} + @Override public byte[] Save_itm(Xog_page hpg) {return hpg.Sidebar_div();} + @Override public void Load_itm(Xog_page hpg, byte[] data) {hpg.Sidebar_div_(data);} +} +class Xohd_page_srl_itm__html_module implements Xohd_page_srl_itm { + public byte Tid() {return Xohd_page_srl_itm_.Tid_html_module;} + public int Load(Xog_page hpg, byte[] bry, int bry_len, int itm_bgn, Int_obj_ref count_ref) { + itm_bgn += 2; // skip bin_int_abrv of [1, 0] + byte flag = bry[itm_bgn]; + hpg.Module_mgr().Init(Enm_.Has_byte(flag, Tid_math), Enm_.Has_byte(flag, Tid_imap), Enm_.Has_byte(flag, Tid_packed), Enm_.Has_byte(flag, Tid_hiero)); + return 3; + } + public void Save(Xog_page hpg, Bry_bfr bfr) { + byte flag = Calc_flag(hpg); + if (flag == 0) return; + bfr.Add_byte(this.Tid()); + Xow_hzip_int_.Save_bin_int_abrv(bfr, 1); + bfr.Add_byte(flag); + } + private static byte Calc_flag(Xog_page hpg) { + Xopg_module_mgr module_mgr = hpg.Module_mgr(); + return Calc_flag(module_mgr.Math_exists(), module_mgr.Imap_exists(), module_mgr.Gallery_packed_exists(), module_mgr.Hiero_exists()); + } + public static byte Calc_flag(boolean math, boolean imap, boolean packed, boolean hiero) { + byte rv = 0; + if (math) rv = Enm_.Add_byte(rv, Tid_math); + if (imap) rv = Enm_.Add_byte(rv, Tid_imap); + if (packed) rv = Enm_.Add_byte(rv, Tid_packed); + if (hiero) rv = Enm_.Add_byte(rv, Tid_hiero); + return rv; + } + private static final byte // SERIALIZED; only supports 8 different types + Tid_math = 1 + , Tid_imap = 2 + , Tid_packed = 4 + , Tid_hiero = 8 + ; +} diff --git a/400_xowa/src/gplx/xowa/html/hdumps/data/srl/Xohd_page_srl_mgr.java b/400_xowa/src/gplx/xowa/html/hdumps/data/srl/Xohd_page_srl_mgr.java new file mode 100644 index 000000000..af05a302b --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/hdumps/data/srl/Xohd_page_srl_mgr.java @@ -0,0 +1,44 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.html.hdumps.data.srl; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.hdumps.*; import gplx.xowa.html.hdumps.data.*; +import gplx.core.primitives.*; import gplx.xowa.html.hdumps.core.*; +import gplx.xowa2.gui.*; +public class Xohd_page_srl_mgr { + private final Xohd_page_srl_itm[] itm_ary; private final Xohd_page_srl_itm itm_body; + private final Int_obj_ref count_ref = Int_obj_ref.zero_(); + public Xohd_page_srl_mgr(Xohd_page_srl_itm[] itm_ary) { + this.itm_ary = itm_ary; + this.itm_body = itm_ary[0]; + } + public byte[] Save(Xog_page hpg, Bry_bfr bfr) { + for (Xohd_page_srl_itm itm : itm_ary) + itm.Save(hpg, bfr); + return bfr.Xto_bry_and_clear(); + } + public void Load(Xog_page hpg, byte[] bry) { + if (bry == null) return; + int bry_len = bry.length; if (bry_len == 0) return; + int pos = itm_body.Load(hpg, bry, bry_len, 0, count_ref); // assume every page has a body; saves 1 byte by not specifying tid for body + while (pos < bry_len) { + byte itm_tid = bry[pos]; // itm_tid is always 1-byte + Xohd_page_srl_itm itm = itm_ary[itm_tid]; // itm_tid always matches itm_ary's idx + pos += itm.Load(hpg, bry, bry_len, pos + 1, count_ref) + 1; // +1 to skip tid + } + } + public static final Xohd_page_srl_mgr I = new Xohd_page_srl_mgr(Xohd_page_srl_itm_.Itms); +} diff --git a/400_xowa/src/gplx/xowa/html/hdumps/pages/Xopg_hdump_data.java b/400_xowa/src/gplx/xowa/html/hdumps/pages/Xopg_hdump_data.java new file mode 100644 index 000000000..f050b705b --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/hdumps/pages/Xopg_hdump_data.java @@ -0,0 +1,36 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.html.hdumps.pages; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.hdumps.*; +import gplx.xowa.html.hdumps.core.*; import gplx.xowa.files.*; +import gplx.xowa.parsers.lnkis.redlinks.*; +public class Xopg_hdump_data { + public byte[] Body() {return body;} public void Body_(byte[] v) {body = v;} private byte[] body; + public Xopg_redlink_idx_list Redlink_mgr() {return redlink_mgr;} private final Xopg_redlink_idx_list redlink_mgr = new Xopg_redlink_idx_list(); + public ListAdp Imgs() {return imgs;} private final ListAdp imgs = ListAdp_.new_(); + public void Imgs_add(Xohd_data_itm itm) {imgs.Add(itm);} + public void Imgs_add_img(Xohd_data_itm__base img, Xof_xfer_itm xfer, int tid) { + img.Init_by_base(xfer.Lnki_ttl(), xfer.Lnki_type(), xfer.Lnki_w(), xfer.Lnki_h(), xfer.Lnki_upright(), xfer.Html_uid(), xfer.Html_w(), xfer.Html_h() + , xfer.Trg_repo_idx(), xfer.Lnki_ext().Id(), xfer.Img_is_orig(), xfer.File_w(), xfer.Lnki_time(), xfer.Lnki_page()); + imgs.Add(img); + } + public void Clear() { + body = null; + imgs.Clear(); + redlink_mgr.Clear(); + } +} diff --git a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_module_mgr.java b/400_xowa/src/gplx/xowa/html/hdumps/pages/Xopg_module_mgr.java similarity index 90% rename from 400_xowa/src/gplx/xowa/hdumps/core/Hdump_module_mgr.java rename to 400_xowa/src/gplx/xowa/html/hdumps/pages/Xopg_module_mgr.java index f38f7cceb..57bfc4b7b 100644 --- a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_module_mgr.java +++ b/400_xowa/src/gplx/xowa/html/hdumps/pages/Xopg_module_mgr.java @@ -15,8 +15,8 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa.hdumps.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -public class Hdump_module_mgr { +package gplx.xowa.html.hdumps.pages; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.html.hdumps.*; +public class Xopg_module_mgr { public boolean Math_exists() {return math_exists;} public void Math_exists_(boolean v) {math_exists = v;} private boolean math_exists; public boolean Imap_exists() {return imap_exists;} public void Imap_exists_(boolean v) {imap_exists = v;} private boolean imap_exists; public boolean Gallery_packed_exists() {return gallery_packed_exists;} public void Gallery_packed_exists_(boolean v) {gallery_packed_exists = v;} private boolean gallery_packed_exists; diff --git a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_stats.java b/400_xowa/src/gplx/xowa/html/hzips/Xodump_stats_itm.java similarity index 97% rename from 400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_stats.java rename to 400_xowa/src/gplx/xowa/html/hzips/Xodump_stats_itm.java index a13d8331b..804b5e6f9 100644 --- a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_stats.java +++ b/400_xowa/src/gplx/xowa/html/hzips/Xodump_stats_itm.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.html.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; -public class Xow_hzip_stats { +public class Xodump_stats_itm { public void Clear() { a_rhs = lnki_text_n = lnki_text_y = lnke_txt = lnke_brk_text_n = lnke_brk_text_y = 0; hdr_1 = hdr_2 = hdr_3 = hdr_4 = hdr_5 = hdr_6 = 0; diff --git a/400_xowa/src/gplx/xowa/html/hzips/Xodump_stats_tbl.java b/400_xowa/src/gplx/xowa/html/hzips/Xodump_stats_tbl.java new file mode 100644 index 000000000..e5bd0842c --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/hzips/Xodump_stats_tbl.java @@ -0,0 +1,76 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.html.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; +import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; import gplx.xowa.html.hdumps.core.*; import gplx.xowa.html.hzips.*; import gplx.xowa.html.hdumps.pages.*; +import gplx.xowa2.gui.*; +public class Xodump_stats_tbl { + private static final String tbl_name = "hdump_stats"; private static final Db_meta_fld_list flds = Db_meta_fld_list.new_(); + private static final String + fld_page_id = flds.Add_int("page_id"), fld_wtxt_len = flds.Add_int("wtxt_len"), fld_row_orig_len = flds.Add_int("row_orig_len"), fld_row_zip_len = flds.Add_int("row_zip_len") + , fld_body_len = flds.Add_int("body_len"), fld_display_ttl_len = flds.Add_int("display_ttl_len"), fld_content_sub_len = flds.Add_int("content_sub_len"), fld_sidebar_div_len = flds.Add_int("sidebar_div_len") + , fld_js_math = flds.Add_int("js_math"), fld_js_imap = flds.Add_int("js_imap"), fld_js_packed = flds.Add_int("js_packed"), fld_js_hiero = flds.Add_int("js_hiero") + , fld_a_rhs = flds.Add_int("a_rhs"), fld_lnki_text_n = flds.Add_int("lnki_text_n"), fld_lnki_text_y = flds.Add_int("lnki_text_y") + , fld_lnke_txt = flds.Add_int("lnke_txt"), fld_lnke_brk_text_n = flds.Add_int("lnke_brk_text_n"), fld_lnke_brk_text_y = flds.Add_int("lnke_brk_text_y") + , fld_hdr_1 = flds.Add_int("hdr_1"), fld_hdr_2 = flds.Add_int("hdr_2"), fld_hdr_3 = flds.Add_int("hdr_3"), fld_hdr_4 = flds.Add_int("hdr_4"), fld_hdr_5 = flds.Add_int("hdr_5"), fld_hdr_6 = flds.Add_int("hdr_6") + , fld_img_full = flds.Add_int("img_full") + ; + private Db_conn conn; private Db_stmt stmt_insert; + public Xodump_stats_tbl Conn_(Db_conn new_conn, boolean created) { + this.conn = new_conn; + if (created) { + Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds + , Db_meta_idx.new_unique_by_tbl(tbl_name, "pkey", fld_page_id) + ); + conn.Exec_create_tbl_and_idx(meta); + } + stmt_insert = null; + return this; + } + public void Insert(Xog_page hpg, Xodump_stats_itm hzip, int wtxt_len, int row_orig_len, int row_zip_len) { + Xopg_module_mgr js_mgr = hpg.Module_mgr(); + if (stmt_insert == null) stmt_insert = conn.Rls_reg(conn.Stmt_insert(tbl_name, flds)); + stmt_insert.Clear() + .Val_int(fld_page_id , hpg.Page_id()) + .Val_int(fld_wtxt_len , wtxt_len) + .Val_int(fld_row_orig_len , row_orig_len) + .Val_int(fld_row_zip_len , row_zip_len) + .Val_int(fld_body_len , Len_or_0(hpg.Page_body())) + .Val_int(fld_display_ttl_len , Len_or_0(hpg.Display_ttl())) + .Val_int(fld_content_sub_len , Len_or_0(hpg.Content_sub())) + .Val_int(fld_sidebar_div_len , Len_or_0(hpg.Sidebar_div())) + .Val_bool_as_byte(fld_js_math , js_mgr.Math_exists()) + .Val_bool_as_byte(fld_js_imap , js_mgr.Imap_exists()) + .Val_bool_as_byte(fld_js_packed , js_mgr.Gallery_packed_exists()) + .Val_bool_as_byte(fld_js_hiero , js_mgr.Hiero_exists()) + .Val_int(fld_a_rhs , hzip.A_rhs()) + .Val_int(fld_lnki_text_n , hzip.Lnki_text_n()) + .Val_int(fld_lnki_text_y , hzip.Lnki_text_y()) + .Val_int(fld_lnke_txt , hzip.Lnke_txt()) + .Val_int(fld_lnke_brk_text_n , hzip.Lnke_brk_text_n()) + .Val_int(fld_lnke_brk_text_y , hzip.Lnke_brk_text_y()) + .Val_int(fld_hdr_1 , hzip.Hdr_1()) + .Val_int(fld_hdr_2 , hzip.Hdr_2()) + .Val_int(fld_hdr_3 , hzip.Hdr_3()) + .Val_int(fld_hdr_4 , hzip.Hdr_4()) + .Val_int(fld_hdr_5 , hzip.Hdr_5()) + .Val_int(fld_hdr_6 , hzip.Hdr_6()) + .Val_int(fld_img_full , hzip.Img_full()) + .Exec_insert(); + } + private int Len_or_0(byte[] bry) {return bry == null ? 0 : bry.length;} +} diff --git a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_int_.java b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_int_.java new file mode 100644 index 000000000..65ab86d6f --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_int_.java @@ -0,0 +1,64 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.html.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; +import gplx.core.primitives.*; +public class Xow_hzip_int_ { + private static final int Base_255_int = 255; + private static final byte Base_255_byte = (byte)255; + public static byte[] Save_bin_int_abrv(int val_int) { + Bry_bfr bfr = Bry_bfr.reset_(10); + Save_bin_int_abrv(bfr, val_int); + return bfr.Xto_bry_and_clear(); + } + public static void Save_bin_int_abrv(Bry_bfr bfr, int val_int) { // save int in binary little endian form; range from -2,080,766,977 to 2,147,483,648; 255^4 or 4,228,250,625 + if (val_int == 0) {bfr.Add_byte(Byte_ascii.Nil); return;} + long val = val_int; + if (val < 0) val = Int_.MaxValue + -val; + int count = 0; + while (val > 0) { + byte mod = (byte)(val % Base_255_int); + int adj = 0; + if (mod == 0) {mod = Base_255_byte; adj = 1;} // if 0, then set byte to 255; also set adj to 1 to properly decrement value + bfr.Add_byte(mod); + ++count; + val = (val - adj) / Base_255_int; + } + if (count < 4) bfr.Add_byte(Byte_ascii.Nil); + } + public static int Load_bin_int_abrv(byte[] bry, int bry_len, int bgn, Int_obj_ref count_ref) { + int end = bgn + 4; // read no more than 4 bytes + int count = 0; + long rv = 0; int mult = 1; + for (int i = bgn; i < end; ++i) { + if (i == bry_len) break; + else { + ++count; + int b = bry[i] & 0xFF; // PATCH.JAVA:need to convert to unsigned byte + if (b == 0) break; + rv += (b * mult); + mult *= Base_255_int; + } + } + if (rv > Int_.MaxValue) { + rv -= Int_.MaxValue; + rv *= -1; + } + count_ref.Val_(count); + return (int)rv; + } +} diff --git a/400_xowa/src/gplx/xowa/hdumps/srls/Hpg_srl_itm__tst.java b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_int__tst.java similarity index 78% rename from 400_xowa/src/gplx/xowa/hdumps/srls/Hpg_srl_itm__tst.java rename to 400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_int__tst.java index d9b6da736..cb641c223 100644 --- a/400_xowa/src/gplx/xowa/hdumps/srls/Hpg_srl_itm__tst.java +++ b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_int__tst.java @@ -15,10 +15,10 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa.hdumps.srls; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; +package gplx.xowa.html.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import org.junit.*; import gplx.core.primitives.*; -public class Hpg_srl_itm__tst { - @Before public void init() {fxt.Clear();} private Hpg_srl_itm__fxt fxt = new Hpg_srl_itm__fxt(); +public class Xow_hzip_int__tst { + @Before public void init() {fxt.Clear();} private Xow_hzip_int__fxt fxt = new Xow_hzip_int__fxt(); @Test public void Srl() { fxt.Test_srl( 0, 0); fxt.Test_srl( 1, 1, 0); @@ -38,14 +38,14 @@ public class Hpg_srl_itm__tst { fxt.Test_srl( -2, 129, 129, 130, 129); } } -class Hpg_srl_itm__fxt { - private Bry_bfr bfr = Bry_bfr.reset_(8); private Int_obj_ref read = Int_obj_ref.zero_(); +class Xow_hzip_int__fxt { + private final Bry_bfr bfr = Bry_bfr.reset_(8); private final Int_obj_ref read = Int_obj_ref.zero_(); public void Clear() {bfr.Clear();} public void Test_srl(int val, int... bytes) { - Hpg_srl_itm_.Save_bin_int_abrv(bfr, val); + Xow_hzip_int_.Save_bin_int_abrv(bfr, val); byte[] save = bfr.Xto_bry_and_clear(); Tfds.Eq_ary(Bry_.ints_(bytes), save, "save"); - int load = Hpg_srl_itm_.Load_bin_int_abrv(save, save.length, 0, read); + int load = Xow_hzip_int_.Load_bin_int_abrv(save, save.length, 0, read); Tfds.Eq(val, load, "load"); Tfds.Eq(bytes.length, read.Val(), "load_read"); } diff --git a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__anchor.java b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__anchor.java index c7fca2b87..56daac6c3 100644 --- a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__anchor.java +++ b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__anchor.java @@ -16,17 +16,17 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.html.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; -import gplx.core.primitives.*; import gplx.core.brys.*; import gplx.html.*; import gplx.xowa.wikis.ttls.*; import gplx.xowa.hdumps.srls.*; +import gplx.core.primitives.*; import gplx.core.brys.*; import gplx.html.*; import gplx.xowa.wikis.ttls.*; public class Xow_hzip_itm__anchor { private Xow_hzip_mgr hzip_mgr; private Xow_ttl_parser ttl_parser; private Byte_obj_ref xtid_ref = Byte_obj_ref.zero_(); private Bry_rdr bry_rdr = new Bry_rdr(); public Xow_hzip_itm__anchor(Xow_hzip_mgr hzip_mgr, Xow_ttl_parser ttl_parser) {this.hzip_mgr = hzip_mgr; this.ttl_parser = ttl_parser;} - public int Save_a_rhs(Bry_bfr bfr, Xow_hzip_stats stats, byte[] src, int src_len, int bgn, int pos) { + public int Save_a_rhs(Bry_bfr bfr, Xodump_stats_itm stats, byte[] src, int src_len, int bgn, int pos) { bfr.Add(Xow_hzip_dict.Bry_a_rhs); stats.A_rhs_add(); return pos; } - public int Save(Bry_bfr bfr, Xow_hzip_stats stats, byte[] src, int src_len, int bgn, int pos) { + public int Save(Bry_bfr bfr, Xodump_stats_itm stats, byte[] src, int src_len, int bgn, int pos) { int xtid_end = Xow_hzip_xtid.Find_xtid(hzip_mgr, src, src_len, bgn, pos, xtid_ref); if (xtid_end == Xow_hzip_mgr.Unhandled) return Xow_hzip_mgr.Unhandled; byte xtid_val = xtid_ref.Val(); switch (xtid_val) { @@ -40,7 +40,7 @@ public class Xow_hzip_itm__anchor { } } private static int[] Save_img_full_pow = new int[] {0, 1, 2}; - private int Save_img_full(Bry_bfr bfr, Xow_hzip_stats stats, byte[] src, int src_len, int bgn, int pos) { + private int Save_img_full(Bry_bfr bfr, Xodump_stats_itm stats, byte[] src, int src_len, int bgn, int pos) { bfr.Add(Xow_hzip_dict.Bry_img_full); int xatrs_bgn = Bry_finder.Move_fwd(src, Find_img_xatrs, pos, src_len); if (xatrs_bgn == Bry_finder.Not_found) return hzip_mgr.Warn_by_pos_add_dflt("a.img_xatrs_missing", bgn, pos); bry_rdr.Src_(src).Pos_(xatrs_bgn); @@ -49,13 +49,13 @@ public class Xow_hzip_itm__anchor { int img_rel = bry_rdr.Read_int_to_pipe(); byte meta = (byte)Bit_.Shift_lhs_to_int(Save_img_full_pow, a_cls, a_rel, img_rel); bfr.Add_byte(meta); // meta - Hpg_srl_itm_.Save_bin_int_abrv(bfr, bry_rdr.Read_int_to_pipe()); // uid + Xow_hzip_int_.Save_bin_int_abrv(bfr, bry_rdr.Read_int_to_pipe()); // uid bfr.Add(bry_rdr.Read_bry_to_pipe()).Add_byte_pipe(); // img_cls_other bfr.Add(bry_rdr.Read_bry_to_apos()); // alt bfr.Add_byte(Xow_hzip_dict.Escape); return bry_rdr.Pos() + 2; // +2=/> } - public int Save_lnki(Bry_bfr bfr, Xow_hzip_stats stats, byte[] src, int src_len, int bgn, int pos, boolean caption) { + public int Save_lnki(Bry_bfr bfr, Xodump_stats_itm stats, byte[] src, int src_len, int bgn, int pos, boolean caption) { int ttl_bgn = Bry_finder.Find_fwd(src, Find_href_wiki_bry, pos, src_len); if (ttl_bgn == Bry_finder.Not_found) return Xow_hzip_mgr.Unhandled;//hzip_mgr.Warn_by_pos_add_dflt("a.ttl_bgn_missing", bgn, pos); ttl_bgn += Find_href_wiki_len; int ttl_end = Bry_finder.Find_fwd(src, Byte_ascii.Quote, ttl_bgn , src_len); if (ttl_end == Bry_finder.Not_found) return hzip_mgr.Warn_by_pos_add_dflt("a.ttl_end_missing", bgn, ttl_bgn); @@ -86,7 +86,7 @@ public class Xow_hzip_itm__anchor { return a_rhs_bgn + Find_a_rhs_bgn_len; } } - public int Save_lnke(Bry_bfr bfr, Xow_hzip_stats stats, byte[] src, int src_len, int bgn, int pos, byte xtid) {// http://a.org + public int Save_lnke(Bry_bfr bfr, Xodump_stats_itm stats, byte[] src, int src_len, int bgn, int pos, byte xtid) {// http://a.org int href_bgn = Bry_finder.Find_fwd(src, Find_href_bry, pos, src_len); if (href_bgn == Bry_finder.Not_found) return hzip_mgr.Warn_by_pos_add_dflt("a.href_missing", bgn, pos); href_bgn += Find_href_len; int href_end = Bry_finder.Find_fwd(src, Byte_ascii.Quote, href_bgn, src_len); if (href_end == Bry_finder.Not_found) return hzip_mgr.Warn_by_pos_add_dflt("a.href_missing", bgn, href_bgn); @@ -104,7 +104,7 @@ public class Xow_hzip_itm__anchor { int num_bgn = a_lhs_end + 2; // skip >[ int num_end = Bry_finder.Find_fwd(src, Byte_ascii.Brack_end, num_bgn, src_len); if (num_end == Bry_finder.Not_found) return hzip_mgr.Warn_by_pos_add_dflt("a.num_end_missing", bgn, href_end); int num = Bry_.Xto_int_or(src, num_bgn, num_end, -1); if (num == -1) return hzip_mgr.Warn_by_pos_add_dflt("a.num_invalid", num_bgn, num_end); - Hpg_srl_itm_.Save_bin_int_abrv(bfr, num); + Xow_hzip_int_.Save_bin_int_abrv(bfr, num); int a_rhs_bgn = num_end + 1; int a_rhs_end = a_rhs_bgn + Find_a_rhs_bgn_len; if (!Bry_.Match(src, a_rhs_bgn, a_rhs_end, Find_a_rhs_bgn_bry)) return hzip_mgr.Warn_by_pos_add_dflt("a.rhs_missing", bgn, href_end); @@ -128,7 +128,7 @@ public class Xow_hzip_itm__anchor { bfr.Add_str("").Add_mid(src, href_bgn, href_end).Add_str(""); return href_end + 1; // +1 to skip escape case Xow_hzip_dict.Tid_lnke_brk_text_n: - int num = Hpg_srl_itm_.Load_bin_int_abrv(src, src_len, href_end + 1, count_ref); + int num = Xow_hzip_int_.Load_bin_int_abrv(src, src_len, href_end + 1, count_ref); bfr.Add_str("[").Add_int_variable(num).Add_str("]"); return href_end + 1 + count_ref.Val(); // +1 to skip escape case Xow_hzip_dict.Tid_lnke_brk_text_y: diff --git a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__anchor_tst.java b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__anchor_tst.java index 95871365b..66efd4794 100644 --- a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__anchor_tst.java +++ b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__anchor_tst.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.html.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; -import org.junit.*; import gplx.xowa.html.*; import gplx.xowa.hdumps.srls.*; +import org.junit.*; import gplx.xowa.html.*; public class Xow_hzip_itm__anchor_tst { @Before public void init() {fxt.Clear();} private Xow_hzip_mgr_fxt fxt = new Xow_hzip_mgr_fxt(); @Test public void Srl_lnki_text_n() { @@ -68,7 +68,7 @@ public class Xow_hzip_itm__anchor_tst { fxt.Test_load(brys, "A1"); } @Test public void Srl_lnke_brk_n() { - byte[][] brys = Bry_.Ary(Xow_hzip_dict.Bry_lnke_brk_text_n, Bry_.new_ascii_("http://a.org"), Xow_hzip_dict.Escape_bry, Hpg_srl_itm_.Save_bin_int_abrv(123)); + byte[][] brys = Bry_.Ary(Xow_hzip_dict.Bry_lnke_brk_text_n, Bry_.new_ascii_("http://a.org"), Xow_hzip_dict.Escape_bry, Xow_hzip_int_.Save_bin_int_abrv(123)); fxt.Test_save(brys, "[123]"); fxt.Test_load(brys, "[123]"); } diff --git a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__file_tst.java b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__file_tst.java index 91ae25d1e..b7ac442d7 100644 --- a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__file_tst.java +++ b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__file_tst.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.html.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; -import org.junit.*; import gplx.xowa.html.*; import gplx.xowa.hdumps.srls.*; +import org.junit.*; import gplx.xowa.html.*; public class Xow_hzip_itm__file_tst { @Before public void init() {fxt.Clear();} private Xow_hzip_mgr_fxt fxt = new Xow_hzip_mgr_fxt(); @Test public void Srl_lnki_img_full() { diff --git a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__header.java b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__header.java index 6ace01bf3..0813d1cc7 100644 --- a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__header.java +++ b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__header.java @@ -16,11 +16,11 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.html.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; -import gplx.html.*; import gplx.xowa.wikis.ttls.*; import gplx.xowa.hdumps.srls.*; +import gplx.html.*; import gplx.xowa.wikis.ttls.*; public class Xow_hzip_itm__header { private Xow_hzip_mgr hzip_mgr; public Xow_hzip_itm__header(Xow_hzip_mgr hzip_mgr) {this.hzip_mgr = hzip_mgr;} - public int Save(Bry_bfr bfr, Xow_hzip_stats stats, byte[] src, int src_len, int bgn, int pos) {//

A

+ public int Save(Bry_bfr bfr, Xodump_stats_itm stats, byte[] src, int src_len, int bgn, int pos) {//

A

if (pos >= src_len) return Xow_hzip_mgr.Unhandled; byte hdr_num_byte = src[pos]; switch (hdr_num_byte) { diff --git a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__header_tst.java b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__header_tst.java index 617aed6c6..61879d663 100644 --- a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__header_tst.java +++ b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__header_tst.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.html.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; -import org.junit.*; import gplx.xowa.html.*; import gplx.xowa.hdumps.srls.*; +import org.junit.*; import gplx.xowa.html.*; public class Xow_hzip_itm__header_tst { @Before public void init() {fxt.Clear();} private Xow_hzip_mgr_fxt fxt = new Xow_hzip_mgr_fxt(); @Test public void Srl_basic() { diff --git a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__href.java b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__href.java index ff9e2c6ee..ced4aead3 100644 --- a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__href.java +++ b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_itm__href.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.html.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.core.btries.*; class Xow_hzip_itm__href { - public void Save(Bry_bfr bfr, Xow_hzip_stats stats, byte[] src, int src_len, int bgn, int pos, byte bgn_quote) { + public void Save(Bry_bfr bfr, Xodump_stats_itm stats, byte[] src, int src_len, int bgn, int pos, byte bgn_quote) { // // ignore anchors; EX: "#a" // int proto_bgn = pos; // int proto_end = Bry_finder.Find_fwd(src, Byte_ascii.Colon, proto_bgn, src_len); diff --git a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_mgr.java b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_mgr.java index 9d0689d6a..39973c9b6 100644 --- a/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_mgr.java +++ b/400_xowa/src/gplx/xowa/html/hzips/Xow_hzip_mgr.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.html.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.core.primitives.*; import gplx.core.btries.*; import gplx.xowa.wikis.ttls.*; public class Xow_hzip_mgr { - private Gfo_usr_dlg usr_dlg; + private final Gfo_usr_dlg usr_dlg; private byte[] page_url; private byte[] src; private int src_len; public Xow_hzip_mgr(Gfo_usr_dlg usr_dlg, Xow_ttl_parser ttl_parser) { this.usr_dlg = usr_dlg; @@ -27,13 +27,13 @@ public class Xow_hzip_mgr { } public Xow_hzip_itm__anchor Itm__anchor() {return itm__anchor;} private Xow_hzip_itm__anchor itm__anchor; public Xow_hzip_itm__header Itm__header() {return itm__header;} private Xow_hzip_itm__header itm__header; - public void Save(Bry_bfr bfr, Xow_hzip_stats stats, byte[] page_url, byte[] src) { + public void Write(Bry_bfr bfr, Xodump_stats_itm stats, byte[] page_url, byte[] src) { this.page_url = page_url; this.src = src; this.src_len = src.length; bfr.Clear(); stats.Clear(); int pos = 0, add_bgn = -1; while (pos < src_len) { byte b = src[pos]; - Object o = save_trie.Match_bgn_w_byte(b, src, pos, src_len); + Object o = btrie.Match_bgn_w_byte(b, src, pos, src_len); if (o == null) { if (add_bgn == -1) add_bgn = pos; ++pos; @@ -42,7 +42,7 @@ public class Xow_hzip_mgr { if (add_bgn != -1) {bfr.Add_mid(src, add_bgn, pos); add_bgn = -1;} byte tid = ((Byte_obj_val)o).Val(); int match_bgn = pos; - int match_end = save_trie.Match_pos(); + int match_end = btrie.Match_pos(); switch (tid) { case Tid_a_lhs: pos = itm__anchor.Save(bfr, stats, src, src_len, match_bgn, match_end); break; case Tid_a_rhs: pos = itm__anchor.Save_a_rhs(bfr, stats, src, src_len, match_bgn, match_end); break; @@ -57,26 +57,26 @@ public class Xow_hzip_mgr { } if (add_bgn != -1) bfr.Add_mid(src, add_bgn, src_len); } - public void Load(Bry_bfr bfr, byte[] page_url, byte[] src) { + public byte[] Parse(Bry_bfr rv, byte[] page_url, byte[] src) { this.page_url = page_url; this.src = src; this.src_len = src.length; int pos = 0, add_bgn = -1; - bfr.Clear(); + rv.Clear(); while (pos < src_len) { byte b = src[pos]; if (b == Xow_hzip_dict.Escape) { - if (add_bgn != -1) {bfr.Add_mid(src, add_bgn, pos); add_bgn = -1;} + if (add_bgn != -1) {rv.Add_mid(src, add_bgn, pos); add_bgn = -1;} int itm_pos = pos + 2; int tid_pos = pos + 1; if (tid_pos >= src_len) {Warn_by_pos("load.eos", pos, itm_pos); break;} byte tid = src[tid_pos]; switch (tid) { case Xow_hzip_dict.Tid_lnki_text_n: - case Xow_hzip_dict.Tid_lnki_text_y: pos = itm__anchor.Load_lnki(bfr, src, src_len, itm_pos, tid); break; + case Xow_hzip_dict.Tid_lnki_text_y: pos = itm__anchor.Load_lnki(rv, src, src_len, itm_pos, tid); break; case Xow_hzip_dict.Tid_lnke_txt: case Xow_hzip_dict.Tid_lnke_brk_text_n: - case Xow_hzip_dict.Tid_lnke_brk_text_y: pos = itm__anchor.Load_lnke(bfr, src, src_len, itm_pos, tid); break; - case Xow_hzip_dict.Tid_a_rhs: pos = itm_pos; bfr.Add_str(""); break; - case Xow_hzip_dict.Tid_hdr_lhs: pos = itm__header.Load(bfr, src, src_len, itm_pos); break; + case Xow_hzip_dict.Tid_lnke_brk_text_y: pos = itm__anchor.Load_lnke(rv, src, src_len, itm_pos, tid); break; + case Xow_hzip_dict.Tid_a_rhs: pos = itm_pos; rv.Add_str(""); break; + case Xow_hzip_dict.Tid_hdr_lhs: pos = itm__header.Load(rv, src, src_len, itm_pos); break; } } else { @@ -84,7 +84,8 @@ public class Xow_hzip_mgr { ++pos; } } - if (add_bgn != -1) bfr.Add_mid(src, add_bgn, src_len); + if (add_bgn != -1) rv.Add_mid(src, add_bgn, src_len); + return rv.Xto_bry_and_clear(); } public int Warn_by_pos_add_dflt(String err, int bgn, int end) {return Warn_by_pos(err, bgn, end, 32);} public int Warn_by_pos(String err, int bgn, int end) {return Warn_by_pos(err, bgn, end, 0);} @@ -99,7 +100,7 @@ public class Xow_hzip_mgr { , Tid_a_rhs = 1 , Tid_h_lhs = 2 ; - private Btrie_slim_mgr save_trie = Btrie_slim_mgr.cs_() + private Btrie_slim_mgr btrie = Btrie_slim_mgr.cs_() .Add_str_byte("" , Tid_a_rhs) .Add_str_byte(". package gplx.xowa.html.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; class Xow_hzip_mgr_fxt { private Bry_bfr bfr = Bry_bfr.reset_(Io_mgr.Len_mb); private Xow_hzip_mgr hzip_mgr; private Xowe_wiki wiki; - private Xow_hzip_stats stats = new Xow_hzip_stats(); + private Xodump_stats_itm stats = new Xodump_stats_itm(); public void Clear() { if (hzip_mgr == null) { Xoae_app app = Xoa_app_fxt.app_(); @@ -29,13 +29,13 @@ class Xow_hzip_mgr_fxt { public void Test_save(byte[][] expd_brys, String html) {Test_save(html, expd_brys);} public void Test_save(String html, byte[]... expd_brys) { byte[] expd = Bry_.Add(expd_brys); - hzip_mgr.Save(bfr, stats, Bry_.Empty, Bry_.new_utf8_(html)); + hzip_mgr.Write(bfr, stats, Bry_.Empty, Bry_.new_utf8_(html)); Tfds.Eq_ary(expd, bfr.Xto_bry_and_clear()); } public void Test_load(byte[][] src_brys, String expd) { byte[] src = Bry_.Add(src_brys); - hzip_mgr.Load(bfr, Bry_.Empty, src); - Tfds.Eq(expd, bfr.Xto_str_and_clear()); + src = hzip_mgr.Parse(bfr, Bry_.Empty, src); + Tfds.Eq(expd, String_.new_utf8_(src)); } public void Test_html(String html, String expd) { Xop_ctx ctx = wiki.Ctx(); Xop_parser parser = wiki.Parser(); Xop_tkn_mkr tkn_mkr = ctx.Tkn_mkr(); diff --git a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_arg_img_core__hdump.java b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_arg_img_core__hdump.java index 9c231a2b5..e06fe8f3c 100644 --- a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_arg_img_core__hdump.java +++ b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_arg_img_core__hdump.java @@ -24,7 +24,7 @@ public class Xoh_arg_img_core__hdump implements Xoh_arg_img_core { } public void XferAry(Bry_bfr bfr, int idx) { bfr.Add_byte_space(); - bfr.Add(gplx.xowa.hdumps.htmls.Hdump_html_consts.Key_img); + bfr.Add(gplx.xowa.html.hdumps.abrvs.Xohd_abrv_.Key_img); bfr.Add_int_variable(uid); bfr.Add_byte_apos(); } diff --git a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_html_fmtr__base.java b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_html_fmtr__base.java index 851ba3152..0b0caed06 100644 --- a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_html_fmtr__base.java +++ b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_html_fmtr__base.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.html.lnkis; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; -import gplx.xowa.files.*; import gplx.xowa.hdumps.htmls.*; +import gplx.xowa.files.*; import gplx.xowa.html.hdumps.abrvs.*; public class Xoh_file_html_fmtr__base implements Xoh_file_img_wkr { private final Xoh_arg_img_core arg_img_core; private Bry_bfr scratch_bfr = Bry_bfr.reset_(128); diff --git a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_html_fmtr__hdump.java b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_html_fmtr__hdump.java index 443c8dc99..07a1c8d46 100644 --- a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_html_fmtr__hdump.java +++ b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_html_fmtr__hdump.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.html.lnkis; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.html.*; -import gplx.xowa.files.*; import gplx.xowa.hdumps.htmls.*; +import gplx.xowa.files.*; import gplx.xowa.html.hdumps.abrvs.*; public class Xoh_file_html_fmtr__hdump extends Xoh_file_html_fmtr__base { private Bry_bfr tmp_bfr = Bry_bfr.reset_(128); @gplx.Internal @Override protected Xoh_arg_img_core New_arg_img_core() {return new Xoh_arg_img_core__hdump();} @@ -37,15 +37,15 @@ public class Xoh_file_html_fmtr__hdump extends Xoh_file_html_fmtr__base { // tmp_bfr.Add_str_ascii("'/>"); // } @Override public void Html_thumb_core(Bry_bfr bfr, int uid, byte[] div1_halign, int div2_width, byte[] div2_content) { - tmp_bfr.Add(Hdump_html_consts.Key_img_style); + tmp_bfr.Add(Xohd_abrv_.Key_img_style); tmp_bfr.Add_int_variable(uid); tmp_bfr.Add_byte_apos(); byte[] div2_width_repl = tmp_bfr.Xto_bry_and_clear(); fmtr_thumb_core.Bld_bfr_many(bfr, uid, div1_halign, div2_width_repl, div2_content); } - @Override public void Html_thumb_part_magnify(Bry_bfr bfr, int uid, byte[] a_href, byte[] a_title, byte[] img_src) {Write_xnde(bfr, Hdump_html_consts.Key_file_mgnf, uid);} - @Override public void Html_thumb_part_info(Bry_bfr bfr, int uid, byte[] a_href, byte[] img_src) {Write_xnde(bfr, Hdump_html_consts.Key_file_info, uid);} - @Override public void Html_thumb_part_play(Bry_bfr bfr, int uid, int a_width, int a_max_width, byte[] a_href, byte[] a_xowa_title, byte[] img_src) {Write_xnde(bfr, Hdump_html_consts.Key_file_play, uid);} + @Override public void Html_thumb_part_magnify(Bry_bfr bfr, int uid, byte[] a_href, byte[] a_title, byte[] img_src) {Write_xnde(bfr, Xohd_abrv_.Key_file_mgnf, uid);} + @Override public void Html_thumb_part_info(Bry_bfr bfr, int uid, byte[] a_href, byte[] img_src) {Write_xnde(bfr, Xohd_abrv_.Key_file_info, uid);} + @Override public void Html_thumb_part_play(Bry_bfr bfr, int uid, int a_width, int a_max_width, byte[] a_href, byte[] a_xowa_title, byte[] img_src) {Write_xnde(bfr, Xohd_abrv_.Key_file_play, uid);} public static void Write_xnde(Bry_bfr bfr, byte[] key, int uid) { bfr.Add(key); bfr.Add_int_variable(uid); diff --git a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_wtr__basic.java b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_wtr__basic.java index 7ef79f9a8..3ae21ff06 100644 --- a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_wtr__basic.java +++ b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_wtr__basic.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.html.lnkis; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; -import gplx.html.*; import gplx.xowa.files.*; import gplx.xowa.hdumps.core.*; +import gplx.html.*; import gplx.xowa.files.*; import gplx.xowa.html.hdumps.core.*; public class Xoh_file_wtr__basic { private final Xowe_wiki wiki; private final Xow_html_mgr html_mgr; private final Xoh_html_wtr html_wtr; private final Bry_bfr_mkr bfr_mkr; private final Bry_bfr scratch_bfr = Bry_bfr.reset_(Io_mgr.Len_kb); private final Xoh_lnki_text_fmtr media_alt_fmtr, caption_fmtr; @@ -24,7 +24,7 @@ public class Xoh_file_wtr__basic { private Xoh_file_html_fmtr__base html_fmtr = Xoh_file_html_fmtr__base.Base; private Xoae_page page; private boolean cfg_alt_defaults_to_caption; public Xoh_file_wtr__basic(Xowe_wiki wiki, Xow_html_mgr html_mgr, Xoh_html_wtr html_wtr) { - this.wiki = wiki; this.html_mgr = html_mgr; this.html_wtr = html_wtr; this.bfr_mkr = wiki.Utl_bry_bfr_mkr(); + this.wiki = wiki; this.html_mgr = html_mgr; this.html_wtr = html_wtr; this.bfr_mkr = wiki.Utl__bfr_mkr(); this.media_alt_fmtr = new Xoh_lnki_text_fmtr(bfr_mkr, html_wtr); this.caption_fmtr = new Xoh_lnki_text_fmtr(bfr_mkr, html_wtr); } @@ -80,7 +80,7 @@ public class Xoh_file_wtr__basic { this.Write_file_image(bfr, ctx, hctx, src, lnki, xfer_itm, uid, lnki_is_thumbable, div_width, lnki_halign, lnki_halign_bry, lnki_ttl, lnki_ext, lnki_href, img_view_src, img_orig_src, img_alt); } if (hctx.Mode_is_hdump() && Xof_html_elem.Tid_is_file(xfer_itm.Html_elem_tid())) { - page.Hdump_data().Data_add_img(new Hdump_data_img__basic(), xfer_itm, Hdump_data_img__gallery.Tid_basic); + page.Hdump_data().Imgs_add_img(new Xohd_data_itm__img(), xfer_itm, Xohd_data_itm__gallery_itm.Tid_basic); } } private void Write_file_ns_media(Bry_bfr bfr, Xop_ctx ctx, byte[] src, Xop_lnki_tkn lnki, byte[] img_orig_src) { @@ -139,7 +139,7 @@ public class Xoh_file_wtr__basic { byte[] link_ref = link_tkn.Dat_to_bry(src); byte[] link_ref_new = tmp_link_parser.Parse(tmp_bfr, tmp_url, wiki, link_ref, lnki_href); link_ref = link_ref_new == null ? lnki_href: link_ref_new; // if parse fails, then assign to lnki_href; EX:link={{{1}}} - link_ref = Xoa_app_.Utl_encoder_mgr().Href_quotes().Encode(link_ref); // must encode quotes; PAGE:en.w:List_of_cultural_heritage_sites_in_Punjab,_Pakistan; DATE:2014-07-16 + link_ref = Xoa_app_.Utl__encoder_mgr().Href_quotes().Encode(link_ref); // must encode quotes; PAGE:en.w:List_of_cultural_heritage_sites_in_Punjab,_Pakistan; DATE:2014-07-16 lnki_ttl = Bry_.Coalesce(lnki_ttl, tmp_link_parser.Html_xowa_ttl()); lnki_file_wkr.Html_full_img(bfr, hctx, page, xfer_itm, uid, link_ref, tmp_link_parser.Html_anchor_cls(), tmp_link_parser.Html_anchor_rel(), anchor_title, lnki_ttl, xfer_itm.Html_w(), xfer_itm.Html_h(), img_view_src, alt, img_cls_tid, img_cls_other); } diff --git a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_lnki_wtr.java b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_lnki_wtr.java index ff42262ce..16396f558 100644 --- a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_lnki_wtr.java +++ b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_lnki_wtr.java @@ -113,9 +113,9 @@ public class Xoh_lnki_wtr { Html_utl.Escape_html_to_bfr(bfr, lnki_title_bry, 0, lnki_title_bry.length, Bool_.N, Bool_.N, Bool_.N, Bool_.Y, Bool_.N); // escape title; DATE:2014-10-27 } if (hctx.Mode_is_hdump()) { - bfr.Add(gplx.xowa.hdumps.htmls.Hdump_html_consts.Html_redlink_bgn); + bfr.Add(gplx.xowa.html.hdumps.abrvs.Xohd_abrv_.Html_redlink_bgn); bfr.Add_int_variable(lnki.Html_id()); - bfr.Add(gplx.xowa.hdumps.htmls.Hdump_html_consts.Html_redlink_end); + bfr.Add(gplx.xowa.html.hdumps.abrvs.Xohd_abrv_.Html_redlink_end); } else { if (cfg.Lnki_visited() diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__globals.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__globals.java index 569f35b87..0da189ca1 100644 --- a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__globals.java +++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__globals.java @@ -52,7 +52,7 @@ public class Xoh_module_itm__globals implements Xoh_module_itm { wtr.Write_js_global_ini_atr_msg(wiki, Key_sort_ascending); wtr.Write_js_global_ini_atr_msg(wiki, Key_sort_descending); Xol_lang lang = wiki.Lang(); Xow_msg_mgr msg_mgr = wiki.Msg_mgr(); - Bry_bfr tmp_bfr = app.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = app.Utl__bfr_mkr().Get_b512(); tmp_wtr.Init(tmp_bfr); byte[] months_long = Html_js_table_months(tmp_wtr, msg_mgr, Xol_msg_itm_.Id_dte_month_name_january, Xol_msg_itm_.Id_dte_month_name_december); byte[] months_short = Html_js_table_months(tmp_wtr, msg_mgr, Xol_msg_itm_.Id_dte_month_abrv_jan, Xol_msg_itm_.Id_dte_month_abrv_dec); diff --git a/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_html_mkr.java b/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_html_mkr.java index 368c2f35a..28c2fc12b 100644 --- a/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_html_mkr.java +++ b/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_html_mkr.java @@ -33,7 +33,7 @@ public class Xow_popup_html_mkr { if (output_js_clean) app.Html_mgr().Js_cleaner().Clean_bfr(wiki, page.Ttl(), wrdx_bfr, 0); if (output_tidy) app.Html_mgr().Tidy_mgr().Run_tidy_html(page, wrdx_bfr); byte[] hdom_bry = wrdx_bfr.Xto_bry_and_clear(); - String page_url = wrdx_bfr.Add(page.Wiki().Domain_bry()).Add(Xoa_consts.Url_wiki_intermediary).Add(Xoa_app_.Utl_encoder_mgr().Href() + String page_url = wrdx_bfr.Add(page.Wiki().Domain_bry()).Add(Xoa_consts.Url_wiki_intermediary).Add(Xoa_app_.Utl__encoder_mgr().Href() .Encode(page.Ttl().Full_db())) // NOTE: was page.Url().Raw(), but that doesn't work for Special:Search; PAGE:en.w:Earth and "Quotations"; DATE:2014-06-29 .Xto_str_and_clear() ; diff --git a/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_parser.java b/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_parser.java index 70b3ee174..1a25c7df0 100644 --- a/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_parser.java +++ b/400_xowa/src/gplx/xowa/html/modules/popups/Xow_popup_parser.java @@ -208,7 +208,7 @@ public class Xow_popup_parser { class Xow_popup_parser_ { public static int Tmpl_bgn_get_(Xoae_app app, Xow_popup_itm itm, Xoa_ttl page_ttl, Xow_popup_anchor_finder hdr_finder, byte[] src, int src_len) { int rv = Xop_parser_.Doc_bgn_bos; if (itm.Mode_all()) return rv; - byte[] anch = itm.Page_href()[0] == Byte_ascii.Hash ? Bry_.Mid(Xoa_app_.Utl_encoder_mgr().Href().Decode(itm.Page_href()), 1) : page_ttl.Anch_txt(); + byte[] anch = itm.Page_href()[0] == Byte_ascii.Hash ? Bry_.Mid(Xoa_app_.Utl__encoder_mgr().Href().Decode(itm.Page_href()), 1) : page_ttl.Anch_txt(); if (anch == null) return rv; int hdr_bgn = hdr_finder.Find(src, src_len, anch, rv); // NOTE: starting search from Xop_parser_.Doc_bgn_bos return hdr_bgn == Bry_finder.Not_found ? rv : hdr_bgn; diff --git a/400_xowa/src/gplx/xowa/html/portal/Xoa_available_wikis_mgr.java b/400_xowa/src/gplx/xowa/html/portal/Xoa_available_wikis_mgr.java index 996c9a94f..0f1bc50e2 100644 --- a/400_xowa/src/gplx/xowa/html/portal/Xoa_available_wikis_mgr.java +++ b/400_xowa/src/gplx/xowa/html/portal/Xoa_available_wikis_mgr.java @@ -23,7 +23,7 @@ public class Xoa_available_wikis_mgr implements GfoInvkAble { public String Itms_as_html() { if (itms_as_html == null) { String itm_cls = app.Api_root().Html().Modules().Popups().Enabled() ? " class='xowa-hover-off'" : ""; - Bry_bfr tmp_bfr = Bry_bfr.new_(); // NOTE: do not use app.Utl_bry_bfr_mkr().Get_k004() as it is being used simultaneously by another caller; TODO: find call + Bry_bfr tmp_bfr = Bry_bfr.new_(); // NOTE: do not use app.Utl__bfr_mkr().Get_k004() as it is being used simultaneously by another caller; TODO: find call Xow_xwiki_mgr xwiki_mgr = app.User().Wiki().Xwiki_mgr(); xwiki_mgr.Sort_by_key(); int len = xwiki_mgr.Len(); diff --git a/400_xowa/src/gplx/xowa/html/portal/Xow_portal_mgr.java b/400_xowa/src/gplx/xowa/html/portal/Xow_portal_mgr.java index 1fddb4f35..d88b2d50c 100644 --- a/400_xowa/src/gplx/xowa/html/portal/Xow_portal_mgr.java +++ b/400_xowa/src/gplx/xowa/html/portal/Xow_portal_mgr.java @@ -40,13 +40,13 @@ public class Xow_portal_mgr implements GfoInvkAble { Xoapi_skins skins = wiki.Appe().Api_root().Html().Skins(); api_skin = wiki.Appe().Mode() == Xoa_app_.Mode_gui ? skins.Desktop() : skins.Server(); Bry_fmtr_eval_mgr eval_mgr = wiki.Eval_mgr(); - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b512(); Init_fmtr(tmp_bfr, eval_mgr, div_view_fmtr); Init_fmtr(tmp_bfr, eval_mgr, div_ns_fmtr); byte[] wiki_user_name = wiki.User().Name(); div_personal_bry = Init_fmtr(tmp_bfr, eval_mgr, div_personal_fmtr, Bry_.Add(Xoh_href_parser.Href_wiki_bry, wiki.Ns_mgr().Ids_get_or_null(Xow_ns_.Id_user).Name_db_w_colon(), wiki_user_name), wiki_user_name, Ns_cls_by_id(wiki.Ns_mgr(), Xow_ns_.Id_user), Bry_.Add(Xoh_href_parser.Href_wiki_bry, wiki.Ns_mgr().Ids_get_or_null(Xow_ns_.Id_user_talk).Name_db_w_colon(), wiki_user_name), Ns_cls_by_id(wiki.Ns_mgr(), Xow_ns_.Id_user_talk)); byte[] main_page_href_bry = tmp_bfr.Add(Xoh_href_parser.Href_site_bry).Add(wiki.Domain_bry()).Add(Xoh_href_parser.Href_wiki_bry).Xto_bry_and_clear(); // NOTE: build /site/en.wikipedia.org/wiki/ href; no Main_Page, as that will be inserted by Xoh_href_parser - div_logo_bry = Init_fmtr(tmp_bfr, eval_mgr, div_logo_fmtr, main_page_href_bry, Xoa_app_.Utl_encoder_mgr().Fsys().Encode_http(wiki.Appe().User().Fsys_mgr().Wiki_root_dir().GenSubFil_nest(wiki.Domain_str(), "html", "logo.png"))); + div_logo_bry = Init_fmtr(tmp_bfr, eval_mgr, div_logo_fmtr, main_page_href_bry, Xoa_app_.Utl__encoder_mgr().Fsys().Encode_http(wiki.Appe().User().Fsys_mgr().Wiki_root_dir().GenSubFil_nest(wiki.Domain_str(), "html", "logo.png"))); div_home_bry = Init_fmtr(tmp_bfr, eval_mgr, div_home_fmtr); div_wikis_fmtr.Eval_mgr_(eval_mgr); Xow_msg_mgr msg_mgr = wiki.Msg_mgr(); diff --git a/400_xowa/src/gplx/xowa/html/portal/Xow_portal_mgr_tst.java b/400_xowa/src/gplx/xowa/html/portal/Xow_portal_mgr_tst.java index dd62dc06b..cdb261e6c 100644 --- a/400_xowa/src/gplx/xowa/html/portal/Xow_portal_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/html/portal/Xow_portal_mgr_tst.java @@ -40,7 +40,7 @@ class Xowh_portal_mgr_fxt { } } private Xoae_app app; Xowe_wiki wiki; public void Test_div_ns_bry(String ttl, String expd) { - Tfds.Eq(expd, String_.new_ascii_(wiki.Html_mgr().Portal_mgr().Div_ns_bry(wiki.Utl_bry_bfr_mkr(), Xoa_ttl.parse_(wiki, Bry_.new_ascii_(ttl)), wiki.Ns_mgr()))); + Tfds.Eq(expd, String_.new_ascii_(wiki.Html_mgr().Portal_mgr().Div_ns_bry(wiki.Utl__bfr_mkr(), Xoa_ttl.parse_(wiki, Bry_.new_ascii_(ttl)), wiki.Ns_mgr()))); } public void Test_div_personal_bry(String expd) { Tfds.Eq(expd, String_.new_ascii_(wiki.Html_mgr().Portal_mgr().Div_personal_bry())); diff --git a/400_xowa/src/gplx/xowa/html/sidebar/Xowh_sidebar_mgr.java b/400_xowa/src/gplx/xowa/html/sidebar/Xowh_sidebar_mgr.java index 9abda3af0..ef08851c3 100644 --- a/400_xowa/src/gplx/xowa/html/sidebar/Xowh_sidebar_mgr.java +++ b/400_xowa/src/gplx/xowa/html/sidebar/Xowh_sidebar_mgr.java @@ -24,7 +24,7 @@ public class Xowh_sidebar_mgr implements GfoInvkAble { public byte[] Html_bry() {return html_bry;} private byte[] html_bry; public void Init() { try { - Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_b512(); Xol_msg_itm sidebar_msg = Xol_msg_mgr_.Get_msg_itm(bfr, wiki, wiki.Lang(), CONST_sidebar_ttl); if ( sidebar_msg.Src() == Xol_msg_itm.Src_missing || ( sidebar_msg.Src() == Xol_msg_itm.Src_lang @@ -34,7 +34,7 @@ public class Xowh_sidebar_mgr implements GfoInvkAble { bfr.Mkr_rls(); return; } - Bry_bfr comment_bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr comment_bfr = wiki.Utl__bfr_mkr().Get_b512(); Parse(bfr, comment_bfr, sidebar_msg.Val()); Bld_html(bfr); html_bry = bfr.Mkr_rls().Xto_bry_and_clear(); @@ -53,7 +53,7 @@ public class Xowh_sidebar_mgr implements GfoInvkAble { public void Parse(Bry_bfr bfr, Bry_bfr comment_bfr, byte[] src) { byte[][] lines = Bry_.Split(src, Byte_ascii.NewLine); int lines_len = lines.length; - Url_encoder id_encoder = Xoa_app_.Utl_encoder_mgr().Id(); + Url_encoder id_encoder = Xoa_app_.Utl__encoder_mgr().Id(); Xowh_sidebar_itm cur_grp = null; Xop_link_parser link_parser = new Xop_link_parser(); for (int i = 0; i < lines_len; i++) { diff --git a/400_xowa/src/gplx/xowa/html/tocs/Xow_hdr_mgr.java b/400_xowa/src/gplx/xowa/html/tocs/Xow_hdr_mgr.java index f89bc7af3..b8a661424 100644 --- a/400_xowa/src/gplx/xowa/html/tocs/Xow_hdr_mgr.java +++ b/400_xowa/src/gplx/xowa/html/tocs/Xow_hdr_mgr.java @@ -59,7 +59,7 @@ public class Xow_hdr_mgr { } private void Reg(Xop_ctx ctx, Xop_hdr_tkn hdr, byte[] src) { if (hdrs_len == 0) hdr.Hdr_html_first_y_(); - Bry_bfr_mkr bfr_mkr = Xoa_app_.Utl_bry_bfr_mkr(); + Bry_bfr_mkr bfr_mkr = Xoa_app_.Utl__bfr_mkr(); Bry_bfr raw_bfr = bfr_mkr.Get_b128(), enc_bfr = bfr_mkr.Get_b128(); Id_bld_recurse(raw_bfr, src, hdr); Url_encoder encoder = encoder_mgr.Id(); diff --git a/400_xowa/src/gplx/xowa/html/tocs/Xow_toc_mgr.java b/400_xowa/src/gplx/xowa/html/tocs/Xow_toc_mgr.java index 727ffad6c..bd9a1bd3e 100644 --- a/400_xowa/src/gplx/xowa/html/tocs/Xow_toc_mgr.java +++ b/400_xowa/src/gplx/xowa/html/tocs/Xow_toc_mgr.java @@ -101,7 +101,7 @@ public class Xow_toc_mgr implements Bry_fmtr_arg { public static byte[] Toc_text(Xop_ctx ctx, Xoae_page page, byte[] src, Xop_tkn_itm hdr) { try { Xowe_wiki wiki = page.Wikie(); - Bry_bfr bfr = Xoa_app_.Utl_bry_bfr_mkr().Get_b128(); + Bry_bfr bfr = Xoa_app_.Utl__bfr_mkr().Get_b128(); Xoh_wtr_ctx hctx = Xoh_wtr_ctx.Basic; Xoh_html_wtr html_wtr = wiki.Html_mgr().Html_wtr(); html_wtr.Init_by_page(ctx, hctx, src, page); Toc_text_recurse(ctx, bfr, src, html_wtr, hctx, hdr, 0); diff --git a/400_xowa/src/gplx/xowa/html/utils/Xoh_js_cleaner.java b/400_xowa/src/gplx/xowa/html/utils/Xoh_js_cleaner.java index e90ffc8c5..f72a9f6b5 100644 --- a/400_xowa/src/gplx/xowa/html/utils/Xoh_js_cleaner.java +++ b/400_xowa/src/gplx/xowa/html/utils/Xoh_js_cleaner.java @@ -34,7 +34,7 @@ public class Xoh_js_cleaner { Bry_bfr bfr = null; boolean dirty = false; try { - bfr = wiki.Utl_bry_bfr_mkr().Get_m001(); + bfr = wiki.Utl__bfr_mkr().Get_m001(); int pos = bgn; while (pos < end) { byte b = src[pos]; diff --git a/400_xowa/src/gplx/xowa/langs/Xol_lang_itm_.java b/400_xowa/src/gplx/xowa/langs/Xol_lang_itm_.java index e0b0db742..e8459c8ca 100644 --- a/400_xowa/src/gplx/xowa/langs/Xol_lang_itm_.java +++ b/400_xowa/src/gplx/xowa/langs/Xol_lang_itm_.java @@ -870,10 +870,13 @@ Regy_add(regy, Id_zu, "zu", "isiZulu"); public static Xol_lang_itm Get_by_key(byte[] key) {if (regy == null) Regy(); return (Xol_lang_itm)regy.Get_by_bry(key);} public static Xol_lang_itm Get_by_key_or_intl(byte[] key) {return Get_by_key_or_intl(key, 0, key.length);} public static Xol_lang_itm Get_by_key_or_intl(byte[] key, int bgn, int end) { - if (regy == null) Regy(); - Xol_lang_itm rv = (Xol_lang_itm)regy.Get_by_mid(key, bgn, end); + Xol_lang_itm rv = Get_by_key_or_null(key, bgn, end); return rv == null ? Intl : rv; } + public static Xol_lang_itm Get_by_key_or_null(byte[] key, int bgn, int end) { + if (regy == null) Regy(); + return (Xol_lang_itm)regy.Get_by_mid(key, bgn, end); + } public static Xol_lang_itm Get_by_id(int id) {if (regy == null) Regy(); return langs[id];} public static boolean Exists(byte[] key) {return Get_by_key(key) != null;} // Language.php!isSupportedLanguage public static final Xol_lang_itm Intl = new Xol_lang_itm(Xol_lang_itm_.Id__intl, Bry_.Empty, Bry_.Empty); // intended for international wikis like commons, wikidata, etc.. diff --git a/400_xowa/src/gplx/xowa/langs/msgs/Xol_msg_mgr_.java b/400_xowa/src/gplx/xowa/langs/msgs/Xol_msg_mgr_.java index 611f54218..0b39fe73d 100644 --- a/400_xowa/src/gplx/xowa/langs/msgs/Xol_msg_mgr_.java +++ b/400_xowa/src/gplx/xowa/langs/msgs/Xol_msg_mgr_.java @@ -38,7 +38,7 @@ public class Xol_msg_mgr_ { return msg_itm == null ? null : String_.new_utf8_(msg_itm.Val()); } public static byte[] Get_msg_val(Xowe_wiki wiki, Xol_lang lang, byte[] msg_key, byte[][] fmt_args) { - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b512(); Xol_msg_itm msg_itm = Get_msg_itm(tmp_bfr, wiki, lang, msg_key); byte[] rv = Get_msg_val(tmp_bfr, wiki, msg_itm, fmt_args); tmp_bfr.Mkr_rls(); diff --git a/400_xowa/src/gplx/xowa/langs/vnts/Xol_vnt_mgr.java b/400_xowa/src/gplx/xowa/langs/vnts/Xol_vnt_mgr.java index 8673a341a..9507a8283 100644 --- a/400_xowa/src/gplx/xowa/langs/vnts/Xol_vnt_mgr.java +++ b/400_xowa/src/gplx/xowa/langs/vnts/Xol_vnt_mgr.java @@ -50,7 +50,7 @@ public class Xol_vnt_mgr implements GfoInvkAble { } public Xodb_page Convert_ttl(Xowe_wiki wiki, Xoa_ttl ttl) {return Convert_ttl(wiki, ttl.Ns(), ttl.Page_db());} // NOTE: not Full_db as ttl.Ns is passed; EX:Шаблон:Šablon:Jez-eng; PAGE:sr.w:ДНК DATE:2014-07-06 public Xodb_page Convert_ttl(Xowe_wiki wiki, Xow_ns ns, byte[] ttl_bry) { - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b512(); Xodb_page rv = Convert_ttl(wiki, tmp_bfr, ns, ttl_bry); tmp_bfr.Mkr_rls(); return rv; diff --git a/400_xowa/src/gplx/xowa/langs/vnts/Xolg_vnt_grp_fmtr_tst.java b/400_xowa/src/gplx/xowa/langs/vnts/Xolg_vnt_grp_fmtr_tst.java new file mode 100644 index 000000000..be01fa169 --- /dev/null +++ b/400_xowa/src/gplx/xowa/langs/vnts/Xolg_vnt_grp_fmtr_tst.java @@ -0,0 +1,66 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.langs.vnts; import gplx.*; import gplx.xowa.*; import gplx.xowa.langs.*; +import org.junit.*; +public class Xolg_vnt_grp_fmtr_tst { + @Before public void init() {fxt.Clear();} private final Xolg_vnt_grp_fmtr_fxt fxt = new Xolg_vnt_grp_fmtr_fxt(); + @Test public void Basic() { + fxt.Test_to_str("Earth", "zh-hk", String_.Concat_lines_nl_skip_last + ( "

Choose lang

" + , " " + )); + } +} +class Xolg_vnt_grp_fmtr_fxt { + private Xolg_vnt_grp vnt_grp; + public void Clear() { + this.Init_grp("Choose lang", "zh-hans", "Simplified", "zh-hant", "Traditional", "zh-cn", "China", "zh-hk", "Hong Kong", "zh-mo", "Macau", "zh-sg", "Singapore", "zh-tw", "Taiwan"); + } + public void Init_grp(String text, String... langs) { + vnt_grp = new Xolg_vnt_grp(); + vnt_grp.Text_(Bry_.new_utf8_(text)); + int len = langs.length; + String lang_code = ""; + for (int i = 0; i < len; ++i) { + String lang = langs[i]; + if (i % 2 == 0) + lang_code = lang; + else { + Xolg_vnt_itm itm = new Xolg_vnt_itm(Bry_.new_utf8_(lang_code), Bry_.new_utf8_(lang)); + vnt_grp.Add(itm); + } + } + } + public void Test_to_str(String page_href, String selected_vnt, String expd) { + Xolg_vnt_grp_fmtr vnt_grp_fmtr = new Xolg_vnt_grp_fmtr(); + Bry_bfr bfr = Bry_bfr.new_(); + vnt_grp_fmtr.Init(vnt_grp, Bry_.new_utf8_(page_href), Bry_.new_utf8_(selected_vnt)); + vnt_grp_fmtr.XferAry(bfr, 0); + Tfds.Eq_str_lines(expd, bfr.Xto_str_and_clear()); + } +} diff --git a/400_xowa/src/gplx/xowa/langs/vnts/Xolg_vnt_mgr.java b/400_xowa/src/gplx/xowa/langs/vnts/Xolg_vnt_mgr.java new file mode 100644 index 000000000..47e661994 --- /dev/null +++ b/400_xowa/src/gplx/xowa/langs/vnts/Xolg_vnt_mgr.java @@ -0,0 +1,68 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.langs.vnts; import gplx.*; import gplx.xowa.*; import gplx.xowa.langs.*; +class Xolg_vnt_grp { + private final ListAdp list = ListAdp_.new_(); + public byte[] Text() {return text;} public void Text_(byte[] v) {text = v;} private byte[] text; + public int Len() {return list.Count();} + public Xolg_vnt_itm Get_at(int i) {return (Xolg_vnt_itm)list.FetchAt(i);} + public void Add(Xolg_vnt_itm itm) {list.Add(itm);} +} +class Xolg_vnt_itm { + public Xolg_vnt_itm(byte[] key, byte[] text) {this.key = key; this.text = text;} + public byte[] Key() {return key;} private final byte[] key; + public byte[] Text() {return text;} private final byte[] text; +} +class Xolg_vnt_grp_fmtr implements Bry_fmtr_arg { + private Xolg_vnt_grp grp; + private Xolg_vnt_itm_fmtr itm_fmtr = new Xolg_vnt_itm_fmtr(); + public void Init(Xolg_vnt_grp grp, byte[] page_href, byte[] page_vnt) { + this.grp = grp; + itm_fmtr.Init(grp, page_href, page_vnt); + } + public void XferAry(Bry_bfr bfr, int idx) { + fmtr.Bld_bfr_many(bfr, grp.Text(), itm_fmtr); + } + private static final Bry_fmtr fmtr = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last + ( "

~{grp_text}

" + , " " + ), "grp_text", "itms" + ); +} +class Xolg_vnt_itm_fmtr implements Bry_fmtr_arg { + private Xolg_vnt_grp grp; private byte[] page_href, page_vnt; + public void Init(Xolg_vnt_grp grp, byte[] page_href, byte[] page_vnt) {this.grp = grp; this.page_href = page_href; this.page_vnt = page_vnt;} + public void XferAry(Bry_bfr bfr, int idx) { + int len = grp.Len(); + for (int i = 0; i < len; ++i) { + Xolg_vnt_itm itm = grp.Get_at(i); + boolean itm_is_selected = Bry_.Eq(itm.Key(), page_vnt); + byte[] itm_cls_selected = itm_is_selected ? Itm_cls_selected_y : Bry_.Empty; + fmtr.Bld_bfr_many(bfr, i, itm_cls_selected, itm.Key(), itm.Text(), page_href); + } + } + private static final byte[] Itm_cls_selected_y = Bry_.new_ascii_(" class='selected'"); + private static final Bry_fmtr fmtr = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last + ( "" + , "
  • ~{itm_text}
  • " + ), "itm_idx", "itm_cls_selected", "itm_lang", "itm_text", "itm_href" + ); +} diff --git a/400_xowa/src/gplx/xowa/langs/vnts/Xop_vnt_flag_parser.java b/400_xowa/src/gplx/xowa/langs/vnts/Xop_vnt_flag_parser.java index 4482773bf..236a16d09 100644 --- a/400_xowa/src/gplx/xowa/langs/vnts/Xop_vnt_flag_parser.java +++ b/400_xowa/src/gplx/xowa/langs/vnts/Xop_vnt_flag_parser.java @@ -31,7 +31,7 @@ class Xop_vnt_flag_parser { rslt_flags = new Xop_vnt_flag[pipe_tkn_count]; int rv_idx = 0; int subs_len = vnt_tkn.Subs_len(); - Bry_bfr flag_bfr = wiki.Utl_bry_bfr_mkr().Get_b128(); + Bry_bfr flag_bfr = wiki.Utl__bfr_mkr().Get_b128(); rslt_tkn_pos = 0; boolean loop = true; while (true) { diff --git a/400_xowa/src/gplx/xowa/langs/vnts/Xop_vnt_tkn.java b/400_xowa/src/gplx/xowa/langs/vnts/Xop_vnt_tkn.java index e32107e67..e2fdf2da7 100644 --- a/400_xowa/src/gplx/xowa/langs/vnts/Xop_vnt_tkn.java +++ b/400_xowa/src/gplx/xowa/langs/vnts/Xop_vnt_tkn.java @@ -57,7 +57,7 @@ public class Xop_vnt_tkn extends Xop_tkn_itm_base { byte[] cur_lang_vnt = wiki.Lang().Vnt_mgr().Cur_vnt(); Xop_vnt_rule rule = Xop_vnt_html_wtr.Get_rule_by_key(vnt_rules, vnt_rules.length, cur_lang_vnt); if (rule != null) { - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b512(); wiki.Html_mgr().Html_wtr().Write_tkn_ary(tmp_bfr, ctx, Xoh_wtr_ctx.Alt, src, rule.Rule_subs()); byte[] display_ttl = tmp_bfr.Mkr_rls().Xto_bry_and_clear(); page.Html_data().Display_ttl_vnt_(display_ttl); diff --git a/400_xowa/src/gplx/xowa/pages/skins/Xopg_xtn_skin_itm_stub.java b/400_xowa/src/gplx/xowa/pages/skins/Xopg_xtn_skin_itm_stub.java new file mode 100644 index 000000000..18b9fe687 --- /dev/null +++ b/400_xowa/src/gplx/xowa/pages/skins/Xopg_xtn_skin_itm_stub.java @@ -0,0 +1,25 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.pages.skins; import gplx.*; import gplx.xowa.*; import gplx.xowa.pages.*; +public class Xopg_xtn_skin_itm_stub implements Xopg_xtn_skin_itm { + private final byte[] val; + public Xopg_xtn_skin_itm_stub(byte[] val) {this.val = val;} + public byte Tid() {return Xopg_xtn_skin_itm_tid.Tid_sidebar;} + public byte[] Key() {return Bry_.Empty;} + public void Write(Bry_bfr bfr, Xoae_page page) {bfr.Add(val);} +} diff --git a/400_xowa/src/gplx/xowa/parsers/lnkes/Xoh_lnke_wtr.java b/400_xowa/src/gplx/xowa/parsers/lnkes/Xoh_lnke_wtr.java index 9997d31d2..e6e8027bb 100644 --- a/400_xowa/src/gplx/xowa/parsers/lnkes/Xoh_lnke_wtr.java +++ b/400_xowa/src/gplx/xowa/parsers/lnkes/Xoh_lnke_wtr.java @@ -57,7 +57,7 @@ public class Xoh_lnke_wtr { else { // xowa or regular; EX: http://a.org if (proto_is_xowa) { bfr.Add(Xop_lnke_wkr.Bry_xowa_protocol); - Xoa_app_.Utl_encoder_mgr().Gfs().Encode(bfr, src, lnke_bgn, lnke_end); + Xoa_app_.Utl__encoder_mgr().Gfs().Encode(bfr, src, lnke_bgn, lnke_end); return false; } else { // regular; add href @@ -67,7 +67,7 @@ public class Xoh_lnke_wtr { } } else { // xwiki - Url_encoder href_encoder = Xoa_app_.Utl_encoder_mgr().Href_quotes(); + Url_encoder href_encoder = Xoa_app_.Utl__encoder_mgr().Href_quotes(); bfr.Add(Xoh_href_parser.Href_site_bry).Add(lnke_xwiki_wiki).Add(Xoh_href_parser.Href_wiki_bry) .Add(href_encoder.Encode(lnke.Lnke_xwiki_page())); // NOTE: must encode page; EX:%22%3D -> '">' which will end attribute; PAGE:en.w:List_of_Category_A_listed_buildings_in_West_Lothian DATE:2014-07-15 if (lnke.Lnke_xwiki_qargs() != null) diff --git a/400_xowa/src/gplx/xowa/parsers/lnkes/Xop_lnke_wkr.java b/400_xowa/src/gplx/xowa/parsers/lnkes/Xop_lnke_wkr.java index d948d5d53..cf8bc037e 100644 --- a/400_xowa/src/gplx/xowa/parsers/lnkes/Xop_lnke_wkr.java +++ b/400_xowa/src/gplx/xowa/parsers/lnkes/Xop_lnke_wkr.java @@ -282,7 +282,7 @@ public class Xop_lnke_wkr implements Xop_ctx_wkr { int lnke_bgn_pos = lhs_dlm_pos + 1; byte[] rhs_dlm_bry = Bry_quote; if (lhs_dlm_pos - proto_end_pos > 0) { - Bry_bfr bfr = ctx.App().Utl_bry_bfr_mkr().Get_k004(); + Bry_bfr bfr = ctx.App().Utl__bfr_mkr().Get_k004(); rhs_dlm_bry = bfr.Add(Bry_quote).Add_mid(src, proto_end_pos, lhs_dlm_pos).Xto_bry_and_clear(); bfr.Mkr_rls(); } diff --git a/400_xowa/src/gplx/xowa/parsers/lnkis/redlinks/Xog_redlink_mgr.java b/400_xowa/src/gplx/xowa/parsers/lnkis/redlinks/Xog_redlink_mgr.java index 9b8e425f7..44307679f 100644 --- a/400_xowa/src/gplx/xowa/parsers/lnkis/redlinks/Xog_redlink_mgr.java +++ b/400_xowa/src/gplx/xowa/parsers/lnkis/redlinks/Xog_redlink_mgr.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.parsers.lnkis.redlinks; import gplx.*; import gplx.xowa.*; import gplx.xowa.parsers.*; import gplx.xowa.parsers.lnkis.*; import gplx.xowa.dbs.tbls.*; -import gplx.xowa.langs.vnts.*; import gplx.xowa.gui.views.*; import gplx.xowa.pages.*; import gplx.xowa.hdumps.core.*; +import gplx.xowa.langs.vnts.*; import gplx.xowa.gui.views.*; import gplx.xowa.pages.*; import gplx.xowa.html.hdumps.core.*; public class Xog_redlink_mgr implements GfoInvkAble { private Xog_win_itm win; private Xog_html_itm html_itm; private Xowe_wiki wiki; private Xoae_page page; private Xopg_redlink_lnki_list redlink_lnki_list; private ListAdp lnki_list; private boolean log_enabled; private Gfo_usr_dlg usr_dlg; private int thread_id; diff --git a/400_xowa/src/gplx/xowa/servers/Gxw_html_server.java b/400_xowa/src/gplx/xowa/servers/Gxw_html_server.java index 668350eb5..83e7466e3 100644 --- a/400_xowa/src/gplx/xowa/servers/Gxw_html_server.java +++ b/400_xowa/src/gplx/xowa/servers/Gxw_html_server.java @@ -95,7 +95,7 @@ public class Gxw_html_server implements Gxw_html { public static void Assert_tab(Xoae_app app, Xoae_page page) { Xog_win_itm browser_win = app.Gui_mgr().Browser_win(); if (browser_win.Active_tab() == null) { // no active tab - Xowe_wiki wiki = browser_win.Active_tab().Wiki(); + Xowe_wiki wiki = page.Wikie(); // take wiki from current page; NOTE: do not take from browser_win.Active_tab().Wiki(); DATE:2015-02-23 browser_win.Tab_mgr().Tabs_new_init(wiki, page); // create at least one active tab; DATE:2014-07-30 } } diff --git a/400_xowa/src/gplx/xowa/setup/maints/Wmf_dump_list_parser_tst.java b/400_xowa/src/gplx/xowa/setup/maints/Wmf_dump_list_parser_tst.java index 8fc193c05..7894f72b3 100644 --- a/400_xowa/src/gplx/xowa/setup/maints/Wmf_dump_list_parser_tst.java +++ b/400_xowa/src/gplx/xowa/setup/maints/Wmf_dump_list_parser_tst.java @@ -41,7 +41,7 @@ public class Wmf_dump_list_parser_tst { , fxt.itm("zh-classicalwiki", "20131128", Wmf_dump_itm.Status_tid_complete, "Dump complete", "2013-11-28 06:08:56") ); } -// @Test public void Update() { // MAINT:QUARTERLY:2014-10-05 +// @Test public void Update() { // MAINT:QUARTERLY:2015-03-01 // Hash_adp_bry excluded_domains = Hash_adp_bry.cs_().Add_many_str // ( "advisory.wikipedia.org", "beta.wikiversity.org", "donate.wikipedia.org", "login.wikipedia.org" // , "nostalgia.wikipedia.org", "outreach.wikipedia.org", "quality.wikipedia.org", "sources.wikipedia.org" @@ -62,7 +62,7 @@ public class Wmf_dump_list_parser_tst { // if (Bry_finder.Find_fwd(domain_bry, Bry_.new_ascii_("wikimania")) != Bry_.NotFound) continue; // if (excluded_domains.Has(domain_bry)) continue; // Xow_domain domain_itm = Xow_domain_.parse(domain_bry); -// byte[] tid_name = Xto_display_name(Xow_domain_.Tid__get_bry(domain_itm.Wiki_tid())); +// byte[] tid_name = Xto_display_name(Xow_domain_.Tid__get_bry(domain_itm.Domain_tid())); // sql_bfr // .Add_byte(Byte_ascii.Paren_bgn) // .Add_int_variable(counter++) @@ -95,10 +95,10 @@ public class Wmf_dump_list_parser_tst { //// Io_mgr._.AppendFilBfr(temp, bld_bfr); // } // private static byte[] Xto_display_name(byte[] v) { -// if (Bry_.Eq(v, Xow_domain_.Tid_bry_wikimediafoundation_bry)) return Bry_.new_ascii_("Wikimedia Foundation"); -// else if (Bry_.Eq(v, Xow_domain_.Tid_bry_species_bry)) return Bry_.new_ascii_("Wikispecies"); -// else if (Bry_.Eq(v, Xow_domain_.Tid_bry_mediawiki_bry)) return Bry_.new_ascii_("MediaWiki"); -// else return Bry_.Add(Byte_ascii.Case_upper(v[0]), Bry_.Mid(v, 1, v.length)); +// if (Bry_.Eq(v, Xow_domain_.Tid_bry_wikimediafoundation)) return Bry_.new_ascii_("Wikimedia Foundation"); +// else if (Bry_.Eq(v, Xow_domain_.Tid_bry_species)) return Bry_.new_ascii_("Wikispecies"); +// else if (Bry_.Eq(v, Xow_domain_.Tid_bry_mediawiki)) return Bry_.new_ascii_("MediaWiki"); +// else return Bry_.Add(Byte_ascii.Case_upper(v[0]), Bry_.Mid(v, 1, v.length)); // } } class Wmf_dump_list_parser_fxt { diff --git a/400_xowa/src/gplx/xowa/specials/allPages/Xows_page_allpages.java b/400_xowa/src/gplx/xowa/specials/allPages/Xows_page_allpages.java index 31471b640..d2e3ddec6 100644 --- a/400_xowa/src/gplx/xowa/specials/allPages/Xows_page_allpages.java +++ b/400_xowa/src/gplx/xowa/specials/allPages/Xows_page_allpages.java @@ -85,7 +85,7 @@ public class Xows_page_allpages implements GfoInvkAble, Bry_fmtr_arg, Xows_page init_ns = wiki.Ns_mgr().Ns_main(); arg_hash.Load(url); byte[] from_val = Get_from(arg_hash, wiki, url, ttl); if (from_val == null) return false; - from_val = Xoa_app_.Utl_encoder_mgr().Id().Decode(from_val); + from_val = Xoa_app_.Utl__encoder_mgr().Id().Decode(from_val); int ns_val = arg_hash.Get_val_int_or(Bry_arg_ns, init_ns.Id()); init_ns = wiki.Ns_mgr().Ids_get_or_null(ns_val); boolean hide_redirects_val = arg_hash.Get_val_int_or(Bry_arg_hideredirects, 0) == 1; for (int i = 0; i < itms_per_page; i++) @@ -115,7 +115,7 @@ public class Xows_page_allpages implements GfoInvkAble, Bry_fmtr_arg, Xows_page private static final byte[] Bry_arg_from = Bry_.new_ascii_("from"), Bry_arg_ns = Bry_.new_ascii_("namespace"), Bry_arg_hideredirects = Bry_.new_ascii_("hideredirects"); public Xow_ns Init_ns() {return init_ns;} private Xow_ns init_ns; public void Build_html(Xoae_page page) { - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_m001(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_m001(); byte[] anchor_prv = Build_html_end(tmp_bfr, rslt_prv, false); byte[] anchor_nxt = Build_html_end(tmp_bfr, rslt_nxt, true); html_all.Bld_bfr_many(tmp_bfr, this, anchor_prv, anchor_nxt); @@ -127,10 +127,10 @@ public class Xows_page_allpages implements GfoInvkAble, Bry_fmtr_arg, Xows_page Xoa_ttl ttl = Xows_page_allpages.ttl_(wiki, init_ns, itm); if (ttl == null) return Bry_.Empty; // occurs when range is empty; EX: Module:A in simplewikibooks int msg_id = fwd ? Xol_msg_itm_.Id_sp_allpages_fwd : Xol_msg_itm_.Id_sp_allpages_bwd; Xol_msg_itm msg_itm = wiki.Lang().Msg_mgr().Itm_by_id_or_null(msg_id); - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b512().Mkr_rls(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b512().Mkr_rls(); byte[] lbl_text = msg_itm.Fmt(tmp_bfr, ttl.Full_txt()); byte[] args__rest = arg_hash.Concat(tmp_bfr, Bry_arg_ns, Bry_arg_hideredirects); - byte[] arg_from = Xoa_app_.Utl_encoder_mgr().Id().Encode(ttl.Page_txt_wo_qargs()); + byte[] arg_from = Xoa_app_.Utl__encoder_mgr().Id().Encode(ttl.Page_txt_wo_qargs()); return html_list_end.Bld_bry_many(bfr, arg_from, args__rest, lbl_text); } public static Xoa_ttl ttl_(Xowe_wiki wiki, Xow_ns ns, Xodb_page itm) { diff --git a/400_xowa/src/gplx/xowa/specials/movePage/Move_page.java b/400_xowa/src/gplx/xowa/specials/movePage/Move_page.java index 2dc94887a..8388ad98a 100644 --- a/400_xowa/src/gplx/xowa/specials/movePage/Move_page.java +++ b/400_xowa/src/gplx/xowa/specials/movePage/Move_page.java @@ -61,7 +61,7 @@ public class Move_page implements Xows_page { Xowe_wiki wiki = page.Wikie(); Xow_msg_mgr msg_mgr = wiki.Msg_mgr(); if (src_ttl == null) return Bry_.Empty; ns_list_fmtr.Init_by_page(wiki, page, src_ttl); - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_m001(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_m001(); wiki.Parser().Parse_text_to_html(tmp_bfr, page, true, msg_mgr.Val_by_key_obj("movepagetext")); fmtr_all.Bld_bfr_many(tmp_bfr , msg_mgr.Val_by_key_obj("move-page-legend") diff --git a/400_xowa/src/gplx/xowa/specials/search/Xosrh_core.java b/400_xowa/src/gplx/xowa/specials/search/Xosrh_core.java index 5181c1eb4..1449f238c 100644 --- a/400_xowa/src/gplx/xowa/specials/search/Xosrh_core.java +++ b/400_xowa/src/gplx/xowa/specials/search/Xosrh_core.java @@ -47,7 +47,7 @@ public class Xosrh_core implements GfoInvkAble, Xows_page { if (!Bry_.Eq(search_bry, Bry_page_name)) // do not lookup page else stack overflow; happens when going directly to Special:Search (from history) find_page = wiki.Data_mgr().Get_page(page_ttl, false); // lookup page if (find_page.Missing() || url.Search_fulltext()) { // page not found, or explicit_search invoked - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_k004(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_k004(); int page_idx = args_mgr.Page_idx(); Sort_tid(args_mgr.Sort_tid()); page_mgr.Ns_mgr_(args_mgr.Ns_mgr()); diff --git a/400_xowa/src/gplx/xowa/specials/search/Xosrh_core_tst.java b/400_xowa/src/gplx/xowa/specials/search/Xosrh_core_tst.java index dd0500941..f710c51e2 100644 --- a/400_xowa/src/gplx/xowa/specials/search/Xosrh_core_tst.java +++ b/400_xowa/src/gplx/xowa/specials/search/Xosrh_core_tst.java @@ -180,7 +180,7 @@ class Xos_search_mgr_fxt { public void Test_search_match_bgn(String ttl_str, String... expd_ary) {Test_search(ttl_str, 0, expd_ary);} public void Test_search(String ttl_str, int page_idx, String... expd_ary) { byte[] ttl_bry = Bry_.new_ascii_(ttl_str); - Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_b128(); + Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_b128(); Xosrh_rslt_grp page = search_mgr.Page_mgr().Search(bfr, wiki, ttl_bry, page_idx, search_mgr.Page_mgr()); bfr.Mkr_rls(); Tfds.Eq_ary(expd_ary, Search_itms_to_int_ary(page)); @@ -196,7 +196,7 @@ class Xos_search_mgr_fxt { Tfds.Eq_str_lines(expd_html, String_.new_utf8_(page.Root().Data_htm())); } public void Test_search2(byte match_tid, String ttl_str, int page_idx, byte sort_tid, String... expd_ary) { - Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_b128(); + Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_b128(); Xoa_url_parser url_parser = new Xoa_url_parser(); byte[] url_raw = Bry_.new_ascii_("Special:Search/" + ttl_str + ((match_tid == Xosrh_core.Match_tid_all) ? "" : "*") + "?fulltext=y" + Xosrh_rslt_itm_sorter.Xto_url_arg(sort_tid) + "&xowa_page_size=1&xowa_page_index=" + page_idx); Xoa_url url = url_parser.Parse(url_raw); diff --git a/400_xowa/src/gplx/xowa/specials/search/Xosrh_html_mgr.java b/400_xowa/src/gplx/xowa/specials/search/Xosrh_html_mgr.java index 369248194..a229442e6 100644 --- a/400_xowa/src/gplx/xowa/specials/search/Xosrh_html_mgr.java +++ b/400_xowa/src/gplx/xowa/specials/search/Xosrh_html_mgr.java @@ -52,7 +52,7 @@ class Xosrh_html_mgr implements GfoInvkAble { byte[] search_results_header = wiki.Msg_mgr().Val_by_id_args(Xol_msg_itm_.Id_search_results_header, num_mgr.Format_num(itms_bgn), num_mgr.Format_num(core.Page_mgr().Itms_end()), num_mgr.Format_num(grp.Itms_total()), search_bry, pages_len); html_all_bgn.Bld_bfr_many(bfr, search_results_header, search_bry, xowa_idx_bwd, xowa_idx_fwd); Xow_ns_mgr ns_mgr = wiki.Ns_mgr(); - Bry_bfr tmp_ttl_bfr = core.Wiki().Appe().Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_ttl_bfr = core.Wiki().Appe().Utl__bfr_mkr().Get_b512(); for (int i = 0; i < itms_len; i++) { Xodb_page itm = grp.Itms_get_at(i); byte[] itm_ttl = Xoa_ttl.Replace_unders(itm.Ttl_wo_ns()); diff --git a/400_xowa/src/gplx/xowa/specials/statistics/Xop_statistics_page.java b/400_xowa/src/gplx/xowa/specials/statistics/Xop_statistics_page.java index 26bcc5e4c..5e6a50a65 100644 --- a/400_xowa/src/gplx/xowa/specials/statistics/Xop_statistics_page.java +++ b/400_xowa/src/gplx/xowa/specials/statistics/Xop_statistics_page.java @@ -27,7 +27,7 @@ public class Xop_statistics_page implements Xows_page { page.Data_raw_(html); } public byte[] Build_html(Xowe_wiki wiki) { - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_m001(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_m001(); stats_page.Wiki_(wiki); // stats_wiki.Wiki_(wiki); stats_ns.Wiki_(wiki); diff --git a/400_xowa/src/gplx/xowa/specials/xowa/popup_history/Popup_history_page.java b/400_xowa/src/gplx/xowa/specials/xowa/popup_history/Popup_history_page.java index 18afaab61..a47514f2e 100644 --- a/400_xowa/src/gplx/xowa/specials/xowa/popup_history/Popup_history_page.java +++ b/400_xowa/src/gplx/xowa/specials/xowa/popup_history/Popup_history_page.java @@ -22,7 +22,7 @@ public class Popup_history_page implements Xows_page { Xoae_page cur_page = wiki.Appe().Gui_mgr().Browser_win().Active_page(); if (cur_page == null) return; OrderedHash hash = cur_page.Popup_mgr().Itms(); int len = hash.Count(); - Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_k004(); + Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_k004(); for (int i = len - 1; i > -1; --i) { Xow_popup_itm itm = (Xow_popup_itm)hash.FetchAt(i); if (Ttl_chk(itm.Page_ttl())) continue; diff --git a/400_xowa/src/gplx/xowa/specials/xowa/system_data/System_data_page.java b/400_xowa/src/gplx/xowa/specials/xowa/system_data/System_data_page.java index 24e98650f..9993522fe 100644 --- a/400_xowa/src/gplx/xowa/specials/xowa/system_data/System_data_page.java +++ b/400_xowa/src/gplx/xowa/specials/xowa/system_data/System_data_page.java @@ -24,7 +24,7 @@ public class System_data_page implements Xows_page { byte[] file_type = arg_hash.Get_val_bry_or(Arg_type, null); if (file_type == null) return; Byte_obj_val type_val = (Byte_obj_val)type_hash.Get_by_bry(file_type); if (type_val == null) return; Io_url file_url = Path_from_type(wiki, type_val.Val()); if (file_url == null) return; - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_m001(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_m001(); byte[] file_txt = Io_mgr._.LoadFilBry(file_url); file_txt = gplx.html.Html_utl.Escape_html_as_bry(file_txt, true, false, false, false, false); // escape < or "" in messages will cause pre to break fmtr_all.Bld_bfr_many(tmp_bfr, file_url.Raw(), file_txt); diff --git a/400_xowa/src/gplx/xowa/users/Xou_user.java b/400_xowa/src/gplx/xowa/users/Xou_user.java index 06e9daae9..cf3b72046 100644 --- a/400_xowa/src/gplx/xowa/users/Xou_user.java +++ b/400_xowa/src/gplx/xowa/users/Xou_user.java @@ -68,7 +68,7 @@ public class Xou_user implements GfoEvMgrOwner, GfoInvkAble { app.File_mgr().Cache_mgr().Db_term(); } public void Bookmarks_add(byte[] wiki_domain, byte[] ttl_full_txt) { - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_k004(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_k004(); bookmarks_add_fmtr.Bld_bfr_many(tmp_bfr, wiki_domain, ttl_full_txt); byte[] new_entry = tmp_bfr.Mkr_rls().Xto_bry_and_clear(); Xoa_ttl bookmarks_ttl = Xoa_ttl.parse_(wiki, Bry_data_bookmarks); diff --git a/400_xowa/src/gplx/xowa/users/data/Xoud_cfg_mgr.java b/400_xowa/src/gplx/xowa/users/data/Xoud_cfg_mgr.java new file mode 100644 index 000000000..691d06acd --- /dev/null +++ b/400_xowa/src/gplx/xowa/users/data/Xoud_cfg_mgr.java @@ -0,0 +1,61 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.users.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*; +import gplx.dbs.*; import gplx.dbs.cfgs.*; +public class Xoud_cfg_mgr { + private final Xoud_cfg_tbl tbl = new Xoud_cfg_tbl(); + public void Conn_(Db_conn new_conn, boolean created, int user_id) {tbl.Conn_(new_conn, created, user_id);} + public int Select_int_or(String grp, String key, int or) { + String rv = Select_str_or(grp, key, null); + return rv == null ? or : Int_.parse_or_(rv, or); + } + public byte[] Select_bry_or(String key, byte[] or) {return Select_bry_or("" , key, or);} + public byte[] Select_bry_or(String grp, String key, byte[] or) { + String rv = Select_str_or(grp, key, null); + return rv == null ? or : Bry_.new_utf8_(rv); + } + public String Select_str_or(String grp, String key, String or) { + String rv = tbl.Select_as_str_or(grp, key, null); + return rv == null ? or : rv; + } + public byte[] Assert_bry_or(String key, byte[] or) {return Assert_bry_or("", key, or);} + public byte[] Assert_bry_or(String grp, String key, byte[] or) { + String rv = tbl.Select_as_str_or(grp, key, null); + if (rv == null) { + Insert_bry(grp, key, or); + return or; + } + else + return Bry_.new_utf8_(rv); + } + public void Update_bry(String key, byte[] val) {Update_bry("", key, val);} + public void Update_bry(String grp, String key, byte[] val) {tbl.Update(grp, key, String_.new_utf8_(val));} + public void Insert_bry(String key, byte[] val) {Insert_bry("", key, val);} + public void Insert_bry(String grp, String key, byte[] val) {tbl.Insert(grp, key, String_.new_utf8_(val));} + public void Insert_int(String grp, String key, int val) {tbl.Insert(grp, key, Int_.Xto_str(val));} + public int Next_id(String tbl_name) { + String grp = "xowa." + tbl_name, key = "next_id"; + int next_id = tbl.Select_as_int_or(grp, key, 1); // EX: xowa.cfg_history|next_id|1 + String new_val = Int_.Xto_str(next_id + 1); + if (next_id == 1) + tbl.Insert(grp, key, new_val); + else + tbl.Update(grp, key, new_val); + return next_id; + } +} diff --git a/400_xowa/src/gplx/xowa/users/data/Xoud_cfg_tbl.java b/400_xowa/src/gplx/xowa/users/data/Xoud_cfg_tbl.java new file mode 100644 index 000000000..bd0313286 --- /dev/null +++ b/400_xowa/src/gplx/xowa/users/data/Xoud_cfg_tbl.java @@ -0,0 +1,80 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.users.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*; +import gplx.dbs.*; +public class Xoud_cfg_tbl { + private String tbl_name = "user_cfg"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); + private String fld_usr, fld_grp, fld_key, fld_val; + private Db_conn conn; private Db_stmt stmt_insert, stmt_update, stmt_select; + private int usr; + public void Conn_(Db_conn new_conn, boolean created, int usr) { + this.conn = new_conn; flds.Clear(); + fld_usr = flds.Add_int("usr"); + fld_grp = flds.Add_str("grp", 255); + fld_key = flds.Add_str("key", 255); + fld_val = flds.Add_str("val", 1024); + if (created) { + Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds + , Db_meta_idx.new_unique_by_tbl(tbl_name, "main", fld_usr, fld_grp, fld_key, fld_val) + ); + conn.Exec_create_tbl_and_idx(meta); + } + stmt_insert = stmt_update = stmt_select = null; + this.usr = usr; + } + public void Insert(String grp, String key, String val) { + if (stmt_insert == null) stmt_insert = conn.Rls_reg(conn.Stmt_insert(tbl_name, flds)); + stmt_insert.Clear().Val_int(fld_usr, usr).Val_str(fld_grp, grp).Val_str(fld_key, key).Val_str(fld_val, val).Exec_insert(); + } + public void Update(String grp, String key, String val) { + if (stmt_update == null) stmt_update = conn.Rls_reg(conn.Stmt_update_exclude(tbl_name, flds, fld_usr, fld_grp, fld_key)); + stmt_update.Clear().Val_str(fld_val, val).Crt_int(fld_usr, usr).Crt_str(fld_grp, grp).Crt_str(fld_key, key).Exec_update(); + } + public int Select_as_int_or_fail(String grp, String key) { + int rv = Select_as_int_or(grp, key, Int_.MinValue); + if (rv == Int_.MinValue) throw Err_.new_fmt_("dbs.cfg_tbl.Select_as_int_or_fail: usr={0} grp={1} key={2}", usr, grp, key); + return rv; + } + public int Select_as_int_or(String grp, String key, int or) {return Int_.parse_or_(Select_as_str_or(grp, key, null), or);} + public String Select_as_str_or(String grp, String key, String or) { + if (stmt_select == null) stmt_select = conn.Rls_reg(conn.Stmt_select(tbl_name, String_.Ary(fld_val), fld_usr, fld_grp, fld_key)); + Db_rdr rdr = Db_rdr_.Null; + try { + rdr = stmt_select.Clear() + .Crt_int(fld_usr, usr) + .Crt_str(fld_grp, grp) + .Crt_str(fld_key, key) + .Exec_select_as_rdr(); + return rdr.Move_next() ? rdr.Read_str(fld_val) : or; + } finally {rdr.Rls();} + } +// public Xoud_cfg_grp Select_as_grp(String grp) { +// Xoud_cfg_grp rv = null; +// Db_stmt stmt = conn.Stmt_select(tbl_name, flds, fld_grp); +// Db_rdr rdr = Db_rdr_.Null; +// try { +// rdr = stmt.Clear().Crt_str(fld_grp, grp).Exec_select_as_rdr(); +// while (rdr.Move_next()) { +// if (rv == null) rv = new Xoud_cfg_grp(grp); +// rv.Upsert(rdr.Read_str(fld_key), rdr.Read_str(fld_val)); +// } +// } +// finally {rdr.Rls();} +// return rv == null ? Xoud_cfg_grp.Null : rv; +// } +} diff --git a/400_xowa/src/gplx/xowa/users/data/Xoud_data_mgr.java b/400_xowa/src/gplx/xowa/users/data/Xoud_data_mgr.java index 5e327415c..3bd001233 100644 --- a/400_xowa/src/gplx/xowa/users/data/Xoud_data_mgr.java +++ b/400_xowa/src/gplx/xowa/users/data/Xoud_data_mgr.java @@ -19,18 +19,18 @@ package gplx.xowa.users.data; import gplx.*; import gplx.xowa.*; import gplx.xow import gplx.threads.*; import gplx.dbs.*; import gplx.dbs.schemas.updates.*; import gplx.dbs.schemas.*; import gplx.xowa2.users.data.*; public class Xoud_data_mgr { -// private Gfdb_db_base user_db = new Gfdb_db_base(); - public Xoud_site_mgr Site_mgr() {return site_mgr;} private final Xoud_site_mgr site_mgr = new Xoud_site_mgr(); - public Xoud_regy_mgr Regy_mgr() {return regy_mgr;} private final Xoud_regy_mgr regy_mgr = new Xoud_regy_mgr(); + private final Xoud_id_mgr id_mgr; + public Xoud_data_mgr() { + id_mgr = new Xoud_id_mgr(cfg_mgr); + site_mgr = new Xoud_site_mgr(id_mgr); + } + public Xoud_cfg_mgr Cfg_mgr() {return cfg_mgr;} private final Xoud_cfg_mgr cfg_mgr = new Xoud_cfg_mgr(); + public Xoud_site_mgr Site_mgr() {return site_mgr;} private final Xoud_site_mgr site_mgr; public Xoud_history_mgr History_mgr() {return history_mgr;} private final Xoud_history_mgr history_mgr = new Xoud_history_mgr(); - public void Init_by_boot(Db_conn user_conn, boolean created) { -// user_db.Schema().Loader_(Schema_loader_mgr_.Sqlite); -// Init_user_db_changes(user_db.Schema().Updater()); - int user_id = 1; + public void Init_by_boot(Db_conn user_conn, boolean created, int user_id) { + cfg_mgr.Conn_(user_conn, created, user_id); site_mgr.Conn_(user_conn, created, user_id); - history_mgr.History_tbl().Conn_(user_conn, created, user_id); -// user_db.Init(user_conn); -// regy_mgr.Init(user_conn); + history_mgr.Conn_(user_conn, created, user_id); } // private void Init_user_db_changes(Schema_update_mgr updater) { // updater.Add(Schema_update_cmd_.Make_tbl_create(Xoud_regy_tbl.Tbl_name , Xoud_regy_tbl.Tbl_sql , Xoud_regy_tbl.Idx_core)); diff --git a/400_xowa/src/gplx/xowa/users/data/Xoud_history_mgr.java b/400_xowa/src/gplx/xowa/users/data/Xoud_history_mgr.java index 1c636f532..091c27c83 100644 --- a/400_xowa/src/gplx/xowa/users/data/Xoud_history_mgr.java +++ b/400_xowa/src/gplx/xowa/users/data/Xoud_history_mgr.java @@ -16,9 +16,10 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.users.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*; -import gplx.threads.*; +import gplx.threads.*; import gplx.dbs.*; public class Xoud_history_mgr implements GfoInvkAble { - public Xoud_history_tbl History_tbl() {return history_tbl;} private final Xoud_history_tbl history_tbl = new Xoud_history_tbl(); + private final Xoud_history_tbl history_tbl = new Xoud_history_tbl(); + public void Conn_(Db_conn new_conn, boolean created, int user_id) {history_tbl.Conn_(new_conn, created, user_id);} public void Update_async(Gfo_async_mgr async_mgr, Xoa_ttl ttl, Xoa_url url) { // if (Skip_history(ttl)) return; // async_mgr.Queue(this, Invk_update, "wiki", String_.new_utf8_(url.Wiki_bry()), "page", String_.new_utf8_(url.Page_bry()), "qarg", String_.new_utf8_(url.Args_all_as_bry())); diff --git a/400_xowa/src/gplx/xowa/users/data/Xoud_history_special.java b/400_xowa/src/gplx/xowa/users/data/Xoud_history_special.java index cbe9b4f35..85e326249 100644 --- a/400_xowa/src/gplx/xowa/users/data/Xoud_history_special.java +++ b/400_xowa/src/gplx/xowa/users/data/Xoud_history_special.java @@ -23,7 +23,7 @@ public class Xoud_history_special implements Bry_fmtr_arg, Xows_page { Xoae_app app = wiki.Appe(); Xoud_history_mgr mgr = app.User().Data_mgr().History_mgr(); mgr.Select(rows, 100); - Bry_bfr bfr = app.Utl_bry_bfr_mkr().Get_m001(); + Bry_bfr bfr = app.Utl__bfr_mkr().Get_m001(); html_grp.Bld_bfr_many(bfr, this); page.Data_raw_(bfr.Mkr_rls().Xto_bry_and_clear()); } diff --git a/400_xowa/src/gplx/xowa/users/data/Xoud_id_mgr.java b/400_xowa/src/gplx/xowa/users/data/Xoud_id_mgr.java new file mode 100644 index 000000000..3e16a34bc --- /dev/null +++ b/400_xowa/src/gplx/xowa/users/data/Xoud_id_mgr.java @@ -0,0 +1,30 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.users.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*; +public class Xoud_id_mgr { + private Xoud_cfg_mgr cfg_mgr; + public Xoud_id_mgr(Xoud_cfg_mgr cfg_mgr) {this.cfg_mgr = cfg_mgr;} + public int Get_next(String key) {return cfg_mgr.Select_int_or(Grp_key, key, 1);} + public void Set_next(String key, int v) {cfg_mgr.Insert_int(Grp_key, key, v);} + public int Get_next_and_save(String key) { + int rv = Get_next(key); + Set_next(key, rv + 1); + return rv; + } + private static final String Grp_key = "gplx.next_id"; +} diff --git a/400_xowa/src/gplx/xowa/users/data/Xoud_opt_scope.java b/400_xowa/src/gplx/xowa/users/data/Xoud_opt_scope.java new file mode 100644 index 000000000..94061fbaa --- /dev/null +++ b/400_xowa/src/gplx/xowa/users/data/Xoud_opt_scope.java @@ -0,0 +1,84 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.users.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*; +import gplx.core.btries.*; import gplx.core.primitives.*; +import gplx.xowa.langs.*; import gplx.xowa.wikis.*; +class Xoud_opt_scope { + public Xoud_opt_scope(int lang_id, int type_id) {this.lang_id = lang_id; this.type_id = type_id;} + public int Lang_id() {return lang_id;} private final int lang_id; + public int Type_id() {return type_id;} private final int type_id; + public String To_str() { + String lang_str = lang_id == Lang_id_wildcard ? "*" : String_.new_utf8_(Xol_lang_itm_.Get_by_id(lang_id).Key()); + String type_str = type_id == Lang_id_wildcard ? "*" : String_.new_utf8_(Xow_domain_.Tid__get_bry(type_id)); + return lang_str + "." + type_str; + } + public static final int Lang_id_wildcard = -1, Type_id_wildcard = -1; + public static final Xoud_opt_scope App = new Xoud_opt_scope(Lang_id_wildcard, Type_id_wildcard); +} +class Xoud_opt_scope_parser { + private Gfo_usr_dlg usr_dlg; private final ListAdp list = ListAdp_.new_(); + public Xoud_opt_scope[] Parse(byte[] src) { + usr_dlg = Gfo_usr_dlg_._; + list.Clear(); + int pos = 0; int src_len = src.length; + while (pos < src_len) { + int comma_pos = Bry_finder.Find_fwd(src, Byte_ascii.Comma, pos, src_len); if (comma_pos == Bry_finder.Not_found) comma_pos = src_len; + Xoud_opt_scope itm = Parse_itm(src, pos, comma_pos); + if (itm == Xoud_opt_scope.App) return Ary_app; + list.Add(itm); + pos = comma_pos + 1; + } + return (Xoud_opt_scope[])list.Xto_ary_and_clear(Xoud_opt_scope.class); + } + public Xoud_opt_scope Parse_itm(byte[] src, int bgn, int end) { + int lang_dot = Bry_finder.Find_fwd(src, Byte_ascii.Dot, bgn, end); if (lang_dot == Bry_finder.Not_found) return Warn("scope.parse.missing_lang_dot: src=~{0}", src, bgn, end); + int lang_id = Int_.MinValue; + if (lang_dot == 1 && src[bgn] == Byte_ascii.Asterisk) + lang_id = Xoud_opt_scope.Lang_id_wildcard; + else { + Xol_lang_itm lang_itm = Xol_lang_itm_.Get_by_key_or_null(src, bgn, lang_dot); if (lang_itm == null) return Warn("scope.parse.invalid_lang: src=~{0}", src, bgn, end); + lang_id = lang_itm.Id(); + } + Object type_tid_obj = btrie_by_type.Match_bgn(src, lang_dot + 1, end); if (type_tid_obj == null) return Warn("scope.parse.invalid_type: src=~{0}", src, bgn, end); + int type_id = ((Int_obj_val)type_tid_obj).Val(); + return new Xoud_opt_scope(lang_id, type_id); + } + private Xoud_opt_scope Warn(String fmt, byte[] src, int bgn, int end) { + usr_dlg.Warn_many("", "", fmt, String_.new_utf8_(src, bgn, end)); + return Xoud_opt_scope.App; + } + private static final Btrie_slim_mgr btrie_by_type = Btrie_slim_mgr.cs_() + .Add_str_int("w" , Xow_domain_.Tid_int_wikipedia) + .Add_str_int("d" , Xow_domain_.Tid_int_wiktionary) + .Add_str_int("s" , Xow_domain_.Tid_int_wikisource) + .Add_str_int("v" , Xow_domain_.Tid_int_wikivoyage) + .Add_str_int("q" , Xow_domain_.Tid_int_wikiquote) + .Add_str_int("b" , Xow_domain_.Tid_int_wikibooks) + .Add_str_int("u" , Xow_domain_.Tid_int_wikiversity) + .Add_str_int("n" , Xow_domain_.Tid_int_wikinews) + .Add_str_int("*" , Xoud_opt_scope.Type_id_wildcard) + .Add_str_int("xowa" , Xow_domain_.Tid_int_home) + .Add_str_int("wd" , Xow_domain_.Tid_int_wikidata) + .Add_str_int("c" , Xow_domain_.Tid_int_commons) + .Add_str_int("species" , Xow_domain_.Tid_int_species) + .Add_str_int("meta" , Xow_domain_.Tid_int_meta) + .Add_str_int("mw" , Xow_domain_.Tid_int_mediawiki) + .Add_str_int("wmf" , Xow_domain_.Tid_int_wikimediafoundation) + ; + private static final Xoud_opt_scope[] Ary_app = new Xoud_opt_scope[] {Xoud_opt_scope.App}; +} diff --git a/400_xowa/src/gplx/xowa/users/data/Xoud_opt_scope_tst.java b/400_xowa/src/gplx/xowa/users/data/Xoud_opt_scope_tst.java new file mode 100644 index 000000000..463649ad0 --- /dev/null +++ b/400_xowa/src/gplx/xowa/users/data/Xoud_opt_scope_tst.java @@ -0,0 +1,51 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.users.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*; +import org.junit.*; import gplx.xowa.langs.*; import gplx.xowa.wikis.*; +public class Xoud_opt_scope_tst { + private Xoud_opt_scope_fxt fxt = new Xoud_opt_scope_fxt(); + @Before public void init() {fxt.Clear();} + @Test public void Basic() { + fxt.Test_parse("en.w" , fxt.Make(Xol_lang_itm_.Id_en, Xow_domain_.Tid_int_wikipedia)); + fxt.Test_parse("en.*" , fxt.Make(Xol_lang_itm_.Id_en, Xoud_opt_scope.Type_id_wildcard)); + fxt.Test_parse("*.w" , fxt.Make(Xoud_opt_scope.Lang_id_wildcard, Xow_domain_.Tid_int_wikipedia)); + fxt.Test_parse("*.*" , Xoud_opt_scope.App); + fxt.Test_parse("en.w,fr.d" , fxt.Make(Xol_lang_itm_.Id_en, Xow_domain_.Tid_int_wikipedia), fxt.Make(Xol_lang_itm_.Id_fr, Xow_domain_.Tid_int_wiktionary)); + } +} +class Xoud_opt_scope_fxt { + private final Xoud_opt_scope_parser parser = new Xoud_opt_scope_parser(); + public void Clear() { + Gfo_usr_dlg_._ = Xoa_app_.usr_dlg_console_(); + } + public Xoud_opt_scope Make(int lang_id, int type_id) {return new Xoud_opt_scope(lang_id, type_id);} + public void Test_parse(String raw, Xoud_opt_scope... expd) { + Xoud_opt_scope[] actl = parser.Parse(Bry_.new_utf8_(raw)); + Tfds.Eq(To_str(expd), To_str(actl)); + } + private static String To_str(Xoud_opt_scope[] ary) { + Bry_bfr bfr = Bry_bfr.new_(); + int len = ary.length; + for (int i = 0; i < len; ++i) { + Xoud_opt_scope itm = ary[i]; + if (i != 0) bfr.Add_str_ascii(","); + bfr.Add_str_ascii(itm.To_str()); + } + return bfr.Xto_str_and_clear(); + } +} diff --git a/400_xowa/src/gplx/xowa/users/data/Xoud_regy_mgr.java b/400_xowa/src/gplx/xowa/users/data/Xoud_regy_mgr.java deleted file mode 100644 index 33274c939..000000000 --- a/400_xowa/src/gplx/xowa/users/data/Xoud_regy_mgr.java +++ /dev/null @@ -1,54 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa.users.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*; -import gplx.dbs.*; -public class Xoud_regy_mgr { - private Xoud_regy_tbl regy_tbl = new Xoud_regy_tbl(); - public void Init(Db_conn conn) { - regy_tbl.Conn_(conn); - } - public byte[] Select_bry_or(String key, byte[] or) {return Select_bry_or("", key, or);} - public byte[] Select_bry_or(String grp, String key, byte[] or) { - String rv = regy_tbl.Select_val(grp, key); - return rv == null ? or : Bry_.new_utf8_(rv); - } - public byte[] Assert_bry_or(String key, byte[] or) {return Assert_bry_or("", key, or);} - public byte[] Assert_bry_or(String grp, String key, byte[] or) { - String rv = regy_tbl.Select_val(grp, key); - if (rv == null) { - Insert_bry(grp, key, or); - return or; - } - else - return Bry_.new_utf8_(rv); - } - public void Update_bry(String key, byte[] val) {Update_bry("", key, val);} - public void Update_bry(String grp, String key, byte[] val) {regy_tbl.Update(grp, key, String_.new_utf8_(val));} - public void Insert_bry(String key, byte[] val) {Insert_bry("", key, val);} - public void Insert_bry(String grp, String key, byte[] val) {regy_tbl.Insert(grp, key, String_.new_utf8_(val));} - public int Next_id(String tbl) { - String grp = "xowa." + tbl, key = "next_id"; - int next_id = Int_.parse_or_(regy_tbl.Select_val(grp, key), 1); // EX: xowa.cfg_history|next_id|1 - String new_val = Int_.Xto_str(next_id + 1); - if (next_id == 1) - regy_tbl.Insert(grp, key, new_val); - else - regy_tbl.Update(grp, key, new_val); - return next_id; - } -} diff --git a/400_xowa/src/gplx/xowa/users/data/Xoud_regy_tbl.java b/400_xowa/src/gplx/xowa/users/data/Xoud_regy_tbl.java index f642927af..8df68140a 100644 --- a/400_xowa/src/gplx/xowa/users/data/Xoud_regy_tbl.java +++ b/400_xowa/src/gplx/xowa/users/data/Xoud_regy_tbl.java @@ -18,8 +18,27 @@ along with this program. If not, see . package gplx.xowa.users.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*; import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.dbs.schemas.*; import gplx.dbs.schemas.updates.*; public class Xoud_regy_tbl { + public static final String Tbl_name = "user_regy", Fld_regy_grp = "regy_grp", Fld_regy_key = "regy_key", Fld_regy_val = "regy_val"; + private static final String[] Flds__all = new String[] {Fld_regy_grp, Fld_regy_key, Fld_regy_val}; + public static final Db_idx_itm Idx_core = Db_idx_itm.sql_("CREATE UNIQUE INDEX user_regy_core ON user_regy (regy_grp, regy_key);"); + public static final String Tbl_sql = String_.Concat_lines_nl + ( "CREATE TABLE user_regy" + , "( regy_grp nvarchar(255) NOT NULL -- EX: xowa.schema.site" + , ", regy_key nvarchar(255) NOT NULL -- EX: next_id" + , ", regy_val nvarchar(255) NOT NULL -- EX: 1" + , ");" + ); private Db_stmt stmt_select_grp, stmt_select_key, stmt_insert, stmt_update, stmt_delete; - public Db_conn Conn() {return conn;} public Xoud_regy_tbl Conn_(Db_conn v) {this.Rls_all(); conn = v; return this;} private Db_conn conn; + public Db_conn Conn() {return conn;} + public Xoud_regy_tbl Conn_(Db_conn v, boolean created) { + this.Rls_all(); conn = v; + if (created) { + Schema_update_cmd cmd = Schema_update_cmd_.Make_tbl_create(Xoud_regy_tbl.Tbl_name , Xoud_regy_tbl.Tbl_sql , Xoud_regy_tbl.Idx_core); + cmd.Exec(null, conn); +// conn.Exec_create_tbl_and_idx(meta); + } + return this; + } private Db_conn conn; @gplx.Virtual public void Insert(String grp, String key, String val) { if (stmt_insert == null) stmt_insert = Db_stmt_.new_insert_(conn, Tbl_name, Flds__all); try {stmt_insert.Clear().Val_str(grp).Val_str(key).Val_str(val).Exec_insert();} @@ -74,14 +93,4 @@ public class Xoud_regy_tbl { if (stmt_delete != null) {stmt_delete.Rls(); stmt_delete = null;} conn = null; } - public static final String Tbl_name = "user_regy", Fld_regy_grp = "regy_grp", Fld_regy_key = "regy_key", Fld_regy_val = "regy_val"; - private static final String[] Flds__all = new String[] {Fld_regy_grp, Fld_regy_key, Fld_regy_val}; - public static final Db_idx_itm Idx_core = Db_idx_itm.sql_("CREATE UNIQUE INDEX user_regy_core ON user_regy (regy_grp, regy_key);"); - public static final String Tbl_sql = String_.Concat_lines_nl - ( "CREATE TABLE user_regy" - , "( regy_grp nvarchar(255) NOT NULL -- EX: xowa.schema.site" - , ", regy_key nvarchar(255) NOT NULL -- EX: next_id" - , ", regy_val nvarchar(255) NOT NULL -- EX: 1" - , ");" - ); } diff --git a/400_xowa/src/gplx/xowa/users/history/Xou_history_html.java b/400_xowa/src/gplx/xowa/users/history/Xou_history_html.java index 94ffb6e3b..59fc34ef2 100644 --- a/400_xowa/src/gplx/xowa/users/history/Xou_history_html.java +++ b/400_xowa/src/gplx/xowa/users/history/Xou_history_html.java @@ -40,7 +40,7 @@ public class Xou_history_html implements Bry_fmtr_arg, Xows_page { public void Special_gen(Xoa_url calling_url, Xoae_page page, Xowe_wiki wiki, Xoa_ttl ttl) { this.app = wiki.Appe(); this.mgr = app.User().History_mgr(); mgr.Sort(); - Bry_bfr bfr = app.Utl_bry_bfr_mkr().Get_m001(); + Bry_bfr bfr = app.Utl__bfr_mkr().Get_m001(); html_grp.Bld_bfr_many(bfr, this); page.Data_raw_(bfr.Mkr_rls().Xto_bry_and_clear()); } diff --git a/400_xowa/src/gplx/xowa/wikis/Xow_domain_.java b/400_xowa/src/gplx/xowa/wikis/Xow_domain_.java index d9027ff8f..5d65930dd 100644 --- a/400_xowa/src/gplx/xowa/wikis/Xow_domain_.java +++ b/400_xowa/src/gplx/xowa/wikis/Xow_domain_.java @@ -40,8 +40,8 @@ public class Xow_domain_ { ; private static final byte[] Tid_bry_other = Bry_.new_ascii_("other") - , Tid_bry_species = Bry_.new_ascii_("species"), Tid_bry_meta = Bry_.new_ascii_("meta") - , Tid_bry_incubator = Bry_.new_ascii_("incubator"), Tid_bry_wikidata = Bry_.new_ascii_("wikidata"), Tid_bry_mediawiki = Bry_.new_ascii_("mediawiki") + , Tid_bry_meta = Bry_.new_ascii_("meta") + , Tid_bry_incubator = Bry_.new_ascii_("incubator"), Tid_bry_wikidata = Bry_.new_ascii_("wikidata") ; public static final byte[] Tid_bry_home = Bry_.new_ascii_(Tid_str_home) @@ -50,6 +50,7 @@ public class Xow_domain_ { , Tid_bry_wikinews = Bry_.new_ascii_("wikinews"), Tid_bry_wikivoyage = Bry_.new_ascii_("wikivoyage") , Tid_bry_commons = Bry_.new_ascii_("commons") , Tid_bry_wikimediafoundation = Bry_.new_ascii_("wikimediafoundation") + , Tid_bry_species = Bry_.new_ascii_("species"), Tid_bry_mediawiki = Bry_.new_ascii_("mediawiki") ; private static byte[][] Tid_bry__ary = new byte[][] { Tid_bry_other, Tid_bry_home diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_ns_map_mgr.java b/400_xowa/src/gplx/xowa/wikis/data/Xodb_ns_map_mgr.java similarity index 94% rename from 400_xowa/src/gplx/xowa/dbs/Xodb_ns_map_mgr.java rename to 400_xowa/src/gplx/xowa/wikis/data/Xodb_ns_map_mgr.java index fb2b560c8..d8c1a078f 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_ns_map_mgr.java +++ b/400_xowa/src/gplx/xowa/wikis/data/Xodb_ns_map_mgr.java @@ -15,7 +15,7 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*; +package gplx.xowa.wikis.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; class Xodb_ns_map_mgr { public Xodb_ns_map_itm[] Itms() {return itms;} private Xodb_ns_map_itm[] itms; public static Xodb_ns_map_mgr Parse(byte[] src) { diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_ns_map_mgr_tst.java b/400_xowa/src/gplx/xowa/wikis/data/Xodb_ns_map_mgr_tst.java similarity index 93% rename from 400_xowa/src/gplx/xowa/dbs/Xodb_ns_map_mgr_tst.java rename to 400_xowa/src/gplx/xowa/wikis/data/Xodb_ns_map_mgr_tst.java index cee941111..1d1c20f70 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_ns_map_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/wikis/data/Xodb_ns_map_mgr_tst.java @@ -15,7 +15,7 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*; +package gplx.xowa.wikis.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; import org.junit.*; import gplx.dbs.*; public class Xodb_ns_map_mgr_tst { @Before public void init() {fxt.Clear();} private Xodb_ns_map_mgr_fxt fxt = new Xodb_ns_map_mgr_fxt(); diff --git a/400_xowa/src/gplx/xowa/hdumps/srls/Hpg_srl_itm.java b/400_xowa/src/gplx/xowa/wikis/data/Xow_core_data_map.java similarity index 64% rename from 400_xowa/src/gplx/xowa/hdumps/srls/Hpg_srl_itm.java rename to 400_xowa/src/gplx/xowa/wikis/data/Xow_core_data_map.java index e21198ebc..090e77719 100644 --- a/400_xowa/src/gplx/xowa/hdumps/srls/Hpg_srl_itm.java +++ b/400_xowa/src/gplx/xowa/wikis/data/Xow_core_data_map.java @@ -15,11 +15,8 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa.hdumps.srls; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -import gplx.core.primitives.*; import gplx.xowa.hdumps.core.*; -import gplx.xowa2.gui.*; -public interface Hpg_srl_itm { - byte Tid(); - int Load(Xog_page hpg, byte[] bry, int bry_len, int itm_bgn, Int_obj_ref count_ref); - void Save(Xog_page hpg, Bry_bfr bfr); +package gplx.xowa.wikis.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; +public class Xow_core_data_map { + public boolean One_file() {return one_file;} public void One_file_(boolean v) {one_file = v;} private boolean one_file = Bool_.N; + public long Max__html() {return max__html;} public void Max__html_(long v) {max__html = v;} private long max__html = Io_mgr.Len_gb_2; } diff --git a/400_xowa/src/gplx/xowa/wikis/data/Xow_core_data_mgr.java b/400_xowa/src/gplx/xowa/wikis/data/Xow_core_data_mgr.java new file mode 100644 index 000000000..c2ce8aff4 --- /dev/null +++ b/400_xowa/src/gplx/xowa/wikis/data/Xow_core_data_mgr.java @@ -0,0 +1,31 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.wikis.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; +import gplx.dbs.cfgs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; +import gplx.xowa.wikis.data.*; +public interface Xow_core_data_mgr { + Xow_core_data_map Map(); + boolean Cfg__schema_is_1(); + int Cfg__db_id(); + int Dbs__len(); + Xowd_db_file Dbs__get_at(int i); + Xowd_db_file Dbs__get_by_tid_nth_or_new(byte tid); + Xowd_db_file Dbs__get_db_core(); + Db_cfg_tbl Tbl__cfg(); + Xowd_pg_regy_tbl Tbl__pg(); +} diff --git a/400_xowa/src/gplx/xowa/wikis/data/Xowd_db_file.java b/400_xowa/src/gplx/xowa/wikis/data/Xowd_db_file.java new file mode 100644 index 000000000..3ea5bcfc5 --- /dev/null +++ b/400_xowa/src/gplx/xowa/wikis/data/Xowd_db_file.java @@ -0,0 +1,57 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.wikis.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; +import gplx.dbs.*; +public class Xowd_db_file { + private final OrderedHash tbls = OrderedHash_.new_(); + public Xowd_db_file(int id, byte tid) {this.id = id; this.tid = tid;} + public int Id() {return id;} private final int id; // unique id in xowa_db + public byte Tid() {return tid;} private final byte tid; + public Io_url Url() {return url;} public Xowd_db_file Url_(Io_url v) {url = v; connect = Db_url_.sqlite_(url); return this;} private Io_url url; + public String Url_rel() {return url_rel;} public Xowd_db_file Url_rel_(String v) {url_rel = v; return this;} private String url_rel; + public long File_len() {return file_len;} public Xowd_db_file File_len_add(int v) {file_len += v; return this;} private long file_len; + public long File_max() {return file_max;} public Xowd_db_file File_max_(long v) {file_max = v; return this;} private long file_max; + public byte Cmd_mode() {return cmd_mode;} public Xowd_db_file Cmd_mode_(byte v) {cmd_mode = v; return this;} private byte cmd_mode; + public Db_url Connect() {return connect;} public Xowd_db_file Connect_(Db_url v) {connect = v; return this;} private Db_url connect; + public Db_conn Conn() { + if (conn == null) conn = Db_conn_pool.I.Get_or_new(connect); + return conn; + } private Db_conn conn; + public void Conn_(Db_conn p) {conn = p;} + public void Rls() { + if (conn == null) return; + try { + conn.Txn_mgr().Txn_end_all(); // close any open transactions + conn.Conn_term(); + } finally {conn = null;} + } + public void Tbls__add(String key, Object tbl) {tbls.Add(key, tbl);} + public Object Tbls__get_by(Xow_core_data_mgr core_data_mgr, String key) { + Object rv = tbls.Fetch(key); + if (rv == null) { + Xowd_db_init_tbl_wkr wkr = Xowd_db_init_tbl_mgr.I.Get(key); + rv = wkr.Tbl_init(core_data_mgr, this); + tbls.Add(key, rv); + } + return rv; + } + + public static final Xowd_db_file Null = null; + public static Xowd_db_file load_(int id, byte tid, String url) {return new Xowd_db_file(id, tid).Url_rel_(url).Cmd_mode_(Db_cmd_mode.Tid_ignore);} + public static Xowd_db_file make_(int id, byte tid, String url) {return new Xowd_db_file(id, tid).Url_rel_(url).Cmd_mode_(Db_cmd_mode.Tid_create);} +} diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_file_tid.java b/400_xowa/src/gplx/xowa/wikis/data/Xowd_db_file_.java similarity index 91% rename from 400_xowa/src/gplx/xowa/dbs/Xodb_file_tid.java rename to 400_xowa/src/gplx/xowa/wikis/data/Xowd_db_file_.java index 5bbca8181..d65777798 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_file_tid.java +++ b/400_xowa/src/gplx/xowa/wikis/data/Xowd_db_file_.java @@ -15,8 +15,8 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*; -public class Xodb_file_tid { +package gplx.xowa.wikis.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; +public class Xowd_db_file_ { public static final byte Tid_core = 1, Tid_text = 2, Tid_category = 3, Tid_search = 4, Tid_wikidata = 5, Tid_temp = 6, Tid_html = 7; // SERIALIZED public static final String Key_core = "core", Key_text = "text", Key_category = "category", Key_wikidata = "wikidata", Key_temp = "temp", Key_search = "search", Key_html = "html"; public static String Xto_key(byte v) { diff --git a/400_xowa/src/gplx/xowa/hdumps/loads/Xopg_xtn_skin_itm_mock.java b/400_xowa/src/gplx/xowa/wikis/data/Xowd_db_init_db_mgr.java similarity index 58% rename from 400_xowa/src/gplx/xowa/hdumps/loads/Xopg_xtn_skin_itm_mock.java rename to 400_xowa/src/gplx/xowa/wikis/data/Xowd_db_init_db_mgr.java index 535094cbf..0f6bd8ff2 100644 --- a/400_xowa/src/gplx/xowa/hdumps/loads/Xopg_xtn_skin_itm_mock.java +++ b/400_xowa/src/gplx/xowa/wikis/data/Xowd_db_init_db_mgr.java @@ -15,14 +15,13 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa.hdumps.loads; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -import gplx.xowa.pages.skins.*; -public class Xopg_xtn_skin_itm_mock implements Xopg_xtn_skin_itm { - private byte[] val; - public Xopg_xtn_skin_itm_mock(byte[] val) {this.val = val;} - public byte Tid() {return Xopg_xtn_skin_itm_tid.Tid_sidebar;} - public byte[] Key() {return Bry_.Empty;} - public void Write(Bry_bfr bfr, Xoae_page page) { - bfr.Add(val); +package gplx.xowa.wikis.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; +public class Xowd_db_init_db_mgr { + private final OrderedHash wkrs = OrderedHash_.new_(); + private void Add(Xowd_db_init_db_wkr wkr) {wkrs.Add(wkr.Db_tid(), wkr);} + public Xowd_db_init_db_wkr Get(byte tid) {return (Xowd_db_init_db_wkr)wkrs.Fetch(tid);} + public static final Xowd_db_init_db_mgr I = new Xowd_db_init_db_mgr(); + Xowd_db_init_db_mgr() { + Add(gplx.xowa.html.hdumps.Xowd_db_init_wkr__html.I); } } diff --git a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_tid.java b/400_xowa/src/gplx/xowa/wikis/data/Xowd_db_init_db_wkr.java similarity index 76% rename from 400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_tid.java rename to 400_xowa/src/gplx/xowa/wikis/data/Xowd_db_init_db_wkr.java index d24fb14ba..2ed4ba18f 100644 --- a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_tid.java +++ b/400_xowa/src/gplx/xowa/wikis/data/Xowd_db_init_db_wkr.java @@ -15,7 +15,8 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa.hdumps.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -public class Hdump_data_tid { // SERIALIZED - public static final int Tid_img = 1, Tid_redlink = 2, Tid_gallery = 3, Tid_imap = 4; +package gplx.xowa.wikis.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; +public interface Xowd_db_init_db_wkr { + byte Db_tid(); + Xowd_db_file Db_make(Xowe_core_data_mgr core_data_mgr); } diff --git a/400_xowa/src/gplx/xowa/hdumps/dbs/Xodb_wiki_page_html_row.java b/400_xowa/src/gplx/xowa/wikis/data/Xowd_db_init_tbl_mgr.java similarity index 57% rename from 400_xowa/src/gplx/xowa/hdumps/dbs/Xodb_wiki_page_html_row.java rename to 400_xowa/src/gplx/xowa/wikis/data/Xowd_db_init_tbl_mgr.java index 3b3f41ad5..5b1699623 100644 --- a/400_xowa/src/gplx/xowa/hdumps/dbs/Xodb_wiki_page_html_row.java +++ b/400_xowa/src/gplx/xowa/wikis/data/Xowd_db_init_tbl_mgr.java @@ -15,11 +15,13 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa.hdumps.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -public class Xodb_wiki_page_html_row { - public Xodb_wiki_page_html_row(int page_id, int tid, byte[] data) {this.page_id = page_id; this.tid = tid; this.data = data;} - public int Page_id() {return page_id;} private final int page_id; - public int Tid() {return tid;} private final int tid; - public byte[] Data() {return data;} private final byte[] data; - public static final int Tid_page = 0, Tid_data = 1; // SERIALIZED +package gplx.xowa.wikis.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; +public class Xowd_db_init_tbl_mgr { + private final OrderedHash wkrs = OrderedHash_.new_(); + private void Add(Xowd_db_init_tbl_wkr wkr) {wkrs.Add(wkr.Tbl_key(), wkr);} + public Xowd_db_init_tbl_wkr Get(String key) {return (Xowd_db_init_tbl_wkr)wkrs.Fetch(key);} + public static final Xowd_db_init_tbl_mgr I = new Xowd_db_init_tbl_mgr(); + Xowd_db_init_tbl_mgr() { + Add(gplx.xowa.html.hdumps.Xowd_db_init_wkr__html.I); + } } diff --git a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_img__basic.java b/400_xowa/src/gplx/xowa/wikis/data/Xowd_db_init_tbl_wkr.java similarity index 75% rename from 400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_img__basic.java rename to 400_xowa/src/gplx/xowa/wikis/data/Xowd_db_init_tbl_wkr.java index e0cc8d681..3e1743abe 100644 --- a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_img__basic.java +++ b/400_xowa/src/gplx/xowa/wikis/data/Xowd_db_init_tbl_wkr.java @@ -15,7 +15,8 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa.hdumps.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -public class Hdump_data_img__basic extends Hdump_data_img__base { - @Override public int Img_tid() {return Hdump_data_img__base.Tid_basic;} +package gplx.xowa.wikis.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; +public interface Xowd_db_init_tbl_wkr { + String Tbl_key(); + Object Tbl_init(Xow_core_data_mgr core_data_mgr, Xowd_db_file db_file); } diff --git a/400_xowa/src/gplx/xowa2/wikis/data/Xowd_ns_regy_tbl.java b/400_xowa/src/gplx/xowa/wikis/data/Xowd_ns_regy_tbl.java similarity index 85% rename from 400_xowa/src/gplx/xowa2/wikis/data/Xowd_ns_regy_tbl.java rename to 400_xowa/src/gplx/xowa/wikis/data/Xowd_ns_regy_tbl.java index 054239348..e37d252cc 100644 --- a/400_xowa/src/gplx/xowa2/wikis/data/Xowd_ns_regy_tbl.java +++ b/400_xowa/src/gplx/xowa/wikis/data/Xowd_ns_regy_tbl.java @@ -15,19 +15,19 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa2.wikis.data; import gplx.*; import gplx.xowa2.*; import gplx.xowa2.wikis.*; +package gplx.xowa.wikis.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; import gplx.dbs.*; import gplx.xowa.*; public class Xowd_ns_regy_tbl { private String tbl_name = "xowa_ns"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); private String fld_db_id, fld_ns_id, fld_ns_name, fld_ns_case, fld_ns_count, fld_ns_is_alias; private String[] where_cols; - private boolean version_is_1; + private boolean schema_is_1; private Db_conn conn; - public void Conn_(Db_conn new_conn, boolean version_is_1) { + public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1) { this.conn = new_conn; flds.Clear(); - this.version_is_1 = version_is_1; - if (version_is_1) { + this.schema_is_1 = schema_is_1; + if (schema_is_1) { where_cols = String_.Ary(fld_ns_id); fld_db_id = Db_meta_fld.Key_null; } @@ -41,6 +41,12 @@ public class Xowd_ns_regy_tbl { fld_ns_case = flds.Add_byte("ns_case"); fld_ns_is_alias = flds.Add_bool("ns_is_alias"); fld_ns_count = flds.Add_int("ns_count"); + if (created) { + Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds + , Db_meta_idx.new_unique_by_tbl_wo_null(tbl_name, "pkey", fld_db_id, fld_ns_id) + ); + conn.Exec_create_tbl_and_idx(meta); + } } public void Insert(int db_id, Xow_ns_mgr ns_mgr) { Db_stmt stmt = Db_stmt_.Null; @@ -64,7 +70,7 @@ public class Xowd_ns_regy_tbl { public void Select_all(int db_id, Xow_ns_mgr ns_mgr) { Db_rdr rdr = Db_rdr_.Null; Db_stmt stmt = Db_stmt_.Null; try { - String[] where = version_is_1 ? Db_meta_fld.Ary_empy : String_.Ary(fld_db_id); + String[] where = schema_is_1 ? Db_meta_fld.Ary_empy : String_.Ary(fld_db_id); stmt = conn.Stmt_select(tbl_name, flds, where); rdr = stmt.Clear() .Crt_int(fld_db_id, db_id) @@ -104,7 +110,4 @@ public class Xowd_ns_regy_tbl { .Crt_int(fld_ns_id, ns_id).Val_int(fld_ns_count, ns_count) .Exec_update(); } -// private static final Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds -// , Db_meta_idx.new_unique(tbl_name, "pkey", fld_db_id, fld_ns_id) -// ); } diff --git a/400_xowa/src/gplx/xowa2/wikis/data/Xowd_page_regy_tbl.java b/400_xowa/src/gplx/xowa/wikis/data/Xowd_pg_regy_tbl.java similarity index 56% rename from 400_xowa/src/gplx/xowa2/wikis/data/Xowd_page_regy_tbl.java rename to 400_xowa/src/gplx/xowa/wikis/data/Xowd_pg_regy_tbl.java index a93588e4d..6f3521885 100644 --- a/400_xowa/src/gplx/xowa2/wikis/data/Xowd_page_regy_tbl.java +++ b/400_xowa/src/gplx/xowa/wikis/data/Xowd_pg_regy_tbl.java @@ -15,26 +15,30 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa2.wikis.data; import gplx.*; import gplx.xowa2.*; import gplx.xowa2.wikis.*; +package gplx.xowa.wikis.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; import gplx.dbs.*; import gplx.xowa.*; import gplx.xowa.dbs.*; -public class Xowd_page_regy_tbl { +public class Xowd_pg_regy_tbl { private String tbl_name = "wiki_page_regy"; - private String fld_page_id, fld_page_ns, fld_page_title, fld_page_is_redirect, fld_page_touched, fld_page_len, fld_page_random_int, fld_page_text_db_id, fld_page_html_db_id, fld_page_redirect_id; + private String fld_db_id, fld_page_id, fld_page_ns, fld_page_title, fld_page_is_redirect, fld_page_touched, fld_page_len, fld_page_random_int, fld_page_text_db_id, fld_page_html_db_id, fld_page_redirect_id; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); private String[] flds_select() {return String_.Ary(fld_page_id, fld_page_ns, fld_page_title, fld_page_touched, fld_page_is_redirect, fld_page_len, fld_page_text_db_id, fld_page_html_db_id, fld_page_redirect_id);} private Db_conn conn; private Db_stmt stmt_select_all_by_ttl, stmt_select_all_by_id, stmt_select_id_by_ttl, stmt_insert; - public void Conn_(Db_conn new_conn, boolean created, boolean version_is_1) { - this.conn = new_conn; + private int db_id; + public String Tbl_name() {return tbl_name;} + public Db_meta_fld Fld_html_db_id() {return flds.Get_by(fld_page_html_db_id);} + public Db_meta_fld Fld_page_redirect_id() {return flds.Get_by(fld_page_redirect_id);} + public void Conn_(Db_conn new_conn, boolean created, boolean schema_is_1, int db_id, boolean hdump_enabled) { + this.conn = new_conn; flds.Clear(); this.db_id = db_id; String page_text_db_id_key = "page_text_db_id"; - if (version_is_1) { + if (schema_is_1) { tbl_name = "page"; page_text_db_id_key = "page_file_idx"; - fld_page_html_db_id = Db_meta_fld.Key_null; - fld_page_redirect_id = Db_meta_fld.Key_null; + fld_db_id = Db_meta_fld.Key_null; } else { + fld_db_id = flds.Add_int("db_id"); } - fld_page_id = flds.Add_int_pkey("page_id"); // int(10); unsigned -- MW:same + fld_page_id = flds.Add_int("page_id"); // int(10); unsigned -- MW:same fld_page_ns = flds.Add_int("page_namespace"); // int(11); -- MW:same fld_page_title = flds.Add_str("page_title", 255); // varbinary(255); -- MW:blob fld_page_is_redirect = flds.Add_int("page_is_redirect"); // tinyint(3); -- MW:same @@ -42,66 +46,85 @@ public class Xowd_page_regy_tbl { fld_page_len = flds.Add_int("page_len"); // int(10); unsigned -- MW:same except NULL REF: WikiPage.php!updateRevisionOn;" fld_page_random_int = flds.Add_int("page_random_int"); // MW:XOWA fld_page_text_db_id = flds.Add_int(page_text_db_id_key); // MW:XOWA - fld_page_html_db_id = flds.Add_int("page_html_db_id"); // MW:XOWA - fld_page_redirect_id = flds.Add_int("page_redirect_id"); // MW:XOWA + if (schema_is_1 && !hdump_enabled) { + fld_page_html_db_id = Db_meta_fld.Key_null; + fld_page_redirect_id = Db_meta_fld.Key_null; + } + else { + Hdump_enabled_(Bool_.Y); + } if (created) { Db_meta_tbl meta_tbl = Db_meta_tbl.new_(tbl_name, flds.To_fld_ary() - , Db_meta_idx.new_normal_by_tbl(tbl_name, "title" , fld_page_ns, fld_page_title, fld_page_id, fld_page_len, fld_page_is_redirect) - , Db_meta_idx.new_normal_by_tbl(tbl_name, "random" , fld_page_ns, fld_page_random_int) + , Db_meta_idx.new_unique_by_tbl_wo_null(tbl_name, "pkey" , fld_db_id, fld_page_id) + , Db_meta_idx.new_normal_by_tbl_wo_null(tbl_name, "title" , fld_db_id, fld_page_ns, fld_page_title, fld_page_id, fld_page_len, fld_page_is_redirect) + , Db_meta_idx.new_normal_by_tbl_wo_null(tbl_name, "random" , fld_db_id, fld_page_ns, fld_page_random_int) ); conn.Exec_create_tbl_and_idx(meta_tbl); } stmt_insert = stmt_select_all_by_ttl = stmt_select_all_by_id = stmt_select_id_by_ttl = null; } + private void Hdump_enabled_(boolean v) { + if (v) { + fld_page_html_db_id = flds.Add_int_dflt("page_html_db_id", -1); // MW:XOWA + fld_page_redirect_id = flds.Add_int_dflt("page_redirect_id", -1); // MW:XOWA + } + else { + fld_page_html_db_id = Db_meta_fld.Key_null; + fld_page_redirect_id = Db_meta_fld.Key_null; + } + } public boolean Select_by_ttl(Xodb_page rv, Xow_ns ns, byte[] ttl) { Db_rdr rdr = Db_rdr_.Null; try { - if (stmt_select_all_by_ttl == null) stmt_select_all_by_ttl = conn.Rls_reg(conn.Stmt_select(tbl_name, flds.To_str_ary(), fld_page_ns, fld_page_title)); - rdr = stmt_select_all_by_ttl.Clear().Val_int(ns.Id()).Val_str(String_.new_utf8_(ttl)).Exec_select_as_rdr(); + if (stmt_select_all_by_ttl == null) stmt_select_all_by_ttl = conn.Rls_reg(conn.Stmt_select(tbl_name, flds.To_str_ary(), String_.Ary_wo_null(fld_db_id, fld_page_ns, fld_page_title))); + rdr = stmt_select_all_by_ttl.Clear().Crt_int(fld_db_id, db_id).Crt_int(fld_page_ns, ns.Id()).Crt_str(fld_page_title, String_.new_utf8_(ttl)).Exec_select_as_rdr(); if (rdr.Move_next()) { Read_page__all(rv, rdr); return true; } } - catch (Exception exc) {stmt_select_all_by_ttl = null; throw Err_.err_(exc, "stmt failed");} // must reset stmt, else next call will fail finally {rdr.Rls();} return false; } public boolean Select_by_id(Xodb_page rv, int page_id) { Db_rdr rdr = Db_rdr_.Null; try { - if (stmt_select_all_by_id == null) stmt_select_all_by_id = conn.Rls_reg(conn.Stmt_select(tbl_name, flds_select(), fld_page_id)); - rdr = stmt_select_all_by_id.Clear().Val_int(page_id).Exec_select_as_rdr(); + if (stmt_select_all_by_id == null) stmt_select_all_by_id = conn.Rls_reg(conn.Stmt_select(tbl_name, flds_select(), String_.Ary_wo_null(fld_db_id, fld_page_id))); + rdr = stmt_select_all_by_id.Clear().Crt_int(fld_db_id, db_id).Crt_int(fld_page_id, page_id).Exec_select_as_rdr(); if (rdr.Move_next()) { Read_page__all(rv, rdr); return true; } } - catch (Exception exc) {stmt_select_all_by_id = null; throw Err_.err_(exc, "stmt failed");} // must reset stmt, else next call will fail finally {rdr.Rls();} return false; } public int Select_id(int ns_id, byte[] ttl) { Db_rdr rdr = Db_rdr_.Null; - if (stmt_select_id_by_ttl == null) stmt_select_id_by_ttl = conn.Rls_reg(conn.Stmt_select(tbl_name, flds_select(), fld_page_ns, fld_page_title)); + if (stmt_select_id_by_ttl == null) stmt_select_id_by_ttl = conn.Rls_reg(conn.Stmt_select(tbl_name, flds_select(), String_.Ary_wo_null(fld_db_id, fld_page_ns, fld_page_title))); try { - rdr = stmt_select_id_by_ttl.Crt_int(fld_page_ns, ns_id).Crt_bry_as_str(fld_page_title, ttl).Exec_select_as_rdr(); + rdr = stmt_select_id_by_ttl.Crt_int(fld_db_id, db_id).Crt_int(fld_page_ns, ns_id).Crt_bry_as_str(fld_page_title, ttl).Exec_select_as_rdr(); return rdr.Move_next() ? rdr.Read_int(fld_page_id) : Xodb_mgr_sql.Page_id_null; } finally {rdr.Rls();} } public void Insert(int page_id, int ns_id, byte[] ttl_wo_ns, boolean page_is_redirect, DateAdp modified_on, int page_len, int random_int, int file_idx, int html_db_id) { if (stmt_insert == null) stmt_insert = conn.Rls_reg(conn.Stmt_insert(tbl_name, flds.To_str_ary())); stmt_insert.Clear() - .Val_int(page_id) - .Val_int(ns_id) - .Val_str(String_.new_utf8_(ttl_wo_ns)) - .Val_byte((byte)(page_is_redirect ? 1 : 0)) - .Val_str(modified_on.XtoStr_fmt(Page_touched_fmt)) - .Val_int(page_len) - .Val_int(random_int) - .Val_int(file_idx) + .Val_int(fld_db_id, db_id) + .Val_int(fld_page_id, page_id) + .Val_int(fld_page_ns, ns_id) + .Val_str(fld_page_title, String_.new_utf8_(ttl_wo_ns)) + .Val_byte(fld_page_is_redirect, (byte)(page_is_redirect ? 1 : 0)) + .Val_str(fld_page_touched, modified_on.XtoStr_fmt(Page_touched_fmt)) + .Val_int(fld_page_len, page_len) + .Val_int(fld_page_random_int, random_int) + .Val_int(fld_page_text_db_id, file_idx) .Exec_insert(); } + public void Update_html_db_id(int page_id, int html_db_id) { + Db_stmt stmt = conn.Stmt_update(tbl_name, String_.Ary_wo_null(fld_db_id, fld_page_id), fld_page_html_db_id); + stmt.Val_int(fld_page_html_db_id, html_db_id).Crt_int(fld_db_id, db_id).Crt_int(fld_page_id, page_id).Exec_update(); + } private void Read_page__all(Xodb_page page, Db_rdr rdr) { page.Id_ (rdr.Read_int(fld_page_id)); page.Ns_id_ (rdr.Read_int(fld_page_ns)); diff --git a/400_xowa/src/gplx/xowa/wikis/data/Xowe_core_data_mgr.java b/400_xowa/src/gplx/xowa/wikis/data/Xowe_core_data_mgr.java new file mode 100644 index 000000000..bba0b3220 --- /dev/null +++ b/400_xowa/src/gplx/xowa/wikis/data/Xowe_core_data_mgr.java @@ -0,0 +1,142 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.wikis.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; +import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.dbs.engines.sqlite.*; +import gplx.xowa.wikis.data.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; +public class Xowe_core_data_mgr implements Xow_core_data_mgr { + private Xowd_db_file[] dbs__ary = new Xowd_db_file[0]; private int dbs__ary_len = 0; + private final Io_url src_dir; private final Io_url trg_dir; private final String domain_str; + public Xowe_core_data_mgr(Io_url src_dir, Io_url trg_dir, String domain_str) {this.src_dir = src_dir; this.trg_dir = trg_dir; this.domain_str = domain_str;} + public Xow_core_data_map Map() {return map;} private final Xow_core_data_map map = new Xow_core_data_map(); + public boolean Cfg__schema_is_1() {return Bool_.Y;} + public int Cfg__db_id() {return 1;} + public Db_cfg_tbl Tbl__cfg() {return tbl__cfg;} private final Db_cfg_tbl tbl__cfg = new Db_cfg_tbl(); + public Xodb_xowa_db_tbl Tbl__db() {return tbl__db;} private final Xodb_xowa_db_tbl tbl__db = new Xodb_xowa_db_tbl(); + public Xowd_pg_regy_tbl Tbl__pg() {return tbl__pg;} private final Xowd_pg_regy_tbl tbl__pg = new Xowd_pg_regy_tbl(); + public int Dbs__len() {return dbs__ary.length;} + public Xowd_db_file Dbs__get_db_core() {return dbs__ary[0];} + public Xowd_db_file Dbs__get_at(int i) {return dbs__ary[i];} + public Xowd_db_file Dbs__get_by_tid_1st(byte tid) { + if (tid == Xowd_db_file_.Tid_core && dbs__ary_len != 0) return dbs__ary[0]; + for (int i = 0; i < dbs__ary_len; i++) { + Xowd_db_file file = dbs__ary[i]; + if (file.Tid() == tid) return file; + } + return Xowd_db_file.Null; + } + public Xowd_db_file Dbs__get_by_tid_nth_or_new(byte tid) { + Xowd_db_file rv = Xowd_db_file.Null; + for (int i = 0; i < dbs__ary_len; i++) { + Xowd_db_file file = dbs__ary[i]; + if (file.Tid() == tid) rv = file; + } + if (rv == Xowd_db_file.Null) { + Xowd_db_init_db_wkr wkr = Xowd_db_init_db_mgr.I.Get(tid); + rv = wkr.Db_make(this); + } + return rv; + } + public void Dbs__save() {tbl__db.Commit_all(this);} + public Xowd_db_file Dbs__add_new(byte file_tid) { + int file_idx = dbs__ary_len; + Io_url url = Create_sqlite3(src_dir, trg_dir, domain_str, file_idx); + Xowd_db_file rv = Xowd_db_file.make_(file_idx, file_tid, url.NameAndExt()).Connect_(Db_url_.sqlite_(url)); + rv.Url_(url); + Db_conn core_conn = rv.Conn(); boolean created = Bool_.N; boolean schema_is_1 = Bool_.Y; int db_id = 1; + if (file_idx == 0) { + tbl__db.Conn_(core_conn, created, schema_is_1); + tbl__pg.Conn_(core_conn, created, schema_is_1, db_id, Bool_.N); + } + tbl__cfg.Conn_(core_conn, created, schema_is_1, "xowa_cfg", "wiki_cfg_regy"); + Xodb_xowa_cfg_tbl.Insert_str(rv.Conn(), Cfg_grp_db_meta, "type_name", Xowd_db_file_.Xto_key(file_tid)); + dbs__ary = (Xowd_db_file[])Array_.Resize(dbs__ary, dbs__ary_len + 1); + dbs__ary[dbs__ary_len++] = rv; + return rv; + } + public void Core_conn_(Db_conn new_conn, boolean created, boolean schema_is_1, int db_id, boolean hdump_enabled) { + tbl__cfg.Conn_(new_conn, created, schema_is_1, "xowa_cfg", "wiki_cfg_regy"); + tbl__db.Conn_(new_conn, created, schema_is_1); + tbl__pg.Conn_(new_conn, created, schema_is_1, db_id, hdump_enabled); + } + public Db_conn Conn_core() {return provider_core;} private Db_conn provider_core; + public Db_conn Conn_page() {return provider_page;} private Db_conn provider_page; + public Db_conn Conn_ctg() {return provider_ctg;} public void Conn_ctg_(Xowd_db_file file) {provider_ctg = file.Conn();} private Db_conn provider_ctg; + public Db_conn Conn_wdata() {return provider_wdata;}public void Conn_wdata_(Xowd_db_file file) {provider_wdata = file.Conn();} private Db_conn provider_wdata; + public int Tid_text_idx() {return tid_text_idx;} public Xowe_core_data_mgr Tid_text_idx_(int v) {tid_text_idx = v; return this;} private int tid_text_idx = File_id_core; + public long Tid_text_max() {return tid_text_max;} private long tid_text_max = Heap_max_infinite; + public void Init_by_files(Db_conn p, Xowd_db_file[] v) { + dbs__ary = v; dbs__ary_len = v.length; + boolean category_provider_core_null = true; + for (int i = 0; i < dbs__ary_len; i++) { + Xowd_db_file file = dbs__ary[i]; + Io_url url = trg_dir.GenSubFil(file.Url_rel()); // relative name only + file.Connect_(Db_url_.sqlite_(url)).Url_(url); + switch (file.Tid()) { + case Xowd_db_file_.Tid_core : file.Conn_(p); Set_file_core(file); break; + case Xowd_db_file_.Tid_category : if (category_provider_core_null) {Conn_ctg_(file); category_provider_core_null = false;} break; + case Xowd_db_file_.Tid_wikidata : Conn_wdata_(file); break; + case Xowd_db_file_.Tid_text : Set_file_text(file); break; + } + } + } + public void Init_by_ns_map(Xow_ns_mgr ns_mgr, String ns_map_str, long text_max) { + Set_file_core(Dbs__add_new(Xowd_db_file_.Tid_core)); + Xodb_ns_map_mgr ns_map = Xodb_ns_map_mgr.Parse(Bry_.new_ascii_(ns_map_str)); + Xodb_ns_map_itm[] ns_map_itms = ns_map.Itms(); + int ns_map_itms_len = ns_map_itms.length; + for (int i = 0; i < ns_map_itms_len; i++) { + Xodb_ns_map_itm itm = ns_map_itms[i]; + int[] ns_ids = itm.Ns_ids(); + int ns_ids_len = ns_ids.length; + Xowd_db_file file = Dbs__add_new(Xowd_db_file_.Tid_text); + for (int j = 0; j < ns_ids_len; j++) { + int ns_id = ns_ids[j]; + Xow_ns ns = ns_mgr.Ids_get_or_null(ns_id); if (ns == null) continue; // some dumps may not have ns; for example, pre-2013 dumps won't have Module (828) + ns.Bldr_file_idx_(file.Id()); + } + } + if (text_max > 0) + Set_file_text(Dbs__add_new(Xowd_db_file_.Tid_text).File_max_(text_max)); + } + private void Set_file_core(Xowd_db_file file) {provider_core = provider_page = provider_ctg = provider_wdata = file.Conn();} + private void Set_file_text(Xowd_db_file file) {tid_text_idx = file.Id(); tid_text_max = file.File_max();} + public Io_url Get_url(byte file_tid) { + Xowd_db_file file = Dbs__get_by_tid_1st(file_tid); + return trg_dir.GenSubFil(file.Url_rel()); + } + public void Index_create(Gfo_usr_dlg usr_dlg, byte[] tids, Db_idx_itm... idxs) { + for (int i = 0; i < dbs__ary_len; i++) { + Xowd_db_file file = dbs__ary[i]; + if (Byte_.In(file.Tid(), tids)) + Sqlite_engine_.Idx_create(usr_dlg, file.Conn(), Int_.Xto_str(file.Id()), idxs); + } + } + public void Rls() { + for (int i = 0; i < dbs__ary_len; i++) + dbs__ary[i].Rls(); + } + private static Io_url Create_sqlite3(Io_url src_dir, Io_url trg_dir, String domain_str, int file_idx) { + Io_url src_fil = src_dir.GenSubFil("xowa.sqlite3"); // /bin/any/sql/xowa/xowa.sqlite3 + Io_url trg_fil = trg_dir.GenSubFil_ary(domain_str, ".", Int_.Xto_str_pad_bgn(file_idx, 3), ".sqlite3"); // /wiki/en.wikipedia.org/en.wikipedia.org.000.sqlite3 + Io_mgr._.CopyFil(src_fil, trg_fil, true); + return trg_fil; + } + private static final int File_id_core = 0; + public static final int Heap_max_infinite = 0; + public static final String Cfg_grp_db_meta = "db.meta"; +} diff --git a/400_xowa/src/gplx/xowa/wikis/data/Xowv_core_data_mgr.java b/400_xowa/src/gplx/xowa/wikis/data/Xowv_core_data_mgr.java new file mode 100644 index 000000000..c9097418b --- /dev/null +++ b/400_xowa/src/gplx/xowa/wikis/data/Xowv_core_data_mgr.java @@ -0,0 +1,64 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.wikis.data; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; +import gplx.dbs.*; import gplx.dbs.cfgs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; +import gplx.xowa.*; import gplx.xowa.wikis.data.*; +public class Xowv_core_data_mgr implements Xow_core_data_mgr { + private final String domain_str; private final Io_url wiki_root_dir; + private Xowd_db_file[] dbs__ary; private boolean init_done = false; + public Xowv_core_data_mgr(String domain_str, Io_url wiki_root_dir) { + this.domain_str = domain_str; this.wiki_root_dir = wiki_root_dir; + } + public Xow_core_data_map Map() {return map;} private final Xow_core_data_map map = new Xow_core_data_map(); + public boolean Cfg__schema_is_1() {return Bool_.Y;} + public int Cfg__db_id() {return 1;} + public Db_cfg_tbl Tbl__cfg() {return tbl__cfg;} private final Db_cfg_tbl tbl__cfg = new Db_cfg_tbl(); + public Xodb_xowa_db_tbl Tbl__db() {return tbl__db;} private final Xodb_xowa_db_tbl tbl__db = new Xodb_xowa_db_tbl(); + public Xowd_ns_regy_tbl Tbl__ns() {return tbl__ns;} private final Xowd_ns_regy_tbl tbl__ns = new Xowd_ns_regy_tbl(); + public Xowd_pg_regy_tbl Tbl__pg() {return tbl__pg;} private final Xowd_pg_regy_tbl tbl__pg = new Xowd_pg_regy_tbl(); + public int Dbs__len() {return dbs__ary_len;} private int dbs__ary_len; + public Xowd_db_file Dbs__get_db_core() {return dbs__ary[0];} + public Xowd_db_file Dbs__get_at(int i) {if (!Int_.Between(i, 0, dbs__ary_len)) throw Err_.new_("database does not exist: idx={0}", i); return dbs__ary[i];} + public Xowd_db_file Dbs__get_by_tid_nth_or_new(byte tid) { + Xowd_db_file rv = Xowd_db_file.Null; + for (int i = 0; i < dbs__ary_len; i++) { + Xowd_db_file file = dbs__ary[i]; + if (file.Tid() == tid) rv = file; + } + if (rv == Xowd_db_file.Null) + throw Err_.not_implemented_msg_("view_mode doesn't allow creating databases"); + return rv; + } + public boolean Init() { + if (init_done) return false; + init_done = true; + if (String_.Eq(domain_str, "xowa")) return true; // FIXME: ignore "xowa" for now; WHEN:converting xowa to sqlitedb + Io_url core_db_url = wiki_root_dir.GenSubFil_ary(domain_str, ".000.sqlite3"); + Db_conn_bldr_data conn_data = Db_conn_bldr.I.Get_or_new("", core_db_url); + Db_conn core_conn = conn_data.Conn(); boolean created = conn_data.Created(); + if (Op_sys.Cur().Tid_is_drd()) created = Bool_.Y; // WORKAROUND.DRD:Android returns File.exists of false for files in /data/file/; DATE:2015-02-26 + boolean schema_is_1 = Bool_.Y; int db_id = 1; + tbl__cfg.Conn_(core_conn, created, schema_is_1, "xowa_cfg", "wiki_cfg_regy"); + tbl__db.Conn_(core_conn, created, schema_is_1); + tbl__ns.Conn_(core_conn, created, schema_is_1); + tbl__pg.Conn_(core_conn, created, schema_is_1, db_id, Bool_.Y); + dbs__ary = tbl__db.Select_all(wiki_root_dir); + dbs__ary_len = dbs__ary.length; + return true; + } +} diff --git a/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_lang_mgr.java b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_lang_mgr.java index 44a9b8210..122bb1d3d 100644 --- a/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_lang_mgr.java +++ b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_lang_mgr.java @@ -106,7 +106,7 @@ class Xow_lang_html implements Bry_fmtr_arg { switch (stage) { case 0: { stage = 1; - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b128().Mkr_rls(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b128().Mkr_rls(); byte[] msg_lang = wiki.Msg_mgr().Val_by_id(Xol_msg_itm_.Id_page_lang_header); byte[] wikidata_link = Bry_.Len_eq_0(qid) ? Bry_.Empty : lang_mgr.Html_wikidata_link().Bld_bry_many(tmp_bfr, qid); toggle_itm.Init(wiki); diff --git a/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr.java b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr.java index cc981ae91..8dca25ba7 100644 --- a/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr.java +++ b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr.java @@ -84,7 +84,7 @@ public class Xow_xwiki_mgr implements GfoInvkAble { } static final byte[] Arg_0 = Bry_.new_ascii_("~{0}"); String Exec_itms_print(byte[] raw) { Bry_fmtr fmtr = Bry_fmtr.new_bry_(raw, "wiki_key");//, "wiki_type_url", "wiki_lang", "wiki_name", "wiki_logo_url"); - Bry_bfr tmp_bfr = Xoa_app_.Utl_bry_bfr_mkr().Get_k004(); + Bry_bfr tmp_bfr = Xoa_app_.Utl__bfr_mkr().Get_k004(); Hash_adp_bry seen = Hash_adp_bry.ci_ascii_(); // ASCII:url_domain; EX:en.wikipedia.org int wikis_len = list.Count(); for (int i = 0; i < wikis_len; i++) { diff --git a/400_xowa/src/gplx/xowa/wmfs/apis/Xoapi_orig_base.java b/400_xowa/src/gplx/xowa/wmfs/apis/Xoapi_orig_base.java index 6f2f67d41..56798b3e7 100644 --- a/400_xowa/src/gplx/xowa/wmfs/apis/Xoapi_orig_base.java +++ b/400_xowa/src/gplx/xowa/wmfs/apis/Xoapi_orig_base.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.wmfs.apis; import gplx.*; import gplx.xowa.*; import gplx.xowa.wmfs.*; import gplx.ios.*; import gplx.xowa.files.repos.*; public abstract class Xoapi_orig_base { - public boolean Api_query_size(Xoapi_orig_rslts rv, Xof_download_wkr download_wkr, Xowe_repo_mgr repo_mgr, byte[] ttl, int width, int height) { + public boolean Api_query_size(Xoapi_orig_rslts rv, Xof_download_wkr download_wkr, Xow_repo_mgr repo_mgr, byte[] ttl, int width, int height) { if (!gplx.ios.IoEngine_system.Web_access_enabled) return false; // don't check api if download disabled else "download_failed" messages in log (particularly during pkg_make) DATE:2015-02-12 Gfo_usr_dlg usr_dlg = Gfo_usr_dlg_._; Xof_repo_pair[] repos = repo_mgr.Repos_ary(); diff --git a/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_box_w_fmtr_arg.java b/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_box_w_fmtr_arg.java index 19bf959f8..e5980f079 100644 --- a/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_box_w_fmtr_arg.java +++ b/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_box_w_fmtr_arg.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.xtns.gallery; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; -import gplx.html.*; import gplx.xowa.hdumps.htmls.*; +import gplx.html.*; import gplx.xowa.html.hdumps.abrvs.*; public interface Gallery_box_w_fmtr_arg extends Bry_fmtr_arg { Gallery_box_w_fmtr_arg Init(int uid, int width); } @@ -34,7 +34,7 @@ class Gallery_box_w_fmtr_arg__hdump implements Gallery_box_w_fmtr_arg { private int uid; public Gallery_box_w_fmtr_arg Init(int uid, int width) {this.uid = uid; return this;} public void XferAry(Bry_bfr bfr, int idx) { - bfr.Add(Hdump_html_consts.Key_gallery_box_w); + bfr.Add(Xohd_abrv_.Key_gallery_box_w); bfr.Add_int_variable(uid); bfr.Add_byte_apos(); } @@ -56,7 +56,7 @@ class Gallery_img_pad_fmtr_arg__hdump implements Gallery_img_pad_fmtr_arg { private int uid; public Gallery_img_pad_fmtr_arg Init(int uid, int width) {this.uid = uid; return this;} public void XferAry(Bry_bfr bfr, int idx) { - bfr.Add(Hdump_html_consts.Key_gallery_img_pad); + bfr.Add(Xohd_abrv_.Key_gallery_img_pad); bfr.Add_int_variable(uid); bfr.Add_byte_apos(); } diff --git a/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_html_wtr.java b/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_html_wtr.java index 4719d613a..fab88d51c 100644 --- a/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_html_wtr.java +++ b/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_html_wtr.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.xtns.gallery; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; -import gplx.xowa.files.*; import gplx.xowa.html.*; import gplx.xowa.html.lnkis.*; import gplx.xowa.hdumps.core.*; import gplx.xowa.hdumps.pages.*; +import gplx.xowa.files.*; import gplx.xowa.html.*; import gplx.xowa.html.lnkis.*; import gplx.xowa.html.hdumps.core.*; import gplx.xowa.html.hdumps.pages.*; public class Gallery_html_wtr { private final Xoh_arg_img_core img_core_fmtr_basic = new Xoh_arg_img_core__basic(), img_core_fmtr_hdump = new Xoh_arg_img_core__hdump(); public void Write_html(Bry_bfr bfr, Xoae_app app, Xowe_wiki wiki, Xop_ctx ctx, Xoh_html_wtr wtr, Xoh_wtr_ctx hctx, Xoae_page page, Gallery_xnde mgr, byte[] src) { @@ -46,7 +46,7 @@ public class Gallery_html_wtr { mgr_box_cls = Bry_.Empty; mgr_box_width_all = Gallery_html_wtr_utl.Calc_itm_pad_w(itm_box_w) * row_multiplier; // 8=Gallery Box borders; REF.MW:ImageGallery.php|GB_BORDERS; } - Bry_bfr itm_bfr = wiki.Utl_bry_bfr_mkr().Get_k004(), tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_k004(); + Bry_bfr itm_bfr = wiki.Utl__bfr_mkr().Get_k004(), tmp_bfr = wiki.Utl__bfr_mkr().Get_k004(); int mgr_elem_id = -1; int gallery_w_count = 0; boolean hctx_is_hdump = hctx.Mode_is_hdump(); Xoh_arg_img_core img_core_fmtr = hctx_is_hdump ? img_core_fmtr_hdump : img_core_fmtr_basic; @@ -105,7 +105,7 @@ public class Gallery_html_wtr { , lnki_alt ); if (hctx_is_hdump) - hdump_imgs.Data_add_img(new Hdump_data_img__gallery().Init_by_gallery(itm_div_w, itm_box_w, itm_margin), xfer_itm, Hdump_data_img__gallery.Tid_gallery); + hdump_imgs.Imgs_add_img(new Xohd_data_itm__gallery_itm().Init_by_gallery(itm_div_w, itm_box_w, itm_margin), xfer_itm, Xohd_data_itm__gallery_itm.Tid_gallery); } else { Gallery_html_wtr_.Itm_txt_fmtr.Bld_bfr_many(itm_bfr @@ -164,7 +164,7 @@ class Gallery_html_wtr_ { public static byte[] Bld_caption(Xowe_wiki wiki, Xop_ctx ctx, Xoh_html_wtr wtr, Xoh_wtr_ctx hctx, Gallery_itm itm) { byte[] rv = itm.Caption_bry(); if (Bry_.Len_gt_0(rv)) { - Bry_bfr caption_bfr = wiki.Utl_bry_bfr_mkr().Get_k004(); + Bry_bfr caption_bfr = wiki.Utl__bfr_mkr().Get_k004(); Xop_root_tkn caption_root = itm.Caption_tkn(); wtr.Write_tkn(caption_bfr, ctx, hctx, caption_root.Root_src(), caption_root, Xoh_html_wtr.Sub_idx_null, caption_root); rv = caption_bfr.Mkr_rls().Xto_bry_and_clear(); diff --git a/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_itm.java b/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_itm.java index 5d0cd08cb..cebfa7e82 100644 --- a/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_itm.java +++ b/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_itm.java @@ -43,16 +43,16 @@ public class Gallery_itm implements Js_img_wkr { this.xnde = xnde; this.xfer_itm = xfer_itm;; this.wiki = wiki; this.ctx = ctx; this.src = src; this.gallery_li_id_bry = gallery_li_id_bry; this.gallery_itm_idx = gallery_itm_idx; } private Gallery_xnde xnde; private Xof_xfer_itm xfer_itm; private Xowe_wiki wiki; private Xop_ctx ctx; private byte[] src; private byte[] gallery_li_id_bry; private int gallery_itm_idx; - public void Html_update(Xoae_page page, Xog_html_itm html_itm, int html_uid, int html_w, int html_h, String html_src, int orig_w, int orig_h, String orig_src, byte[] lnki_ttl) { + public void Html_update(Xoa_page page, Xog_js_wkr js_wkr, int html_uid, int html_w, int html_h, String html_src, int orig_w, int orig_h, String orig_src, byte[] lnki_ttl) { Gallery_mgr_base gallery_mgr = xnde.Gallery_mgr(); - Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_k004(), tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_k004(); + Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_k004(), tmp_bfr = wiki.Utl__bfr_mkr().Get_k004(); try { xfer_itm.Init_for_gallery_update(html_w, html_h, html_src, orig_src); gallery_mgr.Write_html_itm(bfr, tmp_bfr, wiki.Appe(), wiki, ctx.Cur_page(), ctx, wiki.Html_mgr().Html_wtr(), Xoh_wtr_ctx.Basic, src, xnde, Bry_.Empty, gallery_itm_idx, xfer_itm, false); String itm_html = bfr.Xto_str_and_clear(); - html_itm.Html_elem_replace_html(String_.new_utf8_(gallery_li_id_bry), itm_html); + js_wkr.Html_elem_replace_html(String_.new_utf8_(gallery_li_id_bry), itm_html); if (gallery_itm_idx == xnde.Itms_len() - 1 && Gallery_mgr_base_.Mode_is_packed(xnde.Mode())) - page.Html_data().Xtn_gallery_packed_exists_y_(); // set flag for packed_gallery; don't fire multiple times; PAGE:en.html_w:National_Sculpture_Museum_(Valladolid); DATE:2014-07-21 + page.Xtn_gallery_packed_exists_y_(); // set flag for packed_gallery; don't fire multiple times; PAGE:en.w:National_Sculpture_Museum_(Valladolid); DATE:2014-07-21 } finally { bfr.Mkr_rls(); tmp_bfr.Mkr_rls(); diff --git a/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_itm_parser.java b/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_itm_parser.java index 42aaf39ea..9b1ae073a 100644 --- a/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_itm_parser.java +++ b/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_itm_parser.java @@ -162,7 +162,7 @@ public class Gallery_itm_parser { case Fld_ttl: cur_itm.Ttl_end_(fld_end); byte[] ttl_bry = Bry_.Mid(src, cur_itm.Ttl_bgn(), fld_end); - ttl_bry = Xoa_app_.Utl_encoder_mgr().Url_ttl().Decode(ttl_bry); // NOTE: must decode url-encoded entries; EX: "A%28b%29.png" -> "A(b).png"; DATE:2014-01-01 + ttl_bry = Xoa_app_.Utl__encoder_mgr().Url_ttl().Decode(ttl_bry); // NOTE: must decode url-encoded entries; EX: "A%28b%29.png" -> "A(b).png"; DATE:2014-01-01 Xoa_ttl ttl = Xoa_ttl.parse_(wiki, ttl_bry); if ( ttl == null // invalid ttl; EX: "" || ttl.Anch_bgn() == 1 // anchor-only ttl; EX: "#invalid"; DATE:2014-03-18 diff --git a/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_mgr_base.java b/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_mgr_base.java index 4f2603002..ab7b696de 100644 --- a/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_mgr_base.java +++ b/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_mgr_base.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.xtns.gallery; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; -import gplx.html.*; import gplx.xowa.html.*; import gplx.xowa.html.modules.*; import gplx.xowa.files.*; import gplx.xowa.hdumps.htmls.*; import gplx.xowa.hdumps.core.*; +import gplx.html.*; import gplx.xowa.html.*; import gplx.xowa.html.modules.*; import gplx.xowa.files.*; import gplx.xowa.html.hdumps.abrvs.*; import gplx.xowa.html.hdumps.core.*; public abstract class Gallery_mgr_base { private Gallery_box_w_fmtr_arg__basic box_w_fmtr__basic = new Gallery_box_w_fmtr_arg__basic(); private Gallery_box_w_fmtr_arg__hdump box_w_fmtr__hdump = new Gallery_box_w_fmtr_arg__hdump(); private Gallery_img_pad_fmtr_arg__basic img_pad_fmtr__basic = new Gallery_img_pad_fmtr_arg__basic(); private Gallery_img_pad_fmtr_arg__hdump img_pad_fmtr__hdump = new Gallery_img_pad_fmtr_arg__hdump(); @@ -53,13 +53,13 @@ public abstract class Gallery_mgr_base { } public void Write_html(Bry_bfr bfr, Xowe_wiki wiki, Xoae_page page, Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Gallery_xnde xnde) { boolean hctx_is_hdump = hctx.Mode_is_hdump(); - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b512(); byte[] box_style = xnde.Atr_style(); int gallery_uid = page.Html_data().Xtn_gallery_next_id(); if (itms_per_row > 0) { int max_width = itms_per_row * (itm_default_w + this.Get_all_padding()); box_style = Fmt_and_add(tmp_bfr, box_style_max_width_fmtr, box_style, max_width); - page.Hdump_data().Data_add(new Hdump_data_gallery(gallery_uid, max_width)); + page.Hdump_data().Imgs_add(new Xohd_data_itm__gallery_mgr(gallery_uid, max_width)); } byte[] box_cls = Fmt_and_add(tmp_bfr, box_cls_fmtr, xnde.Atr_cls(), this.Tid_bry()); byte[] gallery_ul_id = tmp_bfr.Add(box_id_prefix_bry).Add_int_variable(gallery_uid).Xto_bry_and_clear(); @@ -149,7 +149,7 @@ public abstract class Gallery_mgr_base { Wrap_gallery_text(bfr, itm_caption, html_w_expand, html_h_expand); bfr.Add(itm_li_end_bry); if (hctx_is_hdump) - page.Hdump_data().Data_add_img(new Hdump_data_img__gallery().Init_by_gallery(itm_div_width, img_div_w, vpad), xfer_itm, Hdump_data_img__gallery.Tid_gallery); + page.Hdump_data().Imgs_add_img(new Xohd_data_itm__gallery_itm().Init_by_gallery(itm_div_width, img_div_w, vpad), xfer_itm, Xohd_data_itm__gallery_itm.Tid_gallery); } private static final byte[] Wrap_gallery_text_bgn = Bry_.new_ascii_("\n
    ") // NOTE: The newline after
    is needed to accommodate htmltidy @@ -195,7 +195,7 @@ public abstract class Gallery_mgr_base { Html_wtr.Write_atr_bry(bfr, Html_atr_.Cls_bry, cls); if (hctx_is_hdump) { bfr.Add_byte_space(); - bfr.Add(Hdump_html_consts.Key_gallery_box_max); + bfr.Add(Xohd_abrv_.Key_gallery_box_max); bfr.Add_int_variable(uid); bfr.Add_byte_apos(); } diff --git a/400_xowa/src/gplx/xowa/xtns/geoCrumbs/Geoc_isin_func.java b/400_xowa/src/gplx/xowa/xtns/geoCrumbs/Geoc_isin_func.java index 72993c656..a8525f5cb 100644 --- a/400_xowa/src/gplx/xowa/xtns/geoCrumbs/Geoc_isin_func.java +++ b/400_xowa/src/gplx/xowa/xtns/geoCrumbs/Geoc_isin_func.java @@ -25,7 +25,7 @@ public class Geoc_isin_func extends Pf_func_base { Xowe_wiki wiki = ctx.Wiki(); Xoa_ttl ttl = Xoa_ttl.parse_(wiki, ttl_bry); if (ttl == null) return; byte[] lnki_ttl = Bry_.Add(Xop_tkn_.Lnki_bgn, ttl_bry, Xop_tkn_.Lnki_end); // make "[[ttl]]" - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b128(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b128(); wiki.Parser().Parse_text_to_html(tmp_bfr, ctx.Cur_page(), false, lnki_ttl); ctx.Cur_page().Html_data().Content_sub_(tmp_bfr.Mkr_rls().Xto_bry_and_clear()); } diff --git a/400_xowa/src/gplx/xowa/xtns/hieros/Hiero_html_wtr.java b/400_xowa/src/gplx/xowa/xtns/hieros/Hiero_html_wtr.java index e38c5890b..a2eb66f2f 100644 --- a/400_xowa/src/gplx/xowa/xtns/hieros/Hiero_html_wtr.java +++ b/400_xowa/src/gplx/xowa/xtns/hieros/Hiero_html_wtr.java @@ -21,7 +21,7 @@ class Hiero_html_wtr { private Hiero_phoneme_mgr phoneme_mgr; private Bry_bfr temp_bfr = Bry_bfr.reset_(255); public Hiero_html_wtr(Hiero_html_mgr mgr, Hiero_phoneme_mgr phoneme_mgr) {this.phoneme_mgr = phoneme_mgr;} - public void Init_for_write(Xoh_wtr_ctx hctx) {this.hiero_img_dir = hctx.Mode_is_hdump() ? gplx.xowa.hdumps.htmls.Hdump_html_consts.Key_hiero_dir : Hiero_xtn_mgr.Img_src_dir;} private byte[] hiero_img_dir = null; + public void Init_for_write(Xoh_wtr_ctx hctx) {this.hiero_img_dir = hctx.Mode_is_hdump() ? gplx.xowa.html.hdumps.abrvs.Xohd_abrv_.Key_hiero_dir : Hiero_xtn_mgr.Img_src_dir;} private byte[] hiero_img_dir = null; public void Hr(Bry_bfr bfr) {bfr.Add(Html_tag_.Hr_inl).Add_byte_nl();} public void Tbl_eol(Bry_bfr bfr) {bfr.Add(Tbl_eol_bry);} public byte[] Td_height(int height) { diff --git a/400_xowa/src/gplx/xowa/xtns/imaps/Imap_img_fmtr_arg.java b/400_xowa/src/gplx/xowa/xtns/imaps/Imap_img_fmtr_arg.java index ab1494ec5..ac1d812fb 100644 --- a/400_xowa/src/gplx/xowa/xtns/imaps/Imap_img_fmtr_arg.java +++ b/400_xowa/src/gplx/xowa/xtns/imaps/Imap_img_fmtr_arg.java @@ -22,7 +22,7 @@ class Imap_img_fmtr_arg implements Bry_fmtr_arg { private int img_elem_id, img_w, img_h; private byte[] img_alt, img_src, img_cls, img_href; private Int_2_ref margin_calc = new Int_2_ref(); - public void Init(Xoae_page page, Xoh_wtr_ctx hctx, Imap_xtn_mgr xtn_mgr, Imap_map map, int img_elem_id, byte[] img_alt, byte[] img_src, int img_w, int img_h, byte[] img_cls, byte[] img_href, byte[] lnki_ttl) { + public void Init(Xoh_wtr_ctx hctx, Imap_xtn_mgr xtn_mgr, Imap_map map, int img_elem_id, byte[] img_alt, byte[] img_src, int img_w, int img_h, byte[] img_cls, byte[] img_href, byte[] lnki_ttl) { this.hctx = hctx; this.map = map; this.xtn_mgr = xtn_mgr; this.img_elem_id = img_elem_id; this.img_w = img_w; this.img_h = img_h; this.img_alt = img_alt; diff --git a/400_xowa/src/gplx/xowa/xtns/imaps/Imap_itm_shape.java b/400_xowa/src/gplx/xowa/xtns/imaps/Imap_itm_shape.java index bb510b8be..1de8aa3d4 100644 --- a/400_xowa/src/gplx/xowa/xtns/imaps/Imap_itm_shape.java +++ b/400_xowa/src/gplx/xowa/xtns/imaps/Imap_itm_shape.java @@ -25,7 +25,7 @@ interface Imap_link_owner { } class Imap_link_owner_ { public static void Init(Imap_link_owner link_owner, Xoae_app app, Xowe_wiki wiki, byte[] src, Xop_tkn_itm tkn) { - Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_b512(); try { int tkn_tid = tkn.Tkn_tid(); link_owner.Link_tid_(tkn_tid); diff --git a/400_xowa/src/gplx/xowa/xtns/imaps/Imap_map.java b/400_xowa/src/gplx/xowa/xtns/imaps/Imap_map.java index d8ea7d964..7a544a21d 100644 --- a/400_xowa/src/gplx/xowa/xtns/imaps/Imap_map.java +++ b/400_xowa/src/gplx/xowa/xtns/imaps/Imap_map.java @@ -41,23 +41,23 @@ public class Imap_map implements Xoh_file_img_wkr, Js_img_wkr { xfer_itm.Html_img_wkr_(this); xfer_itm.Html_elem_tid_(Xof_html_elem.Tid_imap); this.a_href = a_href; this.img_alt = img_alt; this.img_cls_tid = img_cls; this.img_cls_other = img_cls_other; - Write_imap_div(tmp_bfr, page, hctx, uid, img_w, img_h, img_src, xfer_itm.Orig_w(), xfer_itm.Orig_h(), xfer_itm.Lnki_ttl()); + Write_imap_div(tmp_bfr, hctx, uid, img_w, img_h, img_src, xfer_itm.Orig_w(), xfer_itm.Orig_h(), xfer_itm.Lnki_ttl()); } - public void Html_update(Xoae_page page, Xog_html_itm html_itm, int html_uid, int html_w, int html_h, String html_src, int orig_w, int orig_h, String orig_src, byte[] lnki_ttl) { + public void Html_update(Xoa_page page, Xog_js_wkr js_wkr, int html_uid, int html_w, int html_h, String html_src, int orig_w, int orig_h, String orig_src, byte[] lnki_ttl) { Xowe_wiki wiki = xtn_mgr.Wiki(); - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_k004(); - Write_imap_div(tmp_bfr, page, Xoh_wtr_ctx.Basic, html_uid, html_w, html_h, Bry_.new_utf8_(html_src), orig_w, orig_h, lnki_ttl); - html_itm.Html_elem_replace_html("imap_div_" + Int_.Xto_str(html_uid), tmp_bfr.Mkr_rls().Xto_str_and_clear()); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_k004(); + Write_imap_div(tmp_bfr, Xoh_wtr_ctx.Basic, html_uid, html_w, html_h, Bry_.new_utf8_(html_src), orig_w, orig_h, lnki_ttl); + js_wkr.Html_elem_replace_html("imap_div_" + Int_.Xto_str(html_uid), tmp_bfr.Mkr_rls().Xto_str_and_clear()); } - private void Write_imap_div(Bry_bfr bfr, Xoae_page page, Xoh_wtr_ctx hctx, int html_uid, int html_w, int html_h, byte[] html_src, int orig_w, int orig_h, byte[] lnki_ttl) { + private void Write_imap_div(Bry_bfr bfr, Xoh_wtr_ctx hctx, int html_uid, int html_w, int html_h, byte[] html_src, int orig_w, int orig_h, byte[] lnki_ttl) { byte[] desc_style = Calc_desc_style(html_w, html_h); map_fmtr_arg.Init(id, shapes, Calc_scale(orig_w, orig_h, html_w, html_h)); - img_fmtr_arg.Init(page, hctx, xtn_mgr, this, html_uid, img_alt, html_src, html_w, html_h, Xoh_lnki_consts.Img_cls_to_bry(img_cls_tid, img_cls_other), a_href, lnki_ttl); + img_fmtr_arg.Init(hctx, xtn_mgr, this, html_uid, img_alt, html_src, html_w, html_h, Xoh_lnki_consts.Img_cls_to_bry(img_cls_tid, img_cls_other), a_href, lnki_ttl); Imap_html_fmtrs.All.Bld_bfr_many(bfr, html_uid, desc_style, map_fmtr_arg, img_fmtr_arg); } private byte[] Calc_desc_style(int html_w, int html_h) { if (desc == null) return Bry_.Empty; - Bry_bfr tmp_bfr = xtn_mgr.Wiki().Utl_bry_bfr_mkr().Get_b128().Mkr_rls(); + Bry_bfr tmp_bfr = xtn_mgr.Wiki().Utl__bfr_mkr().Get_b128().Mkr_rls(); return Imap_html_fmtrs.Desc_style.Bld_bry_many(tmp_bfr, html_w, html_h); } private static final Imap_img_fmtr_arg img_fmtr_arg = new Imap_img_fmtr_arg(); diff --git a/400_xowa/src/gplx/xowa/xtns/listings/Listing_xnde.java b/400_xowa/src/gplx/xowa/xtns/listings/Listing_xnde.java index 85e80fe20..13495d856 100644 --- a/400_xowa/src/gplx/xowa/xtns/listings/Listing_xnde.java +++ b/400_xowa/src/gplx/xowa/xtns/listings/Listing_xnde.java @@ -84,7 +84,7 @@ public class Listing_xnde implements Xox_xnde, Xop_xnde_atr_parser { private boolean Bld_by_template(Xop_xnde_tkn xnde, Xop_xatr_itm[] atrs, byte[] src) { byte[] listings_template = xtn_mgr.Listings_template(); if (listings_template == null) return false; - Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_b512(); bfr.Add(Xoa_consts.Invk_bgn); // "{{" bfr.Add(listings_template); // name int atrs_len = atrs.length; @@ -171,7 +171,7 @@ public class Listing_xnde implements Xox_xnde, Xop_xnde_atr_parser { wtr.Txt(xatr_hours).Txt(Txt_dot_space); if (xatr_checkin != null || xatr_checkout != null) { - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b128(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b128(); if (xatr_checkin != null) { byte[] checkin_val = xtn_mgr.Checkin_msg().Fmt(tmp_bfr, xatr_checkin); wtr.Txt_raw(checkin_val); @@ -196,7 +196,7 @@ public class Listing_xnde implements Xox_xnde, Xop_xnde_atr_parser { if (xatr_lat >= Xatr_meridian_null || xatr_long >= Xatr_meridian_null) return null; // check that lat and long are valid Xol_msg_itm position_template = xtn_mgr.Position_template(); if (position_template == null) return null; - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b128().Mkr_rls(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b128().Mkr_rls(); byte[] rv = position_template.Fmt(tmp_bfr, xatr_lat, xatr_long); tmp_bfr.Add(Xoa_consts.Invk_bgn); // "{{" tmp_bfr.Add(rv); // rv is not message, but actually template precursor diff --git a/400_xowa/src/gplx/xowa/xtns/lst/Lst_pfunc_wkr.java b/400_xowa/src/gplx/xowa/xtns/lst/Lst_pfunc_wkr.java index 825413205..3a13212b6 100644 --- a/400_xowa/src/gplx/xowa/xtns/lst/Lst_pfunc_wkr.java +++ b/400_xowa/src/gplx/xowa/xtns/lst/Lst_pfunc_wkr.java @@ -41,7 +41,7 @@ public class Lst_pfunc_wkr { Xoae_page page = ctx.Cur_page(); if (!page.Tmpl_stack_add(src_ttl.Full_db())) return; defn_tmpl = wiki.Parser().Parse_text_to_defn_obj(sub_ctx, sub_ctx.Tkn_mkr(), src_ttl.Ns(), src_ttl_bry, src_page_bry); // NOTE: parse as tmpl to ignore - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_m001(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_m001(); page.Tmpl_stack_del(); // take template off stack; evaluate will never recurse, and will fail if ttl is still on stack; DATE:2014-03-10 defn_tmpl.Tmpl_evaluate(sub_ctx, Xot_invk_temp.Page_is_caller, tmp_bfr); src = tmp_bfr.Mkr_rls().Xto_bry_and_clear(); diff --git a/400_xowa/src/gplx/xowa/xtns/mapSources/Map_dd2dms_func.java b/400_xowa/src/gplx/xowa/xtns/mapSources/Map_dd2dms_func.java index d7d6a75df..4a46e826a 100644 --- a/400_xowa/src/gplx/xowa/xtns/mapSources/Map_dd2dms_func.java +++ b/400_xowa/src/gplx/xowa/xtns/mapSources/Map_dd2dms_func.java @@ -24,7 +24,7 @@ public class Map_dd2dms_func extends Pf_func_base { @Override public void Func_evaluate(Xop_ctx ctx, byte[] src, Xot_invk caller, Xot_invk self, Bry_bfr bfr) { byte[] coord = Eval_argx(ctx, src, caller, self); int args_len = self.Args_len(); - Bry_bfr tmp_bfr = ctx.Wiki().Utl_bry_bfr_mkr().Get_b128(); + Bry_bfr tmp_bfr = ctx.Wiki().Utl__bfr_mkr().Get_b128(); byte[] plus = Bry_.Empty, minus = Bry_.Empty; int prec = 4; for (int i = 0; i < args_len; i++) { diff --git a/400_xowa/src/gplx/xowa/xtns/mapSources/Map_geolink_func.java b/400_xowa/src/gplx/xowa/xtns/mapSources/Map_geolink_func.java index b2e817d48..57f09862c 100644 --- a/400_xowa/src/gplx/xowa/xtns/mapSources/Map_geolink_func.java +++ b/400_xowa/src/gplx/xowa/xtns/mapSources/Map_geolink_func.java @@ -25,7 +25,7 @@ public class Map_geolink_func extends Pf_func_base { byte[] mer_x_val = null, mer_y_val = null, mer_x_pos = null, mer_x_neg = null, mer_y_pos = null, mer_y_neg = null; int prec = 4; int args_len = self.Args_len(); - Bry_bfr tmp_bfr = ctx.Wiki().Utl_bry_bfr_mkr().Get_b128(); + Bry_bfr tmp_bfr = ctx.Wiki().Utl__bfr_mkr().Get_b128(); try { byte[] pattern = Eval_argx(ctx, src, caller, self); for (int i = 0; i < args_len; i++) { diff --git a/400_xowa/src/gplx/xowa/xtns/math/Xof_math_html_wtr.java b/400_xowa/src/gplx/xowa/xtns/math/Xof_math_html_wtr.java index d57d92662..20f936b42 100644 --- a/400_xowa/src/gplx/xowa/xtns/math/Xof_math_html_wtr.java +++ b/400_xowa/src/gplx/xowa/xtns/math/Xof_math_html_wtr.java @@ -25,7 +25,7 @@ public class Xof_math_html_wtr { Xoae_app app = ctx.App(); Xowe_wiki wiki = ctx.Wiki(); Xoae_page page = ctx.Cur_page(); boolean renderer_is_latex = !app.File_mgr().Math_mgr().Renderer_is_mathjax(); byte[] math_bry = Bry_.Mid(src, xnde.Tag_open_end(), xnde.Tag_close_bgn()); - Bry_bfr tmp_bfr = app.Utl_bry_bfr_mkr().Get_b512().Mkr_rls(); + Bry_bfr tmp_bfr = app.Utl__bfr_mkr().Get_b512().Mkr_rls(); math_bry = Escape_tex(tmp_bfr, !renderer_is_latex, math_bry); byte[] math_bry_clean = app.Html_mgr().Js_cleaner().Clean(wiki, math_bry, 0, math_bry.length); // check for js; if (math_bry_clean != null) math_bry = math_bry_clean; // js found; use clean version; DATE:2013-08-26 diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/ifs/Pfunc_switch.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/ifs/Pfunc_switch.java index bed5f6aa5..fba1359a4 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/ifs/Pfunc_switch.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/ifs/Pfunc_switch.java @@ -27,7 +27,7 @@ public class Pfunc_switch extends Pf_func_base { byte[] match = null; Arg_itm_tkn dflt_val_tkn = null; byte[] dflt_val_bry = null; Arg_nde_tkn last_keyless_arg = null; - Bry_bfr tmp = ctx.Wiki().Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp = ctx.Wiki().Utl__bfr_mkr().Get_b512(); Xol_kwd_mgr kwd_mgr = ctx.Lang().Kwd_mgr(); for (int i = 0; i < self_args_len; i++) { Arg_nde_tkn arg = self.Args_get_by_idx(i); diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/pages/Pfunc_displaytitle.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/pages/Pfunc_displaytitle.java index c467614de..899d6b424 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/pages/Pfunc_displaytitle.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/pages/Pfunc_displaytitle.java @@ -25,7 +25,7 @@ public class Pfunc_displaytitle extends Pf_func_base { Xowe_wiki wiki = ctx.Wiki(); Xop_parser parser = wiki.Parser(); Xop_ctx display_ttl_ctx = Xop_ctx.new_sub_(wiki); Xop_root_tkn display_ttl_root = parser.Parse_text_to_wdom(display_ttl_ctx, val_dat_ary, false); - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b512(); boolean restrict = wiki.Cfg_parser().Display_title_restrict(); Xoh_wtr_ctx hctx = restrict ? Xoh_wtr_ctx.Display_title : Xoh_wtr_ctx.Basic; // restrict removes certain HTML (display:none) wiki.Html_mgr().Html_wtr().Write_tkn(tmp_bfr, display_ttl_ctx, hctx, display_ttl_root.Data_mid(), display_ttl_root, 0, display_ttl_root); diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/scribunto/Pfunc_scrib_lib.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/scribunto/Pfunc_scrib_lib.java index 12bb7b9f7..f8cb37921 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/scribunto/Pfunc_scrib_lib.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/scribunto/Pfunc_scrib_lib.java @@ -41,7 +41,7 @@ public class Pfunc_scrib_lib implements Scrib_lib { private static final String[] Proc_names = String_.Ary(Invk_expr); public boolean Expr(Scrib_proc_args args, Scrib_proc_rslt rslt) { byte[] expr_bry = args.Pull_bry(0); - Bry_bfr tmp_bfr = core.Wiki().Utl_bry_bfr_mkr().Get_b128(); + Bry_bfr tmp_bfr = core.Wiki().Utl__bfr_mkr().Get_b128(); boolean pass = Pfunc_expr.Evaluate(tmp_bfr, core.Ctx(), expr_bry); String expr_rslt = tmp_bfr.Mkr_rls().Xto_str_and_clear(); if (pass) diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/strings/Pfunc_case.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/strings/Pfunc_case.java index 524829a13..20ad61f07 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/strings/Pfunc_case.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/strings/Pfunc_case.java @@ -28,7 +28,7 @@ public class Pfunc_case extends Pf_func_base { // EX: {{lc:A}} -> a Xol_lang lang = ctx.Wiki().Lang(); boolean upper = case_type == Xol_lang.Tid_upper; if (first) { - Bry_bfr tmp_bfr = ctx.App().Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = ctx.App().Utl__bfr_mkr().Get_b512(); val_dat_ary = lang.Case_mgr().Case_build_1st(tmp_bfr, upper, val_dat_ary, 0, val_dat_ary_len); tmp_bfr.Mkr_rls(); } diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/strings/Pfunc_tag.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/strings/Pfunc_tag.java index 8f0ca5125..a35811013 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/strings/Pfunc_tag.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/strings/Pfunc_tag.java @@ -25,7 +25,7 @@ public class Pfunc_tag extends Pf_func_base { byte[] tag_name = Eval_argx(ctx, src, caller, self); if (tag_name.length == 0) return; int args_len = self.Args_len(); Xoae_app app = ctx.App(); - Bry_bfr tmp = app.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp = app.Utl__bfr_mkr().Get_b512(); try { int tag_idx = ++tag__next_id; Xop_xnde_tag tag = (Xop_xnde_tag)app.Xnde_tag_regy().XndeNames(ctx.Xnde_names_tid()).Match_exact(tag_name, 0, tag_name.length); diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_func_formatdate.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_func_formatdate.java index 0a5ef7a3f..efabccb1c 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_func_formatdate.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_func_formatdate.java @@ -33,7 +33,7 @@ public class Pft_func_formatdate extends Pf_func_base { bfr.Add(date_bry); return; } - DateAdp date = Pft_func_time.ParseDate(date_bry, false, ctx.App().Utl_bry_bfr_mkr().Get_b512().Mkr_rls()); + DateAdp date = Pft_func_time.ParseDate(date_bry, false, ctx.App().Utl__bfr_mkr().Get_b512().Mkr_rls()); if (date == null) {bfr.Add(date_bry); return;} // date not parseable; return self; DATE:2014-04-13 date_bldr.Format(bfr, ctx.Wiki(), ctx.Lang(), date, (Pft_fmt_itm[])o); } diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_anchorencode.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_anchorencode.java index e40fd5075..51ece655f 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_anchorencode.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_anchorencode.java @@ -34,7 +34,7 @@ public class Pfunc_anchorencode extends Pf_func_base { // EX: {{anchorencode:a b @Override public void Func_evaluate(Xop_ctx ctx, byte[] src, Xot_invk caller, Xot_invk self, Bry_bfr bfr) { if (anchor_ctx == null) Func_init(ctx); byte[] val_ary = Eval_argx(ctx, src, caller, self); if (val_ary == Bry_.Empty) return; - Anchor_encode(val_ary, bfr, ctx.App().Utl_bry_bfr_mkr().Get_b512().Mkr_rls()); + Anchor_encode(val_ary, bfr, ctx.App().Utl__bfr_mkr().Get_b512().Mkr_rls()); } public static void Anchor_encode(byte[] src, Bry_bfr bfr, Bry_bfr tmp_bfr) { Xop_root_tkn root = anchor_ctx.Tkn_mkr().Root(src); diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_rel2abs.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_rel2abs.java index 7359845db..8228c41d4 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_rel2abs.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_rel2abs.java @@ -32,7 +32,7 @@ public class Pfunc_rel2abs extends Pf_func_base { byte[] qry = Eval_argx(ctx, src, caller, self); byte[] orig = Pf_func_.Eval_arg_or_empty(ctx, src, caller, self, self.Args_len(), 0); if (orig.length == 0) orig = ctx.Cur_page().Ttl().Full_txt(); - bb.Add(Rel2abs(ctx.App().Utl_bry_bfr_mkr().Get_b512().Mkr_rls(), qry, orig)); + bb.Add(Rel2abs(ctx.App().Utl__bfr_mkr().Get_b512().Mkr_rls(), qry, orig)); } public static boolean Rel2abs_ttl(byte[] ttl, int bgn, int end) { int last = end - 1; diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_urlencode.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_urlencode.java index 30c037698..7c75e376a 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_urlencode.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_urlencode.java @@ -20,7 +20,7 @@ public class Pfunc_urlencode extends Pf_func_base { // EX: {{urlencode:a b}} -> @Override public boolean Func_require_colon_arg() {return true;} @Override public void Func_evaluate(Xop_ctx ctx, byte[] src, Xot_invk caller, Xot_invk self, Bry_bfr bb) { byte[] val_ary = Eval_argx(ctx, src, caller, self); if (val_ary == Bry_.Empty) return; - Xoa_app_.Utl_encoder_mgr().Url().Encode(urlEncodeBfr, val_ary); + Xoa_app_.Utl__encoder_mgr().Url().Encode(urlEncodeBfr, val_ary); bb.Add_bfr_and_preserve(urlEncodeBfr); urlEncodeBfr.Clear(); } private Bry_bfr urlEncodeBfr = Bry_bfr.new_(128); diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_urlfunc.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_urlfunc.java index f7ab27b70..fdd253143 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_urlfunc.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_urlfunc.java @@ -40,7 +40,7 @@ public class Pfunc_urlfunc extends Pf_func_base { // EX: {{lc:A}} -> a .Add_mid(ttl_ary, xwiki.Key_bry().length + 1, ttl_ary.length); // "A#b?c=d"; +1 for colon after "commons:"; NOTE: ugly way of getting rest of url, but ttl currently does not have Full_wo_wiki } else { - Bry_bfr tmp_bfr = ctx.App().Utl_bry_bfr_mkr().Get_b512().Mkr_rls(); + Bry_bfr tmp_bfr = ctx.App().Utl__bfr_mkr().Get_b512().Mkr_rls(); switch (tid) { case Tid_local: tmp_bfr.Add(ctx.Wiki().Props().ArticlePath());break; case Tid_full: tmp_bfr.Add(Bry_relative_url).Add(ctx.Wiki().Props().ServerName()).Add(ctx.Wiki().Props().ArticlePath()); break; diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/wikis/Pfunc_pagesincategory.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/wikis/Pfunc_pagesincategory.java index 26b6453a5..06c3ecdec 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/wikis/Pfunc_pagesincategory.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/wikis/Pfunc_pagesincategory.java @@ -34,7 +34,7 @@ public class Pfunc_pagesincategory extends Pf_func_base { if (arg1 != Bry_.Empty && trie.Match_exact(arg1, 0, arg1.length) != null) fmt_num = false; } - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b128().Mkr_rls(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b128().Mkr_rls(); byte[] ctg_len_bry = tmp_bfr.Add_int_variable(ctg_len).Xto_bry_and_clear(); byte[] rslt = fmt_num ? lang.Num_mgr().Format_num(ctg_len_bry) : lang.Num_mgr().Raw(ctg_len_bry); bb.Add(rslt); diff --git a/400_xowa/src/gplx/xowa/xtns/poems/Poem_nde.java b/400_xowa/src/gplx/xowa/xtns/poems/Poem_nde.java index 843d5333a..006f7800d 100644 --- a/400_xowa/src/gplx/xowa/xtns/poems/Poem_nde.java +++ b/400_xowa/src/gplx/xowa/xtns/poems/Poem_nde.java @@ -27,7 +27,7 @@ public class Poem_nde implements Xox_xnde { if (src[itm_end - 1] == Byte_ascii.NewLine // ignore last \n; && itm_end != itm_bgn) --itm_end; // ...if not same as 1st \n; EX: \n Poem_xtn_mgr xtn_mgr = (Poem_xtn_mgr)wiki.Xtn_mgr().Get_or_fail(Poem_xtn_mgr.XTN_KEY); - byte[] poem_bry = Parse_lines(wiki.Utl_bry_bfr_mkr(), src, itm_bgn, itm_end); + byte[] poem_bry = Parse_lines(wiki.Utl__bfr_mkr(), src, itm_bgn, itm_end); xtn_root = xtn_mgr.Parser().Parse_text_to_wdom_old_ctx(ctx, poem_bry, true); // NOTE: ignoring paragraph mode; technically MW enables para mode, but by replacing "\n" with "
    \n" all the logic with para/pre mode is skipped } public void Xtn_write(Bry_bfr bfr, Xoae_app app, Xop_ctx ctx, Xoh_html_wtr html_wtr, Xoh_wtr_ctx hctx, Xop_xnde_tkn xnde, byte[] src) { diff --git a/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde.java b/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde.java index 99431fbf3..ad1ad6acb 100644 --- a/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde.java +++ b/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde.java @@ -58,7 +58,7 @@ public class Pp_pages_nde implements Xox_xnde, Xop_xnde_atr_parser { Xoae_page page = ctx.Cur_page(); if (page.Pages_recursed()) return; // moved from Pp_index_parser; DATE:2014-05-21s page.Pages_recursed_(true); - Bry_bfr full_bfr = app.Utl_bry_bfr_mkr().Get_m001(); + Bry_bfr full_bfr = app.Utl__bfr_mkr().Get_m001(); Hash_adp_bry lst_page_regy = ctx.Lst_page_regy(); if (lst_page_regy == null) lst_page_regy = Hash_adp_bry.cs_(); // SEE:NOTE:page_regy; DATE:2014-01-01 byte[] page_bry = Bld_wikitext(full_bfr, lst_page_regy); if (page_bry != null) @@ -295,7 +295,7 @@ public class Pp_pages_nde implements Xox_xnde, Xop_xnde_atr_parser { int list_len = list.Count(); if (list_len == 0) return Ttls_null; Xoa_ttl[] rv = new Xoa_ttl[(list_len / step_int) + ((list_len % step_int == 0) ? 0 : 1)]; int rv_idx = 0; - Bry_bfr ttl_bfr = app.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr ttl_bfr = app.Utl__bfr_mkr().Get_b512(); for (int i = 0; i < list_len; i += step_int) { Int_obj_val page = (Int_obj_val)list.FetchAt(i); ttl_bfr.Add(ns_page.Name_db_w_colon()) // EX: 'Page:' @@ -324,7 +324,7 @@ public class Pp_pages_nde implements Xox_xnde, Xop_xnde_atr_parser { Xoa_ttl bgn_page_ttl = bgn_page_bry == null ? null : ary[0]; Xoa_ttl end_page_ttl = end_page_bry == null ? null : ary[ary_len - 1]; - Bry_bfr page_bfr = app.Utl_bry_bfr_mkr().Get_m001(); + Bry_bfr page_bfr = app.Utl__bfr_mkr().Get_m001(); ctx.Tmpl_output_(page_bfr); Lst_pfunc_wkr lst_pfunc_wkr = new Lst_pfunc_wkr(); for (int i = 0; i < ary_len; i++) { diff --git a/400_xowa/src/gplx/xowa/xtns/scores/Score_xnde.java b/400_xowa/src/gplx/xowa/xtns/scores/Score_xnde.java index 8461344ce..226b3e654 100644 --- a/400_xowa/src/gplx/xowa/xtns/scores/Score_xnde.java +++ b/400_xowa/src/gplx/xowa/xtns/scores/Score_xnde.java @@ -65,7 +65,7 @@ public class Score_xnde implements Xox_xnde, Xop_xnde_atr_parser, Xoh_cmd_itm { ly_process.Exe_exists_(exists ? Bool_.Y_byte : Bool_.N_byte); } if (ly_process.Exe_exists() == Bool_.N_byte) {Html_write_code_as_pre(bfr, app); return;} - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b128(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b128(); tmp_bfr.Add(code).Add_byte_pipe().Add_int_bool(lang_is_abc).Add_byte_pipe().Add_int_bool(code_is_raw); sha1 = gplx.security.HashAlgo_.Sha1.Calc_hash_bry(tmp_bfr.Mkr_rls().Xto_bry_and_clear()); // NOTE: MW transforms to base32; for now, keep sha1 as raw sha1_prefix = String_.new_ascii_(sha1, 0, 8); @@ -130,7 +130,7 @@ public class Score_xnde implements Xox_xnde, Xop_xnde_atr_parser, Xoh_cmd_itm { Io_mgr._.SaveFilBry(ly_file, ly_text); } else { - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_m001(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_m001(); ly_text = code_is_raw ? code : score_xtn.Lilypond_fmtr().Bld_bry_many(tmp_bfr, Score_xtn_mgr.Lilypond_version, code); tmp_bfr.Mkr_rls(); Io_mgr._.SaveFilBry(ly_file, ly_text); diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_proc_args.java b/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_proc_args.java index f0fc190bf..55db041ac 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_proc_args.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_proc_args.java @@ -88,7 +88,7 @@ public class Scrib_proc_args { if (qry_args_cls == String.class) return Bry_.new_utf8_((String)qry_args_obj); else if (qry_args_cls == KeyVal[].class) { - Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_b128(); + Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_b128(); KeyVal[] kvs = (KeyVal[])qry_args_obj; int len = kvs.length; for (int i = 0; i < len; i++) { diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/engines/process/Process_engine.java b/400_xowa/src/gplx/xowa/xtns/scribunto/engines/process/Process_engine.java index 64713b12e..319977d74 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/engines/process/Process_engine.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/engines/process/Process_engine.java @@ -47,7 +47,7 @@ public class Process_engine implements Scrib_engine { return this.CallFunction(core.Lib_mw().Mod().Fncs_get_id("executeModule"), Scrib_kv_utl_.base1_obj_(new Scrib_lua_proc("", mod_id))); } private KeyVal[] Dispatch(Object... ary) { - Bry_bfr bfr = app.Utl_bry_bfr_mkr().Get_k004().Clear(); + Bry_bfr bfr = app.Utl__bfr_mkr().Get_k004().Clear(); while (true) { Dispatch_bld_send(bfr, ary); boolean log_enabled = scrib_opts.Lua_log_enabled(); diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_language.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_language.java index 51915b399..5d8c5861c 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_language.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_language.java @@ -150,7 +150,7 @@ public class Scrib_lib_language implements Scrib_lib { private boolean Case_1st(Scrib_proc_args args, Scrib_proc_rslt rslt, boolean upper) { Xol_lang lang = lang_(args); byte[] word = args.Pull_bry(1); - Bry_bfr bfr = core.Wiki().Appe().Utl_bry_bfr_mkr().Get_b128().Mkr_rls(); + Bry_bfr bfr = core.Wiki().Appe().Utl__bfr_mkr().Get_b128().Mkr_rls(); return rslt.Init_obj(lang.Case_mgr().Case_build_1st(bfr, upper, word, 0, word.length)); } public boolean Lc(Scrib_proc_args args, Scrib_proc_rslt rslt) {return Case_all(args, rslt, Bool_.N);} @@ -181,7 +181,7 @@ public class Scrib_lib_language implements Scrib_lib { byte[] fmt_bry = args.Pull_bry(1); byte[] date_bry = args.Cast_bry_or_empty(2); // NOTE: optional empty is required b/c date is sometimes null; use Bry_.Empty b/c this is what Pft_func_time.ParseDate takes; DATE:2013-04-05 boolean utc = args.Cast_bool_or_n(3); - Bry_bfr tmp_bfr = core.App().Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = core.App().Utl__bfr_mkr().Get_b512(); Pft_fmt_itm[] fmt_ary = Pft_fmt_itm_.Parse(core.Ctx(), fmt_bry); DateAdp date = Bry_.Len_eq_0(date_bry) @@ -227,7 +227,7 @@ public class Scrib_lib_language implements Scrib_lib { Xol_lang lang = lang_(args); byte[] word = args.Pull_bry(1); byte[] type = args.Pull_bry(2); - Bry_bfr bfr = core.Wiki().Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr bfr = core.Wiki().Utl__bfr_mkr().Get_b512(); lang.Grammar().Grammar_eval(bfr, lang, word, type); return rslt.Init_obj(bfr.Mkr_rls().Xto_str_and_clear()); } diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_message.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_message.java index a9a60541a..ac2e27226 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_message.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_message.java @@ -100,7 +100,7 @@ class Scrib_lib_message_data { } if (raw_msg_key != null) { Xol_msg_itm raw_msg_itm = new Xol_msg_itm(-1, Bry_.Empty); - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b512(); byte[] raw_msg_val = gplx.xowa.apps.Xoa_gfs_php_mgr.Xto_gfs(tmp_bfr, raw_msg_key); Xol_msg_itm_.update_val_(raw_msg_itm, raw_msg_val); byte[] raw_msg_rv = wiki.Msg_mgr().Val_by_itm(tmp_bfr, raw_msg_itm, args); @@ -128,8 +128,10 @@ class Scrib_lib_message_data { } public byte[] Make_msg(byte[] cur_lang, Xowe_wiki wiki, Xop_ctx ctx, boolean exec_params, byte fmt_tid) { byte[] msg_val = Fetch_msg(cur_lang, wiki, ctx, exec_params); - if (Bry_.Len_eq_0(msg_val)) { - Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); + if ( Bry_.Len_eq_0(msg_val) // msg_key returned empty/null msg_val; assume not found + && raw_msg_key == null // ignore if raw_msg; note that raw_msg can generate empty String; EX:raw_msg={{empty}} -> ""; PAGE:it.w:L'Internazionale DATE:2015-02-25 + ) { + Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_b512(); bfr.Add(gplx.html.Html_entity_.Lt_bry).Add(msg_key).Add(gplx.html.Html_entity_.Gt_bry); // NOTE: Message.php has logic that says: if plain, "< >", else "< >"; for now, always use escaped return bfr.Mkr_rls().Xto_bry_and_clear(); } @@ -138,7 +140,7 @@ class Scrib_lib_message_data { case Fmt_tid_text: // NOTE: not sure what this does; seems to be a "lighter" parser break; case Fmt_tid_parseAsBlock: // NOTE: MW passes msg_val through parser and strips

    if tid==parse; XOWA does the opposite, so add

    if parseAsBlock requested - Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_b512(); msg_val = bfr.Add(Html_tag_.P_lhs).Add(msg_val).Add(Html_tag_.P_rhs).Mkr_rls().Xto_bry_and_clear(); break; case Fmt_tid_escaped: diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_message_tst.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_message_tst.java index 3f884e7ac..a31c2e45e 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_message_tst.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_message_tst.java @@ -35,6 +35,10 @@ public class Scrib_lib_message_tst { @Test public void Plain_rawMessage() { fxt.Test_scrib_proc_str(lib, Scrib_lib_message.Invk_plain, Object_.Ary((Object)Scrib_kv_utl_.flat_many_("rawMessage", "$1", "params", KeyVal_.Ary(KeyVal_.int_(1, "abc")))), "abc"); } + @Test public void Plain_rawMessage_empty() {// PURPOSE:rawMessage would throw null ref if rawMessage called template that returns empty value; PAGE:it.w:L'Internazionale DATE:2015-02-25 + fxt.Parser_fxt().Init_page_create("Template:Msg", ""); + fxt.Test_scrib_proc_str(lib, Scrib_lib_message.Invk_plain, Object_.Ary((Object)Scrib_kv_utl_.flat_many_("rawMessage", "{{Msg}}", "params", KeyVal_.Ary(KeyVal_.int_(1, "abc")))), ""); + } @Test public void Check() { fxt.Test_scrib_proc_bool(lib, Scrib_lib_message.Invk_check, Object_.Ary("exists" , keys_ary("sun")) , true); fxt.Test_scrib_proc_bool(lib, Scrib_lib_message.Invk_check, Object_.Ary("exists" , keys_ary("sunx")) , false); diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_mw.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_mw.java index 22fabe9cc..0bba43e11 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_mw.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_mw.java @@ -161,7 +161,7 @@ public class Scrib_lib_mw implements Scrib_lib { int frame_arg_adj = Scrib_frame_.Get_arg_adj(frame_tid); int args_len = frame.Args_len() - frame_arg_adj; if (args_len < 1) return rslt.Init_obj(KeyVal_.Ary_empty); // occurs when "frame:getParent().args" but no parent frame - Bry_bfr tmp_bfr = ctx.Wiki().Utl_bry_bfr_mkr().Get_b128(); // NOTE: do not make modular level variable, else random failures; DATE:2013-10-14 + Bry_bfr tmp_bfr = ctx.Wiki().Utl__bfr_mkr().Get_b128(); // NOTE: do not make modular level variable, else random failures; DATE:2013-10-14 ListAdp rv = ListAdp_.new_(); int arg_idx = 0; for (int i = 0; i < args_len; i++) { @@ -222,7 +222,7 @@ public class Scrib_lib_mw implements Scrib_lib { int args_adj = Scrib_frame_.Get_arg_adj(frame_tid); int args_len = frame.Args_len() - args_adj; KeyVal[] kv_args = new KeyVal[args_len]; - Bry_bfr tmp_bfr = core.Wiki().Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = core.Wiki().Utl__bfr_mkr().Get_b512(); for (int i = 0; i < args_len; i++) { Arg_nde_tkn arg = frame.Args_get_by_idx(i + args_adj); arg.Key_tkn().Tmpl_evaluate(ctx, src, frame, tmp_bfr); @@ -251,7 +251,7 @@ public class Scrib_lib_mw implements Scrib_lib { Xol_func_name_itm finder = cur_wiki.Lang().Func_regy().Find_defn(fnc_name, 0, fnc_name_len); Xot_defn defn = finder.Func(); if (defn == Xot_defn_.Null) throw Err_.new_fmt_("callParserFunction: function \"{0}\" was not found", String_.new_utf8_(fnc_name)); - Bry_bfr bfr = cur_wiki.Utl_bry_bfr_mkr().Get_k004(); + Bry_bfr bfr = cur_wiki.Utl__bfr_mkr().Get_k004(); Xop_ctx fnc_ctx = Xop_ctx.new_sub_(cur_wiki); fnc_ctx.Parse_tid_(Xop_parser_.Parse_tid_page_tmpl); // default xnde names to template; needed for test, but should be in place; DATE:2014-06-27 Xot_invk_tkn.Eval_func(fnc_ctx, src, parent_frame, frame, bfr, defn, argx_ref.Val()); @@ -312,7 +312,7 @@ public class Scrib_lib_mw implements Scrib_lib { if (sub_src != null) { Xot_invk_mock sub_frame = Xot_invk_mock.new_(core.Frame_current().Defn_tid(), 0, ttl.Full_txt(), args_ary); // NOTE: (1) must have ns (Full); (2) must be txt (space, not underscore); EX:Template:Location map+; DATE:2014-09-21 Xot_defn_tmpl transclude_tmpl = ctx.Wiki().Parser().Parse_text_to_defn_obj(ctx, ctx.Tkn_mkr(), ttl.Ns(), ttl.Page_db(), sub_src); - Bry_bfr sub_bfr = cur_wiki.Utl_bry_bfr_mkr().Get_k004(); + Bry_bfr sub_bfr = cur_wiki.Utl__bfr_mkr().Get_k004(); transclude_tmpl.Tmpl_evaluate(ctx, sub_frame, sub_bfr); return rslt.Init_obj(sub_bfr.Mkr_rls().Xto_str_and_clear()); } diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_text.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_text.java index d1688bc7e..dacdc949e 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_text.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_text.java @@ -64,7 +64,7 @@ public class Scrib_lib_text implements Scrib_lib { } class Scrib_lib_text_ { public static KeyVal[] Init_nowiki_protocols(Xowe_wiki wiki) { - Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_b128(); + Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_b128(); OrderedHash protocols = Xoo_protocol_itm.Regy; int len = protocols.Count(); ListAdp rv = ListAdp_.new_(); diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_title.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_title.java index e8c025e27..10c33bb4e 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_title.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_title.java @@ -64,7 +64,7 @@ public class Scrib_lib_title implements Scrib_lib { ns_bry = Parse_ns(wiki, ns_obj); if (ns_bry == null) throw Err_.new_fmt_("unknown ns: {0}", Object_.Xto_str_strict_or_empty(ns_bry)); } if (ns_bry != null) { - Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_b512(); ttl_bry = bfr.Add(ns_bry).Add_byte(Byte_ascii.Colon).Add(ttl_bry).Mkr_rls().Xto_bry_and_clear(); } Xoa_ttl ttl = Xoa_ttl.parse_(core.Wiki(), ttl_bry); @@ -82,7 +82,7 @@ public class Scrib_lib_title implements Scrib_lib { byte[] qry_bry = args.Extract_qry_args(wiki, 2); // byte[] proto = Scrib_kv_utl_.Val_to_bry_or(values, 3, null); // NOTE: Scribunto has more conditional logic around argument 2 and setting protocols; DATE:2014-07-07 Xoa_ttl ttl = Xoa_ttl.parse_(wiki, ttl_bry); if (ttl == null) return rslt.Init_obj(null); - Bry_bfr bfr = wiki.Appe().Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr bfr = wiki.Appe().Utl__bfr_mkr().Get_b512(); //if (url_func_tid == Pfunc_urlfunc.Tid_full) { // if (proto == null) proto = Proto_relative; // Object proto_obj = proto_hash.Fetch(proto); if (proto_obj == null) throw Err_.new_fmt_("protocol is not valid: {0}", proto); @@ -116,7 +116,7 @@ public class Scrib_lib_title implements Scrib_lib { String ttl_str = args.Pull_str(1); String anchor_str = args.Cast_str_or_null(2); String xwiki_str = args.Cast_str_or_null(3); - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_k004(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_k004(); if (xwiki_str != null) tmp_bfr.Add_str(xwiki_str).Add_byte(Byte_ascii.Colon); if (Bry_.Len_gt_0(ns_bry)) // only prefix ns if available; EX:"Template:Title"; else will get ":Title"; DATE:2014-10-30 tmp_bfr.Add(ns_bry).Add_byte(Byte_ascii.Colon); @@ -159,7 +159,7 @@ public class Scrib_lib_title implements Scrib_lib { // if (!exists) return rslt.Init_obj(KeyVal_.Ary(KeyVal_.new_("exists", false))); // NOTE: do not reinstate; will exit early if commons is not installed; DATE:2015-01-25; NOTE: Media objects are often flagged as absent in offline mode // NOTE: MW registers image if deleted; XOWA doesn't register b/c needs width / height also, not just image name wiki.File_mgr().Fsdb_mgr().Init_by_wiki(wiki); - Xof_orig_itm itm = wiki.File_mgr().Fsdb_mgr().Orig_mgr().Wkrs__get_xowa_db().Find_as_itm(ttl.Page_db()); + Xof_orig_itm itm = wiki.File_mgr().Fsdb_mgr().Orig_mgr().Find_by_ttl_or_null(ttl.Page_db()); if (itm == Xof_orig_itm.Null) return rslt.Init_obj(GetFileInfo_absent); KeyVal[] rv = KeyVal_.Ary ( KeyVal_.new_("exists" , true) diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_title_tst.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_title_tst.java index 37403ba0e..b177ed06d 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_title_tst.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_title_tst.java @@ -17,12 +17,13 @@ along with this program. If not, see . */ package gplx.xowa.xtns.scribunto.libs; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.scribunto.*; import org.junit.*; -import gplx.dbs.*; import gplx.xowa2.files.commons.*; import gplx.xowa2.wikis.data.*; -import gplx.xowa.wikis.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.repos.*; +import gplx.dbs.*; import gplx.xowa2.files.commons.*; import gplx.xowa.wikis.data.*; +import gplx.xowa.wikis.*; import gplx.xowa.files.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.repos.*; public class Scrib_lib_title_tst { @Before public void init() { Db_conn_bldr.I.Reg_default_mem(); fxt.Clear_for_lib(); + fxt.Core().Wiki().File_mgr__fsdb_mode().Tid_make_y_(); lib = fxt.Core().Lib_title().Init(); } private Scrib_invoke_func_fxt fxt = new Scrib_invoke_func_fxt(); private Scrib_lib lib; @Test public void NewTitle() { @@ -57,24 +58,24 @@ public class Scrib_lib_title_tst { fxt.Test_scrib_proc_str_ary(lib, Scrib_lib_title.Invk_getExpensiveData, Object_.Ary("A") , ttl_slow(Bool_.Y, 0, Bool_.N)); } @Test public void GetFileInfo() { - Xof_orig_tbl tbl = Wiki_orig_tbl__create(fxt.Core().Wiki()); + Wiki_orig_tbl__create(fxt.Core().Wiki()); fxt.Test_scrib_proc_str_ary(lib, Scrib_lib_title.Invk_getFileInfo, Object_.Ary("A") , file_info_absent()); fxt.Test_scrib_proc_str_ary(lib, Scrib_lib_title.Invk_getFileInfo, Object_.Ary("Template:A") , file_info_absent()); fxt.Test_scrib_proc_str_ary(lib, Scrib_lib_title.Invk_getFileInfo, Object_.Ary("File:A.png") , file_info_absent()); fxt.Parser_fxt().Init_page_create("File:A.png"); - Wiki_orig_tbl__insert(tbl, "A.png", 220, 200); + Wiki_orig_tbl__insert(fxt.Core().Wiki(), "A.png", 220, 200); fxt.Test_scrib_proc_str_ary(lib, Scrib_lib_title.Invk_getFileInfo, Object_.Ary("File:A.png") , file_info_exists("A.png", 220, 200)); } @Test public void GetFileInfo_commons() { // PURPOSE: check that Scribunto GetFileInfo calls filepath.FileExists; DATE:2014-01-07 Xowe_wiki commons_wiki = fxt.Parser_fxt().Wiki().Appe().Wiki_mgr().Get_by_key_or_make(Xow_domain_.Domain_bry_commons).Init_assert(); - Xof_orig_tbl tbl = Wiki_orig_tbl__create(fxt.Core().Wiki()); - Wiki_orig_tbl__insert(tbl, "A.png", 220, 200); + Wiki_orig_tbl__create(fxt.Core().Wiki()); + Wiki_orig_tbl__insert(fxt.Core().Wiki(), "A.png", 220, 200); fxt.Parser_fxt().Init_page_create(commons_wiki, "File:A.png", "text_is_blank"); fxt.Test_scrib_proc_str_ary(lib, Scrib_lib_title.Invk_getFileInfo, Object_.Ary("File:A.png") , file_info_exists("A.png", 220, 200)); } @Test public void GetFileInfo_media() { // PURPOSE: [[Media:]] ns should find entries in [[File:]]; DATE:2014-01-07 - Xof_orig_tbl tbl = Wiki_orig_tbl__create(fxt.Core().Wiki()); - Wiki_orig_tbl__insert(tbl, "A.png", 220, 200); + Wiki_orig_tbl__create(fxt.Core().Wiki()); + Wiki_orig_tbl__insert(fxt.Core().Wiki(), "A.png", 220, 200); fxt.Parser_fxt().Init_page_create("File:A.png"); fxt.Test_scrib_proc_str_ary(lib, Scrib_lib_title.Invk_getFileInfo, Object_.Ary("Media:A.png") , file_info_exists("A.png", 220, 200)); } @@ -94,21 +95,19 @@ public class Scrib_lib_title_tst { @Test public void CascadingProtection() { fxt.Test_scrib_proc_obj(lib, Scrib_lib_title.Invk_cascadingProtection, Object_.Ary("A") , Scrib_lib_title.CascadingProtection_rv); } - private static Xof_orig_tbl Wiki_orig_tbl__create(Xowe_wiki wiki) { + private static void Wiki_orig_tbl__create(Xowe_wiki wiki) { wiki.File_mgr().Fsdb_mgr().Init_by_wiki(wiki); - Xof_orig_wkr__orig_db wkr = wiki.File_mgr().Fsdb_mgr().Orig_mgr().Wkrs__get_xowa_db(); - return wkr.Tbl(); } - private static void Wiki_orig_tbl__insert(Xof_orig_tbl tbl, String ttl_str, int w, int h) { + private static void Wiki_orig_tbl__insert(Xowe_wiki wiki, String ttl_str, int w, int h) { byte[] ttl_bry = Bry_.new_utf8_(ttl_str); - tbl.Insert(Xof_repo_itm.Repo_remote, ttl_bry, Xof_ext_.new_by_ttl_(ttl_bry).Id(), w, h, Bry_.Empty); + wiki.File_mgr().Fsdb_mgr().Orig_mgr().Insert(Xof_repo_itm.Repo_remote, ttl_bry, Xof_ext_.new_by_ttl_(ttl_bry).Id(), w, h, Bry_.Empty, Xof_orig_wkr_.Status_found); } // private static void Init_page_regy(Xowe_wiki wiki, String ttl, int id, boolean is_redirect) { // String url_str = "test/en.wikipedia.org/wiki_page_regy"; -// Db_meta_tbl meta = new Xowd_page_regy_tbl().new_meta(); +// Db_meta_tbl meta = new Xowd_pg_regy_tbl().new_meta(); // Db_conn_pool.I.Set_mem(url_str, meta); // Db_url url = Db_url_.mem_(url_str); -// Xowd_page_regy_tbl tbl = new Xowd_page_regy_tbl(Bool_.N, url); +// Xowd_pg_regy_tbl tbl = new Xowd_pg_regy_tbl(Bool_.N, url); // tbl.Insert(id, ns_id, Bry_.new_utf8_(ttl), is_redirect, modified_on, page_len, random_int, text_db_id, html_db_id); // } private static String ttl_fast(int ns_id, String ns_str, String ttl) {return ttl_fast(ns_id, ns_str, ttl, "", "", ttl);} diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_uri.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_uri.java index 81b2e04df..3eea25a16 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_uri.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_uri.java @@ -44,8 +44,8 @@ public class Scrib_lib_uri implements Scrib_lib { private static final String[] Proc_names = String_.Ary(Invk_anchorEncode, Invk_localUrl, Invk_fullUrl, Invk_canonicalUrl, Invk_init_uri_for_page); public boolean AnchorEncode(Scrib_proc_args args, Scrib_proc_rslt rslt) { byte[] raw_bry = args.Pull_bry(0); - Bry_bfr bfr = core.App().Utl_bry_bfr_mkr().Get_b512(); - Bry_bfr tmp_bfr = core.App().Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr bfr = core.App().Utl__bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = core.App().Utl__bfr_mkr().Get_b512(); Pfunc_anchorencode.Func_init(core.Ctx()); Pfunc_anchorencode.Anchor_encode(raw_bry, bfr, tmp_bfr); tmp_bfr.Mkr_rls().Clear(); @@ -57,7 +57,7 @@ public class Scrib_lib_uri implements Scrib_lib { byte[] qry_bry = args.Extract_qry_args(wiki, 1); Xoa_ttl ttl = Xoa_ttl.parse_(wiki, ttl_bry); if (ttl == null) return rslt.Init_null(); - Bry_bfr bfr = core.App().Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr bfr = core.App().Utl__bfr_mkr().Get_b512(); if (ttl.Ns().Id() == Xow_ns_.Id_media) { // change "Media:" -> "File:" bfr.Add(wiki.Ns_mgr().Ns_file().Name_db_w_colon()); bfr.Add(ttl.Page_db()); @@ -69,7 +69,7 @@ public class Scrib_lib_uri implements Scrib_lib { private boolean Init_uri_for_page(Scrib_proc_args args, Scrib_proc_rslt rslt) { Xop_ctx ctx = core.Ctx(); byte[] ttl_bry = ctx.Cur_page().Ttl().Raw(); - Bry_bfr tmp_bfr = ctx.Wiki().Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = ctx.Wiki().Utl__bfr_mkr().Get_b512(); Pfunc_urlfunc.UrlString(ctx, Pfunc_urlfunc.Tid_full, false, ttl_bry, tmp_bfr, Bry_.Empty); return rslt.Init_obj(tmp_bfr.Mkr_rls().Xto_bry_and_clear()); } diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_wikibase_entity.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_wikibase_entity.java index cf0f8918f..f5f77e1ed 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_wikibase_entity.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_wikibase_entity.java @@ -50,7 +50,7 @@ public class Scrib_lib_wikibase_entity implements Scrib_lib { Wdata_doc wdoc = wdata_mgr.Pages_get(qid); if (wdoc == null) {Wdata_wiki_mgr.Log_missing_qid(core.Ctx(), qid); return rslt.Init_str_empty();} // NOTE: return empty String, not nil; PAGE:fr.s:Henri_Bergson; DATE:2014-08-13 int pid_int = wdata_mgr.Pids_get(lang, pid); if (pid_int == Wdata_wiki_mgr.Pid_null) return rslt.Init_str_empty(); Wdata_claim_grp prop_grp = wdoc.Claim_list_get(pid_int); if (prop_grp == null) return rslt.Init_str_empty(); - Bry_bfr bfr = app.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr bfr = app.Utl__bfr_mkr().Get_b512(); wdata_mgr.Resolve_to_bfr(bfr, prop_grp, lang); return rslt.Init_obj(bfr.Mkr_rls().Xto_bry_and_clear()); } diff --git a/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_wiki_mgr.java b/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_wiki_mgr.java index ffb2426b7..ad77b7a1c 100644 --- a/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_wiki_mgr.java +++ b/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_wiki_mgr.java @@ -159,7 +159,7 @@ public class Wdata_wiki_mgr implements GfoEvObj, GfoInvkAble { Xoapi_toggle_mgr toggle_mgr = app.Api_root().Html().Page().Toggle_mgr(); Xoapi_wikibase wikibase_api = app.Api_root().Xtns().Wikibase(); hwtr_mgr = new Wdata_hwtr_mgr(); - hwtr_mgr.Init_by_ctor(wikibase_api, new Wdata_lbl_wkr_wiki(wikibase_api, this), Xoa_app_.Utl_encoder_mgr().Href(), toggle_mgr, app.User().Wiki().Xwiki_mgr()); + hwtr_mgr.Init_by_ctor(wikibase_api, new Wdata_lbl_wkr_wiki(wikibase_api, this), Xoa_app_.Utl__encoder_mgr().Href(), toggle_mgr, app.User().Wiki().Xwiki_mgr()); this.Hwtr_msgs_make(); GfoEvMgr_.SubSame_many(app.User(), this, Xou_user.Evt_lang_changed); } diff --git a/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_wiki_mgr_fxt.java b/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_wiki_mgr_fxt.java index b10b9ce60..2aa976736 100644 --- a/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_wiki_mgr_fxt.java +++ b/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_wiki_mgr_fxt.java @@ -71,7 +71,7 @@ public class Wdata_wiki_mgr_fxt { } } public void Init_qids_add(String lang_key, int wiki_tid, String ttl, String qid) { - Bry_bfr tmp_bfr = app.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = app.Utl__bfr_mkr().Get_b512(); wdata_mgr.Qids_add(tmp_bfr, Bry_.new_ascii_(lang_key), wiki_tid, Bry_.new_ascii_("000"), Bry_.new_ascii_(ttl), Bry_.new_ascii_(qid)); tmp_bfr.Mkr_rls(); } @@ -85,7 +85,7 @@ public class Wdata_wiki_mgr_fxt { regy_mgr.Create(ttl_bry); regy_mgr.Save(); - Bry_bfr bfr = app.Utl_bry_bfr_mkr().Get_b512().Mkr_rls(); + Bry_bfr bfr = app.Utl__bfr_mkr().Get_b512().Mkr_rls(); byte[] itm = bfr.Add(ttl_bry).Add_byte(Byte_ascii.Pipe).Add(Bry_.new_ascii_(qid)).Add_byte_nl().Xto_bry_and_clear(); Xob_xdat_file xdat_file = new Xob_xdat_file(); xdat_file.Insert(bfr, itm); @@ -155,7 +155,7 @@ public class Wdata_wiki_mgr_fxt { parser_fxt.Page_ttl_("Q1_en"); parser_fxt.Exec_parse_page_all_as_str(raw); - Bry_bfr tmp_bfr = wiki.Appe().Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = wiki.Appe().Utl__bfr_mkr().Get_b512(); wiki.Html_mgr().Page_wtr_mgr().Wkr(Xopg_view_mode.Tid_read).Wdata_lang_wtr().Page_(page).XferAry(tmp_bfr, 0); Tfds.Eq_str_lines(expd, tmp_bfr.Mkr_rls().Xto_str_and_clear()); } @@ -177,7 +177,7 @@ public class Wdata_wiki_mgr_fxt { public void Test_write_json_as_html(String raw_str, String expd) { byte[] raw_bry = Bry_.new_ascii_(raw_str); raw_bry = gplx.json.Json_parser_tst.Replace_apos(raw_bry); - Bry_bfr bfr = app.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr bfr = app.Utl__bfr_mkr().Get_b512(); Wdata_wiki_mgr.Write_json_as_html(wdata_mgr.Jdoc_parser(), bfr, raw_bry); Tfds.Eq(expd, bfr.Mkr_rls().Xto_str_and_clear()); } diff --git a/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_xwiki_link_wtr.java b/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_xwiki_link_wtr.java index 908c87538..ec2a21f33 100644 --- a/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_xwiki_link_wtr.java +++ b/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_xwiki_link_wtr.java @@ -37,7 +37,7 @@ public class Wdata_xwiki_link_wtr implements Bry_fmtr_arg { Wdata_doc doc = wdata_mgr.Pages_get(wiki, ttl); if (doc == null) return Qid_null; // no links boolean external_links_mgr_enabled = external_links_mgr.Enabled(); OrderedHash links = doc.Slink_list(); - Bry_bfr tmp_bfr = wiki.Appe().Utl_bry_bfr_mkr().Get_k004(); + Bry_bfr tmp_bfr = wiki.Appe().Utl__bfr_mkr().Get_k004(); Xow_wiki_abrv wiki_abrv = new Xow_wiki_abrv(); int len = links.Count(); for (int i = 0; i < len; i++) { diff --git a/400_xowa/src/gplx/xowa/xtns/wdatas/imports/Xob_wdata_pid_sql.java b/400_xowa/src/gplx/xowa/xtns/wdatas/imports/Xob_wdata_pid_sql.java index 337a196eb..b5c82406c 100644 --- a/400_xowa/src/gplx/xowa/xtns/wdatas/imports/Xob_wdata_pid_sql.java +++ b/400_xowa/src/gplx/xowa/xtns/wdatas/imports/Xob_wdata_pid_sql.java @@ -16,14 +16,14 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.xtns.wdatas.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.wdatas.*; -import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; +import gplx.xowa.wikis.data.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; public class Xob_wdata_pid_sql extends Xob_wdata_pid_base { Xodb_mgr_sql db_mgr; Xodb_wdata_pids_tbl tbl; Db_stmt stmt; Db_conn conn; @Override public String Wkr_key() {return KEY;} public static final String KEY = "import.sql.wdata.pid"; @Override public void Pid_bgn() { db_mgr = wiki.Db_mgr_as_sql(); tbl = db_mgr.Tbl_wdata_pids(); - conn = db_mgr.Fsys_mgr().Conn_wdata(); + conn = db_mgr.Core_data_mgr().Conn_wdata(); stmt = tbl.Insert_stmt(conn); conn.Txn_mgr().Txn_bgn_if_none(); } @@ -33,7 +33,7 @@ public class Xob_wdata_pid_sql extends Xob_wdata_pid_base { @Override public void Pid_end() { conn.Txn_mgr().Txn_end_all(); stmt.Rls(); - db_mgr.Fsys_mgr().Index_create(wiki.Appe().Usr_dlg(), Byte_.Ary(Xodb_file_tid.Tid_core, Xodb_file_tid.Tid_wikidata), Index_wdata_pids); + db_mgr.Core_data_mgr().Index_create(wiki.Appe().Usr_dlg(), Byte_.Ary(Xowd_db_file_.Tid_core, Xowd_db_file_.Tid_wikidata), Index_wdata_pids); } private static final Db_idx_itm Index_wdata_pids = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS wdata_pids__src ON wdata_pids (wp_src_lang, wp_src_ttl);"); } diff --git a/400_xowa/src/gplx/xowa/xtns/wdatas/imports/Xob_wdata_qid_sql.java b/400_xowa/src/gplx/xowa/xtns/wdatas/imports/Xob_wdata_qid_sql.java index 185dcb2d7..222469f67 100644 --- a/400_xowa/src/gplx/xowa/xtns/wdatas/imports/Xob_wdata_qid_sql.java +++ b/400_xowa/src/gplx/xowa/xtns/wdatas/imports/Xob_wdata_qid_sql.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.xtns.wdatas.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.wdatas.*; -import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; +import gplx.xowa.wikis.data.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; public class Xob_wdata_qid_sql extends Xob_wdata_qid_base { Xodb_mgr_sql db_mgr; Xodb_wdata_qids_tbl tbl; Db_stmt stmt; Db_conn conn; @Override public String Wkr_key() {return KEY;} public static final String KEY = "import.sql.wdata.qid"; @@ -25,10 +25,10 @@ public class Xob_wdata_qid_sql extends Xob_wdata_qid_base { tbl = db_mgr.Tbl_wdata_qids(); long wikidata_max = wiki.Appe().Setup_mgr().Dump_mgr().Db_wikidata_max(); if (wikidata_max > 0) { - Xodb_file wdata_file = db_mgr.Fsys_mgr().Make(Xodb_file_tid.Tid_wikidata); - db_mgr.Fsys_mgr().Conn_wdata_(wdata_file); + Xowd_db_file wdata_file = db_mgr.Core_data_mgr().Dbs__add_new(Xowd_db_file_.Tid_wikidata); + db_mgr.Core_data_mgr().Conn_wdata_(wdata_file); } - conn = db_mgr.Fsys_mgr().Conn_wdata(); + conn = db_mgr.Core_data_mgr().Conn_wdata(); stmt = tbl.Insert_stmt(conn); conn.Txn_mgr().Txn_bgn_if_none(); } @@ -38,7 +38,7 @@ public class Xob_wdata_qid_sql extends Xob_wdata_qid_base { @Override public void Qid_end() { conn.Txn_mgr().Txn_end_all(); stmt.Rls(); - db_mgr.Fsys_mgr().Index_create(wiki.Appe().Usr_dlg(), Byte_.Ary(Xodb_file_tid.Tid_core, Xodb_file_tid.Tid_wikidata), Index_wdata_qids); + db_mgr.Core_data_mgr().Index_create(wiki.Appe().Usr_dlg(), Byte_.Ary(Xowd_db_file_.Tid_core, Xowd_db_file_.Tid_wikidata), Index_wdata_qids); } private static final Db_idx_itm Index_wdata_qids = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS wdata_qids__src ON wdata_qids (wq_src_wiki, wq_src_ns, wq_src_ttl);"); } diff --git a/400_xowa/src/gplx/xowa/xtns/wdatas/pfuncs/Wdata_external_lang_links_data.java b/400_xowa/src/gplx/xowa/xtns/wdatas/pfuncs/Wdata_external_lang_links_data.java index 5c640b609..586f6597c 100644 --- a/400_xowa/src/gplx/xowa/xtns/wdatas/pfuncs/Wdata_external_lang_links_data.java +++ b/400_xowa/src/gplx/xowa/xtns/wdatas/pfuncs/Wdata_external_lang_links_data.java @@ -40,7 +40,7 @@ public class Wdata_external_lang_links_data { if (Bry_.Eq(argx, Key_sort)) {sort = true; return;} // {{noexternallanglinks:*}}; assume it cannot be combined with other langs_hash: EX: {{noexternallanglinks:*|en|fr}} int args_len = self.Args_len(); Langs_add(argx); - Bry_bfr tmp_bfr = ctx.App().Utl_bry_bfr_mkr().Get_b128(); + Bry_bfr tmp_bfr = ctx.App().Utl__bfr_mkr().Get_b128(); for (int i = 0; i < args_len; i++) { Arg_nde_tkn nde = self.Args_get_by_idx(i); nde.Val_tkn().Tmpl_evaluate(ctx, src, self, tmp_bfr); diff --git a/400_xowa/src/gplx/xowa/xtns/wdatas/pfuncs/Wdata_pf_property_data.java b/400_xowa/src/gplx/xowa/xtns/wdatas/pfuncs/Wdata_pf_property_data.java index ecdf93d54..3cd9d9b81 100644 --- a/400_xowa/src/gplx/xowa/xtns/wdatas/pfuncs/Wdata_pf_property_data.java +++ b/400_xowa/src/gplx/xowa/xtns/wdatas/pfuncs/Wdata_pf_property_data.java @@ -31,7 +31,7 @@ public class Wdata_pf_property_data { id_int = Wdata_pf_property.Parse_pid(ctx.App().Utl_num_parser(), id); if (id_int == Wdata_wiki_mgr.Pid_null) {} // named; TODO: get pid from pid_regy int args_len = self.Args_len(); - Bry_bfr tmp_bfr = ctx.Wiki().Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = ctx.Wiki().Utl__bfr_mkr().Get_b512(); for (int i = 0; i < args_len; i++) { Arg_nde_tkn nde = self.Args_get_by_idx(i); Arg_itm_tkn nde_key = nde.Key_tkn(); diff --git a/400_xowa/src/gplx/xowa/xtns/wdatas/specials/Wdata_itemByTitle_page.java b/400_xowa/src/gplx/xowa/xtns/wdatas/specials/Wdata_itemByTitle_page.java index ef524fdb4..4c697f865 100644 --- a/400_xowa/src/gplx/xowa/xtns/wdatas/specials/Wdata_itemByTitle_page.java +++ b/400_xowa/src/gplx/xowa/xtns/wdatas/specials/Wdata_itemByTitle_page.java @@ -47,13 +47,13 @@ public class Wdata_itemByTitle_page implements Xows_page { Xoae_app app = wiki.Appe(); if (Bry_.Len_gt_0(site_bry) && Bry_.Len_gt_0(page_bry)) if (Navigate(usr_dlg, app, app.Wiki_mgr().Wdata_mgr(), page, site_bry, page_bry)) return; - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_k004(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_k004(); html_fmtr.Bld_bfr_many(tmp_bfr, "Search for items by site and title", "Site", site_bry, "Page", page_bry, "Search"); page.Data_raw_(tmp_bfr.Mkr_rls().Xto_bry_and_clear()); page.Html_data().Html_restricted_n_(); // [[Special:]] pages allow all HTML } private static boolean Navigate(Gfo_usr_dlg usr_dlg, Xoae_app app, Wdata_wiki_mgr wdata_mgr, Xoae_page page, byte[] site_bry, byte[] page_bry) { - page_bry = Xoa_app_.Utl_encoder_mgr().Url().Decode(page_bry); // NOTE: space is converted to + on postback to url; decode + page_bry = Xoa_app_.Utl__encoder_mgr().Url().Decode(page_bry); // NOTE: space is converted to + on postback to url; decode byte[] wiki_domain = Xow_wiki_alias.Parse_wmf_key(site_bry); if (wiki_domain == null) {usr_dlg.Warn_many("", "", "site_bry parse failed; site_bry:~{0}", String_.new_utf8_(site_bry)); return false;} Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_make(wiki_domain); if (wiki == null) {usr_dlg.Warn_many("", "", "wiki_domain does not exist; wiki_domain:~{0}", String_.new_utf8_(wiki_domain)); return false;} Xoa_ttl wdata_ttl = Xoa_ttl.parse_(wiki, page_bry); if (wdata_ttl == null) {usr_dlg.Warn_many("", "", "ttl is invalid; ttl:~{0}", String_.new_utf8_(page_bry)); return false;} diff --git a/400_xowa/src/gplx/xowa/xtns/wdatas/specials/Wdata_itemByTitle_page_tst.java b/400_xowa/src/gplx/xowa/xtns/wdatas/specials/Wdata_itemByTitle_page_tst.java index e43bc1a2e..50ab59b70 100644 --- a/400_xowa/src/gplx/xowa/xtns/wdatas/specials/Wdata_itemByTitle_page_tst.java +++ b/400_xowa/src/gplx/xowa/xtns/wdatas/specials/Wdata_itemByTitle_page_tst.java @@ -69,7 +69,7 @@ class Wdata_itemByTitle_page_fxt { Tfds.Eq_str_lines(expd, String_.new_ascii_(page.Data_raw())); } public String Expd_html(String wmf_key, String ttl_str) { - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_k004(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_k004(); special_page.Html_fmtr().Bld_bfr_many(tmp_bfr, "Search for items by site and title", "Site", wmf_key, "Page", ttl_str, "Search"); return tmp_bfr.Mkr_rls().Xto_str_and_clear(); } diff --git a/400_xowa/src/gplx/xowa2/apps/Xoav_app.java b/400_xowa/src/gplx/xowa2/apps/Xoav_app.java index 292a29e2f..8673bd88b 100644 --- a/400_xowa/src/gplx/xowa2/apps/Xoav_app.java +++ b/400_xowa/src/gplx/xowa2/apps/Xoav_app.java @@ -20,6 +20,7 @@ import gplx.dbs.*; import gplx.xowa.apps.fsys.*; import gplx.xowa.parsers.amps.* import gplx.xowa.*; import gplx.xowa2.apps.urls.*; import gplx.xowa2.users.*; import gplx.xowa.files.caches.*; import gplx.xowa.files.imgs.*; import gplx.xowa.wmfs.*; +import gplx.xowa.urls.encoders.*; public class Xoav_app implements Xoa_app { public Xoav_app(Gfo_usr_dlg usr_dlg, String plat_name, Io_url root_dir) { this.fsys_mgr = new Xoa_fsys_mgr(plat_name, root_dir); @@ -32,12 +33,13 @@ public class Xoav_app implements Xoa_app { public Xof_cache_mgr File_mgr__cache_mgr() {return file_mgr__cache_mgr;} private final Xof_cache_mgr file_mgr__cache_mgr; public Xof_img_mgr File_mgr__img_mgr() {return file_mgr__img_mgr;} private final Xof_img_mgr file_mgr__img_mgr; public Xowmf_mgr Wmf_mgr() {return wmf_mgr;} private final Xowmf_mgr wmf_mgr = new Xowmf_mgr(); + public Bry_bfr_mkr Utl__bfr_mkr() {return Xoa_app_.Utl__bfr_mkr();} + public Url_encoder_mgr Utl__encoder_mgr() {return Xoa_app_.Utl__encoder_mgr();} public Xoav_wiki_mgr Wiki_mgr() {return wiki_mgr;} private final Xoav_wiki_mgr wiki_mgr; public Xoud_data_mgr User_data_mgr() {return user_data_mgr;} private Xoud_data_mgr user_data_mgr = new Xoud_data_mgr(); public Gfo_usr_dlg Usr_dlg() {return usr_dlg;} public void Usr_dlg_(Gfo_usr_dlg v) {usr_dlg = v;} private Gfo_usr_dlg usr_dlg = Gfo_usr_dlg_.Null; - public Bry_bfr_mkr Utl_bfr_mkr() {return utl_bfr_mkr;} private Bry_bfr_mkr utl_bfr_mkr = new Bry_bfr_mkr(); public Xop_amp_mgr Utl_amp_mgr() {return utl_amp_mgr;} private Xop_amp_mgr utl_amp_mgr = new Xop_amp_mgr(); public Xol_case_mgr Utl_case_mgr() {return utl_case_mgr;} private Xol_case_mgr utl_case_mgr = Xol_case_mgr_.Utf8(); public Url_encoder Utl_encoder_fsys() {return utl_encoder_fsys;} private Url_encoder utl_encoder_fsys = Url_encoder.new_fsys_lnx_(); diff --git a/400_xowa/src/gplx/xowa2/files/Xofv_file_itm.java b/400_xowa/src/gplx/xowa2/files/Xofv_file_itm.java index 018310919..4cdee6a43 100644 --- a/400_xowa/src/gplx/xowa2/files/Xofv_file_itm.java +++ b/400_xowa/src/gplx/xowa2/files/Xofv_file_itm.java @@ -44,7 +44,7 @@ public class Xofv_file_itm { Xof_ext file_ext = Xof_ext_.new_by_ttl_(file_ttl); byte lnki_exec_tid = xfer.Lnki_exec_tid(); boolean lnki_is_orig = xfer.Img_is_orig(); - double lnki_time = xfer.Lnki_thumbtime(); + double lnki_time = xfer.Lnki_time(); int lnki_page = xfer.Lnki_page(); int html_uid = xfer.Html_uid(); img_size.Html_size_calc diff --git a/400_xowa/src/gplx/xowa2/files/Xofv_file_mgr_tst.java b/400_xowa/src/gplx/xowa2/files/Xofv_file_mgr_tst.java index 95aac9c0f..861bf7996 100644 --- a/400_xowa/src/gplx/xowa2/files/Xofv_file_mgr_tst.java +++ b/400_xowa/src/gplx/xowa2/files/Xofv_file_mgr_tst.java @@ -93,9 +93,9 @@ class Xofv_file_mgr_fxt { public void Clear() { file_mgr = new Xofv_file_mgr(Bry_.new_ascii_("enwiki")); Db_conn_bldr.I.Reg_default_mem(); - Db_conn conn = Db_conn_bldr.I.New("", Io_url_.mem_fil_("mem/file/cache.db")); boolean created = Bool_.Y; boolean version_is_1 = Bool_.N; - file_mgr.Cache_mgr().Init_for_db(conn, created, version_is_1); - file_mgr.Orig_wkr().Conn_(conn, created, version_is_1); + Db_conn conn = Db_conn_bldr.I.New("", Io_url_.mem_fil_("mem/file/cache.db")); boolean created = Bool_.Y; boolean schema_is_1 = Bool_.N; + file_mgr.Cache_mgr().Init_for_db(conn, created, schema_is_1); + file_mgr.Orig_wkr().Conn_(conn, created, schema_is_1); fsdb_mgr.Clear(); html_gui.Clear(); file_mgr.Fsdb_mgr_(fsdb_mgr); diff --git a/400_xowa/src/gplx/xowa2/gui/Xog_page.java b/400_xowa/src/gplx/xowa2/gui/Xog_page.java index cf3276ab0..ab4aa6e9c 100644 --- a/400_xowa/src/gplx/xowa2/gui/Xog_page.java +++ b/400_xowa/src/gplx/xowa2/gui/Xog_page.java @@ -16,41 +16,45 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa2.gui; import gplx.*; import gplx.xowa2.*; -import gplx.xowa.*; import gplx.xowa.hdumps.core.*; import gplx.xowa.pages.*; import gplx.xowa.pages.skins.*; -public class Xog_page { +import gplx.xowa.*; import gplx.xowa.html.hdumps.core.*; import gplx.xowa.html.hdumps.pages.*; +import gplx.xowa.files.*; +import gplx.xowa.pages.*; import gplx.xowa.pages.skins.*; import gplx.xowa.html.modules.*; +public class Xog_page implements Xoa_page { + public Xoa_url Url() {return page_url;} private Xoa_url page_url; + public Xoa_ttl Ttl() {return page_ttl;} private Xoa_ttl page_ttl; + public void Xtn_gallery_packed_exists_y_() {} public boolean Exists() {return exists;} public Xog_page Exists_n_() {exists = false; return this;} private boolean exists = true; + public byte Exec_tid() {return exec_tid;} private byte exec_tid = Xof_exec_tid.Tid_wiki_page; public int Page_id() {return page_id;} private int page_id; - public Xoa_url Page_url() {return page_url;} private Xoa_url page_url; - public Xoa_ttl Page_ttl() {return page_ttl;} private Xoa_ttl page_ttl; public int Version_id() {return version_id;} public void Version_id_(int v) {version_id = v;} private int version_id; public int Img_count() {return img_count;} public void Img_count_(int v) {img_count = v;} private int img_count; - public Hdump_module_mgr Module_mgr() {return module_mgr;} private Hdump_module_mgr module_mgr = new Hdump_module_mgr(); + public Xopg_module_mgr Module_mgr() {return module_mgr;} private Xopg_module_mgr module_mgr = new Xopg_module_mgr(); public byte[] Html_head_xtn() {return html_head_xtn;} public void Html_head_xtn_(byte[] v) {html_head_xtn = v;} private byte[] html_head_xtn = Bry_.Empty; public byte[] Page_body() {return page_body;} public void Page_body_(byte[] v) {this.page_body = v;} private byte[] page_body; public byte[] Display_ttl() {return display_ttl;} public void Display_ttl_(byte[] v) {this.display_ttl = v;} private byte[] display_ttl; public byte[] Content_sub() {return content_sub;} public void Content_sub_(byte[] v) {this.content_sub = v;} private byte[] content_sub; public byte[] Sidebar_div() {return sidebar_div;} public void Sidebar_div_(byte[] v) {this.sidebar_div = v;} private byte[] sidebar_div; public int[] Redlink_uids() {return redlink_uids;} public void Redlink_uids_(int[] v) {redlink_uids = v;} private int[] redlink_uids; - public Hdump_data_img__base[] Img_itms() {return img_itms;} public void Img_itms_(Hdump_data_img__base[] v) {this.img_itms = v;} private Hdump_data_img__base[] img_itms; + public Xohd_data_itm__base[] Img_itms() {return img_itms;} public void Img_itms_(Xohd_data_itm__base[] v) {this.img_itms = v;} private Xohd_data_itm__base[] img_itms; public OrderedHash Gly_itms() {return gly_itms;} private OrderedHash gly_itms = OrderedHash_.new_(); public Xog_page Init(int page_id, Xoa_url page_url, Xoa_ttl page_ttl) { this.page_id = page_id; this.page_url = page_url; this.page_ttl = page_ttl; content_sub = sidebar_div = Bry_.Empty; display_ttl = null; - img_itms = Hdump_data_img__base.Ary_empty; + img_itms = Xohd_data_itm__base.Ary_empty; module_mgr.Clear(); gly_itms.Clear(); return this; } - public void Init(Bry_bfr tmp_bfr, Xoae_page page) { - page_id = page.Revision_data().Id(); - page_body = page.Hdump_data().Body(); - Xopg_html_data html_data = page.Html_data(); - gplx.xowa.html.modules.Xoh_module_mgr mod_mgr = html_data.Module_mgr(); + public void Ctor_from_page(Bry_bfr tmp_bfr, Xoae_page page) { + page_id = page.Revision_data().Id(); + page_body = page.Hdump_data().Body(); + Xopg_html_data html_data = page.Html_data(); + Xoh_module_mgr mod_mgr = html_data.Module_mgr(); module_mgr.Init(mod_mgr.Itm_mathjax().Enabled(), mod_mgr.Itm_popups().Bind_hover_area(), mod_mgr.Itm_gallery().Enabled(), mod_mgr.Itm_hiero().Enabled()); - display_ttl = html_data.Display_ttl(); - content_sub = html_data.Content_sub(); - sidebar_div = Save_sidebars(tmp_bfr, page, html_data); + display_ttl = html_data.Display_ttl(); + content_sub = html_data.Content_sub(); + sidebar_div = Save_sidebars(tmp_bfr, page, html_data); } private static byte[] Save_sidebars(Bry_bfr tmp_bfr, Xoae_page page, Xopg_html_data html_data) { Xopg_xtn_skin_mgr mgr = html_data.Xtn_skin_mgr(); diff --git a/400_xowa/src/gplx/xowa2/gui/Xogv_img_wkr.java b/400_xowa/src/gplx/xowa2/gui/Xogv_img_wkr.java new file mode 100644 index 000000000..720ca35b2 --- /dev/null +++ b/400_xowa/src/gplx/xowa2/gui/Xogv_img_wkr.java @@ -0,0 +1,82 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa2.gui; import gplx.*; import gplx.xowa2.*; +import gplx.threads.*; +import gplx.xowa.*; +import gplx.xowa.files.*; import gplx.xowa.files.repos.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.files.caches.*; import gplx.xowa.files.gui.*; +import gplx.xowa.html.hdumps.core.*; +public class Xogv_img_wkr implements Gfo_thread_wkr { + private final Xof_orig_mgr orig_mgr; private final Xof_bin_mgr bin_mgr; private final Xof_cache_mgr cache_mgr; + private final Gfo_usr_dlg usr_dlg; private final Xow_repo_mgr repo_mgr; private final Xog_js_wkr js_wkr; + private final Xof_url_bldr url_bldr = Xof_url_bldr.new_v2_(); private final Xof_img_size img_size = new Xof_img_size(); + private final Xoa_page hpg; private final ListAdp imgs; private final byte exec_tid; + public Xogv_img_wkr(Xof_orig_mgr orig_mgr, Xof_bin_mgr bin_mgr, Xof_cache_mgr cache_mgr, Xow_repo_mgr repo_mgr, Xog_js_wkr js_wkr, Xoa_page hpg, ListAdp imgs, byte exec_tid) { + this.usr_dlg = Gfo_usr_dlg_._; + this.orig_mgr = orig_mgr; this.bin_mgr = bin_mgr; this.cache_mgr = cache_mgr; this.repo_mgr = repo_mgr; this.js_wkr = js_wkr; + this.hpg = hpg; this.imgs = imgs; this.exec_tid = exec_tid; + } + public String Name() {return "xowa.load_imgs.wkr";} + public boolean Resume() {return true;} + public void Exec() { + Show_imgs(); + } + public void Show_imgs() { + int len = imgs.Count(); + for (int i = 0; i < len; ++i) + Show_img(exec_tid, hpg, (Xohd_data_itm__base)imgs.FetchAt(i)); + } + private void Show_img(byte exec_tid, Xoa_page hpg, Xohd_data_itm__base hdump) { + Xof_fsdb_itm fsdb = new Xof_fsdb_itm(); + fsdb.Ctor_by_lnki(hdump.Lnki_ttl(), Xof_ext_.new_by_id_(hdump.Lnki_ext()), Xof_xfer_itm_.Md5_(hdump.Lnki_ttl()), hdump.Lnki_type(), hdump.Lnki_w(), hdump.Lnki_h(), Xof_patch_upright_tid_.Tid_all, hdump.Lnki_upright(), hdump.Lnki_time(), hdump.Lnki_page()); + fsdb.Html_uid_(hdump.Html_uid()); + if (!Ctor_by_orig(exec_tid, fsdb)) return; + if (fsdb.Lnki_ext().Is_not_viewable(exec_tid)) return; // file not viewable; exit; EX: exec_tid = page and fsdb is audio + if (!Io_mgr._.ExistsFil(fsdb.Html_view_url())) { + if (bin_mgr.Find_to_url_as_bool(exec_tid, fsdb)) { + // if (fsdb.Insert()) Save_itm(fsdb); + } + else { + usr_dlg.Warn_many("", "", "file not found: page=~{0} file=~{1} width=~{2}", hpg.Url().Xto_full_str_safe(), String_.new_utf8_(fsdb.Lnki_ttl()), fsdb.Lnki_w()); + fsdb.Rslt_bin_(Xof_bin_wkr_.Tid_not_found); + // gplx.xowa.files.gui.Js_img_mgr.Update_img_missing(usr_dlg, fsdb.Html_uid()); // TODO: update caption with "" if image is missing + return; + } + } + Js_img_mgr.Update_img(hpg, js_wkr, fsdb); + cache_mgr.Reg_and_check_for_size_0(fsdb); + } + private boolean Ctor_by_orig(byte exec_tid, Xof_fsdb_itm fsdb) { + fsdb.Orig_status_(Xof_orig_wkr_.Status_missing_orig); + Xof_orig_itm orig = orig_mgr.Find_by_ttl_or_null(fsdb.Lnki_ttl()); if (orig == Xof_orig_itm.Null) return false; + // if (orig.Insert()) // set by wmf + // orig_mgr.Insert(repo_tid, fsdb.Orig_ttl(), fsdb.Lnki_ext().Id(), fsdb.Orig_w(), fsdb.Orig_h(), fsdb.Orig_redirect(), Xof_orig_wkr_.Status_found); + fsdb.Orig_status_(Xof_orig_wkr_.Status_found); + byte repo_id = orig.Repo(); + Xof_repo_pair repo_pair = repo_mgr.Repos_get_by_id(repo_id); + fsdb.Orig_repo_id_(repo_id); + fsdb.Orig_repo_name_(repo_pair.Wiki_domain()); + fsdb.Orig_size_(orig.W(), orig.H()); + fsdb.Lnki_ext_(Xof_ext_.new_by_id_(orig.Ext())); // overwrite ext with whatever's in file_orig; needed for ogg -> oga / ogv + if (Bry_.Len_gt_0(orig.Redirect())) // redirect exists; EX: A.png redirected to B.png + fsdb.Ctor_by_orig_redirect(orig.Redirect()); // update fsdb with atrs of B.png + fsdb.Html_size_calc(img_size, exec_tid); + fsdb.Html_view_url_(url_bldr.To_url(repo_pair, fsdb, Bool_.N)); + fsdb.Html_orig_url_(url_bldr.To_url(repo_pair, fsdb, Bool_.Y)); + return true; + } +} diff --git a/400_xowa/src/gplx/xowa2/gui/Xogv_tab_base.java b/400_xowa/src/gplx/xowa2/gui/Xogv_tab_base.java index b3877c139..24cded611 100644 --- a/400_xowa/src/gplx/xowa2/gui/Xogv_tab_base.java +++ b/400_xowa/src/gplx/xowa2/gui/Xogv_tab_base.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa2.gui; import gplx.*; import gplx.xowa2.*; import gplx.xowa.*; -import gplx.xowa.hdumps.core.*; import gplx.xowa.gui.history.*; +import gplx.xowa.html.hdumps.core.*; import gplx.xowa.gui.history.*; import gplx.xowa2.apps.*; import gplx.xowa2.wikis.*; import gplx.xowa2.gui.*; import gplx.xowa2.apps.urls.*; public abstract class Xogv_tab_base { private Xog_history_stack history_stack = new Xog_history_stack(); private Gfo_url_parser url_parser; diff --git a/400_xowa/src/gplx/xowa2/users/data/Xoud_site_mgr.java b/400_xowa/src/gplx/xowa2/users/data/Xoud_site_mgr.java index 240d58e67..e8e273f12 100644 --- a/400_xowa/src/gplx/xowa2/users/data/Xoud_site_mgr.java +++ b/400_xowa/src/gplx/xowa2/users/data/Xoud_site_mgr.java @@ -16,13 +16,17 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa2.users.data; import gplx.*; import gplx.xowa2.*; import gplx.xowa2.users.*; -import gplx.dbs.*; +import gplx.dbs.*; import gplx.xowa.users.data.*; public class Xoud_site_mgr { - private Xoud_site_tbl regy_tbl = new Xoud_site_tbl(); - public void Conn_(Db_conn conn, boolean created, int user_id) {regy_tbl.Conn_(conn, created, user_id);} - public Xoud_site_row[] Get_all() {return regy_tbl.Select_all();} + private final Xoud_site_tbl tbl = new Xoud_site_tbl(); + private final Xoud_id_mgr id_mgr; + public Xoud_site_mgr(Xoud_id_mgr id_mgr) {this.id_mgr = id_mgr;} + public void Conn_(Db_conn conn, boolean created, int user_id) { + tbl.Conn_(conn, created, user_id); + } + public Xoud_site_row[] Get_all() {return tbl.Select_all();} public void Import(String domain, String name, String path, String xtn) { // insert or update wiki - Xoud_site_row[] ary = regy_tbl.Select_by_domain(domain); + Xoud_site_row[] ary = tbl.Select_by_domain(domain); int len = ary.length, update_id = -1, priority = 0; for (int i = 0; i < len; ++i) { Xoud_site_row itm = ary[i]; @@ -33,8 +37,8 @@ public class Xoud_site_mgr { } } if (update_id == -1) - regy_tbl.Insert(1, priority, domain, name, path, xtn); + tbl.Insert(id_mgr.Get_next_and_save("xowa.user.site"), priority, domain, name, path, xtn); else - regy_tbl.Update(update_id, priority, domain, name, path, xtn); + tbl.Update(update_id, priority, domain, name, path, xtn); } } diff --git a/400_xowa/src/gplx/xowa2/users/data/Xoud_user_tbl.java b/400_xowa/src/gplx/xowa2/users/data/Xoud_user_tbl.java new file mode 100644 index 000000000..ecf8f688c --- /dev/null +++ b/400_xowa/src/gplx/xowa2/users/data/Xoud_user_tbl.java @@ -0,0 +1,75 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa2.users.data; import gplx.*; import gplx.xowa2.*; import gplx.xowa2.users.*; +import gplx.dbs.*; +class Xoud_user_mgr { + private Xoud_user_tbl tbl = new Xoud_user_tbl(); + public void Conn_(Db_conn conn, boolean created) {tbl.Conn_(conn, created);} + public int Get_id_or_new(String name) { + int rv = tbl.Select_id_by_name(name); + if (rv == Int_.MinValue) { + rv = tbl.Select_id_next(); + tbl.Insert(rv, name); + } + return rv; + } +} +class Xoud_user_tbl { + private String tbl_name = "user_user_regy"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); + private String fld_id, fld_name; + private Db_conn conn; + public void Conn_(Db_conn new_conn, boolean created) { + this.conn = new_conn; flds.Clear(); + fld_id = flds.Add_int_pkey("id"); + fld_name = flds.Add_str("name", 255); + if (created) { + Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds + , Db_meta_idx.new_unique_by_tbl(tbl_name, "name", fld_name) + ); + conn.Exec_create_tbl_and_idx(meta); + } + } + public void Insert(int id, String name) { + Db_stmt stmt = conn.Stmt_insert(tbl_name, flds); + stmt.Val_int(fld_id, id).Val_str(fld_name, name) + .Exec_insert(); + } + public int Select_id_by_name(String name) { + Db_rdr rdr = Db_rdr_.Null; + try { + Db_stmt stmt = conn.Stmt_select(tbl_name, flds, fld_name); + rdr = stmt.Crt_str(fld_name, name).Exec_select_as_rdr(); + return rdr.Move_next() ? rdr.Read_int(fld_id) : Int_.MinValue; + } + finally {rdr.Rls();} + } + public int Select_id_next() { + Db_rdr rdr = Db_rdr_.Null; + int rv = 1; + try { + Db_stmt stmt = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empy); + rdr = stmt.Exec_select_as_rdr(); + while (rdr.Move_next()) { + int cur = rdr.Read_int(fld_id); + if (cur >= rv) rv = cur + 1; + } + return rv; + } + finally {rdr.Rls();} + } +} diff --git a/400_xowa/src/gplx/xowa2/wikis/Xowv_repo_mgr.java b/400_xowa/src/gplx/xowa2/wikis/Xowv_repo_mgr.java index 2ceacb08e..8a203c6b1 100644 --- a/400_xowa/src/gplx/xowa2/wikis/Xowv_repo_mgr.java +++ b/400_xowa/src/gplx/xowa2/wikis/Xowv_repo_mgr.java @@ -16,9 +16,10 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa2.wikis; import gplx.*; import gplx.xowa2.*; -import gplx.xowa.files.repos.*; +import gplx.xowa.*; import gplx.xowa.files.repos.*; public class Xowv_repo_mgr implements Xow_repo_mgr { private final ListAdp repos = ListAdp_.new_(); + public Xof_repo_pair[] Repos_ary() {return (Xof_repo_pair[])repos.Xto_ary(Xof_repo_pair.class);} public Xof_repo_pair Repos_get_by_wiki(byte[] wiki) { int len = repos.Count(); for (int i = 0; i < len; i++) { @@ -37,4 +38,22 @@ public class Xowv_repo_mgr implements Xow_repo_mgr { } return null; } + public Xof_repo_pair Add_repo(Xoa_app app, byte[] src_repo_key, byte[] trg_repo_key) { + Xof_repo_itm src_repo = Add(app, src_repo_key), trg_repo = Add(app, trg_repo_key); + byte[] src_wiki_key = src_repo.Wiki_key();//, trg_wiki_key = trg_repo.Wiki_key(); +// if (!Bry_.Eq(src_wiki_key, trg_wiki_key) && !Bry_.Eq(src_wiki_key, Xow_domain_.Tid_bry_home)) throw Err_mgr._.fmt_(GRP_KEY, "add_repo", "wiki keys do not match: ~{0} ~{1}", String_.new_utf8_(src_wiki_key), String_.new_utf8_(trg_wiki_key)); + Xof_repo_pair pair = new Xof_repo_pair((byte)repos.Count(), src_wiki_key, src_repo, trg_repo); + repos.Add(pair); + return pair; + } + private Xof_repo_itm Add(Xoa_app app, byte[] key) { +// Xof_repo_itm itm = (Xof_repo_itm)hash.Fetch(key_bry); +// if (itm == null) { + Xof_repo_itm itm = new Xof_repo_itm(key, app.Fsys_mgr(), null); + String url_str = app.Fsys_mgr().File_dir().GenSubDir(String_.new_utf8_(key)).Raw(); +// this.Add(itm); +// } + itm.Root_str_(url_str).Wiki_key_(key); + return itm; + } } diff --git a/400_xowa/src/gplx/xowa2/wikis/Xowv_wiki.java b/400_xowa/src/gplx/xowa2/wikis/Xowv_wiki.java index c54533201..0646b0fdc 100644 --- a/400_xowa/src/gplx/xowa2/wikis/Xowv_wiki.java +++ b/400_xowa/src/gplx/xowa2/wikis/Xowv_wiki.java @@ -16,10 +16,14 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa2.wikis; import gplx.*; import gplx.xowa2.*; +import gplx.core.primitives.*; import gplx.xowa.*; import gplx.xowa.wikis.xwikis.*; import gplx.xowa.langs.cases.*; import gplx.xowa.wikis.ttls.*; import gplx.xowa.html.hzips.*; -import gplx.xowa.dbs.tbls.*; import gplx.dbs.*; import gplx.xowa.hdumps.*; import gplx.xowa.wikis.*; import gplx.xowa.files.repos.*; -import gplx.xowa2.apps.*; import gplx.xowa2.wikis.specials.*; import gplx.xowa2.wikis.data.*; import gplx.xowa2.gui.*; +import gplx.xowa.wikis.data.*; +import gplx.xowa.files.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.files.bins.*; +import gplx.xowa.dbs.tbls.*; import gplx.dbs.*; import gplx.xowa.html.hdumps.*; import gplx.xowa.wikis.*; import gplx.xowa.files.repos.*; +import gplx.xowa2.apps.*; import gplx.xowa2.wikis.specials.*; import gplx.xowa2.gui.*; public class Xowv_wiki implements Xow_wiki, Xow_ttl_parser { + private final Xof_fsdb_mgr__sql fsdb_mgr = new Xof_fsdb_mgr__sql(); public Xowv_wiki(Xoav_app app, byte[] domain_bry, Io_url wiki_root_dir) { this.app = app; this.domain_bry = domain_bry; this.domain_str = String_.new_utf8_(domain_bry); @@ -27,12 +31,12 @@ public class Xowv_wiki implements Xow_wiki, Xow_ttl_parser { this.domain_tid = domain_itm.Domain_tid(); this.domain_abrv = Xow_wiki_alias.Build_alias(Xow_domain_.parse(domain_bry)); this.ns_mgr = Xow_ns_mgr_.default_(app.Utl_case_mgr()); // new Xow_ns_mgr(app.Utl_case_mgr()); // FIXME - this.data_mgr = new Xowd_data_mgr(domain_str, wiki_root_dir, ns_mgr); - this.hdump_mgr = new Xowd_hdump_mgr(app, this); + this.data_mgr__core_mgr = new Xowv_core_data_mgr(domain_str, wiki_root_dir); + this.html_mgr__hzip_mgr = new Xow_hzip_mgr(app.Usr_dlg(), this); + this.html_mgr__hdump_rdr = new Xohd_hdump_rdr(app, this); this.xwiki_mgr = new Xow_xwiki_mgr(); - this.hzip_mgr = new Xow_hzip_mgr(app.Usr_dlg(), this); this.special_mgr = new Xosp_special_mgr(this); - this.fsys_mgr = new Xow_fsys_mgr(wiki_root_dir, wiki_root_dir); + this.fsys_mgr = new Xow_fsys_mgr(wiki_root_dir, wiki_root_dir.OwnerDir().OwnerDir().GenSubDir_nest("file", domain_str)); } public Xoa_app App() {return app;} public byte[] Domain_bry() {return domain_bry;} private final byte[] domain_bry; @@ -42,26 +46,35 @@ public class Xowv_wiki implements Xow_wiki, Xow_ttl_parser { public byte[] Domain_abrv() {return domain_abrv;} private final byte[] domain_abrv; public Xow_ns_mgr Ns_mgr() {return ns_mgr;} private final Xow_ns_mgr ns_mgr; public Xow_fsys_mgr Fsys_mgr() {return fsys_mgr;} private Xow_fsys_mgr fsys_mgr; - public boolean File_mgr__version_is_1() {return Bool_.Y;} + public Xow_core_data_mgr Data_mgr__core_mgr() {return data_mgr__core_mgr;} private final Xowv_core_data_mgr data_mgr__core_mgr; public Xow_repo_mgr File_mgr__repo_mgr() {return file_mgr__repo_mgr;} private Xowv_repo_mgr file_mgr__repo_mgr = new Xowv_repo_mgr(); + public Xof_fsdb_mode File_mgr__fsdb_mode() {return file_mgr__fsdb_mode;} private final Xof_fsdb_mode file_mgr__fsdb_mode = Xof_fsdb_mode.new_view(); + public Xof_orig_mgr File_mgr__orig_mgr() {return fsdb_mgr.Orig_mgr();} + public Xof_bin_mgr File_mgr__bin_mgr() {return fsdb_mgr.Bin_mgr();} + public boolean Html_mgr__hdump_enabled() {return Bool_.Y;} + public Xow_hzip_mgr Html_mgr__hzip_mgr() {return html_mgr__hzip_mgr;} private final Xow_hzip_mgr html_mgr__hzip_mgr; + public Xohd_hdump_rdr Html_mgr__hdump_rdr() {return html_mgr__hdump_rdr;} private final Xohd_hdump_rdr html_mgr__hdump_rdr; public Xol_lang Lang() {throw Err_.not_implemented_();} + public Xosp_special_mgr Special_mgr() {return special_mgr;} private Xosp_special_mgr special_mgr; - public Xowd_data_mgr Db_mgr() {return data_mgr;} private final Xowd_data_mgr data_mgr; - public Xowd_hdump_mgr Hdump_mgr() {return hdump_mgr;} private final Xowd_hdump_mgr hdump_mgr; - public Xow_hzip_mgr Hzip_mgr() {return hzip_mgr;} private Xow_hzip_mgr hzip_mgr; public Xow_xwiki_mgr Xwiki_mgr() {return xwiki_mgr;} private Xow_xwiki_mgr xwiki_mgr; public Xoav_app Appv() {return app;} private final Xoav_app app; public void Pages_get(Xog_page rv, Gfo_url url, Xoa_ttl ttl) { - data_mgr.Init_assert(); + if (data_mgr__core_mgr.Init()) { + file_mgr__repo_mgr.Add_repo(app, Bry_.new_utf8_("commons.wikimedia.org"), Bry_.new_utf8_("simple.wikipedia.org")); + fsdb_mgr.Init_by_wiki(this); + data_mgr__core_mgr.Tbl__ns().Select_all(0, ns_mgr); + html_mgr__hdump_rdr.Init_by_db(data_mgr__core_mgr); + } if (ttl.Ns().Id_special()) special_mgr.Get_by_ttl(rv, url, ttl); else - hdump_mgr.Get_by_ttl(rv, url, ttl); + html_mgr__hdump_rdr.Get_by_ttl(rv, ttl); } - public Xoa_ttl Ttl_parse(byte[] ttl) {return Xoa_ttl.parse(app.Utl_bfr_mkr(), app.Utl_amp_mgr(), app.Utl_case_mgr(), xwiki_mgr, ns_mgr, app.Utl_msg_log(), ttl, 0, ttl.length);} + public Xoa_ttl Ttl_parse(byte[] ttl) {return Xoa_ttl.parse(app.Utl__bfr_mkr(), app.Utl_amp_mgr(), app.Utl_case_mgr(), xwiki_mgr, ns_mgr, app.Utl_msg_log(), ttl, 0, ttl.length);} public Xoa_ttl Ttl_parse(int ns_id, byte[] ttl) { Xow_ns ns = ns_mgr.Ids_get_or_null(ns_id); byte[] raw = Bry_.Add(ns.Name_db_w_colon(), ttl); - return Xoa_ttl.parse(app.Utl_bfr_mkr(), app.Utl_amp_mgr(), app.Utl_case_mgr(), xwiki_mgr, ns_mgr, app.Utl_msg_log(), raw, 0, raw.length); + return Xoa_ttl.parse(app.Utl__bfr_mkr(), app.Utl_amp_mgr(), app.Utl_case_mgr(), xwiki_mgr, ns_mgr, app.Utl_msg_log(), raw, 0, raw.length); } } diff --git a/400_xowa/src/gplx/xowa2/wikis/data/Xowd_data_mgr.java b/400_xowa/src/gplx/xowa2/wikis/data/Xowd_data_mgr.java deleted file mode 100644 index 812c9c0c5..000000000 --- a/400_xowa/src/gplx/xowa2/wikis/data/Xowd_data_mgr.java +++ /dev/null @@ -1,51 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa2.wikis.data; import gplx.*; import gplx.xowa2.*; import gplx.xowa2.wikis.*; -import gplx.dbs.*; import gplx.dbs.engines.sqlite.*; -import gplx.xowa.*; import gplx.xowa.dbs.*; -public class Xowd_data_mgr { - private final String domain_str; private final Io_url wiki_root_dir; private final Xow_ns_mgr ns_mgr; - public Xowd_data_mgr(String domain_str, Io_url wiki_root_dir, Xow_ns_mgr ns_mgr) { - this.domain_str = domain_str; this.wiki_root_dir = wiki_root_dir; this.ns_mgr = ns_mgr; - } - public Xowd_page_regy_tbl Tbl__page() {return tbl__page;} private final Xowd_page_regy_tbl tbl__page = new Xowd_page_regy_tbl(); - public Xowd_ns_regy_tbl Tbl__ns() {return tbl__ns;} private final Xowd_ns_regy_tbl tbl__ns = new Xowd_ns_regy_tbl(); - public Xowd_db_regy_tbl Tbl__db() {return tbl__db;} private final Xowd_db_regy_tbl tbl__db = new Xowd_db_regy_tbl(); - public Db_url Url_by_idx(int idx) {if (!Int_.Between(idx, 0, db_urls_len)) throw Err_.new_("database does not exist: idx={0}", idx); return db_urls[idx];} - private Xodb_file[] db_files; private Db_url[] db_urls; private int db_urls_len; - private boolean init_done = false; - public void Init_assert() { - if (init_done) return; - init_done = true; - if (String_.Eq(domain_str, "xowa")) return; - Db_url core_url = Sqlite_url.load_(wiki_root_dir.GenSubFil_ary(domain_str, ".000.sqlite3")); - Db_conn_bldr_data conn_data = Db_conn_bldr.I.Get_or_new("", core_url); - Db_conn core_conn = conn_data.Conn(); boolean created = conn_data.Created(); - int wiki_id = 0; - boolean version_is_1 = Bool_.N; - tbl__db.Conn_(core_conn, version_is_1); - tbl__ns.Conn_(core_conn, version_is_1); - tbl__page.Conn_(core_conn, created, version_is_1); - db_files = tbl__db.Select_all(wiki_root_dir); - db_urls_len = db_files.length; - db_urls = new Db_url[db_urls_len]; - for (int i = 0; i < db_urls_len; ++i) - db_urls[i] = Db_url_.sqlite_(db_files[i].Url()); - tbl__ns.Select_all(wiki_id, ns_mgr); - } -} diff --git a/400_xowa/src/gplx/xowa2/wikis/data/Xowd_db_regy_tbl.java b/400_xowa/src/gplx/xowa2/wikis/data/Xowd_db_regy_tbl.java deleted file mode 100644 index 124b5ea46..000000000 --- a/400_xowa/src/gplx/xowa2/wikis/data/Xowd_db_regy_tbl.java +++ /dev/null @@ -1,63 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.xowa2.wikis.data; import gplx.*; import gplx.xowa2.*; import gplx.xowa2.wikis.*; -import gplx.lists.*; -import gplx.dbs.*; import gplx.xowa.dbs.*; -public class Xowd_db_regy_tbl { - private String tbl_name = "wiki_db_regy"; - private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); - private String fld_id, fld_type, fld_url; - private Db_conn conn; - public void Conn_(Db_conn new_conn, boolean version_is_1) { - this.conn = new_conn; flds.Clear(); - String name_prefix = ""; - if (version_is_1) { - tbl_name = "xowa_db"; - name_prefix = "db_"; - } - else { - //fld_db_id = flds.Add_int("db_id"); - } - fld_id = flds.Add_int (name_prefix + "id"); - fld_type = flds.Add_byte (name_prefix + "type"); - fld_url = flds.Add_str (name_prefix + "url", 512); - } - public Xodb_file[] Select_all(Io_url wiki_root_dir) { - Db_rdr rdr = Db_rdr_.Null; - ListAdp list = ListAdp_.new_(); - try { - Db_stmt stmt = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empy); - rdr = stmt.Exec_select_as_rdr(); - while (rdr.Move_next()) { - Xodb_file db = Xodb_file.load_(rdr.Read_int(fld_id), rdr.Read_byte(fld_type), rdr.Read_str(fld_url)); - db.Url_(wiki_root_dir.GenSubFil(db.Url_rel())); - list.Add(db); - } - } finally {rdr.Rls();} - list.SortBy(Xodb_file_sorter__id.I); - return (Xodb_file[])list.Xto_ary(Xodb_file.class); - } -} -class Xodb_file_sorter__id implements ComparerAble { - public int compare(Object lhsObj, Object rhsObj) { - Xodb_file lhs = (Xodb_file)lhsObj; - Xodb_file rhs = (Xodb_file)rhsObj; - return Int_.Compare(lhs.Id(), rhs.Id()); - } - public static final Xodb_file_sorter__id I = new Xodb_file_sorter__id(); Xodb_file_sorter__id() {} -} diff --git a/400_xowa/src_100_app/gplx/xowa/Xoa_hive_mgr.java b/400_xowa/src_100_app/gplx/xowa/Xoa_hive_mgr.java index 1e16df70d..30ca83be1 100644 --- a/400_xowa/src_100_app/gplx/xowa/Xoa_hive_mgr.java +++ b/400_xowa/src_100_app/gplx/xowa/Xoa_hive_mgr.java @@ -28,7 +28,7 @@ public class Xoa_hive_mgr { } private Xowd_regy_mgr regy_mgr = new Xowd_regy_mgr(); Int_obj_ref bry_len = Int_obj_ref.zero_(); Xob_xdat_file xdat_rdr = new Xob_xdat_file(); Xob_xdat_itm xdat_itm = new Xob_xdat_itm(); public Xowd_regy_mgr Regy_mgr() {return regy_mgr;} public Xob_xdat_file Get_rdr(Io_url hive_root, byte[] fil_ext_bry, int fil_idx) { - Bry_bfr tmp_bfr = app.Utl_bry_bfr_mkr().Get_m001(); + Bry_bfr tmp_bfr = app.Utl__bfr_mkr().Get_m001(); byte[] tmp_bry = tmp_bfr.Bfr(); bry_len.Val_zero_(); Io_url file = Xotdb_fsys_mgr.Url_fil(hive_root, fil_idx, fil_ext_bry); tmp_bry = Io_mgr._.LoadFilBry_reuse(file, tmp_bry, bry_len); diff --git a/400_xowa/src_100_app/gplx/xowa/Xoa_url_alias_mgr.java b/400_xowa/src_100_app/gplx/xowa/Xoa_url_alias_mgr.java index c124c91f6..277e92283 100644 --- a/400_xowa/src_100_app/gplx/xowa/Xoa_url_alias_mgr.java +++ b/400_xowa/src_100_app/gplx/xowa/Xoa_url_alias_mgr.java @@ -22,7 +22,7 @@ along with this program. If not, see . // public byte[] Fmt_or_null(byte[] raw) { // int colon_pos = Bry_finder.Find_fwd(raw, Byte_ascii.Colon); if (colon_pos == Bry_.NotFound) return null; // byte[] fmt = (byte[])hash.Get_by_mid(raw, 0, colon_pos); if (fmt == null) return null; -// Bry_bfr tmp_bfr = app.Utl_bry_bfr_mkr().Get_b512(); +// Bry_bfr tmp_bfr = app.Utl__bfr_mkr().Get_b512(); // fmtr.Fmt_(fmt).Bld_bfr_many(tmp_bfr, Bry_.Mid(raw, colon_pos + Int_.Const_dlm_len, raw.length)); // return tmp_bfr.Mkr_rls().Xto_bry_and_clear(); // } diff --git a/400_xowa/src_120_wiki/gplx/xowa/Xow_fragment_mgr.java b/400_xowa/src_120_wiki/gplx/xowa/Xow_fragment_mgr.java index 8a6fdef7c..879bfc0c7 100644 --- a/400_xowa/src_120_wiki/gplx/xowa/Xow_fragment_mgr.java +++ b/400_xowa/src_120_wiki/gplx/xowa/Xow_fragment_mgr.java @@ -44,7 +44,7 @@ public class Xow_fragment_mgr implements GfoInvkAble { } public static final String Invk_html_js_edit_toolbar_fmt_ = "html_js_edit_toolbar_fmt_", Invk_html_js_edit_toolbar = "html_js_edit_toolbar"; public void Evt_lang_changed(Xol_lang lang) { - Bry_bfr bfr = Xoa_app_.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr bfr = Xoa_app_.Utl__bfr_mkr().Get_b512(); Xow_msg_mgr msg_mgr = wiki.Appe().User().Msg_mgr(); html_js_edit_toolbar = html_js_edit_toolbar_fmtr.Bld_bry_many(bfr , msg_mgr.Val_by_id(Xol_msg_itm_.Id_edit_toolbar_bold_tip) diff --git a/400_xowa/src_120_wiki/gplx/xowa/Xow_mainpage_finder.java b/400_xowa/src_120_wiki/gplx/xowa/Xow_mainpage_finder.java index d6e79acc4..97ce992eb 100644 --- a/400_xowa/src_120_wiki/gplx/xowa/Xow_mainpage_finder.java +++ b/400_xowa/src_120_wiki/gplx/xowa/Xow_mainpage_finder.java @@ -19,7 +19,7 @@ package gplx.xowa; import gplx.*; import gplx.xowa.langs.msgs.*; public class Xow_mainpage_finder { public static byte[] Find_or(Xowe_wiki wiki, byte[] or) { - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b512(); Xol_msg_itm msg_itm = Xol_msg_mgr_.Get_msg_itm(tmp_bfr, wiki, wiki.Lang(), Msg_mainpage); byte[] rv = msg_itm.Src_is_missing() ? or diff --git a/400_xowa/src_120_wiki/gplx/xowa/Xow_msg_mgr.java b/400_xowa/src_120_wiki/gplx/xowa/Xow_msg_mgr.java index 2ea0cd4b6..cfe0ac118 100644 --- a/400_xowa/src_120_wiki/gplx/xowa/Xow_msg_mgr.java +++ b/400_xowa/src_120_wiki/gplx/xowa/Xow_msg_mgr.java @@ -35,7 +35,7 @@ public class Xow_msg_mgr implements GfoInvkAble { Xol_msg_itm itm = msg_mgr.Itm_by_id_or_null(id); if (itm == null) itm = lang.Msg_mgr().Itm_by_id_or_null(id); - Bry_bfr tmp_bfr = Xoa_app_.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = Xoa_app_.Utl__bfr_mkr().Get_b512(); byte[] rv = Val_by_itm(tmp_bfr, itm, args); tmp_bfr.Mkr_rls(); return rv; @@ -45,7 +45,7 @@ public class Xow_msg_mgr implements GfoInvkAble { public Xol_msg_itm Find_or_null(byte[] key) { Xol_msg_itm itm = msg_mgr.Itm_by_key_or_null(key); if (itm == null) { - Bry_bfr tmp_bfr = Xoa_app_.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = Xoa_app_.Utl__bfr_mkr().Get_b512(); itm = Xol_msg_mgr_.Get_msg_itm(tmp_bfr, wiki, lang, key); if (itm.Src_is_missing()) itm = null; tmp_bfr.Mkr_rls(); @@ -57,7 +57,7 @@ public class Xow_msg_mgr implements GfoInvkAble { public byte[] Val_by_key_obj(byte[] key) {return Val_by_key(key, null);} private byte[] Val_by_key(byte[] key, Object[] args) { Xol_msg_itm itm = msg_mgr.Itm_by_key_or_null(key); - Bry_bfr tmp_bfr = Xoa_app_.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = Xoa_app_.Utl__bfr_mkr().Get_b512(); if (itm == null) itm = Xol_msg_mgr_.Get_msg_itm(tmp_bfr, wiki, lang, key); if (itm.Src_is_missing()) { @@ -75,7 +75,7 @@ public class Xow_msg_mgr implements GfoInvkAble { return rv; } public byte[] Val_html_accesskey_and_title(byte[] id) { - Bry_bfr bfr = Xoa_app_.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr bfr = Xoa_app_.Utl__bfr_mkr().Get_b512(); byte[] rv = Val_html_accesskey_and_title(id, bfr, null); bfr.Mkr_rls(); return rv; diff --git a/400_xowa/src_120_wiki/gplx/xowa/Xow_script_mgr.java b/400_xowa/src_120_wiki/gplx/xowa/Xow_script_mgr.java index 89cc9c2d3..a17a8cb97 100644 --- a/400_xowa/src_120_wiki/gplx/xowa/Xow_script_mgr.java +++ b/400_xowa/src_120_wiki/gplx/xowa/Xow_script_mgr.java @@ -25,7 +25,7 @@ public class Xow_script_mgr implements GfoInvkAble { } private static final String Invk_set = "set"; public void Exec(Xowe_wiki wiki) { int len = hash.Count(); - Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_k004(); + Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_k004(); for (int i = 0; i < len; i++) { Xow_script_itm itm = (Xow_script_itm)hash.FetchAt(i); int wiki_tid = wiki.Domain_tid(); diff --git a/400_xowa/src_120_wiki/gplx/xowa/Xow_wiki.java b/400_xowa/src_120_wiki/gplx/xowa/Xow_wiki.java index 4d2815485..3a01dd9a8 100644 --- a/400_xowa/src_120_wiki/gplx/xowa/Xow_wiki.java +++ b/400_xowa/src_120_wiki/gplx/xowa/Xow_wiki.java @@ -16,17 +16,26 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa; import gplx.*; +import gplx.core.primitives.*; import gplx.xowa.wikis.*; import gplx.xowa.wikis.ttls.*; -import gplx.xowa.files.repos.*; +import gplx.xowa.wikis.data.*; +import gplx.xowa.files.*; import gplx.xowa.files.repos.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.bins.*; +import gplx.xowa.html.hzips.*; import gplx.xowa.html.hdumps.*; public interface Xow_wiki extends Xow_ttl_parser { - byte[] Domain_bry(); // EX: en.wikipedia.org - String Domain_str(); - int Domain_tid(); // Xow_domain_.Tid_int_wikipedia - byte[] Domain_abrv(); // enwiki - Xow_domain Domain_itm(); - Xow_fsys_mgr Fsys_mgr(); - Xoa_app App(); - Xol_lang Lang(); - Xow_repo_mgr File_mgr__repo_mgr(); - boolean File_mgr__version_is_1(); + byte[] Domain_bry(); // EX: en.wikipedia.org + String Domain_str(); + int Domain_tid(); // Xow_domain_.Tid_int_wikipedia + byte[] Domain_abrv(); // enwiki + Xow_domain Domain_itm(); + Xow_fsys_mgr Fsys_mgr(); + Xoa_app App(); + Xol_lang Lang(); + Xof_fsdb_mode File_mgr__fsdb_mode(); + Xow_repo_mgr File_mgr__repo_mgr(); + Xof_orig_mgr File_mgr__orig_mgr(); + Xof_bin_mgr File_mgr__bin_mgr(); + Xow_core_data_mgr Data_mgr__core_mgr(); + boolean Html_mgr__hdump_enabled(); + Xow_hzip_mgr Html_mgr__hzip_mgr(); + Xohd_hdump_rdr Html_mgr__hdump_rdr(); } diff --git a/400_xowa/src_120_wiki/gplx/xowa/Xowe_wiki.java b/400_xowa/src_120_wiki/gplx/xowa/Xowe_wiki.java index a4ff7657f..15f6bcda2 100644 --- a/400_xowa/src_120_wiki/gplx/xowa/Xowe_wiki.java +++ b/400_xowa/src_120_wiki/gplx/xowa/Xowe_wiki.java @@ -18,13 +18,15 @@ along with this program. If not, see . package gplx.xowa; import gplx.*; import gplx.core.primitives.*; import gplx.xowa.apps.*; import gplx.xowa.apps.fsys.*; import gplx.xowa.files.exts.*; import gplx.xowa.wikis.*; import gplx.xowa.users.*; import gplx.xowa.html.*; import gplx.xowa.users.history.*; import gplx.xowa.specials.*; import gplx.xowa.xtns.*; import gplx.xowa.dbs.*; import gplx.xowa.wikis.ttls.*; -import gplx.xowa.files.*; import gplx.xowa.files.repos.*; +import gplx.xowa.wikis.data.*; +import gplx.xowa.files.*; import gplx.xowa.files.repos.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.bins.*; import gplx.xowa.langs.vnts.*; import gplx.xowa.gui.views.*; import gplx.xowa.wikis.xwikis.*; +import gplx.xowa.html.hzips.*; import gplx.xowa.html.hdumps.*; import gplx.xowa.setup.maints.*; import gplx.xowa.wikis.caches.*; import gplx.xowa.bldrs.imports.*; import gplx.xowa.xtns.pfuncs.*; import gplx.xowa.tdbs.*; public class Xowe_wiki implements Xow_wiki, GfoInvkAble { - private Xow_html_util util; private boolean hdump_enabled; + private Xow_html_util util; public Xowe_wiki(Xoae_app app, Io_url wiki_dir, Xow_ns_mgr ns_mgr, Xol_lang lang) { this.app = app; this.ns_mgr = ns_mgr; this.lang = lang; domain_str = wiki_dir.NameOnly(); domain_bry = Bry_.new_utf8_(domain_str); @@ -34,6 +36,9 @@ public class Xowe_wiki implements Xow_wiki, GfoInvkAble { fsys_mgr = new Xow_fsys_mgr(wiki_dir, app.Fsys_mgr().File_dir().GenSubDir(domain_str)); xwiki_mgr = new Xow_xwiki_mgr(this, app.Url_parser().Url_parser()); xwiki_mgr.Add_full(domain_bry, domain_bry); // add full name to xwiki_mgr; needed for lookup in home ns; EX: [[en.wikipedia.org:Earth]] + html_mgr = new Xow_html_mgr(this); + this.html_mgr__hdump_rdr = new Xohd_hdump_rdr(app, this); + this.html_mgr__hdump_wtr = new Xohd_hdump_wtr(app, this); tdb_fsys_mgr = new Xotdb_fsys_mgr(wiki_dir, ns_mgr); xwiki_domain_tid = Xwiki_tid(domain_tid); @@ -49,7 +54,6 @@ public class Xowe_wiki implements Xow_wiki, GfoInvkAble { Pf_func_.Reg(lang.Func_regy(), lang); special_mgr = new Xows_mgr(this, lang); stats = new Xow_wiki_stats(this); - html_mgr = new Xow_html_mgr(this); sys_cfg = new Xow_sys_cfg(this); hive_mgr = new Xob_hive_mgr(this); util = new Xow_html_util(this); @@ -77,14 +81,21 @@ public class Xowe_wiki implements Xow_wiki, GfoInvkAble { public int Domain_tid() {return domain_tid;} private final int domain_tid; public byte[] Domain_abrv() {return domain_abrv;} private final byte[] domain_abrv; public Xow_domain Domain_itm() {return domain_itm;} private final Xow_domain domain_itm; + public Xoa_app App() {return app;} public Xol_lang Lang() {return lang;} private final Xol_lang lang; public Xow_ns_mgr Ns_mgr() {return ns_mgr;} private final Xow_ns_mgr ns_mgr; public Xow_fsys_mgr Fsys_mgr() {return fsys_mgr;} private final Xow_fsys_mgr fsys_mgr; public Xoa_ttl Ttl_parse(byte[] ttl) {return Xoa_ttl.parse_(this, ttl);} public Xoa_ttl Ttl_parse(int ns_id, byte[] ttl) {return Xoa_ttl.parse_(this, ns_id, ttl);} + public Xow_core_data_mgr Data_mgr__core_mgr() {return db_mgr.Tid() == Xodb_mgr_txt.Tid_txt ? null : this.Db_mgr_as_sql().Core_data_mgr();} // TEST: public Xow_repo_mgr File_mgr__repo_mgr() {return file_mgr.Repo_mgr();} - public boolean File_mgr__version_is_1() {return true;} - public Xoa_app App() {return app;} + public Xof_orig_mgr File_mgr__orig_mgr() {return file_mgr.Fsdb_mgr().Orig_mgr();} + public Xof_bin_mgr File_mgr__bin_mgr() {return file_mgr.Fsdb_mgr().Bin_mgr();} + public Xof_fsdb_mode File_mgr__fsdb_mode() {return file_mgr.Fsdb_mode();} + public boolean Html_mgr__hdump_enabled() {return html_mgr__hdump_enabled;} private boolean html_mgr__hdump_enabled = Bool_.N; + public Xow_hzip_mgr Html_mgr__hzip_mgr() {return html_mgr.Hzip_mgr();} + public Xohd_hdump_rdr Html_mgr__hdump_rdr() {return html_mgr__hdump_rdr;} private final Xohd_hdump_rdr html_mgr__hdump_rdr; + public Xohd_hdump_wtr Html_mgr__hdump_wtr() {return html_mgr__hdump_wtr;} private final Xohd_hdump_wtr html_mgr__hdump_wtr; public Xow_xwiki_mgr Xwiki_mgr() {return xwiki_mgr;} private final Xow_xwiki_mgr xwiki_mgr; public int Xwiki_domain_tid() {return xwiki_domain_tid;} private int xwiki_domain_tid; @@ -105,12 +116,12 @@ public class Xowe_wiki implements Xow_wiki, GfoInvkAble { public Xow_msg_mgr Msg_mgr() {return msg_mgr;} private Xow_msg_mgr msg_mgr; public Xow_fragment_mgr Fragment_mgr() {return fragment_mgr;} private Xow_fragment_mgr fragment_mgr; public Bfmtr_eval_wiki Eval_mgr() {return eval_mgr;} private Bfmtr_eval_wiki eval_mgr; - public Bry_bfr_mkr Utl_bry_bfr_mkr() {return app.Utl_bry_bfr_mkr();} + public Bry_bfr_mkr Utl__bfr_mkr() {return app.Utl__bfr_mkr();} public byte[] Wdata_wiki_lang() {return wdata_wiki_lang;} private byte[] wdata_wiki_lang; public void Wdata_wiki_lang_(byte[] v) {this.wdata_wiki_lang = v; Wdata_wiki_abrv_();} // TEST: public byte[] Wdata_wiki_abrv() {return wdata_wiki_abrv;} private byte[] wdata_wiki_abrv; private int wdata_wiki_tid; private void Wdata_wiki_abrv_() { - Bry_bfr bfr = app.Utl_bry_bfr_mkr().Get_b128(); + Bry_bfr bfr = app.Utl__bfr_mkr().Get_b128(); Xow_wiki_alias.Build_alias_by_lang_tid(bfr, wdata_wiki_lang, Int_obj_ref.new_(wdata_wiki_tid)); wdata_wiki_abrv = bfr.Mkr_rls().Xto_bry_and_clear(); } @@ -142,16 +153,16 @@ public class Xowe_wiki implements Xow_wiki, GfoInvkAble { file_mgr.Meta_mgr().Clear(); db_mgr.Load_mgr().Clear(); } - public Xoae_page GetPageByTtl(Xoa_url url, Xoa_ttl ttl) {return GetPageByTtl(url, ttl, lang, app.Gui_mgr().Browser_win().Active_tab(), true);} - public Xoae_page GetPageByTtl(Xoa_url url, Xoa_ttl ttl, Xog_tab_itm tab) {return GetPageByTtl(url, ttl, lang, tab, true);} + public Xoae_page GetPageByTtl(Xoa_url url, Xoa_ttl ttl) {return GetPageByTtl(url, ttl, lang, app.Gui_mgr().Browser_win().Active_tab(), true);} + public Xoae_page GetPageByTtl(Xoa_url url, Xoa_ttl ttl, Xog_tab_itm tab) {return GetPageByTtl(url, ttl, lang, tab, true);} public Xoae_page GetPageByTtl(Xoa_url url, Xoa_ttl ttl, Xol_lang lang, Xog_tab_itm tab, boolean parse_page) { if (init_needed) Init_wiki(app.User()); - Xoae_page page = data_mgr.Get_page(url, ttl, false, false); // get page from data_mgr + Xoae_page page = data_mgr.Get_page(url, ttl, false, false); // get page from data_mgr if (page.Missing()) { // page doesn't exist if (ttl.Ns().Id_file()) { Xowe_wiki commons_wiki = app.Wiki_mgr().Get_by_key_or_null(commons_wiki_key); if (commons_wiki != null - && !Bry_.Eq(domain_bry, commons_wiki.Domain_bry())) // if file, check commons wiki; note that !Bry_.Eq is recursion guard + && !Bry_.Eq(domain_bry, commons_wiki.Domain_bry())) // if file, check commons wiki; note that !Bry_.Eq is recursion guard return commons_wiki.GetPageByTtl(url, ttl, this.lang, tab, true); } else @@ -177,6 +188,71 @@ public class Xowe_wiki implements Xow_wiki, GfoInvkAble { page.Root_(root); root.Data_htm_(root.Root_src()); } + public Xodb_mgr_sql Db_mgr_create_as_sql() {Xodb_mgr_sql rv = new Xodb_mgr_sql(this); db_mgr = rv; return rv;} + public Xowe_wiki Init_assert() {if (init_needed) Init_wiki(app.User()); return this;} + private boolean init_in_process = false; + private void Init_wiki(Xou_user user) { // NOTE: (a) one-time initialization for all wikis; (b) not called by tests + if (init_in_process) { + app.Usr_dlg().Log_many("", "", "wiki.init: circular call canceled: ~{0}", domain_str); + return; // NOTE: may be called multiple times due to "if (app.Stage() == Xoa_stage_.Tid_launch) init_needed = false;"; TODO: call this only once; DATE:2014-06-07 + } + init_in_process = true; + if (app.Stage() == Xoa_stage_.Tid_launch) init_needed = false; // NOTE: only mark inited if app fully launched; otherwise statements in xowa.gfs can fire and prematurely set home to inited; DATE:2013-03-24 + Gfo_log_bfr log_bfr = app.Log_bfr(); + log_bfr.Add("wiki.init.bgn: " + domain_str); + app.Cfg_mgr().Init(this); + file_mgr.Cfg_download().Enabled_(app.File_mgr().Wmf_mgr().Enabled()); // default download to app global; can be overriden below + Io_url sqlite_url = Xodb_mgr_sql.Find_core_url(this); + if (sqlite_url == null) { + app.Gfs_mgr().Run_url_for(this, tdb_fsys_mgr.Cfg_wiki_stats_fil()); + app.Gfs_mgr().Run_url_for(this, app.Fsys_mgr().Cfg_wiki_core_dir().GenSubFil(domain_str + ".gfs")); // run cfg for wiki by user ; EX: /xowa/user/anonymous/wiki/en.wikipedia.org/cfg/user_wiki.gfs + tdb_fsys_mgr.Scan_dirs(); + } + else { + Xodb_mgr_sql db_mgr_sql = this.Db_mgr_create_as_sql(); + db_mgr_sql.Init_load(gplx.dbs.Db_url_.sqlite_(sqlite_url)); + } + if (!Xob_import_marker.Check(this)) {app.Wiki_mgr().Del(domain_bry); init_needed = false; return;} // NOTE: must call after Db_mgr_create_as_sql(); also, must delete wiki from mgr; DATE:2014-08-24 + db_mgr.Load_mgr().Load_init(this); + app.Gfs_mgr().Run_url_for(this, tdb_fsys_mgr.Cfg_wiki_core_fil()); + gplx.xowa.utls.upgrades.Xoa_upgrade_mgr.Check(this); + if (lang.Init_by_load()) { + if (domain_tid == Xow_domain_.Tid_int_wikipedia) // NOTE: if type is wikipedia, add "Wikipedia" as an alias; PAGE:en.w:pt.wikipedia.org/wiki/Página principal which redirects to Wikipedia:Página principal + ns_mgr.Aliases_add(Xow_ns_.Id_project, Xow_ns_.Ns_name_wikipedia); + } + cfg_parser.Xtns().Itm_pages().Init(ns_mgr); // init ns_mgr for Page / Index ns just before rebuild; usually set by #cfg file + Xow_ns_mgr_.rebuild_(lang, ns_mgr); // always rebuild; may be changed by user_wiki.gfs; different lang will change namespaces; EX: de.wikisource.org will have Seite for File and none of {{#lst}} will work + fragment_mgr.Evt_lang_changed(lang); + parser.Init_by_lang(lang); + html_mgr.Init_by_lang(lang); + lang.Vnt_mgr().Init_by_wiki(this); + Bry_fmtr.Null.Eval_mgr().Enabled_(false); + app.Wiki_mgr().Scripts().Exec(this); + Bry_fmtr.Null.Eval_mgr().Enabled_(true); + app.Wiki_mgr().Css_installer().Install_assert(this, user.Fsys_mgr().Wiki_html_dir(domain_str)); + if (html_mgr__hdump_enabled) { + this.Db_mgr_as_sql().Html_db_enabled_(html_mgr__hdump_enabled); + Xowd_db_init_wkr__html.I.Assert_col__page_html_db_id(Db_mgr_as_sql().Core_data_mgr()); // NOTE: must go above html_mgr.Init_by_wiki b/c Page_load will be done via messages + html_mgr__hdump_rdr.Init_by_db(this.Data_mgr__core_mgr()); + html_mgr__hdump_wtr.Init_by_db((Xowe_core_data_mgr)this.Data_mgr__core_mgr()); + } + html_mgr.Init_by_wiki(this); + this.Copy_cfg(app.User().Wiki()); + File_repos_assert(app, this); + xtn_mgr.Init_by_wiki(this); + log_bfr.Add("wiki.init.end"); + app.Log_wtr().Log_msg_to_session_direct(log_bfr.Xto_str()); + init_in_process = false; + } + public void Rls() { + if (rls_list == null) return; + int len = rls_list.Count(); + for (int i = 0; i < len; i++) { + RlsAble rls = (RlsAble)rls_list.FetchAt(i); + rls.Rls(); + } + } + private void Copy_cfg(Xowe_wiki wiki) {html_mgr.Copy_cfg(wiki.Html_mgr());} public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_files)) return file_mgr; else if (ctx.Match(k, Invk_xwikis)) return xwiki_mgr; @@ -205,7 +281,7 @@ public class Xowe_wiki implements Xow_wiki, GfoInvkAble { else if (ctx.Match(k, Invk_maint)) return maint_mgr; else if (ctx.Match(k, Invk_domain)) return domain_str; else if (ctx.Match(k, Invk_xtns)) return xtn_mgr; - else if (ctx.Match(k, Invk_hdump_enabled_)) hdump_enabled = m.ReadYn("v"); + else if (ctx.Match(k, Invk_hdump_enabled_)) html_mgr__hdump_enabled = m.ReadYn("v"); else return GfoInvkAble_.Rv_unhandled; return this; } @@ -220,64 +296,6 @@ public class Xowe_wiki implements Xow_wiki, GfoInvkAble { , Invk_domain = "domain", Invk_maint = "maint", Invk_hdump_enabled_ = "hdump_enabled_" ; public static final String Invk_lang_ = "lang_"; - public Xodb_mgr_sql Db_mgr_create_as_sql() {Xodb_mgr_sql rv = new Xodb_mgr_sql(this); db_mgr = rv; return rv;} - public Xowe_wiki Init_assert() {if (init_needed) Init_wiki(app.User()); return this;} - private boolean init_in_process = false; - private void Init_wiki(Xou_user user) { // NOTE: (a) one-time initialization for all wikis; (b) not called by tests - if (init_in_process) { - app.Usr_dlg().Log_many("", "", "wiki.init: circular call canceled: ~{0}", domain_str); - return; // NOTE: may be called multiple times due to "if (app.Stage() == Xoa_stage_.Tid_launch) init_needed = false;"; TODO: call this only once; DATE:2014-06-07 - } - init_in_process = true; - if (app.Stage() == Xoa_stage_.Tid_launch) init_needed = false; // NOTE: only mark inited if app fully launched; otherwise statements in xowa.gfs can fire and prematurely set home to inited; DATE:2013-03-24 - Gfo_log_bfr log_bfr = app.Log_bfr(); - log_bfr.Add("wiki.init.bgn: " + domain_str); - app.Cfg_mgr().Init(this); - file_mgr.Cfg_download().Enabled_(app.File_mgr().Wmf_mgr().Enabled()); // default download to app global; can be overriden below - Io_url sqlite_url = Xodb_mgr_sql.Find_core_url(this); - if (sqlite_url != null) { - Xodb_mgr_sql db_mgr_sql = this.Db_mgr_create_as_sql(); - db_mgr_sql.Init_load(gplx.dbs.Db_url_.sqlite_(sqlite_url)); - db_mgr_sql.Html_db_enabled_(hdump_enabled); - } - if (!Xob_import_marker.Check(this)) {app.Wiki_mgr().Del(domain_bry); init_needed = false; return;} // NOTE: must call after Db_mgr_create_as_sql(); also, must delete wiki from mgr; DATE:2014-08-24 - db_mgr.Load_mgr().Load_init(this); - app.Gfs_mgr().Run_url_for(this, tdb_fsys_mgr.Cfg_wiki_core_fil()); - gplx.xowa.utls.upgrades.Xoa_upgrade_mgr.Check(this); - app.Gfs_mgr().Run_url_for(this, tdb_fsys_mgr.Cfg_wiki_stats_fil()); - app.Gfs_mgr().Run_url_for(this, app.Fsys_mgr().Cfg_wiki_core_dir().GenSubFil(domain_str + ".gfs")); // run cfg for wiki by user ; EX: /xowa/user/anonymous/wiki/en.wikipedia.org/cfg/user_wiki.gfs - tdb_fsys_mgr.Scan_dirs(); - if (lang.Init_by_load()) { - if (domain_tid == Xow_domain_.Tid_int_wikipedia) // NOTE: if type is wikipedia, add "Wikipedia" as an alias; PAGE:en.w:pt.wikipedia.org/wiki/Página principal which redirects to Wikipedia:Página principal - ns_mgr.Aliases_add(Xow_ns_.Id_project, Xow_ns_.Ns_name_wikipedia); - } - cfg_parser.Xtns().Itm_pages().Init(ns_mgr); // init ns_mgr for Page / Index ns just before rebuild; usually set by #cfg file - Xow_ns_mgr_.rebuild_(lang, ns_mgr); // always rebuild; may be changed by user_wiki.gfs; different lang will change namespaces; EX: de.wikisource.org will have Seite for File and none of {{#lst}} will work - fragment_mgr.Evt_lang_changed(lang); - parser.Init_by_lang(lang); - html_mgr.Init_by_lang(lang); - lang.Vnt_mgr().Init_by_wiki(this); - Bry_fmtr.Null.Eval_mgr().Enabled_(false); - app.Wiki_mgr().Scripts().Exec(this); - Bry_fmtr.Null.Eval_mgr().Enabled_(true); - app.Wiki_mgr().Css_installer().Install_assert(this, user.Fsys_mgr().Wiki_html_dir(domain_str)); - html_mgr.Init_by_wiki(this); - this.Copy_cfg(app.User().Wiki()); - File_repos_assert(app, this); - xtn_mgr.Init_by_wiki(this); - log_bfr.Add("wiki.init.end"); - app.Log_wtr().Log_msg_to_session_direct(log_bfr.Xto_str()); - init_in_process = false; - } - public void Rls() { - if (rls_list == null) return; - int len = rls_list.Count(); - for (int i = 0; i < len; i++) { - RlsAble rls = (RlsAble)rls_list.FetchAt(i); - rls.Rls(); - } - } - private void Copy_cfg(Xowe_wiki wiki) {html_mgr.Copy_cfg(wiki.Html_mgr());} private static void File_repos_assert(Xoae_app app, Xowe_wiki wiki) { byte[] wiki_key = wiki.Domain_bry(); Xoa_repo_mgr repo_mgr = app.File_mgr().Repo_mgr(); diff --git a/400_xowa/src_121_wiki_data/gplx/xowa/Xob_hive_mgr.java b/400_xowa/src_121_wiki_data/gplx/xowa/Xob_hive_mgr.java index cc949740c..f756d8bae 100644 --- a/400_xowa/src_121_wiki_data/gplx/xowa/Xob_hive_mgr.java +++ b/400_xowa/src_121_wiki_data/gplx/xowa/Xob_hive_mgr.java @@ -185,7 +185,7 @@ public class Xob_hive_mgr { Xob_xdat_file xdat_fil = new Xob_xdat_file(); if (xdat_bry.length > 0) // if file is not empty, load it and parse it xdat_fil.Parse(xdat_bry, xdat_bry.length, xdat_url); - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_m001(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_m001(); xdat_fil.Insert(tmp_bfr, row); xdat_fil.Save(xdat_url); tmp_bfr.Mkr_rls(); diff --git a/400_xowa/src_121_wiki_data/gplx/xowa/Xow_data_mgr.java b/400_xowa/src_121_wiki_data/gplx/xowa/Xow_data_mgr.java index c81403d82..89842d189 100644 --- a/400_xowa/src_121_wiki_data/gplx/xowa/Xow_data_mgr.java +++ b/400_xowa/src_121_wiki_data/gplx/xowa/Xow_data_mgr.java @@ -39,7 +39,7 @@ public class Xow_data_mgr implements GfoInvkAble { ) { Xol_lang lang = wiki.Lang(); byte[] msg_key = ttl.Page_db(); - Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b512(); msg_key = lang.Case_mgr().Case_build_1st_lower(tmp_bfr, msg_key, 0, msg_key.length); byte[] msg_val = Xol_msg_mgr_.Get_msg_itm(tmp_bfr, wiki, wiki.Lang(), msg_key).Val(); // NOTE: do not change to Get_msg_val; Get_msg_val, also replaces $1 with values, and $1 needs to be preserved for callers; rv.Data_raw_(msg_val); diff --git a/400_xowa/src_121_wiki_data/gplx/xowa/Xow_hive_mgr_fxt.java b/400_xowa/src_121_wiki_data/gplx/xowa/Xow_hive_mgr_fxt.java index 950566490..fdb0ca506 100644 --- a/400_xowa/src_121_wiki_data/gplx/xowa/Xow_hive_mgr_fxt.java +++ b/400_xowa/src_121_wiki_data/gplx/xowa/Xow_hive_mgr_fxt.java @@ -66,7 +66,7 @@ public class Xow_hive_mgr_fxt { public Xow_hive_mgr_fxt Create_ctg(String key_str, int... pages) {Create_ctg(app, hive_mgr, key_str, pages); return this;} public static void Create_ctg(Xoae_app app, Xob_hive_mgr hive_mgr, String key_str, int... pages) { byte[] key_bry = Bry_.new_ascii_(key_str); - Bry_bfr bfr = app.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr bfr = app.Utl__bfr_mkr().Get_b512(); bfr.Add(key_bry); int pages_len = pages.length; for (int i = 0; i < pages_len; i++) @@ -77,7 +77,7 @@ public class Xow_hive_mgr_fxt { } public Xow_hive_mgr_fxt Create_id(int id, int fil_idx, int row_idx, boolean type_redirect, int itm_len, int ns_id, String ttl) {Create_id(app, hive_mgr, id, fil_idx, row_idx, type_redirect, itm_len, ns_id, ttl); return this;} public static void Create_id(Xoae_app app, Xob_hive_mgr hive_mgr, int id, int fil_idx, int row_idx, boolean type_redirect, int itm_len, int ns_id, String ttl) { - Bry_bfr bfr = app.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr bfr = app.Utl__bfr_mkr().Get_b512(); byte[] key_bry = Base85_utl.XtoStrByAry(id, 5); bfr .Add(key_bry) .Add_byte_pipe() .Add_base85_len_5(fil_idx) .Add_byte_pipe() diff --git a/400_xowa/src_121_wiki_data/gplx/xowa/Xowd_hive_mgr.java b/400_xowa/src_121_wiki_data/gplx/xowa/Xowd_hive_mgr.java index d1297b66c..9beee7231 100644 --- a/400_xowa/src_121_wiki_data/gplx/xowa/Xowd_hive_mgr.java +++ b/400_xowa/src_121_wiki_data/gplx/xowa/Xowd_hive_mgr.java @@ -39,7 +39,7 @@ public class Xowd_hive_mgr { Xob_xdat_file xdat = new Xob_xdat_file(); if (bry != Bry_.Empty) xdat.Parse(bry, bry.length, url); - Bry_bfr tmp = wiki.Utl_bry_bfr_mkr().Get_m001(); + Bry_bfr tmp = wiki.Utl__bfr_mkr().Get_m001(); xdat.Insert(tmp, data); if (comparer != null) xdat.Sort(tmp, comparer); @@ -63,7 +63,7 @@ public class Xowd_hive_mgr { Xob_xdat_file xdat = new Xob_xdat_file(); if (bry != Bry_.Empty) xdat.Parse(bry, bry.length, url); - Bry_bfr tmp = wiki.Utl_bry_bfr_mkr().Get_m001(); + Bry_bfr tmp = wiki.Utl__bfr_mkr().Get_m001(); xdat.Insert(tmp, data); if (comparer != null) xdat.Sort(tmp, comparer); @@ -82,7 +82,7 @@ public class Xowd_hive_mgr { Xob_xdat_file xdat = new Xob_xdat_file(); if (bry != Bry_.Empty) xdat.Parse(bry, bry.length, url); - Bry_bfr tmp = wiki.Utl_bry_bfr_mkr().Get_m001(); + Bry_bfr tmp = wiki.Utl__bfr_mkr().Get_m001(); Xob_xdat_itm itm = new Xob_xdat_itm(); xdat.Find(itm, old_key, lkp_bgn, lkp_dlm, exact); if (itm.Missing()) return; diff --git a/400_xowa/src_160_file/gplx/xowa/Xof_file_mgr.java b/400_xowa/src_160_file/gplx/xowa/Xof_file_mgr.java index dd9f33a71..03dec1f3c 100644 --- a/400_xowa/src_160_file/gplx/xowa/Xof_file_mgr.java +++ b/400_xowa/src_160_file/gplx/xowa/Xof_file_mgr.java @@ -36,8 +36,8 @@ public class Xof_file_mgr implements GfoInvkAble { public void Init_by_app(Xoae_app app) { Io_url db_url = app.User().Fsys_mgr().Root_dir().OwnerDir().GenSubFil_ary("xowa.user.", app.User().Key_str(), ".sqlite3"); Db_conn_bldr_data conn_data = Db_conn_bldr.I.Get_or_new("xowa.user_db", db_url); - boolean version_is_1 = Bool_.Y; - cache_mgr.Init_for_db(conn_data.Conn(), conn_data.Created(), version_is_1); + boolean schema_is_1 = Bool_.Y; + cache_mgr.Init_for_db(conn_data.Conn(), conn_data.Created(), schema_is_1); } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_repos)) return repo_mgr; diff --git a/400_xowa/src_162_xfer/gplx/xowa/Xof_xfer_mgr.java b/400_xowa/src_162_xfer/gplx/xowa/Xof_xfer_mgr.java index 42b7dd850..062ec6422 100644 --- a/400_xowa/src_162_xfer/gplx/xowa/Xof_xfer_mgr.java +++ b/400_xowa/src_162_xfer/gplx/xowa/Xof_xfer_mgr.java @@ -25,7 +25,7 @@ public class Xof_xfer_mgr { public Xof_xfer_mgr Force_orig_y_() {return Force_orig_(Bool_.Y);} public Xof_xfer_mgr Force_orig_n_() {return Force_orig_(Bool_.N);} public void Atrs_by_itm(Xof_xfer_itm xfer_itm, Xof_repo_itm src_repo, Xof_repo_itm trg_repo) { this.xfer_itm = xfer_itm; - this.lnki_w = xfer_itm.Lnki_w(); this.lnki_h = xfer_itm.Lnki_h(); this.lnki_thumbable = xfer_itm.Img_is_thumbable(); this.lnki_thumbtime = xfer_itm.Lnki_thumbtime(); this.lnki_page = xfer_itm.Lnki_page(); + this.lnki_w = xfer_itm.Lnki_w(); this.lnki_h = xfer_itm.Lnki_h(); this.lnki_thumbable = xfer_itm.Img_is_thumbable(); this.lnki_thumbtime = xfer_itm.Lnki_time(); this.lnki_page = xfer_itm.Lnki_page(); this.lnki_type = xfer_itm.Lnki_type(); lnki_upright = xfer_itm.Lnki_upright(); this.ttl = xfer_itm.Lnki_ttl(); this.md5 = xfer_itm.Lnki_md5(); this.ext = xfer_itm.Lnki_ext(); diff --git a/400_xowa/src_162_xfer/gplx/xowa/Xof_xfer_queue.java b/400_xowa/src_162_xfer/gplx/xowa/Xof_xfer_queue.java index c76c8386a..5558e414d 100644 --- a/400_xowa/src_162_xfer/gplx/xowa/Xof_xfer_queue.java +++ b/400_xowa/src_162_xfer/gplx/xowa/Xof_xfer_queue.java @@ -67,7 +67,7 @@ public class Xof_xfer_queue { } private void Exec_v2(byte exec_tid, Gfo_usr_dlg wtr, Xowe_wiki wiki, Xoae_page page) { wiki.File_mgr().Fsdb_mgr().Init_by_wiki(wiki); - wiki.File_mgr().Fsdb_mgr().Fsdb_search_by_list(exec_tid, Xfer_itms_to_fsdb_itms(list, wiki.File_mgr().Patch_upright()), page); + wiki.File_mgr().Fsdb_mgr().Fsdb_search_by_list(exec_tid, Xfer_itms_to_fsdb_itms(list, wiki.File_mgr().Patch_upright()), page, page.Tab().Html_itm()); } private ListAdp Xfer_itms_to_fsdb_itms(ListAdp list, int upright_patch) { ListAdp rv = ListAdp_.new_(); @@ -75,7 +75,7 @@ public class Xof_xfer_queue { for (int i = 0; i < list_len; i++) { Xof_xfer_itm xfer_itm = (Xof_xfer_itm)list.FetchAt(i); Xof_fsdb_itm fsdb_itm = new Xof_fsdb_itm(); - fsdb_itm.Ctor_by_lnki(xfer_itm.Lnki_ttl(), xfer_itm.Lnki_ext(), xfer_itm.Lnki_md5(), xfer_itm.Lnki_type(), xfer_itm.Lnki_w(), xfer_itm.Lnki_h(), upright_patch, xfer_itm.Lnki_upright(), xfer_itm.Lnki_thumbtime(), xfer_itm.Lnki_page()); + fsdb_itm.Ctor_by_lnki(xfer_itm.Lnki_ttl(), xfer_itm.Lnki_ext(), xfer_itm.Lnki_md5(), xfer_itm.Lnki_type(), xfer_itm.Lnki_w(), xfer_itm.Lnki_h(), upright_patch, xfer_itm.Lnki_upright(), xfer_itm.Lnki_time(), xfer_itm.Lnki_page()); fsdb_itm.Html_uid_(xfer_itm.Html_uid()); fsdb_itm.Html_elem_tid_(xfer_itm.Html_elem_tid()); fsdb_itm.Gallery_mgr_h_(xfer_itm.Gallery_mgr_h()); diff --git a/400_xowa/src_240_install/gplx/xowa/Xoa_css_extractor.java b/400_xowa/src_240_install/gplx/xowa/Xoa_css_extractor.java index fea13c3e0..996bfbe4e 100644 --- a/400_xowa/src_240_install/gplx/xowa/Xoa_css_extractor.java +++ b/400_xowa/src_240_install/gplx/xowa/Xoa_css_extractor.java @@ -37,7 +37,7 @@ public class Xoa_css_extractor { this.download_xrg = download_wkr.Download_xrg(); css_img_downloader = new Xoa_css_img_downloader().Ctor(usr_dlg, download_wkr, Bry_.new_utf8_(protocol_prefix)); failover_dir = app.Fsys_mgr().Bin_any_dir().GenSubDir_nest("html", "xowa", "import"); - url_encoder = Xoa_app_.Utl_encoder_mgr().Url(); + url_encoder = Xoa_app_.Utl__encoder_mgr().Url(); } public void Install_assert(Xowe_wiki wiki, Io_url wiki_html_dir) { try { diff --git a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_itm.java b/400_xowa/src_300_html/gplx/xowa/Xoa_page.java similarity index 78% rename from 400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_itm.java rename to 400_xowa/src_300_html/gplx/xowa/Xoa_page.java index 9da2042cd..ab794507e 100644 --- a/400_xowa/src/gplx/xowa/hdumps/core/Hdump_data_itm.java +++ b/400_xowa/src_300_html/gplx/xowa/Xoa_page.java @@ -15,9 +15,9 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa.hdumps.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*; -public interface Hdump_data_itm { - int Data_tid(); - void Data_write(Bry_bfr bfr); - String Data_print(); +package gplx.xowa; import gplx.*; +public interface Xoa_page { + Xoa_ttl Ttl(); + Xoa_url Url(); + void Xtn_gallery_packed_exists_y_(); } diff --git a/400_xowa/src_300_html/gplx/xowa/Xoae_page.java b/400_xowa/src_300_html/gplx/xowa/Xoae_page.java index 6f0dd131c..43dcb0bfc 100644 --- a/400_xowa/src_300_html/gplx/xowa/Xoae_page.java +++ b/400_xowa/src_300_html/gplx/xowa/Xoae_page.java @@ -18,15 +18,16 @@ along with this program. If not, see . package gplx.xowa; import gplx.*; import gplx.xowa.gui.*; import gplx.xowa.gui.views.*; import gplx.xowa.html.*; import gplx.xowa.pages.*; import gplx.xowa.files.*; import gplx.xowa.xtns.cite.*; import gplx.xowa.xtns.wdatas.*; import gplx.xowa.parsers.lnkis.redlinks.*; import gplx.xowa.html.tocs.*; -import gplx.xowa.html.modules.popups.*; import gplx.xowa.hdumps.pages.*; import gplx.xowa.xtns.wdatas.pfuncs.*; -public class Xoae_page { +import gplx.xowa.html.modules.popups.*; import gplx.xowa.html.hdumps.pages.*; import gplx.xowa.xtns.wdatas.pfuncs.*; +public class Xoae_page implements Xoa_page { Xoae_page(Xowe_wiki wiki, Xoa_ttl ttl) { this.wiki = wiki; this.ttl = ttl; this.lang = wiki.Lang(); // default to wiki.lang; can be override later by wikitext - hdr_mgr = new Xow_hdr_mgr(this, Xoa_app_.Utl_encoder_mgr()); + hdr_mgr = new Xow_hdr_mgr(this, Xoa_app_.Utl__encoder_mgr()); redlink_lnki_list = new Xopg_redlink_lnki_list(ttl.Ns().Id_module()); Ttl_(ttl); } Xoae_page() {} // called by Null + public void Xtn_gallery_packed_exists_y_() {html_data.Xtn_imap_exists_y_();} public Xow_wiki Wiki() {return wiki;} public Xoa_ttl Ttl() {return ttl;} public Xoae_page Ttl_(Xoa_ttl v) {ttl = v; url.Wiki_bry_(wiki.Domain_bry()).Page_bry_(v.Full_url()); return this;} private Xoa_ttl ttl; public Xoa_url Url() {return url;} public Xoae_page Url_(Xoa_url v) {url = v; return this;} private Xoa_url url = Xoa_url.blank_(); diff --git a/400_xowa/src_300_html/gplx/xowa/Xoh_file_main_wkr.java b/400_xowa/src_300_html/gplx/xowa/Xoh_file_main_wkr.java index af6b7cccf..a3297d687 100644 --- a/400_xowa/src_300_html/gplx/xowa/Xoh_file_main_wkr.java +++ b/400_xowa/src_300_html/gplx/xowa/Xoh_file_main_wkr.java @@ -57,7 +57,7 @@ public class Xoh_file_main_wkr implements Bry_fmtr_arg { alts.Ctor(xfer_itm, opt); Xof_ext ext = xfer_itm.Lnki_ext(); if (ext.Id_is_thumbable_img()) - opt.Html_main_img().Bld_bfr_many(bfr, xfer_itm.Orig_w(), xfer_itm.Orig_h(), xfer_itm.Html_orig_src(), file_size_bry, ext.Mime_type(), elem_id_val, xfer_itm.Html_w(), xfer_itm.Html_h(), xfer_itm.Html_view_src(), ttl.Full_txt(), Xoa_app_.Utl_encoder_mgr().Url().Encode(ttl.Page_url()), alts); + opt.Html_main_img().Bld_bfr_many(bfr, xfer_itm.Orig_w(), xfer_itm.Orig_h(), xfer_itm.Html_orig_src(), file_size_bry, ext.Mime_type(), elem_id_val, xfer_itm.Html_w(), xfer_itm.Html_h(), xfer_itm.Html_view_src(), ttl.Full_txt(), Xoa_app_.Utl__encoder_mgr().Url().Encode(ttl.Page_url()), alts); else if (ext.Id_is_video()) // NOTE: video must precede audio else File:***.ogg will not show thumbs opt.Html_main_vid().Bld_bfr_many(bfr, elem_id_val, xfer_itm.Html_view_src(), Atr_class_image, ttl.Page_db(), xfer_itm.Html_view_src(), xfer_itm.Html_w(), xfer_itm.Html_h(), Bry_.Empty, xfer_itm.Html_orig_src(), xfer_itm.Html_w(), xfer_itm.Html_w(), play_btn_icon); else if (ext.Id_is_audio()) diff --git a/400_xowa/src_310_url/gplx/xowa/Xoa_url_parser.java b/400_xowa/src_310_url/gplx/xowa/Xoa_url_parser.java index d3c944a93..38905ee44 100644 --- a/400_xowa/src_310_url/gplx/xowa/Xoa_url_parser.java +++ b/400_xowa/src_310_url/gplx/xowa/Xoa_url_parser.java @@ -136,7 +136,7 @@ public class Xoa_url_parser { } public static Xoa_url Parse_url(Xoae_app app, Xowe_wiki cur_wiki, byte[] raw, int bgn, int end, boolean from_url_bar) {return Parse_url(Xoa_url.blank_(), app, cur_wiki, raw, bgn, end, from_url_bar);} public static Xoa_url Parse_url(Xoa_url rv, Xoae_app app, Xowe_wiki cur_wiki, byte[] raw, int bgn, int end, boolean from_url_bar) { - Xowe_wiki wiki = null; Bry_bfr_mkr bfr_mkr = app.Utl_bry_bfr_mkr(); + Xowe_wiki wiki = null; Bry_bfr_mkr bfr_mkr = app.Utl__bfr_mkr(); byte[] cur_wiki_key = cur_wiki.Domain_bry(); byte[] page_bry = Bry_.Empty; boolean page_is_main_page = false; @@ -210,7 +210,7 @@ public class Xoa_url_parser { page_bry = Xoa_page_.Main_page_bry_empty; } if (rv.Anchor_bry() != null) { - byte[] anchor_bry = Xoa_app_.Utl_encoder_mgr().Id().Encode(rv.Anchor_bry()); // reencode for anchors (which use . encoding, not % encoding); PAGE:en.w:Enlightenment_Spain#Enlightened_despotism_.281759%E2%80%931788.29 + byte[] anchor_bry = Xoa_app_.Utl__encoder_mgr().Id().Encode(rv.Anchor_bry()); // reencode for anchors (which use . encoding, not % encoding); PAGE:en.w:Enlightenment_Spain#Enlightened_despotism_.281759%E2%80%931788.29 rv.Anchor_bry_(anchor_bry); } Xoa_ttl ttl = Xoa_ttl.parse_(wiki, page_bry); diff --git a/400_xowa/src_310_url/gplx/xowa/Xoh_href_parser.java b/400_xowa/src_310_url/gplx/xowa/Xoh_href_parser.java index fdd25593a..44be7ecfa 100644 --- a/400_xowa/src_310_url/gplx/xowa/Xoh_href_parser.java +++ b/400_xowa/src_310_url/gplx/xowa/Xoh_href_parser.java @@ -48,7 +48,7 @@ public class Xoh_href_parser { bgn = file_slash_end = Bry_.While_fwd(raw, Byte_ascii.Slash, tmp_url.Protocol_bry().length, raw_len); rv.Tid_(Xoh_href.Tid_xowa); rv.Wiki_(wiki.Domain_bry()); // wiki is always the current wiki - byte[] page = Xoa_app_.Utl_encoder_mgr().Gfs().Decode(Bry_.Mid(raw, bgn, raw_len)); + byte[] page = Xoa_app_.Utl__encoder_mgr().Gfs().Decode(Bry_.Mid(raw, bgn, raw_len)); rv.Page_(page); // page is everything after "/xcmd/"; individual cmds will do further parsing; note that it should be decoded; EX: %20 -> " "; also note that anchor (#) or query params (?) are not parsed; the entire String will be reparsed later return; } diff --git a/400_xowa/src_310_url/gplx/xowa/Xoh_href_parser_tst.java b/400_xowa/src_310_url/gplx/xowa/Xoh_href_parser_tst.java index c0d369c7f..3cc6c6deb 100644 --- a/400_xowa/src_310_url/gplx/xowa/Xoh_href_parser_tst.java +++ b/400_xowa/src_310_url/gplx/xowa/Xoh_href_parser_tst.java @@ -196,7 +196,7 @@ class Xoh_href_parser_fxt { wiki = Xoa_app_fxt.wiki_tst_(app); wiki.Xwiki_mgr().Add_bulk(Bry_.new_ascii_("wikt|en.wiktionary.org")); app.User().Wiki().Xwiki_mgr().Add_bulk(Bry_.new_ascii_("en.wiktionary.org|en.wiktionary.org")); - href_parser = new Xoh_href_parser(Xoa_app_.Utl_encoder_mgr().Href(), app.Url_parser().Url_parser()); + href_parser = new Xoh_href_parser(Xoa_app_.Utl__encoder_mgr().Href(), app.Url_parser().Url_parser()); } public Xoae_app App() {return app;} private Xoae_app app; public Xoh_href_parser_fxt Init_xwiki_alias(String alias, String domain) { diff --git a/400_xowa/src_400_parser/gplx/xowa/Xoa_ttl.java b/400_xowa/src_400_parser/gplx/xowa/Xoa_ttl.java index a6c98661d..6f27f7e18 100644 --- a/400_xowa/src_400_parser/gplx/xowa/Xoa_ttl.java +++ b/400_xowa/src_400_parser/gplx/xowa/Xoa_ttl.java @@ -96,7 +96,7 @@ public class Xoa_ttl { // PAGE:en.w:http://en.wikipedia.org/wiki/Help:Link; REF. private static final Object thread_lock = new Object(); public static Xoa_ttl new_(Xowe_wiki wiki, Gfo_msg_log msg_log, byte[] src, int bgn, int end) { Xoae_app app = wiki.Appe(); - Bry_bfr_mkr bry_mkr = app.Utl_bry_bfr_mkr(); + Bry_bfr_mkr bry_mkr = app.Utl__bfr_mkr(); return parse(bry_mkr, app.Parser_amp_mgr(), wiki.Lang().Case_mgr(), wiki.Xwiki_mgr(), wiki.Ns_mgr(), msg_log, src, bgn, end); } private Xoa_ttl() {} public static Xoa_ttl parse(Bry_bfr_mkr bry_mkr, Xop_amp_mgr amp_mgr, Xol_case_mgr case_mgr, Xow_xwiki_mgr xwiki_mgr, Xow_ns_mgr ns_mgr, Gfo_msg_log msg_log, byte[] src, int bgn, int end) { diff --git a/400_xowa/src_400_parser/gplx/xowa/Xop_fxt.java b/400_xowa/src_400_parser/gplx/xowa/Xop_fxt.java index 97742319f..1ce196c62 100644 --- a/400_xowa/src_400_parser/gplx/xowa/Xop_fxt.java +++ b/400_xowa/src_400_parser/gplx/xowa/Xop_fxt.java @@ -377,7 +377,7 @@ public class Xop_fxt { } } public void Test_html_modules_js(String expd) { - Bry_bfr bfr = app.Utl_bry_bfr_mkr().Get_k004(); + Bry_bfr bfr = app.Utl__bfr_mkr().Get_k004(); this.Page().Html_data().Module_mgr().Init(app, wiki, this.Page()); this.Page().Html_data().Module_mgr().XferAry(bfr, 0); bfr.Mkr_rls(); diff --git a/400_xowa/src_400_parser/gplx/xowa/Xop_parser.java b/400_xowa/src_400_parser/gplx/xowa/Xop_parser.java index 80ebf43a4..1958f7bde 100644 --- a/400_xowa/src_400_parser/gplx/xowa/Xop_parser.java +++ b/400_xowa/src_400_parser/gplx/xowa/Xop_parser.java @@ -37,7 +37,7 @@ public class Xop_parser { // NOTE: parsers are reused; do not keep any read-writ wtxt_lxr_mgr.Init_by_lang(lang); } public byte[] Parse_text_to_html(Xop_ctx ctx, byte[] src) { - Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_b512(); Parse_text_to_html(bfr, ctx.Cur_page(), false, src); return bfr.Mkr_rls().Xto_bry_and_clear(); } diff --git a/400_xowa/src_400_parser/gplx/xowa/Xop_parser_.java b/400_xowa/src_400_parser/gplx/xowa/Xop_parser_.java index 286dbb6aa..13fc65c31 100644 --- a/400_xowa/src_400_parser/gplx/xowa/Xop_parser_.java +++ b/400_xowa/src_400_parser/gplx/xowa/Xop_parser_.java @@ -21,7 +21,7 @@ public class Xop_parser_ { public static final byte Parse_tid_null = 0, Parse_tid_tmpl = 1, Parse_tid_page_tmpl = 2, Parse_tid_page_wiki = 3; public static final int Doc_bgn_bos = -1, Doc_bgn_char_0 = 0; public static byte[] Parse_text_to_html(Xowe_wiki wiki, Xoae_page page, Xoa_ttl ttl, byte[] src, boolean para_enabled) { // NOTE: must pass in same page instance; do not do Xoa_page_.new_(), else img_idx will get reset to 0; DATE:2015-02-08 - Bry_bfr bfr = wiki.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_b512(); Xop_ctx ctx = Xop_ctx.new_sub_(wiki, page); Xop_tkn_mkr tkn_mkr = ctx.Tkn_mkr(); Xop_root_tkn root = tkn_mkr.Root(src); diff --git a/400_xowa/src_400_parser/gplx/xowa/Xop_redirect_mgr.java b/400_xowa/src_400_parser/gplx/xowa/Xop_redirect_mgr.java index 7b5c4654c..4e51157b4 100644 --- a/400_xowa/src_400_parser/gplx/xowa/Xop_redirect_mgr.java +++ b/400_xowa/src_400_parser/gplx/xowa/Xop_redirect_mgr.java @@ -19,7 +19,7 @@ package gplx.xowa; import gplx.*; import gplx.xowa.html.*; public class Xop_redirect_mgr { private final Xowe_wiki wiki; private final Url_encoder url_decoder; private Hash_adp_bry redirect_hash; - public Xop_redirect_mgr(Xowe_wiki wiki) {this.wiki = wiki; this.url_decoder = Xoa_app_.Utl_encoder_mgr().Url_ttl();} // NOTE: must be Url_ttl, not Url; PAGE:en.w:Template:Positionskarte+ -> Template:Location_map+, not Template:Location_map DATE:2014-08-21 + public Xop_redirect_mgr(Xowe_wiki wiki) {this.wiki = wiki; this.url_decoder = Xoa_app_.Utl__encoder_mgr().Url_ttl();} // NOTE: must be Url_ttl, not Url; PAGE:en.w:Template:Positionskarte+ -> Template:Location_map+, not Template:Location_map DATE:2014-08-21 public void Clear() {redirect_hash = null;} // TEST: public boolean Is_redirect(byte[] text, int text_len) {return this.Extract_redirect(text, text_len) != null;} public Xoa_ttl Extract_redirect_loop(byte[] src) { @@ -66,7 +66,7 @@ public class Xop_redirect_mgr { ListAdp list = page.Redirected_ttls(); int list_len = list.Count(); if (list_len == 0) return Bry_.Empty; - Bry_bfr redirect_bfr = app.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr redirect_bfr = app.Utl__bfr_mkr().Get_b512(); for (int i = 0; i < list_len; i++) { if (i != 0) redirect_bfr.Add(Bry_redirect_dlm); byte[] redirect_ttl = (byte[])list.FetchAt(i); @@ -82,7 +82,7 @@ public class Xop_redirect_mgr { ; } Xol_msg_itm msg_itm = wiki.Lang().Msg_mgr().Itm_by_id_or_null(Xol_msg_itm_.Id_redirectedfrom); - Bry_bfr fmt_bfr = app.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr fmt_bfr = app.Utl__bfr_mkr().Get_b512(); app.Tmp_fmtr().Fmt_(msg_itm.Val()).Bld_bfr_one(fmt_bfr, redirect_bfr); redirect_bfr.Clear().Mkr_rls(); fmt_bfr.Mkr_rls(); return fmt_bfr.Xto_bry_and_clear(); diff --git a/400_xowa/src_440_lnki/gplx/xowa/Xop_lnki_wkr_.java b/400_xowa/src_440_lnki/gplx/xowa/Xop_lnki_wkr_.java index 20aedda0b..ef89a1835 100644 --- a/400_xowa/src_440_lnki/gplx/xowa/Xop_lnki_wkr_.java +++ b/400_xowa/src_440_lnki/gplx/xowa/Xop_lnki_wkr_.java @@ -40,12 +40,12 @@ public class Xop_lnki_wkr_ { public static boolean Parse_ttl(Xop_ctx ctx, byte[] src, Xop_lnki_tkn lnki, int ttl_bgn, int ttl_end) { Xoae_app app = ctx.App(); byte[] ttl_bry = Bry_.Mid(src, ttl_bgn, ttl_end); - ttl_bry = Xoa_app_.Utl_encoder_mgr().Url_ttl().Decode(ttl_bry); + ttl_bry = Xoa_app_.Utl__encoder_mgr().Url_ttl().Decode(ttl_bry); int ttl_bry_len = ttl_bry.length; Xoa_ttl page_ttl = ctx.Cur_page().Ttl(); if (page_ttl.Ns().Subpages_enabled() && Pfunc_rel2abs.Rel2abs_ttl(ttl_bry, 0, ttl_bry_len)) { // Linker.php|normalizeSubpageLink - Bry_bfr tmp_bfr = app.Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = app.Utl__bfr_mkr().Get_b512(); byte[] new_bry = Pfunc_rel2abs.Rel2abs(tmp_bfr, ttl_bry, page_ttl.Raw(), rel2abs_tid.Val_zero_()); lnki.Subpage_tid_(rel2abs_tid.Val()); lnki.Subpage_slash_at_end_(Bry_.Get_at_end(ttl_bry) == Byte_ascii.Slash); diff --git a/400_xowa/src_490_xnde/gplx/xowa/Xop_xnde_wkr.java b/400_xowa/src_490_xnde/gplx/xowa/Xop_xnde_wkr.java index e90292cf1..3fbea369b 100644 --- a/400_xowa/src_490_xnde/gplx/xowa/Xop_xnde_wkr.java +++ b/400_xowa/src_490_xnde/gplx/xowa/Xop_xnde_wkr.java @@ -557,7 +557,7 @@ public class Xop_xnde_wkr implements Xop_ctx_wkr { private int Find_xtn_end_tag(Xop_ctx ctx, byte[] src, int src_len, int open_end, byte[] close_bry, int tag_bgn) { int tag_id = Bry_.Xto_int_or(src, tag_bgn, tag_bgn + 10, -1); if (tag_id == -1) {ctx.App().Usr_dlg().Warn_many("", "", "parser.xtn: could not extract int: page=~{0}", ctx.Cur_page().Url().Xto_full_str_safe()); return Bry_finder.Not_found;} - Bry_bfr tmp = ctx.Wiki().Utl_bry_bfr_mkr().Get_b128(); + Bry_bfr tmp = ctx.Wiki().Utl__bfr_mkr().Get_b128(); tmp.Add(Pfunc_tag.Xtag_end_lhs).Add_int_pad_bgn(Byte_ascii.Num_0, 10, tag_id).Add(Pfunc_tag.Xtag_rhs); byte[] tag_end = tmp.Mkr_rls().Xto_bry_and_clear(); int rv = Bry_finder.Find_fwd(src, tag_end, open_end + Pfunc_tag.Xtag_rhs.length); diff --git a/400_xowa/src_500_tmpl/gplx/xowa/Xot_defn_tmpl.java b/400_xowa/src_500_tmpl/gplx/xowa/Xot_defn_tmpl.java index 4e857f073..e3d14f224 100644 --- a/400_xowa/src_500_tmpl/gplx/xowa/Xot_defn_tmpl.java +++ b/400_xowa/src_500_tmpl/gplx/xowa/Xot_defn_tmpl.java @@ -72,7 +72,7 @@ public class Xot_defn_tmpl implements Xot_defn { Xowe_wiki wiki = ctx.Wiki(); if (!onlyinclude_parsed) { onlyinclude_parsed = true; - byte[] new_data = Extract_onlyinclude(data_raw, wiki.Utl_bry_bfr_mkr()); + byte[] new_data = Extract_onlyinclude(data_raw, wiki.Utl__bfr_mkr()); Xop_ctx new_ctx = Xop_ctx.new_sub_(wiki); Xot_defn_tmpl tmpl = wiki.Parser().Parse_text_to_defn_obj(new_ctx, new_ctx.Tkn_mkr(), wiki.Ns_mgr().Ns_template(), Bry_.Empty, new_data); tmpl.Root().Tmpl_compile(new_ctx, new_data, Xot_compile_data.Null); diff --git a/400_xowa/src_500_tmpl/gplx/xowa/Xot_invk_tkn.java b/400_xowa/src_500_tmpl/gplx/xowa/Xot_invk_tkn.java index f527aed0f..a0cbb34c0 100644 --- a/400_xowa/src_500_tmpl/gplx/xowa/Xot_invk_tkn.java +++ b/400_xowa/src_500_tmpl/gplx/xowa/Xot_invk_tkn.java @@ -216,7 +216,7 @@ public class Xot_invk_tkn extends Xop_tkn_itm_base implements Xot_invk { } if (ignore_hash.Get_by_bry(name_ary) == null) { if (Pfunc_rel2abs.Rel2abs_ttl(name_ary, name_bgn, name_ary_len)) {// rel_path; EX: {{/../Peer page}}; DATE:2013-03-27 - Bry_bfr tmp_bfr = ctx.App().Utl_bry_bfr_mkr().Get_b512(); + Bry_bfr tmp_bfr = ctx.App().Utl__bfr_mkr().Get_b512(); name_ary = Pfunc_rel2abs.Rel2abs(tmp_bfr, Bry_.Mid(name_ary, name_bgn, name_ary_len), ctx.Cur_page().Ttl().Raw()); tmp_bfr.Mkr_rls(); return SubEval(ctx, wiki, bfr, name_ary, caller, src); @@ -247,7 +247,7 @@ public class Xot_invk_tkn extends Xop_tkn_itm_base implements Xot_invk { invk_tmpl.Frame_ttl_(defn_tmpl.Frame_ttl()); // set frame_ttl; needed for redirects; PAGE:en.w:Statutory_city; DATE:2014-08-22 trace.Trace_bgn(ctx, src, name_ary, caller, invk_tmpl, defn); - Bry_bfr rslt_bfr = wiki.Utl_bry_bfr_mkr().Get_k004(); + Bry_bfr rslt_bfr = wiki.Utl__bfr_mkr().Get_k004(); try { Bld_key(invk_tmpl, name_ary, rslt_bfr); byte[] rslt_key = rslt_bfr.Xto_bry_and_clear(); diff --git a/400_xowa/src_500_tmpl/gplx/xowa/Xot_tmpl_wtr.java b/400_xowa/src_500_tmpl/gplx/xowa/Xot_tmpl_wtr.java index 86d5f8879..55f80c5e2 100644 --- a/400_xowa/src_500_tmpl/gplx/xowa/Xot_tmpl_wtr.java +++ b/400_xowa/src_500_tmpl/gplx/xowa/Xot_tmpl_wtr.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa; import gplx.*; public class Xot_tmpl_wtr { public byte[] Write_all(Xop_ctx ctx, Xop_root_tkn root, byte[] src) { - Bry_bfr rslt_bfr = ctx.App().Utl_bry_bfr_mkr().Get_m001(); + Bry_bfr rslt_bfr = ctx.App().Utl__bfr_mkr().Get_m001(); ctx.Tmpl_output_(rslt_bfr); rslt_bfr.Reset_if_gt(Io_mgr.Len_mb); Write_tkn(ctx, src, src.length, rslt_bfr, root); @@ -64,7 +64,7 @@ public class Xot_tmpl_wtr { if (xnde.Tag_close_bgn() == Int_.MinValue) rslt_bfr.Add_mid(src, tkn.Src_bgn(), tkn.Src_end()); // write src from bgn/end else { // NOTE: if nowiki then "deactivate" all xndes by swapping out < for < nowiki_xnde_frag; DATE:2013-01-27 - Bry_bfr tmp_bfr = ctx.Wiki().Appe().Utl_bry_bfr_mkr().Get_k004(); + Bry_bfr tmp_bfr = ctx.Wiki().Appe().Utl__bfr_mkr().Get_k004(); int nowiki_content_bgn = xnde.Tag_open_end(), nowiki_content_end = xnde.Tag_close_bgn(); boolean escaped = gplx.xowa.parsers.tmpls.Nowiki_escape_itm.Escape(tmp_bfr, src, nowiki_content_bgn, nowiki_content_end); rslt_bfr.Add_bfr_or_mid(escaped, tmp_bfr, src, nowiki_content_bgn, nowiki_content_end); diff --git a/tst/400_xowa/root/wiki/en.wikipedia.org/en.wikipedia.org.000.sqlite3 b/tst/400_xowa/root/wiki/en.wikipedia.org/en.wikipedia.org.000.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..1773729cd564a4c91dfecc6ff5a1294275180c74 GIT binary patch literal 57344 zcmeI2&u<&Y700>yMTxeg9HO#-VS98k2}q7eMTbZbP{n2dC;DM4GGynn*k2+iUhdMn zL;W}fmYiRw9NKe%{s;XF+Iz1lkV_6l4@H4q3lvQ*eKWhWJ0sE(WvhwnK0?F{XXnj# z<}+{J%CSdzZKpwY*4|%l5Ls9uL2Oc&=pPy|ujxfv;pWy3*?hRZE(`B(-`iN*eoQ`UJTA@g zRsyT-$%`W0w<4!yMV0!}QdM4%tt2Ln73(I921g(+Yl~Djp|NTC)QYnzHr1>13(|z7 zGGSM5^Q`fes>fHy1;&#w$LQLEm}^h;Vs!0Ng}C-*V1!oKQD<-_83iRXKTm3_P8fMB z_0`@Io*UPo ziC}U z4VyMkJCf$UQb(rHU}93KgN*o`)?nZdzS*&wi2_LtWD7~EE)o3-;o~?@gSPYLg?V3A z$};SuAz0P2ndGvPRrUGmSh0NTmhshl!nYj@7J3*R`80SEYd?zGlxmk?Rvq8mi^8@h z-nXZxf`)1U-4Z>OxCNiIqbo40pus}jak#;`fl1Zq%_lG(ZSAh560qDfk+VWjZ*!v4 zUeIkIE>g6?q zY(KOmG1~TEake|sNNUvH%^l(#4W_q|Xh8VzR!Y^+Cr69r>(`C1+nWDK{}}7*HQZq= zrcvhI8)PyE4g);YbCDKxT`!QMC*-2jnOkN#-DN<7PcMw-P}Ue^AhPZY(jE;Z%m|Z< zYCwZvQmOTi0|~3dTl1~-zoEfdiY_h*@b+%q{Yf ztnlMtW0}OQu!j^+DD#P&#R?Sn84NaXF)n1;bDWXvoC&JnxINDwk|0MWZe zEXcOtWc+DJ1Bu926_M)k)Ua6GC!dMM z&Ada#za!e><|UW3xMd&IRO!zg34Pb(dTNC>td4G*FPXgboDDWHA-PQ=!dJu!5pygj zRLrp-TJ8=XWp#h3Sbpca@ob(3u6HQzNSwW zx#Lr7=iPd16Rn-E#bcm1RxO(|R43-#lmsGp>ER?ZN9x{+@?FmgR3oOT26R{{J68cOOw72_OL^fCP{L z5-yG5_)K66yx?!XhCXyDwQfnc(|Np)){m<#Y zPk;ZD4-f^B01`j~NB{{S0VIF~kN^@u0!RP}Ac0pTP#P{4CdLiJAUAH7hKhx8p8v($ zGbJM}zgoJ2|NsArkkK3oAOR$R1dsp{Kmter2_OL^fCP}h{{R7g|8GqHy8wUqK>|ns z2_OL^fCP{L5DEvdfIKKaX(c4r2lNSbEoQAOuJQzMfI>I&mFkd{6SY*U z_fAyxY{|d%`zt+C1$@n)^x}nL>k!Nu>@l;&WPqfj{_W z$7&`DBsGvNB&oVY^ecpq<2()8&YKtJeOW2Xu#bjdRm*0Q%Su+&=c{AI@~vCOSMQ0* zbSzltVRYov;7P3gC~8xxU4mJ4d~+`f+nRXao}LOCssVIM^i<*&eA14tz^sA>3w6ig z2ImGQRiihbz<9K^yOv78a??c43PHWiiB5Y#w_V|WF&B4jKsC2VeXp8w&!yrpVo$uI zyb-zX>WevpEOh17vK;gsOl%rh(NRShC8M$Z(3Zq#+k?f~?noo4QF}Lch;uZU-bSJU z;lo=gRiAAb#q#y*#&J83jm}1RG_R4R++p^bW;4oqC3=^2ZK0lZPIiq?4wz`T zz-R!IeM^sS9FBw`(@dqhKU6HgbKQ70PXpIGlpQvCU%9v}7*5CaaP!`ShYfOX^KRo& zvWN0s%G$Ddk#22f6-Xr=em1D;@zij!JTqgQd?q+D?~w8Dh{lhX06Xqknu|jFgDeC! zglb(&e`re~^j(wdsTJFvOS^3yphTzElX++`F(J84BEkdp3fXRauuQhSeHzm+xZP=W zX8q7|clao)Uw$$ofP7OHK=_#XcT@wyOD+ir^h-t`xu+7f$%9~* zGXR83{s04j>G-hy~de9C1GlX&@2#ULcwB^kpYoIi@I+O}s#*byB38mK9M0~8M~juv?eGXI7spn>aMEHgU zA?7fx(O2Y*Lx*fwO%;*q=aZvi*Z4ZwHRNeRreoS7m!*8yu-NIqH_)u8kq`O-!+F8s zk*{+u(xR@bPX0w#hdS^yuZ%y@IK_CNf%IutE$Y$WlbPQdy}S!6@hZ_s7ddB@oN;oM zzRohhx$i6u&MH^9>~U22{r_0;4~6mHl>U76cay)L`WO7b4-!BENB{{S0VMDm6L|LV z74bmw_^G&6Jm60@%?@?rJU6ACDD!eSQyz58IC4zi3YytbO5UgRyW@frVrs&e@?_zx zQ%_>TqNb^tNR|GNS@Fr7cubi;F5?fvwbTDa59M%j{Xcp#hmYygR{?LrV|siA1+iH^ zYJ@j(`ODMnjU2w%j7{f)FE+0!RP}AOR$R1dsp{Kmter2_OL^a7hII14w_t AIsgCw literal 0 HcmV?d00001 diff --git a/tst/400_xowa/root/wiki/en.wikipedia.org/en.wikipedia.org.001.sqlite3 b/tst/400_xowa/root/wiki/en.wikipedia.org/en.wikipedia.org.001.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..6284dc4fef8f99c0c02707ae5fda033ee86a77e0 GIT binary patch literal 57344 zcmeI2O>Y}F8pkESM79zqd)Pn=1n$zONPwNja($=;1M4;_;MOmRYr{z|gL$DP)}t9^ zhVsj)h@HNjdf5E}`wjLJ><8Fu7wCNtd)W`L*!HpyIl~#!Qfw*p0x;h+5R z;X}@hKYg~rI3)*R)Ui2PD*UEUEEfJiNTE=ef$v@Ts?Tl6OsF4_7Pb7FvNMH+e>|KN zmGAu|>df5xY5H%am5Cq67slQx{80G*O@=?OeB$iMbgA;-LGiW4ZO5l4;jwK6ahjAr z+-a`uHp%YV2OCYI3accDE#?vP!vaoQG%^aews*Srnwh^5rIi{@o|mxf|#`e>Os-w{z?ok2V(+_Rv3Dg9dYLRRQiU) zS{EJ3a9^dPQfM$Ssn$V8elBWo@CV=O+O0%^qz0;mB-NLQd4-5^T&2M}dGpeIAS-Pd z4$zRS7PFZYvWivh_3Eus<>ABPH}6Z|c5PVbVRY)V;4n6Rl#D4gF2St2zI70V9YcIz zPcH-w-2l2Jd#Z3tK50iAFsq=!L(_4D!IgnY*XYkDFrIJkucZ>O+zgS+LQsEmvePu^ zb*jQI=Hs3NsOArtPiranTq+JDen?OAM%22iFXarf(3Mxqa?p1$aadqSr&Vc`jK=Xp zM-gKk3X8MTRYpo<@x9z3uF&9S8;J&l585c#zMPpXRc2?4-*ycDQT}mjpw|e8vAIE6 zbZ?l+96Ah$P%lK<%=2iVMo-A7)0talIn!l8LrgD>=0w#PW+1BW8`3@vEzC%hQ8l1J zFsUvMjspp+#9Q;N^naltSmg@CO}ftL@^RF@{%oRDxqrX-T}Aq%peDYPh98O&@IjGW zbi!eVe1#8c@l`mXR1s&PxNE!VPCksv6@%7Pln7_s*NzHmr4Kr8>5Z#Akkz6|az;zs zP{b1@0_UxWdMu)@JZ6o$oS?zfq`IU6P$H7<-4YiMdv2R%r%*ML5n@&v6myGwBn@#K zY_5>F9rk>WaO$=L=Gwl0N*qdJ`v`85I8U4&Cqc-`F+}e+u_4=r zlkw*v3lt(>k2i1c;o9j&n`}Z)T-xQy*=48s(F)mzGu=~g;J?zmjs=U>Rh&FKjj z-w9)Ji;`Qe zwzn%rSvwjlRoGPt*ip6idxVlY!Z-xc5AOTi*naLOLl#wqtY>BLR6{P^^=ASrEGCOu4hLQ#S5G_ zl^oUN$Tsh3a<+L(QUz|Y?@WrD{NlZT7T^y*NB{{S0VIF~kN^@u0!RP}AOR$R1dzb5 zn!xXh6AylW-*X;yD7>x|?|H;yS^2yO##OxcuLAtx2MHhnB!C2v01`j~NB{{S0VIF~ zkN^_+^%M9lJOh}%_zXb2|A&A2#}5)f0!RP}AOR$R1dsp{Kmter2_OL^aDxfp{r?S~ zTpSt_Kmter2_OL^fCP{L5w$->ms6u$qzX%ma%K>|ns2_OL^fCP{L5rCeEHrmnsh)6kl8X zI@%l9hNfXVK0OJKZ7Yb=r2OGdb8WXtcGo`GXcAReB|&U4kC-18aN44gQMk3eOSbkl zHdNu$o%PMNofqVj=8N*YXeF>aR9%$mksY~hJF3=~muu>RY9%po?btNoEI0*mRa>T} z35zY;XLg)bahO?MTu>$?l?i)ho0pBRTsylnC8z2<&AkYW2u!Mrk87kC#H#uSiWuuqSe%`%GEy3g@8u40g$6gsjYi*Tm$2iGd4@hA=s@&FCiJ zC>ScuRBA_KrOLar#a9a~@aT!^uqFB`#8ts~I`;&OIwnAcPOqo(&|qRha+^d%1nLIaX@0aqcIXj{Sr|O(w!3qFXnVV2l(nxv zn~*@ht4JVX%;Gy~01+kE1O)n}qL12Bv_L5i4idXK)WlueO}FG>uqzrORVrFE)>M=T zXWZBJeC6bW&P{sbDi0!HqQXLQ*h;XAX;30?aEf3)BkIaIev2@dnpBrmBuPZlO<3aM zVb5*T>^P}LGD7f4hml+4BWZ|pU2}!R?Xc&2gj2U2FxU3|Q{qq(+eaYG0urSTHU}9i zi)Hh~>2VT-oE$?KZW9}_Z8+k79QJ#h!~JE`*LPd?i$}FyM{VVsPvYx$W^J>HEez{@C`L9dgOzCz;NDhcogegh_spK>61U| z>d*(C=C$!B8W$K3HIM=A>P3ATVlwkvqqlcqEnX!W=^_`bk~2=OGSFFuIQLzqAz0-K z*FBD!xc|RZ`fFk8PvyVg`SZ+Q?*1Eo;0FmH0VIF~kN^_+1rvDn>23Ky^6aI&RXi3? zHmxr6;yicPI8o;1aHc%&T5;rBz8$o(qm;T&8Fa@5C&bi*bM48(Wv8CRghwsQFi|Rl zAG6|D||Ns9Ne7wW1Apsq?zHt<5dl+ z2K(7*-aG#IVP9vP8@GTt7O=QEG;XGpy$e?!CIXG31bB^L3W=bHA*BAx uf%jvU%9T5cl&T5h7r^wn*<#AJWA?=d+d50nTqlqzJA(v)O=zkR3l8*gGWXNr%%s;#Q+ zw76y+VZ?y$lJ6TFf-2>)3^Gk&tc18GB1KR5;)6c92e!#Et0u=R>8Shp<(n|#jb|b^ l95c(AW2yRo3Xx!NkE=P?PPqYXvUlv3##2t`6%jLc{{e_NAm#u7