From 80b9928b5cb02882ab77793bd8f893724d93e252 Mon Sep 17 00:00:00 2001 From: gnosygnu Date: Sun, 8 Mar 2015 21:27:59 -0400 Subject: [PATCH] v2.3.2.1 --- .../src_200_io/gplx/ios/IoEngine_system.java | 32 +- 140_dbs/src/gplx/dbs/Db_batch_wkr.java | 22 + .../src/gplx/dbs/Db_batch_wkr__attach.java | 43 + 140_dbs/src/gplx/dbs/Db_batch_wkr__msg.java | 26 + 140_dbs/src/gplx/dbs/Db_batch_wkr__sql.java | 31 + 140_dbs/src/gplx/dbs/Db_conn.java | 29 +- 140_dbs/src/gplx/dbs/Db_qry_.java | 8 +- 140_dbs/src/gplx/dbs/Db_stmt_.java | 4 +- 140_dbs/src/gplx/dbs/engines/Db_engine.java | 2 + .../gplx/dbs/engines/Db_engine_sql_base.java | 4 +- .../gplx/dbs/engines/mems/Db_engine__mem.java | 2 + .../src/gplx/dbs/engines/mems/Mem_tbl.java | 2 +- .../gplx/dbs/engines/nulls/Null_engine.java | 2 + .../dbs/engines/sqlite/Sqlite_engine.java | 2 + .../src/gplx/dbs/engines/tdbs/TdbEngine.java | 3 +- .../src/gplx/dbs/engines/tdbs/TdbSelect.java | 6 +- ...ry_select.java => Db_qry__select_cmd.java} | 45 +- .../gplx/dbs/qrys/Db_qry__select_in_tbl.java | 22 +- 140_dbs/src/gplx/dbs/qrys/Db_qry_insert.java | 4 +- .../src/gplx/dbs/qrys/Db_qry_select_tst.java | 6 +- 140_dbs/src/gplx/dbs/qrys/Db_stmt_cmd.java | 2 +- 140_dbs/src/gplx/dbs/qrys/Db_stmt_sql.java | 38 +- .../src/gplx/dbs/sqls/Sql_qry_wtr_ansi.java | 7 +- 140_dbs/src/gplx/dbs/utls/PoolIds.java | 2 +- .../tst/gplx/dbs/engines/db_CrudOps_tst.java | 4 +- .../gplx/dbs/groupBys/GroupBys_base_tst.java | 2 +- .../dbs/insertIntos/InsertIntos_base_tst.java | 8 +- .../tst/gplx/dbs/joins/Joins_base_tst.java | 2 +- .../gplx/dbs/orderBys/OrderBys_base_tst.java | 8 +- 400_xowa/src/gplx/core/brys/Bit_.java | 4 +- .../gplx/dbs/schemas/Schema_loader_mgr_.java | 2 +- 400_xowa/src/gplx/fsdb/data/Fsd_dir_itm.java | 6 +- 400_xowa/src/gplx/fsdb/data/Fsd_fil_itm.java | 13 +- 400_xowa/src/gplx/fsdb/data/Fsd_fil_tbl.java | 2 +- 400_xowa/src/gplx/fsdb/data/Fsd_thm_itm.java | 67 +- 400_xowa/src/gplx/fsdb/data/Fsd_thm_tbl.java | 65 +- .../src/gplx/fsdb/data/Fsd_thm_tbl_tst.java | 58 ++ 400_xowa/src/gplx/fsdb/meta/Fsm_abc_mgr.java | 2 - 400_xowa/src/gplx/fsdb/meta/Fsm_atr_fil.java | 4 +- 400_xowa/src/gplx/fsdb/meta/Fsm_bin_tbl.java | 2 +- 400_xowa/src/gplx/fsdb/meta/Fsm_mnt_mgr.java | 9 +- 400_xowa/src/gplx/xowa/Xoa_app_.java | 3 +- .../xowa/apis/xowa/html/Xoapi_toggle_itm.java | 8 +- 400_xowa/src/gplx/xowa/bldrs/Db_mgr_fxt.java | 8 +- .../src/gplx/xowa/bldrs/Xob_base_fxt.java | 2 +- 400_xowa/src/gplx/xowa/bldrs/Xob_cmd_mgr.java | 2 + 400_xowa/src/gplx/xowa/bldrs/Xob_fxt.java | 2 +- .../gplx/xowa/bldrs/files/Xob_fsdb_make.java | 19 +- .../xowa/bldrs/files/Xob_lnki_temp_tbl.java | 2 +- .../xowa/bldrs/files/Xob_lnki_temp_wkr.java | 31 +- .../xowa/bldrs/files/Xob_orig_qry_cmd.java | 7 +- .../bldrs/files/Xob_xfer_temp_cmd_orig.java | 4 +- .../xowa/bldrs/files/Xob_xfer_temp_itm.java | 14 +- .../bldrs/files/Xob_xfer_temp_itm_tst.java | 6 +- .../xowa/bldrs/files/Xob_xfer_temp_tbl.java | 2 +- .../gplx/xowa/bldrs/imports/Xob_page_sql.java | 16 +- .../gplx/xowa/bldrs/imports/Xob_page_txt.java | 6 +- .../xowa/bldrs/imports/Xob_search_base.java | 4 +- .../bldrs/imports/Xobc_core_calc_stats.java | 4 +- .../xowa/bldrs/imports/Xobc_core_make_id.java | 2 +- .../src/gplx/xowa/bldrs/imports/Xobc_tst.java | 2 +- .../ctgs/Xob_category_registry_sql.java | 2 +- .../bldrs/imports/ctgs/Xob_ctg_v1_base.java | 2 +- .../imports/ctgs/Xob_ctg_v1_base_tst.java | 2 +- .../xowa/bldrs/oimgs/Xob_dump_mgr_base.java | 10 +- .../bldrs/oimgs/Xob_parse_all_src_sql.java | 8 +- .../wikis/redirects/Xob_redirect_cmd.java | 2 +- .../wikis/redirects/Xob_redirect_tbl.java | 6 +- .../xowa/bldrs/xmls/Xob_xml_page_bldr.java | 4 +- .../gplx/xowa/bldrs/xmls/Xob_xml_parser.java | 2 +- .../xowa/bldrs/xmls/Xob_xml_parser_tst.java | 24 +- .../src/gplx/xowa/ctgs/Xoctg_html_mgr.java | 2 +- .../gplx/xowa/ctgs/Xoctg_pagelist_itms.java | 2 +- .../xowa/ctgs/Xoctg_pagelist_wtr_tst.java | 2 +- .../src/gplx/xowa/dbs/Xodb_load_mgr_sql.java | 8 +- .../gplx/xowa/dbs/Xodb_load_mgr_sql_tst.java | 12 +- .../src/gplx/xowa/dbs/Xodb_load_mgr_txt.java | 26 +- 400_xowa/src/gplx/xowa/dbs/Xodb_mgr_sql.java | 8 +- .../src/gplx/xowa/dbs/Xodb_save_mgr_sql.java | 2 +- .../src/gplx/xowa/dbs/Xodb_save_mgr_txt.java | 18 +- .../xowa/dbs/tbls/Xodb_categorylinks_tbl.java | 2 +- .../gplx/xowa/dbs/tbls/Xodb_in_wkr_page.java | 10 +- .../src/gplx/xowa/dbs/tbls/Xodb_page_tbl.java | 66 +- .../dbs/tbls/Xodb_search_title_word_tbl.java | 2 +- .../src/gplx/xowa/dbs/tbls/Xodb_text_tbl.java | 4 +- .../gplx/xowa/dbs/tbls/Xodb_xowa_cfg_tbl.java | 2 +- 400_xowa/src/gplx/xowa/files/Xof_ext_.java | 2 +- .../src/gplx/xowa/files/Xof_file_itm.java | 11 +- .../src/gplx/xowa/files/Xof_file_wkr.java | 136 +++ .../src/gplx/xowa/files/Xof_fsdb_mode.java | 5 +- .../gplx/xowa/files/Xof_lnki_file_mgr.java | 102 +- .../{Xof_doc_page.java => Xof_lnki_page.java} | 2 +- ...{Xof_doc_thumb.java => Xof_lnki_time.java} | 6 +- .../src/gplx/xowa/files/Xof_url_bldr.java | 26 +- .../src/gplx/xowa/files/Xof_url_bldr_tst.java | 8 +- .../src/gplx/xowa/files/Xof_xfer_itm.java | 151 +-- .../src/gplx/xowa/files/bins/Xof_bin_mgr.java | 25 +- .../files/bins/Xof_bin_wkr__fsdb_sql.java | 12 +- .../files/bins/Xof_bin_wkr__http_wmf.java | 11 +- .../xowa/files/caches/Xofc_cache_itm.java | 65 ++ .../xowa/files/caches/Xofc_cache_tbl.java | 154 +++ .../gplx/xowa/files/caches/Xofc_fil_itm.java | 4 +- .../gplx/xowa/files/caches/Xofc_fil_mgr.java | 6 +- .../gplx/xowa/files/caches/Xofc_fil_tbl.java | 10 +- .../gplx/xowa/files/fsdb/Xof_fsdb_itm.java | 155 +-- .../gplx/xowa/files/fsdb/Xof_fsdb_mgr_.java | 141 --- .../xowa/files/fsdb/Xof_fsdb_mgr__sql.java | 17 +- .../files/fsdb/fs_roots/Fs_root_wkr_fsdb.java | 2 +- .../fsdb/tsts/Xof_file_ext__bmp_tst.java | 4 +- .../fsdb/tsts/Xof_file_ext__flac_tst.java | 4 +- .../fsdb/tsts/Xof_file_ext__oga_tst.java | 6 +- .../fsdb/tsts/Xof_file_ext__ogg_tst.java | 2 +- .../fsdb/tsts/Xof_file_ext__ogv_tst.java | 6 +- .../fsdb/tsts/Xof_file_ext__png_tst.java | 8 +- .../fsdb/tsts/Xof_file_ext__svg_tst.java | 6 +- .../fsdb/tsts/Xof_file_ext__unknown_tst.java | 6 +- .../fsdb/tsts/Xof_file_ext__wav_tst.java | 6 +- .../fsdb/tsts/Xof_file_ext__xcf_tst.java | 4 +- .../xowa/files/fsdb/tsts/Xof_file_fxt.java | 62 +- .../fsdb/tsts/Xof_file_redirect_tst.java | 8 +- .../src/gplx/xowa/files/gui/Js_img_mgr.java | 2 +- .../gplx/xowa/files/origs/Xof_orig_itm.java | 13 +- .../gplx/xowa/files/origs/Xof_orig_mgr.java | 35 +- .../xowa/files/origs/Xof_orig_rdr_func.java | 53 -- .../gplx/xowa/files/origs/Xof_orig_tbl.java | 33 +- .../xowa/files/origs/Xof_orig_tbl_tst.java | 4 +- .../gplx/xowa/files/origs/Xof_orig_wkr.java | 2 +- .../gplx/xowa/files/origs/Xof_orig_wkr_.java | 18 +- .../files/origs/Xof_orig_wkr__orig_db.java | 10 +- .../files/origs/Xof_orig_wkr__wmf_api.java | 15 +- .../xowa/files/origs/Xof_wiki_finder.java | 2 +- .../src/gplx/xowa/gui/urls/Xog_url_wkr.java | 2 +- .../urls/url_macros/Xog_url_macro_mgr.java | 1 + .../src/gplx/xowa/gui/views/Xog_html_itm.java | 2 +- .../gplx/xowa/gui/views/Xog_html_js_cbk.java | 4 +- .../src/gplx/xowa/gui/views/Xog_tab_itm.java | 14 +- .../src/gplx/xowa/html/Xoh_page_wtr_wkr.java | 6 +- .../gplx/xowa/html/hdumps/Xohd_hdump_rdr.java | 7 +- .../xowa/html/hdumps/Xohd_hdump_wtr_tst.java | 3 +- .../html/hdumps/Xowd_db_init_wkr__html.java | 5 +- .../xowa/html/hdumps/abrvs/Xohd_abrv_mgr.java | 2 +- .../html/hdumps/abrvs/Xohd_abrv_mgr_tst.java | 14 +- .../xowa/html/hdumps/bldrs/Rl_dump_tbl.java | 55 ++ .../html/hdumps/bldrs/Xob_hdump_img_cmd.java | 32 +- .../html/hdumps/bldrs/Xob_link_dump_cmd.java | 56 ++ .../html/hdumps/bldrs/Xob_lnki_regy_mgr.java | 219 ----- .../html/hdumps/bldrs/Xob_rl_regy_cmd.java | 62 ++ .../html/hdumps/core/Xohd_data_itm__base.java | 78 +- .../core/Xohd_data_itm__gallery_itm.java | 15 +- .../hdumps/data/Xohd_page_html_mgr__load.java | 38 +- .../hdumps/data/Xohd_page_html_mgr__save.java | 6 +- .../html/hdumps/data/Xohd_page_html_tbl.java | 8 + .../html/hdumps/pages/Xopg_hdump_data.java | 8 +- .../xowa/html/hzips/Xow_hzip_itm__anchor.java | 5 +- .../html/hzips/Xow_hzip_itm__anchor_tst.java | 5 + .../gplx/xowa/html/lnkis/Xoh_file_mgr.java | 7 +- .../xowa/html/lnkis/Xoh_file_wtr__basic.java | 6 +- .../gplx/xowa/html/portal/Xow_portal_mgr.java | 19 +- .../xowa/html/portal/Xow_portal_mgr_tst.java | 4 +- .../src/gplx/xowa/langs/vnts/Xol_vnt_mgr.java | 12 +- .../gplx/xowa/langs/vnts/Xolg_vnt_grp.java | 25 + ...lg_vnt_mgr.java => Xolg_vnt_grp_fmtr.java} | 28 +- .../langs/vnts/Xolg_vnt_grp_fmtr_tst.java | 26 +- .../gplx/xowa/langs/vnts/Xolg_vnt_itm.java | 23 + .../lnkis/redlinks/Xog_redlink_mgr.java | 2 +- .../maints/Wmf_dump_list_parser_tst.java | 4 +- .../specials/allPages/Xows_page_allpages.java | 4 +- .../allPages/Xows_page_allpages_tst.java | 2 +- .../xowa/specials/movePage/Move_page.java | 2 +- .../search/Xog_search_suggest_cmd.java | 4 +- .../search/Xog_search_suggest_mgr.java | 2 +- .../xowa/specials/search/Xosrh_core_tst.java | 6 +- .../xowa/specials/search/Xosrh_html_mgr.java | 4 +- .../specials/search/Xosrh_page_mgr_tst.java | 4 +- .../specials/search/Xosrh_parser_tst.java | 2 +- .../xowa/specials/search/Xosrh_qry_itm.java | 2 +- .../search/Xosrh_rslt_itm_sorter.java | 4 +- .../gplx/xowa/users/data/Xoud_bmk_tbl.java | 2 +- .../gplx/xowa/users/data/Xoud_regy_tbl.java | 4 +- 400_xowa/src/gplx/xowa/wikis/Xow_domain.java | 1 + 400_xowa/src/gplx/xowa/wikis/Xow_domain_.java | 26 +- .../src/gplx/xowa/wikis/Xow_domain_tid_.java | 105 ++ .../gplx/xowa/wikis/Xow_domain_tid__tst.java | 37 + .../src/gplx/xowa/wikis/Xow_domain_tst.java | 1 + .../src/gplx/xowa/wikis/Xow_wiki_alias.java | 7 +- .../gplx/xowa/wikis/Xow_wiki_alias_tst.java | 1 + .../xowa/wikis/data/Xow_core_data_mgr.java | 1 + .../xowa/wikis/data/Xowd_pg_regy_tbl.java | 20 +- .../xowa/wikis/data/Xowe_core_data_mgr.java | 1 + .../xowa/wikis/data/Xowv_core_data_mgr.java | 1 + .../gplx/xowa/wikis/xwikis/Xow_lang_mgr.java | 11 +- .../xowa/wikis/xwikis/Xow_lang_mgr_tst.java | 8 +- .../xowa/xtns/dynamicPageList/Dpl_page.java | 2 +- .../xowa/xtns/dynamicPageList/Dpl_xnde.java | 2 +- .../xowa/xtns/gallery/Gallery_html_wtr.java | 6 +- .../xowa/xtns/gallery/Gallery_itm_parser.java | 2 +- .../xowa/xtns/gallery/Gallery_mgr_base.java | 10 +- .../xtns/gallery/Gallery_mgr_packed_base.java | 4 +- .../xtns/pfuncs/ifs/Pfunc_ifexist_mgr.java | 2 +- .../xowa/xtns/pfuncs/ttls/Pfunc_filepath.java | 2 +- .../xowa/xtns/proofreadPage/Pp_pages_nde.java | 2 +- .../src/gplx/xowa/xtns/scores/Score_xnde.java | 4 +- .../xtns/scribunto/libs/Scrib_lib_title.java | 5 +- .../scribunto/libs/Scrib_lib_title_tst.java | 2 +- .../xtns/translates/Xop_languages_xnde.java | 2 +- .../xtns/wdatas/Wdata_xwiki_link_wtr_tst.java | 4 +- .../xtns/wdatas/imports/Xob_wdata_db_cmd.java | 2 +- .../wdatas/imports/Xob_wdata_pid_base.java | 4 +- .../wdatas/imports/Xob_wdata_qid_base.java | 4 +- .../gplx/xowa2/apps/urls/Xoav_url_parser.java | 2 +- .../xowa2/apps/urls/Xoav_url_parser_tst.java | 4 +- .../gplx/xowa2/files/Xofv_file_mgr_tst.java | 29 +- .../files/commons/Xof_commons_image_tbl.java | 3 +- 400_xowa/src/gplx/xowa2/gui/Xogv_img_wkr.java | 82 -- .../src/gplx/xowa2/gui/Xogv_tab_base.java | 9 +- .../src/gplx/xowa2/wikis/Xowv_repo_mgr.java | 8 +- 400_xowa/src/gplx/xowa2/wikis/Xowv_wiki.java | 11 +- 400_xowa/src_120_wiki/gplx/xowa/Xow_wiki.java | 3 +- .../src_120_wiki/gplx/xowa/Xowe_wiki.java | 8 +- .../gplx/xowa/Xob_hive_mgr.java | 6 +- .../gplx/xowa/Xodb_page.java | 98 +- .../gplx/xowa/Xodb_page_.java | 43 +- .../gplx/xowa/Xodb_page_sorter.java | 6 +- .../gplx/xowa/Xodb_page_tst.java | 2 +- .../gplx/xowa/Xow_data_mgr.java | 4 +- .../gplx/xowa/Xow_hive_mgr_fxt.java | 2 +- .../src_160_file/gplx/xowa/Xofo_lnki.java | 6 +- .../gplx/xowa/Xofo_lnki_parser.java | 2 +- .../gplx/xowa/Xofo_lnki_parser_tst.java | 2 +- .../gplx/xowa/Xofw_wiki_wkr_base.java | 6 +- .../src_161_meta/gplx/xowa/Xof_meta_itm.java | 8 +- .../src_162_xfer/gplx/xowa/Xof_xfer_mgr.java | 10 +- .../gplx/xowa/Xof_xfer_queue.java | 58 +- .../xowa/Xof_xfer_queue_html_cases_tst.java | 2 +- .../gplx/xowa/Xof_xfer_queue_html_fxt.java | 14 +- .../xowa/Xof_xfer_queue_html_offline_tst.java | 2 +- .../xowa/Xof_xfer_queue_html_wmf_api_tst.java | 12 +- .../src_200_bldr/gplx/xowa/Xobd_parser.java | 2 +- 400_xowa/src_200_bldr/gplx/xowa/Xobd_rdr.java | 4 +- .../gplx/xowa/Xodb_page_raw_parser.java | 2 +- .../gplx/xowa/Xobc_parse_dump_templates.java | 2 +- .../gplx/xowa/Xoa_css_img_downloader.java | 1 + .../gplx/xowa/Xoa_css_img_downloader_tst.java | 14 + .../gplx/xowa/Xoi_cmd_wiki_tst.java | 900 +++++++++--------- .../gplx/xowa/Xow_page_fetcher.java | 4 +- 400_xowa/src_300_html/gplx/xowa/Xoa_page.java | 1 + .../src_300_html/gplx/xowa/Xoae_page.java | 8 +- .../src_300_html/gplx/xowa/Xoh_file_main.java | 4 +- .../gplx/xowa/Xoh_file_main_wkr.java | 10 +- 400_xowa/src_310_url/gplx/xowa/Xoa_url.java | 3 +- .../src_310_url/gplx/xowa/Xoa_url_parser.java | 7 +- .../gplx/xowa/Xop_lnki_tkn_chkr.java | 12 +- .../src_400_parser/gplx/xowa/Xop_parser_.java | 1 + .../gplx/xowa/Xop_lnki_arg_parser.java | 4 +- .../src_440_lnki/gplx/xowa/Xop_lnki_tkn.java | 18 +- .../src_440_lnki/gplx/xowa/Xop_lnki_wkr_.java | 2 +- .../src_500_tmpl/gplx/xowa/Xot_invk_tkn.java | 2 +- .../en.wikipedia.org.000.sqlite3 | Bin 57344 -> 65536 bytes .../en.wikipedia.org.001.sqlite3 | Bin 57344 -> 65536 bytes 259 files changed, 2841 insertions(+), 2060 deletions(-) create mode 100644 140_dbs/src/gplx/dbs/Db_batch_wkr.java create mode 100644 140_dbs/src/gplx/dbs/Db_batch_wkr__attach.java create mode 100644 140_dbs/src/gplx/dbs/Db_batch_wkr__msg.java create mode 100644 140_dbs/src/gplx/dbs/Db_batch_wkr__sql.java rename 140_dbs/src/gplx/dbs/qrys/{Db_qry_select.java => Db_qry__select_cmd.java} (67%) create mode 100644 400_xowa/src/gplx/fsdb/data/Fsd_thm_tbl_tst.java create mode 100644 400_xowa/src/gplx/xowa/files/Xof_file_wkr.java rename 400_xowa/src/gplx/xowa/files/{Xof_doc_page.java => Xof_lnki_page.java} (96%) rename 400_xowa/src/gplx/xowa/files/{Xof_doc_thumb.java => Xof_lnki_time.java} (92%) create mode 100644 400_xowa/src/gplx/xowa/files/caches/Xofc_cache_itm.java create mode 100644 400_xowa/src/gplx/xowa/files/caches/Xofc_cache_tbl.java delete mode 100644 400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr_.java delete mode 100644 400_xowa/src/gplx/xowa/files/origs/Xof_orig_rdr_func.java create mode 100644 400_xowa/src/gplx/xowa/html/hdumps/bldrs/Rl_dump_tbl.java create mode 100644 400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_link_dump_cmd.java delete mode 100644 400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_lnki_regy_mgr.java create mode 100644 400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_rl_regy_cmd.java create mode 100644 400_xowa/src/gplx/xowa/langs/vnts/Xolg_vnt_grp.java rename 400_xowa/src/gplx/xowa/langs/vnts/{Xolg_vnt_mgr.java => Xolg_vnt_grp_fmtr.java} (68%) create mode 100644 400_xowa/src/gplx/xowa/langs/vnts/Xolg_vnt_itm.java create mode 100644 400_xowa/src/gplx/xowa/wikis/Xow_domain_tid_.java create mode 100644 400_xowa/src/gplx/xowa/wikis/Xow_domain_tid__tst.java delete mode 100644 400_xowa/src/gplx/xowa2/gui/Xogv_img_wkr.java 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 0ce261750..7c3a65148 100644 --- a/100_core/src_200_io/gplx/ios/IoEngine_system.java +++ b/100_core/src_200_io/gplx/ios/IoEngine_system.java @@ -85,24 +85,27 @@ public class IoEngine_system extends IoEngine_base { } @SuppressWarnings("resource") @Override public String LoadFilStr(IoEngine_xrg_loadFilStr args) { - Io_url url = args.Url(); + Io_url url = args.Url(); String url_str = url.Xto_api(); 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());} + InputStream stream = null; + try {stream = new FileInputStream(url_str);} catch (FileNotFoundException e) { if (args.MissingIgnored()) return ""; throw Err_Fil_NotFound(e, url); } + return Load_from_stream_as_str(stream, url_str); + } + public static String Load_from_stream_as_str(InputStream stream, String url_str) { InputStreamReader reader = null; try {reader = new InputStreamReader(stream, IoEngineArgs._.LoadFilStr_Encoding);} catch (UnsupportedEncodingException e) { - Closeable_Close(stream, url, false); - throw Err_Text_UnsupportedEncoding(IoEngineArgs._.LoadFilStr_Encoding, "", url, e); + Closeable_Close(stream, url_str, false); + throw Err_text_unsupported_encoding(IoEngineArgs._.LoadFilStr_Encoding, "", url_str, e); } // make other objects @@ -114,17 +117,17 @@ public class IoEngine_system extends IoEngine_base { while (true) { try {pos = reader.read(readerBuffer);} catch (IOException e) { - Closeable_Close(stream, url, false); - Closeable_Close(reader, url, false); - throw Err_.err_key_(e, IoEngineArgs._.Err_IoException, "read data from file failed").Add("url", url.Xto_api()).Add("pos", pos); + Closeable_Close(stream, url_str, false); + Closeable_Close(reader, url_str, false); + throw Err_.err_key_(e, IoEngineArgs._.Err_IoException, "read data from file failed").Add("url", url_str).Add("pos", pos); } if (pos == -1) break; sw.write(readerBuffer, 0, pos); } // cleanup - Closeable_Close(stream, url, false); - Closeable_Close(reader, url, false); + Closeable_Close(stream, url_str, false); + Closeable_Close(reader, url_str, false); return sw.toString(); } @Override public boolean ExistsDir(Io_url url) {return new File(url.Xto_api()).exists();} @@ -353,12 +356,13 @@ public class IoEngine_system extends IoEngine_base { XferDir(IoEngine_xrg_xferDir.copy_(src, trg)); } } - protected static void Closeable_Close(Closeable closeable, Io_url url, boolean throwErr) { + protected static void Closeable_Close(Closeable closeable, Io_url url, boolean throwErr) {Closeable_Close(closeable, url.Xto_api(), throwErr);} + protected static void Closeable_Close(Closeable closeable, String url_str, boolean throwErr) { if (closeable == null) return; try {closeable.close();} catch (IOException e) { if (throwErr) - throw Err_.err_key_(e, IoEngineArgs._.Err_IoException, "close object failed").Add("class", ClassAdp_.NameOf_obj(closeable)).Add("url", url.Xto_api()); + throw Err_.err_key_(e, IoEngineArgs._.Err_IoException, "close object failed").Add("class", ClassAdp_.NameOf_obj(closeable)).Add("url", url_str); // else // UsrDlg_._.Finally("failed to close FileChannel", "url", url, "apiErr", Err_.Message_err_arg(e)); } @@ -372,11 +376,11 @@ public class IoEngine_system extends IoEngine_base { if (!Op_sys.Cur().Tid_is_drd()) IoEngine_system_xtn.SetWritable(fil, true); } - Err Err_Text_UnsupportedEncoding(String encodingName, String text, Io_url url, Exception e) { + private static Err Err_text_unsupported_encoding(String encodingName, String text, String url_str, Exception e) { return Err_.err_key_(e, "gplx.texts.UnsupportedEncodingException", "text is in unsupported encoding").CallLevel_1_() .Add("encodingName", encodingName) .Add("text", text) - .Add("url", url.Xto_api()) + .Add("url", url_str) ; } boolean user_agent_needs_resetting = true; diff --git a/140_dbs/src/gplx/dbs/Db_batch_wkr.java b/140_dbs/src/gplx/dbs/Db_batch_wkr.java new file mode 100644 index 000000000..7b516b802 --- /dev/null +++ b/140_dbs/src/gplx/dbs/Db_batch_wkr.java @@ -0,0 +1,22 @@ +/* +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.dbs; import gplx.*; +public interface Db_batch_wkr { + void Batch_bgn(); + void Batch_end(); +} diff --git a/140_dbs/src/gplx/dbs/Db_batch_wkr__attach.java b/140_dbs/src/gplx/dbs/Db_batch_wkr__attach.java new file mode 100644 index 000000000..56b7f2a1e --- /dev/null +++ b/140_dbs/src/gplx/dbs/Db_batch_wkr__attach.java @@ -0,0 +1,43 @@ +/* +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.dbs; import gplx.*; +public class Db_batch_wkr__attach implements Db_batch_wkr { + private final Db_conn conn; + private final ListAdp list = ListAdp_.new_(); + public Db_batch_wkr__attach Add(String alias, Io_url url) {list.Add(new Db_batch_wkr__attach_itm(alias, url)); return this;} + public Db_batch_wkr__attach(Db_conn conn) {this.conn = conn;} + public void Batch_bgn() { + int len = list.Count(); + for (int i = 0; i < len; ++i) { + Db_batch_wkr__attach_itm itm = (Db_batch_wkr__attach_itm)list.FetchAt(i); + conn.Exec_env_db_attach(itm.Alias(), itm.Url()); + } + } + public void Batch_end() { + int len = list.Count(); + for (int i = 0; i < len; ++i) { + Db_batch_wkr__attach_itm itm = (Db_batch_wkr__attach_itm)list.FetchAt(i); + conn.Exec_env_db_detach(itm.Alias()); + } + } +} +class Db_batch_wkr__attach_itm { + public Db_batch_wkr__attach_itm(String alias, Io_url url) {this.alias = alias; this.url = url;} + public String Alias() {return alias;} private final String alias; + public Io_url Url() {return url;} private final Io_url url; +} diff --git a/140_dbs/src/gplx/dbs/Db_batch_wkr__msg.java b/140_dbs/src/gplx/dbs/Db_batch_wkr__msg.java new file mode 100644 index 000000000..471df45cb --- /dev/null +++ b/140_dbs/src/gplx/dbs/Db_batch_wkr__msg.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.dbs; import gplx.*; +public class Db_batch_wkr__msg implements Db_batch_wkr { + private final Gfo_usr_dlg usr_dlg; private final String msg_pre; + public Db_batch_wkr__msg(Gfo_usr_dlg usr_dlg, String msg_pre) {this.usr_dlg = usr_dlg; this.msg_pre = msg_pre;} + public Gfo_usr_dlg Usr_dlg() {return usr_dlg;} + public String Msg() {return msg;} public Db_batch_wkr__msg Msg_(String v) {msg = v; return this;} private String msg; + public void Batch_bgn() {usr_dlg.Plog_many("", "", "bgn:" + msg_pre + "." + msg);} + public void Batch_end() {usr_dlg.Plog_many("", "", "end:" + msg_pre + "." + msg);} +} diff --git a/140_dbs/src/gplx/dbs/Db_batch_wkr__sql.java b/140_dbs/src/gplx/dbs/Db_batch_wkr__sql.java new file mode 100644 index 000000000..7711db5e9 --- /dev/null +++ b/140_dbs/src/gplx/dbs/Db_batch_wkr__sql.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.dbs; import gplx.*; +public class Db_batch_wkr__sql implements Db_batch_wkr { + private final Db_conn conn; private String sql; + public Db_batch_wkr__sql(Db_conn conn, String... lines) {this.conn = conn; this.sql = String_.Concat_lines_nl_skip_last(lines);} + public String Sql() {return sql;} + public Db_batch_wkr__sql Sql_(String... lines) {sql = String_.Concat_lines_nl_skip_last(lines); return this;} + public void Batch_bgn() { + conn.Txn_bgn(); + conn.Exec_sql(sql); + conn.Txn_end(); + } + public void Batch_end() { + } +} diff --git a/140_dbs/src/gplx/dbs/Db_conn.java b/140_dbs/src/gplx/dbs/Db_conn.java index 414cbc1db..ee2d4bb7d 100644 --- a/140_dbs/src/gplx/dbs/Db_conn.java +++ b/140_dbs/src/gplx/dbs/Db_conn.java @@ -26,18 +26,24 @@ public class Db_conn { } public Db_url Url() {return engine.Url();} public Db_txn_mgr Txn_mgr() {return txn_mgr;} private final Db_txn_mgr txn_mgr; + public void Txn_bgn() {txn_mgr.Txn_bgn();} + public void Txn_commit() {txn_mgr.Txn_end(); txn_mgr.Txn_bgn();} + public void Txn_end() {txn_mgr.Txn_end();} public Db_stmt Stmt_insert(String tbl, Db_meta_fld_list flds) {return engine.New_stmt_prep(Db_qry_insert.new_(tbl, flds.To_str_ary()));} public Db_stmt Stmt_insert(String tbl, String... cols) {return engine.New_stmt_prep(Db_qry_insert.new_(tbl, cols));} public Db_stmt Stmt_update(String tbl, String[] where, String... cols) {return engine.New_stmt_prep(Db_qry_update.new_(tbl, where, cols));} public Db_stmt Stmt_update_exclude(String tbl, Db_meta_fld_list flds, String... where) {return engine.New_stmt_prep(Db_qry_update.new_(tbl, where, flds.To_str_ary_exclude(where)));} public Db_stmt Stmt_delete(String tbl, String... where) {return engine.New_stmt_prep(Db_qry_delete.new_(tbl, where));} - 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 Db_stmt Stmt_select(String tbl, String[] cols, String... where) {return engine.New_stmt_prep(Db_qry__select_in_tbl.new_(tbl, where, cols, null));} + 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(), null));} + public Db_stmt Stmt_select_order(String tbl, Db_meta_fld_list flds, String[] where, String... orderbys) {return engine.New_stmt_prep(Db_qry__select_in_tbl.new_(tbl, where, flds.To_str_ary(), orderbys));} public void Exec_create_tbl_and_idx(Db_meta_tbl meta) { 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_ddl_create_idx(usr_dlg, idxs);} + public void Exec_env_db_attach(String alias, Io_url db_url) {engine.Exec_env_db_attach(alias, db_url);} + public void Exec_env_db_detach(String alias) {engine.Exec_env_db_detach(alias);} 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() { @@ -54,4 +60,23 @@ public class Db_conn { public DataRdr Exec_qry_as_rdr(Db_qry qry) {return DataRdr_.cast_(engine.Exec_as_obj(qry));} public int Exec_sql(String sql) {return this.Exec_qry(Db_qry_sql.dml_(sql));} public DataRdr Exec_sql_as_rdr(String sql) {return this.Exec_qry_as_rdr(Db_qry_sql.rdr_(sql));} + public void Exec_sql_idx(Gfo_usr_dlg usr_dlg, Db_meta_idx... idxs) {engine.Exec_ddl_create_idx(usr_dlg, idxs);} + public void Exec_sql(Db_batch_wkr... wkrs) { + int len = wkrs.length; + for (int i = 0; i < len; ++i) { + Db_batch_wkr wkr = wkrs[i]; + wkr.Batch_bgn(); + wkr.Batch_end(); + } + } + public void Exec_sql__vacuum(Db_batch_wkr__msg msg) { + msg.Msg_("vaccuum"); + Exec_sql(msg, Batch_sql("VACCUUM;")); + } + public void Exec_sql__idx(Db_batch_wkr__msg msg, Db_meta_idx... idxs) { + engine.Exec_ddl_create_idx(msg.Usr_dlg(), idxs); + } + public Db_batch_wkr__msg Batch_msg(Gfo_usr_dlg usr_dlg, String msg_pre) {return new Db_batch_wkr__msg(usr_dlg, msg_pre);} + public Db_batch_wkr__attach Batch_attach(String alias, Io_url url) {return new Db_batch_wkr__attach(this).Add(alias, url);} + public Db_batch_wkr__sql Batch_sql(String... lines) {return new Db_batch_wkr__sql(this, lines);} } diff --git a/140_dbs/src/gplx/dbs/Db_qry_.java b/140_dbs/src/gplx/dbs/Db_qry_.java index bfd273211..412300406 100644 --- a/140_dbs/src/gplx/dbs/Db_qry_.java +++ b/140_dbs/src/gplx/dbs/Db_qry_.java @@ -18,10 +18,10 @@ along with this program. If not, see . package gplx.dbs; import gplx.*; import gplx.core.criterias.*; import gplx.dbs.qrys.*; public class Db_qry_ { - public static Db_qry_select select_cols_(String tbl, Criteria crt, String... cols){return select_().From_(tbl).Where_(crt).Cols_(cols);} - public static Db_qry_select select_val_(String tbl, String col, Criteria crt) {return select_().From_(tbl).Where_(crt).Cols_(col);} - public static Db_qry_select select_tbl_(String tbl) {return select_().From_(tbl);} - public static Db_qry_select select_() {return Db_qry_select.new_();} + public static Db_qry__select_cmd select_cols_(String tbl, Criteria crt, String... cols){return select_().From_(tbl).Where_(crt).Cols_(cols);} + public static Db_qry__select_cmd select_val_(String tbl, String col, Criteria crt) {return select_().From_(tbl).Where_(crt).Cols_(col);} + public static Db_qry__select_cmd select_tbl_(String tbl) {return select_().From_(tbl);} + public static Db_qry__select_cmd select_() {return Db_qry__select_cmd.new_();} public static Db_qry_delete delete_(String tbl, Criteria crt) {return Db_qry_delete.new_(tbl, crt);} public static Db_qry_delete delete_tbl_(String tbl) {return Db_qry_delete.new_(tbl);} public static Db_qry_insert insert_(String tbl) {return new Db_qry_insert(tbl);} diff --git a/140_dbs/src/gplx/dbs/Db_stmt_.java b/140_dbs/src/gplx/dbs/Db_stmt_.java index 783ea3d1d..fa8bd93b0 100644 --- a/140_dbs/src/gplx/dbs/Db_stmt_.java +++ b/140_dbs/src/gplx/dbs/Db_stmt_.java @@ -32,11 +32,11 @@ public class Db_stmt_ { return conn.Stmt_new(qry); } public static Db_stmt new_select_(Db_conn conn, String tbl, String[] where, String... flds) { - Db_qry_select qry = Db_qry_.select_cols_(tbl, Db_crt_.eq_many_(where), flds); + Db_qry__select_cmd qry = Db_qry_.select_cols_(tbl, Db_crt_.eq_many_(where), flds); return conn.Stmt_new(qry); } public static Db_stmt new_select_in_(Db_conn conn, String tbl, String in_fld, Object[] in_vals, String... flds) { - Db_qry_select qry = Db_qry_.select_cols_(tbl, Db_crt_.in_(in_fld, in_vals), flds).OrderBy_asc_(in_fld); + Db_qry__select_cmd qry = Db_qry_.select_cols_(tbl, Db_crt_.in_(in_fld, in_vals), flds).OrderBy_asc_(in_fld); return conn.Stmt_new(qry); } public static Db_stmt new_select_all_(Db_conn conn, String tbl) { diff --git a/140_dbs/src/gplx/dbs/engines/Db_engine.java b/140_dbs/src/gplx/dbs/engines/Db_engine.java index 8dcd1947b..588e566e9 100644 --- a/140_dbs/src/gplx/dbs/engines/Db_engine.java +++ b/140_dbs/src/gplx/dbs/engines/Db_engine.java @@ -32,4 +32,6 @@ public interface Db_engine { 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); + void Exec_env_db_attach(String alias, Io_url db_url); + void Exec_env_db_detach(String alias); } 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 0e9ae9c1b..493c8e8a2 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 @@ -37,7 +37,7 @@ public abstract class Db_engine_sql_base implements Db_engine { String sql = this.SqlWtr().Xto_str(qry, false); // DBG: Tfds.Write(sql); return qry.Exec_is_rdr() ? (Object)this.Exec_as_rdr(sql) : this.Exec_as_int(sql); } - private int Exec_as_int(String sql) { + protected int Exec_as_int(String sql) { try { Statement cmd = New_stmt_exec(sql); return cmd.executeUpdate(sql); @@ -65,6 +65,8 @@ public abstract class Db_engine_sql_base implements Db_engine { 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 void Exec_env_db_attach(String alias, Io_url db_url) {} + @gplx.Virtual public void Exec_env_db_detach(String alias) {} @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 1dce12495..570767834 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 @@ -40,5 +40,7 @@ public class Db_engine__mem implements Db_engine { } 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 void Exec_env_db_attach(String alias, Io_url db_url) {} + public void Exec_env_db_detach(String alias) {} public static final Db_engine__mem _ = new Db_engine__mem(); Db_engine__mem() {} } diff --git a/140_dbs/src/gplx/dbs/engines/mems/Mem_tbl.java b/140_dbs/src/gplx/dbs/engines/mems/Mem_tbl.java index b3efa2604..4506896c9 100644 --- a/140_dbs/src/gplx/dbs/engines/mems/Mem_tbl.java +++ b/140_dbs/src/gplx/dbs/engines/mems/Mem_tbl.java @@ -56,7 +56,7 @@ public class Mem_tbl { String[] select = null; Criteria where = null; Db_qry__select_in_tbl qry = Db_qry__select_in_tbl.as_(stmt.Qry()); if (qry == null) { - Db_qry_select qry2 = (Db_qry_select)stmt.Qry(); + Db_qry__select_cmd qry2 = (Db_qry__select_cmd)stmt.Qry(); select = qry2.Cols_ary(); where = qry2.Where(); } 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 895a20431..8f7a3fac4 100644 --- a/140_dbs/src/gplx/dbs/engines/nulls/Null_engine.java +++ b/140_dbs/src/gplx/dbs/engines/nulls/Null_engine.java @@ -32,5 +32,7 @@ public class Null_engine implements Db_engine { 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 void Exec_env_db_attach(String alias, Io_url db_url) {} + public void Exec_env_db_detach(String alias) {} public static final Null_engine _ = new Null_engine(); Null_engine() {} } diff --git a/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_engine.java b/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_engine.java index 522849993..3e16370e1 100644 --- a/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_engine.java +++ b/140_dbs/src/gplx/dbs/engines/sqlite/Sqlite_engine.java @@ -28,6 +28,8 @@ public class Sqlite_engine extends Db_engine_sql_base { } @Override public DataRdr New_rdr(ResultSet rdr, String commandText) {return Sqlite_rdr.new_(rdr, commandText);} @Override public Db_rdr New_rdr_clone() {return new Db_rdr__sqlite();} + @Override public void Exec_env_db_attach(String alias, Io_url db_url) {Exec_as_int(String_.Format("ATTACH '{0}' AS {1};", db_url.Raw(), alias));} + @Override public void Exec_env_db_detach(String alias) {Exec_as_int(String_.Format("DETACH {0};", alias));} static boolean loaded = false; @gplx.Internal @Override protected Connection Conn_new() { if (!loaded) { diff --git a/140_dbs/src/gplx/dbs/engines/tdbs/TdbEngine.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbEngine.java index 997cb404f..1219245a6 100644 --- a/140_dbs/src/gplx/dbs/engines/tdbs/TdbEngine.java +++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbEngine.java @@ -57,7 +57,8 @@ public class TdbEngine implements Db_engine { 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_();} - + public void Exec_env_db_attach(String alias, Io_url db_url) {} + public void Exec_env_db_detach(String alias) {} 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/engines/tdbs/TdbSelect.java b/140_dbs/src/gplx/dbs/engines/tdbs/TdbSelect.java index d4afb0e69..f591c6bf6 100644 --- a/140_dbs/src/gplx/dbs/engines/tdbs/TdbSelect.java +++ b/140_dbs/src/gplx/dbs/engines/tdbs/TdbSelect.java @@ -20,11 +20,11 @@ import gplx.core.criterias.*; import gplx.dbs.qrys.*; import gplx.dbs.sqls.*; import gplx.lists.*; /*ComparerAble*/ import gplx.stores.*; /*GfoNdeRdr*/ class TdbSelectWkr implements Db_qryWkr { public Object Exec(Db_engine engineObj, Db_qry cmdObj) { - TdbEngine engine = TdbEngine.cast_(engineObj); Db_qry_select cmd = (Db_qry_select)cmdObj; + TdbEngine engine = TdbEngine.cast_(engineObj); Db_qry__select_cmd cmd = (Db_qry__select_cmd)cmdObj; if (cmd.From().Tbls().Count() > 1) throw Err_.new_key_("gplx.tdbs", "joins not supported for tdbs").Add("sql", cmd.Xto_sql()); TdbTable tbl = engine.FetchTbl(cmd.From().BaseTable().TblName()); - GfoNdeList rv = (cmd.Where() == Db_qry_.WhereAll && cmd.Limit() == Db_qry_select.Limit_disabled) ? rv = tbl.Rows() : FilterRecords(tbl, cmd.Where(), cmd.Limit()); + GfoNdeList rv = (cmd.Where() == Db_qry_.WhereAll && cmd.Limit() == Db_qry__select_cmd.Limit_disabled) ? rv = tbl.Rows() : FilterRecords(tbl, cmd.Where(), cmd.Limit()); if (cmd.GroupBy() != null) rv = TdbGroupByWkr.GroupByExec(cmd, rv, tbl); if (cmd.OrderBy() != null) { // don't use null pattern here; if null ORDER BY, then don't call .Sort on GfoNdeList @@ -47,7 +47,7 @@ class TdbSelectWkr implements Db_qryWkr { public static final TdbSelectWkr _ = new TdbSelectWkr(); TdbSelectWkr() {} } class TdbGroupByWkr { - public static GfoNdeList GroupByExec(Db_qry_select select, GfoNdeList selectRows, TdbTable tbl) { + public static GfoNdeList GroupByExec(Db_qry__select_cmd select, GfoNdeList selectRows, TdbTable tbl) { GfoNdeList rv = GfoNdeList_.new_(); OrderedHash groupByHash = OrderedHash_.new_(); ListAdp groupByFlds = select.GroupBy().Flds(); diff --git a/140_dbs/src/gplx/dbs/qrys/Db_qry_select.java b/140_dbs/src/gplx/dbs/qrys/Db_qry__select_cmd.java similarity index 67% rename from 140_dbs/src/gplx/dbs/qrys/Db_qry_select.java rename to 140_dbs/src/gplx/dbs/qrys/Db_qry__select_cmd.java index 194c7c143..c987066d6 100644 --- a/140_dbs/src/gplx/dbs/qrys/Db_qry_select.java +++ b/140_dbs/src/gplx/dbs/qrys/Db_qry__select_cmd.java @@ -17,11 +17,12 @@ along with this program. If not, see . */ package gplx.dbs.qrys; import gplx.*; import gplx.dbs.*; import gplx.core.criterias.*; import gplx.dbs.sqls.*; -public class Db_qry_select implements Db_qry { +public class Db_qry__select_cmd implements Db_qry { public int Tid() {return Db_qry_.Tid_select;} public boolean Exec_is_rdr() {return true;} public String Base_table() {return from.BaseTable().TblName();} public String Xto_sql() {return Sql_qry_wtr_.I.Xto_str(this, false);} + public String Xto_sql_prepare() {return Sql_qry_wtr_.I.Xto_str(this, true);} public DataRdr Exec_qry_as_rdr(Db_conn conn) {return conn.Exec_qry_as_rdr(this);} public GfoNde ExecRdr_nde(Db_conn conn) { DataRdr rdr = DataRdr_.Null; @@ -48,13 +49,13 @@ public class Db_qry_select implements Db_qry { } public Sql_from From() {return from;} Sql_from from; - public Db_qry_select From_(String tblName) {return From_(tblName, null);} - public Db_qry_select From_(String tblName, String alias) { + public Db_qry__select_cmd From_(String tblName) {return From_(tblName, null);} + public Db_qry__select_cmd From_(String tblName, String alias) { if (from != null) throw Err_.new_("super table already defined").Add("from", from.Tbls().Count()); from = Sql_from.new_(Sql_tbl_src.new_().JoinType_(Sql_join_itmType.From).TblName_(tblName).Alias_(alias)); return this; } - public Db_qry_select Join_(String name, String alias, Sql_join_itm... ary) { + public Db_qry__select_cmd Join_(String name, String alias, Sql_join_itm... ary) { if (from == null) throw Err_.new_("super table is not defined"); Sql_tbl_src tbl = Sql_tbl_src.new_().JoinType_(Sql_join_itmType.Inner).TblName_(name).Alias_(alias); for (Sql_join_itm itm : ary) @@ -65,50 +66,50 @@ public class Db_qry_select implements Db_qry { public Sql_select Cols() {return cols;} Sql_select cols = Sql_select.All; public String[] Cols_ary() {return cols.Flds().To_str_ary();} - public Db_qry_select Cols_all_() {return this;} - public Db_qry_select Cols_alias_(String expr, String alias) { + public Db_qry__select_cmd Cols_all_() {return this;} + public Db_qry__select_cmd Cols_alias_(String expr, String alias) { if (cols == Sql_select.All) cols = Sql_select.new_(); cols.Add(expr, alias); return this; } - public Db_qry_select Cols_(String... ary) { + public Db_qry__select_cmd Cols_(String... ary) { if (cols == Sql_select.All) cols = Sql_select.new_(); for (String itm : ary) cols.Add(itm); return this; } - public Db_qry_select Cols_groupBy_max(String fld) {return Cols_groupBy_max(fld, fld);} - public Db_qry_select Cols_groupBy_max(String fld, String alias) { + public Db_qry__select_cmd Cols_groupBy_max(String fld) {return Cols_groupBy_max(fld, fld);} + public Db_qry__select_cmd Cols_groupBy_max(String fld, String alias) { if (cols == Sql_select.All) cols = Sql_select.new_(); cols.Add(Sql_select_fld_.new_max(Sql_select_fld_base.Tbl_null, fld, alias)); return this; } - public Db_qry_select Cols_groupBy_min(String fld, String alias) { + public Db_qry__select_cmd Cols_groupBy_min(String fld, String alias) { if (cols == Sql_select.All) cols = Sql_select.new_(); cols.Add(Sql_select_fld_.new_min(Sql_select_fld_base.Tbl_null, fld, alias)); return this; } - public Db_qry_select Cols_groupBy_count(String fld, String alias) { + public Db_qry__select_cmd Cols_groupBy_count(String fld, String alias) { if (cols == Sql_select.All) cols = Sql_select.new_(); cols.Add(Sql_select_fld_.new_count(Sql_select_fld_base.Tbl_null, fld, alias)); return this; } - public Db_qry_select Cols_groupBy_sum(String fld) {return Cols_groupBy_sum(fld, fld);} - public Db_qry_select Cols_groupBy_sum(String fld, String alias) { + public Db_qry__select_cmd Cols_groupBy_sum(String fld) {return Cols_groupBy_sum(fld, fld);} + public Db_qry__select_cmd Cols_groupBy_sum(String fld, String alias) { if (cols == Sql_select.All) cols = Sql_select.new_(); cols.Add(Sql_select_fld_.new_sum(Sql_select_fld_base.Tbl_null, fld, alias)); return this; } - public Criteria Where() {return where;} public Db_qry_select Where_(Criteria crt) {where = crt; return this;} Criteria where; + public Criteria Where() {return where;} public Db_qry__select_cmd Where_(Criteria crt) {where = crt; return this;} Criteria where; public Sql_order_by OrderBy() {return orderBy;} Sql_order_by orderBy = null; - public Db_qry_select OrderBy_(String fieldName, boolean ascending) { + public Db_qry__select_cmd OrderBy_(String fieldName, boolean ascending) { Sql_order_by_itm item = Sql_order_by_itm.new_(fieldName, ascending); orderBy = Sql_order_by.new_(item); return this; } - public Db_qry_select OrderBy_asc_(String fieldName) {return OrderBy_(fieldName, true);} - public Db_qry_select OrderBy_many_(String... fldNames) { + public Db_qry__select_cmd OrderBy_asc_(String fieldName) {return OrderBy_(fieldName, true);} + public Db_qry__select_cmd OrderBy_many_(String... fldNames) { Sql_order_by_itm[] ary = new Sql_order_by_itm[fldNames.length]; for (int i = 0; i < fldNames.length; i++) ary[i] = Sql_order_by_itm.new_(fldNames[i], true); @@ -116,15 +117,15 @@ public class Db_qry_select implements Db_qry { return this; } public Sql_group_by GroupBy() {return groupBy;} Sql_group_by groupBy = null; - public Db_qry_select GroupBy_(String... flds) { + public Db_qry__select_cmd GroupBy_(String... flds) { if (groupBy != null) throw Err_.new_("group by already defined").Add("group", groupBy); groupBy = Sql_group_by.new_(flds); return this; } - public String Indexed_by() {return indexed_by;} public Db_qry_select Indexed_by_(String v) {indexed_by = v; return this;} private String indexed_by; - public Db_qry_select Distinct_() {cols.Distinct_set(true); return this;} + public String Indexed_by() {return indexed_by;} public Db_qry__select_cmd Indexed_by_(String v) {indexed_by = v; return this;} private String indexed_by; + public Db_qry__select_cmd Distinct_() {cols.Distinct_set(true); return this;} public int Limit() {return limit;} int limit = -1; public static final int Limit_disabled = -1; - public Db_qry_select Limit_(int v) {this.limit = v; return this;} + public Db_qry__select_cmd Limit_(int v) {this.limit = v; return this;} - public static Db_qry_select new_() {return new Db_qry_select();} Db_qry_select() {} + public static Db_qry__select_cmd new_() {return new Db_qry__select_cmd();} Db_qry__select_cmd() {} } diff --git a/140_dbs/src/gplx/dbs/qrys/Db_qry__select_in_tbl.java b/140_dbs/src/gplx/dbs/qrys/Db_qry__select_in_tbl.java index 556858f6e..e565a5687 100644 --- a/140_dbs/src/gplx/dbs/qrys/Db_qry__select_in_tbl.java +++ b/140_dbs/src/gplx/dbs/qrys/Db_qry__select_in_tbl.java @@ -59,11 +59,29 @@ public class Db_qry__select_in_tbl implements Db_qry { return sb.XtoStr(); } } - public static Db_qry__select_in_tbl new_(String base_table, String[] where_flds, String[] select_flds) { - Db_qry__select_in_tbl rv = new Db_qry__select_in_tbl(base_table, select_flds, where_flds, null, null, null, null); + public static Db_qry__select_in_tbl new_(String base_table, String[] where_flds, String[] select_flds, String[] order_flds) { + String order_by_sql = null; + if (order_flds != Order_by_null) { + int len = order_flds.length; + switch (len) { + case 0: break; + case 1: order_by_sql = order_flds[0]; break; + default: + Bry_bfr bfr = Bry_bfr.new_(); + for (int i = 0; i < len; ++i) { + String order_fld = order_flds[i]; + if (i != 0) bfr.Add_byte_comma(); + bfr.Add_str_ascii(order_fld); + } + order_by_sql = bfr.Xto_str_and_clear(); + break; + } + } + Db_qry__select_in_tbl rv = new Db_qry__select_in_tbl(base_table, select_flds, where_flds, null, null, order_by_sql, null); rv.where = where_flds.length == 0 ? Db_crt_.Wildcard : Db_crt_.eq_many_(where_flds); return rv; } public static Db_qry__select_in_tbl as_(Object obj) {return obj instanceof Db_qry__select_in_tbl ? (Db_qry__select_in_tbl)obj : null;} public static final String[] Where_flds__all = String_.Ary_empty; + public static final String[] Order_by_null = null; } diff --git a/140_dbs/src/gplx/dbs/qrys/Db_qry_insert.java b/140_dbs/src/gplx/dbs/qrys/Db_qry_insert.java index 765eaa073..66539c733 100644 --- a/140_dbs/src/gplx/dbs/qrys/Db_qry_insert.java +++ b/140_dbs/src/gplx/dbs/qrys/Db_qry_insert.java @@ -44,8 +44,8 @@ public class Db_qry_insert implements Db_qry_arg_owner { } public Db_qry_arg_owner Key_arg_(String k, int v) {return Arg_obj_type_(k, v, Db_val_type.Tid_int32);} public Db_qry_arg_owner Key_arg_(String k, String v) {return Arg_obj_type_(k, v, Db_val_type.Tid_varchar);} - public Db_qry_select Select() {return select;} Db_qry_select select; - public Db_qry_insert Select_(Db_qry_select qry) {this.select = qry; return this;} + public Db_qry__select_cmd Select() {return select;} Db_qry__select_cmd select; + public Db_qry_insert Select_(Db_qry__select_cmd qry) {this.select = qry; return this;} public Db_qry_insert Cols_(String... ary) { if (cols == null) cols = Sql_select_fld_list.new_(); for (String fld : ary) diff --git a/140_dbs/src/gplx/dbs/qrys/Db_qry_select_tst.java b/140_dbs/src/gplx/dbs/qrys/Db_qry_select_tst.java index 2615dc252..a28354a9f 100644 --- a/140_dbs/src/gplx/dbs/qrys/Db_qry_select_tst.java +++ b/140_dbs/src/gplx/dbs/qrys/Db_qry_select_tst.java @@ -19,8 +19,8 @@ package gplx.dbs.qrys; import gplx.*; import gplx.dbs.*; import org.junit.*; import gplx.dbs.sqls.*; public class Db_qry_select_tst { @Before public void setup() { - cmd = Db_qry_select.new_(); - } Db_qry_select cmd; String expd; + cmd = Db_qry__select_cmd.new_(); + } Db_qry__select_cmd cmd; String expd; @Test public void Basic() { cmd.Cols_("fld0", "fld1").From_("tbl0"); expd = "SELECT fld0, fld1 FROM tbl0"; @@ -76,7 +76,7 @@ public class Db_qry_select_tst { // } // @Test public void Union() { // cmd.From_("tbl0").select("fld0").union_(qry2.from("tbl1").select("fld0")); -// cmd.From_("tbl0").select("fld0").union_().from("tbl1").select("fld0"); // feasible, but will be bad later when trying to access Db_qry_select props +// cmd.From_("tbl0").select("fld0").union_().from("tbl1").select("fld0"); // feasible, but will be bad later when trying to access Db_qry__select_cmd props // expd = "SELECT fld0 FROM tbl0 UNION SELECT fld0 FROM tbl1"; // Tfds.Eq(cmd.XtoStr(), expd); // } diff --git a/140_dbs/src/gplx/dbs/qrys/Db_stmt_cmd.java b/140_dbs/src/gplx/dbs/qrys/Db_stmt_cmd.java index dfeb7a276..0afc4c9b9 100644 --- a/140_dbs/src/gplx/dbs/qrys/Db_stmt_cmd.java +++ b/140_dbs/src/gplx/dbs/qrys/Db_stmt_cmd.java @@ -140,7 +140,7 @@ public class Db_stmt_cmd implements Db_stmt { try {return engine.New_rdr_by_obj(stmt.executeQuery(), sql);} catch (Exception e) {throw Err_.err_(e, "select failed: sql={0}", sql);} } public Object Exec_select_val() { - try {Object rv = Db_qry_select.Rdr_to_val(engine.New_rdr(stmt.executeQuery(), sql)); return rv;} catch (Exception e) {throw Err_.err_(e, "failed to exec prepared statement: sql={0}", sql);} + try {Object rv = Db_qry__select_cmd.Rdr_to_val(engine.New_rdr(stmt.executeQuery(), sql)); return rv;} catch (Exception e) {throw Err_.err_(e, "failed to exec prepared statement: sql={0}", sql);} } public Db_stmt Clear() { val_idx = 0; diff --git a/140_dbs/src/gplx/dbs/qrys/Db_stmt_sql.java b/140_dbs/src/gplx/dbs/qrys/Db_stmt_sql.java index c759a9547..bff727afa 100644 --- a/140_dbs/src/gplx/dbs/qrys/Db_stmt_sql.java +++ b/140_dbs/src/gplx/dbs/qrys/Db_stmt_sql.java @@ -114,7 +114,7 @@ public class Db_stmt_sql implements Db_stmt {// used for formatting SQL statemen } public Db_rdr Exec_select_as_rdr() {throw Err_.not_implemented_();} public Object Exec_select_val() { - try {Object rv = Db_qry_select.Rdr_to_val(this.Exec_select()); return rv;} catch (Exception e) {throw Err_.err_(e, "failed to exec prepared statement: sql={0}", sql_orig);} + try {Object rv = Db_qry__select_cmd.Rdr_to_val(this.Exec_select()); return rv;} catch (Exception e) {throw Err_.err_(e, "failed to exec prepared statement: sql={0}", sql_orig);} } public Db_stmt Clear() { args.Clear(); @@ -136,21 +136,41 @@ public class Db_stmt_sql implements Db_stmt {// used for formatting SQL statemen public Db_stmt Parse(Db_qry qry, String sql_str) { this.qry = qry; this.sql_orig = sql_str; - int arg_idx = 0; - byte[] src = Bry_.new_utf8_(sql_str); - int pos_prv = 0; + Init_fmtr(tmp_bfr, tmp_fmtr, sql_str); + return this; + } + private static void Init_fmtr(Bry_bfr tmp_bfr, Bry_fmtr tmp_fmtr, String sql_str) { + byte[] sql_bry = Bry_.new_utf8_(sql_str); + int arg_idx = 0; int pos_prv = 0; tmp_bfr.Clear(); while (true) { - int pos_cur = Bry_finder.Find_fwd(src, Byte_ascii.Question, pos_prv); - if (pos_cur == Bry_.NotFound) break; - tmp_bfr.Add_mid(src, pos_prv, pos_cur); + int pos_cur = Bry_finder.Find_fwd(sql_bry, Byte_ascii.Question, pos_prv); if (pos_cur == Bry_.NotFound) break; + tmp_bfr.Add_mid(sql_bry, pos_prv, pos_cur); tmp_bfr.Add_byte(Byte_ascii.Tilde).Add_byte(Byte_ascii.Curly_bgn); tmp_bfr.Add_int_variable(arg_idx++); tmp_bfr.Add_byte(Byte_ascii.Curly_end); pos_prv = pos_cur + 1; } - tmp_bfr.Add_mid(src, pos_prv, src.length); + tmp_bfr.Add_mid(sql_bry, pos_prv, sql_bry.length); tmp_fmtr.Fmt_(tmp_bfr.Xto_bry_and_clear()); - return this; + } + public static String Xto_str(Bry_bfr tmp_bfr, Bry_fmtr tmp_fmtr, String sql_str, ListAdp args) { + Init_fmtr(tmp_bfr, tmp_fmtr, sql_str); + Object[] ary = args.Xto_obj_ary(); + int len = ary.length; + for (int i = 0; i < len; ++i) { + Object obj = ary[i]; + String str = ""; + if (obj == null) + str = "NULL"; + else { + str = Object_.Xto_str_strict_or_null(obj); + if (ClassAdp_.Eq(obj.getClass(), String_.Cls_ref_type)) + str = "'" + String_.Replace(str, "'", "''") + "'"; + } + ary[i] = str; + } + tmp_fmtr.Bld_bfr_many(tmp_bfr, ary); + return tmp_bfr.Xto_str_and_clear(); } } 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 69445c055..53d33c5d0 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 @@ -29,7 +29,7 @@ public class Sql_qry_wtr_ansi implements Sql_qry_wtr { case Db_qry_.Tid_delete: return Bld_qry_delete((Db_qry_delete)cmd); case Db_qry_.Tid_update: return Bld_qry_update((Db_qry_update)cmd); case Db_qry_.Tid_select_in_tbl: - case Db_qry_.Tid_select: return Bld_qry_select((Db_qry_select)cmd); + case Db_qry_.Tid_select: return Bld_qry_select((Db_qry__select_cmd)cmd); case Db_qry_.Tid_sql: return ((Db_qry_sql)cmd).Xto_sql(); default: throw Err_.unhandled(cmd.Tid()); } @@ -81,7 +81,7 @@ public class Sql_qry_wtr_ansi implements Sql_qry_wtr { Bld_where(sb, cmd.Where()); return sb.Xto_str_and_clear(); } - private String Bld_qry_select(Db_qry_select cmd) { + private String Bld_qry_select(Db_qry__select_cmd cmd) { sb.Add("SELECT "); if (cmd.Cols().Distinct()) sb.Add("DISTINCT "); Sql_select_fld_list flds = cmd.Cols().Flds(); @@ -118,7 +118,7 @@ public class Sql_qry_wtr_ansi implements Sql_qry_wtr { } } private void Bld_select_limit(String_bldr sb, int limit) { - if (limit == Db_qry_select.Limit_disabled) return; + if (limit == Db_qry__select_cmd.Limit_disabled) return; sb.Add(" LIMIT ").Add(limit); } private void Bld_clause_from(String_bldr sb, Sql_from from) { @@ -197,6 +197,7 @@ public class Sql_qry_wtr_ansi implements Sql_qry_wtr { this.Bld_where_val(sb, crt); } public void Bld_where_val(String_bldr sb, Criteria crt) { + if (crt == null) return; // handle empty crt; EX: SELECT * FROM tbl; Criteria_bool_base crt_bool = Criteria_bool_base.as_(crt); if (crt_bool != null) { sb.Add("("); diff --git a/140_dbs/src/gplx/dbs/utls/PoolIds.java b/140_dbs/src/gplx/dbs/utls/PoolIds.java index 1bec24158..8552b2823 100644 --- a/140_dbs/src/gplx/dbs/utls/PoolIds.java +++ b/140_dbs/src/gplx/dbs/utls/PoolIds.java @@ -19,7 +19,7 @@ package gplx.dbs.utls; import gplx.*; import gplx.dbs.*; import gplx.dbs.qrys.*; public class PoolIds { public int FetchNext(Db_conn conn, String url) { - Db_qry_select cmd = Db_qry_.select_().From_(Tbl_Name).Where_(Db_crt_.eq_(Fld_id_path, url)); + Db_qry__select_cmd cmd = Db_qry_.select_().From_(Tbl_Name).Where_(Db_crt_.eq_(Fld_id_path, url)); int rv = 0;//boolean isNew = true; DataRdr rdr = DataRdr_.Null; try { diff --git a/140_dbs/tst/gplx/dbs/engines/db_CrudOps_tst.java b/140_dbs/tst/gplx/dbs/engines/db_CrudOps_tst.java index 5752cf4c5..8c5df52f2 100644 --- a/140_dbs/tst/gplx/dbs/engines/db_CrudOps_tst.java +++ b/140_dbs/tst/gplx/dbs/engines/db_CrudOps_tst.java @@ -112,7 +112,7 @@ class CrudOpsFxt { this.Init(); String val = "Ω"; fx.tst_ExecDml(1, Db_qry_.insert_("dbs_crud_ops").Arg_("id", 3).Arg_obj_type_("name", val, Db_val_type.Tid_nvarchar)); - Db_qry_select select = Db_qry_.select_val_("dbs_crud_ops", "name", Db_crt_.eq_("id", 3)); + Db_qry__select_cmd select = Db_qry_.select_val_("dbs_crud_ops", "name", Db_crt_.eq_("id", 3)); Tfds.Eq(val, ExecRdr_val(select)); fx.tst_ExecDml(1, Db_qry_.update_("dbs_crud_ops", Db_crt_.Wildcard).Arg_obj_type_("name", val + "a", Db_val_type.Tid_nvarchar)); @@ -125,5 +125,5 @@ class CrudOpsFxt { Tfds.Eq(val, ExecRdr_val(Db_qry_.select_val_("dbs_crud_ops", "name", Db_crt_.eq_("id", 3)))); Tfds.Eq(val, ExecRdr_val(Db_qry_.select_val_("dbs_crud_ops", "name", Db_crt_.eq_("name", "\\")))); } - String ExecRdr_val(Db_qry_select select) {return (String)select.ExecRdr_val(fx.Conn());} + String ExecRdr_val(Db_qry__select_cmd select) {return (String)select.ExecRdr_val(fx.Conn());} } diff --git a/140_dbs/tst/gplx/dbs/groupBys/GroupBys_base_tst.java b/140_dbs/tst/gplx/dbs/groupBys/GroupBys_base_tst.java index 86b97577f..e02d42d1e 100644 --- a/140_dbs/tst/gplx/dbs/groupBys/GroupBys_base_tst.java +++ b/140_dbs/tst/gplx/dbs/groupBys/GroupBys_base_tst.java @@ -54,7 +54,7 @@ public abstract class GroupBys_base_tst { conn.Exec_qry(Db_qry_.insert_("dbs_group_bys").Arg_("key1", "a").Arg_("val_int", 1)); conn.Exec_qry(Db_qry_.insert_("dbs_group_bys").Arg_("key1", "a").Arg_("val_int", 2)); - Db_qry_select qry = Db_qry_.select_().From_("dbs_group_bys") + Db_qry__select_cmd qry = Db_qry_.select_().From_("dbs_group_bys") .Cols_("key1") .GroupBy_("key1"); int expd = min ? 1 : 2; diff --git a/140_dbs/tst/gplx/dbs/insertIntos/InsertIntos_base_tst.java b/140_dbs/tst/gplx/dbs/insertIntos/InsertIntos_base_tst.java index b4cd96ea7..668e8283c 100644 --- a/140_dbs/tst/gplx/dbs/insertIntos/InsertIntos_base_tst.java +++ b/140_dbs/tst/gplx/dbs/insertIntos/InsertIntos_base_tst.java @@ -35,10 +35,10 @@ public abstract class InsertIntos_base_tst { (Db_qry_.insert_("dbs_insert_intos") .Cols_("key1", "val_int") .Select_ - ( Db_qry_select.new_().Cols_("key1", "val_int").From_("dbs_group_bys") + ( Db_qry__select_cmd.new_().Cols_("key1", "val_int").From_("dbs_group_bys") ) ); - DataRdr rdr = conn.Exec_qry_as_rdr(Db_qry_select.new_().Cols_("key1", "val_int").From_("dbs_insert_intos")); + DataRdr rdr = conn.Exec_qry_as_rdr(Db_qry__select_cmd.new_().Cols_("key1", "val_int").From_("dbs_insert_intos")); GfoNde nde = GfoNde_.rdr_(rdr); GfoNdeTstr.tst_ValsByCol(nde, "key1", "a"); } @@ -50,10 +50,10 @@ public abstract class InsertIntos_base_tst { (Db_qry_.insert_("dbs_insert_intos") .Cols_("key1", "val_int") .Select_ - ( Db_qry_select.new_().Cols_("key1").Cols_groupBy_sum("val_int", "val_int_func") + ( Db_qry__select_cmd.new_().Cols_("key1").Cols_groupBy_sum("val_int", "val_int_func") .From_("dbs_group_bys").GroupBy_("key1") )); - DataRdr rdr = conn.Exec_qry_as_rdr(Db_qry_select.new_().Cols_("key1", "val_int").From_("dbs_insert_intos")); + DataRdr rdr = conn.Exec_qry_as_rdr(Db_qry__select_cmd.new_().Cols_("key1", "val_int").From_("dbs_insert_intos")); GfoNde nde = GfoNde_.rdr_(rdr); GfoNdeTstr.tst_ValsByCol(nde, "val_int", 3); } diff --git a/140_dbs/tst/gplx/dbs/joins/Joins_base_tst.java b/140_dbs/tst/gplx/dbs/joins/Joins_base_tst.java index 7fb40eac6..5d70d56e4 100644 --- a/140_dbs/tst/gplx/dbs/joins/Joins_base_tst.java +++ b/140_dbs/tst/gplx/dbs/joins/Joins_base_tst.java @@ -32,7 +32,7 @@ public abstract class Joins_base_tst { conn.Exec_qry(new Db_qry_insert("dbs_crud_ops").Arg_("id", 1).Arg_("name", "you")); conn.Exec_qry(new Db_qry_insert("dbs_join1").Arg_("join_id", 0).Arg_("join_data", "data0")); conn.Exec_qry(new Db_qry_insert("dbs_join1").Arg_("join_id", 1).Arg_("join_data", "data1")); - Db_qry_select select = Db_qry_select.new_().From_("dbs_crud_ops").Join_("dbs_join1", "j1", Sql_join_itm.new_("join_id", "dbs_crud_ops", "id")).Cols_("id", "name", "join_data"); + Db_qry__select_cmd select = Db_qry__select_cmd.new_().From_("dbs_crud_ops").Join_("dbs_join1", "j1", Sql_join_itm.new_("join_id", "dbs_crud_ops", "id")).Cols_("id", "name", "join_data"); DataRdr rdr = conn.Exec_qry_as_rdr(select); GfoNde table = GfoNde_.rdr_(rdr); diff --git a/140_dbs/tst/gplx/dbs/orderBys/OrderBys_base_tst.java b/140_dbs/tst/gplx/dbs/orderBys/OrderBys_base_tst.java index 5a0a7ccd6..2ef916099 100644 --- a/140_dbs/tst/gplx/dbs/orderBys/OrderBys_base_tst.java +++ b/140_dbs/tst/gplx/dbs/orderBys/OrderBys_base_tst.java @@ -29,11 +29,11 @@ public abstract class OrderBys_base_tst { fx.tst_ExecDml(1, new Db_qry_insert("dbs_crud_ops").Arg_("id", 1).Arg_("name", "you")); fx.tst_ExecDml(1, new Db_qry_insert("dbs_crud_ops").Arg_("id", 0).Arg_("name", "me")); - fx.tst_ExecRdr(2, Db_qry_select.new_().From_("dbs_crud_ops").OrderBy_("id", true)); + fx.tst_ExecRdr(2, Db_qry__select_cmd.new_().From_("dbs_crud_ops").OrderBy_("id", true)); fx.tst_RowAry(0, 0, "me"); fx.tst_RowAry(1, 1, "you"); - fx.tst_ExecRdr(2, Db_qry_select.new_().From_("dbs_crud_ops").OrderBy_("id", false)); + fx.tst_ExecRdr(2, Db_qry__select_cmd.new_().From_("dbs_crud_ops").OrderBy_("id", false)); fx.tst_RowAry(0, 1, "you"); fx.tst_RowAry(1, 0, "me"); } @@ -41,11 +41,11 @@ public abstract class OrderBys_base_tst { fx.tst_ExecDml(1, new Db_qry_insert("dbs_crud_ops").Arg_("id", 0).Arg_("name", "me")); fx.tst_ExecDml(1, new Db_qry_insert("dbs_crud_ops").Arg_("id", 0).Arg_("name", "you")); - fx.tst_ExecRdr(2, Db_qry_select.new_().From_("dbs_crud_ops").OrderBy_("id", true)); + fx.tst_ExecRdr(2, Db_qry__select_cmd.new_().From_("dbs_crud_ops").OrderBy_("id", true)); fx.tst_RowAry(0, 0, "me"); fx.tst_RowAry(1, 0, "you"); - fx.tst_ExecRdr(2, Db_qry_select.new_().From_("dbs_crud_ops").OrderBy_("id", false)); + fx.tst_ExecRdr(2, Db_qry__select_cmd.new_().From_("dbs_crud_ops").OrderBy_("id", false)); fx.tst_RowAry(0, 0, "me"); fx.tst_RowAry(1, 0, "you"); } diff --git a/400_xowa/src/gplx/core/brys/Bit_.java b/400_xowa/src/gplx/core/brys/Bit_.java index 60c2db593..81339951e 100644 --- a/400_xowa/src/gplx/core/brys/Bit_.java +++ b/400_xowa/src/gplx/core/brys/Bit_.java @@ -112,8 +112,8 @@ public class Bit_ { int[] rv = new int[Pow_ary_date_short.length]; Xto_date_short_int_ary(rv, v); return DateAdp_.seg_(rv); - } - private static final int[] Pow_ary_date_short = new int[] {1048576, 65536, 2048, 64, 1}; + } + private static final int[] Pow_ary_date_short = new int[] {1048576, 65536, 2048, 64, 1}; // yndhm -> 12,4,5,5,6 private static final int[] Base2_ary = new int[] { 1, 2, 4, 8, 16, 32, 64, 128 , 256, 512, 1024, 2048, 4096, 8192, 16384, 32768 diff --git a/400_xowa/src/gplx/dbs/schemas/Schema_loader_mgr_.java b/400_xowa/src/gplx/dbs/schemas/Schema_loader_mgr_.java index 77c1cdb35..87698eecd 100644 --- a/400_xowa/src/gplx/dbs/schemas/Schema_loader_mgr_.java +++ b/400_xowa/src/gplx/dbs/schemas/Schema_loader_mgr_.java @@ -28,7 +28,7 @@ class Schema_loader_mgr__sqlite implements Schema_loader_mgr { public void Load(Schema_db_mgr db_mgr, Db_conn conn) { Gfo_usr_dlg_._.Log_many("", "", "db.schema.load.bgn: conn=~{0}", conn.Url().Xto_api()); Schema_tbl_mgr tbl_mgr = db_mgr.Tbl_mgr(); - Db_qry__select_in_tbl qry = Db_qry__select_in_tbl.new_("sqlite_master", String_.Ary_empty, String_.Ary("type", "name", "sql")); + Db_qry__select_in_tbl qry = Db_qry__select_in_tbl.new_("sqlite_master", String_.Ary_empty, String_.Ary("type", "name", "sql"), Db_qry__select_in_tbl.Order_by_null); Db_stmt stmt = Db_stmt_.new_select_as_rdr(conn, qry); Db_rdr rdr = stmt.Exec_select_as_rdr(); while (rdr.Move_next()) { diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_dir_itm.java b/400_xowa/src/gplx/fsdb/data/Fsd_dir_itm.java index d8ac58ff0..2a65a21e3 100644 --- a/400_xowa/src/gplx/fsdb/data/Fsd_dir_itm.java +++ b/400_xowa/src/gplx/fsdb/data/Fsd_dir_itm.java @@ -18,8 +18,8 @@ along with this program. If not, see . package gplx.fsdb.data; import gplx.*; import gplx.fsdb.*; public class Fsd_dir_itm { public Fsd_dir_itm(int id, int owner, String name) {this.id = id; this.owner = owner; this.name = name;} - public int Id() {return id;} public Fsd_dir_itm Id_(int v) {id = v; return this;} private int id; - public int Owner() {return owner;} public Fsd_dir_itm Owner_(int v) {owner = v; return this;} private int owner; - public String Name() {return name;} public Fsd_dir_itm Name_(String v) {name = v; return this;} private String name; + public int Id() {return id;} private final int id; + public int Owner() {return owner;} private final int owner; + public String Name() {return name;} private final String name; public static final Fsd_dir_itm Null = new Fsd_dir_itm(0, 0, ""); } diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_fil_itm.java b/400_xowa/src/gplx/fsdb/data/Fsd_fil_itm.java index 272614d3c..18f22ca15 100644 --- a/400_xowa/src/gplx/fsdb/data/Fsd_fil_itm.java +++ b/400_xowa/src/gplx/fsdb/data/Fsd_fil_itm.java @@ -17,13 +17,16 @@ along with this program. If not, see . */ package gplx.fsdb.data; import gplx.*; import gplx.fsdb.*; public class Fsd_fil_itm { - public int Id() {return id;} public Fsd_fil_itm Id_(int v) {id = v; return this;} private int id; - public int Owner() {return owner;} public Fsd_fil_itm Owner_(int v) {owner = v; return this;} private int owner; - public int Ext_id() {return ext_id;} public Fsd_fil_itm Ext_id_(int v) {ext_id = v; return this;} private int ext_id; - public String Name() {return name;} public Fsd_fil_itm Name_(String v) {name = v; return this;} private String name; - public int Db_bin_id() {return bin_db_id;} public Fsd_fil_itm Db_bin_id_(int v) {bin_db_id = v; return this;} private int bin_db_id; + public int Id() {return id;} private int id; + public int Owner() {return owner;} private int owner; + public int Ext_id() {return ext_id;} private int ext_id; + public String Name() {return name;} private String name; + public int Db_bin_id() {return bin_db_id;} private int bin_db_id; public int Mnt_id() {return mnt_id;} public Fsd_fil_itm Mnt_id_(int v) {mnt_id = v; return this;} private int mnt_id; public Fsd_fil_itm Init(int id, int owner, int ext_id, String name, int bin_db_id) {this.id = id; this.owner = owner; this.ext_id = ext_id; this.name = name; this.bin_db_id = bin_db_id; return this;} + public void Init_for_insert(int bin_db_id, int dir_id, int fil_id) { + this.bin_db_id = bin_db_id; this.owner = dir_id; this.id = fil_id; + } public static final int Null_id = 0; public static final Fsd_fil_itm Null = new Fsd_fil_itm().Init(Null_id, 0, 0, "", Fsd_bin_tbl.Null_db_bin_id); } 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 c7915ba0a..6a3ba158f 100644 --- a/400_xowa/src/gplx/fsdb/data/Fsd_fil_tbl.java +++ b/400_xowa/src/gplx/fsdb/data/Fsd_fil_tbl.java @@ -78,7 +78,7 @@ public class Fsd_fil_tbl { } public Fsd_fil_itm Select_itm_by_name(int dir_id, String fil_name) { if (stmt_select_by_name == null) { - Db_qry_select qry = Db_qry_select.new_().From_(tbl_name).Cols_(flds.To_str_ary()).Where_(Db_crt_.eq_many_(fld_owner_id, fld_name)).Indexed_by_(Idx_owner); + Db_qry__select_cmd qry = Db_qry__select_cmd.new_().From_(tbl_name).Cols_(flds.To_str_ary()).Where_(Db_crt_.eq_many_(fld_owner_id, fld_name)).Indexed_by_(Idx_owner); stmt_select_by_name = conn.Rls_reg(conn.Stmt_new(qry)); } Db_rdr rdr = Db_rdr_.Null; diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_thm_itm.java b/400_xowa/src/gplx/fsdb/data/Fsd_thm_itm.java index b43401250..4809dd4f2 100644 --- a/400_xowa/src/gplx/fsdb/data/Fsd_thm_itm.java +++ b/400_xowa/src/gplx/fsdb/data/Fsd_thm_itm.java @@ -17,25 +17,56 @@ along with this program. If not, see . */ package gplx.fsdb.data; import gplx.*; import gplx.fsdb.*; public class Fsd_thm_itm { - protected Fsd_thm_itm() {} - public void Ctor(int id, int owner_id, int w, double time, int page, int h, long size, String modified, String hash) { - this.id = id; this.owner_id = owner_id; this.width = w; this.thumbtime = time; this.page = page; this.height = h; this.size = size; this.modified = modified; this.hash = hash; + public int Id() {return id;} private int id; + public int Owner_id() {return owner_id;} private int owner_id; + public int W() {return w;} private int w; + public double Time() {return time;} private double time; + public int Page() {return page;} private int page; + public int H() {return h;} private int h; + public long Size() {return size;} private long size; + public String Modified() {return modified;} private String modified; + public String Hash() {return hash;} private String hash; + public int Dir_id() {return dir_id;} private int dir_id; + public int Db_bin_id() {return bin_db_id;} private int bin_db_id; + public int Mnt_id() {return mnt_id;} private int mnt_id; + public int Req_w() {return req_w;} private int req_w; + public double Req_time() {return req_time;} private double req_time; + public int Req_page() {return req_page;} private int req_page; + public void Init_by_load(int bin_db_id, int id, int owner_id, int w, double time, int page, int h, long size, String modified, String hash) { + this.bin_db_id = bin_db_id; this.id = id; this.owner_id = owner_id; + this.w = w; this.time = time; this.page = page; this.h = h; this.size = size; this.modified = modified; this.hash = hash; } - public int Id() {return id;} public Fsd_thm_itm Id_(int v) {id = v; return this;} private int id; - public Fsd_fil_itm Owner() {return owner;} public Fsd_thm_itm Owner_(Fsd_fil_itm v) {owner = v; return this;} private Fsd_fil_itm owner = Fsd_fil_itm.Null; - public int Owner_id() {return owner_id;} public Fsd_thm_itm Owner_id_(int v) {owner_id = v; return this;} private int owner_id; - public int Width() {return width;} public Fsd_thm_itm Width_(int v) {width = v; return this;} private int width; - public double Thumbtime() {return thumbtime;} public Fsd_thm_itm Thumbtime_(double v) {thumbtime = v; return this;} private double thumbtime; - public int Page() {return page;} public Fsd_thm_itm Page_(int v) {page = v; return this;} private int page; - public int Height() {return height;} public Fsd_thm_itm Height_(int v) {height = v; return this;} private int height; - public long Size() {return size;} public Fsd_thm_itm Size_(long v) {size = v; return this;} private long size; - public String Modified() {return modified;} public Fsd_thm_itm Modified_(String v) {modified = v; return this;} private String modified; - public String Hash() {return hash;} public Fsd_thm_itm Hash_(String v) {hash = v; return this;} private String hash; - public int Dir_id() {return dir_id;} public Fsd_thm_itm Dir_id_(int v) {dir_id = v; return this;} private int dir_id; - public int Db_bin_id() {return bin_db_id;} public Fsd_thm_itm Db_bin_id_(int v) {bin_db_id = v; return this;} private int bin_db_id; - public int Mnt_id() {return mnt_id;} public Fsd_thm_itm Mnt_id_(int v) {mnt_id = v; return this;} private int mnt_id; - public static Fsd_thm_itm new_() {return new Fsd_thm_itm();} // NOTE: Owner is null by default - public static Fsd_thm_itm load_() {return new Fsd_thm_itm().Owner_(new Fsd_fil_itm());} // NOTE: Owner is new'd b/c load will use owner.Ext_id + public void Init_by_insert(int bin_db_id, int dir_id, int fil_id, int thm_id) {this.bin_db_id = bin_db_id; this.dir_id = dir_id; this.owner_id = fil_id; this.id = thm_id;} + public void Init_by_req(int w, double time, int page) {this.w = w; this.time = time; this.page = page;} + public void Init_by_match(Fsd_thm_itm comp) { + this.req_w = w; + this.req_time = time; + this.req_page = page; + this.id = comp.id; + this.owner_id = comp.owner_id; + this.w = comp.w; + this.time = comp.time; + this.page = comp.page; + this.h = comp.h; + this.size = comp.size; + this.modified = comp.modified; + this.hash = comp.hash; + this.dir_id = comp.dir_id; + this.bin_db_id = comp.bin_db_id; + this.mnt_id = comp.mnt_id; + } + public Fsd_thm_itm Mnt_id_(int v) {mnt_id = v; return this;} public static final Fsd_thm_itm Null = new Fsd_thm_itm(); public static final Fsd_thm_itm[] Ary_empty = new Fsd_thm_itm[0]; + public static Fsd_thm_itm new_() {return new Fsd_thm_itm();} Fsd_thm_itm() {} +} +class Fsdb_thm_itm_sorter implements gplx.lists.ComparerAble { + public int compare(Object lhsObj, Object rhsObj) { + Fsd_thm_itm lhs = (Fsd_thm_itm)lhsObj; + Fsd_thm_itm rhs = (Fsd_thm_itm)rhsObj; + int comp = Int_.Compare (lhs.W() , rhs.W()); if (comp != CompareAble_.Same) return -comp; // sort by decreasing width + comp = Double_.Compare (lhs.Time() , rhs.Time()); if (comp != CompareAble_.Same) return comp; // sort by increasing time + return Int_.Compare (lhs.Page() , rhs.Page()); // sort by increasing page + } + public static final Fsdb_thm_itm_sorter I = new Fsdb_thm_itm_sorter(); Fsdb_thm_itm_sorter() {} } 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 04fb30c84..9a8af737d 100644 --- a/400_xowa/src/gplx/fsdb/data/Fsd_thm_tbl.java +++ b/400_xowa/src/gplx/fsdb/data/Fsd_thm_tbl.java @@ -75,11 +75,11 @@ public class Fsd_thm_tbl { .Val_int(fld_w, width) .Val_int(fld_h, height); if (this.Schema_thm_page()) { - stmt_insert.Val_double (fld_time, gplx.xowa.files.Xof_doc_thumb.Db_save_double(thumbtime)); - stmt_insert.Val_int (fld_page, gplx.xowa.files.Xof_doc_page.Db_save_int(page)); + stmt_insert.Val_double (fld_time, gplx.xowa.files.Xof_lnki_time.Db_save_double(thumbtime)); + stmt_insert.Val_int (fld_page, gplx.xowa.files.Xof_lnki_page.Db_save_int(page)); } else - stmt_insert.Val_int (fld_thumbtime, gplx.xowa.files.Xof_doc_thumb.Db_save_int(thumbtime)); + stmt_insert.Val_int (fld_thumbtime, gplx.xowa.files.Xof_lnki_time.Db_save_int(thumbtime)); stmt_insert .Val_int(fld_bin_db_id, bin_db_id) .Val_long(fld_size, size) @@ -88,7 +88,7 @@ public class Fsd_thm_tbl { .Exec_insert(); } private Db_stmt Select_by_fil_w_stmt() { - Db_qry_select qry = Db_qry_.select_().From_(tbl_name).Cols_all_(); + Db_qry__select_cmd qry = Db_qry_.select_().From_(tbl_name).Cols_all_(); gplx.core.criterias.Criteria crt = this.Schema_thm_page() ? Db_crt_.eq_many_(fld_owner_id, fld_w, fld_time, fld_page) @@ -103,14 +103,14 @@ public class Fsd_thm_tbl { try { stmt_select_by_fil_w.Clear() .Crt_int(fld_owner_id, owner_id) - .Crt_int(fld_w, thm.Width()) + .Crt_int(fld_w, thm.W()) ; if (this.Schema_thm_page()) { - stmt_select_by_fil_w.Crt_double(fld_time, gplx.xowa.files.Xof_doc_thumb.Db_save_double(thm.Thumbtime())); - stmt_select_by_fil_w.Crt_int(fld_page, gplx.xowa.files.Xof_doc_page.Db_save_int(thm.Page())); + stmt_select_by_fil_w.Crt_double(fld_time, gplx.xowa.files.Xof_lnki_time.Db_save_double(thm.Time())); + stmt_select_by_fil_w.Crt_int(fld_page, gplx.xowa.files.Xof_lnki_page.Db_save_int(thm.Page())); } else { - stmt_select_by_fil_w.Crt_int(fld_time, gplx.xowa.files.Xof_doc_thumb.Db_save_int(thm.Thumbtime())); + stmt_select_by_fil_w.Crt_int(fld_time, gplx.xowa.files.Xof_lnki_time.Db_save_int(thm.Time())); } rdr = stmt_select_by_fil_w.Exec_select_as_rdr(); return rdr.Move_next() @@ -119,6 +119,21 @@ public class Fsd_thm_tbl { } finally {rdr.Rls();} } + public boolean Select_itm_by_fil_width2(int owner_id, Fsd_thm_itm thm) { + if (stmt_select_by_fil_w == null) stmt_select_by_fil_w = conn.Rls_reg(conn.Stmt_select(tbl_name, flds, fld_owner_id)); + Db_rdr rdr = Db_rdr_.Null; + try { + ListAdp list = ListAdp_.new_(); + rdr = stmt_select_by_fil_w.Clear().Crt_int(fld_owner_id, thm.Owner_id()).Exec_select_as_rdr(); + while (rdr.Move_next()) { + Fsd_thm_itm itm = Fsd_thm_itm.new_(); + Ctor_by_load(itm, rdr, this.Schema_thm_page()); + list.Add(itm); + } + return Match_nearest(list, thm, schema_thm_page); + } + finally {rdr.Rls();} + } private boolean Ctor_by_load(Fsd_thm_itm itm, Db_rdr rdr, boolean schema_thm_page) { int id = rdr.Read_int(fld_id); int owner_id = rdr.Read_int(fld_owner_id); @@ -131,17 +146,39 @@ public class Fsd_thm_tbl { double time = 0; int page = 0; if (schema_thm_page) { - time = gplx.xowa.files.Xof_doc_thumb.Db_load_double(rdr, fld_time); - page = gplx.xowa.files.Xof_doc_page.Db_load_int(rdr, fld_page); + time = gplx.xowa.files.Xof_lnki_time.Db_load_double(rdr, fld_time); + page = gplx.xowa.files.Xof_lnki_page.Db_load_int(rdr, fld_page); } else { - time = gplx.xowa.files.Xof_doc_thumb.Db_load_int(rdr, fld_thumbtime); - page = gplx.xowa.files.Xof_doc_page.Null; + time = gplx.xowa.files.Xof_lnki_time.Db_load_int(rdr, fld_thumbtime); + page = gplx.xowa.files.Xof_lnki_page.Null; } - itm.Ctor(id, owner_id, width, time, page, height, size, modified, hash); - itm.Db_bin_id_(bin_db_id); + itm.Init_by_load(bin_db_id, id, owner_id, width, time, page, height, size, modified, hash); return true; } public static final DateAdp Modified_null = null; public static final String Hash_null = ""; + public static boolean Match_nearest(ListAdp list, Fsd_thm_itm thm, boolean schema_thm_page) { + int len = list.Count(); if (len == 0) return Bool_.N; + list.SortBy(Fsdb_thm_itm_sorter.I); + int thm_w = thm.W(), thm_page = thm.Page(); double thm_time = thm.Time(); + Fsd_thm_itm max = null; + for (int i = 0; i < len; ++i) { + Fsd_thm_itm comp = (Fsd_thm_itm)list.FetchAt(i); + int comp_w = comp.W(); + int comp_page = schema_thm_page ? comp.Page() : thm_page; + if ( thm_w == comp_w + && thm_time == comp.Time() + && thm_page == comp_page + ) { // exact match + thm.Init_by_match(comp); + return Bool_.Y; + } + if (comp_w > thm_w) max = comp; + else break; + } + if (max == null) return Bool_.N; + thm.Init_by_match(max); + return Bool_.Y; + } } diff --git a/400_xowa/src/gplx/fsdb/data/Fsd_thm_tbl_tst.java b/400_xowa/src/gplx/fsdb/data/Fsd_thm_tbl_tst.java new file mode 100644 index 000000000..b39390476 --- /dev/null +++ b/400_xowa/src/gplx/fsdb/data/Fsd_thm_tbl_tst.java @@ -0,0 +1,58 @@ +/* +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.fsdb.data; import gplx.*; import gplx.fsdb.*; +import org.junit.*; +public class Fsd_thm_tbl_tst { + @Before public void init() {fxt.Clear();} private Fsd_thm_tbl_fxt fxt = new Fsd_thm_tbl_fxt(); + @Test public void Basic() { + fxt.Init_list(fxt.Make(100), fxt.Make(200), fxt.Make(400)); + fxt.Test_match_nearest_itm(fxt.Make(400), fxt.Make(400)); + fxt.Test_match_nearest_itm(fxt.Make(200), fxt.Make(200)); + fxt.Test_match_nearest_itm(fxt.Make(100), fxt.Make(100)); + fxt.Test_match_nearest_itm(fxt.Make(350), fxt.Make(400)); + fxt.Test_match_nearest_itm(fxt.Make(150), fxt.Make(200)); + fxt.Test_match_nearest_itm(fxt.Make(500), Fsd_thm_itm.Null); + } + @Test public void Empty() { + fxt.Init_list(); // no items + fxt.Test_match_nearest_itm(fxt.Make(100), Fsd_thm_itm.Null); + } +} +class Fsd_thm_tbl_fxt { + private final ListAdp list = ListAdp_.new_(); + public void Clear() {list.Clear();} + public Fsd_thm_itm Make(int w) { + double time = gplx.xowa.files.Xof_lnki_time.Null; + int page = gplx.xowa.files.Xof_lnki_page.Null; + Fsd_thm_itm rv = Fsd_thm_itm.new_(); + rv.Init_by_req(w, time, page); + return rv; + } + public void Init_list(Fsd_thm_itm... ary) {list.AddMany((Object[])ary);} + public void Test_match_nearest_itm(Fsd_thm_itm req, Fsd_thm_itm expd) { + Fsd_thm_tbl.Match_nearest(list, req, Bool_.Y); + if (expd == Fsd_thm_itm.Null) { + Tfds.Eq(req.Req_w(), 0); + } + else { + Tfds.Eq(expd.W(), req.W()); + Tfds.Eq(expd.Time(), req.Time()); + Tfds.Eq(expd.Page(), req.Page()); + } + } +} 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 3f8babe02..c30ff510a 100644 --- a/400_xowa/src/gplx/fsdb/meta/Fsm_abc_mgr.java +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_abc_mgr.java @@ -42,14 +42,12 @@ public class Fsm_abc_mgr implements RlsAble { } public void Fil_insert(Fsd_fil_itm rv , byte[] dir, byte[] fil, int ext_id, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { int bin_db_id = bin_mgr.Get_id_for_insert(bin_len); - rv.Db_bin_id_(bin_db_id); int fil_id = atr_mgr.Fil_insert(rv, dir, fil, ext_id, modified, hash, bin_db_id, bin_len, bin_rdr); bin_len = bin_mgr.Insert(bin_db_id, fil_id, Fsd_bin_tbl.Owner_tid_fil, bin_len, bin_rdr); bin_mgr.Increment(bin_len); } public void Thm_insert(Fsd_thm_itm rv, byte[] dir, byte[] fil, int ext_id, int w, int h, double thumbtime, int page, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { int bin_db_id = bin_mgr.Get_id_for_insert(bin_len); - rv.Db_bin_id_(bin_db_id); int thm_id = atr_mgr.Thm_insert(rv, dir, fil, ext_id, w, h, thumbtime, page, modified, hash, bin_db_id, bin_len, bin_rdr); bin_len = bin_mgr.Insert(bin_db_id, thm_id, Fsd_bin_tbl.Owner_tid_thm, bin_len, bin_rdr); bin_mgr.Increment(bin_len); 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 523e6fa35..cdff87c58 100644 --- a/400_xowa/src/gplx/fsdb/meta/Fsm_atr_fil.java +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_atr_fil.java @@ -73,7 +73,7 @@ public class Fsm_atr_fil implements RlsAble { public int Fil_insert(Fsd_fil_itm rv, String dir, String fil, int ext_id, DateAdp modified, String hash, int bin_db_id, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { int dir_id = Dir_id__get_or_insert(dir); int fil_id = Fil_id__get_or_insert(Xtn_tid_none, dir_id, fil, ext_id, modified, hash, bin_db_id, bin_len); - rv.Id_(fil_id).Owner_(dir_id); + rv.Init_for_insert(bin_db_id, dir_id, fil_id); return fil_id; } public int Img_insert(Fsd_img_itm rv, String dir, String fil, int ext_id, int img_w, int img_h, DateAdp modified, String hash, int bin_db_id, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { @@ -87,7 +87,7 @@ public class Fsm_atr_fil implements RlsAble { int fil_id = Fil_id__get_or_insert(Xtn_tid_thm, dir_id, fil, ext_id, modified, hash, Fsd_bin_tbl.Null_db_bin_id, Fsd_bin_tbl.Null_size); // NOTE: bin_db_id must be set to NULL int thm_id = abc_mgr.Next_id(); tbl_thm.Insert(thm_id, fil_id, thm_w, thm_h, thumbtime, page, bin_db_id, bin_len, modified, hash); - rv.Id_(thm_id).Owner_id_(fil_id).Dir_id_(dir_id); + rv.Init_by_insert(bin_db_id, dir_id, fil_id, thm_id); return thm_id; } public static Fsm_atr_fil make_(Fsm_abc_mgr abc_mgr, int id, Io_url url, String path_bgn) { 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 590bc208a..eb7ddcb1e 100644 --- a/400_xowa/src/gplx/fsdb/meta/Fsm_bin_tbl.java +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_bin_tbl.java @@ -40,7 +40,7 @@ public class Fsm_bin_tbl { } public Fsm_bin_fil[] Select_all(Io_url dir) { ListAdp rv = ListAdp_.new_(); - Db_qry qry = Db_qry_select.new_().From_(tbl_name).Cols_all_().Where_(Db_crt_.eq_many_(Db_meta_fld.Ary_empy)).OrderBy_asc_(fld_uid); + Db_qry qry = Db_qry__select_cmd.new_().From_(tbl_name).Cols_all_().Where_(Db_crt_.eq_many_(Db_meta_fld.Ary_empy)).OrderBy_asc_(fld_uid); Db_rdr rdr = Db_rdr_.Null; try { rdr = conn.Stmt_new(qry).Clear().Exec_select_as_rdr(); 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 64f37c06a..58c684e03 100644 --- a/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_mgr.java +++ b/400_xowa/src/gplx/fsdb/meta/Fsm_mnt_mgr.java @@ -76,12 +76,15 @@ public class Fsm_mnt_mgr implements GfoInvkAble { return false; } public int Insert_to_mnt() {return insert_to_mnt;} public Fsm_mnt_mgr Insert_to_mnt_(int v) {insert_to_mnt = v; return this;} private int insert_to_mnt = Mnt_idx_user; - public void Fil_insert(Fsd_fil_itm rv , byte[] dir, byte[] fil, int ext_id, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { + public void Fil_insert(byte[] dir, byte[] fil, int ext_id, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {Fil_insert(new Fsd_fil_itm(), dir, fil, ext_id, modified, hash, bin_len, bin_rdr);} + public void Fil_insert(Fsd_fil_itm rv, byte[] dir, byte[] fil, int ext_id, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { ary[insert_to_mnt].Fil_insert(rv, dir, fil, ext_id, modified, hash, bin_len, bin_rdr); } - public void Thm_insert(Fsd_thm_itm rv, byte[] dir, byte[] fil, int ext_id, int w, int h, double thumbtime, int page, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { - ary[insert_to_mnt].Thm_insert(rv, dir, fil, ext_id, w, h, thumbtime, page, modified, hash, bin_len, bin_rdr); + public void Thm_insert(byte[] dir, byte[] fil, int ext_id, int w, int h, double time, int page, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {Thm_insert(Fsd_thm_itm.new_(), dir, fil, ext_id, w, h, time, page, modified, hash, bin_len, bin_rdr);} + public void Thm_insert(Fsd_thm_itm rv, byte[] dir, byte[] fil, int ext_id, int w, int h, double time, int page, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { + ary[insert_to_mnt].Thm_insert(rv, dir, fil, ext_id, w, h, time, page, modified, hash, bin_len, bin_rdr); } + public void Img_insert(byte[] dir, byte[] fil, int ext_id, int img_w, int img_h, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) {Img_insert(new Fsd_img_itm(), dir, fil, ext_id, img_w, img_h, modified, hash, bin_len, bin_rdr);} public void Img_insert(Fsd_img_itm rv, byte[] dir, byte[] fil, int ext_id, int img_w, int img_h, DateAdp modified, String hash, long bin_len, gplx.ios.Io_stream_rdr bin_rdr) { ary[insert_to_mnt].Img_insert(rv, dir, fil, ext_id, modified, hash, bin_len, bin_rdr, img_w, img_h); } diff --git a/400_xowa/src/gplx/xowa/Xoa_app_.java b/400_xowa/src/gplx/xowa/Xoa_app_.java index 93f3ea7f7..7afa943d2 100644 --- a/400_xowa/src/gplx/xowa/Xoa_app_.java +++ b/400_xowa/src/gplx/xowa/Xoa_app_.java @@ -26,7 +26,7 @@ public class Xoa_app_ { boot_mgr.Run(args); } public static final String Name = "xowa"; - public static final String Version = "2.3.1.1"; + public static final String Version = "2.3.2.1"; public static String Build_date = "2012-12-30 00:00:00"; public static String Op_sys; public static String User_agent = ""; @@ -46,7 +46,6 @@ public class Xoa_app_ { 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; public static final byte Mode_console = 0, Mode_gui = 1, Mode_http = 2; } diff --git a/400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_toggle_itm.java b/400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_toggle_itm.java index d81bf5605..5eb84c96b 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_toggle_itm.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_toggle_itm.java @@ -19,12 +19,13 @@ package gplx.xowa.apis.xowa.html; import gplx.*; import gplx.xowa.*; import gplx public class Xoapi_toggle_itm implements GfoInvkAble { public Xoapi_toggle_itm(byte[] key_bry) {this.key_bry = key_bry;} public byte[] Key_bry() {return key_bry;} private byte[] key_bry; + public byte[] Heading_bry() {return heading_bry;} private byte[] heading_bry; public byte[] Icon_src() {return icon_src;} private byte[] icon_src = Bry_.Empty; public byte[] Icon_title() {return icon_title;} private byte[] icon_title = Bry_.Empty; public byte[] Elem_display() {return elem_display;} private byte[] elem_display = Bry_.Empty; public byte[] Html_toggle_hdr_cls() {return html_toggle_hdr_cls;} public Xoapi_toggle_itm Html_toggle_hdr_cls_(byte[] v) {html_toggle_hdr_cls = v; return this;} private byte[] html_toggle_hdr_cls = Bry_.Empty; public boolean Visible() {return visible;} private boolean visible; - public Xoapi_toggle_itm Init(Xowe_wiki wiki) { + public Xoapi_toggle_itm Init(Xowe_wiki wiki, byte[] heading_bry) { if (Img_src_y == null) { Io_url img_dir = wiki.Appe().User().Fsys_mgr().App_img_dir().GenSubDir_nest("window", "portal"); Img_src_y = img_dir.GenSubFil("twisty_down.png").To_http_file_bry(); @@ -34,6 +35,7 @@ public class Xoapi_toggle_itm implements GfoInvkAble { byte[] img_title_msg = visible ? Img_title_msg_y : Img_title_msg_n; icon_title = wiki.Msg_mgr().Val_by_key_obj(img_title_msg); elem_display = visible ? Img_display_y : Img_display_n; + this.heading_bry = heading_bry; Html_toggle_gen(); return this; } @@ -65,8 +67,8 @@ public class Xoapi_toggle_itm implements GfoInvkAble { } Bry_fmtr fmtr = Bry_fmtr.new_(); Bry_bfr bfr = Bry_bfr.new_(8); html_toggle_btn - = fmtr.Fmt_("") - .Keys_("key", "src", "title").Bld_bry_many(bfr, key_bry, icon_src, icon_title) + = fmtr.Fmt_("~{heading}") + .Keys_("key", "src", "title", "heading").Bld_bry_many(bfr, key_bry, icon_src, icon_title, heading_bry) ; html_toggle_hdr = fmtr.Fmt_(" id='~{key}-toggle-elem' style='~{display}~{toggle_hdr_cls}'") 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 e4f109d41..d73dc9422 100644 --- a/400_xowa/src/gplx/xowa/bldrs/Db_mgr_fxt.java +++ b/400_xowa/src/gplx/xowa/bldrs/Db_mgr_fxt.java @@ -21,7 +21,7 @@ import gplx.dbs.*; import gplx.dbs.qrys.*; import gplx.xowa.dbs.*; import gplx.x public class Db_mgr_fxt { public Db_mgr_fxt Ctor_fsys() {bldr_fxt = new Xob_fxt().Ctor(Xoa_test_.Url_root().GenSubDir("root")); return this;} public Db_mgr_fxt Ctor_mem() {bldr_fxt = new Xob_fxt().Ctor_mem(); return this;} private Xob_fxt bldr_fxt; - public Xodb_page page_(int id, String modified_on, boolean type_redirect, int text_len) {return new Xodb_page().Id_(id).Modified_on_(DateAdp_.parse_gplx(modified_on)).Type_redirect_(type_redirect).Text_len_(text_len);} + public Xodb_page page_(int id, String modified_on, boolean type_redirect, int text_len) {return new Xodb_page().Id_(id).Modified_on_(DateAdp_.parse_gplx(modified_on)).Redirected_(type_redirect).Wtxt_len_(text_len);} public Xowe_wiki Wiki() {return bldr_fxt.Wiki();} public Xob_bldr Bldr() {return bldr_fxt.Bldr();} public Db_mgr_fxt doc_ary_(Xodb_page... v) {bldr_fxt.doc_ary_(v); return this;} @@ -56,14 +56,14 @@ public class Db_mgr_fxt { wiki.Db_mgr_as_sql().Load_mgr().Load_by_ttl(actl, ns, ttl_bry); Tfds.Eq(expd.Id(), actl.Id()); Tfds.Eq_date(expd.Modified_on(), actl.Modified_on()); - Tfds.Eq(expd.Type_redirect(), actl.Type_redirect()); - Tfds.Eq(expd.Text_len(), actl.Text_len()); + Tfds.Eq(expd.Redirected(), actl.Redirected()); + Tfds.Eq(expd.Wtxt_len(), actl.Wtxt_len()); } private Xodb_page actl = new Xodb_page(); public void Test_load_page(int ns_id, int page_id, String expd) { Xowe_wiki wiki = bldr_fxt.Wiki(); Xow_ns ns = wiki.Ns_mgr().Ids_get_or_null(ns_id); wiki.Db_mgr_as_sql().Load_mgr().Load_page(actl.Id_(page_id), ns, false); - Tfds.Eq(expd, String_.new_ascii_(actl.Text())); + Tfds.Eq(expd, String_.new_ascii_(actl.Wtxt())); } public void Test_search(String search_word_str, int... expd) { Xowe_wiki wiki = bldr_fxt.Wiki(); diff --git a/400_xowa/src/gplx/xowa/bldrs/Xob_base_fxt.java b/400_xowa/src/gplx/xowa/bldrs/Xob_base_fxt.java index f142eaf10..6ea0c4f2d 100644 --- a/400_xowa/src/gplx/xowa/bldrs/Xob_base_fxt.java +++ b/400_xowa/src/gplx/xowa/bldrs/Xob_base_fxt.java @@ -35,7 +35,7 @@ public class Xob_base_fxt { public Xowe_wiki Wiki() {return wiki;} private Xowe_wiki wiki; public GfoInvkAble Bldr_itm() {return bldr_itm;} GfoInvkAble bldr_itm; public Xodb_page page_(String ttl) {return page_(ttl, "");} - public Xodb_page page_(String ttl, String text) {return new Xodb_page().Ttl_(Bry_.new_utf8_(ttl), wiki.Ns_mgr()).Text_(Bry_.new_utf8_(text));} + public Xodb_page page_(String ttl, String text) {return new Xodb_page().Ttl_(Bry_.new_utf8_(ttl), wiki.Ns_mgr()).Wtxt_(Bry_.new_utf8_(text));} public Io_fil_chkr meta_(String url, String data) {return new Io_fil_chkr(Io_url_.mem_fil_(url), data);} public void Init_fxts(Xob_bldr bldr, Xowe_wiki wiki, Xob_base_fxt... fxt_ary) { int fxt_ary_len = fxt_ary.length; diff --git a/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_mgr.java b/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_mgr.java index cdcb554cc..0f4c8e52f 100644 --- a/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_mgr.java +++ b/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_mgr.java @@ -20,6 +20,7 @@ import gplx.core.primitives.*; import gplx.xowa.wikis.*; import gplx.xowa.xtns.wdatas.imports.*; import gplx.xowa.bldrs.imports.ctgs.*; import gplx.xowa.bldrs.imports.*; import gplx.xowa.bldrs.oimgs.*; import gplx.xowa.bldrs.wikis.redirects.*; import gplx.xowa.bldrs.wikis.images.*; import gplx.xowa.bldrs.files.*; import gplx.xowa.files.origs.*; +import gplx.xowa.html.hdumps.bldrs.*; public class Xob_cmd_mgr implements GfoInvkAble { public Xob_cmd_mgr(Xob_bldr bldr) {this.bldr = bldr;} private Xob_bldr bldr; public void Clear() {list.Clear(); dump_rdrs.Clear();} @@ -60,6 +61,7 @@ public class Xob_cmd_mgr implements GfoInvkAble { else if (String_.Eq(cmd_key, Xob_download_wkr.KEY_oimg)) return Add(new Xob_download_wkr(bldr, wiki)); else if (String_.Eq(cmd_key, Xob_page_regy_cmd.KEY_oimg)) return Add(new Xob_page_regy_cmd(bldr, wiki)); else if (String_.Eq(cmd_key, Xob_cmd_exec_sql.KEY)) return Add(new Xob_cmd_exec_sql(bldr, wiki)); + else if (String_.Eq(cmd_key, Xob_rl_regy_cmd.Cmd_key_const)) return Add(new Xob_rl_regy_cmd(bldr, wiki)); else if (String_.Eq(cmd_key, Xob_redirect_cmd.KEY_redirect)) return Add(new Xob_redirect_cmd(bldr, wiki)); else if (String_.Eq(cmd_key, Xob_wiki_image_sql.KEY)) return Add(new Xob_wiki_image_sql(bldr, wiki)); diff --git a/400_xowa/src/gplx/xowa/bldrs/Xob_fxt.java b/400_xowa/src/gplx/xowa/bldrs/Xob_fxt.java index 01a9939dd..d08097f16 100644 --- a/400_xowa/src/gplx/xowa/bldrs/Xob_fxt.java +++ b/400_xowa/src/gplx/xowa/bldrs/Xob_fxt.java @@ -52,7 +52,7 @@ public class Xob_fxt { public Xob_fxt doc_ary_(Xodb_page... v) {doc_ary = v; return this;} private Xodb_page[] doc_ary; public Xodb_page doc_wo_date_(int id, String title, String text) {return doc_(id, "2012-01-02 13:14", title, text);} public Xodb_page doc_(int id, String date, String title, String text) { - Xodb_page rv = new Xodb_page().Id_(id).Ttl_(Bry_.new_utf8_(title), wiki.Ns_mgr()).Text_(Bry_.new_utf8_(text)); + Xodb_page rv = new Xodb_page().Id_(id).Ttl_(Bry_.new_utf8_(title), wiki.Ns_mgr()).Wtxt_(Bry_.new_utf8_(text)); int[] modified_on = new int[7]; dateParser.Parse_iso8651_like(modified_on, date); rv.Modified_on_(DateAdp_.seg_(modified_on)); 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 32078d89c..478f60f2d 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 @@ -168,7 +168,7 @@ public class Xob_fsdb_make extends Xob_itm_basic_base implements Xob_cmd { rdr = Xob_xfer_regy_tbl.Select_by_lnki_page_id(conn, page_id_val, select_interval); while (rdr.MoveNextPeer()) { pages_found = true; // at least one page found; set true - Xodb_tbl_oimg_xfer_itm itm = Xodb_tbl_oimg_xfer_itm.new_rdr_(rdr); + Xodb_tbl_oimg_xfer_itm itm = Xodb_tbl_oimg_xfer_itm.new_rdr_( rdr); if (itm.Lnki_page_id() == page_id_val // if same page_id but lnki_id < last, then ignore; needed b/c select selects by page_id, and need to be handle breaks between pages && itm.Lnki_id() <= lnki_id_val) continue; @@ -310,20 +310,17 @@ class Xodb_tbl_oimg_xfer_itm extends Xof_fsdb_itm { public int Lnki_id() {ret rv.lnki_id = rdr.ReadInt(Xob_xfer_regy_tbl.Fld_lnki_id); rv.lnki_page_id = rdr.ReadInt(Xob_xfer_regy_tbl.Fld_lnki_page_id); rv.lnki_ext_id = rdr.ReadInt(Xob_xfer_regy_tbl.Fld_lnki_ext); - rv.File_is_orig_ (rdr.ReadByte(Xob_xfer_regy_tbl.Fld_file_is_orig) == Bool_.Y_byte); - byte[] ttl = rdr.ReadBryByStr(Xob_xfer_regy_tbl.Fld_lnki_ttl); - rv.Ctor_by_orig - ( rdr.ReadByte(Xob_xfer_regy_tbl.Fld_orig_repo) - , ttl + rv.Ctor_by_fsdb_make + ( rdr.ReadBryByStr(Xob_xfer_regy_tbl.Fld_lnki_ttl) + , rdr.ReadInt(Xob_xfer_regy_tbl.Fld_file_w), rdr.ReadInt(Xob_xfer_regy_tbl.Fld_file_h) // set lnki_size; Xof_bin_mgr uses lnki_size + , Xof_lnki_time.Db_load_double(rdr, Xob_xfer_regy_tbl.Fld_lnki_time) + , Xof_lnki_page.Db_load_int(rdr, Xob_xfer_regy_tbl.Fld_lnki_page) + , rdr.ReadByte(Xob_xfer_regy_tbl.Fld_orig_repo) , rdr.ReadInt(Xob_xfer_regy_tbl.Fld_orig_w) , rdr.ReadInt(Xob_xfer_regy_tbl.Fld_orig_h) , Bry_.Empty + , rdr.ReadByte(Xob_xfer_regy_tbl.Fld_file_is_orig) == Bool_.Y_byte ); - rv.Lnki_ttl_(ttl); - rv.Html_size_(rdr.ReadInt(Xob_xfer_regy_tbl.Fld_file_w), rdr.ReadInt(Xob_xfer_regy_tbl.Fld_file_h)); // set html_size as file_size (may try to optimize later by removing similar thumbs (EX: 220,221 -> 220)) - rv.Lnki_size_(rdr.ReadInt(Xob_xfer_regy_tbl.Fld_file_w), rdr.ReadInt(Xob_xfer_regy_tbl.Fld_file_h)); // set lnki_size; Xof_bin_mgr uses lnki_size; - rv.Lnki_page_ (Xof_doc_page.Db_load_int(rdr, Xob_xfer_regy_tbl.Fld_lnki_page)); - rv.Lnki_time_ (Xof_doc_thumb.Db_load_double(rdr, Xob_xfer_regy_tbl.Fld_lnki_time)); return rv; } } diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_tbl.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_tbl.java index c43da5d38..2ff9c300e 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_tbl.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_lnki_temp_tbl.java @@ -32,7 +32,7 @@ class Xob_lnki_temp_tbl { .Val_int(w) .Val_int(h) .Val_double(upright) - .Val_double(gplx.xowa.files.Xof_doc_thumb.Db_save_double(thumbtime)) + .Val_double(gplx.xowa.files.Xof_lnki_time.Db_save_double(thumbtime)) .Val_int(page) .Exec_insert(); } 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 f9328a960..32fcfa763 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 @@ -29,6 +29,7 @@ public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xopg_redlink private int[] ns_ids = Int_.Ary(Xow_ns_.Id_main);// , Xow_ns_.Id_category, Xow_ns_.Id_template private boolean wiki_ns_file_is_case_match_all = true; private Xowe_wiki commons_wiki; private Xob_hdump_bldr hdump_bldr; private long hdump_max = Io_mgr.Len_gb; + private Xob_link_dump_cmd link_dump_cmd; public Xob_lnki_temp_wkr(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} @Override public String Cmd_key() {return KEY_oimg;} public static final String KEY_oimg = "file.lnki_temp"; @Override public byte Init_redirect() {return Bool_.N_byte;} @@ -73,12 +74,14 @@ public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xopg_redlink if (gen_hdump) { hdump_bldr = new Xob_hdump_bldr(wiki.Db_mgr_as_sql(), conn, hdump_max); hdump_bldr.Bld_init(); + link_dump_cmd = new Xob_link_dump_cmd(); + link_dump_cmd.Init_by_wiki(wiki); } conn.Txn_mgr().Txn_bgn_if_none(); log_mgr.Txn_bgn(); } @Override public void Exec_pg_itm_hook(Xow_ns ns, Xodb_page db_page, byte[] page_src) { - Xoa_ttl ttl = Xoa_ttl.parse_(wiki, ns.Gen_ttl(db_page.Ttl_wo_ns())); + Xoa_ttl ttl = Xoa_ttl.parse_(wiki, ns.Gen_ttl(db_page.Ttl_page_db())); byte[] ttl_bry = ttl.Page_db(); byte page_tid = Xow_page_tid.Identify(wiki.Domain_tid(), ns.Id(), ttl_bry); if (page_tid != Xow_page_tid.Tid_wikitext) return; // ignore js, css, lua, json @@ -98,16 +101,30 @@ public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xopg_redlink if (gen_hdump) { page.Root_(root); hdump_bldr.Insert_page(page); + link_dump_cmd.Page_bgn(page.Revision_data().Id()); + ListAdp lnki_list = page.Lnki_list(); + int len = lnki_list.Count(); + for (int i = 0; i < len; ++i) { + Xop_lnki_tkn lnki = (Xop_lnki_tkn)lnki_list.FetchAt(i); + Xoa_ttl trg_ttl = lnki.Ttl(); + link_dump_cmd.Add(lnki.Html_id(), trg_ttl.Ns().Id(), trg_ttl.Page_db()); + } } root.Clear(); } } @Override public void Exec_commit_hook() { conn.Txn_mgr().Txn_end_all_bgn_if_none(); // save lnki_temp - if (gen_hdump) hdump_bldr.Commit(); + if (gen_hdump) { + hdump_bldr.Commit(); + link_dump_cmd.Wkr_commit(); + } } @Override public void Exec_end_hook() { - if (gen_hdump) hdump_bldr.Bld_term(); + if (gen_hdump) { + hdump_bldr.Bld_term(); + link_dump_cmd.Wkr_end(); + } Gfo_usr_dlg_._.Warn_many("", "", invoke_wkr.Err_filter_mgr().Print()); wiki.Appe().Log_mgr().Txn_end(); conn.Txn_mgr().Txn_end(); @@ -116,15 +133,15 @@ public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xopg_redlink if (lnki.Ttl().ForceLiteralLink()) return; // ignore literal links which creat a link to file, but do not show the image; EX: [[:File:A.png|thumb|120px]] creates a link to File:A.png, regardless of other display-oriented args byte[] ttl = lnki.Ttl().Page_db(); Xof_ext ext = Xof_ext_.new_by_ttl_(ttl); - double lnki_thumbtime = lnki.Thumbtime(); + double lnki_thumbtime = lnki.Time(); int lnki_page = lnki.Page(); byte[] ttl_commons = Xto_commons(wiki_ns_file_is_case_match_all, commons_wiki, ttl); - if ( Xof_doc_page.Null_n(lnki_page) // page set - && Xof_doc_thumb.Null_n(lnki_thumbtime)) // thumbtime set + if ( Xof_lnki_page.Null_n(lnki_page) // page set + && Xof_lnki_time.Null_n(lnki_thumbtime)) // thumbtime set usr_dlg.Warn_many("", "", "page and thumbtime both set; this may be an issue with fsdb: page=~{0} ttl=~{1}", ctx.Cur_page().Ttl().Page_db_as_str(), String_.new_utf8_(ttl)); if (lnki.Ns_id() == Xow_ns_.Id_media) lnki_src_tid = Xob_lnki_src_tid.Tid_media; - Xob_lnki_temp_tbl.Insert(stmt, ctx.Cur_page().Revision_data().Id(), ttl, ttl_commons, Byte_.By_int(ext.Id()), lnki.Lnki_type(), lnki_src_tid, lnki.Lnki_w(), lnki.Lnki_h(), lnki.Upright(), lnki_thumbtime, lnki_page); + Xob_lnki_temp_tbl.Insert(stmt, ctx.Cur_page().Revision_data().Id(), ttl, ttl_commons, Byte_.By_int(ext.Id()), lnki.Lnki_type(), lnki_src_tid, lnki.W(), lnki.H(), lnki.Upright(), lnki_thumbtime, lnki_page); } @Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_wdata_enabled_)) wdata_enabled = m.ReadYn("v"); diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_qry_cmd.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_qry_cmd.java index b315ac1f7..8d003a14e 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_qry_cmd.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_orig_qry_cmd.java @@ -28,12 +28,12 @@ public class Xob_orig_qry_cmd extends Xob_itm_basic_base implements Xob_cmd { Xob_bmk_mgr bmk = new Xob_bmk_mgr(); bmk.Init(conn, this.Cmd_key(), true, false, true); bmk.Load(); - Xof_fsdb_itm itm = new Xof_fsdb_itm(); +// Xof_fsdb_itm itm = new Xof_fsdb_itm(); DataRdr rdr = DataRdr_.Null; try { // rdr = Select(conn, bmk.Repo_prv(), bmk.Ttl_prv()); while (rdr.MoveNextPeer()) { - Load_itm(itm, rdr); + // Load_itm(itm, rdr); // QueryItm } } @@ -48,9 +48,6 @@ public class Xob_orig_qry_cmd extends Xob_itm_basic_base implements Xob_cmd { } */ } - private void Load_itm(Xof_fsdb_itm itm, DataRdr rdr) { - itm.Lnki_ttl_(null); - } public DataRdr Select(Db_conn p, byte prv_repo_id, byte[] prv_ttl) { String sql = String_.Concat_lines_nl_skip_last ( "SELECT lnki_ttl" diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_cmd_orig.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_cmd_orig.java index ced767021..d9e22f44c 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_cmd_orig.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_cmd_orig.java @@ -53,8 +53,8 @@ public class Xob_xfer_temp_cmd_orig extends Xob_itm_basic_base implements Xob_cm , orig_w, orig_h , orig_w, orig_h // file_w, file_h is same as orig_w,orig_h; i.e.: make same file_w as orig_w , Xof_img_size.Null, Xof_img_size.Null // html_w, html_h is -1; i.e.: will not be displayed in page at specific size (this matches logic in Xob_xfer_temp_cmd_thumb) - , Xof_doc_thumb.Null - , Xof_doc_page.Null + , Xof_lnki_time.Null + , Xof_lnki_page.Null , 0); } conn.Txn_mgr().Txn_end_all(); diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_itm.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_itm.java index 75825f672..944f9e2a2 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_itm.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_itm.java @@ -47,8 +47,8 @@ class Xob_xfer_temp_itm { = orig_w = orig_h = orig_page_id = Int_.Neg1; join_ttl = redirect_src = orig_media_type = null; lnki_upright = Xop_lnki_tkn.Upright_null; - lnki_thumbtime = Xof_doc_thumb.Null; - lnki_page = Xof_doc_page.Null; + lnki_thumbtime = Xof_lnki_time.Null; + lnki_page = Xof_lnki_page.Null; } public void Load(DataRdr rdr) { lnki_id = rdr.ReadInt(Xob_lnki_regy_tbl.Fld_lnki_id); @@ -59,7 +59,7 @@ class Xob_xfer_temp_itm { lnki_w = rdr.ReadInt(Xob_lnki_regy_tbl.Fld_lnki_w); lnki_h = rdr.ReadInt(Xob_lnki_regy_tbl.Fld_lnki_h); lnki_upright = rdr.ReadDouble(Xob_lnki_regy_tbl.Fld_lnki_upright); - lnki_thumbtime = Xof_doc_thumb.Db_load_double(rdr, Xob_lnki_regy_tbl.Fld_lnki_time); + lnki_thumbtime = Xof_lnki_time.Db_load_double(rdr, Xob_lnki_regy_tbl.Fld_lnki_time); lnki_page = rdr.ReadInt(Xob_lnki_regy_tbl.Fld_lnki_page); lnki_count = rdr.ReadInt(Xob_lnki_regy_tbl.Fld_lnki_count); orig_repo = rdr.ReadByte(Xob_orig_regy_tbl.Fld_orig_repo); @@ -89,13 +89,13 @@ class Xob_xfer_temp_itm { // } lnki_ext = orig_ext_id; orig_media_type_tid = Xof_media_type.Xto_byte(orig_media_type); - if ( Xof_doc_thumb.Null_n(lnki_thumbtime) // thumbtime defined + if ( Xof_lnki_time.Null_n(lnki_thumbtime) // thumbtime defined && orig_media_type_tid != Xof_media_type.Tid_video // video can have thumbtime ) - lnki_thumbtime = Xof_doc_thumb.Null; // set thumbtime to NULL; actually occurs for one file: [[File:Crash.arp.600pix.jpg|thumb|thumbtime=2]] - if ( Xof_doc_page.Null_n(lnki_page) + lnki_thumbtime = Xof_lnki_time.Null; // set thumbtime to NULL; actually occurs for one file: [[File:Crash.arp.600pix.jpg|thumb|thumbtime=2]] + if ( Xof_lnki_page.Null_n(lnki_page) && !Xof_ext_.Id_supports_page(orig_ext_id)) // djvu / pdf can have page parameters, which are currently being stored in thumbtime; DATE:2014-01-18 - lnki_page = Xof_doc_page.Null; + lnki_page = Xof_lnki_page.Null; if (orig_page_id == -1) { // no orig found (i.e.: not in local's / remote's image.sql); chk_tid = Chk_tid_orig_page_id_is_null; return false; 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 9e432a917..5e16def34 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 @@ -54,7 +54,7 @@ public class Xob_xfer_temp_itm_tst { ( KeyVal_.new_(Xob_orig_regy_tbl.Fld_orig_file_ext , Xof_ext_.Id_jpg) , KeyVal_.new_(Xob_lnki_regy_tbl.Fld_lnki_time , (double)3) ); - fxt.Test_lnki_thumbtime(Xof_doc_thumb.Null); + fxt.Test_lnki_thumbtime(Xof_lnki_time.Null); fxt.Reset().Test_bgn ( KeyVal_.new_(Xob_orig_regy_tbl.Fld_orig_media_type , Xof_media_type.Name_video) @@ -67,7 +67,7 @@ public class Xob_xfer_temp_itm_tst { ( KeyVal_.new_(Xob_orig_regy_tbl.Fld_orig_file_ext , Xof_ext_.Id_jpg) , KeyVal_.new_(Xob_lnki_regy_tbl.Fld_lnki_page , 3) ); - fxt.Test_lnki_page(Xof_doc_page.Null); + fxt.Test_lnki_page(Xof_lnki_page.Null); fxt.Reset().Test_bgn ( KeyVal_.new_(Xob_orig_regy_tbl.Fld_orig_file_ext , Xof_ext_.Id_pdf) @@ -136,7 +136,7 @@ class Xob_xfer_temp_itm_fxt { ( Xof_ext_.Id_png, 1, Xof_repo_itm.Repo_remote , "A.png", Xof_ext_.Id_png, "A.png", Xop_lnki_type.Id_thumb, Xob_lnki_src_tid.Tid_file , 220, 200, 1, 2, 440, 400, 3 - , Xop_lnki_tkn.Upright_null, Xof_doc_thumb.Null, Xof_doc_page.Null + , Xop_lnki_tkn.Upright_null, Xof_lnki_time.Null, Xof_lnki_page.Null , Xof_media_type.Name_bitmap, "png" )); GfoNdeList subs = GfoNdeList_.new_(); diff --git a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_tbl.java b/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_tbl.java index 6d524d9b0..35240bf0d 100644 --- a/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_tbl.java +++ b/400_xowa/src/gplx/xowa/bldrs/files/Xob_xfer_temp_tbl.java @@ -38,7 +38,7 @@ class Xob_xfer_temp_tbl { .Val_int(file_h) .Val_int(html_w) .Val_int(html_h) - .Val_double(Xof_doc_thumb.Db_save_double(thumbtime)) + .Val_double(Xof_lnki_time.Db_save_double(thumbtime)) .Val_int(page) .Val_int(count) .Exec_insert(); 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 f7a1cad9e..753ecac27 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 @@ -60,33 +60,33 @@ public class Xob_page_sql extends Xob_itm_basic_base implements Xobd_wkr, GfoInv int page_id = page.Id(); DateAdp modified = page.Modified_on(); if (modified.compareTo(modified_latest) == CompareAble_.More) modified_latest = modified; - byte[] text = page.Text(); - int text_len = page.Text_len(); + byte[] text = page.Wtxt(); + int text_len = page.Wtxt_len(); Xoa_ttl redirect_ttl = redirect_mgr.Extract_redirect(text, text_len); boolean redirect = redirect_ttl != null; - page.Type_redirect_(redirect); + page.Redirected_(redirect); Xow_ns ns = page.Ns(); int random_int = ns.Count() + 1; ns.Count_(random_int); if (dg_enabled) { - if (dg_match_mgr.Match(1, page_id, ns.Id(), page.Ttl_wo_ns(), page.Ttl_w_ns(), wiki.Lang(), text)) return; + if (dg_match_mgr.Match(1, page_id, ns.Id(), page.Ttl_page_db(), page.Ttl_full_db(), wiki.Lang(), text)) return; } text = zip_mgr.Zip(data_storage_format, text); int text_stmt_idx = text_stmts_mgr.Stmt_by_ns(ns.Bldr_file_idx(), text.length); // NOTE: was text.length, but want text_len which is original page_len, not compressed; DATE:2014-08-04 Db_stmt text_stmt = text_stmts_mgr.Stmt_at(text_stmt_idx); try { - db_mgr.Page_create(page_stmt, text_stmt, page_id, page.Ns_id(), page.Ttl_wo_ns(), redirect, modified, text, random_int, text_stmt_idx); + db_mgr.Page_create(page_stmt, text_stmt, page_id, page.Ns_id(), page.Ttl_page_db(), redirect, modified, text, random_int, text_stmt_idx); } catch (Exception e) { - usr_dlg.Warn_many("", "", "failed to insert page: id=~{0} ns=~{1} title=~{2} error=~{3}", page.Id(), page.Ns_id(), String_.new_utf8_(page.Ttl_wo_ns()), Err_.Message_gplx_brief(e)); + usr_dlg.Warn_many("", "", "failed to insert page: id=~{0} ns=~{1} title=~{2} error=~{3}", page.Id(), page.Ns_id(), String_.new_utf8_(page.Ttl_page_db()), Err_.Message_gplx_brief(e)); page_stmt.Reset_stmt(); // must new stmt variable, else java.sql.SQLException: "statement is not executing" text_stmt.Reset_stmt(); // must new stmt variable, else java.sql.SQLException: "statement is not executing" } if (redirect && redirect_id_enabled) { - redirect_tbl.Insert(page_id, page.Ttl_wo_ns(), redirect_ttl); + redirect_tbl.Insert(page_id, page.Ttl_page_db(), redirect_ttl); } ++page_count_all; - if (ns.Id_main() && !page.Type_redirect()) ++page_count_main; + if (ns.Id_main() && !page.Redirected()) ++page_count_main; if (page_count_all % txn_commit_interval == 0) { Db_conn conn = text_stmts_mgr.Conn_at(text_stmt_idx); conn.Txn_mgr().Txn_end_all_bgn_if_none(); diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_txt.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_txt.java index 10166aece..da04eedd1 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_txt.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_txt.java @@ -34,9 +34,9 @@ public class Xob_page_txt extends Xob_itm_dump_base implements Xobd_wkr, GfoInvk Xob_xdat_file_wtr[] page_wtr_regy = new Xob_xdat_file_wtr[Ns_ordinal_max]; static final int Ns_ordinal_max = Xow_ns_mgr_.Ordinal_max; // ASSUME: no more than 128 ns in a wiki Xob_stat_type data_rpt_typ; Xob_stat_mgr stat_mgr = new Xob_stat_mgr(); byte page_storage_type; public void Wkr_run(Xodb_page page) { - int id = page.Id(); byte[] ttl_wo_ns = page.Ttl_wo_ns(), text = page.Text(); int ttl_len = ttl_wo_ns.length, text_len = text.length; Xow_ns ns = page.Ns(); + int id = page.Id(); byte[] ttl_wo_ns = page.Ttl_page_db(), text = page.Wtxt(); int ttl_len = ttl_wo_ns.length, text_len = text.length; Xow_ns ns = page.Ns(); boolean redirect = redirect_mgr.Is_redirect(text, text_len); - page.Type_redirect_(redirect); + page.Redirected_(redirect); // page: EX: \t123\t2012-06-09\ttitle\ttext\n; NOTE: 512k * ~20 ns = 10 MB max memory; no need for intermediary flushing Xob_xdat_file_wtr page_wtr = Page_wtr_get(ns); @@ -47,7 +47,7 @@ public class Xob_page_txt extends Xob_itm_dump_base implements Xobd_wkr, GfoInvk // idx: EX: 00100|aB64|Ttl; Xob_tmp_wtr ttl_wtr = ttl_wtr_mgr.Get_or_new(ns); int file_idx = page_wtr.Fil_idx(), row_idx = page_wtr.Idx_pos() - ListAdp_.LastIdxOffset; - page.Text_db_id_(file_idx).Db_row_idx_(row_idx); + page.Wtxt_db_id_(file_idx).Tdb_row_idx_(row_idx); if (ttl_wtr.FlushNeeded(Xodb_page_.Txt_ttl_len__fixed + ttl_len)) ttl_wtr.Flush(bldr.Usr_dlg()); Xodb_page_.Txt_ttl_save(ttl_wtr.Bfr(), id, file_idx, row_idx, redirect, text_len, ttl_wo_ns); } 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 e346b2d99..084e836cb 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 @@ -34,7 +34,7 @@ public abstract class Xob_search_base extends Xob_itm_dump_base implements Xobd_ public void Wkr_run(Xodb_page page) { // if (page.Ns_id() != Xow_ns_.Id_main) return; // limit to main ns for now try { - byte[] ttl = page.Ttl_wo_ns(); + byte[] ttl = page.Ttl_page_db(); byte[][] words = Split(lang, list, dump_bfr, ttl); Xob_tmp_wtr wtr = tmp_wtr_mgr.Get_or_new(ns_main == null ? page.Ns() : ns_main); int words_len = words.length; @@ -48,7 +48,7 @@ public abstract class Xob_search_base extends Xob_itm_dump_base implements Xobd_ byte[] word = words[i]; wtr.Bfr() .Add(word) .Add_byte(Byte_ascii.Pipe) .Add_base85_len_5(page.Id()) .Add_byte(Byte_ascii.Semic) - .Add_base85_len_5(page.Text().length) .Add_byte(Byte_ascii.NewLine); + .Add_base85_len_5(page.Wtxt().length) .Add_byte(Byte_ascii.NewLine); } } catch (Exception e) {bldr.Usr_dlg().Warn_many("", "", "search_index:fatal error: err=~{0}", Err_.Message_gplx_brief(e));} // never let single page crash entire import } diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_calc_stats.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_calc_stats.java index 7035d3824..7934614eb 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_calc_stats.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_calc_stats.java @@ -98,12 +98,12 @@ public class Xobc_core_calc_stats extends Xob_itm_basic_base implements Xob_cmd int rv = 0; byte[] bry = Io_mgr._.LoadFilBry(fil); Xob_xdat_file xdat_file = new Xob_xdat_file().Parse(bry, bry.length, fil); - Xodb_page page = Xodb_page.tmp_(); + Xodb_page page = Xodb_page.new_tmp(); int count = xdat_file.Count(); for (int i = 0; i < count; i++) { byte[] ttl_bry = xdat_file.Get_bry(i); Xodb_page_.Txt_ttl_load(page, ttl_bry); - rv += page.Type_redirect() ? 0 : 1; + rv += page.Redirected() ? 0 : 1; } return rv; } diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_make_id.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_make_id.java index 51ba08f47..671f4be2e 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_make_id.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_core_make_id.java @@ -25,7 +25,7 @@ public class Xobc_core_make_id extends Xob_itm_dump_base implements Xobd_wkr, Gf this.Init_dump(KEY, wiki.Tdb_fsys_mgr().Site_dir().GenSubDir(Xotdb_dir_info_.Name_id)); } public void Wkr_run(Xodb_page page) { - byte[] ttl = page.Ttl_wo_ns(); + byte[] ttl = page.Ttl_page_db(); if (dump_bfr.Len() + row_fixed_len + ttl.length > dump_fil_len) Io_mgr._.AppendFilBfr(dump_url_gen.Nxt_url(), dump_bfr); Xodb_page_.Txt_id_save(dump_bfr, page); } diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_tst.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_tst.java index 97d906656..12ce0e22e 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xobc_tst.java @@ -178,7 +178,7 @@ public class Xobc_tst { ListAdp actl = ListAdp_.new_(); Xodb_page page = new Xodb_page(); while (parser.Read(page)) { - actl.Add(String_.new_utf8_(page.Text())); + actl.Add(String_.new_utf8_(page.Wtxt())); } Tfds.Eq_ary(expd, actl.XtoStrAry()); } 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 7c06887fe..01d22466c 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 @@ -31,7 +31,7 @@ public class Xob_category_registry_sql implements Xob_cmd { Xodb_mgr_sql db_mgr = Xodb_mgr_sql.Get_or_load(wiki); Db_conn conn = db_mgr.Core_data_mgr().Conn_core(); - Db_qry_select qry = Db_qry_select.new_() + Db_qry__select_cmd qry = Db_qry__select_cmd.new_() .Cols_(Xodb_page_tbl.Fld_page_title, Xodb_page_tbl.Fld_page_id) .From_(Xodb_page_tbl.Tbl_name) .Where_(Db_crt_.eq_(Xodb_page_tbl.Fld_page_ns, Xow_ns_.Id_category)) 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 d29f5380d..b007a73bc 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 @@ -65,7 +65,7 @@ public abstract class Xob_ctg_v1_base extends Xob_itm_dump_base implements Xobd_ } } @gplx.Virtual public void Log(byte err_tid, Xodb_page page, byte[] src, int ctg_bgn) { - String title = String_.new_utf8_(page.Ttl_w_ns()); + String title = String_.new_utf8_(page.Ttl_full_db()); int ctg_end = ctg_bgn + 40; if (ctg_end > src.length) ctg_end = src.length; String ctg_str = String_.Replace(String_.new_utf8_(src, ctg_bgn, ctg_end), "\n", ""); String err = ""; diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_base_tst.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_base_tst.java index 191e3e619..bab20dce7 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_base_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_ctg_v1_base_tst.java @@ -41,7 +41,7 @@ class Xodb_page_wkr_ctg_fxt { byte[] bry = Bry_.new_utf8_("[[Category:"); wkr.Wkr_hooks().Add(bry, bry); mgr.Wkr_add(wkr); - Xodb_page page = new Xodb_page().Text_(src);//.Ttl_(Bry_.new_utf8_("Test"), new Xow_ns_mgr()); + Xodb_page page = new Xodb_page().Wtxt_(src);//.Ttl_(Bry_.new_utf8_("Test"), new Xow_ns_mgr()); mgr.Wkr_bgn(bldr); mgr.Wkr_run(page); byte[][] ttl = (byte[][])wkr.Found().Xto_ary(byte[].class); 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 428be763f..e86ad2800 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 @@ -134,9 +134,9 @@ public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xo if ((exec_count % progress_interval) == 0) usr_dlg.Prog_many("", "", "parsing: ns=~{0} db=~{1} pg=~{2} count=~{3} time=~{4} rate=~{5} ttl=~{6}" , ns.Id(), db_id, page.Id(), exec_count - , Env_.TickCount_elapsed_in_sec(time_bgn), rate_mgr.Rate_as_str(), String_.new_utf8_(page.Ttl_wo_ns())); + , Env_.TickCount_elapsed_in_sec(time_bgn), rate_mgr.Rate_as_str(), String_.new_utf8_(page.Ttl_page_db())); ctx.Clear(); - Exec_pg_itm_hook(ns, page, page.Text()); + Exec_pg_itm_hook(ns, page, page.Wtxt()); 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(); @@ -145,12 +145,12 @@ public abstract class Xob_dump_mgr_base extends Xob_itm_basic_base implements Xo if ((exec_count % poll_interval) == 0) poll_mgr.Poll(); if ((exec_count % commit_interval) == 0) - Exec_commit(ns.Id(), db_id, page.Id(), page.Ttl_wo_ns()); + Exec_commit(ns.Id(), db_id, page.Id(), page.Ttl_page_db()); if ((exec_count % cleanup_interval) == 0) Free(); } 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)); + bldr.Usr_dlg().Warn_many(GRP_KEY, "parse", "failed to parse ~{0} error ~{1}", String_.new_utf8_(page.Ttl_page_db()), Err_.Message_lang(exc)); ctx.App().Utl__bfr_mkr().Clear(); this.Free(); } @@ -230,7 +230,7 @@ class Xob_dump_mgr_base_ { for (int i = 0; i < page_count; i++) { page = (Xodb_page)pages.FetchAt(i); Xot_defn_tmpl defn = new Xot_defn_tmpl(); - defn.Init_by_new(ns_tmpl, ns_tmpl.Gen_ttl(page.Ttl_wo_ns()), page.Text(), null, false); // NOTE: passing null, false; will be overriden later when Parse is called + defn.Init_by_new(ns_tmpl, ns_tmpl.Gen_ttl(page.Ttl_page_db()), page.Wtxt(), null, false); // NOTE: passing null, false; will be overriden later when Parse is called defn_cache.Add(defn, ns_tmpl.Case_match()); ++load_count; if ((load_count % 10000) == 0) usr_dlg.Prog_many("", "", "tmpl_loading: ~{0}", load_count); 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 2f2eb073c..cdf5aa9e4 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 @@ -65,7 +65,7 @@ class Xob_dump_src_id { while (rdr.MoveNextPeer()) { Xodb_page page = New_page(db_mgr, cur_ns, rdr); list.Add(page); - size_len += page.Text_len(); + size_len += page.Wtxt_len(); if (size_len > size_max) break; } @@ -84,12 +84,12 @@ class Xob_dump_src_id { } private static Xodb_page New_page(Xodb_mgr_sql db_mgr, int ns_id, DataRdr rdr) { Xodb_page rv = new Xodb_page(); - rv.Ns_id_(ns_id); rv.Id_(rdr.ReadInt(Xodb_page_tbl.Fld_page_id)); - rv.Ttl_wo_ns_(rdr.ReadBryByStr(Xodb_page_tbl.Fld_page_title)); + rv.Ns_id_(ns_id); + rv.Ttl_page_db_(rdr.ReadBryByStr(Xodb_page_tbl.Fld_page_title)); byte[] old_text = rdr.ReadBry(Xodb_text_tbl.Fld_old_text); old_text = db_mgr.Wiki().Appe().Zip_mgr().Unzip(db_mgr.Data_storage_format(), old_text); - rv.Text_(old_text); + rv.Wtxt_(old_text); return rv; } private static String New_rdr__redirect_clause(byte redirect) { 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 350a79300..57bede480 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 @@ -43,7 +43,7 @@ public class Xob_redirect_cmd extends Xob_dump_mgr_base { Xoa_ttl redirect_ttl = redirect_mgr.Extract_redirect(page_src, page_src.length); byte[] redirect_ttl_bry = Xoa_ttl.Replace_spaces(redirect_ttl.Page_db()); // NOTE: spaces can still exist b/c redirect is scraped from #REDIRECT which sometimes has a mix; EX: "A_b c" redirect_ttl_bry = encoder.Decode(redirect_ttl_bry); - redirect_tbl.Insert(page.Id(), Xoa_ttl.Replace_spaces(page.Ttl_wo_ns()), -1, redirect_ttl.Ns().Id(), redirect_ttl_bry, redirect_ttl.Anch_txt(), 1); + redirect_tbl.Insert(page.Id(), Xoa_ttl.Replace_spaces(page.Ttl_page_db()), -1, redirect_ttl.Ns().Id(), redirect_ttl_bry, redirect_ttl.Anch_txt(), 1); } @Override public void Exec_commit_hook() { conn.Txn_mgr().Txn_end_all_bgn_if_none(); diff --git a/400_xowa/src/gplx/xowa/bldrs/wikis/redirects/Xob_redirect_tbl.java b/400_xowa/src/gplx/xowa/bldrs/wikis/redirects/Xob_redirect_tbl.java index 9a5c16c28..fa66c1de7 100644 --- a/400_xowa/src/gplx/xowa/bldrs/wikis/redirects/Xob_redirect_tbl.java +++ b/400_xowa/src/gplx/xowa/bldrs/wikis/redirects/Xob_redirect_tbl.java @@ -33,15 +33,15 @@ public class Xob_redirect_tbl { public void Update_trg_redirect_id(Io_url core_url, int max_redirected_depth) { Sqlite_engine_.Db_attach(conn, "page_db", core_url.Raw()); // link database with page table conn.Exec_sql(Sql_get_page_data); // fill in page_id, page_ns, page_is_redirect for trg_ttl; EX: Page_A has "#REDIRECT Page_B"; Page_B is in redirect tbl; find its id, ttl, redirect status - for (int i = 0; i < max_redirected_depth; i++) { // loop to find redirected redirects; note that it is bounded by depth (to guard against circular redirects) + for (int i = 0; i < max_redirected_depth; i++) { // loop to find redirected redirects; note that it is bounded by depth (to guard against circular redirects) int affected = conn.Exec_sql(Sql_get_redirect_redirects); // find redirects that are also redirects - if (affected == 0) break; // no more redirected redirects; stop + if (affected == 0) break; // no more redirected redirects; stop conn.Exec_sql(Sql_get_redirect_page_data); // get page data for redirects } Sqlite_engine_.Db_detach(conn, "page_db"); } public void Update_src_redirect_id(Io_url core_url, Db_conn core_provider) { - core_provider.Exec_sql(Sql_ddl__page_redirect_id); // create page.page_redirect_id + core_provider.Exec_sql(Sql_ddl__page_redirect_id); // create page.page_redirect_id Sqlite_engine_.Idx_create(conn, Idx_trg_src); Sqlite_engine_.Db_attach(conn, "page_db", core_url.Raw()); // link database with page table conn.Exec_sql(Sql_update_redirect_id); // update page_redirect_id diff --git a/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_page_bldr.java b/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_page_bldr.java index 4f6d37065..a9c7f3339 100644 --- a/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_page_bldr.java +++ b/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_page_bldr.java @@ -39,7 +39,7 @@ public class Xob_xml_page_bldr { } public Xob_xml_page_bldr Add(Xodb_page doc) { bfr.Add(Indent_2).Add(Xob_xml_parser_.Bry_page_bgn).Add_byte_nl(); - bfr.Add(Indent_4).Add(Xob_xml_parser_.Bry_title_bgn).Add(doc.Ttl_w_ns()).Add(Xob_xml_parser_.Bry_title_end).Add_byte_nl(); + bfr.Add(Indent_4).Add(Xob_xml_parser_.Bry_title_bgn).Add(doc.Ttl_full_db()).Add(Xob_xml_parser_.Bry_title_end).Add_byte_nl(); bfr.Add(Indent_4).Add(Xob_xml_parser_.Bry_id_bgn).Add_int_variable(doc.Id()).Add(Xob_xml_parser_.Bry_id_end).Add_byte_nl(); bfr.Add(Indent_4).Add(Xob_xml_parser_.Bry_redirect_bgn_frag).Add(Nde_inline).Add_byte_nl(); bfr.Add(Indent_4).Add(Xob_xml_parser_.Bry_revision_bgn).Add_byte_nl(); @@ -51,7 +51,7 @@ public class Xob_xml_page_bldr { bfr.Add(Indent_6).Add(Xob_xml_parser_.Bry_contributor_end).Add_byte_nl(); bfr.Add(Indent_6).Add(Xob_xml_parser_.Bry_minor_bgn_frag).Add(Nde_inline).Add_byte_nl(); bfr.Add(Indent_6).Add(Xob_xml_parser_.Bry_comment_bgn).Add(Revision_comment).Add(Xob_xml_parser_.Bry_comment_end).Add_byte_nl(); - bfr.Add(Indent_6).Add(Xob_xml_parser_.Bry_text_bgn).Add(doc.Text()).Add(Xob_xml_parser_.Bry_text_end).Add_byte_nl(); + bfr.Add(Indent_6).Add(Xob_xml_parser_.Bry_text_bgn).Add(doc.Wtxt()).Add(Xob_xml_parser_.Bry_text_end).Add_byte_nl(); bfr.Add(Indent_4).Add(Xob_xml_parser_.Bry_revision_end).Add_byte_nl(); bfr.Add(Indent_2).Add(Xob_xml_parser_.Bry_page_end).Add_byte_nl(); return this; diff --git a/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_parser.java b/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_parser.java index 45b90933c..0a1b38876 100644 --- a/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_parser.java +++ b/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_parser.java @@ -80,7 +80,7 @@ public class Xob_xml_parser { title_needed = false; } break; - case Xob_xml_parser_.Id_text_end: data_bfr_add = false; rv.Text_(data_bfr.Xto_bry_and_clear()); break; + case Xob_xml_parser_.Id_text_end: data_bfr_add = false; rv.Wtxt_(data_bfr.Xto_bry_and_clear()); break; case Xob_xml_parser_.Id_amp: case Xob_xml_parser_.Id_quot: case Xob_xml_parser_.Id_lt: case Xob_xml_parser_.Id_gt: case Xob_xml_parser_.Id_cr_nl: case Xob_xml_parser_.Id_cr: if (data_bfr_add) data_bfr.Add_byte(itm.Subst_byte()); diff --git a/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_parser_tst.java b/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_parser_tst.java index 2559e6889..4e670c123 100644 --- a/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_parser_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/xmls/Xob_xml_parser_tst.java @@ -44,28 +44,28 @@ public class Xob_xml_parser_tst { @Test public void Xml() { Xodb_page doc = doc_(1, "a", ""a & b <> a | b"", Date_1); fil = page_bldr.Add(doc).XtoByteStreamRdr(); - tst_parse(fil, doc.Text_(Bry_.new_utf8_("\"a & b <> a | b\"")), 0); + tst_parse(fil, doc.Wtxt_(Bry_.new_utf8_("\"a & b <> a | b\"")), 0); } @Test public void Tab() { Xodb_page doc = doc_(1, "a", "a \t b", Date_1); fil = page_bldr.Add(doc).XtoByteStreamRdr(); - tst_parse(fil, doc.Text_(Bry_.new_utf8_("a b")), 0); + tst_parse(fil, doc.Wtxt_(Bry_.new_utf8_("a b")), 0); } @Test public void Tab_disable() { Xodb_page doc = doc_(1, "a", "a \t b", Date_1); page_parser.Trie_tab_del_(); fil = page_bldr.Add(doc).XtoByteStreamRdr(); - tst_parse(fil, doc.Text_(Bry_.new_utf8_("a \t b")), 0); + tst_parse(fil, doc.Wtxt_(Bry_.new_utf8_("a \t b")), 0); } @Test public void Cr_nl() { Xodb_page doc = doc_(1, "a", "a \r\n b", Date_1); fil = page_bldr.Add(doc).XtoByteStreamRdr(); - tst_parse(fil, doc.Text_(Bry_.new_utf8_("a \n b")), 0); + tst_parse(fil, doc.Wtxt_(Bry_.new_utf8_("a \n b")), 0); } @Test public void Cr() { Xodb_page doc = doc_(1, "a", "a \r b", Date_1); fil = page_bldr.Add(doc).XtoByteStreamRdr(); - tst_parse(fil, doc.Text_(Bry_.new_utf8_("a \n b")), 0); + tst_parse(fil, doc.Wtxt_(Bry_.new_utf8_("a \n b")), 0); } @Test public void Text_long() { String s = String_.Repeat("a", 1024); @@ -87,24 +87,24 @@ public class Xob_xml_parser_tst { @Test public void Ns_file() { Xodb_page doc = doc_(1, "File:a", "a", Date_1); Tfds.Eq(Xow_ns_.Id_file, doc.Ns_id()); - Tfds.Eq("a", String_.new_utf8_(doc.Ttl_wo_ns())); + Tfds.Eq("a", String_.new_utf8_(doc.Ttl_page_db())); } @Test public void Ns_main() { Xodb_page doc = doc_(1, "a", "a", Date_1); Tfds.Eq(Xow_ns_.Id_main, doc.Ns_id()); - Tfds.Eq("a", String_.new_utf8_(doc.Ttl_wo_ns())); + Tfds.Eq("a", String_.new_utf8_(doc.Ttl_page_db())); } @Test public void Ns_main_book() { Xodb_page doc = doc_(1, "Book", "a", Date_1); Tfds.Eq(Xow_ns_.Id_main, doc.Ns_id()); - Tfds.Eq("Book", String_.new_utf8_(doc.Ttl_wo_ns())); + Tfds.Eq("Book", String_.new_utf8_(doc.Ttl_page_db())); } @Test public void XmlEntities() { Xodb_page orig = doc_(1, "A&b", "a", Date_1); Xodb_page actl = new Xodb_page(); fil = page_bldr.Add(orig).XtoByteStreamRdr(); page_parser.Parse_page(actl, usr_dlg, fil, fil.Bfr(), 0, ns_mgr); - Tfds.Eq("A&b", String_.new_utf8_(actl.Ttl_w_ns())); + Tfds.Eq("A&b", String_.new_utf8_(actl.Ttl_full_db())); } @Test public void Root() { Xodb_page doc = doc_(1, "a", "a", Date_1); @@ -122,13 +122,13 @@ public class Xob_xml_parser_tst { Xodb_page actl = new Xodb_page(); int rv = page_parser.Parse_page(actl, usr_dlg, fil, fil.Bfr(), cur_pos, ns_mgr); Tfds.Eq(expd.Id(), actl.Id(), "id"); - Tfds.Eq(String_.new_utf8_(expd.Ttl_w_ns()), String_.new_utf8_(actl.Ttl_w_ns()), "title"); - Tfds.Eq(String_.new_utf8_(expd.Text()), String_.new_utf8_(actl.Text()), "text"); + Tfds.Eq(String_.new_utf8_(expd.Ttl_full_db()), String_.new_utf8_(actl.Ttl_full_db()), "title"); + Tfds.Eq(String_.new_utf8_(expd.Wtxt()), String_.new_utf8_(actl.Wtxt()), "text"); Tfds.Eq_date(expd.Modified_on(), actl.Modified_on(), "timestamp"); return rv; } Xodb_page doc_(int id, String title, String text, String date) { - Xodb_page rv = new Xodb_page().Id_(id).Ttl_(Bry_.new_ascii_(title), ns_mgr).Text_(Bry_.new_ascii_(text)); + Xodb_page rv = new Xodb_page().Id_(id).Ttl_(Bry_.new_ascii_(title), ns_mgr).Wtxt_(Bry_.new_ascii_(text)); int[] modified_on = new int[7]; dateParser.Parse_iso8651_like(modified_on, date); rv.Modified_on_(DateAdp_.seg_(modified_on)); 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 48af24bbf..4d4490f32 100644 --- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr.java +++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_html_mgr.java @@ -61,7 +61,7 @@ public class Xoctg_html_mgr implements GfoInvkAble { boolean id_exists = wiki.Db_mgr().Load_mgr().Load_by_id(dbo_page, itm.Id()); Xoa_ttl itm_ttl = null; if (id_exists) - itm_ttl = Xoa_ttl.parse_(wiki, dbo_page.Ns_id(), dbo_page.Ttl_wo_ns()); + itm_ttl = Xoa_ttl.parse_(wiki, dbo_page.Ns_id(), dbo_page.Ttl_page_db()); else { itm_ttl = Xoa_ttl.parse_(wiki, itm.Sortkey()); if (itm_ttl == null) diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_itms.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_itms.java index 7899a1568..e2ce90450 100644 --- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_itms.java +++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_itms.java @@ -31,7 +31,7 @@ public class Xoctg_pagelist_itms implements Bry_fmtr_arg { int len = itms.Count(); for (int i = 0; i < len; i++) { Xodb_page page = (Xodb_page)itms.FetchAt(i); - Xoa_ttl ttl = Xoa_ttl.parse_(wiki, Xow_ns_.Id_category, page.Ttl_wo_ns()); + Xoa_ttl ttl = Xoa_ttl.parse_(wiki, Xow_ns_.Id_category, page.Ttl_page_db()); byte[] lnki_cls = Xoh_lnki_wtr.Lnki_cls_visited(history_mgr, wiki.Domain_bry(), ttl.Page_txt()); // NOTE: must be ttl.Page_txt() in order to match Xou_history_mgr.Add byte[] lnki_href = href_parser.Build_to_bry(wiki, ttl); byte[] lnki_ttl = ttl.Full_txt(); diff --git a/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_wtr_tst.java b/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_wtr_tst.java index 0b16e9f04..cf5b65358 100644 --- a/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_wtr_tst.java +++ b/400_xowa/src/gplx/xowa/ctgs/Xoctg_pagelist_wtr_tst.java @@ -73,7 +73,7 @@ class Xoctg_pagelist_mgr_fxt { Xodb_page page = new Xodb_page(); Xodb_category_itm ctg_xtn = Xodb_category_itm.load_(0, 0, hidden, 0, 0, 0); page.Xtn_(ctg_xtn); - page.Ttl_wo_ns_(Bry_.new_ascii_(ttl)); + page.Ttl_page_db_(Bry_.new_ascii_(ttl)); init_ctgs.AddMany(page); } } private ListAdp init_ctgs = ListAdp_.new_(); 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 3b1713f55..59eabb348 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 @@ -52,7 +52,7 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr { } public boolean Load_by_ttl(Xodb_page rv, Xow_ns ns, byte[] ttl) {return db_mgr.Tbl_page().Select_by_ttl(rv, ns, ttl);} public void Load_by_ttls(Cancelable cancelable, OrderedHash rv, boolean fill_idx_fields_only, int bgn, int end) {db_mgr.Tbl_page().Select_by_ttl_in(cancelable, rv, db_mgr.Db_ctx(), fill_idx_fields_only, bgn, end);} - public void Load_page(Xodb_page rv, Xow_ns ns, boolean timestamp_enabled) {rv.Text_(db_mgr.Tbl_text().Select(rv.Text_db_id(), rv.Id()));} + public void Load_page(Xodb_page rv, Xow_ns ns, boolean timestamp_enabled) {rv.Wtxt_(db_mgr.Tbl_text().Select(rv.Wtxt_db_id(), rv.Id()));} public boolean Load_by_id (Xodb_page rv, int id) {return db_mgr.Tbl_page().Select_by_id(rv, id);} public void Load_by_ids(Cancelable cancelable, ListAdp rv, int bgn, int end) {db_mgr.Tbl_page().Select_by_id_list(cancelable, false, rv, bgn, end);} public boolean Load_ctg_v1(Xoctg_view_ctg rv, byte[] ctg_bry) { @@ -98,9 +98,9 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr { view_grp = rv.Grp_by_tid(cur_tid); prv_tid = cur_tid; } - Xoa_ttl ttl = Xoa_ttl.parse_(wiki, db_page.Ns_id(), db_page.Ttl_wo_ns()); + Xoa_ttl ttl = Xoa_ttl.parse_(wiki, db_page.Ns_id(), db_page.Ttl_page_db()); Xoctg_view_itm view_itm = new Xoctg_view_itm().Sortkey_(db_ctg.Sortkey()).Ttl_(ttl); - view_itm.Load_by_ttl_data(cur_tid, db_page.Id(), Xodb_page.Timestamp_null, db_page.Text_len()); + view_itm.Load_by_ttl_data(cur_tid, db_page.Id(), Xodb_page.Modified_on_null_int, db_page.Wtxt_len()); view_grp.Itms_add(view_itm); } len = Xoa_ctg_mgr.Tid__max; @@ -154,7 +154,7 @@ public class Xodb_load_mgr_sql implements Xodb_load_mgr { for (int i = 0; i < len; i++) { Xodb_page page = new Xodb_page(); byte[] ttl = Xoa_ttl.Replace_spaces(ctg_ttls[i]); // NOTE: ctg_ttls has spaces since v1 rendered it literally; - page.Ttl_wo_ns_(ttl); + page.Ttl_page_db_(ttl); if (!hash.Has(ttl)) hash.Add(ttl, page); } 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 3cbfec9f6..74f492509 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 @@ -51,7 +51,7 @@ class Xodb_load_mgr_sql_fxt { public Xodb_page[] pages_(Xodb_page... ary) {return ary;} public Xodb_page ctg_(int id, String ttl, boolean hidden, int count_subcs, int count_files, int count_pages) { - Xodb_page rv = new Xodb_page().Ns_id_(Xow_ns_.Id_category).Id_(id).Ttl_wo_ns_(Bry_.new_ascii_(ttl)); + Xodb_page rv = new Xodb_page().Ns_id_(Xow_ns_.Id_category).Id_(id).Ttl_page_db_(Bry_.new_ascii_(ttl)); Xodb_category_itm ctg = Xodb_category_itm.load_(id, 0, hidden, count_subcs, count_files, count_pages); rv.Xtn_(ctg); return rv; @@ -66,7 +66,7 @@ class Xodb_load_mgr_sql_fxt { DateAdp modified = DateAdp_.Now(); for (int i = 0; i < len; i++) { Xodb_page page = ary[i]; - db_mgr.Tbl_page().Insert(page_stmt, page.Id(), page.Ns_id(), page.Ttl_wo_ns(), false, modified, 10, page.Id(), 0, 0); + db_mgr.Tbl_page().Insert(page_stmt, page.Id(), page.Ns_id(), page.Ttl_page_db(), false, modified, 10, page.Id(), 0, 0); Xodb_category_itm ctg_itm = (Xodb_category_itm)page.Xtn(); db_mgr.Tbl_category().Insert(category_stmt, ctg_itm.Id(), ctg_itm.Count_pages(), ctg_itm.Count_subcs(), ctg_itm.Count_files(), Bool_.Xto_byte(ctg_itm.Hidden()), 0); } @@ -76,7 +76,7 @@ class Xodb_load_mgr_sql_fxt { int len = ary.length; byte[][] ttls = new byte[len][]; for (int i = 0; i < len; i++) { - ttls[i] = ary[i].Ttl_wo_ns(); + ttls[i] = ary[i].Ttl_page_db(); } Xodb_page[] actl = wiki.Db_mgr_as_sql().Load_mgr().Load_ctg_list(ttls); Tfds.Eq_str_lines(Xto_str(ary), Xto_str(actl)); @@ -88,7 +88,7 @@ class Xodb_load_mgr_sql_fxt { Xodb_page page = ary[i]; Xodb_category_itm ctg_itm = (Xodb_category_itm)page.Xtn(); bfr.Add_int_variable(page.Id()).Add_byte_pipe(); - bfr.Add(page.Ttl_wo_ns()).Add_byte_pipe(); + bfr.Add(page.Ttl_page_db()).Add_byte_pipe(); bfr.Add_byte(Bool_.Xto_byte(ctg_itm.Hidden())).Add_byte_nl(); } return bfr.Xto_str_and_clear(); @@ -146,7 +146,7 @@ class Xodb_load_mgr_sql_fxt { String[] rv = new String[len]; for (int i = 0; i< len; i++) { Xodb_page itm = (Xodb_page)list.FetchAt(i); - rv[i] = String_.new_ascii_(itm.Ttl_wo_ns()); + rv[i] = String_.new_ascii_(itm.Ttl_page_db()); } return rv; } @@ -185,7 +185,7 @@ class Xoctg_mok_ctg { Xoctg_page_xtn db_ctg = new Xoctg_page_xtn(ctg_tid, ttl); Xodb_page page = new Xodb_page(); int page_id = next_id.Val_add_post(); - page.Id_(page_id).Ns_id_(ns_id).Ttl_wo_ns_(ttl).Xtn_(db_ctg); + page.Id_(page_id).Ns_id_(ns_id).Ttl_page_db_(ttl).Xtn_(db_ctg); grp.Itms().Add(page); } grp.Last_plus_one_sortkey_(Bry_.new_ascii_(last_itm_plus_one_sortkey)); 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 812b9a67a..c8116725a 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 @@ -24,7 +24,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { } private Xowe_wiki wiki; Xotdb_fsys_mgr fsys_mgr; Xob_xdat_file tmp_xdat_file = new Xob_xdat_file(); Xob_xdat_itm tmp_xdat_itm = new Xob_xdat_itm(); public void Load_init (Xowe_wiki wiki) {} - public void Load_page(Xodb_page rv, Xow_ns ns, boolean timestamp_enabled) {Load_page(rv, rv.Text_db_id(), rv.Db_row_idx(), ns, timestamp_enabled, tmp_xdat_file, tmp_xdat_itm);} + public void Load_page(Xodb_page rv, Xow_ns ns, boolean timestamp_enabled) {Load_page(rv, rv.Wtxt_db_id(), rv.Tdb_row_idx(), ns, timestamp_enabled, tmp_xdat_file, tmp_xdat_itm);} public void Load_page(Xodb_page rv, int txt_fil_idx, int txt_row_idx, Xow_ns ns, boolean timestamp_enabled, Xob_xdat_file xdat_file, Xob_xdat_itm xdat_itm) { Io_url file = fsys_mgr.Url_ns_fil(Xotdb_dir_info_.Tid_page, ns.Id(), txt_fil_idx); byte[] bry = gplx.ios.Io_stream_rdr_.Load_all(file); int bry_len = bry.length; @@ -36,13 +36,13 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { if (!Load_xdat_itm(tmp_xdat_itm, ns, Xotdb_dir_info_.Tid_ttl, ttl, Xodb_page_.Txt_ttl_pos, Byte_ascii.Tab, true)) return false; Xodb_page_.Txt_ttl_load(rv, tmp_xdat_itm.Itm_bry()); rv.Exists_(true); - return Bry_.Eq(rv.Ttl_wo_ns(), ttl); + return Bry_.Eq(rv.Ttl_page_db(), ttl); } public void Load_by_ttls(Cancelable cancelable, OrderedHash rv, boolean fill_idx_fields_only, int bgn, int end) {// NOTE: Load_by_ttls just a wrapper around Load_by_ttl; for xdat, Load_by_ttl is fast enough for (int i = bgn; i < end; i++) { if (cancelable.Canceled()) return; Xodb_page page = (Xodb_page)rv.FetchAt(i); - Load_by_ttl(page, page.Ns(), page.Ttl_wo_ns()); + Load_by_ttl(page, page.Ns(), page.Ttl_page_db()); } } public void Load_by_ids(Cancelable cancelable, ListAdp list, int bgn, int end) { @@ -60,7 +60,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { prv_fil_idx = cur_fil_idx; } if (!this.Load_by_id(tmp_page, tmp_xdat_file, id_bry)) continue; // id not found in file; ignore - itm.Ns_id_(tmp_page.Ns_id()).Ttl_wo_ns_(tmp_page.Ttl_wo_ns()); + itm.Ns_id_(tmp_page.Ns_id()).Ttl_page_db_(tmp_page.Ttl_page_db()); msg_wtr.Write_prog_cur(i, wiki.Appe().Usr_dlg()); } } Xodb_page tmp_page = new Xodb_page(); @@ -115,7 +115,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { int page_id = Base85_utl.XtoIntByAry(raw, pos, pos + 4); pos += 6; // 5 + 1 for semic; int page_len = Base85_utl.XtoIntByAry(raw, pos, pos + 4); - rv.Add(Xodb_page.srch_(page_id, page_len)); + rv.Add(Xodb_page.new_srch(page_id, page_len)); pos += 6; // 5 + 1 for pipe // if (match.Itms_len() == max_results) break; } @@ -259,7 +259,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { Xob_random_itm file = files[file_idx]; tmp_xdat_file.GetAt(tmp_xdat_itm, random_idx - file.Bgn()); // get nth row; EX: random_idx=120; .Bgn=103 -> get 17th Xodb_page page = Xodb_page_.Txt_ttl_load(tmp_xdat_itm.Itm_bry()); - return page.Ttl_wo_ns(); + return page.Ttl_page_db(); } private static Xob_random_itm[] Build_random_itms(Xowd_regy_mgr mgr, Int_obj_ref count) { // convert regy to list of random_itms (similar to regy_itms, but has integer bgn / end; EX: [0]:0,50; [1]:51-102; [2]:103-130) @@ -299,7 +299,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { Xodb_page itm = (Xodb_page)ctgs.FetchAt(i); byte itm_tid = Load_ctg_v1_tid(itm.Ns_id()); Xoctg_view_itm sub = Load_ctg_v1_sub(itm_tid, itm); - sub.Ttl_(Xoa_ttl.parse_(wiki, itm.Ns_id(), itm.Ttl_wo_ns())).Sortkey_(itm.Ttl_wo_ns()); + sub.Ttl_(Xoa_ttl.parse_(wiki, itm.Ns_id(), itm.Ttl_page_db())).Sortkey_(itm.Ttl_page_db()); view_ctg.Grp_by_tid(itm_tid).Itms_add(sub); } for (byte i = 0; i < Xoa_ctg_mgr.Tid__max; i++) { @@ -342,7 +342,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { } private static Xoctg_view_itm Load_ctg_v1_sub(byte tid, Xodb_page data) { Xoctg_view_itm rv = new Xoctg_view_itm(); - rv.Load_by_ttl_data(tid, data.Id(), 0, data.Text_len()); + rv.Load_by_ttl_data(tid, data.Id(), 0, data.Wtxt_len()); return rv; } @@ -355,7 +355,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { } int name_bgn = timestamp_end + 1; int name_end = Bry_finder.Find_fwd(src, Xodb_page_.Txt_page_dlm, name_bgn, src_len); - page.Text_(Bry_.Mid(src, name_end + 1, row_end - 1)); // +1 to skip dlm + page.Wtxt_(Bry_.Mid(src, name_end + 1, row_end - 1)); // +1 to skip dlm } Xowd_regy_mgr Get_regy_by_site(byte regy_tid) { Xowd_regy_mgr rv = site_regys[regy_tid]; @@ -410,7 +410,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { for (; row_idx < rows_len; row_idx++) { xdat_file.GetAt(xdat_itm, row_idx); Xodb_page ttl_itm = Xodb_page_.Txt_ttl_load(Bry_.Mid(xdat_itm.Src(), xdat_itm.Itm_bgn(), xdat_itm.Itm_end())); - if (!include_redirects && ttl_itm.Type_redirect()) continue; + if (!include_redirects && ttl_itm.Redirected()) continue; ++count; nxt_itm = ttl_itm; if (count == total) { @@ -449,7 +449,7 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { for (; row_idx > -1; row_idx--) { xdat_file.GetAt(xdat_itm, row_idx); Xodb_page ttl_itm = Xodb_page_.Txt_ttl_load(Bry_.Mid(xdat_itm.Src(), xdat_itm.Itm_bgn(), xdat_itm.Itm_end())); - if (!include_redirects && ttl_itm.Type_redirect()) continue; + if (!include_redirects && ttl_itm.Redirected()) continue; // list.Add(ttl_itm); ++count; prv_itm = ttl_itm; @@ -525,8 +525,8 @@ public class Xodb_load_mgr_txt implements Xodb_load_mgr { Xodb_page page = new Xodb_page(); this.Load_by_ttl(page, ns, ttl); - Load_ctg_v2_main(ctg_temp, page.Ttl_wo_ns()); - Xodb_category_itm ctg_itm = Xodb_category_itm.load_(page.Id(), page.Text_db_id(), ctg_temp.Hidden(), ctg_temp.Total_by_tid(Xoa_ctg_mgr.Tid_subc), ctg_temp.Total_by_tid(Xoa_ctg_mgr.Tid_file), ctg_temp.Total_by_tid(Xoa_ctg_mgr.Tid_page)); + Load_ctg_v2_main(ctg_temp, page.Ttl_page_db()); + Xodb_category_itm ctg_itm = Xodb_category_itm.load_(page.Id(), page.Wtxt_db_id(), ctg_temp.Hidden(), ctg_temp.Total_by_tid(Xoa_ctg_mgr.Tid_subc), ctg_temp.Total_by_tid(Xoa_ctg_mgr.Tid_file), ctg_temp.Total_by_tid(Xoa_ctg_mgr.Tid_page)); page.Xtn_(ctg_itm); rv[i] = page; } 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 f6761955e..8c4f6b890 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_sql.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_mgr_sql.java @@ -93,7 +93,7 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble { tbl_text.Insert(text_stmt, page_id, text, data_storage_format); } public boolean Ctg_select_v1(Xoctg_view_ctg view_ctg, Db_conn ctg_provider, Xodb_category_itm ctg) { - Db_qry_select qry = Db_qry_.select_().Cols_(Xodb_categorylinks_tbl.Fld_cl_from) + Db_qry__select_cmd qry = Db_qry_.select_().Cols_(Xodb_categorylinks_tbl.Fld_cl_from) .From_(Xodb_categorylinks_tbl.Tbl_name) .Where_(Db_crt_.eq_(Xodb_categorylinks_tbl.Fld_cl_to_id, ctg.Id())) ; @@ -118,9 +118,9 @@ public class Xodb_mgr_sql implements Xodb_mgr, GfoInvkAble { byte ctg_tid = Xodb_load_mgr_txt.Load_ctg_v1_tid(page.Ns_id()); Xoctg_view_grp ctg_grp = view_ctg.Grp_by_tid(ctg_tid); Xoctg_view_itm ctg_itm = new Xoctg_view_itm(); - ctg_itm.Load_by_ttl_data(ctg_tid, page.Id(), 0, page.Text_len()); - ctg_itm.Ttl_(Xoa_ttl.parse_(wiki, page.Ns_id(), page.Ttl_wo_ns())); - ctg_itm.Sortkey_(page.Ttl_wo_ns()); + ctg_itm.Load_by_ttl_data(ctg_tid, page.Id(), 0, page.Wtxt_len()); + ctg_itm.Ttl_(Xoa_ttl.parse_(wiki, page.Ns_id(), page.Ttl_page_db())); + ctg_itm.Sortkey_(page.Ttl_page_db()); ctg_grp.Itms_add(ctg_itm); rv = true; } 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 d876025a8..63a80bec3 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 @@ -80,7 +80,7 @@ public class Xodb_save_mgr_sql implements Xodb_save_mgr { Xodb_page db_page = new Xodb_page(); db_mgr.Load_mgr().Load_by_id(db_page, page.Revision_data().Id()); text = zip_mgr.Zip(db_mgr.Data_storage_format(), text); - db_mgr.Tbl_text().Update(db_page.Text_db_id(), page.Revision_data().Id(), text); + db_mgr.Tbl_text().Update(db_page.Wtxt_db_id(), page.Revision_data().Id(), text); } public void Data_rename(Xoae_page page, int trg_ns, byte[] trg_ttl) { Db_qry qry = Db_qry_.update_common_("page", Db_crt_.eq_("page_id", page.Revision_data().Id()) 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 f2bcdded2..d2064ccb8 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 @@ -30,7 +30,7 @@ public class Xodb_save_mgr_txt implements Xodb_save_mgr { public void Clear() {page_id_next = 0;} // TEST: needed for ctg_test public void Data_create(Xoa_ttl ttl, byte[] text) { Xow_ns ns_itm = ttl.Ns(); byte[] ttl_bry = ttl.Page_db(); - Xodb_page db_page = Xodb_page.tmp_(); + Xodb_page db_page = Xodb_page.new_tmp(); 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; @@ -50,7 +50,7 @@ public class Xodb_save_mgr_txt implements Xodb_save_mgr { tmp_bfr.Mkr_rls(); Xoa_ttl redirect_ttl = redirect_mgr.Extract_redirect(text, text_len); - db_page.Set_all_(page_id, fil_idx, row_idx, redirect_ttl != null, text_len, ttl.Page_db()); + db_page.Init(page_id, ttl.Page_db(), redirect_ttl != null, text_len, fil_idx, row_idx); Xodb_page_.Txt_ttl_save(tmp, db_page); byte[] ttl_row_bry = tmp.Mkr_rls().Xto_bry_and_clear(); Xowd_hive_mgr ttl_hive = new Xowd_hive_mgr(wiki, Xotdb_dir_info_.Tid_ttl); @@ -68,18 +68,18 @@ public class Xodb_save_mgr_txt implements Xodb_save_mgr { private void Data_update_under(Xoae_page page, byte[] text, byte[] new_ttl) { Xoa_ttl ttl = page.Ttl(); Xow_ns ns = ttl.Ns(); byte[] ttl_bry = ttl.Page_db(); - Xodb_page db_page = Xodb_page.tmp_(); + Xodb_page db_page = Xodb_page.new_tmp(); if (!load_mgr.Load_by_ttl(db_page, ns, ttl_bry)) throw Err_mgr._.fmt_(GRP_KEY, "title_missing", "update requested but title does not exist: ~{0}", String_.new_utf8_(ttl_bry)); byte[] old_ttl = ttl_bry; if (new_ttl != null) { ttl_bry = new_ttl; - db_page.Ttl_wo_ns_(new_ttl); + db_page.Ttl_page_db_(new_ttl); } // 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); + load_mgr.Load_page(tmp_page, db_page.Wtxt_db_id(), db_page.Tdb_row_idx(), ns, true, page_rdr, page_itm); Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b512(); - if (text == null) text = tmp_page.Text(); + if (text == null) text = tmp_page.Wtxt(); int text_len = text.length; DateAdp modified_on = tmp_page.Modified_on(); if (update_modified_on_enabled) { @@ -88,13 +88,13 @@ public class Xodb_save_mgr_txt implements Xodb_save_mgr { } Xodb_page_.Txt_page_save(tmp_bfr, db_page.Id(), modified_on, ttl_bry, text, true); page_rdr.Update(tmp_bfr, page_itm, tmp_bfr.Xto_bry_and_clear()); - Io_url page_rdr_url = fsys_mgr.Url_ns_fil(Xotdb_dir_info_.Tid_page, ttl.Ns().Id(), db_page.Text_db_id()); + Io_url page_rdr_url = fsys_mgr.Url_ns_fil(Xotdb_dir_info_.Tid_page, ttl.Ns().Id(), db_page.Wtxt_db_id()); this.Data_save(Xotdb_dir_info_.Tid_page, page_rdr, page_rdr_url, tmp_bfr); tmp_bfr.Mkr_rls(); // update ttl Xoa_ttl redirect_ttl = redirect_mgr.Extract_redirect(text, text_len); - db_page.Text_len_(text_len); - db_page.Type_redirect_(redirect_ttl != null); + db_page.Wtxt_len_(text_len); + db_page.Redirected_(redirect_ttl != null); 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(); diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_categorylinks_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_categorylinks_tbl.java index 54f1ca68f..55b91e3b3 100644 --- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_categorylinks_tbl.java +++ b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_categorylinks_tbl.java @@ -43,7 +43,7 @@ public class Xodb_categorylinks_tbl { gplx.core.criterias.Criteria comp_crt = !arg_is_from ? Db_crt_.mte_(Fld_cl_sortkey, arg_sortkey_str) // from: sortkey >= 'val' : Db_crt_.lte_(Fld_cl_sortkey, arg_sortkey_str); // until: sortkey <= 'val' - Db_qry_select qry = Db_qry_.select_().Cols_(Fld_cl_from, Fld_cl_sortkey).From_(Tbl_name) + Db_qry__select_cmd qry = Db_qry_.select_().Cols_(Fld_cl_from, Fld_cl_sortkey).From_(Tbl_name) .Where_(gplx.core.criterias.Criteria_.And_many(Db_crt_.eq_(Fld_cl_to_id, -1), Db_crt_.eq_(Fld_cl_type_id, arg_tid), comp_crt)) .OrderBy_(Fld_cl_sortkey, !arg_is_from) .Limit_(limit + 1); // + 1 to get last_plus_one for next page / previous page diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_in_wkr_page.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_in_wkr_page.java index 73f8aaafc..0e71f2da2 100644 --- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_in_wkr_page.java +++ b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_in_wkr_page.java @@ -51,10 +51,10 @@ class Xodb_in_wkr_page_title extends Xodb_in_wkr_page_base { for (int i = bgn; i < end; i++) { Xodb_page page = (Xodb_page)hash.FetchAt(i); stmt.Val_int(in_ns); - stmt.Val_bry_as_str(page.Ttl_wo_ns()); + stmt.Val_bry_as_str(page.Ttl_page_db()); } } - @Override public Xodb_page Eval_rslts_key(Xodb_page rdr_page) {return (Xodb_page)hash.Fetch(rdr_page.Ttl_wo_ns());} + @Override public Xodb_page Eval_rslts_key(Xodb_page rdr_page) {return (Xodb_page)hash.Fetch(rdr_page.Ttl_page_db());} } class Xodb_in_wkr_page_title_ns extends Xodb_in_wkr_page_base { private Xow_ns_mgr ns_mgr; @@ -73,15 +73,15 @@ class Xodb_in_wkr_page_title_ns extends Xodb_in_wkr_page_base { for (int i = bgn; i < end; i++) { Xodb_page page = (Xodb_page)hash.FetchAt(i); stmt.Val_int(page.Ns_id()); - stmt.Val_bry_as_str(page.Ttl_wo_ns()); + stmt.Val_bry_as_str(page.Ttl_page_db()); } } @Override public Xodb_page Eval_rslts_key(Xodb_page rdr_page) { Xow_ns ns = ns_mgr.Ids_get_or_null(rdr_page.Ns_id()); if (ns == null) return null; // NOTE: ns seems to "randomly" be null when threading during redlinks; guard against null; DATE:2014-01-03 - byte[] ttl_wo_ns = rdr_page.Ttl_wo_ns(); + byte[] ttl_wo_ns = rdr_page.Ttl_page_db(); rdr_page.Ttl_(ns, ttl_wo_ns); - return (Xodb_page)hash.Fetch(rdr_page.Ttl_w_ns()); + return (Xodb_page)hash.Fetch(rdr_page.Ttl_full_db()); } } abstract class Xodb_in_wkr_page_base extends Xodb_in_wkr_base { 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 50c7662de..9f5495fb0 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 @@ -35,7 +35,7 @@ public class Xodb_page_tbl { public boolean Select_by_ttl(Xodb_page rv, Xow_ns ns, byte[] ttl) { Db_rdr rdr = Db_rdr_.Null; Db_stmt stmt = Db_stmt_.Null; try { - stmt = Db_stmt_.new_select_as_rdr(conn, Db_qry__select_in_tbl.new_(Tbl_name, String_.Ary(Fld_page_ns, Fld_page_title), html_db_enabled ? Select_by_id_flds__hdump : Select_by_id_flds__basic)); + stmt = Db_stmt_.new_select_as_rdr(conn, Db_qry__select_in_tbl.new_(Tbl_name, String_.Ary(Fld_page_ns, Fld_page_title), html_db_enabled ? Select_by_id_flds__hdump : Select_by_id_flds__basic, Db_qry__select_in_tbl.Order_by_null)); rdr = stmt.Val_int(ns.Id()).Val_str(String_.new_utf8_(ttl)).Exec_select_as_rdr(); if (rdr.Move_next()) { Read_page__all2(rv, rdr, html_db_enabled); @@ -45,17 +45,22 @@ 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(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)); + int html_db_id = -1, redirected_id = -1; if (html_db_enabled) { - page.Html_db_id_(rdr.Read_int(Fld_page_html_db_id)); - page.Redirect_id_(rdr.Read_int(Fld_page_is_redirect)); + html_db_id = rdr.Read_int(Fld_page_html_db_id); + redirected_id = rdr.Read_int(Fld_page_redirect_id); } + page.Init_by_sql + ( rdr.Read_int(Fld_page_id) + , rdr.Read_int(Fld_page_ns) + , rdr.Read_bry_by_str(Fld_page_title) + , DateAdp_.parse_fmt(rdr.Read_str(Fld_page_touched), Page_touched_fmt) + , rdr.Read_bool_by_byte(Fld_page_is_redirect) + , rdr.Read_int(Fld_page_len) + , rdr.Read_int(Fld_page_file_idx) + , html_db_id + , redirected_id + ); } public boolean Select_by_id(Xodb_page rv, int page_id) { DataRdr rdr = DataRdr_.Null; @@ -103,7 +108,7 @@ public class Xodb_page_tbl { stmt.Exec_insert(); } public DataRdr Select_all(Db_conn p) { - Db_qry_select qry = Db_qry_select.new_().From_(Tbl_name).Cols_(Fld_page_id, Fld_page_title).OrderBy_asc_(Fld_page_id); + Db_qry__select_cmd qry = Db_qry__select_cmd.new_().From_(Tbl_name).Cols_(Fld_page_id, Fld_page_title).OrderBy_asc_(Fld_page_id); return p.Exec_qry_as_rdr(qry); } private DataRdr Load_ttls_starting_with_rdr(int ns_id, byte[] ttl_frag, boolean include_redirects, int max_results, int min_page_len, int browse_len, boolean fwd, boolean search_suggest) { @@ -113,7 +118,7 @@ public class Xodb_page_tbl { crt = Criteria_.And(crt, Db_crt_.eq_(Fld_page_is_redirect, Byte_.Zero)); String[] cols = search_suggest ? Flds_select_idx : html_db_enabled ? Flds_select_all__html_y : Flds_select_all__html_n; int limit = fwd ? max_results + 1 : max_results; // + 1 to get next item - Db_qry_select select = Db_qry_.select_cols_(Tbl_name, crt, cols).Limit_(limit).OrderBy_(Fld_page_title, fwd); + Db_qry__select_cmd select = Db_qry_.select_cols_(Tbl_name, crt, cols).Limit_(limit).OrderBy_(Fld_page_title, fwd); return select.Exec_qry_as_rdr(conn); } public void Load_ttls_for_all_pages(Cancelable cancelable, ListAdp rslt_list, Xodb_page rslt_nxt, Xodb_page rslt_prv, Int_obj_ref rslt_count, Xow_ns ns, byte[] key, int max_results, int min_page_len, int browse_len, boolean include_redirects, boolean fetch_prv_item) { @@ -127,7 +132,7 @@ public class Xodb_page_tbl { if (cancelable.Canceled()) return; Xodb_page page = new Xodb_page(); Read_page__idx(page, rdr); - if (max_val_check && !Bry_.HasAtBgn(page.Ttl_wo_ns(), key)) break; + if (max_val_check && !Bry_.HasAtBgn(page.Ttl_page_db(), key)) break; nxt_itm = page; if (rslt_idx == max_results) {} // last item which is not meant for rslts, but only for nxt itm else { @@ -211,7 +216,7 @@ public class Xodb_page_tbl { public void Select_by_search(Cancelable cancelable, ListAdp rv, byte[] search, int results_max) { if (Bry_.Len_eq_0(search)) return; // do not allow empty search Criteria crt = gplx.core.criterias.Criteria_.And_many(Db_crt_.eq_(Fld_page_ns, Xow_ns_.Id_main), Db_crt_.like_(Fld_page_title, "")); - Db_qry_select qry = Db_qry_.select_().From_(Tbl_name).Cols_(Fld_page_id, Fld_page_len, Fld_page_ns, Fld_page_title).Where_(crt); // NOTE: use fields from main index only + Db_qry__select_cmd qry = Db_qry_.select_().From_(Tbl_name).Cols_(Fld_page_id, Fld_page_len, Fld_page_ns, Fld_page_title).Where_(crt); // NOTE: use fields from main index only DataRdr rdr = DataRdr_.Null; Db_stmt stmt = Db_stmt_.Null; search = Bry_.Replace(search, Byte_ascii.Asterisk, Byte_ascii.Percent); @@ -223,8 +228,8 @@ public class Xodb_page_tbl { Xodb_page page = new Xodb_page(); page.Id_ (rdr.ReadInt(Fld_page_id)); page.Ns_id_ (rdr.ReadInt(Fld_page_ns)); - page.Ttl_wo_ns_ (rdr.ReadBryByStr(Fld_page_title)); - page.Text_len_ (rdr.ReadInt(Fld_page_len)); + page.Ttl_page_db_ (rdr.ReadBryByStr(Fld_page_title)); + page.Wtxt_len_ (rdr.ReadInt(Fld_page_len)); rv.Add(page); } } finally {rdr.Rls(); stmt.Rls();} @@ -239,7 +244,7 @@ public class Xodb_page_tbl { Criteria crt = gplx.core.criterias.Criteria_.And_many(Db_crt_.eq_(Fld_page_ns, -1), Db_crt_.mt_(Fld_page_title, "")); if (redirect != Bool_.__byte) crt = gplx.core.criterias.Criteria_.And(crt, Db_crt_.eq_(Fld_page_is_redirect, redirect)); - Db_qry_select qry = Db_qry_.select_().From_(Tbl_name).Cols_(html_db_enabled ? Flds_select_all__html_y : Flds_select_all__html_n) + Db_qry__select_cmd qry = Db_qry_.select_().From_(Tbl_name).Cols_(html_db_enabled ? Flds_select_all__html_y : Flds_select_all__html_n) .Where_(crt) .Limit_(limit); return p.Stmt_new(qry); @@ -286,22 +291,27 @@ public class Xodb_page_tbl { ; public static final boolean Load_idx_flds_only_y = true; public static void Read_page__all(Xodb_page page, DataRdr rdr, boolean html_db_enabled) { - page.Id_ (rdr.ReadInt(Fld_page_id)); - page.Ns_id_ (rdr.ReadInt(Fld_page_ns)); - page.Ttl_wo_ns_ (rdr.ReadBryByStr(Fld_page_title)); - page.Modified_on_ (DateAdp_.parse_fmt(rdr.ReadStr(Fld_page_touched), Page_touched_fmt)); - page.Type_redirect_ (rdr.ReadByte(Fld_page_is_redirect) == 1); - page.Text_len_ (rdr.ReadInt(Fld_page_len)); - page.Text_db_id_ (rdr.ReadInt(Fld_page_file_idx)); + int html_db_id = -1, redirected_id = -1; if (html_db_enabled) { - page.Html_db_id_(rdr.ReadInt(Fld_page_html_db_id)); - page.Redirect_id_(rdr.ReadInt(Fld_page_redirect_id)); + html_db_id = rdr.ReadInt(Fld_page_html_db_id); + redirected_id = rdr.ReadInt(Fld_page_redirect_id); } + page.Init_by_sql + ( rdr.ReadInt(Fld_page_id) + , rdr.ReadInt(Fld_page_ns) + , rdr.ReadBryByStr(Fld_page_title) + , DateAdp_.parse_fmt(rdr.ReadStr(Fld_page_touched), Page_touched_fmt) + , rdr.ReadByte(Fld_page_is_redirect) == 1 + , rdr.ReadInt(Fld_page_len) + , rdr.ReadInt(Fld_page_file_idx) + , html_db_id + , redirected_id + ); } public static void Read_page__idx(Xodb_page page, DataRdr rdr) { page.Id_ (rdr.ReadInt(Fld_page_id)); page.Ns_id_ (rdr.ReadInt(Fld_page_ns)); - page.Ttl_wo_ns_ (rdr.ReadBryByStr(Fld_page_title)); - page.Text_len_ (rdr.ReadInt(Fld_page_len)); + page.Ttl_page_db_ (rdr.ReadBryByStr(Fld_page_title)); + page.Wtxt_len_ (rdr.ReadInt(Fld_page_len)); } } diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_search_title_word_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_search_title_word_tbl.java index e426635b5..d74cfa64c 100644 --- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_search_title_word_tbl.java +++ b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_search_title_word_tbl.java @@ -28,7 +28,7 @@ public class Xodb_search_title_word_tbl { .Exec_insert(); } public static void Select_by_word(Cancelable cancelable, ListAdp rv, Xodb_ctx db_ctx, byte[] search, int results_max, Db_conn p) { - Db_qry_select qry = Db_qry_.select_() + Db_qry__select_cmd qry = Db_qry_.select_() .Cols_(Xodb_search_title_word_tbl.Fld_stw_word_id) .From_(Xodb_search_title_word_tbl.Tbl_name, "w") ; 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 6a214a9c5..d79d3e9a3 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 @@ -51,7 +51,7 @@ public class Xodb_text_tbl { ListAdp pages = ListAdp_.new_(); for (int i = 0; i < len; i++) { Xodb_page page = (Xodb_page)hash.FetchAt(i); - if (page.Text_db_id() == file.Id()) + if (page.Wtxt_db_id() == file.Id()) pages.Add(page); } len = pages.Count(); @@ -74,7 +74,7 @@ public class Xodb_text_tbl { byte[] old_text = rdr.ReadBry(Fld_old_text); old_text = zip_mgr.Unzip(db_mgr.Data_storage_format(), old_text); Xodb_page page = (Xodb_page)hash.Fetch(Int_obj_val.new_(page_id)); - page.Text_(old_text); + page.Wtxt_(old_text); } } finally {rdr.Rls(); stmt.Rls();} } diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_cfg_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_cfg_tbl.java index 08ee4ce6f..d1a2532c1 100644 --- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_cfg_tbl.java +++ b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_xowa_cfg_tbl.java @@ -40,7 +40,7 @@ public class Xodb_xowa_cfg_tbl { public int Select_val_as_int(String grp, String key) {return Int_.parse_(Select_val(grp, key));} public String Select_val(String grp, String key) {return Select_val_or(grp, key, null);} public String Select_val_or(String grp, String key, String or) { - Db_qry_select qry = Db_qry_.select_val_(Tbl_name, Fld_cfg_val, Where_grp_key(grp, key)); + Db_qry__select_cmd qry = Db_qry_.select_val_(Tbl_name, Fld_cfg_val, Where_grp_key(grp, key)); String rv = (String)qry.ExecRdr_val(conn); return rv == null ? or : rv; } diff --git a/400_xowa/src/gplx/xowa/files/Xof_ext_.java b/400_xowa/src/gplx/xowa/files/Xof_ext_.java index cbd6e6f1b..d32e3e864 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_ext_.java +++ b/400_xowa/src/gplx/xowa/files/Xof_ext_.java @@ -72,7 +72,7 @@ public class Xof_ext_ { private static final Xof_ext[] Ary = new Xof_ext[Id__max]; public static byte[] Get_ext_by_id_(int id) { - if (id < 0 || id >= Id__max) throw Err_.new_fmt_("index out of bounds; {id}", id); + if (id < 0 || id >= Id__max) throw Err_.new_fmt_("index out of bounds; {0}", id); return Bry__ary[id]; } public static int Get_id_by_ext_(byte[] ext_bry) { 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 be8fe7d3f..237156c55 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_file_itm.java +++ b/400_xowa/src/gplx/xowa/files/Xof_file_itm.java @@ -20,19 +20,24 @@ public interface Xof_file_itm { byte[] Lnki_ttl(); byte[] Lnki_md5(); Xof_ext Lnki_ext(); -// byte[] Lnki_redirect(); byte Lnki_type(); int Lnki_w(); int Lnki_h(); double Lnki_upright(); double Lnki_time(); + int Lnki_page(); + byte Orig_repo_id(); + byte[] Orig_repo_name(); + byte[] Orig_ttl(); + int Orig_ext(); int Orig_w(); int Orig_h(); -// byte Orig_repo(); + byte[] Orig_redirect(); boolean Img_is_thumbable(); int File_w(); int Html_uid(); + byte Html_elem_tid(); int Html_w(); int Html_h(); -// Io_url Html_url(); + int Gallery_mgr_h(); } diff --git a/400_xowa/src/gplx/xowa/files/Xof_file_wkr.java b/400_xowa/src/gplx/xowa/files/Xof_file_wkr.java new file mode 100644 index 000000000..8bd6fdeff --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/Xof_file_wkr.java @@ -0,0 +1,136 @@ +/* +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.*; +import gplx.threads.*; +import gplx.fsdb.*; import gplx.fsdb.meta.*; import gplx.fsdb.data.*; import gplx.xowa.files.fsdb.*; +import gplx.xowa.files.repos.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.caches.*; import gplx.xowa.files.gui.*; +import gplx.xowa.html.hdumps.core.*; +class Xof_redlink_wkr implements Gfo_thread_wkr { + private Xog_js_wkr js_wkr; private int[] uids; + public Xof_redlink_wkr(Xog_js_wkr js_wkr, int[] uids) { + this.js_wkr = js_wkr; this.uids = uids; + } + public String Name() {return "xowa.redlinks";} + public boolean Resume() {return true;} + public void Exec() { + int len = uids.length; + for (int i = 0; i < len; ++i) { + int uid = uids[i]; + js_wkr.Html_atr_set(Int_.Xto_str(uid), "", ""); + } + } +} +public class Xof_file_wkr implements Gfo_thread_wkr { + private final Xof_orig_mgr orig_mgr; private final Xof_bin_mgr bin_mgr; private final Fsm_mnt_mgr mnt_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 Xof_file_wkr(Xof_orig_mgr orig_mgr, Xof_bin_mgr bin_mgr, Fsm_mnt_mgr mnt_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.orig_mgr = orig_mgr; this.bin_mgr = bin_mgr; this.mnt_mgr = mnt_mgr; this.cache_mgr = cache_mgr; + this.usr_dlg = Gfo_usr_dlg_._; 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";} + public boolean Resume() {return true;} + public void Exec() { + int len = imgs.Count(); + for (int i = 0; i < len; ++i) + Ctor_by_hdump(exec_tid, hpg, (Xohd_data_itm__base)imgs.FetchAt(i)); + } + private void Ctor_by_hdump(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(), 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.Lnki_ext_(Xof_ext_.new_by_id_(hdump.Lnki_ext())); + fsdb.Html_uid_(hdump.Html_uid()); + fsdb.Orig_exists_n_(); + Xof_orig_itm orig = orig_mgr.Find_by_ttl_or_null(fsdb.Lnki_ttl()); if (orig == Xof_orig_itm.Null) return; + Eval_orig(exec_tid, orig, fsdb, url_bldr, repo_mgr, img_size); + Show_img(exec_tid, fsdb, usr_dlg, bin_mgr, mnt_mgr, cache_mgr, repo_mgr, js_wkr, img_size, url_bldr, hpg); + } + public static void Show_img(byte exec_tid, Xof_fsdb_itm fsdb, Gfo_usr_dlg usr_dlg, Xof_bin_mgr bin_mgr, Fsm_mnt_mgr mnt_mgr, Xof_cache_mgr cache_mgr, Xow_repo_mgr repo_mgr, Xog_js_wkr js_wkr, Xof_img_size img_size, Xof_url_bldr url_bldr, Xoa_page hpg) { + try { + if (fsdb.Orig_ext() < 0) { + usr_dlg.Warn_many("", "", "file.missing.ext: file=~{0} width=~{1} page=~{2}", fsdb.Lnki_ttl(), fsdb.Lnki_w(), hpg.Ttl().Full_db()); + return; + } + Xof_repo_pair repo_pair = null; + switch (fsdb.Orig_repo_id()) { + case Xof_repo_itm.Repo_local: + case Xof_repo_itm.Repo_remote: + repo_pair = repo_mgr.Repos_get_by_id(fsdb.Orig_repo_id()); + break; + } + if (repo_pair == null) { + usr_dlg.Warn_many("", "", "file.missing.repo: file=~{0} width=~{1} page=~{2}", fsdb.Lnki_ttl(), fsdb.Lnki_w(), hpg.Ttl().Full_db()); + return; + } + Xof_repo_itm repo = repo_pair.Trg(); + fsdb.Ctor_for_html(exec_tid, img_size, repo, url_bldr); + 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.Fsdb_insert()) Save_bin(fsdb, mnt_mgr); + } + else { + usr_dlg.Warn_many("", "", "file.missing.bin: file=~{0} width=~{1} page=~{2}", fsdb.Lnki_ttl(), fsdb.Lnki_w(), hpg.Ttl().Full_db()); + fsdb.File_exists_n_(); + // 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); + } catch (Exception e) { + usr_dlg.Warn_many("", "", "file.unknown: ~{0}", Err_.Message_gplx_brief(e)); + } + } + public static void Eval_orig(byte exec_tid, Xof_orig_itm orig, Xof_fsdb_itm fsdb, Xof_url_bldr url_bldr, Xow_repo_mgr repo_mgr, Xof_img_size img_size) { + fsdb.Orig_exists_y_(); + byte repo_id = orig.Repo(); + Xof_repo_pair repo_pair = repo_mgr.Repos_get_by_id(repo_id); + Xof_repo_itm repo_itm = repo_pair.Trg(); + fsdb.Ctor_by_orig(repo_id, repo_pair.Wiki_domain(), orig.Page(), orig.Ext(), orig.W(), orig.H(), orig.Redirect()); + fsdb.Ctor_for_html(exec_tid, img_size, repo_itm, url_bldr); + } + private static void Save_bin(Xof_fsdb_itm itm, Fsm_mnt_mgr mnt_mgr) { + Io_url html_url = itm.Html_view_url(); + long bin_len = Io_mgr._.QueryFil(html_url).Size(); + gplx.ios.Io_stream_rdr bin_rdr = gplx.ios.Io_stream_rdr_.file_(html_url); + try { + bin_rdr.Open(); + mnt_mgr.Txn_open(); + if (itm.Lnki_ext().Id_is_thumbable_img()) { + if (itm.File_is_orig()) + mnt_mgr.Img_insert(itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_ext().Id(), itm.Html_w(), itm.Html_h(), Fsd_thm_tbl.Modified_null, Fsd_thm_tbl.Hash_null, bin_len, bin_rdr); + else + mnt_mgr.Thm_insert(itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_ext().Id(), itm.Html_w(), itm.Html_h(), itm.Lnki_time(), itm.Lnki_page(), Fsd_thm_tbl.Modified_null, Fsd_thm_tbl.Hash_null, bin_len, bin_rdr); + } + else { + if (itm.Lnki_ext().Id_is_video() && !itm.File_is_orig()) // insert as thumbnail + mnt_mgr.Thm_insert(itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_ext().Id(), itm.Html_w(), itm.Html_h(), itm.Lnki_time(), itm.Lnki_page(), Fsd_thm_tbl.Modified_null, Fsd_thm_tbl.Hash_null, bin_len, bin_rdr); + else + mnt_mgr.Fil_insert(itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_ext().Id(), Fsd_thm_tbl.Modified_null, Fsd_thm_tbl.Hash_null, bin_len, bin_rdr); + } + mnt_mgr.Txn_save(); + } + catch (Exception e) { + Xoa_app_.Usr_dlg().Warn_many("", "", "failed to save file: ttl=~{0} url=~{1} err=~{2}", String_.new_utf8_(itm.Lnki_ttl()), html_url.Raw(), Err_.Message_gplx(e)); + } + finally {bin_rdr.Rls();} + } +} diff --git a/400_xowa/src/gplx/xowa/files/Xof_fsdb_mode.java b/400_xowa/src/gplx/xowa/files/Xof_fsdb_mode.java index 4c4537083..3dbc4f782 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_fsdb_mode.java +++ b/400_xowa/src/gplx/xowa/files/Xof_fsdb_mode.java @@ -19,19 +19,16 @@ 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_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_lnki_file_mgr.java b/400_xowa/src/gplx/xowa/files/Xof_lnki_file_mgr.java index aad574977..0058e86ee 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 @@ -20,96 +20,70 @@ import gplx.xowa.files.repos.*; import gplx.xowa.files.fsdb.*; import gplx.xowa. import gplx.xowa.parsers.lnkis.*; public class Xof_lnki_file_mgr { private boolean page_init_needed = true; - private final ListAdp fsdb_list = ListAdp_.new_(); - private final OrderedHash orig_regy = OrderedHash_.new_bry_(), xfer_list = OrderedHash_.new_bry_(); - private Xof_url_bldr url_bldr = Xof_url_bldr.new_v2_(); private Xof_img_size tmp_img_size = new Xof_img_size(); + private final ListAdp fsdb_list = ListAdp_.new_(); private final OrderedHash orig_regy = OrderedHash_.new_bry_(), fsdb_hash = OrderedHash_.new_bry_(); + private final Xof_img_size img_size = new Xof_img_size(); private final Xof_url_bldr url_bldr = Xof_url_bldr.new_v2_(); public void Clear() { page_init_needed = true; - fsdb_list.Clear(); - xfer_list.Clear(); - orig_regy.Clear(); + fsdb_list.Clear(); fsdb_hash.Clear(); orig_regy.Clear(); } - public boolean Find(Xowe_wiki wiki, Xoae_page page, byte exec_tid, Xof_xfer_itm xfer_itm) { + public boolean Find(Xowe_wiki wiki, Xoae_page page, byte exec_tid, Xof_xfer_itm xfer) { try { if (page_init_needed) { page_init_needed = false; - wiki.File_mgr().Fsdb_mgr().Init_by_wiki(wiki); // NOTE: fsdb_mgr may not be init'd for wiki; assert that that it is - Create_xfer_itms(page.Lnki_list(), wiki.File_mgr().Patch_upright()); // NOTE: Patch_upright check must occur after Init_by_wiki; DATE:2014-05-31 + wiki.File_mgr().Fsdb_mgr().Init_by_wiki(wiki); // NOTE: fsdb_mgr may not be init'd for wiki; assert that that it is + Make_fsdb_list(page.Lnki_list(), wiki.File_mgr().Patch_upright()); // NOTE: Patch_upright check must occur after Init_by_wiki; DATE:2014-05-31 wiki.File_mgr().Fsdb_mgr().Orig_mgr().Find_by_list(orig_regy, fsdb_list, exec_tid); - Hash_xfer_itms(); + Make_fsdb_hash(); } - Xof_fsdb_itm fsdb_itm = (Xof_fsdb_itm)xfer_list.Fetch(xfer_itm.Lnki_ttl()); - if (fsdb_itm == null) // no orig_data found for the current item - return false; - else { - if (fsdb_itm.Orig_repo_name() == null) return false; // itm not found; return now, else null exception later; - xfer_itm.Lnki_ext_(fsdb_itm.Lnki_ext()); // WORKAROUND: hacky, but fsdb_itm knows when ogg is ogv whereas xfer_itm does not; so, always override xfer_itm.ext with fsdb's; DATE:2014-02-02 - xfer_itm.Url_bldr_(url_bldr); // default Url_bldr for xfer_itm uses @ for thumbtime; switch to -; DATE:2014-02-02 - Init_fsdb_by_xfer(fsdb_itm, xfer_itm); // copy xfer itm props to fsdb_itm; - xfer_itm.Set__orig(fsdb_itm.Orig_w(), fsdb_itm.Orig_h(), xfer_itm.Orig_file_len()); // copy orig props from orig_itm to xfer_itm - Xof_repo_itm repo = wiki.File_mgr().Repo_mgr().Repos_get_by_wiki(fsdb_itm.Orig_repo_name()).Trg(); - fsdb_itm.Ctor_by_html(repo, url_bldr, tmp_img_size, exec_tid); - xfer_itm.Trg_repo_(repo); - xfer_itm.Html_orig_src_(Bry_.new_utf8_(fsdb_itm.Html_orig_url().To_http_file_str())); // always set orig_url; note that w,h are not necessary for orig url; orig url needed for [[Media:]] links; DATE:2014-01-19 - gplx.ios.IoItmFil fil = Io_mgr._.QueryFil(fsdb_itm.Html_view_url()); - if (fil.Exists()) { - if (fil.Size() == 0) // NOTE: fix; XOWA used to write 0 byte files if file was missing, delete them and do not return true; DATE:2014-06-21 - Io_mgr._.DeleteFil(fsdb_itm.Html_view_url()); - else { - xfer_itm.Calc_by_fsdb(fsdb_itm.Html_w(), fsdb_itm.Html_h(), fsdb_itm.Html_view_url(), fsdb_itm.Html_orig_url()); - return true; - } + Xof_fsdb_itm fsdb = (Xof_fsdb_itm)fsdb_hash.Fetch(xfer.Lnki_ttl()); + xfer.File_exists_n_(); + if (fsdb == null) return false; // no orig_data found for the ttl + Xof_repo_itm repo = wiki.File_mgr().Repo_mgr().Repos_get_by_wiki(fsdb.Orig_repo_name()).Trg(); + fsdb.Lnki_size_(xfer.Lnki_w(), xfer.Lnki_h()); // NOTE: must overwrite fsdb.size with xfer.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.Ctor_for_html(exec_tid, img_size, repo, url_bldr); + xfer.Url_bldr_(url_bldr); // default Url_bldr for xfer uses @ for thumbtime; switch to -; DATE:2014-02-02 + xfer.Trg_repo_(repo); + xfer.Lnki_ext_(fsdb.Lnki_ext()); // WORKAROUND: hacky, but fsdb knows when ogg is ogv whereas xfer does not; so, always override xfer.ext with fsdb's; DATE:2014-02-02 + xfer.Init_by_orig(fsdb.Orig_repo_id(), fsdb.Orig_repo_name(), fsdb.Orig_ttl(), fsdb.Orig_ext(), fsdb.Orig_w(), fsdb.Orig_h(), fsdb.Orig_redirect(), xfer.Orig_file_len()); // copy orig props from orig_itm to xfer + xfer.Html_orig_url_(Bry_.new_utf8_(fsdb.Html_orig_url().To_http_file_str())); // always set orig_url; note that w,h are not necessary for orig url; orig url needed for [[Media:]] links; DATE:2014-01-19 + gplx.ios.IoItmFil fil = Io_mgr._.QueryFil(fsdb.Html_view_url()); + if (fil.Exists()) { + if (fil.Size() == 0) // NOTE: fix; XOWA used to write 0 byte files if file was missing, delete them and do not return true; DATE:2014-06-21 + Io_mgr._.DeleteFil(fsdb.Html_view_url()); + else { + xfer.Calc_by_fsdb(fsdb.Html_w(), fsdb.Html_h(), fsdb.Html_view_url(), fsdb.Html_orig_url()); + xfer.File_exists_y_(); + return true; } - // TODO: replace above with this block; WHEN: mocking file database tests; DATE:2014-05-03 - // boolean found = Io_mgr._.ExistsFil(fsdb_itm.Html_url()); - // Io_url html_url = found ? fsdb_itm.Html_url() : null; - // xfer_itm.Atrs_calc_by_fsdb(fsdb_itm.Html_w(), fsdb_itm.Html_h(), html_url, fsdb_itm.Html_orig_url()); - // return found; } return false; } catch (Exception e) { - wiki.Appe().Usr_dlg().Warn_many("", "", "failed to find img: img=~{0} err=~{1}", String_.new_utf8_(xfer_itm.Lnki_ttl()), Err_.Message_gplx_brief(e)); + Xoa_app_.Usr_dlg().Warn_many("", "", "failed to find img: img=~{0} err=~{1}", String_.new_utf8_(xfer.Lnki_ttl()), Err_.Message_gplx_brief(e)); return false; } } - private void Create_xfer_itms(ListAdp lnki_list, int upright_patch) { + private void Make_fsdb_list(ListAdp lnki_list, int upright_patch) { int len = lnki_list.Count(); for (int i = 0; i < len; i++) { Xop_lnki_tkn lnki_tkn = (Xop_lnki_tkn)lnki_list.FetchAt(i); - Xof_fsdb_itm fsdb_itm = new Xof_fsdb_itm(); - Init_fsdb_by_lnki(fsdb_itm, lnki_tkn, upright_patch); - fsdb_list.Add(fsdb_itm); + Xof_fsdb_itm fsdb = new Xof_fsdb_itm(); + fsdb.Ctor_by_lnki(lnki_tkn.Ttl().Page_db(), lnki_tkn.Lnki_type(), lnki_tkn.W(), lnki_tkn.H(), upright_patch, lnki_tkn.Upright(), lnki_tkn.Time(), lnki_tkn.Page()); + fsdb_list.Add(fsdb); } } - private void Hash_xfer_itms() { + private void Make_fsdb_hash() { int len = fsdb_list.Count(); for (int i = 0; i < len; i++) { - Xof_fsdb_itm fsdb_itm = (Xof_fsdb_itm)fsdb_list.FetchAt(i); - Hash_xfer_itms_add(fsdb_itm.Lnki_ttl(), fsdb_itm); - Hash_xfer_itms_add(fsdb_itm.Orig_ttl(), fsdb_itm); // redirect + Xof_fsdb_itm fsdb = (Xof_fsdb_itm)fsdb_list.FetchAt(i); + Make_fsdb_hash_add(fsdb.Lnki_ttl(), fsdb); + Make_fsdb_hash_add(fsdb.Orig_ttl(), fsdb); // redirect } } - private void Hash_xfer_itms_add(byte[] key, Xof_fsdb_itm itm) { + private void Make_fsdb_hash_add(byte[] key, Xof_fsdb_itm itm) { if ( Bry_.Len_gt_0(key) // ignore null / empty itms; needed for redirects - && !xfer_list.Has(key) // don't add if already there + && !fsdb_hash.Has(key) // don't add if already there && orig_regy.Has(key) // add if found in orig_regy ) - xfer_list.Add(key, itm); - } - private void Init_fsdb_by_lnki(Xof_fsdb_itm fsdb_itm, Xop_lnki_tkn lnki_tkn, int lnki_upright_patch) { - byte[] lnki_ttl = lnki_tkn.Ttl().Page_db(); - Xof_ext lnki_ext = Xof_ext_.new_by_ttl_(lnki_ttl); - byte[] lnki_md5 = Xof_xfer_itm_.Md5_(lnki_ttl); - fsdb_itm.Ctor_by_lnki(lnki_ttl, lnki_ext, lnki_md5, lnki_tkn.Lnki_type(), lnki_tkn.Lnki_w(), lnki_tkn.Lnki_h(), lnki_upright_patch, lnki_tkn.Upright(), lnki_tkn.Thumbtime(), lnki_tkn.Page()); - } - private void Init_fsdb_by_xfer(Xof_fsdb_itm fsdb_itm, Xof_xfer_itm xfer_itm) { // DELETE: DATE:2014-02-04 - 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_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); -// fsdb_itm.Init_by_lnki(lnki_ttl, lnki_ext, lnki_md5, xfer_itm.Lnki_type(), xfer_itm.Lnki_w(), xfer_itm.Lnki_h(), xfer_itm.Lnki_upright(), xfer_itm.Lnki_thumbtime(), xfer_itm.Lnki_page()); + fsdb_hash.Add(key, itm); } } diff --git a/400_xowa/src/gplx/xowa/files/Xof_doc_page.java b/400_xowa/src/gplx/xowa/files/Xof_lnki_page.java similarity index 96% rename from 400_xowa/src/gplx/xowa/files/Xof_doc_page.java rename to 400_xowa/src/gplx/xowa/files/Xof_lnki_page.java index 69df7dd58..527fff3bc 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_doc_page.java +++ b/400_xowa/src/gplx/xowa/files/Xof_lnki_page.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.files; import gplx.*; import gplx.xowa.*; import gplx.dbs.*; -public class Xof_doc_page { +public class Xof_lnki_page { public static final int Null = -1; public static boolean Null_y(int v) {return v == Null;} public static boolean Null_n(int v) {return v != Null;} diff --git a/400_xowa/src/gplx/xowa/files/Xof_doc_thumb.java b/400_xowa/src/gplx/xowa/files/Xof_lnki_time.java similarity index 92% rename from 400_xowa/src/gplx/xowa/files/Xof_doc_thumb.java rename to 400_xowa/src/gplx/xowa/files/Xof_lnki_time.java index c85bcae6b..34bd25213 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_doc_thumb.java +++ b/400_xowa/src/gplx/xowa/files/Xof_lnki_time.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.files; import gplx.*; import gplx.xowa.*; import gplx.dbs.*; -public class Xof_doc_thumb { +public class Xof_lnki_time { public static double Db_save_double(double v) {return v;} public static double Db_load_double(DataRdr rdr, String fld) {return rdr.ReadDouble(fld);} public static double Db_load_double(Db_rdr rdr, String fld) {return rdr.Read_double(fld);} @@ -33,9 +33,9 @@ public class Xof_doc_thumb { public static final int Null_as_int = -1; 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 int Convert_to_xowa_page (int ext, double val) {return Xof_ext_.Id_supports_page(ext) ? (int)val : Xof_lnki_page.Null;} public static double Convert_to_fsdb_thumbtime (int ext, double thumbtime, int page) { - return page != Xof_doc_page.Null + return page != Xof_lnki_page.Null && Xof_ext_.Id_supports_page(ext) // redefine thumbtime to page if pdf ? page : thumbtime 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 9c6accee1..6cb41eef0 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_url_bldr.java +++ b/400_xowa/src/gplx/xowa/files/Xof_url_bldr.java @@ -20,7 +20,7 @@ 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; - private double time = Xof_doc_thumb.Null; private int page = Xof_doc_page.Null; private byte time_dlm = Byte_ascii.At; + private double time = Xof_lnki_time.Null; private int page = Xof_lnki_page.Null; private byte time_dlm = Byte_ascii.At; private byte[] root; private byte dir_spr; private boolean fsys_tid_is_wnt; private boolean wmf_dir_hive; private boolean wmf_protocol_is_file; private int md5_dir_depth; private byte[] area; public Xof_url_bldr Root_(byte[] v) {root = v; return this;} public Xof_url_bldr Init_by_root(byte[] root, byte dir_spr, boolean wmf_dir_hive, boolean wmf_protocol_is_file, int md5_dir_depth) { @@ -63,13 +63,9 @@ 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() - ; + public Io_url To_url_trg(Xof_repo_itm repo_itm, Xof_fsdb_itm itm, boolean orig) { + byte mode = orig ? Xof_repo_itm.Mode_orig : Xof_repo_itm.Mode_thumb; + return this.Init_for_trg_file(mode, repo_itm, 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(); @@ -104,9 +100,9 @@ public class Xof_url_bldr { private Xof_url_bldr Add_thumb_xowa() { bfr.Add_byte(dir_spr); // add dir_spr; EX: "\" bfr.Add_int_variable(file_w).Add(Bry_px); // add file_w; EX: "220px" - if (Xof_doc_thumb.Null_n(time)) - bfr.Add_byte(time_dlm).Add_str(Xof_doc_thumb.X_str(time)); // add time EX: "@5" - else if (page != Xof_doc_page.Null) + if (Xof_lnki_time.Null_n(time)) + bfr.Add_byte(time_dlm).Add_str(Xof_lnki_time.X_str(time)); // add time EX: "@5" + else if (page != Xof_lnki_page.Null) bfr.Add_byte(Byte_ascii.Dash).Add_int_variable(page); // add page EX: "-5" bfr.Add_byte(Byte_ascii.Dot); // add . EX: "." if (file_is_thumb) @@ -122,8 +118,8 @@ public class Xof_url_bldr { case Xof_ext_.Id_ogg: case Xof_ext_.Id_ogv: case Xof_ext_.Id_webm: - if (Xof_doc_thumb.Null_n(time)) - bfr.Add(Bry_seek).Add_str(Xof_doc_thumb.X_str(time)).Add_byte(Byte_ascii.Dash);// add seek; EX: "seek%3D5-" + if (Xof_lnki_time.Null_n(time)) + bfr.Add(Bry_seek).Add_str(Xof_lnki_time.X_str(time)).Add_byte(Byte_ascii.Dash);// add seek; EX: "seek%3D5-" else bfr.Add(Bry_mid); // add mid; EX: "mid-" break; @@ -164,7 +160,7 @@ public class Xof_url_bldr { return this; } private void Add_thumb_wmf_page(byte[] bry_page_1, byte[] bry_page) { - if (Xof_doc_thumb.Null_y(page)) + if (Xof_lnki_time.Null_y(page)) bfr.Add(bry_page_1); // add "lossy-page1-" EX: "lossy-page1-" else { bfr.Add(bry_page); // add "lossy-page" EX: "lossy-page" @@ -174,7 +170,7 @@ public class Xof_url_bldr { } private Xof_url_bldr Clear() { root = area = ttl = md5 = null; - file_w = 0; time = Xof_doc_thumb.Null; + file_w = 0; time = Xof_lnki_time.Null; ext = null; bfr.Clear(); return this; diff --git a/400_xowa/src/gplx/xowa/files/Xof_url_bldr_tst.java b/400_xowa/src/gplx/xowa/files/Xof_url_bldr_tst.java index a6f97cd05..f2d271f6a 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_url_bldr_tst.java +++ b/400_xowa/src/gplx/xowa/files/Xof_url_bldr_tst.java @@ -36,13 +36,13 @@ class Xof_url_bldr_fxt { public Xof_url_bldr_fxt Root_(String v) {root = v; return this;} private String root; public Xof_url_bldr_fxt Md5_(String v) {md5 = v; return this;} private String md5; public Xof_url_bldr_fxt Ttl_(String v) {ttl = v; ext = Xof_ext_.new_by_ttl_(Bry_.new_utf8_(v)); return this;} private String ttl; Xof_ext ext; - public Xof_url_bldr_fxt Page_(int v) {page = v; return this;} private int page = Xof_doc_page.Null; - public Xof_url_bldr_fxt Seek_(int v) {seek = v; return this;} private double seek = Xof_doc_thumb.Null; + public Xof_url_bldr_fxt Page_(int v) {page = v; return this;} private int page = Xof_lnki_page.Null; + public Xof_url_bldr_fxt Seek_(int v) {seek = v; return this;} private double seek = Xof_lnki_time.Null; public Xof_url_bldr_fxt Expd_src_(String v) {expd_src = v; return this;} private String expd_src; private void Clear() { dir_spr = Byte_.Zero; ext = null; root = md5 = ttl = expd_src = null; - seek = Xof_doc_thumb.Null; - page = Xof_doc_page.Null; + seek = Xof_lnki_time.Null; + page = Xof_lnki_page.Null; } public Xof_url_bldr_fxt tst() { url_bldr.Init_by_root(Bry_.new_utf8_(root), dir_spr, Bool_.Y, Bool_.N, 2); 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 344ec9f1f..96402900e 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_xfer_itm.java +++ b/400_xowa/src/gplx/xowa/files/Xof_xfer_itm.java @@ -17,33 +17,39 @@ along with this program. If not, see . */ package gplx.xowa.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.gui.*; import gplx.xowa.files.repos.*; -public class Xof_xfer_itm implements Xof_file_itm { - public byte[] Lnki_ttl() {return lnki_ttl;} private byte[] lnki_ttl; - public byte[] Lnki_md5() {return lnki_md5;} private byte[] lnki_md5; - public Xof_ext Lnki_ext() {return lnki_ext;} public void Lnki_ext_(Xof_ext v) {lnki_ext = v;} private Xof_ext lnki_ext; - public byte[] Lnki_redirect() {return lnki_redirect;} private byte[] lnki_redirect; - 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 = 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; - public int Orig_file_len() {return orig_file_len;} private int orig_file_len; - public int Html_uid() {return html_uid;} private int html_uid = -1; - public byte Html_elem_tid() {return html_elem_tid;} public Xof_xfer_itm Html_elem_tid_(byte v) {html_elem_tid = v; return this;} private byte html_elem_tid = Xof_html_elem.Tid_none; - public int Html_w() {return html_w;} private int html_w; - public int Html_h() {return html_h;} private int html_h; - public byte[] Html_view_src() {return html_view_src;} private byte[] html_view_src = Bry_.Empty; - public byte[] Html_orig_src() {return html_orig_src;} public void Html_orig_src_(byte[] v) {this.html_orig_src = v;} private byte[] html_orig_src = Bry_.Empty; - public boolean Html_pass() {return html_pass;} private boolean html_pass; - public Js_img_wkr Html_img_wkr() {return html_img_wkr;} public Xof_xfer_itm Html_img_wkr_(Js_img_wkr v) {html_img_wkr = v; return this;} private Js_img_wkr html_img_wkr; - public int File_w() {return file_w == -1 ? html_w : file_w;} public void File_w_(int v) {file_w = v;} private int file_w = -1; // NOTE: for itm_meta, file_w == html_w - public boolean Img_is_thumbable() {return img_is_thumbable;} private boolean img_is_thumbable; // SEE:NOTE_1:Lnki_thumbable - public boolean Img_is_orig() {return !img_is_thumbable;} - public int Gallery_mgr_h() {return gallery_mgr_h;} public Xof_xfer_itm Gallery_mgr_h_(int v) {gallery_mgr_h = v; return this;} private int gallery_mgr_h = Int_.Neg1; - public boolean File_found() {return file_found;} public Xof_xfer_itm File_found_(boolean v) {file_found = v; return this;} private boolean file_found; +public class Xof_xfer_itm implements Xof_file_itm { + public byte[] Lnki_ttl() {return lnki_ttl;} private byte[] lnki_ttl; + public byte[] Lnki_md5() {return lnki_md5;} private byte[] lnki_md5; + public Xof_ext Lnki_ext() {return lnki_ext;} private Xof_ext 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 = Xof_lnki_time.Null; + public int Lnki_page() {return lnki_page;} private int lnki_page = Xof_lnki_page.Null; + public byte Orig_repo_id() {return orig_repo_id;} private byte orig_repo_id = Xof_repo_itm.Repo_null; + public byte[] Orig_repo_name() {return orig_repo_name;} private byte[] orig_repo_name; + public byte[] Orig_ttl() {return orig_ttl;} private byte[] orig_ttl; + public int Orig_ext() {return orig_ext;} private int orig_ext; + public int Orig_w() {return orig_w;} private int orig_w; + public int Orig_h() {return orig_h;} private int orig_h; + public byte[] Orig_redirect() {return orig_redirect;} private byte[] orig_redirect; + public int Orig_file_len() {return orig_file_len;} private int orig_file_len; + public int File_w() {return file_w == -1 ? html_w : file_w;} public void File_w_(int v) {file_w = v;} private int file_w = -1; // NOTE: for itm_meta, file_w == html_w + public int Html_uid() {return html_uid;} private int html_uid = -1; + public byte Html_elem_tid() {return html_elem_tid;} private byte html_elem_tid = Xof_html_elem.Tid_none; + public int Html_w() {return html_w;} private int html_w; + public int Html_h() {return html_h;} private int html_h; + public byte[] Html_view_url() {return html_view_url;} private byte[] html_view_url = Bry_.Empty; + public byte[] Html_orig_url() {return html_orig_url;} public void Html_orig_url_(byte[] v) {this.html_orig_url = v;} private byte[] html_orig_url = Bry_.Empty; + public int Gallery_mgr_h() {return gallery_mgr_h;} public Xof_xfer_itm Gallery_mgr_h_(int v) {gallery_mgr_h = v; return this;} private int gallery_mgr_h = Int_.Neg1; + public Js_img_wkr Html_img_wkr() {return html_img_wkr;} public Xof_xfer_itm Html_img_wkr_(Js_img_wkr v) {html_img_wkr = v; return this;} private Js_img_wkr html_img_wkr; + public boolean Html_pass() {return html_pass;} private boolean html_pass; + public boolean Img_is_thumbable() {return img_is_thumbable;} private boolean img_is_thumbable; // SEE:NOTE_1:Lnki_thumbable + public boolean Img_is_orig() {return !img_is_thumbable;} + public boolean File_found() {return file_found;} public Xof_xfer_itm File_found_(boolean v) {file_found = v; return this;} + public boolean File_exists() {return file_exists;} public void File_exists_y_() {file_exists = Bool_.Y;} public void File_exists_n_() {file_exists = Bool_.N;} private boolean file_exists; + private boolean file_found; public Xof_meta_itm Meta_itm() {return meta_itm;} private Xof_meta_itm meta_itm; public Xof_repo_itm Trg_repo() {return trg_repo;} public Xof_xfer_itm Trg_repo_(Xof_repo_itm v) { @@ -59,13 +65,13 @@ public class Xof_xfer_itm implements Xof_file_itm { 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_time = Xof_doc_thumb.Null; lnki_page = Xof_doc_page.Null; - img_is_thumbable = false; + lnki_type = orig_repo_id = Byte_.Max_value_127; + lnki_w = lnki_h = file_w = orig_ext = orig_w = orig_h = html_w = html_h = gallery_mgr_h = Int_.Neg1; + lnki_upright = Int_.Neg1; lnki_time = Xof_lnki_time.Null; lnki_page = Xof_lnki_page.Null; + file_found = file_exists = 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; - html_orig_src = html_view_src = Bry_.Empty; + orig_repo_name = orig_ttl = orig_redirect = null; lnki_ttl = null; lnki_md5 = null; lnki_ext = null; + html_orig_url = html_view_url = Bry_.Empty; trg_repo_idx = Int_.Neg1; meta_itm = null; html_uid = Int_.Neg1; html_elem_tid = Xof_html_elem.Tid_none; return this; @@ -74,40 +80,60 @@ public class Xof_xfer_itm implements Xof_file_itm { 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_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; - rv.html_w = html_w; rv.html_h = html_h; rv.html_view_src = html_view_src; rv.html_orig_src = html_orig_src; + rv.orig_repo_id = orig_repo_id; rv.orig_repo_name = orig_repo_name; rv.orig_ttl = orig_ttl; rv.orig_ext = orig_ext; rv.orig_w = orig_w; rv.orig_h = orig_h; rv.orig_redirect = orig_redirect; + rv.orig_file_len = orig_file_len; + rv.lnki_ttl = lnki_ttl; rv.lnki_md5 = lnki_md5; rv.lnki_ext = lnki_ext; + rv.html_w = html_w; rv.html_h = html_h; rv.html_view_url = html_view_url; rv.html_orig_url = html_orig_url; rv.file_w = file_w; rv.trg_repo_idx = trg_repo_idx; rv.trg_repo_root = trg_repo_root; rv.meta_itm = meta_itm; // NOTE: shared reference rv.html_uid = html_uid; rv.html_elem_tid = html_elem_tid; rv.gallery_mgr_h = gallery_mgr_h; + rv.file_exists = file_exists; return rv; } - 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) { + public Xof_xfer_itm Init_by_lnki(byte[] ttl, byte[] redirect, byte lnki_type, int w, int h, double upright, double time, int 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_time = 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 = time; this.lnki_page = page; img_is_thumbable = Xof_xfer_itm_.Lnki_thumbable_calc(lnki_type, lnki_w, lnki_h); - 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 + if (lnki_time != Xof_lnki_time.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_lnki_time.Null; // disable thumbtime return this; } + public void Init_by_orig_old(int w, int h, int orig_file_len) { + this.orig_w = w; this.orig_h = h; this.orig_file_len = orig_file_len; + } + public void Init_by_orig(byte orig_repo_id, byte[] orig_repo_name, byte[] orig_ttl, int orig_ext, int orig_w, int orig_h, byte[] orig_redirect, int orig_file_len) { + this.orig_repo_id = orig_repo_id; this.orig_repo_name = orig_repo_name; + this.orig_ttl = orig_ttl; this.orig_ext = orig_ext; + this.orig_w = orig_w; this.orig_h = orig_h; this.orig_redirect = orig_redirect; + if (orig_ext != lnki_ext.Id()) + this.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 + this.Lnki_ttl_(orig_redirect); // update fsdb with atrs of B.png + this.orig_file_len = orig_file_len; + } + private void Lnki_ttl_(byte[] v) { + lnki_ttl = v; + lnki_ext = Xof_ext_.new_by_ttl_(v); + lnki_md5 = Xof_xfer_itm_.Md5_calc(v); + } public void Init_for_gallery(int html_w, int html_h, int file_w) { this.html_w = html_w; this.html_h = html_h; this.file_w = file_w; } public void Init_for_gallery_update(int html_w, int html_h, String view_src, String orig_src) { this.html_w = html_w; this.html_h = html_h; - this.html_view_src = Bry_.new_utf8_(view_src); - this.html_orig_src = Bry_.new_utf8_(orig_src); + this.html_view_url = Bry_.new_utf8_(view_src); + this.html_orig_url = Bry_.new_utf8_(orig_src); this.html_pass = true; this.file_found = true; } - public void Init_for_test__img(int html_w, int html_h, byte[] html_view_src, byte[] html_orig_src) {this.html_w = html_w; this.html_h = html_h; this.html_view_src = html_view_src; this.html_orig_src = html_orig_src;} + public void Init_for_test__img(int html_w, int html_h, byte[] html_view_url, byte[] html_orig_url) {this.html_w = html_w; this.html_h = html_h; this.html_view_url = html_view_url; this.html_orig_url = html_orig_url;} public Xof_xfer_itm Set__ttl(byte[] ttl, byte[] redirect) { - this.lnki_redirect = redirect; - this.lnki_ttl = lnki_redirect == Xop_redirect_mgr.Redirect_null_bry ? Bry_.Copy(ttl) : lnki_redirect; + this.orig_redirect = redirect; + this.lnki_ttl = orig_redirect == Xop_redirect_mgr.Redirect_null_bry ? Bry_.Copy(ttl) : orig_redirect; this.lnki_ttl = Xof_xfer_itm_.Md5_decoder.Decode_lax(Xof_xfer_itm_.Ttl_standardize(lnki_ttl)); // NOTE: this line is repeated in static method below this.lnki_md5 = Xof_xfer_itm_.Md5_calc(lnki_ttl); // NOTE: md5 is calculated off of url_decoded ttl; EX: A%2Cb is converted to A,b and then md5'd. note that A%2Cb still remains the title this.lnki_ext = Xof_ext_.new_by_ttl_(lnki_ttl); @@ -115,7 +141,6 @@ public class Xof_xfer_itm implements Xof_file_itm { } public void Set__html_size(int html_w, int html_h) {this.html_w = html_w; this.html_h = html_h; } public Xof_xfer_itm Set__html_uid_tid(int uid, byte tid) {html_uid = uid; html_elem_tid = tid; return this;} - public Xof_xfer_itm Set__orig(int w, int h, int orig_file_len) {this.orig_w = w; this.orig_h = h; this.orig_file_len = orig_file_len; return this;} public void Set__meta(Xof_meta_itm meta_itm, Xof_repo_itm trg_repo, int thumb_w_img) { this.meta_itm = meta_itm; Trg_repo_(trg_repo); this.thumb_w_img = thumb_w_img; this.orig_w = meta_itm.Orig_w(); this.orig_h = meta_itm.Orig_h(); // orig_w / orig_h needed for imap; DATE:2014-08-08 @@ -125,13 +150,15 @@ public class Xof_xfer_itm implements Xof_file_itm { html_pass = true; this.html_w = html_w; this.html_h = html_h; - this.html_orig_src = Bry_.new_utf8_(orig_url.To_http_file_str()); - this.html_view_src = Bry_.new_utf8_(view_url.To_http_file_str()); + this.html_orig_url = Bry_.new_utf8_(orig_url.To_http_file_str()); + this.html_view_url = Bry_.new_utf8_(view_url.To_http_file_str()); } + public void Lnki_ext_(Xof_ext v) {lnki_ext = v;} + public Xof_xfer_itm Html_elem_tid_(byte v) {html_elem_tid = v; return this;} public boolean Calc_by_meta() {return Calc_by_meta(false);} public boolean Calc_by_meta(boolean caller_is_file_page) { html_pass = false; - html_orig_src = html_view_src = Bry_.Empty; + html_orig_url = html_view_url = Bry_.Empty; html_w = lnki_w; html_h = lnki_h; if (meta_itm == null || trg_repo == null) return false; if (meta_itm.Ptr_ttl_exists()) { @@ -143,19 +170,19 @@ public class Xof_xfer_itm implements Xof_file_itm { html_w = Xof_img_size.Thumb_width_ogv; if (img_is_thumbable) { // file is thumb 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_time)); + html_orig_url = 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_url, 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_lnki_time.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(); - 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 + html_view_url = 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 html_pass = true; return true; } } else { // regular thumb - html_orig_src = Trg_html(Xof_repo_itm.Mode_orig, Xof_img_size.Size_null_deprecated); + html_orig_url = Trg_html(Xof_repo_itm.Mode_orig, Xof_img_size.Size_null_deprecated); if (lnki_ext.Id_is_audio()) return true; // if audio, do not thumb; even if user requests thumb; Xof_meta_thumb[] thumbs = meta_itm.Thumbs(); int thumbs_len = thumbs.length; Xof_meta_thumb thumb = null; if (lnki_h > 0 && orig_w < 1 && thumbs_len > 0) { // if height is specified and no orig, then iterate over thumbs to find similar height; NOTE: this is a fallback case; orig_w/h is optimal; EX: c:Jacques-Louis David and @@ -175,7 +202,7 @@ public class Xof_xfer_itm implements Xof_file_itm { Xof_xfer_itm_.Calc_xfer_size(calc_size, lnki_type, thumb_w_img, meta_itm.Orig_w(), meta_itm.Orig_h(), html_w, html_h, img_is_thumbable, lnki_upright, limit_size); // calc html_h and html_w; can differ from lnki_w, lnki_h; note that -1 width is handled by thumb_w_img html_w = calc_size.Val_0(); if (html_h != -1) html_h = calc_size.Val_1(); // NOTE: if -1 (no height specified) do not set height; EX:Tokage_2011-07-15.jpg; DATE:2013-06-03 - html_view_src = Trg_html(Xof_repo_itm.Mode_thumb, this.File_w()); + html_view_url = Trg_html(Xof_repo_itm.Mode_thumb, this.File_w()); thumb = meta_itm.Thumbs_get_img(html_w, 0); if (thumb == null) { // exact thumb not found if (html_w == meta_itm.Orig_w() // html_w matches orig_w; occurs when thumb,upright requested, but upright size is larger than orig; PAGE:en.w:St. Petersburg @@ -183,7 +210,7 @@ public class Xof_xfer_itm implements Xof_file_itm { && meta_itm.Orig_exists() == Xof_meta_itm.Exists_y ) { html_h = meta_itm.Orig_h(); - html_view_src = Trg_html(Xof_repo_itm.Mode_orig, -1); + html_view_url = Trg_html(Xof_repo_itm.Mode_orig, -1); html_pass = true; return true; } @@ -201,21 +228,21 @@ public class Xof_xfer_itm implements Xof_file_itm { } else { // file is orig byte mode_id = lnki_ext.Id_is_svg() ? Xof_repo_itm.Mode_thumb : Xof_repo_itm.Mode_orig; // svgs will always return thumb; EX:[[A.svg]] -> A.svg.png - html_view_src = html_orig_src = Trg_html(mode_id, this.File_w()); - 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 + html_view_url = html_orig_url = Trg_html(mode_id, this.File_w()); + 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_url, 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_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 + Xof_meta_thumb thumb = meta_itm.Thumbs_get_vid(Xof_lnki_time.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 + html_view_url = 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 html_pass = true; return true; } } if (meta_itm.Orig_exists() == Xof_meta_itm.Exists_y) { // file found previously >>> gen html html_w = meta_itm.Orig_w(); html_h = meta_itm.Orig_h(); - html_view_src = Trg_html(mode_id, this.File_w()); + html_view_url = Trg_html(mode_id, this.File_w()); html_pass = true; return true; } @@ -228,7 +255,7 @@ public class Xof_xfer_itm implements Xof_file_itm { private boolean Calc_by_meta_found(byte lnki_type, int model_w, int model_h) { Xof_xfer_itm_.Calc_xfer_size(calc_size, lnki_type, thumb_w_img, model_w, model_h, html_w, html_h, img_is_thumbable, lnki_upright, false); // recalc html_w, html_h; note that false passed b/c truncation is not needed html_w = calc_size.Val_0(); html_h = calc_size.Val_1(); - html_view_src = Trg_html(Xof_repo_itm.Mode_thumb, model_w); // note that thumb.Width is used (the actual file width), not html_w + html_view_url = Trg_html(Xof_repo_itm.Mode_thumb, model_w); // note that thumb.Width is used (the actual file width), not html_w html_pass = true; return true; } 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 81ffd10be..3ddd06b1c 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 @@ -40,36 +40,34 @@ public class Xof_bin_mgr implements GfoInvkAble { Io_stream_rdr rdr = Find_as_rdr(exec_tid, itm); if (rdr == Io_stream_rdr_.Null) return Io_url_.Null; Io_url trg = itm.Html_view_url(); - if (itm.Rslt_fil_created()) return trg; // rdr is opened directly from trg; return its url; occurs when url goes through imageMagick / inkscape, or when thumb is already on disk; - Io_stream_wtr_.Save_rdr(trg, rdr); // rdr is stream; either from http_wmf or fsdb; save to trg and return; - if (itm.Rslt_bin() == Xof_bin_wkr_.Tid_fsdb_xowa) { // rdr is coming from fsdb; register in cache - if (!Env_.Mode_testing()) - cache_mgr.Reg(itm, rdr.Len()); - } + if (itm.File_resized()) return trg; // rdr is opened directly from trg; return its url; occurs when url goes through imageMagick / inkscape, or when thumb is already on disk; + Io_stream_wtr_.Save_rdr(trg, rdr); // rdr is stream; either from http_wmf or fsdb; save to trg and return; + if (!Env_.Mode_testing()) cache_mgr.Reg(itm, rdr.Len()); return trg; } public Io_stream_rdr Find_as_rdr(byte exec_tid, Xof_fsdb_itm itm) { Io_stream_rdr rv = Io_stream_rdr_.Null; + Xof_repo_itm repo = repo_mgr.Repos_get_by_wiki(itm.Orig_repo_name()).Trg(); 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 = url_bldr.To_url(repo_mgr, itm, Bool_.Y); + Io_url trg = url_bldr.To_url_trg(repo, itm, Bool_.Y); itm.Html_view_url_(trg); for (int i = 0; i < wkrs_len; i++) { Xof_bin_wkr wkr = wkrs[i]; rv = wkr.Get_as_rdr(itm, Bool_.N, itm.Html_w()); if (rv == Io_stream_rdr_.Null) continue; // orig not found; continue; - itm.Rslt_bin_(wkr.Tid()); + itm.File_exists_y_(); return rv; } } else { // thumb - Io_url trg = url_bldr.To_url(repo_mgr, itm, Bool_.N); + Io_url trg = url_bldr.To_url_trg(repo, itm, Bool_.N); itm.Html_view_url_(trg); for (int i = 0; i < wkrs_len; i++) { Xof_bin_wkr wkr = wkrs[i]; rv = wkr.Get_as_rdr(itm, Bool_.Y, itm.Html_w()); // get thumb's bin if (rv != Io_stream_rdr_.Null) { // thumb's bin exists; - itm.Rslt_bin_(wkr.Tid()); + itm.File_exists_y_(); return rv; } usr_dlg.Log_direct(String_.Format("thumb not found; ttl={0} w={1} ", String_.new_utf8_(itm.Lnki_ttl()), itm.Lnki_w())); @@ -79,12 +77,11 @@ public class Xof_bin_mgr implements GfoInvkAble { continue; // nothing found; continue; } if (!wkr.Resize_allowed()) continue; - Io_url orig = url_bldr.To_url(repo_mgr, itm, Bool_.Y); // get orig url + Io_url orig = url_bldr.To_url_trg(repo, 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; - itm.Rslt_bin_(wkr.Tid()); - itm.Rslt_fil_created_(true); + itm.File_exists_y_(); rv = Io_stream_rdr_.file_(trg); // return stream of resized url; (result of imageMagick / inkscape) rv.Open(); return rv; @@ -95,7 +92,7 @@ public class Xof_bin_mgr implements GfoInvkAble { private boolean Resize(byte exec_tid, Xof_fsdb_itm itm, boolean file_is_orig, Io_url src, Io_url trg) { tmp_size.Html_size_calc(exec_tid, itm.Lnki_w(), itm.Lnki_h(), itm.Lnki_type(), mnt_mgr.Patch_upright(), itm.Lnki_upright(), itm.Lnki_ext().Id(), itm.Orig_w(), itm.Orig_h(), Xof_img_size.Thumb_width_img); boolean rv = resizer.Exec(src, trg, tmp_size.Html_w(), tmp_size.Html_h(), itm.Lnki_ext().Id(), resize_warning); - itm.Rslt_cnv_(rv ? Xof_cnv_wkr_.Tid_y : Xof_cnv_wkr_.Tid_n); + itm.File_resized_y_(); return rv; } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { diff --git a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__fsdb_sql.java b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__fsdb_sql.java index ac6abf2e0..1c2f60c98 100644 --- a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__fsdb_sql.java +++ b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__fsdb_sql.java @@ -41,10 +41,10 @@ public class Xof_bin_wkr__fsdb_sql implements Xof_bin_wkr, GfoInvkAble { private void Find_ids(byte[] orig_repo, byte[] orig_ttl, int orig_ext, double lnki_time, int lnki_page, boolean is_thumb, int w, Int_obj_ref tmp_itm_id, Int_obj_ref tmp_bin_id, Int_obj_ref tmp_mnt_id) { synchronized (tmp_bin_id) { byte[] dir = orig_repo, fil = orig_ttl; - double time = Xof_doc_thumb.Convert_to_fsdb_thumbtime(orig_ext, lnki_time, lnki_page); + double time = Xof_lnki_time.Convert_to_fsdb_thumbtime(orig_ext, lnki_time, lnki_page); if (is_thumb) { - Fsd_thm_itm thm_itm = Fsd_thm_itm.load_(); - Init_thm(orig_ext, w, lnki_time, lnki_page, thm_itm); + Fsd_thm_itm thm_itm = Fsd_thm_itm.new_(); + thm_itm.Init_by_req(w, lnki_time, lnki_page); boolean found = mnt_mgr.Thm_select_bin(dir, fil, thm_itm); tmp_itm_id.Val_(thm_itm.Id()); tmp_bin_id.Val_(found ? thm_itm.Db_bin_id() : Fsd_bin_tbl.Null_db_bin_id); @@ -58,12 +58,6 @@ public class Xof_bin_wkr__fsdb_sql implements Xof_bin_wkr, GfoInvkAble { } } } - private void Init_thm(int src_ext_id, int src_w, double src_time, int src_page, Fsd_thm_itm trg) { - trg.Owner().Ext_id_(src_ext_id); - trg.Width_(src_w); - trg.Thumbtime_(src_time); - trg.Page_(src_page); - } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.MatchIn(k, Invk_url_)) mnt_mgr.Init_by_wiki(m.ReadIoUrl("v"), Bool_.Y); else return GfoInvkAble_.Rv_unhandled; diff --git a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__http_wmf.java b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__http_wmf.java index ebf151b7f..e09865d83 100644 --- a/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__http_wmf.java +++ b/400_xowa/src/gplx/xowa/files/bins/Xof_bin_wkr__http_wmf.java @@ -24,15 +24,18 @@ public class Xof_bin_wkr__http_wmf implements Xof_bin_wkr { public byte Tid() {return Xof_bin_wkr_.Tid_http_wmf;} public boolean Resize_allowed() {return bin_wkr_resize;} public void Resize_allowed_(boolean v) {bin_wkr_resize = v;} private boolean bin_wkr_resize = true; public int Fail_timeout() {return fail_timeout;} public Xof_bin_wkr__http_wmf Fail_timeout_(int v) {fail_timeout = v; return this;} private int fail_timeout = 0; // NOTE: always default to 0; manually set to 1000 for fsdb_make only; DATE:2014-06-21 - public Io_stream_rdr Get_as_rdr(Xof_fsdb_itm itm, boolean is_thumb, int w) { - Download_init(itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), is_thumb, w, itm.Lnki_time(), itm.Lnki_page(), Io_url_.Null); + public Io_stream_rdr Get_as_rdr(Xof_fsdb_itm fsdb, boolean is_thumb, int w) { + Download_init(fsdb.Orig_repo_name(), fsdb.Lnki_ttl(), fsdb.Lnki_md5(), fsdb.Lnki_ext(), is_thumb, w, fsdb.Lnki_time(), fsdb.Lnki_page(), Io_url_.Null); Io_stream_rdr rdr = download_wkr.Exec_as_rdr(); boolean rv = rdr.Len() != IoItmFil.Size_invalid; // NOTE: use IoItmFil.Size_invalid, not Io_stream_rdr_.Read_done; DATE:2014-06-21 if (!rv) Handle_error(); + fsdb.Fsdb_insert_y_(); return rv ? rdr : Io_stream_rdr_.Null; } - public boolean Get_to_fsys(Xof_fsdb_itm itm, boolean is_thumb, int w, Io_url bin_url) { - return Get_to_fsys(itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_md5(), itm.Lnki_ext(), is_thumb, w, itm.Lnki_time(), itm.Lnki_page(), bin_url); + public boolean Get_to_fsys(Xof_fsdb_itm fsdb, boolean is_thumb, int w, Io_url bin_url) { + boolean rv = Get_to_fsys(fsdb.Orig_repo_name(), fsdb.Lnki_ttl(), fsdb.Lnki_md5(), fsdb.Lnki_ext(), is_thumb, w, fsdb.Lnki_time(), fsdb.Lnki_page(), bin_url); + if (rv) fsdb.Fsdb_insert_y_(); + return rv; } private boolean Get_to_fsys(byte[] orig_repo, byte[] orig_ttl, byte[] orig_md5, Xof_ext orig_ext, boolean lnki_is_thumb, int file_w, double lnki_time, int lnki_page, Io_url file_url) { Download_init(orig_repo, orig_ttl, orig_md5, orig_ext, lnki_is_thumb, file_w, lnki_time, lnki_page, file_url); diff --git a/400_xowa/src/gplx/xowa/files/caches/Xofc_cache_itm.java b/400_xowa/src/gplx/xowa/files/caches/Xofc_cache_itm.java new file mode 100644 index 000000000..786e27e34 --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/caches/Xofc_cache_itm.java @@ -0,0 +1,65 @@ +/* +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.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +class Xofc_cache_itm { + public Xofc_cache_itm + ( Bry_bfr lnki_key_bfr, int uid, byte db_state + , int lnki_wiki, byte[] lnki_ttl, int lnki_type, double lnki_upright, int lnki_w, int lnki_h, double lnki_time, int lnki_page + , int orig_wiki, byte[] orig_ttl, int orig_ext, int file_w, int file_h, double file_time, int file_page + , long temp_file_size, int temp_view_count, long temp_view_date, int temp_w + ) { + this.uid = uid; this.db_state = db_state; + this.lnki_wiki = lnki_wiki; this.lnki_ttl = lnki_ttl; this.lnki_type = lnki_type; this.lnki_upright = lnki_upright; this.lnki_w = lnki_w; this.lnki_h = lnki_h; this.lnki_time = lnki_time; this.lnki_page = lnki_page; + this.orig_wiki = orig_wiki; this.orig_ttl = orig_ttl; this.orig_ext = orig_ext; this.file_w = file_w; this.file_h = file_h; this.file_time = file_time; this.file_page = file_page; + this.temp_file_size = temp_file_size; this.temp_view_count = temp_view_count; this.temp_view_date = temp_view_date; this.temp_w = temp_w; + lnki_key_bfr + .Add_int_variable(lnki_wiki).Add_byte_pipe() + .Add(lnki_ttl).Add_byte_pipe() + .Add_int_variable(lnki_type).Add_byte_pipe() + .Add_double(lnki_upright).Add_byte_pipe() + .Add_int_variable(lnki_w).Add_byte_pipe() + .Add_int_variable(lnki_h).Add_byte_pipe() + .Add_double(lnki_time).Add_byte_pipe() + .Add_int_variable(lnki_page) + ; + lnki_key = lnki_key_bfr.Xto_bry_and_clear(); + } + public int Uid() {return uid;} private int uid; + public byte Db_state() {return db_state;} public void Db_state_(byte v) {db_state = v;} private byte db_state; + public byte[] Lnki_key() {return lnki_key;} private final byte[] lnki_key; + public int Lnki_wiki() {return lnki_wiki;} private final int lnki_wiki; + public byte[] Lnki_ttl() {return lnki_ttl;} private final byte[] lnki_ttl; + public int Lnki_type() {return lnki_type;} private final int lnki_type; + public double Lnki_upright() {return lnki_upright;} private final double lnki_upright; + public int Lnki_w() {return lnki_w;} private final int lnki_w; + public int Lnki_h() {return lnki_h;} private final int lnki_h; + public double Lnki_time() {return lnki_time;} private final double lnki_time; + public int Lnki_page() {return lnki_page;} private final int lnki_page; + public int Orig_wiki() {return orig_wiki;} private final int orig_wiki; + public byte[] Orig_ttl() {return orig_ttl;} private final byte[] orig_ttl; + public int Orig_ext() {return orig_ext;} private final int orig_ext; + public int File_w() {return file_w;} private final int file_w; + public int File_h() {return file_h;} private final int file_h; + public double File_time() {return file_time;} private final double file_time; + public int File_page() {return file_page;} private final int file_page; + public long Temp_file_size() {return temp_file_size;} private long temp_file_size; + public int Temp_view_count() {return temp_view_count;} private int temp_view_count; + public long Temp_view_date() {return temp_view_date;} private long temp_view_date; + public int Temp_w() {return temp_w;} private int temp_w; + public static final Xofc_cache_itm Null = null; +} diff --git a/400_xowa/src/gplx/xowa/files/caches/Xofc_cache_tbl.java b/400_xowa/src/gplx/xowa/files/caches/Xofc_cache_tbl.java new file mode 100644 index 000000000..9d984c0db --- /dev/null +++ b/400_xowa/src/gplx/xowa/files/caches/Xofc_cache_tbl.java @@ -0,0 +1,154 @@ +/* +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.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +import gplx.dbs.*; +class Xofc_cache_tbl { + private String tbl_name = "user_file_cache"; private final Db_meta_fld_list flds = Db_meta_fld_list.new_(); + private String + fld_uid + , fld_lnki_wiki, fld_lnki_ttl, fld_lnki_type, fld_lnki_upright, fld_lnki_w, fld_lnki_h, fld_lnki_time, fld_lnki_page + , fld_orig_wiki, fld_orig_ttl, fld_orig_ext, fld_file_w, fld_file_h, fld_file_time, fld_file_page + , fld_temp_file_size, fld_temp_view_count, fld_temp_view_date, fld_temp_w + ; + private Db_conn conn; private final Db_stmt_bldr stmt_bldr = new Db_stmt_bldr(); private Db_stmt select_stmt; + private final Bry_bfr lnki_key_bfr = Bry_bfr.reset_(255); + public void Conn_(Db_conn new_conn, boolean created) { + this.conn = new_conn; flds.Clear(); + fld_uid = flds.Add_int_pkey_autonum("uid"); + fld_lnki_wiki = flds.Add_int("lnki_wiki"); + fld_lnki_ttl = flds.Add_str("lnki_ttl", 255); + fld_lnki_type = flds.Add_int("lnki_type"); + fld_lnki_upright = flds.Add_double("lnki_upright"); + fld_lnki_w = flds.Add_int("lnki_w"); + fld_lnki_h = flds.Add_int("lnki_h"); + fld_lnki_time = flds.Add_double("lnki_time"); + fld_lnki_page = flds.Add_int("lnki_page"); + fld_orig_wiki = flds.Add_int("orig_wiki"); + fld_orig_ttl = flds.Add_str("orig_ttl", 255); + fld_orig_ext = flds.Add_int("orig_ext"); + fld_file_w = flds.Add_int("file_w"); + fld_file_h = flds.Add_int("file_h"); + fld_file_time = flds.Add_double("file_time"); + fld_file_page = flds.Add_int("file_page"); + fld_temp_file_size = flds.Add_long("temp_file_size"); + fld_temp_view_count = flds.Add_int("temp_view_count"); + fld_temp_view_date = flds.Add_long("temp_view_date"); + fld_temp_w = flds.Add_int("temp_w"); + if (created) { + Db_meta_tbl meta = Db_meta_tbl.new_(tbl_name, flds + , Db_meta_idx.new_normal_by_tbl(tbl_name, "main", fld_lnki_wiki, fld_lnki_ttl, fld_lnki_type, fld_lnki_upright, fld_lnki_w, fld_lnki_h, fld_lnki_time, fld_lnki_page) + ); + conn.Exec_create_tbl_and_idx(meta); + } + select_stmt = null; + stmt_bldr.Conn_(conn, tbl_name, flds, fld_uid); + } + public Xofc_cache_itm Select_one(int lnki_wiki, byte[] lnki_ttl, int lnki_type, double lnki_upright, int lnki_w, int lnki_h, double lnki_time, int lnki_page) { + if (select_stmt == null) select_stmt = conn.Rls_reg(conn.Stmt_select(tbl_name, flds, String_.Ary(fld_lnki_wiki, fld_lnki_ttl, fld_lnki_type, fld_lnki_upright, fld_lnki_w, fld_lnki_h, fld_lnki_time, fld_lnki_page))); + Db_rdr rdr = Db_rdr_.Null; + try { + rdr = select_stmt.Clear() + .Crt_int (fld_lnki_wiki , lnki_wiki) + .Crt_bry_as_str (fld_lnki_ttl , lnki_ttl) + .Crt_int (fld_lnki_type , lnki_type) + .Crt_double (fld_lnki_upright , lnki_upright) + .Crt_int (fld_lnki_w , lnki_w) + .Crt_int (fld_lnki_h , lnki_h) + .Crt_double (fld_lnki_time , lnki_time) + .Crt_int (fld_lnki_page , lnki_page) + .Exec_select_as_rdr(); + return rdr.Move_next() ? new_itm(rdr) : Xofc_cache_itm.Null; + } + finally {rdr.Rls();} + } + public void Select_all(Bry_bfr fil_key_bldr, OrderedHash hash) { + hash.Clear(); + Db_stmt stmt = conn.Stmt_select(tbl_name, flds, Db_meta_fld.Ary_empy); + Db_rdr rdr = Db_rdr_.Null; + try { + rdr = stmt.Exec_select_as_rdr(); + while (rdr.Move_next()) { + Xofc_cache_itm itm = new_itm(rdr); + byte[] key = Bry_.Empty; + hash.Add(key, itm); + } + } + finally {rdr.Rls();} + } + public void Db_save(Xofc_cache_itm itm) { + try { + Db_stmt stmt = stmt_bldr.Get(itm.Db_state()); + switch (itm.Db_state()) { + case Db_cmd_mode.Tid_create: stmt.Clear().Val_int(fld_uid, itm.Uid()); Db_save_modify(stmt, itm); stmt.Exec_insert(); break; + case Db_cmd_mode.Tid_update: stmt.Clear(); Db_save_modify(stmt, itm); stmt.Crt_int(fld_uid, itm.Uid()).Exec_update(); break; + case Db_cmd_mode.Tid_delete: stmt.Clear().Crt_int(fld_uid, itm.Uid()); stmt.Exec_delete(); break; + case Db_cmd_mode.Tid_ignore: break; + default: throw Err_.unhandled(itm.Db_state()); + } + itm.Db_state_(Db_cmd_mode.Tid_ignore); + } catch (Exception e) {stmt_bldr.Rls(); throw Err_.err_(e, Err_.Message_gplx(e));} + } + private void Db_save_modify(Db_stmt stmt, Xofc_cache_itm itm) { + stmt.Val_int (itm.Lnki_wiki()) + .Val_bry_as_str (itm.Lnki_ttl()) + .Val_int (itm.Lnki_type()) + .Val_double (itm.Lnki_upright()) + .Val_int (itm.Lnki_w()) + .Val_int (itm.Lnki_h()) + .Val_double (itm.Lnki_time()) + .Val_int (itm.Lnki_page()) + .Val_int (itm.Orig_wiki()) + .Val_bry_as_str (itm.Orig_ttl()) + .Val_int (itm.Orig_ext()) + .Val_int (itm.File_w()) + .Val_int (itm.File_h()) + .Val_double (itm.File_time()) + .Val_int (itm.File_page()) + .Val_long (itm.Temp_file_size()) + .Val_int (itm.Temp_view_count()) + .Val_long (itm.Temp_view_date()) + .Val_int (itm.Temp_w()) + ; + } + private Xofc_cache_itm new_itm(Db_rdr rdr) { + return new Xofc_cache_itm + ( lnki_key_bfr + , rdr.Read_int (fld_uid) + , Db_cmd_mode.Tid_ignore + , rdr.Read_int (fld_lnki_wiki) + , rdr.Read_bry_by_str (fld_lnki_ttl) + , rdr.Read_int (fld_lnki_type) + , rdr.Read_double (fld_lnki_upright) + , rdr.Read_int (fld_lnki_w) + , rdr.Read_int (fld_lnki_h) + , Xof_lnki_time.Db_load_double (rdr, fld_lnki_time) + , Xof_lnki_page.Db_load_int (rdr, fld_lnki_page) + , rdr.Read_int (fld_orig_wiki) + , rdr.Read_bry_by_str (fld_orig_ttl) + , rdr.Read_int (fld_orig_ext) + , rdr.Read_int (fld_file_w) + , rdr.Read_int (fld_file_h) + , Xof_lnki_time.Db_load_double (rdr, fld_file_time) + , Xof_lnki_page.Db_load_int (rdr, fld_file_page) + , rdr.Read_long (fld_temp_file_size) + , rdr.Read_int (fld_temp_view_count) + , rdr.Read_long (fld_temp_view_date) + , rdr.Read_int (fld_temp_w) + ); + } +} diff --git a/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_itm.java b/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_itm.java index 73ab38552..74effa947 100644 --- a/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_itm.java +++ b/400_xowa/src/gplx/xowa/files/caches/Xofc_fil_itm.java @@ -54,7 +54,7 @@ public class Xofc_fil_itm implements CompareAble { .Add_yn(is_orig).Add_byte_pipe() .Add_int_variable(w).Add_byte_pipe() .Add_int_variable(h).Add_byte_pipe() - .Add_int_variable(Xof_doc_thumb.X_int(time)) + .Add_int_variable(Xof_lnki_time.X_int(time)) ; return bfr.Xto_bry_and_clear(); } @@ -63,7 +63,7 @@ public class Xofc_fil_itm implements CompareAble { .Add(name).Add_byte_pipe() .Add_yn(is_orig).Add_byte_pipe() .Add_int_variable(w).Add_byte_pipe() - .Add_double(Xof_doc_thumb.Db_save_double(time)).Add_byte_pipe() + .Add_double(Xof_lnki_time.Db_save_double(time)).Add_byte_pipe() .Add_int_variable(page) ; return bfr.Xto_bry_and_clear(); 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 116164d65..456289e54 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 @@ -48,7 +48,7 @@ class Xofc_fil_mgr { if (itm == Xofc_fil_itm.Null) { // not in memory itm = tbl.Select_one_v1(dir_id, name, is_orig, w, h, time); if (itm == Xofc_fil_itm.Null) { // not in db - itm = Make_v1(dir_id, name, is_orig, w, h, time, Xof_doc_page.Null, ext, size); + itm = Make_v1(dir_id, name, is_orig, w, h, time, Xof_lnki_page.Null, ext, size); created.Val_(true); } else // NOTE: itm loaded from tbl; add to hash; do not add if created b/c Make adds to hash; @@ -127,8 +127,8 @@ class Xofc_fil_mgr { byte[] md5 = Xof_xfer_itm_.Md5_(ttl); int itm_ext_id = itm.Ext().Id(); Io_url fil_url = url_bldr.Init_for_trg_file(mode_id, trg_repo, ttl, md5, itm.Ext(), itm.W() - , Xof_doc_thumb.Convert_to_xowa_thumbtime (itm_ext_id, itm.Time()) - , Xof_doc_thumb.Convert_to_xowa_page (itm_ext_id, itm.Time()) + , Xof_lnki_time.Convert_to_xowa_thumbtime (itm_ext_id, itm.Time()) + , Xof_lnki_time.Convert_to_xowa_page (itm_ext_id, itm.Time()) ).Xto_url(); Io_mgr._.DeleteFil_args(fil_url).MissingFails_off().Exec(); itm.Cmd_mode_delete_(); 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 9c1c95550..a87926547 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 @@ -77,7 +77,7 @@ class Xofc_fil_tbl { .Val_bool_as_byte(fld_is_orig, itm.Is_orig()) .Val_int(fld_w, itm.W()) .Val_int(fld_h, itm.H()) - .Val_int(fld_time, Xof_doc_thumb.Db_save_int(itm.Time())) + .Val_int(fld_time, Xof_lnki_time.Db_save_int(itm.Time())) .Val_int(fld_page, itm.Page()) .Val_int(fld_ext, itm.Ext().Id()) .Val_long(fld_size, itm.Size()) @@ -98,7 +98,7 @@ class Xofc_fil_tbl { .Crt_bool_as_byte(fld_is_orig, fil_is_orig) .Crt_int(fld_w, fil_w) .Crt_int(fld_h, fil_h) - .Crt_int(fld_time, Xof_doc_thumb.Db_save_int(fil_thumbtime)) + .Crt_int(fld_time, Xof_lnki_time.Db_save_int(fil_thumbtime)) .Exec_select_as_rdr(); return rdr.Move_next() ? new_itm(rdr) : Xofc_fil_itm.Null; } @@ -113,7 +113,7 @@ class Xofc_fil_tbl { .Crt_bry_as_str(fld_name, name) .Crt_bool_as_byte(fld_is_orig, is_orig) .Crt_int(fld_w, w) - .Crt_int(fld_time, Xof_doc_thumb.Db_save_int(time)) + .Crt_int(fld_time, Xof_lnki_time.Db_save_int(time)) .Crt_int(fld_page, page) .Exec_select_as_rdr(); return rdr.Move_next() ? new_itm(rdr) : Xofc_fil_itm.Null; @@ -146,8 +146,8 @@ class Xofc_fil_tbl { , rdr.Read_byte(fld_is_orig) != Byte_.Zero , rdr.Read_int(fld_w) , rdr.Read_int(fld_h) - , Xof_doc_thumb.Db_load_int(rdr, fld_time) - , Xof_doc_page.Null + , Xof_lnki_time.Db_load_int(rdr, fld_time) + , Xof_lnki_page.Null , Xof_ext_.new_by_id_(rdr.Read_int(fld_ext)) , rdr.Read_long(fld_size) , rdr.Read_long(fld_cache_time) diff --git a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_itm.java b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_itm.java index c6b840eec..2bed97f4e 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_itm.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_itm.java @@ -17,85 +17,94 @@ along with this program. If not, see . */ package gplx.xowa.files.fsdb; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.gui.*; import gplx.xowa.files.repos.*; -public class Xof_fsdb_itm { - private int lnki_upright_patch; - public byte[] Lnki_ttl() {return lnki_ttl;} private byte[] lnki_ttl; - public byte[] Lnki_md5() {return lnki_md5;} private byte[] lnki_md5; - public Xof_ext Lnki_ext() {return lnki_ext;} public void Lnki_ext_(Xof_ext v) {lnki_ext = v;} private Xof_ext lnki_ext; - public byte Lnki_type() {return lnki_type;} private byte lnki_type; - public byte Lnki_type_as_mode() {return lnki_type_as_mode;} private byte lnki_type_as_mode; - public int Lnki_w() {return lnki_w;} private int lnki_w; - public int Lnki_h() {return lnki_h;} private int lnki_h; - public Xof_fsdb_itm Lnki_size_(int w, int h) {lnki_w = w; lnki_h = h; return this;} - public double Lnki_upright() {return lnki_upright;} private double lnki_upright; - public double Lnki_time() {return lnki_time;} public void Lnki_time_(double v) {lnki_time = v;} private double lnki_time = Xof_doc_thumb.Null; - public int Lnki_page() {return lnki_page;} public void Lnki_page_(int v) {lnki_page = v;} private int lnki_page = Xof_doc_page.Null; - public byte Orig_repo_id() {return orig_repo_id;} public void Orig_repo_id_(byte v) {orig_repo_id = v;} private byte orig_repo_id = Xof_repo_itm.Repo_null; - public byte[] Orig_repo_name() {return orig_repo_name;} public void Orig_repo_name_(byte[] v) {orig_repo_name = v;} private byte[] orig_repo_name; - public byte[] Orig_ttl() {return orig_ttl;} private byte[] orig_ttl; - public int Orig_w() {return orig_w;} private int orig_w = Xop_lnki_tkn.Width_null; - public int Orig_h() {return orig_h;} private int orig_h = Xop_lnki_tkn.Height_null; - public Xof_fsdb_itm Orig_size_(int w, int h) {orig_w = w; orig_h = h; return this;} - public byte[] Orig_redirect() {return orig_redirect;} public void Orig_redirect_(byte[] v) {orig_redirect = v;} private byte[] orig_redirect = Bry_.Empty; - public byte Orig_status() {return orig_status;} public void Orig_status_(byte v) {orig_status = v;} private byte orig_status = gplx.xowa.files.origs.Xof_orig_wkr_.Status_null; - public boolean File_is_orig() {return file_is_orig;} public void File_is_orig_(boolean v) {file_is_orig = v;} private boolean file_is_orig; - public int File_w() {return file_w;} private int file_w; - public int Html_uid() {return html_uid;} public void Html_uid_(int v) {html_uid = v;} private int html_uid; - public byte Html_elem_tid() {return html_elem_tid;} public void Html_elem_tid_(byte v) {html_elem_tid = v;} private byte html_elem_tid; - public int Html_w() {return html_w;} private int html_w; - public int Html_h() {return html_h;} private int html_h; - public Xof_fsdb_itm Html_size_(int w, int h) {html_w = w; html_h = h; return this;} - public Js_img_wkr Html_img_wkr() {return html_img_wkr;} public void Html_img_wkr_(Js_img_wkr v) {html_img_wkr = v;} private Js_img_wkr html_img_wkr; - public Io_url Html_view_url() {return html_view_url;} public void Html_view_url_(Io_url v) {html_view_url = v;} private Io_url html_view_url; - public Io_url Html_orig_url() {return html_orig_url;} public void Html_orig_url_(Io_url v) {html_orig_url = v;} private Io_url html_orig_url = Io_url_.Null; - public int Gallery_mgr_h() {return gallery_mgr_h;} public void Gallery_mgr_h_(int v) {gallery_mgr_h = v;} private int gallery_mgr_h = Int_.Neg1; - public byte Rslt_bin() {return rslt_bin;} public void Rslt_bin_(byte v) {rslt_bin = v;} private byte rslt_bin; - public byte Rslt_cnv() {return rslt_cnv;} public void Rslt_cnv_(byte v) {rslt_cnv = v;} private byte rslt_cnv; - public boolean Rslt_fil_created() {return rslt_fil_created;} public void Rslt_fil_created_(boolean v) {rslt_fil_created = v;} private boolean rslt_fil_created; - public void Ctor_by_orig(byte repo, byte[] ttl, int w, int h, byte[] redirect) { - this.orig_repo_id = repo; this.orig_ttl = ttl; this.orig_w = w; this.orig_h = h; this.orig_redirect = redirect; - } - public void Ctor_by_orig_redirect(byte[] redirect_ttl) { - orig_redirect = redirect_ttl; - lnki_ttl = redirect_ttl; - lnki_ext = Xof_ext_.new_by_ttl_(lnki_ttl); - lnki_md5 = Xof_xfer_itm_.Md5_calc(lnki_ttl); - } - public void Ctor_by_html(Xof_repo_itm repo, Xof_url_bldr url_bldr, Xof_img_size img_size, byte exec_tid) { - Html_size_calc(img_size, exec_tid); - byte[] name_bry = Bry_.Len_eq_0(orig_redirect) ? lnki_ttl : orig_redirect; - if (!lnki_ext.Id_is_media() && lnki_time != Xof_doc_thumb.Null) // file is not media, but has thumbtime; this check can't be moved to Lnki_time_() b/c it needs ext - lnki_time = Xof_doc_thumb.Null; // set time to null; needed else url will reference thumbtime; PAGE:en.w:Moon; EX:[[File:Lunar libration with phase Oct 2007 450px.gif|thumbtime=0:02]]; DATE:2014-07-20 - html_view_url = url_bldr.Init_for_trg_file(lnki_type_as_mode, repo, name_bry, lnki_md5, lnki_ext, html_w, lnki_time, lnki_page).Xto_url(); - html_orig_url = url_bldr.Init_for_trg_file(Xof_repo_itm.Mode_orig, repo, name_bry, lnki_md5, lnki_ext, Xof_img_size.Size_null_deprecated, Xof_doc_thumb.Null, Xof_doc_page.Null).Xto_url(); - } - public void Ctor_by_lnki(byte[] lnki_ttl, Xof_ext ext, byte[] md5, byte lnki_type, int lnki_w, int lnki_h, int lnki_upright_patch, double lnki_upright, double lnki_time, int lnki_page) { - this.lnki_ttl = lnki_ttl; this.lnki_ext = ext; this.lnki_md5 = md5; - this.lnki_w = lnki_w; this.lnki_h = lnki_h; +public class Xof_fsdb_itm { + public byte[] Lnki_ttl() {return lnki_ttl;} private byte[] lnki_ttl; + public byte[] Lnki_md5() {return lnki_md5;} private byte[] lnki_md5; + public Xof_ext Lnki_ext() {return lnki_ext;} private Xof_ext 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 = Xof_lnki_time.Null; + public int Lnki_page() {return lnki_page;} private int lnki_page = Xof_lnki_page.Null; + public byte Orig_repo_id() {return orig_repo_id;} private byte orig_repo_id = Xof_repo_itm.Repo_null; + public byte[] Orig_repo_name() {return orig_repo_name;} private byte[] orig_repo_name; + public byte[] Orig_ttl() {return orig_ttl;} private byte[] orig_ttl; + public int Orig_ext() {return orig_ext;} private int orig_ext; + public int Orig_w() {return orig_w;} private int orig_w = Xop_lnki_tkn.Width_null; + public int Orig_h() {return orig_h;} private int orig_h = Xop_lnki_tkn.Height_null; + public byte[] Orig_redirect() {return orig_redirect;} private byte[] orig_redirect = Bry_.Empty; + 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 int Html_uid() {return html_uid;} private int html_uid; + public byte Html_elem_tid() {return html_elem_tid;} private byte html_elem_tid; + public int Html_w() {return html_w;} private int html_w; + public int Html_h() {return html_h;} private int html_h; + public Io_url Html_view_url() {return html_view_url;} private Io_url html_view_url; + public Io_url Html_orig_url() {return html_orig_url;} private Io_url html_orig_url = Io_url_.Null; + public int Gallery_mgr_h() {return gallery_mgr_h;} private int gallery_mgr_h = Int_.Neg1; + public Js_img_wkr Html_img_wkr() {return html_img_wkr;} private Js_img_wkr html_img_wkr; + public boolean Orig_exists() {return orig_exists;} public void Orig_exists_y_() {orig_exists = Bool_.Y;} public void Orig_exists_n_() {orig_exists = Bool_.N;} private boolean orig_exists; + public boolean File_exists() {return file_exists;} public void File_exists_y_() {file_exists = Bool_.Y;} public void File_exists_n_() {file_exists = Bool_.N;} public void File_exists_(boolean v) {file_exists = v;} private boolean file_exists; + public boolean File_resized() {return file_resized;} public void File_resized_y_() {file_resized = Bool_.Y;} private boolean file_resized; + public boolean Fsdb_insert() {return fsdb_insert;} public void Fsdb_insert_y_() {fsdb_insert = true;} private boolean fsdb_insert; + public void Ctor_by_lnki(byte[] lnki_ttl, byte lnki_type, int lnki_w, int lnki_h, int lnki_upright_patch, double lnki_upright, double lnki_time, int lnki_page) { + this.lnki_type = lnki_type; this.lnki_w = lnki_w; this.lnki_h = lnki_h; this.lnki_upright_patch = lnki_upright_patch; this.lnki_upright = lnki_upright; this.lnki_time = lnki_time; this.lnki_page = lnki_page; - this.Lnki_type_(lnki_type); - this.orig_ttl = lnki_ttl; + this.orig_ttl = lnki_ttl; + // this.file_is_orig = !(Xop_lnki_type.Id_defaults_to_thumb(lnki_type) || lnki_w != Xop_lnki_tkn.Width_null || lnki_h != Xop_lnki_tkn.Height_null); // DELETE: overriden below. + this.Lnki_ttl_(lnki_ttl); + } private int lnki_upright_patch; + public void Ctor_by_orig(byte orig_repo_id, byte[] orig_repo_name, byte[] orig_ttl, int orig_ext, int orig_w, int orig_h, byte[] orig_redirect) { + this.orig_repo_id = orig_repo_id; this.orig_repo_name = orig_repo_name; + this.orig_ttl = orig_ttl; this.orig_ext = orig_ext; + this.orig_w = orig_w; this.orig_h = orig_h; this.orig_redirect = orig_redirect; + if (orig_ext != lnki_ext.Id()) + this.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 + this.Lnki_ttl_(orig_redirect); // update fsdb with atrs of B.png } - public void Html_size_calc(Xof_img_size img_size, byte exec_tid) { - if (!lnki_ext.Id_is_audio_strict()) { // audio does not have html size calculated; everything else does - img_size.Html_size_calc(exec_tid, lnki_w, lnki_h, lnki_type, lnki_upright_patch, lnki_upright, lnki_ext.Id(), orig_w, orig_h, Xof_img_size.Thumb_width_img); - html_w = img_size.Html_w(); html_h = img_size.Html_h(); file_w = img_size.File_w(); - file_is_orig = img_size.File_is_orig(); - lnki_type_as_mode = file_is_orig ? Xof_repo_itm.Mode_orig : Xof_repo_itm.Mode_thumb; - } + public void Ctor_for_html(byte exec_tid, Xof_img_size img_size, Xof_repo_itm repo, Xof_url_bldr url_bldr) { + Calc_html_size(exec_tid, img_size); + html_view_url = url_bldr.To_url_trg(repo, this, file_is_orig); + html_orig_url = url_bldr.To_url_trg(repo, this, Bool_.Y); } - public void Lnki_type_(byte v) { - this.lnki_type = v; - if (lnki_ext.Id_is_audio_strict()) - file_is_orig = true; - else - this.file_is_orig = !(Xop_lnki_type.Id_defaults_to_thumb(lnki_type) || lnki_w != Xop_lnki_tkn.Width_null || lnki_h != Xop_lnki_tkn.Height_null); - this.lnki_type_as_mode = file_is_orig ? Xof_repo_itm.Mode_orig : Xof_repo_itm.Mode_thumb; - } - public void Lnki_ttl_(byte[] v) { + public void Ctor_by_fsdb_make + ( byte[] lnki_ttl, int lnki_w, int lnki_h, double lnki_time, int lnki_page + , byte orig_repo_id, int orig_w, int orig_h, byte[] orig_redirect + , boolean file_is_orig + ) { + this.lnki_w = lnki_w; this.lnki_h = lnki_h; this.lnki_time = lnki_time; this.lnki_page = lnki_page; + this.orig_repo_id = orig_repo_id; this.orig_ttl = lnki_ttl; this.orig_w = orig_w; this.orig_h = orig_h; this.orig_redirect = orig_redirect; + this.file_is_orig = file_is_orig; + this.html_w = lnki_w; this.html_h = lnki_h; // set html_size as file_size (may try to optimize later by removing similar thumbs (EX: 220,221 -> 220)) + this.Lnki_ttl_(lnki_ttl); + } + public void Lnki_ext_(Xof_ext v) {lnki_ext = v;} + public void Lnki_size_(int w, int h) {this.lnki_w = w; this.lnki_h = h;} + public void Orig_repo_name_(byte[] v) {orig_repo_name = v;} + public void Html_view_url_(Io_url v) {html_view_url = v;} + public void Html_orig_url_(Io_url v) {html_orig_url = v;} + public void Html_size_(int w, int h) {html_w = w; html_h = h;} + public void Html_uid_(int v) {html_uid = v;} + public void Html_elem_tid_(byte v) {html_elem_tid = v;} + public void Html_img_wkr_(Js_img_wkr v) {html_img_wkr = v;} + public void Gallery_mgr_h_(int v) {gallery_mgr_h = v;} + private void Lnki_ttl_(byte[] v) { lnki_ttl = v; lnki_ext = Xof_ext_.new_by_ttl_(v); lnki_md5 = Xof_xfer_itm_.Md5_calc(v); } + private void Calc_html_size(byte exec_tid, Xof_img_size img_size) { + if (!lnki_ext.Id_is_media() && lnki_time != Xof_lnki_time.Null) // file is not media, but has thumbtime; this check can't be moved to Lnki_time_() b/c it needs ext + lnki_time = Xof_lnki_time.Null; // set time to null; needed else url will reference thumbtime; PAGE:en.w:Moon; EX:[[File:Lunar libration with phase Oct 2007 450px.gif|thumbtime=0:02]]; DATE:2014-07-20 + if (lnki_ext.Id_is_audio_strict()) // audio does not have html size calculated; everything else does + file_is_orig = Bool_.Y; + else { + img_size.Html_size_calc(exec_tid, lnki_w, lnki_h, lnki_type, lnki_upright_patch, lnki_upright, lnki_ext.Id(), orig_w, orig_h, Xof_img_size.Thumb_width_img); + html_w = img_size.Html_w(); html_h = img_size.Html_h(); file_w = img_size.File_w(); + file_is_orig = img_size.File_is_orig(); + } + } } 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 deleted file mode 100644 index 4e0059c84..000000000 --- a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr_.java +++ /dev/null @@ -1,141 +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.files.fsdb; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.fsdb.*; import gplx.fsdb.data.*; import gplx.xowa.files.caches.*; -import gplx.xowa.files.repos.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.gui.*; import gplx.xowa.wmfs.apis.*; -class Xof_fsdb_wkr { - private final Gfo_usr_dlg usr_dlg; private final Xof_fsdb_mgr fsdb_mgr; private final Xof_cache_mgr cache_mgr; private final Xow_repo_mgr repo_mgr; private final Xof_url_bldr url_bldr; - private final Xof_img_size img_size = new Xof_img_size(); private final ListAdp get_list = ListAdp_.new_(); - 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, Xoa_page page, Xog_js_wkr js_wkr) { - synchronized (get_list) { - get_list.Clear(); - int itms_len = itms.Count(); - for (int i = 0; i < itms_len; i++) { - if (usr_dlg.Canceled()) return; - Xof_fsdb_itm itm = (Xof_fsdb_itm)itms.FetchAt(i); - switch (itm.Orig_status()) { - 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, 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: - case Xof_orig_wkr_.Status_noop: // NOTE: previous attempt was noop; only occurs if oga and exec_tid != viewer - case Xof_orig_wkr_.Status_null: get_list.Add(itm); break; // item is either not on disk, or not in orig_regy; add to list and try to get from fsdb_mgr - case Xof_orig_wkr_.Status_missing_qry: - case Xof_orig_wkr_.Status_missing_bin: break; // item is missing; just exit - default: throw Err_.unhandled(itm.Orig_status()); - } - } - int get_len = get_list.Count(); - for (int i = 0; i < get_len; i++) { - if (usr_dlg.Canceled()) return; - Xof_fsdb_itm itm = (Xof_fsdb_itm)get_list.FetchAt(i); - try { - 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, 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) { - fsdb_mgr.Orig_mgr().Insert(Xof_repo_itm.Repo_unknown, itm.Orig_ttl(), itm.Lnki_ext().Id(), itm.Orig_w(), itm.Orig_h(), itm.Orig_redirect(), Xof_orig_wkr_.Status_missing_qry); - return; - } - byte repo_tid = repo_pair.Repo_idx(); // NOTE: should be itm.Orig_repo, but throws null refs - 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; - } - if (fsdb_mgr.Bin_mgr().Find_to_url_as_bool(exec_tid, itm)) { - 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_found); - // 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, 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()); - itm.Rslt_bin_(Xof_bin_wkr_.Tid_not_found); - 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_missing_bin); - // gplx.xowa.files.gui.Js_img_mgr.Update_img_missing(usr_dlg, itm.Html_uid()); // TODO: update caption with "" if image is missing - } - } - else { - fsdb_mgr.Orig_mgr().Insert(Xof_repo_itm.Repo_unknown, itm.Orig_ttl(), itm.Lnki_ext().Id(), itm.Orig_w(), itm.Orig_h(), itm.Orig_redirect(), Xof_orig_wkr_.Status_missing_qry); - // gplx.xowa.files.gui.Js_img_mgr.Update_img_missing(usr_dlg, itm.Html_uid()); // TODO: update caption with "" if image is missing - } - } - private void Save_itm(Xof_fsdb_itm itm) { - Io_url html_url = itm.Html_view_url(); - long bin_len = Io_mgr._.QueryFil(html_url).Size(); - gplx.ios.Io_stream_rdr bin_rdr = gplx.ios.Io_stream_rdr_.file_(html_url); - try { - bin_rdr.Open(); - if (itm.Lnki_ext().Id_is_thumbable_img()) { - if (itm.File_is_orig()) { - Fsd_img_itm img_itm = new Fsd_img_itm(); - fsdb_mgr.Mnt_mgr().Img_insert(img_itm, itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_ext().Id(), itm.Html_w(), itm.Html_h(), Fsd_thm_tbl.Modified_null, Fsd_thm_tbl.Hash_null, bin_len, bin_rdr); - } - else { - Fsd_thm_itm thm_itm = Fsd_thm_itm.new_(); - fsdb_mgr.Mnt_mgr().Thm_insert(thm_itm, itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_ext().Id(), itm.Html_w(), itm.Html_h(), itm.Lnki_time(), itm.Lnki_page(), Fsd_thm_tbl.Modified_null, Fsd_thm_tbl.Hash_null, bin_len, bin_rdr); - } - } - else { - if (itm.Lnki_ext().Id_is_video() && !itm.File_is_orig()) { // insert as thumbnail - Fsd_thm_itm thm_itm = Fsd_thm_itm.new_(); - fsdb_mgr.Mnt_mgr().Thm_insert(thm_itm, itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_ext().Id(), itm.Html_w(), itm.Html_h(), itm.Lnki_time(), itm.Lnki_page(), Fsd_thm_tbl.Modified_null, Fsd_thm_tbl.Hash_null, bin_len, bin_rdr); - } - else { - Fsd_fil_itm fil_itm = new Fsd_fil_itm(); - fsdb_mgr.Mnt_mgr().Fil_insert(fil_itm, itm.Orig_repo_name(), itm.Lnki_ttl(), itm.Lnki_ext().Id(), Fsd_thm_tbl.Modified_null, Fsd_thm_tbl.Hash_null, bin_len, bin_rdr); - } - } - if (!Env_.Mode_testing()) - cache_mgr.Reg(itm, bin_len); - } - catch (Exception e) { - usr_dlg.Warn_many("", "", "failed to save file: ttl=~{0} url=~{1} err=~{2}", String_.new_utf8_(itm.Lnki_ttl()), html_url.Raw(), Err_.Message_gplx(e)); - } - finally {bin_rdr.Rls();} - } - 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); - if (orig == Xof_orig_itm.Null) { // not found in any wkr - itm.Orig_status_(Xof_orig_wkr_.Status_missing_orig); - return false; // exit now - } - itm.Orig_status_(Xof_orig_wkr_.Status_found); - byte[] orig_redirect = orig.Redirect(); - if (Bry_.Len_gt_0(orig_redirect)) // redirect found - itm.Ctor_by_orig_redirect(orig_redirect); - itm.Orig_size_(orig.W(), orig.H()); - itm.Html_size_calc(img_size, get_exec_tid); // orig found; recalc size - return true; - } -} 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 adf25ec90..a03d7f6a3 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 @@ -21,7 +21,7 @@ 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 boolean fsdb_enabled = false; + private boolean init = false; private boolean fsdb_enabled = false; private Xof_cache_mgr cache_mgr; private Xow_repo_mgr repo_mgr; private Xof_url_bldr url_bldr; private final Xof_img_size img_size = new Xof_img_size(); 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(); @@ -33,8 +33,8 @@ public class Xof_fsdb_mgr__sql implements Xof_fsdb_mgr, GfoInvkAble { 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(); + this.cache_mgr = app.File_mgr__cache_mgr(); this.url_bldr = Xof_url_bldr.new_v2_(); + this.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(); 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); @@ -43,14 +43,17 @@ public class Xof_fsdb_mgr__sql implements Xof_fsdb_mgr, GfoInvkAble { 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, 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, js_wkr); + int len = itms.Count(); + Gfo_usr_dlg usr_dlg = Gfo_usr_dlg_._; + for (int i = 0; i < len; i++) { + if (usr_dlg.Canceled()) return; + Xof_fsdb_itm itm = (Xof_fsdb_itm)itms.FetchAt(i); + Xof_file_wkr.Show_img(exec_tid, itm, usr_dlg, bin_mgr, mnt_mgr, cache_mgr, repo_mgr, js_wkr, img_size, url_bldr, page); + } } public void Txn_save() { if (!fsdb_enabled) return; diff --git a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_wkr_fsdb.java b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_wkr_fsdb.java index e2d9bf9de..b69f3da22 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_wkr_fsdb.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_wkr_fsdb.java @@ -30,7 +30,7 @@ public class Fs_root_wkr_fsdb { Orig_fil_itm orig_itm = orig_dir_mgr.Get_by_ttl(lnki_ttl); if (orig_itm == Orig_fil_itm.Null) return false; Io_url orig_url = orig_itm.Fil_url(); - if (fsdb_itm.Lnki_type_as_mode() == Xof_repo_itm.Mode_orig) { + if (fsdb_itm.File_is_orig()) { fsdb_itm.Html_size_(orig_itm.Fil_w(), orig_itm.Fil_h()); fsdb_itm.Html_view_url_(orig_url); fsdb_itm.Html_orig_url_(orig_url); diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__bmp_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__bmp_tst.java index 45b3c670d..1a9e70017 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__bmp_tst.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__bmp_tst.java @@ -22,12 +22,12 @@ public class Xof_file_ext__bmp_tst { @After public void term() {fxt.Rls();} @Test public void Make_orig() { fxt.Init__orig_w_fsdb__commons_orig("A.bmp", 440, 400); - fxt.Exec_get(Xof_exec_arg.new_orig("A.bmp").Rslt_orig_found().Rslt_fsdb_xowa().Rslt_conv_y()); + fxt.Exec_get(Xof_exec_arg.new_orig("A.bmp").Rslt_orig_exists_y().Rslt_file_exists_y().Rslt_file_resized_y()); fxt.Test_fsys("mem/root/common/thumb/7/0/A.bmp/440px.png", "440,400"); } @Test public void Make_thumb() { fxt.Init__orig_w_fsdb__commons_orig("A.bmp", 440, 400); - fxt.Exec_get(Xof_exec_arg.new_thumb("A.bmp").Rslt_orig_found().Rslt_fsdb_xowa().Rslt_conv_y()); + fxt.Exec_get(Xof_exec_arg.new_thumb("A.bmp").Rslt_orig_exists_y().Rslt_file_exists_y().Rslt_file_resized_y()); fxt.Test_fsys("mem/root/common/thumb/7/0/A.bmp/220px.png", "220,200"); } } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__flac_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__flac_tst.java index f4a00ec57..0f100722d 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__flac_tst.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__flac_tst.java @@ -23,13 +23,13 @@ public class Xof_file_ext__flac_tst { @Test public void Orig_page() { // .flac is on page [[File:A.flac]] fxt.Init_orig_db(Xof_orig_arg.new_comm_file("A.flac")); fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_file("A.flac")); - fxt.Exec_get(Xof_exec_arg.new_orig("A.flac").Rslt_orig_missing().Rslt_fsdb_null()); // do not qry or get bin; (since file is not "viewable" immediately); DATE:2015-02-15 + fxt.Exec_get(Xof_exec_arg.new_orig("A.flac").Rslt_orig_exists_y().Rslt_file_exists_n()); // check orig (since orig may redirect) but do not get file; (since file is not "viewable" immediately); DATE:2015-02-15 fxt.Test_fsys_exists_n("mem/root/common/orig/8/b/A.flac"); } @Test public void Orig_app() { // .flac is clicked; get file fxt.Init_orig_db(Xof_orig_arg.new_comm_file("A.flac")); fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_file("A.flac")); - fxt.Exec_get(Xof_exec_arg.new_orig("A.flac").Exec_tid_(Xof_exec_tid.Tid_viewer_app).Rslt_orig_found().Rslt_fsdb_xowa()); + fxt.Exec_get(Xof_exec_arg.new_orig("A.flac").Exec_tid_(Xof_exec_tid.Tid_viewer_app).Rslt_orig_exists_y().Rslt_file_exists_y()); fxt.Test_fsys_exists_y("mem/root/common/orig/8/b/A.flac"); } } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__oga_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__oga_tst.java index 597666064..69985437f 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__oga_tst.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__oga_tst.java @@ -20,16 +20,16 @@ import org.junit.*; public class Xof_file_ext__oga_tst { @Before public void init() {fxt.Reset();} private final Xof_file_fxt fxt = new Xof_file_fxt(); @After public void term() {fxt.Rls();} - @Test public void Orig_page() { // .oga is on page [[File:A.oga]]; do not qry or get bin; (since file is not "viewable" immediately) + @Test public void Orig_page() { // .oga is on page [[File:A.oga]]; check orig (since orig may redirect) but do not get file; (since file is not "viewable" immediately) fxt.Init_orig_db(Xof_orig_arg.new_comm_file("A.oga")); fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_file("A.oga")); - fxt.Exec_get(Xof_exec_arg.new_orig("A.oga").Rslt_orig_missing().Rslt_fsdb_null()); + fxt.Exec_get(Xof_exec_arg.new_orig("A.oga").Rslt_orig_exists_y().Rslt_file_exists_n()); fxt.Test_fsys_exists_n("mem/root/common/orig/4/f/A.oga"); } @Test public void Orig_app() { // .oga is clicked; get file fxt.Init_orig_db(Xof_orig_arg.new_comm_file("A.oga")); fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_file("A.oga")); - fxt.Exec_get(Xof_exec_arg.new_orig("A.oga").Exec_tid_(Xof_exec_tid.Tid_viewer_app).Rslt_orig_found().Rslt_fsdb_xowa()); + fxt.Exec_get(Xof_exec_arg.new_orig("A.oga").Exec_tid_(Xof_exec_tid.Tid_viewer_app).Rslt_orig_exists_y().Rslt_file_exists_y()); fxt.Test_fsys_exists_y("mem/root/common/orig/4/f/A.oga"); } } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__ogg_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__ogg_tst.java index c7124d0b3..d2f9f0109 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__ogg_tst.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__ogg_tst.java @@ -32,6 +32,6 @@ public class Xof_file_ext__ogg_tst { @Test public void Audio() { fxt.Init_orig_db(Xof_orig_arg.new_comm("A.ogg", 0, 0)); // audio has no size fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_thumb("A.ogg", 440, 400)); // create a thumb but it should never be used - fxt.Exec_get(Xof_exec_arg.new_orig("A.ogg").Exec_tid_(Xof_exec_tid.Tid_viewer_app).Rslt_orig_found().Rslt_fsdb_null().Rslt_conv_n()); + fxt.Exec_get(Xof_exec_arg.new_orig("A.ogg").Exec_tid_(Xof_exec_tid.Tid_viewer_app).Rslt_orig_exists_y().Rslt_file_exists_n().Rslt_file_resized_n()); } } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__ogv_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__ogv_tst.java index b33edb64e..62bc7ab3d 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__ogv_tst.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__ogv_tst.java @@ -23,14 +23,14 @@ public class Xof_file_ext__ogv_tst { @Test public void Copy_orig() { fxt.Init_orig_db(Xof_orig_arg.new_comm("A.ogv", 440, 400)); fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_thumb("A.ogv", 440, 400)); - fxt.Exec_get(Xof_exec_arg.new_orig("A.ogv").Rslt_orig_found().Rslt_fsdb_xowa().Rslt_conv_n()); + fxt.Exec_get(Xof_exec_arg.new_orig("A.ogv").Rslt_orig_exists_y().Rslt_file_exists_y().Rslt_file_resized_n()); fxt.Test_fsys("mem/root/common/thumb/d/0/A.ogv/440px.jpg", "440,400"); } @Test public void Copy_orig_w_thumbtime() { fxt.Init_orig_db(Xof_orig_arg.new_comm("A.ogv", 440, 400)); fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_thumb("A.ogv", 440, 400, 10)); - fxt.Exec_get(Xof_exec_arg.new_orig("A.ogv").Lnki_time_(10).Rslt_orig_found().Rslt_fsdb_xowa().Rslt_conv_n()); + fxt.Exec_get(Xof_exec_arg.new_orig("A.ogv").Lnki_time_(10).Rslt_orig_exists_y().Rslt_file_exists_y().Rslt_file_resized_n()); fxt.Test_fsys("mem/root/common/thumb/d/0/A.ogv/440px-10.jpg", "440,400"); - fxt.Exec_get(Xof_exec_arg.new_thumb("A.png", Xop_lnki_tkn.Width_null, 130)); + // fxt.Exec_get(Xof_exec_arg.new_thumb("A.png", Xop_lnki_tkn.Width_null, 130)); DELETE: not needed; tests if new A.png can be resized from existing; DATE:2015-03-03 } } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__png_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__png_tst.java index 14aa7d16f..a6905eea9 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__png_tst.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__png_tst.java @@ -23,23 +23,23 @@ public class Xof_file_ext__png_tst { @Test public void Copy_thumb() { fxt.Init_orig_db(Xof_orig_arg.new_comm("A.png", 440, 400)); fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_thumb("A.png")); - fxt.Exec_get(Xof_exec_arg.new_thumb("A.png").Rslt_orig_found().Rslt_fsdb_xowa()); + fxt.Exec_get(Xof_exec_arg.new_thumb("A.png").Rslt_orig_exists_y().Rslt_file_exists_y()); fxt.Test_fsys("mem/root/common/thumb/7/0/A.png/220px.png", "220,200"); } @Test public void Copy_orig() { fxt.Init__orig_w_fsdb__commons_orig("A.png", 440, 400); - fxt.Exec_get(Xof_exec_arg.new_orig("A.png").Rslt_orig_found().Rslt_fsdb_xowa()); + fxt.Exec_get(Xof_exec_arg.new_orig("A.png").Rslt_orig_exists_y().Rslt_file_exists_y()); fxt.Test_fsys("mem/root/common/orig/7/0/A.png", "440,400"); } @Test public void Copy_orig_w_width() { // PURPOSE: if not thumb, but width is specified; do not download orig and convert; EX: [[File:The Earth seen from Apollo 17.jpg|250px]] fxt.Init_orig_db(Xof_orig_arg.new_comm("A.png", 440, 400)); fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_thumb("A.png", 220, 200)); - fxt.Exec_get(Xof_exec_arg.new_("A.png", Xop_lnki_type.Id_null, 220, Xop_lnki_tkn.Height_null).Rslt_orig_found().Rslt_fsdb_xowa()); + fxt.Exec_get(Xof_exec_arg.new_("A.png", Xop_lnki_type.Id_null, 220, Xop_lnki_tkn.Height_null).Rslt_orig_exists_y().Rslt_file_exists_y()); fxt.Test_fsys("mem/root/common/thumb/7/0/A.png/220px.png", "220,200"); } @Test public void Make_thumb() { fxt.Init__orig_w_fsdb__commons_orig("A.png", 440, 400); - fxt.Exec_get(Xof_exec_arg.new_thumb("A.png").Rslt_orig_found().Rslt_fsdb_xowa().Rslt_conv_y()); + fxt.Exec_get(Xof_exec_arg.new_thumb("A.png").Rslt_orig_exists_y().Rslt_file_exists_y().Rslt_file_resized_y()); fxt.Test_fsys("mem/root/common/thumb/7/0/A.png/220px.png", "220,200"); } @Test public void Height_only() { // PURPOSE.fix: height only was still using old infer-size code; EX:w:[[File:Upper and Middle Manhattan.jpg|x120px]]; DATE:2012-12-27 diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__svg_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__svg_tst.java index 31a36e72a..f720df9bd 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__svg_tst.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__svg_tst.java @@ -23,18 +23,18 @@ public class Xof_file_ext__svg_tst { @Test public void Make_orig() { fxt.Init_orig_db(Xof_orig_arg.new_comm("A.svg", 440, 400)); fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_orig("A.svg", 440, 400)); - fxt.Exec_get(Xof_exec_arg.new_orig("A.svg").Rslt_orig_found().Rslt_fsdb_xowa().Rslt_conv_y()); + fxt.Exec_get(Xof_exec_arg.new_orig("A.svg").Rslt_orig_exists_y().Rslt_file_exists_y().Rslt_file_resized_y()); fxt.Test_fsys("mem/root/common/thumb/7/5/A.svg/440px.png", "440,400"); } @Test public void Make_thumb() { fxt.Init_orig_db(Xof_orig_arg.new_comm("A.svg", 440, 400)); fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_orig("A.svg", 440, 400)); - fxt.Exec_get(Xof_exec_arg.new_thumb("A.svg").Rslt_orig_found().Rslt_fsdb_xowa().Rslt_conv_y()); + fxt.Exec_get(Xof_exec_arg.new_thumb("A.svg").Rslt_orig_exists_y().Rslt_file_exists_y().Rslt_file_resized_y()); fxt.Test_fsys("mem/root/common/thumb/7/5/A.svg/220px.png", "220,200"); } @Test public void Thumb_can_be_bigger_than_orig() {// PURPOSE: svg thumbs allowed to exceed orig in size; EX: w:Portal:Music; [[File:Treble a.svg|left|160px]] fxt.Init__orig_w_fsdb__commons_orig("A.svg", 110, 100); // create orig of 110,100 - fxt.Exec_get(Xof_exec_arg.new_thumb("A.svg", 330).Rslt_fsdb_xowa()); // get 330 + fxt.Exec_get(Xof_exec_arg.new_thumb("A.svg", 330).Rslt_file_exists_y()); // get 330 fxt.Test_fsys("mem/root/common/thumb/7/5/A.svg/330px.png", "330,300"); } } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__unknown_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__unknown_tst.java index 2a981d7d9..67b600193 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__unknown_tst.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__unknown_tst.java @@ -20,16 +20,16 @@ import org.junit.*; public class Xof_file_ext__unknown_tst { @Before public void init() {fxt.Reset();} private final Xof_file_fxt fxt = new Xof_file_fxt(); @After public void term() {fxt.Rls();} - @Test public void Orig_page() { // .bin is on page [[File:A.bin]]; do not qry or get bin; (since file is not "viewable" immediately); DATE:2014-08-17 + @Test public void Orig_page() { // .bin is on page [[File:A.bin]]; check orig (since orig may redirect) but do not get file; (since file is not "viewable" immediately); DATE:2014-08-17 fxt.Init_orig_db(Xof_orig_arg.new_comm_file("A.bin")); fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_file("A.bin")); - fxt.Exec_get(Xof_exec_arg.new_orig("A.bin").Rslt_orig_missing().Rslt_fsdb_null()); + fxt.Exec_get(Xof_exec_arg.new_orig("A.bin").Rslt_orig_exists_y().Rslt_file_exists_n()); fxt.Test_fsys_exists_n("mem/root/common/orig/f/b/A.bin"); } @Test public void Orig_app() { // .bin is clicked; get file fxt.Init_orig_db(Xof_orig_arg.new_comm_file("A.bin")); fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_file("A.bin")); - fxt.Exec_get(Xof_exec_arg.new_orig("A.bin").Exec_tid_(Xof_exec_tid.Tid_viewer_app).Rslt_orig_found().Rslt_fsdb_xowa()); + fxt.Exec_get(Xof_exec_arg.new_orig("A.bin").Exec_tid_(Xof_exec_tid.Tid_viewer_app).Rslt_orig_exists_y().Rslt_file_exists_y()); fxt.Test_fsys_exists_y("mem/root/common/orig/f/b/A.bin"); } } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__wav_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__wav_tst.java index 4032eaccb..58d9c0f4a 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__wav_tst.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__wav_tst.java @@ -21,16 +21,16 @@ import gplx.xowa.files.bins.*; public class Xof_file_ext__wav_tst { @Before public void init() {fxt.Reset();} private final Xof_file_fxt fxt = new Xof_file_fxt(); @After public void term() {fxt.Rls();} - @Test public void Orig_page() { // .wav is on page [[File:A.wav]]; do not qry or get bin; (since file is not "viewable" immediately); DATE:2014-08-17 + @Test public void Orig_page() { // .wav is on page [[File:A.wav]]; check orig (since orig may redirect) but do not get file; (since file is not "viewable" immediately); DATE:2014-08-17 fxt.Init_orig_db(Xof_orig_arg.new_comm_file("A.wav")); fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_file("A.wav")); - fxt.Exec_get(Xof_exec_arg.new_orig("A.wav").Rslt_orig_missing().Rslt_fsdb_null()); + fxt.Exec_get(Xof_exec_arg.new_orig("A.wav").Rslt_orig_exists_y().Rslt_file_exists_n()); fxt.Test_fsys_exists_n("mem/root/common/orig/c/3/A.wav"); } @Test public void Orig_app() { // .wav is clicked; get file fxt.Init_orig_db(Xof_orig_arg.new_comm_file("A.wav")); fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_file("A.wav")); - fxt.Exec_get(Xof_exec_arg.new_orig("A.wav").Exec_tid_(Xof_exec_tid.Tid_viewer_app).Rslt_orig_found().Rslt_fsdb_xowa()); + fxt.Exec_get(Xof_exec_arg.new_orig("A.wav").Exec_tid_(Xof_exec_tid.Tid_viewer_app).Rslt_orig_exists_y().Rslt_file_exists_y()); fxt.Test_fsys_exists_y("mem/root/common/orig/c/3/A.wav"); } } diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__xcf_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__xcf_tst.java index 61ed996b1..256ba1a74 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__xcf_tst.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_ext__xcf_tst.java @@ -23,13 +23,13 @@ public class Xof_file_ext__xcf_tst { @Test public void Make_orig() { fxt.Init_orig_db(Xof_orig_arg.new_comm("A.xcf", 440, 400)); fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_orig("A.xcf", 440, 400)); - fxt.Exec_get(Xof_exec_arg.new_orig("A.xcf").Rslt_orig_found().Rslt_fsdb_xowa().Rslt_conv_y()); + fxt.Exec_get(Xof_exec_arg.new_orig("A.xcf").Rslt_orig_exists_y().Rslt_file_exists_y().Rslt_file_resized_y()); fxt.Test_fsys("mem/root/common/thumb/4/4/A.xcf/440px.png", "440,400"); } @Test public void Make_thumb() { fxt.Init_orig_db(Xof_orig_arg.new_comm("A.xcf", 440, 400)); fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_orig("A.xcf", 440, 400)); - fxt.Exec_get(Xof_exec_arg.new_thumb("A.xcf").Rslt_orig_found().Rslt_fsdb_xowa().Rslt_conv_y()); + fxt.Exec_get(Xof_exec_arg.new_thumb("A.xcf").Rslt_orig_exists_y().Rslt_file_exists_y().Rslt_file_resized_y()); fxt.Test_fsys("mem/root/common/thumb/4/4/A.xcf/220px.png", "220,200"); } } 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 e98236f69..ac0b711c1 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 @@ -20,7 +20,7 @@ import gplx.fsdb.*; import gplx.dbs.*; import gplx.xowa.files.origs.*; import gp import gplx.xowa.wikis.*; import gplx.xowa.files.repos.*; import gplx.fsdb.data.*; class Xof_file_fxt { - private Xoae_app app; private Xof_fsdb_mgr fsdb_mgr; + private Xoae_app app; private Xof_fsdb_mgr fsdb_mgr; private Xowe_wiki wiki; private final Fsd_thm_itm tmp_thm = Fsd_thm_itm.new_(); private final Fsd_img_itm tmp_img = new Fsd_img_itm(); public void Rls() {fsdb_mgr.Rls();} public void Reset() { @@ -28,7 +28,7 @@ class Xof_file_fxt { Io_url fsys_db = Xoa_test_.Url_file_enwiki(); 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 = 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 @@ -44,7 +44,7 @@ class Xof_file_fxt { this.Init_orig_db(Xof_orig_arg.new_comm(ttl, w, h)); } public void Init_orig_db(Xof_orig_arg arg) { - fsdb_mgr.Orig_mgr().Insert(arg.Repo(), arg.Page(), Xof_ext_.new_by_ttl_(arg.Page()).Id(), arg.W(), arg.H(), arg.Redirect(), Xof_orig_wkr_.Status_found); + fsdb_mgr.Orig_mgr().Insert(arg.Repo(), arg.Page(), Xof_ext_.new_by_ttl_(arg.Page()).Id(), arg.W(), arg.H(), arg.Redirect()); } public void Init_fsdb_db(Xof_fsdb_arg arg) { if (arg.Is_thumb()) @@ -53,16 +53,17 @@ class Xof_file_fxt { fsdb_mgr.Mnt_mgr().Img_insert(tmp_img, arg.Wiki(), arg.Ttl(), arg.Ext(), arg.W(), arg.H(), arg.Modified(), arg.Hash(), arg.Bin().length, gplx.ios.Io_stream_rdr_.mem_(arg.Bin())); } public void Exec_get(Xof_exec_arg arg) { - byte[] ttl = arg.Ttl(); - byte[] md5 = Xof_xfer_itm_.Md5_(ttl); - Xof_ext ext = Xof_ext_.new_by_ttl_(ttl); + byte[] ttl_bry = arg.Ttl(); 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); + itm.Ctor_by_lnki(ttl_bry, arg.Lnki_type(), arg.Lnki_w(), arg.Lnki_h(), Xof_patch_upright_tid_.Tid_all, arg.Lnki_upright(), arg.Lnki_time(), Xof_lnki_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, 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"); + fsdb_mgr.Orig_mgr().Find_by_list(OrderedHash_.new_bry_(), itms_list, Xof_exec_tid.Tid_wiki_page); + Xoa_ttl ttl = Xoa_ttl.parse_(wiki, Xow_ns_.Id_main, ttl_bry); + Xoae_page page = Xoae_page.new_(wiki, ttl); + fsdb_mgr.Fsdb_search_by_list(arg.Exec_tid(), itms_list, page, Xog_js_wkr_.Null); + if (arg.Rslt_orig_exists() != Bool_.__byte) Tfds.Eq(arg.Rslt_orig_exists() == Bool_.Y_byte, itm.Orig_exists(), "orig_exists"); + if (arg.Rslt_file_exists() != Bool_.__byte) Tfds.Eq(arg.Rslt_file_exists() == Bool_.Y_byte, itm.File_exists(), "file_exists"); + if (arg.Rslt_file_resized() != Bool_.__byte) Tfds.Eq(arg.Rslt_file_resized() == Bool_.Y_byte, itm.File_resized(), "file_resize"); } public void Test_fsys_exists_y(String url) {Test_fsys_exists(url, Bool_.Y);} public void Test_fsys_exists_n(String url) {Test_fsys_exists(url, Bool_.N);} @@ -123,18 +124,18 @@ class Xof_fsdb_arg { public int W() {return w;} private final int w; public int H() {return h;} private final int h; public double Time() {return time;} private final double time; - public int Page() {return page;} private final int page = Xof_doc_page.Null; + public int Page() {return page;} private final int page = Xof_lnki_page.Null; public byte[] Bin() {return bin;} private final byte[] bin; public DateAdp Modified() {return modified;} private final DateAdp modified = Fsd_thm_tbl.Modified_null; public String Hash() {return hash;} private final String hash = Fsd_thm_tbl.Hash_null; - public static Xof_fsdb_arg new_comm_file(String ttl) {return new_(Xow_domain_.Domain_bry_commons, Bool_.N, ttl, Xof_img_size.Null, Xof_img_size.Null, Xof_doc_thumb.Null_as_int);} - public static Xof_fsdb_arg new_comm_thumb(String ttl) {return new_(Xow_domain_.Domain_bry_commons, Bool_.Y, ttl, W_default, H_default, Xof_doc_thumb.Null_as_int);} - public static Xof_fsdb_arg new_comm_thumb(String ttl, int w, int h) {return new_(Xow_domain_.Domain_bry_commons, Bool_.Y, ttl, w, h, Xof_doc_thumb.Null_as_int);} + public static Xof_fsdb_arg new_comm_file(String ttl) {return new_(Xow_domain_.Domain_bry_commons, Bool_.N, ttl, Xof_img_size.Null, Xof_img_size.Null, Xof_lnki_time.Null_as_int);} + public static Xof_fsdb_arg new_comm_thumb(String ttl) {return new_(Xow_domain_.Domain_bry_commons, Bool_.Y, ttl, W_default, H_default, Xof_lnki_time.Null_as_int);} + public static Xof_fsdb_arg new_comm_thumb(String ttl, int w, int h) {return new_(Xow_domain_.Domain_bry_commons, Bool_.Y, ttl, w, h, Xof_lnki_time.Null_as_int);} public static Xof_fsdb_arg new_comm_thumb(String ttl, int w, int h, int s) {return new_(Xow_domain_.Domain_bry_commons, Bool_.Y, ttl, w, h, s);} - public static Xof_fsdb_arg new_comm_orig(String ttl, int w, int h) {return new_(Xow_domain_.Domain_bry_commons, Bool_.N, ttl, w, h, Xof_doc_thumb.Null_as_int);} - public static Xof_fsdb_arg new_comm(boolean thumb, String ttl, int w, int h) {return new_(Xow_domain_.Domain_bry_commons, thumb, ttl, w, h, Xof_doc_thumb.Null_as_int);} - public static Xof_fsdb_arg new_wiki_thumb(String ttl, int w, int h) {return new_(Xow_domain_.Domain_bry_enwiki, Bool_.Y, ttl, w, h, Xof_doc_thumb.Null_as_int);} - public static Xof_fsdb_arg new_wiki_orig(String ttl, int w, int h) {return new_(Xow_domain_.Domain_bry_enwiki, Bool_.N, ttl, w, h, Xof_doc_thumb.Null_as_int);} + public static Xof_fsdb_arg new_comm_orig(String ttl, int w, int h) {return new_(Xow_domain_.Domain_bry_commons, Bool_.N, ttl, w, h, Xof_lnki_time.Null_as_int);} + public static Xof_fsdb_arg new_comm(boolean thumb, String ttl, int w, int h) {return new_(Xow_domain_.Domain_bry_commons, thumb, ttl, w, h, Xof_lnki_time.Null_as_int);} + public static Xof_fsdb_arg new_wiki_thumb(String ttl, int w, int h) {return new_(Xow_domain_.Domain_bry_enwiki, Bool_.Y, ttl, w, h, Xof_lnki_time.Null_as_int);} + public static Xof_fsdb_arg new_wiki_orig(String ttl, int w, int h) {return new_(Xow_domain_.Domain_bry_enwiki, Bool_.N, ttl, w, h, Xof_lnki_time.Null_as_int);} public static Xof_fsdb_arg new_(byte[] wiki, boolean is_thumb, String ttl_str, int w, int h, int time) { byte[] ttl = Bry_.new_utf8_(ttl_str); int ext = Xof_ext_.new_by_ttl_(ttl).Id(); @@ -152,20 +153,19 @@ class Xof_exec_arg { public int Lnki_w() {return lnki_w;} private int lnki_w; public int Lnki_h() {return lnki_h;} private int lnki_h = Xop_lnki_tkn.Height_null; public double Lnki_upright() {return lnki_upright;} public Xof_exec_arg Lnki_upright_(double v) {lnki_upright = v; return this;} private double lnki_upright = Xop_lnki_tkn.Upright_null; - public int Lnki_time() {return lnki_time;} public Xof_exec_arg Lnki_time_(int v) {lnki_time = v; return this;} private int lnki_time = Xof_doc_thumb.Null_as_int; - public int Lnki_page() {return lnki_page;} public Xof_exec_arg Lnki_page_(int v) {lnki_page = v; return this;} private int lnki_page = Xof_doc_page.Null; + public int Lnki_time() {return lnki_time;} public Xof_exec_arg Lnki_time_(int v) {lnki_time = v; return this;} private int lnki_time = Xof_lnki_time.Null_as_int; + public int Lnki_page() {return lnki_page;} public Xof_exec_arg Lnki_page_(int v) {lnki_page = v; return this;} private int lnki_page = Xof_lnki_page.Null; public byte Exec_tid() {return exec_tid;} public Xof_exec_arg Exec_tid_(byte v) {exec_tid = v; return this;} private byte exec_tid = Xof_exec_tid.Tid_wiki_page; - public byte Rslt_orig() {return rslt_orig;} private byte rslt_orig = Xof_orig_wkr_.Status_null; - public byte Rslt_fsdb() {return rslt_fsdb;} private byte rslt_fsdb = Xof_bin_wkr_.Tid_null; - public byte Rslt_conv() {return rslt_conv;} private byte rslt_conv = Xof_cnv_wkr_.Tid_null; + public byte Rslt_orig_exists() {return rslt_orig_exists;} private byte rslt_orig_exists = Bool_.__byte; + public byte Rslt_file_exists() {return rslt_file_exists;} private byte rslt_file_exists = Bool_.__byte; + public byte Rslt_file_resized() {return rslt_file_resized;} private byte rslt_file_resized = Bool_.__byte; public boolean Lnki_type_is_thumb() {return Xop_lnki_type.Id_defaults_to_thumb(lnki_type);} - public Xof_exec_arg Rslt_orig_noop() {rslt_orig = Xof_orig_wkr_.Status_noop; return this;} - public Xof_exec_arg Rslt_orig_missing() {rslt_orig = Xof_orig_wkr_.Status_missing_orig; return this;} - public Xof_exec_arg Rslt_orig_found() {rslt_orig = Xof_orig_wkr_.Status_found; return this;} - public Xof_exec_arg Rslt_fsdb_xowa() {rslt_fsdb = Xof_bin_wkr_.Tid_fsdb_xowa; return this;} - public Xof_exec_arg Rslt_fsdb_null() {rslt_fsdb = Xof_bin_wkr_.Tid_null; return this;} - public Xof_exec_arg Rslt_conv_y() {rslt_conv = Xof_cnv_wkr_.Tid_y; return this;} - public Xof_exec_arg Rslt_conv_n() {rslt_conv = Xof_cnv_wkr_.Tid_n; return this;} + public Xof_exec_arg Rslt_orig_exists_n() {rslt_orig_exists = Bool_.N_byte; return this;} + public Xof_exec_arg Rslt_orig_exists_y() {rslt_orig_exists = Bool_.Y_byte; return this;} + public Xof_exec_arg Rslt_file_exists_n() {rslt_file_exists = Bool_.N_byte; return this;} + public Xof_exec_arg Rslt_file_exists_y() {rslt_file_exists = Bool_.Y_byte; return this;} + public Xof_exec_arg Rslt_file_resized_n() {rslt_file_resized = Bool_.N_byte; return this;} + public Xof_exec_arg Rslt_file_resized_y() {rslt_file_resized = Bool_.Y_byte; return this;} public static Xof_exec_arg new_thumb(String ttl) {return new_(ttl, Xop_lnki_type.Id_thumb, 220, Xop_lnki_tkn.Height_null);} public static Xof_exec_arg new_thumb(String ttl, int w) {return new_(ttl, Xop_lnki_type.Id_thumb, w, Xop_lnki_tkn.Height_null);} public static Xof_exec_arg new_thumb(String ttl, int w, int h) {return new_(ttl, Xop_lnki_type.Id_thumb, w, h);} diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_redirect_tst.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_redirect_tst.java index f544be912..3c048d878 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_redirect_tst.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_redirect_tst.java @@ -24,28 +24,28 @@ public class Xof_file_redirect_tst { fxt.Init_orig_db(Xof_orig_arg.new_wiki("A.png", 440, 400)); fxt.Init_fsdb_db(Xof_fsdb_arg.new_wiki_orig("A.png", 440, 400)); fxt.Init_orig_db(Xof_orig_arg.new_wiki_redirect("B.png", "A.png")); - fxt.Exec_get(Xof_exec_arg.new_orig("B.png").Rslt_fsdb_xowa()); + fxt.Exec_get(Xof_exec_arg.new_orig("B.png").Rslt_file_exists_y()); fxt.Test_fsys("mem/root/enwiki/orig/7/0/A.png", "440,400"); } @Test public void Same_wiki_thumb_copy() { fxt.Init_orig_db(Xof_orig_arg.new_wiki("A.png", 440, 400)); fxt.Init_fsdb_db(Xof_fsdb_arg.new_wiki_thumb("A.png", 220, 200)); fxt.Init_orig_db(Xof_orig_arg.new_wiki_redirect("B.png", "A.png")); - fxt.Exec_get(Xof_exec_arg.new_thumb("B.png", 220).Rslt_fsdb_xowa()); + fxt.Exec_get(Xof_exec_arg.new_thumb("B.png", 220).Rslt_file_exists_y()); fxt.Test_fsys("mem/root/enwiki/thumb/7/0/A.png/220px.png", "220,200"); } @Test public void Same_wiki_thumb_make() { fxt.Init_orig_db(Xof_orig_arg.new_wiki("A.png", 440, 400)); fxt.Init_fsdb_db(Xof_fsdb_arg.new_wiki_orig("A.png", 440, 400)); fxt.Init_orig_db(Xof_orig_arg.new_wiki_redirect("B.png", "A.png")); - fxt.Exec_get(Xof_exec_arg.new_thumb("B.png", 220).Rslt_fsdb_xowa().Rslt_conv_y()); + fxt.Exec_get(Xof_exec_arg.new_thumb("B.png", 220).Rslt_file_exists_y().Rslt_file_resized_y()); fxt.Test_fsys("mem/root/enwiki/thumb/7/0/A.png/220px.png", "220,200"); } @Test public void Diff_wiki_orig_copy() { fxt.Init_orig_db(Xof_orig_arg.new_comm("A.png", 440, 400)); fxt.Init_fsdb_db(Xof_fsdb_arg.new_comm_orig("A.png", 440, 400)); fxt.Init_orig_db(Xof_orig_arg.new_comm_redirect("B.png", "A.png")); - fxt.Exec_get(Xof_exec_arg.new_orig("B.png").Rslt_fsdb_xowa()); + fxt.Exec_get(Xof_exec_arg.new_orig("B.png").Rslt_file_exists_y()); fxt.Test_fsys("mem/root/common/orig/7/0/A.png", "440,400"); } // @Test public void Cross_wiki() { 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 464e628dd..23f07ca8e 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 @@ -21,7 +21,7 @@ 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) { 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()); + 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_url()), itm.Orig_w(), itm.Orig_h(), String_.new_utf8_(itm.Html_orig_url()), itm.Lnki_ttl(), itm.Gallery_mgr_h()); } 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()); diff --git a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_itm.java b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_itm.java index d02f0c8b6..5c9c4480b 100644 --- a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_itm.java +++ b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_itm.java @@ -24,25 +24,18 @@ public class Xof_orig_itm { public int W() {return w;} private int w; public int H() {return h;} private int h; public byte[] Redirect() {return redirect;} private byte[] redirect; // redirect trg; EX: A.png is redirected to B.jpg; record will have A.png|jpg|220|200|B.jpg where jpg|220|200 are the attributes of B.jpg - public byte Status() {return status;} private byte status; + public boolean Insert_new() {return insert_new;} public void Insert_new_y_() {insert_new = Bool_.Y;} private boolean insert_new; public void Clear() { this.repo = Repo_null; this.page = this.redirect = null; this.ext = Xof_ext_.Id_unknown; this.w = this.h = Xof_img_size.Null; - this.status = Status_null; } - public Xof_orig_itm Init(byte repo, byte[] page, int ext, int w, int h, byte[] redirect) {return Init(repo, page, ext, w, h, redirect, Status_null);} - public Xof_orig_itm Init(byte repo, byte[] page, int ext, int w, int h, byte[] redirect, byte status) { + public Xof_orig_itm Init(byte repo, byte[] page, int ext, int w, int h, byte[] redirect) { this.repo = repo; this.page = page; this.ext = ext; - this.w = w; this.h = h; this.redirect = redirect; this.status = status; + this.w = w; this.h = h; this.redirect = redirect; return this; } - public static final byte Status_null = Byte_.Max_value_127; public static final byte Repo_comm = 0, Repo_wiki = 1, Repo_null = Byte_.Max_value_127; // SERIALIZED: "wiki_orig.orig_repo" - public static byte Repo_by_domain(byte[] domain) {return Bry_.Eq(domain, Xow_domain_.Domain_bry_commons) ? Repo_comm : Repo_wiki;} - public static Xof_orig_itm new_clone(Xof_orig_itm itm) { - return new Xof_orig_itm().Init(itm.repo, itm.page, itm.ext, itm.w, itm.h, itm.redirect, itm.status); - } public static final Xof_orig_itm Null = null; } 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 f12e6f6db..27c653db5 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 @@ -22,35 +22,50 @@ import gplx.xowa.files.repos.*; import gplx.xowa.files.fsdb.*; import gplx.xowa. public class Xof_orig_mgr { private Xof_orig_wkr[] wkrs; private int wkrs_len; private Xof_url_bldr url_bldr; private Xow_repo_mgr repo_mgr; + private final Xof_img_size img_size = new Xof_img_size(); public Xof_orig_mgr() {this.Wkrs__clear();} 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; - 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 { + if (!fsdb_mode.Tid_wmf()) { // add view,make; don't add if wmf 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); } + if (!fsdb_mode.Tid_make()) // add view,wmf; don't add if make + this.Wkrs__add_many(new Xof_orig_wkr__wmf_api(new Xoapi_orig_wmf(), download_wkr, repo_mgr, domain_bry)); } public Xof_orig_itm Find_by_ttl_or_null(byte[] ttl) { for (int i = 0; i < wkrs_len; i++) { Xof_orig_wkr wkr = wkrs[i]; - Xof_orig_itm itm = wkr.Find_as_itm(ttl); - if (itm != Xof_orig_itm.Null) return itm; + Xof_orig_itm orig = wkr.Find_as_itm(ttl); + if (orig == Xof_orig_itm.Null) continue; + if (orig.Insert_new()) this.Insert(orig.Repo(), orig.Page(), orig.Ext(), orig.W(), orig.H(), orig.Redirect()); + return orig; } return Xof_orig_itm.Null; } public void Find_by_list(OrderedHash rv, ListAdp itms, byte exec_tid) { for (int i = 0; i < wkrs_len; i++) { Xof_orig_wkr wkr = wkrs[i]; - if (wkr.Find_by_list(rv, itms)) break; + wkr.Find_by_list(rv, itms); + } + int len = itms.Count(); + for (int i = 0; i < len; i++) { + try { + Xof_fsdb_itm fsdb = (Xof_fsdb_itm)itms.FetchAt(i); + fsdb.Orig_exists_n_(); // default to status = missing + Xof_orig_itm orig = (Xof_orig_itm)rv.Fetch(fsdb.Lnki_ttl()); + if (orig == Xof_orig_itm.Null) continue; + if (orig.Insert_new()) this.Insert(orig.Repo(), orig.Page(), orig.Ext(), orig.W(), orig.H(), orig.Redirect()); + Xof_file_wkr.Eval_orig(exec_tid, orig, fsdb, url_bldr, repo_mgr, img_size); + if (!Io_mgr._.ExistsFil(fsdb.Html_view_url())) + fsdb.File_exists_n_(); + } catch (Exception e) { + throw Err_.err_(e, "orig: {0}", Err_.Message_gplx_brief(e)); + } } - Xof_orig_rdr_func.Eval(rv, itms, exec_tid, url_bldr, repo_mgr); } - public void Insert(byte repo, byte[] page, int ext, int w, int h, byte[] redirect, byte status) { + public void Insert(byte repo, byte[] page, int ext, int w, int h, byte[] redirect) { for (int i = 0; i < wkrs_len; i++) { Xof_orig_wkr wkr = wkrs[i]; if (wkr.Add_orig(repo, page, ext, w, h, redirect)) break; diff --git a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_rdr_func.java b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_rdr_func.java deleted file mode 100644 index 6e9237bf8..000000000 --- a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_rdr_func.java +++ /dev/null @@ -1,53 +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.files.origs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.xowa.files.fsdb.*; import gplx.xowa.files.repos.*; -public class Xof_orig_rdr_func { - public static void Eval(OrderedHash itms_by_ttl, ListAdp itms_all, byte exec_tid, Xof_url_bldr url_bldr, Xow_repo_mgr repo_mgr) { - Xof_img_size img_size = new Xof_img_size(); - int len = itms_all.Count(); - for (int i = 0; i < len; i++) { - Xof_fsdb_itm fsdb = (Xof_fsdb_itm)itms_all.FetchAt(i); - fsdb.Orig_status_(Xof_orig_wkr_.Status_missing_orig); // default to status = missing - Xof_orig_itm orig = (Xof_orig_itm)itms_by_ttl.Fetch(fsdb.Lnki_ttl()); if (orig == null) continue; // not in orig; skip; will do full search later - fsdb.Orig_status_(orig.Status()); - if (orig.Status() > Xof_orig_wkr_.Status_found) continue; // only ignore if marked missing; DATE:2014-02-01 - byte repo_id = orig.Repo(); - Xof_repo_itm repo = null; - if (Xof_repo_itm.Repo_is_known(repo_id)) { // bounds check - fsdb.Orig_repo_id_(repo_id); - Xof_repo_pair repo_pair = repo_mgr.Repos_get_by_id(repo_id); - if (repo_pair == null) // shouldn't happen, but try to avoid null ref; - repo_pair = repo_mgr.Repos_get_at(repo_id); - fsdb.Orig_repo_name_(repo_pair.Wiki_domain()); - repo = repo_pair.Trg(); - } - fsdb.Lnki_ext_(Xof_ext_.new_by_id_(orig.Ext())); // overwrite ext with whatever's in file_orig; needed for ogg -> oga / ogv - fsdb.Orig_size_(orig.W(), orig.H()); - fsdb.Orig_status_(Xof_orig_wkr_.Status_found); - if (Bry_.Len_gt_0(orig.Redirect())) // redirect exists; - fsdb.Ctor_by_orig_redirect(orig.Redirect()); - fsdb.Html_size_calc(img_size, exec_tid); - Io_url html_url = url_bldr.Init_for_trg_file(fsdb.Lnki_type_as_mode(), repo, fsdb.Lnki_ttl(), fsdb.Lnki_md5(), fsdb.Lnki_ext(), fsdb.Html_w(), fsdb.Lnki_time(), fsdb.Lnki_page()).Xto_url(); - fsdb.Html_view_url_(html_url); - if (!Io_mgr._.ExistsFil(html_url)) - fsdb.Orig_status_(Xof_orig_wkr_.Status_missing_orig); - // build url; check if exists; - } - } -} 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 d9370e710..aebdab1f6 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 @@ -31,9 +31,9 @@ public class Xof_orig_tbl { tbl_name = "wiki_orig"; fld_prefix = "orig_"; } + fld_repo = flds.Add_byte(fld_prefix + "repo"); fld_ttl = flds.Add_str(fld_prefix + "ttl", 1024); fld_status = flds.Add_byte("status"); // NOTE: "status" in v1 and v2 - fld_repo = flds.Add_byte(fld_prefix + "repo"); fld_ext = flds.Add_int(fld_prefix + "ext"); fld_w = flds.Add_int(fld_prefix + "w"); fld_h = flds.Add_int(fld_prefix + "h"); @@ -51,7 +51,7 @@ public class Xof_orig_tbl { Xof_orig_itm rv = Xof_orig_itm.Null; Db_rdr rdr = Db_rdr_.Null; try { - Db_stmt stmt = conn.Stmt_select(tbl_name, flds.To_str_ary(), fld_ttl); + Db_stmt stmt = conn.Stmt_select(tbl_name, flds, fld_ttl); rdr = stmt.Clear().Crt_bry_as_str(fld_ttl, ttl).Exec_select_as_rdr(); if (rdr.Move_next()) rv = Make_itm(rdr); @@ -59,13 +59,29 @@ public class Xof_orig_tbl { finally {rdr.Rls();} return rv; } + public boolean Exists__repo_ttl(byte repo, byte[] ttl) { + Db_rdr rdr = Db_rdr_.Null; + try { + rdr = conn.Stmt_select(tbl_name, flds, fld_repo, fld_ttl).Crt_byte(fld_repo, repo).Crt_bry_as_str(fld_ttl, ttl).Exec_select_as_rdr(); + return rdr.Move_next(); + } + finally {rdr.Rls();} + } public void Insert(byte repo, byte[] ttl, int ext, int w, int h, byte[] redirect) { - Db_stmt stmt = Db_stmt_.Null; - stmt = conn.Stmt_insert(tbl_name, flds); + Db_stmt stmt = conn.Stmt_insert(tbl_name, flds); stmt.Clear() - .Val_bry_as_str(fld_ttl, ttl).Val_byte(fld_status, Xof_orig_wkr_.Status_found).Val_byte(fld_repo, repo).Val_int(fld_ext, ext).Val_int(fld_w, w).Val_int(fld_h, h).Val_bry_as_str(fld_redirect, redirect) + .Val_byte(fld_repo, repo).Val_bry_as_str(fld_ttl, ttl).Val_byte(fld_status, Status_found) + .Val_int(fld_ext, ext).Val_int(fld_w, w).Val_int(fld_h, h).Val_bry_as_str(fld_redirect, redirect) .Exec_insert(); } + public void Update(byte repo, byte[] ttl, int ext, int w, int h, byte[] redirect) { + Db_stmt stmt = conn.Stmt_update_exclude(tbl_name, flds, String_.Ary(fld_repo, fld_ttl)); + stmt.Clear() + .Val_byte(fld_status, Status_found) + .Val_int(fld_ext, ext).Val_int(fld_w, w).Val_int(fld_h, h).Val_bry_as_str(fld_redirect, redirect) + .Crt_byte(fld_repo, repo).Crt_bry_as_str(fld_ttl, ttl) + .Exec_update(); + } public Xof_orig_itm Make_itm(Db_rdr rdr) { byte repo = rdr.Read_byte(fld_repo); Xof_orig_itm rv = new Xof_orig_itm().Init @@ -75,9 +91,8 @@ public class Xof_orig_tbl { , rdr.Read_int(fld_w) , rdr.Read_int(fld_h) , rdr.Read_bry_by_str(fld_redirect) - , Xof_repo_itm.Repo_is_known(repo) ? Xof_orig_wkr_.Status_found : Xof_orig_wkr_.Status_missing_orig // NOTE: orig_db may mistakenly have status of found; rely on repo to set status; PAGE:ru.w:Птичкин,_Евгений_Николаевич; DATE:2015-02-16 ); - return rv; + return rv.W() == Xof_img_size.Null ? Xof_orig_itm.Null : 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 schema_is_1, Xof_fsdb_mode fsdb_mode) { @@ -95,6 +110,7 @@ public class Xof_orig_tbl { tbl.Conn_(conn, created, schema_is_1); return conn; } + private static final byte Status_found = 1; } class Xof_orig_tbl__in_wkr extends Db_in_wkr__base { private Xof_orig_tbl tbl; private String tbl_name; private Db_meta_fld_list flds; private String fld_ttl; @@ -118,8 +134,9 @@ class Xof_orig_tbl__in_wkr extends Db_in_wkr__base { while (rdr.Move_next()) { if (cancelable.Canceled()) return; Xof_orig_itm itm = tbl.Make_itm(rdr); + if (itm == Xof_orig_itm.Null) continue; byte[] itm_ttl = itm.Page(); - rv.Add_if_new(itm_ttl, itm); // guard against dupes (shouldn't happen) + rv.Add_if_new(itm_ttl, itm); // guard against dupes; fails on en.w:Paris; DATE:2015-03-08 } } } diff --git a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl_tst.java b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl_tst.java index c73400442..ccef3e041 100644 --- a/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl_tst.java +++ b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_tbl_tst.java @@ -37,7 +37,7 @@ class Xof_orig_tbl_fxt { } public Xof_orig_itm Exec_insert(String ttl, int w, int h) { byte[] ttl_bry = Bry_.new_utf8_(ttl); - Xof_orig_itm rv = new Xof_orig_itm().Init(Xof_orig_itm.Repo_comm, ttl_bry, Xof_ext_.new_by_ttl_(ttl_bry).Id(), w, h, Bry_.Empty, Xof_orig_wkr_.Status_found); + Xof_orig_itm rv = new Xof_orig_itm().Init(Xof_orig_itm.Repo_comm, ttl_bry, Xof_ext_.new_by_ttl_(ttl_bry).Id(), w, h, Bry_.Empty); tbl.Insert(rv.Repo(), rv.Page(), rv.Ext(), rv.W(), rv.H(), rv.Redirect()); return rv; } @@ -48,7 +48,7 @@ class Xof_orig_tbl_fxt { for (int i = 0; i < itms_len; ++i) { String itm = itms[i]; Xof_fsdb_itm fsdb_itm = new Xof_fsdb_itm(); - fsdb_itm.Ctor_by_orig_redirect(Bry_.new_utf8_(itm)); + fsdb_itm.Ctor_by_lnki(Bry_.new_utf8_(itm), Xop_lnki_type.Id_none, Xof_img_size.Null, Xof_img_size.Null, Xof_patch_upright_tid_.Tid_all, Xof_img_size.Upright_null, Xof_lnki_time.Null, Xof_lnki_page.Null); list.Add(fsdb_itm); } tbl.Select_by_list(rv, list); 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 0c285e160..6c65d78c9 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 @@ -20,7 +20,7 @@ import gplx.xowa.files.fsdb.*; public interface Xof_orig_wkr { byte Tid(); Xof_orig_itm Find_as_itm(byte[] ttl); - boolean Find_by_list(OrderedHash rv, ListAdp itms); + void 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_.java b/400_xowa/src/gplx/xowa/files/origs/Xof_orig_wkr_.java index afafc28a0..43043ae14 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 @@ -20,21 +20,7 @@ import gplx.xowa.wmfs.apis.*; public class Xof_orig_wkr_ { public static final Xof_orig_wkr[] Ary_empty = new Xof_orig_wkr[0]; public static final byte - Tid_null = Byte_.Max_value_127 - , Tid_noop = 0 - , Tid_missing = 1 - , Tid_mock = 2 - , Tid_xowa_db = 3 - , Tid_xowa_reg = 4 - , Tid_wmf_api = 5 - , Tid_dir = 6 - ; - public static final byte - Status_null = Byte_.Max_value_127 - , Status_noop = 0 - , Status_found = 1 - , Status_missing_orig = 2 - , Status_missing_qry = 3 - , Status_missing_bin = 4 + Tid_xowa_db = 1 + , Tid_wmf_api = 2 ; } 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 228d48bfd..c1da9c033 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 @@ -18,14 +18,16 @@ along with this program. If not, see . package gplx.xowa.files.origs; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; 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 byte Tid() {return Xof_orig_wkr_.Tid_xowa_db;} 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 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 void Find_by_list(OrderedHash rv, ListAdp itms) {tbl.Select_by_list(rv, itms);} 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; needed b/c fsdb_wkr always calls Insert when itm is found; - tbl.Insert(repo, page, ext_id, w, h, redirect); + if (tbl.Exists__repo_ttl(repo, page)) + tbl.Update(repo, page, ext_id, w, h, redirect); + else + tbl.Insert(repo, page, ext_id, w, h, redirect); return true; } public void Db_txn_save() {tbl.Conn().Txn_mgr().Txn_end_all();} 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 3f1bc1532..6bf5f276a 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 @@ -24,7 +24,17 @@ public class Xof_orig_wkr__wmf_api implements Xof_orig_wkr { 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;} - public boolean Find_by_list(OrderedHash rv, ListAdp itms) {throw Err_.not_implemented_();} + public void Find_by_list(OrderedHash rv, ListAdp itms) { + int len = itms.Count(); + for (int i = 0; i < len; ++i) { + Xof_fsdb_itm fsdb = (Xof_fsdb_itm)itms.FetchAt(i); + byte[] fsdb_ttl = fsdb.Lnki_ttl(); + if (rv.Has(fsdb_ttl)) continue; + Xof_orig_itm orig = Find_as_itm(fsdb_ttl); + if (orig == Xof_orig_itm.Null) continue; + rv.Add(fsdb_ttl, orig); + } + } public Xof_orig_itm Find_as_itm(byte[] ttl) { boolean found = orig_api.Api_query_size(api_rv, download_wkr, repo_mgr, ttl, Xof_img_size.Null, Xof_img_size.Null); // pass in null size to look for orig; DATE:2015-02-10 if (!found) return Xof_orig_itm.Null; // ttl not found by api; return @@ -32,9 +42,10 @@ public class Xof_orig_wkr__wmf_api implements Xof_orig_wkr { byte[] api_page = api_rv.Orig_page(); int api_w = api_rv.Orig_w(), api_h = api_rv.Orig_h(); Xof_ext api_ext = Xof_ext_.new_by_ttl_(api_page); api_ext = Ext__handle_ogg(api_ext, api_w, api_h); - byte[] api_redirect = Bry_.Eq(api_page, ttl) ? null : api_page; // ttl is different; must be redirect + byte[] api_redirect = Bry_.Eq(api_page, ttl) ? Bry_.Empty : api_page; // ttl is different; must be redirect Xof_orig_itm rv = new Xof_orig_itm(); rv.Init(api_repo, api_page, api_ext.Id(), api_w, api_h, api_redirect); + rv.Insert_new_y_(); return rv; } public boolean Add_orig(byte repo, byte[] page, int ext_id, int w, int h, byte[] redirect) {return false;} diff --git a/400_xowa/src/gplx/xowa/files/origs/Xof_wiki_finder.java b/400_xowa/src/gplx/xowa/files/origs/Xof_wiki_finder.java index 06cfed718..3d3fe635e 100644 --- a/400_xowa/src/gplx/xowa/files/origs/Xof_wiki_finder.java +++ b/400_xowa/src/gplx/xowa/files/origs/Xof_wiki_finder.java @@ -49,7 +49,7 @@ class Xof_wiki_finder { // UNUSED return false; } itm.Orig_ttl_(ttl_bry); - if (db_page.Type_redirect()) { + if (db_page.Redirected()) { Xoae_page page = Get_page__by_wiki(wiki, ns_id, ttl_bry); Xoa_ttl redirect_ttl = wiki.Redirect_mgr().Extract_redirect_loop(page.Data_raw()); itm.Orig_redirect_(redirect_ttl); 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 c45e98041..ccad2a6f2 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 @@ -78,7 +78,7 @@ public class Xog_url_wkr { 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)); - xfer_itm.Init_by_lnki(title, Bry_.Empty, Xop_lnki_type.Id_none, -1, -1, -1, Xof_doc_thumb.Null, Xof_doc_page.Null); + xfer_itm.Init_by_lnki(title, Bry_.Empty, Xop_lnki_type.Id_none, -1, -1, -1, Xof_lnki_time.Null, Xof_lnki_page.Null); wiki.File_mgr().Find_meta(xfer_itm); page.File_queue().Clear(); page.File_queue().Add(xfer_itm); // NOTE: set elem_id to "impossible" number, otherwise it will auto-update an image on the page with a super-large size; [[File:Alfred Sisley 062.jpg]] diff --git a/400_xowa/src/gplx/xowa/gui/urls/url_macros/Xog_url_macro_mgr.java b/400_xowa/src/gplx/xowa/gui/urls/url_macros/Xog_url_macro_mgr.java index c85abbaa0..427f818df 100644 --- a/400_xowa/src/gplx/xowa/gui/urls/url_macros/Xog_url_macro_mgr.java +++ b/400_xowa/src/gplx/xowa/gui/urls/url_macros/Xog_url_macro_mgr.java @@ -66,6 +66,7 @@ public class Xog_url_macro_mgr { types_mgr.Set("u" , "~{0}.wikiversity.org/wiki/~{1}"); types_mgr.Set("n" , "~{0}.wikinews.org/wiki/~{1}"); types_mgr.Set("a" , "~{0}.wikia.com/wiki/~{1}"); + types_mgr.Set("m" , "~{0}.wikimedia.com/wiki/~{1}"); custom_mgr.Set("c" , "commons.wikimedia.org/wiki/~{0}"); custom_mgr.Set("wd" , "www.wikidata.org/wiki/~{0}"); custom_mgr.Set("wd.q" , "www.wikidata.org/wiki/Q~{0}"); 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 b1f1b022e..5d814e843 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 @@ -57,7 +57,7 @@ public class Xog_html_itm implements Xog_js_wkr, GfoInvkAble, GfoEvObj { } public void Show(Xoae_page page) { byte view_mode = owner_tab.View_mode(); - byte[] html_src = owner_tab.Wiki().Html_mgr().Page_wtr_mgr().Gen(page, view_mode); + byte[] html_src = page.Wikie().Html_mgr().Page_wtr_mgr().Gen(page, view_mode); // NOTE: must use wiki of page, not of owner tab; DATE:2015-03-05 Html_src_(page, html_src); if (view_mode == Xopg_view_mode.Tid_read){ // used only for Xosrh test; DATE:2014-01-29 html_box.Html_doc_body_focus(); // NOTE: only focus if read so up / down will scroll box; edit / html should focus edit-box; DATE:2014-06-05 diff --git a/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk.java b/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk.java index d092a91b1..47a2be322 100644 --- a/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk.java +++ b/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk.java @@ -86,8 +86,8 @@ public class Xog_html_js_cbk implements GfoInvkAble { Xoa_ttl ttl = Xoa_ttl.parse_(wiki, ttl_bry); wiki.Db_mgr().Load_mgr().Load_by_ttl(tmp_page, ttl.Ns(), ttl.Page_db()); } - return String_.Ary(tmp_page.Exists() ? "1" : "0", Int_.Xto_str(tmp_page.Id()), Int_.Xto_str(tmp_page.Ns_id()), String_.new_utf8_(tmp_page.Ttl_wo_ns()), Bool_.Xto_str_lower(tmp_page.Type_redirect()), tmp_page.Modified_on().XtoStr_fmt("yyyy-MM-dd HH:mm:ss"), Int_.Xto_str(tmp_page.Text_len())); - } private static final Xodb_page tmp_page = Xodb_page.tmp_(); + return String_.Ary(tmp_page.Exists() ? "1" : "0", Int_.Xto_str(tmp_page.Id()), Int_.Xto_str(tmp_page.Ns_id()), String_.new_utf8_(tmp_page.Ttl_page_db()), Bool_.Xto_str_lower(tmp_page.Redirected()), tmp_page.Modified_on().XtoStr_fmt("yyyy-MM-dd HH:mm:ss"), Int_.Xto_str(tmp_page.Wtxt_len())); + } private static final Xodb_page tmp_page = Xodb_page.new_tmp(); private String[][] Get_titles_meta(GfoMsg m) { Xowe_wiki wiki = html_itm.Owner_tab().Wiki(); try { 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 307795a90..efeadd739 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,6 +17,7 @@ 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.files.*; import gplx.xowa.files.fsdb.*; 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 { @@ -75,6 +76,7 @@ public class Xog_tab_itm implements GfoInvkAble { public Xoae_page Page() {return page;} public void Page_(Xoae_page page) { this.page = page; + this.wiki = page.Wikie(); // NOTE: must update wiki else back doesn't work; DATE:2015-03-05 this.Page_update_ui(); // force tab button to update when page changes } private Xoae_page page; public void Page_update_ui() { @@ -105,6 +107,9 @@ public class Xog_tab_itm implements GfoInvkAble { html_itm.Scroll_page_by_id_gui(url.Anchor_str()); // skip page_load and jump to anchor return; } + if (url.Xowa_vnt() != null) { + wiki.Lang().Vnt_mgr().Cur_vnt_(url.Xowa_vnt()); + } if (win.Page__async__working(url)) return; app.Gui_mgr().Search_suggest_mgr().Cancel(); // cancel pending search_suggest calls app.Log_wtr().Queue_enabled_(true); @@ -157,7 +162,8 @@ public class Xog_tab_itm implements GfoInvkAble { 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); + Xof_fsdb_mgr fsdb_mgr = wiki.File_mgr().Fsdb_mgr(); + async_wkr = new Xof_file_wkr(fsdb_mgr.Orig_mgr(), fsdb_mgr.Bin_mgr(), fsdb_mgr.Mnt_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); } @@ -261,10 +267,10 @@ class Load_page_wkr implements Gfo_thread_wkr { 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.Html_mgr__hdump_enabled() && html_db_id != -1) { - wiki.Html_mgr__hdump_rdr().Get_by_ttl(page); + if (wiki.Html_mgr__hdump_enabled()) hdump_enabled = true; - } + if (wiki.Html_mgr__hdump_enabled() && html_db_id != -1) + wiki.Html_mgr__hdump_rdr().Get_by_ttl(page); 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/html/Xoh_page_wtr_wkr.java b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr.java index 5cd689f90..e6a26576f 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 @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.html; import gplx.*; import gplx.xowa.*; import gplx.html.*; import gplx.xowa.html.portal.*; import gplx.xowa.pages.skins.*; import gplx.xowa.pages.*; -import gplx.xowa.wikis.*; import gplx.xowa.gui.*; import gplx.xowa.xtns.wdatas.*; +import gplx.xowa.wikis.*; import gplx.xowa.gui.*; import gplx.xowa.xtns.wdatas.*; import gplx.xowa.langs.vnts.*; public class Xoh_page_wtr_wkr implements Bry_fmtr_arg { private Xop_ctx ctx; private Xoae_page page; private Bry_bfr tmp_bfr = Bry_bfr.reset_(255); public Xoh_page_wtr_wkr(byte page_mode) {this.page_mode = page_mode;} private byte page_mode; @@ -115,6 +115,10 @@ public class Xoh_page_wtr_wkr implements Bry_fmtr_arg { bfr.Add(gplx.xowa.apps.Xoa_gfs_php_mgr.Xto_php(tmp_bfr, Bool_.N, data_raw)); return; } + Xol_vnt_mgr vnt_mgr = wiki.Lang().Vnt_mgr(); + if (vnt_mgr.Enabled()) { // VNT +// vnt_mgr.Convert_ttl + } if (ns_id == Xow_ns_.Id_file) // if [[File]], add boilerplate header 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(); 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 index 28623b547..7df73b1a2 100644 --- a/400_xowa/src/gplx/xowa/html/hdumps/Xohd_hdump_rdr.java +++ b/400_xowa/src/gplx/xowa/html/hdumps/Xohd_hdump_rdr.java @@ -44,7 +44,11 @@ public class Xohd_hdump_rdr { } public void Get_by_ttl(Xog_page rv, Xoa_ttl ttl) { synchronized (dbpg) { - if (!Get_by_ttl__fill_hpg(rv, ttl)) return; + dbpg.Clear(); + if (!Get_by_ttl__fill_hpg(rv, ttl)) { + rv.Exists_n_(); + 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); @@ -56,6 +60,7 @@ public class Xohd_hdump_rdr { 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; + rv.Init(dbpg.Id(), null, ttl); // FIXME 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; diff --git a/400_xowa/src/gplx/xowa/html/hdumps/Xohd_hdump_wtr_tst.java b/400_xowa/src/gplx/xowa/html/hdumps/Xohd_hdump_wtr_tst.java index 30565405a..5a4a9e861 100644 --- a/400_xowa/src/gplx/xowa/html/hdumps/Xohd_hdump_wtr_tst.java +++ b/400_xowa/src/gplx/xowa/html/hdumps/Xohd_hdump_wtr_tst.java @@ -123,7 +123,8 @@ class Xodb_hdump_mgr__base_fxt { hdump_wtr.Generate_hdump(bfr, page); } 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); + return new Xohd_data_itm__img().Data_init_base + (Bry_.new_utf8_(lnki_ttl), file_ext_id, Byte_.Zero, 0, 0, Xof_img_size.Upright_null, Xof_lnki_time.Null, Xof_lnki_page.Null, Xohd_data_itm__base.File_repo_id_null, file_is_orig, html_w, html_uid, html_w, html_h); } } class Xohd_hdump_wtr_fxt extends Xodb_hdump_mgr__base_fxt { 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 index 4d8ec01c1..b5d1ec3fa 100644 --- 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 @@ -34,7 +34,7 @@ public class Xowd_db_init_wkr__html implements Xowd_db_init_tbl_wkr, Xowd_db_ini } 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)); + rv.Conn_(db_file.Conn(), created, core_data_mgr.Cfg__schema_is_1(), core_data_mgr.Cfg__db_id(), core_data_mgr.Cfg__hdump_zip_tid()); return rv; } public void Assert_col__page_html_db_id(Xowe_core_data_mgr core_data_mgr) { @@ -43,8 +43,9 @@ public class Xowd_db_init_wkr__html implements Xowd_db_init_tbl_wkr, Xowd_db_ini 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(); + pg_tbl.Conn_(conn, Bool_.N, Bool_.N, core_data_mgr.Cfg__db_id(), Bool_.Y); 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; +// 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) { diff --git a/400_xowa/src/gplx/xowa/html/hdumps/abrvs/Xohd_abrv_mgr.java b/400_xowa/src/gplx/xowa/html/hdumps/abrvs/Xohd_abrv_mgr.java index 80cfc7d99..c8ae1b064 100644 --- a/400_xowa/src/gplx/xowa/html/hdumps/abrvs/Xohd_abrv_mgr.java +++ b/400_xowa/src/gplx/xowa/html/hdumps/abrvs/Xohd_abrv_mgr.java @@ -122,7 +122,7 @@ public class Xohd_abrv_mgr { 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_root(img.Orig_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.Lnki_ext()), img.File_w(), img.Lnki_time(), img.Lnki_page()); byte[] img_src = url_bldr.Xto_bry(); if (tid == Xohd_abrv_.Tid_img) { diff --git a/400_xowa/src/gplx/xowa/html/hdumps/abrvs/Xohd_abrv_mgr_tst.java b/400_xowa/src/gplx/xowa/html/hdumps/abrvs/Xohd_abrv_mgr_tst.java index 1a6c5f9b4..4964ed9c1 100644 --- a/400_xowa/src/gplx/xowa/html/hdumps/abrvs/Xohd_abrv_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/html/hdumps/abrvs/Xohd_abrv_mgr_tst.java @@ -117,14 +117,22 @@ class Xohd_abrv_mgr_fxt { 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.Data_init_base(Bry_.new_utf8_(ttl), Xof_ext_.Id_png, Xop_lnki_type.Id_none, Xof_img_size.Null, Xof_img_size.Null, Xof_img_size.Upright_null + , Xof_lnki_time.Null, Xof_lnki_page.Null + , Xohd_data_itm__base.File_repo_id_commons, Bool_.N, html_w + , html_uid, html_w, html_h + ); img_list.Add(img); return this; } 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), 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.Data_init_gallery(box_w, img_w, img_pad); + img.Data_init_base(Bry_.new_utf8_(ttl), Xof_ext_.Id_png, Xop_lnki_type.Id_none, Xof_img_size.Null, Xof_img_size.Null, Xof_img_size.Upright_null + , Xof_lnki_time.Null, Xof_lnki_page.Null + , Xohd_data_itm__base.File_repo_id_commons, Bool_.N, html_w + , html_uid, html_w, html_h + ); img_list.Add(img); return this; } diff --git a/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Rl_dump_tbl.java b/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Rl_dump_tbl.java new file mode 100644 index 000000000..8f2a67729 --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Rl_dump_tbl.java @@ -0,0 +1,55 @@ +/* +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.*; +class Rl_dump_tbl { + public static final String Tbl_name = "rl_dump"; private static final Db_meta_fld_list flds = Db_meta_fld_list.new_(); + public static final String + Fld_src_page_id = flds.Add_int("src_page_id") + , Fld_src_html_uid = flds.Add_int("src_html_uid") + , Fld_trg_page_id = flds.Add_int_dflt("trg_page_id", -1) + , Fld_trg_ns = flds.Add_int("trg_ns") + , Fld_trg_ttl = flds.Add_str("trg_ttl", 255) + ; + private Db_conn conn; private Db_stmt stmt_insert; + public Db_conn Conn() {return conn;} + public void Conn_(Db_conn new_conn, boolean created) { + this.conn = new_conn; + if (created) { + Db_meta_tbl meta = Db_meta_tbl.new_(Tbl_name, flds); + conn.Exec_create_tbl_and_idx(meta); + } + stmt_insert = null; + } + public void Insert(int src_page_id, int src_html_uid, int trg_ns, byte[] trg_ttl) { + if (stmt_insert == null) stmt_insert = conn.Rls_reg(conn.Stmt_insert(Tbl_name, flds)); + stmt_insert.Clear().Val_int(Fld_src_page_id, src_page_id) + .Val_int(Fld_src_html_uid, src_html_uid).Val_int(Fld_trg_page_id, -1).Val_int(Fld_trg_ns, trg_ns).Val_bry_as_str(Fld_trg_ttl, trg_ttl) + .Exec_insert(); + } + public Db_rdr Select_missing() { + return conn.Stmt_select_order(Tbl_name, flds, String_.Ary(Fld_trg_page_id), Fld_src_page_id, Fld_src_html_uid) + .Crt_int(Fld_trg_page_id, -1).Exec_select_as_rdr(); + } + public static Rl_dump_tbl Get_or_new(Xowe_wiki wiki) { + Db_conn_bldr_data conn_data = Db_conn_bldr.I.Get_or_new("", wiki.Fsys_mgr().Root_dir().GenSubFil("xowa.link_dump.sqlite3")); + Rl_dump_tbl rv = new Rl_dump_tbl(); + rv.Conn_(conn_data.Conn(), conn_data.Created()); + return rv; + } +} diff --git a/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_hdump_img_cmd.java b/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_hdump_img_cmd.java index aabc8faad..b75c8ba55 100644 --- a/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_hdump_img_cmd.java +++ b/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_hdump_img_cmd.java @@ -40,16 +40,16 @@ class Xob_hdump_img_cmd extends Xob_itm_basic_base implements Xob_cmd { Save(cur_page_id, bfr.Xto_bry_and_clear()); cur_page_id = lnki_page_id; } - int html_uid = rdr.Read_int(1); - byte[] lnki_ttl = rdr.Read_bry(2); - int html_w = rdr.Read_int(3); - int html_h = rdr.Read_int(4); - int file_repo_id = rdr.Read_int(5); - int file_ext_id = rdr.Read_int(6); - boolean file_is_orig = rdr.Read_int(7) == 1; - double file_time = rdr.Read_double(8); - int file_page = rdr.Read_int(9); - 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); +// int html_uid = rdr.Read_int(1); +// byte[] lnki_ttl = rdr.Read_bry(2); +// int html_w = rdr.Read_int(3); +// int html_h = rdr.Read_int(4); +// int file_repo_id = rdr.Read_int(5); +// int file_ext_id = rdr.Read_int(6); +// boolean file_is_orig = rdr.Read_int(7) == 1; +// double file_time = rdr.Read_double(8); +// int file_page = rdr.Read_int(9); +// 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());; } @@ -91,7 +91,7 @@ class Page_async_cmd__img implements Page_async_cmd { missing.Clear(); for (int i = 0; i < len; ++i) { Xohd_data_itm__base itm = ary[i]; - boolean exists = Io_mgr._.ExistsFil(itm.File_url()); + boolean exists = Io_mgr._.ExistsFil(itm.Html_view_url()); if (!exists) missing.Add(itm); } } @@ -104,3 +104,13 @@ class Page_async_cmd__img implements Page_async_cmd { } } } +/* +CREATE TABLE xtn_gallery +( src_page_id integer NOT NULL +, html_uid integer NOT NULL +, box_max integer NOT NULL +, box_w integer NOT NULL +, img_w integer NOT NULL +, img_pad integer NOT NULL +); +*/ diff --git a/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_link_dump_cmd.java b/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_link_dump_cmd.java new file mode 100644 index 000000000..482a94dda --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_link_dump_cmd.java @@ -0,0 +1,56 @@ +/* +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.core.brys.*; +import gplx.dbs.*; import gplx.xowa.bldrs.oimgs.*; +public class Xob_link_dump_cmd { + private Rl_dump_tbl tbl; + private int src_page_id; private Db_conn conn; private Io_url page_db_url; private String wiki_domain; + public void Init_by_wiki(Xowe_wiki wiki) { + this.wiki_domain = wiki.Domain_str(); this.page_db_url = wiki.Data_mgr__core_mgr().Dbs__get_db_core().Url(); + this.tbl = Rl_dump_tbl.Get_or_new(wiki); this.conn = tbl.Conn(); + conn.Txn_bgn(); + } + public void Page_bgn(int src_page_id) {this.src_page_id = src_page_id;} + public void Add(int src_html_uid, int trg_ns_id, byte[] trg_ttl) {tbl.Insert(src_page_id, src_html_uid, trg_ns_id, trg_ttl);} + public void Wkr_commit() {conn.Txn_commit();} + public void Wkr_end() { + try { + conn.Txn_end(); + Db_batch_wkr__msg msg = conn.Batch_msg(Xoa_app_.Usr_dlg(), wiki_domain + ".link_dump."); Db_batch_wkr__sql sql = conn.Batch_sql(); + conn.Exec_sql__idx(msg, Db_meta_idx.new_normal_by_tbl(Rl_dump_tbl.Tbl_name, "src", Rl_dump_tbl.Fld_src_page_id, Rl_dump_tbl.Fld_src_html_uid)); // INDEX: src_page_id, src_html_uid + conn.Exec_sql__idx(msg, Db_meta_idx.new_normal_by_tbl(Rl_dump_tbl.Tbl_name, "trg_temp", Rl_dump_tbl.Fld_trg_ns, Rl_dump_tbl.Fld_trg_ttl)); // INDEX: trg_ns, trg_ttl + conn.Exec_sql(msg.Msg_("update_trg_page_id"), conn.Batch_attach("page_db", page_db_url), sql.Sql_ + ( "REPLACE INTO rl_dump" + , "SELECT r.src_page_id" + , ", r.src_html_uid" + , ", Coalesce(p.page_id, -1)" + , ", r.trg_ns" + , ", r.trg_ttl" + , "FROM rl_dump r" + , " LEFT JOIN page_db.page p ON r.trg_lnki_ns = p.page_namespace AND r.trg_ttl = p.page_title" + , ";" + )); + conn.Exec_sql(msg.Msg_("clear_trg_flds"), sql.Sql_("UPDATE rl_dump SET trg_ns = -1 AND trg_ttl = '' WHERE trg_page_id != -1;")); + conn.Exec_sql__idx(msg, Db_meta_idx.new_normal_by_tbl(Rl_dump_tbl.Tbl_name, "trg", Rl_dump_tbl.Fld_trg_page_id, Rl_dump_tbl.Fld_src_page_id, Rl_dump_tbl.Fld_src_html_uid)); // INDEX: trg_page_id, src_page_id, src_html_uid + conn.Exec_sql__vacuum(msg); + } catch (Exception e) { + Tfds.Write(Err_.Message_gplx(e)); + } + } +} diff --git a/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_lnki_regy_mgr.java b/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_lnki_regy_mgr.java deleted file mode 100644 index ccabdbf96..000000000 --- a/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_lnki_regy_mgr.java +++ /dev/null @@ -1,219 +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.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 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; - public void Init_by_wiki(Xodb_db_file make) { - dump_insert = dump_tbl.Insert_stmt(make.Conn()); - } - 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) { - 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 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(); - Xob_lnki_regy_itm rv = (Xob_lnki_regy_itm)hash.Fetch(hash_key); - if (rv == null) { - rv = new Xob_lnki_regy_itm(hash_key, ns_id, ttl); - hash.Add(hash_key, rv); - } - return rv; - } - public void Save() { - int len = hash.Count(); - for (int i = 0; i < len; ++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 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; - public ListAdp Pages() {return pages;} private final ListAdp pages = ListAdp_.new_(); - public byte[] Pages_to_bry(Bry_bfr bfr) { - int len = pages.Count(); - for (int i = 0; i < len; ++i) { - Redlink_page_itm page_itm = (Redlink_page_itm)pages.FetchAt(i); - page_itm.Write_to_bfr(bfr); - } - return bfr.Xto_bry_and_clear(); - } -} -class Redlink_page_itm { - public Redlink_page_itm(int page_id, int lnki_uid) {this.page_id = page_id; this.lnki_uid = lnki_uid;} - public int Page_id() {return page_id;} private final int page_id; - public int Lnki_uid() {return lnki_uid;} private final int lnki_uid; - public void Write_to_bfr(Bry_bfr bfr) { - bfr .Add_int_variable(page_id).Add_byte_comma() - .Add_int_variable(lnki_uid).Add_byte_semic() - ; - } -} -class Redlink_wkr { - public void Bld() { - Bry_bfr bfr = Bry_bfr.reset_(Io_mgr.Len_mb); - Db_rdr rdr = Db_rdr_.Null; - int cur_page_id = -1; - while (rdr.Move_next()) { - int lnki_page_id = rdr.Read_int(0); - if (lnki_page_id != cur_page_id) { - Save(cur_page_id, bfr.Xto_bry_and_clear()); - cur_page_id = lnki_page_id; - } - int html_uid = rdr.Read_int(1); - bfr.Add_int_variable(html_uid).Add_byte_pipe(); - } - 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; - } - public void Gen() { - Bry_rdr bry_rdr = new Bry_rdr(); - Db_rdr rdr = Db_rdr_.Null; - Db_stmt stmt = Db_stmt_.Null; - while (rdr.Move_next()) { - int lnki_id = rdr.Read_int(0); - int lnki_page_id = rdr.Read_int(1); - byte[] page_ids = rdr.Read_bry(2); - Save_rl_html(stmt, lnki_id, lnki_page_id, bry_rdr.Src_(page_ids)); - } - } - private void Save_rl_html(Db_stmt stmt, int lnki_id, int lnki_page_id, Bry_rdr rdr) { - while (!rdr.Pos_is_eos()) { - int page_id = rdr.Read_int_to_comma(); - int html_uid = rdr.Read_int_to_semic(); - stmt.Val_int(page_id).Val_int(html_uid).Val_int(lnki_id).Exec_insert(); - } - } -} -/* -CREATE TABLE xtn_gallery -( page_id integer NOT NULL -, html_uid integer NOT NULL -, box_max integer NOT NULL -, box_w integer NOT NULL -, img_w integer NOT NULL -, img_pad integer NOT NULL -); - -CREATE TABLE rl_dump -( lnki_ns int NOT NULL -, lnki_ttl varchar(255) NOT NULL -, page_ids varchar(max) NOT NULL --pair of page_id,html_uid; 0,1;5,2 -); - -CREATE TABLE rl_regy -( lnki_id integer NOT NULL PRIMARY KEY AUTOINCREMENT -, lnki_ns integer NOT NULL -, lnki_ttl varchar(255) NOT NULL -, page_id integer NOT NULL -); - -INSERT INTO rl_regy (lnki_ns, lnki_ttl) -SELECT lnki_ns, lnki_ttl -FROM rl_dump -GROUP BY lnki_ns, lnki_ttl -; - -CREATE UNIQUE INDEX rl_regy__lnki_ns_ttl ON rl_regy (lnki_ns, lnki_ttl); - -REPLACE INTO rl_regy -SELECT r.lnki_id -, r.lnki_ns -, r.lnki_ttl -, Coalesce(p.page_id, -1) -FROM rl_regy r - LEFT JOIN page_db.page p ON r.lnki_ns = p.page_namespace AND r.lnki_ttl = p.page_title -; - ---CREATE UNIQUE INDEX rl_regy__lnki_ns_ttl ON rl_regy (lnki_ns, lnki_ttl); - -SELECT r.lnki_ns -, r.lnki_ttl -, r.page_id -, r.lnki_id -, d.page_ids -FROM rl_dump d - JOIN rl_regy r ON d.lnki_ns = r.lnki_ns AND d.lnki_ttl = r.lnki_ttl -WHERE r.page_id = -1 -ORDER BY r.lnki_id -; - -CREATE TABLE rl_html -( page_id integer NOT NULL -, html_uid integer NOT NULL -, lnki_id integer NOT NULL -, lnki_page_id integer NOT NULL -) - -SELECT page_id -, html_uid -, lnki_id -, lnki_page_id -WHERE lnki_page_id = -1 -ORDER BY page_id, html_uid -; -*/ -class Rl_dump_tbl { - public Db_stmt Insert_stmt(Db_conn conn) {return Db_stmt_.new_insert_(conn, Tbl_name, Fld_lnki_ns, Fld_lnki_ttl, Fld_page_ids);} - public void Insert(Db_stmt stmt, int lnki_ns, byte[] lnki_ttl, byte[] page_ids) { - stmt.Val_int(lnki_ns).Val_bry_as_str(lnki_ttl).Val_bry(page_ids).Exec_insert(); - } - public static final String Tbl_name = "rl_dump", Fld_lnki_ns = "lnki_ns", Fld_lnki_ttl = "lnki_ttl", Fld_page_ids = "page_ids"; - public static final String Tbl_sql = String_.Concat_lines_crlf_skipLast - ( "CREATE TABLE rl_dump" - , "( lnki_ns integer NOT NULL" - , ", lnki_ttl varchar(255) NOT NULL" - , ", page_ids mediumblob NOT NULL" - , ");" - ); - public static final Db_idx_itm - Idx_lnki_ns_ttl = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS rl_dump__lnki_ns_ttl ON rl_dump (lnki_ns, lnki_ttl);") - ; -} -class Rl_html_tbl { - public static final String Tbl_name = "rl_html", Fld_page_id = "page_id", Fld_html_uid = "html_uid", Fld_lnki_id = "lnki_id", Fld_lnki_page_id = "lnki_page_id"; -// CREATE TABLE rl_html -// ( page_id integer NOT NULL -// , html_uid integer NOT NULL -// , lnki_id integer NOT NULL -// , lnki_page_id integer NOT NULL -// ) - public static final String Tbl_sql = String_.Concat_lines_crlf_skipLast - ( "CREATE TABLE rl_html" - , "( page_id integer NOT NULL" - , ", html_uid integer NOT NULL" - , ", lnki_id integer NOT NULL" - , ", lnki_page_id integer NOT NULL" - , ");" - ); - public static final Db_idx_itm - Idx_lnki_ns_ttl = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS rl_dump__lnki_ns_ttl ON rl_dump (lnki_ns, lnki_ttl);") - ; -} diff --git a/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_rl_regy_cmd.java b/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_rl_regy_cmd.java new file mode 100644 index 000000000..f62aaebda --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/hdumps/bldrs/Xob_rl_regy_cmd.java @@ -0,0 +1,62 @@ +/* +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.xowa.bldrs.*; import gplx.xowa.html.hdumps.data.*; +import gplx.xowa.wikis.data.*; +public class Xob_rl_regy_cmd extends Xob_itm_basic_base implements Xob_cmd { + private Rl_dump_tbl link_dump_tbl; private Xohd_page_html_tbl html_dump_tbl; + private int commit_interval = 10000, commit_count = 0; + public Xob_rl_regy_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki);} + public String Cmd_key() {return Cmd_key_const;} public static final String Cmd_key_const = "hdump.redlinks"; + public void Cmd_ini(Xob_bldr bldr) {} + public void Cmd_bgn(Xob_bldr bldr) { + this.link_dump_tbl = Rl_dump_tbl.Get_or_new(wiki); + this.html_dump_tbl = Xohd_page_html_tbl.Get_from_db__root(wiki); + } + public void Cmd_run() { + Db_rdr rdr = link_dump_tbl.Select_missing(); + int cur_page_id = -1; Bry_bfr bfr = Bry_bfr.reset_(255); + html_dump_tbl.Conn().Txn_bgn(); + while (rdr.Move_next()) { + int src_page_id = rdr.Read_int(Rl_dump_tbl.Fld_src_page_id); + if (cur_page_id != src_page_id) { + if (cur_page_id != -1) Commit(cur_page_id, bfr); + cur_page_id = src_page_id; + } + bfr.Add_int_variable(rdr.Read_int(Rl_dump_tbl.Fld_src_html_uid)).Add_byte_pipe(); + } + Commit(cur_page_id, bfr); + html_dump_tbl.Conn().Txn_end(); + } + private void Commit(int cur_page_id, Bry_bfr bfr) { + html_dump_tbl.Insert(cur_page_id, Xohd_page_html_row.Tid_redlink, bfr.Xto_bry_and_clear()); + ++commit_count; + if ((commit_count % commit_interval ) == 0) + html_dump_tbl.Conn().Txn_commit(); + } + public void Cmd_end() { + html_dump_tbl.Conn().Conn_term(); + link_dump_tbl.Conn().Conn_term(); + } + public void Cmd_print() {} + @Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { + if (ctx.Match(k, Invk_commit_interval_)) commit_interval = m.ReadInt("v"); + else return GfoInvkAble_.Rv_unhandled; + return this; + } private static final String Invk_commit_interval_ = "commit_interval_"; +} 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 index ff305f37d..aaf2d2d3d 100644 --- 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 @@ -16,15 +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.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.*; +import gplx.core.brys.*; 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; @@ -36,28 +29,32 @@ public abstract class Xohd_data_itm__base implements Xohd_data_itm { 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 int Orig_repo_id() {return orig_repo_id;} private int orig_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 + public int Html_w() {return html_w;} private int html_w; + public int Html_h() {return html_h;} private int html_h; + public Io_url Html_view_url() {return html_view_url;} public void File_url_(Io_url v) {html_view_url = v;} private Io_url html_view_url; +// public byte[] Orig_ttl() {return orig_ttl;} private byte[] orig_ttl; +// public int Orig_ext() {return orig_ext;} private int orig_ext; +// public byte[] Orig_redirect() {return orig_redirect;} private byte[] orig_redirect = Bry_.Empty; +// public byte Html_elem_tid() {return html_elem_tid;} public void Html_elem_tid_(byte v) {html_elem_tid = v;} private byte html_elem_tid; +// public Io_url Html_orig_url() {return html_orig_url;} public void Html_orig_url_(Io_url v) {html_orig_url = v;} private Io_url html_orig_url = Io_url_.Null; +// public int Gallery_mgr_h() {return gallery_mgr_h;} public void Gallery_mgr_h_(int v) {gallery_mgr_h = v;} private int gallery_mgr_h = Int_.Neg1; + public Xohd_data_itm__base Data_init_base + ( byte[] lnki_ttl, int lnki_ext, byte lnki_type, int lnki_w, int lnki_h, double lnki_upright, double lnki_time, int lnki_page + , int orig_repo_id, boolean file_is_orig, int file_w , 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_ext = lnki_ext; this.lnki_type = lnki_type; + this.lnki_w = lnki_w; this.lnki_h = lnki_h; this.lnki_upright = lnki_upright; this.lnki_time = lnki_time; this.lnki_page = lnki_page; + this.orig_repo_id = orig_repo_id; this.file_is_orig = file_is_orig; this.file_w = file_w; + this.html_uid = html_uid; this.html_w = html_w; this.html_h = html_h; + return this; + } + public void Data_write(Bry_bfr bfr) { bfr .Add_int_variable(Xohd_data_tid.Tid_img).Add_byte_pipe() - .Add_int_variable(img_tid).Add_byte_pipe() + .Add_int_variable(this.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() @@ -66,13 +63,36 @@ public abstract class Xohd_data_itm__base implements Xohd_data_itm { .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(orig_repo_id).Add_byte_pipe() + .Add_yn(file_is_orig).Add_byte_pipe() + .Add_int_variable(file_w).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() ; + 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(orig_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) + ); + } + @gplx.Virtual public void Data_parse(Bry_rdr rdr) { + this.lnki_ttl = rdr.Read_bry_to_pipe(); + this.lnki_ext = rdr.Read_int_to_pipe(); + this.lnki_type = rdr.Read_byte_to_pipe(); + this.lnki_w = rdr.Read_int_to_pipe(); + this.lnki_h = rdr.Read_int_to_pipe(); + this.lnki_upright = rdr.Read_double_to_pipe(); + this.lnki_time = rdr.Read_double_to_pipe(); + this.lnki_page = rdr.Read_int_to_pipe(); + this.orig_repo_id = rdr.Read_int_to_pipe(); + this.file_is_orig = rdr.Read_yn_to_pipe(); + this.file_w = rdr.Read_int_to_pipe(); + this.html_uid = rdr.Read_int_to_pipe(); + this.html_w = rdr.Read_int_to_pipe(); + this.html_h = rdr.Read_int_to_pipe(); } @gplx.Virtual public void Data_write_hook(Bry_bfr bfr) {} @Override public String toString() {return this.Data_print();} // TEST diff --git a/400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_itm__gallery_itm.java b/400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_itm__gallery_itm.java index 517fa1a76..165f88033 100644 --- a/400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_itm__gallery_itm.java +++ b/400_xowa/src/gplx/xowa/html/hdumps/core/Xohd_data_itm__gallery_itm.java @@ -16,21 +16,28 @@ 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.core.brys.*; 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) { + public int Box_w() {return box_w;} private int box_w; + public int Img_w() {return img_w;} private int img_w; + public int Img_pad() {return img_pad;} private int img_pad; + public Xohd_data_itm__gallery_itm Data_init_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; return this; } - public int Box_w() {return box_w;} private int box_w; - public int Img_w() {return img_w;} private int img_w; - public int Img_pad() {return img_pad;} private int img_pad; @Override public void Data_write_hook(Bry_bfr bfr) { bfr .Add_int_variable(box_w).Add_byte_pipe() .Add_int_variable(img_w).Add_byte_pipe() .Add_int_variable(img_pad).Add_byte_pipe() ; } + @Override public void Data_parse(Bry_rdr rdr) { + super.Data_parse(rdr); + this.box_w = rdr.Read_int_to_pipe(); + this.img_w = rdr.Read_int_to_pipe(); + this.img_pad = rdr.Read_int_to_pipe(); + } } 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 index 62bc04e9e..84eb91a8c 100644 --- 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 @@ -21,7 +21,9 @@ import gplx.xowa.dbs.*; import gplx.xowa.pages.*; import gplx.xowa.html.hdumps.c 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_(); + private final Bry_rdr rdr = new Bry_rdr(); private final ListAdp rows = ListAdp_.new_(), imgs = ListAdp_.new_(); + private static final int redlink_list_max = 1024; + private final int[] redlink_list = new int[redlink_list_max]; 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); @@ -53,37 +55,25 @@ public class Xohd_page_html_mgr__load { } 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() { + public static Xohd_data_itm__base Load_img(Bry_rdr rdr) { 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; + case Xohd_data_itm__base.Tid_gallery : img_itm = new Xohd_data_itm__gallery_itm(); 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); + img_itm.Data_parse(rdr); rdr.Pos_add_one(); - imgs.Add(img_itm); + return img_itm; + } + private void Load_data_img() { + imgs.Add(Load_img(rdr)); } 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); + int len = 0; + while (!rdr.Pos_is_eos() && len < redlink_list_max) + redlink_list[len++] = rdr.Read_int_to_pipe(); + hpg.Redlink_uids_(Int_.Ary_copy(redlink_list, len)); } private void Load_data_gallery(Xog_page hpg) { int uid = rdr.Read_int_to_pipe(); 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 index c253b016c..7ebb73c76 100644 --- 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 @@ -37,10 +37,8 @@ public class Xohd_page_html_mgr__save { 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)); - } + for (int i = 0; i < len; ++i) + bfr.Add_int_variable(redlink_mgr.Get_at(i)).Add_byte_pipe(); return bfr.Xto_bry_and_clear(); } public static byte[] Write_imgs(Bry_bfr bfr, ListAdp imgs) { 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 index 7caaa8313..a185b03dc 100644 --- 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 @@ -23,6 +23,7 @@ public class Xohd_page_html_tbl { 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 Db_conn Conn() {return conn;} 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) { @@ -71,4 +72,11 @@ public class Xohd_page_html_tbl { } 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);} + public static Xohd_page_html_tbl Get_from_db__root(Xowe_wiki wiki) { + gplx.xowa.wikis.data.Xow_core_data_mgr core_data_mgr = wiki.Data_mgr__core_mgr(); + Xowd_db_file hdump_db = core_data_mgr.Dbs__get_by_tid_nth_or_new(Xowd_db_file_.Tid_html); + Xohd_page_html_tbl rv = new Xohd_page_html_tbl(); + rv.Conn_(hdump_db.Conn(), Bool_.N, core_data_mgr.Cfg__schema_is_1(), core_data_mgr.Cfg__db_id(), core_data_mgr.Cfg__hdump_zip_tid()); + return rv; + } } 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 index f050b705b..ce3f02db5 100644 --- 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 @@ -24,8 +24,12 @@ public class Xopg_hdump_data { 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()); + img.Data_init_base + ( xfer.Lnki_ttl(), xfer.Lnki_ext().Id(), xfer.Lnki_type(), xfer.Lnki_w(), xfer.Lnki_h(), xfer.Lnki_upright() + , xfer.Lnki_time(), xfer.Lnki_page() + , xfer.Trg_repo_idx(), xfer.Img_is_orig(), xfer.File_w() + , xfer.Html_uid(), xfer.Html_w(), xfer.Html_h() + ); imgs.Add(img); } public void Clear() { 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 56daac6c3..3d3eb6ffe 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 @@ -145,10 +145,11 @@ public class Xow_hzip_itm__anchor { int ttl_end = Bry_finder.Find_fwd(src, Xow_hzip_dict.Escape, 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); byte[] ttl_bry = Bry_.Mid(src, ttl_bgn, ttl_end); Xoa_ttl ttl = ttl_parser.Ttl_parse(ns.Id(), ttl_bry); - bfr.Add_str("").Add(ttl_bry); bfr.Add_str(""); } 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 66efd4794..922f0b230 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 @@ -34,6 +34,11 @@ public class Xow_hzip_itm__anchor_tst { fxt.Test_save(brys, "Template:A"); fxt.Test_load(brys, "Template:A"); } + @Test public void Srl_lnki_text_n_apos() { + byte[][] brys = Bry_.Ary(Xow_hzip_dict.Bry_lnki_text_n, Bry_.ints_(12), Bry_.new_ascii_("A'b"), Xow_hzip_dict.Escape_bry); + fxt.Test_save(brys, "Template:A'b"); + fxt.Test_load(brys, "Template:A'b"); + } @Test public void Srl_lnki_text_n_smoke() { byte[][] brys = Bry_.Ary(Bry_.new_ascii_("a_1"), Xow_hzip_dict.Bry_lnki_text_n, Bry_.ints_(2), Bry_.new_ascii_("A"), Xow_hzip_dict.Escape_bry, Bry_.new_ascii_("a_2")); fxt.Test_save(brys, "a_1Aa_2"); diff --git a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_mgr.java b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_mgr.java index 2660dfbd8..a53abb60e 100644 --- a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_mgr.java +++ b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_file_mgr.java @@ -20,6 +20,7 @@ import gplx.core.primitives.*; import gplx.xowa.files.*; import gplx.xowa.parsers.lnkis.*; public class Xoh_file_mgr { private final Xowe_wiki wiki; private final Bool_obj_ref queue_add_ref = Bool_obj_ref.n_(); + private final Xof_xfer_itm tmp_xfer_itm = new Xof_xfer_itm(); public Xoh_file_mgr(Xowe_wiki wiki, Xow_html_mgr html_mgr, Xoh_html_wtr html_wtr) { this.wiki = wiki; this.file_wtr = new Xoh_file_wtr__basic(wiki, html_mgr, html_wtr); @@ -34,10 +35,10 @@ public class Xoh_file_mgr { Xof_xfer_itm xfer_itm = this.Lnki_eval(ctx, page, lnki, queue_add_ref); file_wtr.Write_file(bfr, ctx, hctx, src, lnki, xfer_itm, alt_text); } - public Xof_xfer_itm Lnki_eval(Xop_ctx ctx, Xoae_page page, Xop_lnki_tkn lnki, Bool_obj_ref queue_add_ref) {return Lnki_eval(ctx, page.File_queue(), lnki.Ttl().Page_url(), lnki.Lnki_type(), lnki.Lnki_w(), lnki.Lnki_h(), lnki.Upright(), lnki.Thumbtime(), lnki.Page(), lnki.Ns_id() == Xow_ns_.Id_media, queue_add_ref);} + public Xof_xfer_itm Lnki_eval(Xop_ctx ctx, Xoae_page page, Xop_lnki_tkn lnki, Bool_obj_ref queue_add_ref) {return Lnki_eval(ctx, page.File_queue(), lnki.Ttl().Page_url(), lnki.Lnki_type(), lnki.W(), lnki.H(), lnki.Upright(), lnki.Time(), lnki.Page(), lnki.Ns_id() == Xow_ns_.Id_media, queue_add_ref);} public Xof_xfer_itm Lnki_eval(Xop_ctx ctx, Xof_xfer_queue queue, byte[] lnki_ttl, byte lnki_type, int lnki_w, int lnki_h, double lnki_upright, double lnki_thumbtime, int lnki_page, boolean lnki_is_media_ns, Bool_obj_ref queue_add_ref) { queue_add_ref.Val_n_(); - int uid = queue.Elem_id().Val_add(); + int uid = queue.Html_uid().Val_add(); tmp_xfer_itm.Clear().Init_by_lnki(lnki_ttl, Bry_.Empty, lnki_type, lnki_w, lnki_h, lnki_upright, lnki_thumbtime, lnki_page).Set__html_uid_tid(uid, Xof_html_elem.Tid_img); boolean found = Find_file(ctx, tmp_xfer_itm); boolean file_queue_add = File_queue_add(wiki, tmp_xfer_itm, lnki_is_media_ns, found); @@ -50,7 +51,7 @@ public class Xoh_file_mgr { } rv.File_found_(found); return rv; - } private Xof_xfer_itm tmp_xfer_itm = new Xof_xfer_itm(); + } private boolean Find_file(Xop_ctx ctx, Xof_xfer_itm xfer_itm) { if (wiki.File_mgr().Version() == Xow_file_mgr.Version_2) return ctx.Cur_page().Lnki_file_mgr().Find(wiki, ctx.Cur_page(), Xof_exec_tid.Tid_wiki_page, xfer_itm); 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 3ae21ff06..2b7dc282b 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 @@ -46,8 +46,8 @@ public class Xoh_file_wtr__basic { lnki_halign = wiki.Lang().Img_thumb_halign_default(); // if halign is not supplied, then default to align for language byte[] lnki_halign_bry = Xop_lnki_align_h.Html_names[lnki_halign]; byte[] lnki_href = wiki.Appe().Href_parser().Build_to_bry(wiki, lnki.Ttl()); - byte[] img_view_src = xfer_itm.Html_view_src(); - byte[] img_orig_src = xfer_itm.Html_orig_src(); + byte[] img_view_src = xfer_itm.Html_view_url(); + byte[] img_orig_src = xfer_itm.Html_orig_url(); byte[] lnki_ttl = lnki.Ttl().Page_txt(); Xof_ext lnki_ext = xfer_itm.Lnki_ext(); boolean lnki_is_thumbable = Xop_lnki_type.Id_is_thumbable(lnki.Lnki_type()); @@ -163,7 +163,7 @@ public class Xoh_file_wtr__basic { html_fmtr.Html_thumb_part_info(scratch_bfr, uid, lnki_href, html_mgr.Img_media_info_btn()); info_btn = scratch_bfr.Xto_bry_and_clear(); } - int play_btn_width = lnki.Lnki_w(); if (play_btn_width < 1) play_btn_width = html_mgr.Img_thumb_width(); // if no width set width to default img width + int play_btn_width = lnki.W(); if (play_btn_width < 1) play_btn_width = html_mgr.Img_thumb_width(); // if no width set width to default img width html_fmtr.Html_thumb_file_audio(scratch_bfr, Arg_caption_div(ctx, src, lnki, uid, img_orig_src, lnki_href), Arg_alt_html(ctx, src, lnki), Arg_play_btn(uid, play_btn_width, Play_btn_max_width, img_orig_src, lnki.Ttl().Page_txt()), info_btn); return scratch_bfr.Xto_bry_and_clear(); } 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 d88b2d50c..780e5ff1c 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 @@ -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.portal; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; -import gplx.xowa.wikis.*; import gplx.xowa.gui.*; import gplx.xowa.html.sidebar.*; import gplx.xowa.pages.*; +import gplx.xowa.wikis.*; import gplx.xowa.gui.*; import gplx.xowa.html.sidebar.*; import gplx.xowa.pages.*; import gplx.xowa.langs.vnts.*; import gplx.xowa.apis.xowa.html.*; import gplx.xowa.apis.xowa.html.skins.*; public class Xow_portal_mgr implements GfoInvkAble { private Xowe_wiki wiki; private boolean lang_is_rtl; private Xoapi_toggle_itm toggle_itm; @@ -67,8 +67,15 @@ public class Xow_portal_mgr implements GfoInvkAble { talk_cls = Xow_portal_mgr.Cls_selected_y; else subj_cls = Xow_portal_mgr.Cls_selected_y; + Bry_fmtr_arg vnt_menu = null; +// Xol_vnt_mgr vnt_mgr = wiki.Lang().Vnt_mgr(); // VNT; DATE:2015-03-03 +// if (vnt_mgr.Enabled()) { +// Xolg_vnt_grp_fmtr vnt_menu_fmtr = vnt_mgr.Vnt_mnu_fmtr(); +// vnt_menu_fmtr.Init(vnt_mgr.Vnt_grp(), ttl.Full_db(), vnt_mgr.Cur_vnt()); +// vnt_menu = wiki.Lang().Vnt_mgr().Enabled() ? vnt_menu_fmtr : null; +// } Bry_bfr tmp_bfr = bfr_mkr.Get_k004(); - div_ns_fmtr.Bld_bfr_many(tmp_bfr, Bry_.Add(Xoh_href_parser.Href_wiki_bry, ttl.Subj_txt()), subj_cls, Bry_.Add(Xoh_href_parser.Href_wiki_bry, ttl.Talk_txt()), talk_cls); + div_ns_fmtr.Bld_bfr_many(tmp_bfr, Bry_.Add(Xoh_href_parser.Href_wiki_bry, ttl.Subj_txt()), subj_cls, Bry_.Add(Xoh_href_parser.Href_wiki_bry, ttl.Talk_txt()), talk_cls, vnt_menu); return tmp_bfr.Mkr_rls().Xto_bry_and_clear(); } private byte[] Ns_cls_by_ord(Xow_ns_mgr ns_mgr, int ns_ord) { @@ -94,14 +101,14 @@ public class Xow_portal_mgr implements GfoInvkAble { public byte[] Div_home_bry() {return api_skin != null && api_skin.Sidebar_home_enabled() ? div_home_bry : Bry_.Empty;} private byte[] div_home_bry = Bry_.Empty; public byte[] Div_wikis_bry(Bry_bfr_mkr bfr_mkr) { if (toggle_itm == null) // TEST:lazy-new b/c Init_by_wiki - toggle_itm = wiki.Appe().Api_root().Html().Page().Toggle_mgr().Get_or_new("offline-wikis").Init(wiki.Appe().User().Wiki()); + toggle_itm = wiki.Appe().Api_root().Html().Page().Toggle_mgr().Get_or_new("offline-wikis").Init(wiki.Appe().User().Wiki(), Bry_.new_ascii_("Wikis")); Bry_bfr tmp_bfr = bfr_mkr.Get_k004(); div_wikis_fmtr.Bld_bfr_many(tmp_bfr, toggle_itm.Html_toggle_btn(), toggle_itm.Html_toggle_hdr()); return tmp_bfr.Mkr_rls().Xto_bry_and_clear(); } public byte[] Missing_ns_cls() {return missing_ns_cls;} public Xow_portal_mgr Missing_ns_cls_(byte[] v) {missing_ns_cls = v; return this;} private byte[] missing_ns_cls; // NOTE: must be null due to Init check above private Bry_fmtr div_personal_fmtr = Bry_fmtr.new_("~{portal_personal_subj_href};~{portal_personal_subj_text};~{portal_personal_talk_cls};~{portal_personal_talk_href};~{portal_personal_talk_cls};", "portal_personal_subj_href", "portal_personal_subj_text", "portal_personal_subj_cls", "portal_personal_talk_href", "portal_personal_talk_cls"); - private Bry_fmtr div_ns_fmtr = Bry_fmtr.new_("~{portal_ns_subj_href};~{portal_ns_subj_cls};~{portal_ns_talk_href};~{portal_ns_talk_cls}", "portal_ns_subj_href", "portal_ns_subj_cls", "portal_ns_talk_href", "portal_ns_talk_cls"); + private Bry_fmtr div_ns_fmtr = Bry_fmtr.new_("~{portal_ns_subj_href};~{portal_ns_subj_cls};~{portal_ns_talk_href};~{portal_ns_talk_cls};~{portal_div_vnts}", "portal_ns_subj_href", "portal_ns_subj_cls", "portal_ns_talk_href", "portal_ns_talk_cls", "portal_div_vnts"); private Bry_fmtr div_view_fmtr = Bry_fmtr.new_("", "portal_view_read_cls", "portal_view_edit_cls", "portal_view_html_cls", "search_text"); private Bry_fmtr div_logo_fmtr = Bry_fmtr.new_("", "portal_nav_main_href", "portal_logo_url"); private Bry_fmtr div_wikis_fmtr = Bry_fmtr.new_("", "toggle_btn", "toggle_hdr"); @@ -122,8 +129,8 @@ public class Xow_portal_mgr implements GfoInvkAble { return this; } private static final String Invk_div_personal_ = "div_personal_", Invk_div_view_ = "div_view_", Invk_div_ns_ = "div_ns_", Invk_div_home_ = "div_home_", Invk_div_wikis_ = "div_wikis_" - , Invk_missing_ns_cls = "missing_ns_cls", Invk_missing_ns_cls_ = "missing_ns_cls_", Invk_missing_ns_cls_list = "missing_ns_cls_list" - ; + , Invk_missing_ns_cls = "missing_ns_cls", Invk_missing_ns_cls_ = "missing_ns_cls_", Invk_missing_ns_cls_list = "missing_ns_cls_list" + ; public static final String Invk_div_logo_ = "div_logo_"; private static KeyVal[] Options_missing_ns_cls_list = KeyVal_.Ary(KeyVal_.new_("", "Show as blue link"), KeyVal_.new_("new", "Show as red link"), KeyVal_.new_("xowa_display_none", "Hide")); private static final byte[] Missing_ns_cls_hide = Bry_.new_ascii_("xowa_display_none"); 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 cdb261e6c..1d3773713 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 @@ -20,8 +20,8 @@ import org.junit.*; public class Xow_portal_mgr_tst { @Before public void init() {fxt.Init();} private Xowh_portal_mgr_fxt fxt = new Xowh_portal_mgr_fxt(); @Test public void Div_ns_bry() { - fxt.Test_div_ns_bry("A" , "/wiki/A;selected;/wiki/Talk:A;xowa_display_none"); - fxt.Test_div_ns_bry("Talk:A" , "/wiki/A;;/wiki/Talk:A;selected"); + fxt.Test_div_ns_bry("A" , "/wiki/A;selected;/wiki/Talk:A;xowa_display_none;"); + fxt.Test_div_ns_bry("Talk:A" , "/wiki/A;;/wiki/Talk:A;selected;"); } @Test public void Div_personal_bry() { fxt.Test_div_personal_bry("/wiki/User:anonymous;anonymous;xowa_display_none;/wiki/User_talk:anonymous;xowa_display_none;"); 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 9507a8283..aa0ad0591 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 @@ -21,6 +21,8 @@ public class Xol_vnt_mgr implements GfoInvkAble { private int converter_ary_len; private OrderedHash tmp_page_list = OrderedHash_.new_bry_(); public Xol_vnt_mgr(Xol_lang lang) {this.lang = lang;} public Xol_vnt_converter[] Converter_ary() {return converter_ary;} private Xol_vnt_converter[] converter_ary; + public Xolg_vnt_grp Vnt_grp() {return vnt_grp;} private Xolg_vnt_grp vnt_grp = new Xolg_vnt_grp(); + public Xolg_vnt_grp_fmtr Vnt_mnu_fmtr() {return vnt_mnu_fmtr;} private Xolg_vnt_grp_fmtr vnt_mnu_fmtr = new Xolg_vnt_grp_fmtr(); public Xol_lang Lang() {return lang;} private Xol_lang lang; public byte[] Cur_vnt() {return cur_vnt;} public Xol_vnt_mgr Cur_vnt_(byte[] v) {cur_vnt = v; return this;} private byte[] cur_vnt = Bry_.Empty; public boolean Enabled() {return enabled;} public void Enabled_(boolean v) {this.enabled = v;} private boolean enabled = false; @@ -28,6 +30,14 @@ public class Xol_vnt_mgr implements GfoInvkAble { public void Init_by_wiki(Xowe_wiki wiki) { if (!enabled) return; Xop_vnt_lxr_.set_(wiki); + // VNT +// vnt_grp.Add(new Xolg_vnt_itm(Bry_.new_utf8_("zh-hans"), Bry_.new_utf8_("Simplified"))); +// vnt_grp.Add(new Xolg_vnt_itm(Bry_.new_utf8_("zh-hant"), Bry_.new_utf8_("Traditional"))); +// vnt_grp.Add(new Xolg_vnt_itm(Bry_.new_utf8_("zh-cn"), Bry_.new_utf8_("China"))); +// vnt_grp.Add(new Xolg_vnt_itm(Bry_.new_utf8_("zh-hk"), Bry_.new_utf8_("Hong Kong"))); +// vnt_grp.Add(new Xolg_vnt_itm(Bry_.new_utf8_("zh-mo"), Bry_.new_utf8_("Macau"))); +// vnt_grp.Add(new Xolg_vnt_itm(Bry_.new_utf8_("zh-sg"), Bry_.new_utf8_("Singapore"))); +// vnt_grp.Add(new Xolg_vnt_itm(Bry_.new_utf8_("zh-tw"), Bry_.new_utf8_("Taiwan"))); } public Xol_vnt_itm Get_or_new(byte[] key) { Xol_vnt_itm rv = (Xol_vnt_itm)vnts.Fetch(key); @@ -76,7 +86,7 @@ public class Xol_vnt_mgr implements GfoInvkAble { if (ttl == null) continue; Xodb_page page = new Xodb_page(); page.Ttl_(ns, ttl.Page_db()); - byte[] converted_ttl = page.Ttl_w_ns(); + byte[] converted_ttl = page.Ttl_full_db(); if (tmp_page_list.Has(converted_ttl)) continue; tmp_page_list.Add(converted_ttl, page); ++rv; diff --git a/400_xowa/src/gplx/xowa/langs/vnts/Xolg_vnt_grp.java b/400_xowa/src/gplx/xowa/langs/vnts/Xolg_vnt_grp.java new file mode 100644 index 000000000..4652171ae --- /dev/null +++ b/400_xowa/src/gplx/xowa/langs/vnts/Xolg_vnt_grp.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.langs.vnts; import gplx.*; import gplx.xowa.*; import gplx.xowa.langs.*; +public 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);} +} diff --git a/400_xowa/src/gplx/xowa/langs/vnts/Xolg_vnt_mgr.java b/400_xowa/src/gplx/xowa/langs/vnts/Xolg_vnt_grp_fmtr.java similarity index 68% rename from 400_xowa/src/gplx/xowa/langs/vnts/Xolg_vnt_mgr.java rename to 400_xowa/src/gplx/xowa/langs/vnts/Xolg_vnt_grp_fmtr.java index 47e661994..4d4b3a852 100644 --- a/400_xowa/src/gplx/xowa/langs/vnts/Xolg_vnt_mgr.java +++ b/400_xowa/src/gplx/xowa/langs/vnts/Xolg_vnt_grp_fmtr.java @@ -16,19 +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.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 { +public 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) { @@ -39,11 +27,13 @@ class Xolg_vnt_grp_fmtr implements Bry_fmtr_arg { 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" ); } @@ -62,7 +52,7 @@ class Xolg_vnt_itm_fmtr implements Bry_fmtr_arg { 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_text}
  • " ), "itm_idx", "itm_cls_selected", "itm_lang", "itm_text", "itm_href" ); } 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 index be01fa169..6432eec15 100644 --- 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 @@ -21,18 +21,20 @@ 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

    " - , " " + ( " " )); } } diff --git a/400_xowa/src/gplx/xowa/langs/vnts/Xolg_vnt_itm.java b/400_xowa/src/gplx/xowa/langs/vnts/Xolg_vnt_itm.java new file mode 100644 index 000000000..96f9a79b9 --- /dev/null +++ b/400_xowa/src/gplx/xowa/langs/vnts/Xolg_vnt_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.langs.vnts; import gplx.*; import gplx.xowa.*; import gplx.xowa.langs.*; +public 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; +} 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 44307679f..630f04190 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 @@ -81,7 +81,7 @@ public class Xog_redlink_mgr implements GfoInvkAble { if (variants_enabled) { Xodb_page vnt_page = vnt_mgr.Convert_ttl(wiki, lnki.Ttl()); if (vnt_page != null) { - Xoa_ttl vnt_ttl = Xoa_ttl.parse_(wiki, lnki.Ttl().Ns().Id(), vnt_page.Ttl_wo_ns()); + Xoa_ttl vnt_ttl = Xoa_ttl.parse_(wiki, lnki.Ttl().Ns().Id(), vnt_page.Ttl_page_db()); html_itm.Html_atr_set(lnki_id, "href", "/wiki/" + String_.new_utf8_(vnt_ttl.Full_url())); if (!String_.Eq(vnt_mgr.Html_style(), "")) html_itm.Html_atr_set(lnki_id, "style", vnt_mgr.Html_style()); 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 7894f72b3..cedc072ee 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 @@ -46,7 +46,9 @@ public class Wmf_dump_list_parser_tst { // ( "advisory.wikipedia.org", "beta.wikiversity.org", "donate.wikipedia.org", "login.wikipedia.org" // , "nostalgia.wikipedia.org", "outreach.wikipedia.org", "quality.wikipedia.org", "sources.wikipedia.org" // , "strategy.wikipedia.org", "ten.wikipedia.org", "test2.wikipedia.org", "test.wikipedia.org" -// , "usability.wikipedia.org", "vote.wikipedia.org"); +// , "usability.wikipedia.org", "vote.wikipedia.org" +// , "bd.wikimedia.org", "dk.wikimedia.org", "mx.wikimedia.org", "nyc.wikimedia.org", "nz.wikimedia.org", "pa-us.wikimedia.org", "rs.wikimedia.org", "ua.wikimedia.org" +// ); // Wmf_dump_itm[] itms = new Wmf_dump_list_parser().Parse(Io_mgr._.LoadFilBry("C:\\xowa\\bin\\any\\html\\xowa\\maint\\backup-index.html")); // Array_.Sort(itms); // Bry_bfr sql_bfr = Bry_bfr.new_(); 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 d2e3ddec6..a4c9edd96 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 @@ -134,7 +134,7 @@ public class Xows_page_allpages implements GfoInvkAble, Bry_fmtr_arg, Xows_page 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) { - byte[] ttl_bry = itm.Ttl_wo_ns(); + byte[] ttl_bry = itm.Ttl_page_db(); if (!ns.Id_main()) ttl_bry = Bry_.Add(ns.Name_db_w_colon(), ttl_bry); return Xoa_ttl.parse_(wiki, ttl_bry); } @@ -189,7 +189,7 @@ class Xos_pagelist_html_itm_fmtr implements Bry_fmtr_arg { byte[] href = href_parser.Build_to_bry(wiki, ttl); byte[] title = Xoh_html_wtr.Ttl_to_title(ttl.Full_txt()); byte[] cls = Xoh_lnki_wtr.Lnki_cls_visited(history_mgr, wiki_key, ttl.Page_txt()); // NOTE: must be ttl.Page_txt() in order to match Xou_history_mgr.Add - Bry_fmtr fmtr = ttl_itm.Type_redirect() ? itm_redirect : itm_normal; + Bry_fmtr fmtr = ttl_itm.Redirected() ? itm_redirect : itm_normal; fmtr.Bld_bfr_many(bfr, itm_pct, href, title, ttl.Full_txt(), cls); } } diff --git a/400_xowa/src/gplx/xowa/specials/allPages/Xows_page_allpages_tst.java b/400_xowa/src/gplx/xowa/specials/allPages/Xows_page_allpages_tst.java index 3f652cfca..ccdafe767 100644 --- a/400_xowa/src/gplx/xowa/specials/allPages/Xows_page_allpages_tst.java +++ b/400_xowa/src/gplx/xowa/specials/allPages/Xows_page_allpages_tst.java @@ -148,7 +148,7 @@ class Xows_page_allpages_fxt { if (v == null) return null; Xow_ns ns = wiki.Ns_mgr().Ids_get_or_null(v.Ns_id()); String ns_str = ns == null ? "" : String_.new_ascii_(ns.Name_db_w_colon()); - return ns_str + String_.new_ascii_(v.Ttl_wo_ns()); + return ns_str + String_.new_ascii_(v.Ttl_page_db()); } public static String[] Xto_str_ary(Xowe_wiki wiki, Xodb_page[] ary) { int ary_len = ary.length; 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 8388ad98a..2c9c779b3 100644 --- a/400_xowa/src/gplx/xowa/specials/movePage/Move_page.java +++ b/400_xowa/src/gplx/xowa/specials/movePage/Move_page.java @@ -43,7 +43,7 @@ public class Move_page implements Xows_page { wiki.Db_mgr().Load_mgr().Load_by_ttl(src_page, src_ttl.Ns(), src_ttl.Page_db()); page.Revision_data().Id_(src_page.Id()); page.Revision_data().Modified_on_(src_page.Modified_on()); - page.Data_raw_(src_page.Text()); + page.Data_raw_(src_page.Wtxt()); if (args.Create_redirect()) { // NOTE: not tested; DATE:2014-02-27 save_mgr.Data_update(page, Xop_redirect_mgr.Make_redirect_text(trg_ttl.Full_db())); Xodb_page trg_page = new Xodb_page(); diff --git a/400_xowa/src/gplx/xowa/specials/search/Xog_search_suggest_cmd.java b/400_xowa/src/gplx/xowa/specials/search/Xog_search_suggest_cmd.java index a02a6157a..5680ff6b5 100644 --- a/400_xowa/src/gplx/xowa/specials/search/Xog_search_suggest_cmd.java +++ b/400_xowa/src/gplx/xowa/specials/search/Xog_search_suggest_cmd.java @@ -71,8 +71,8 @@ class Xog_search_suggest_cmd implements GfoInvkAble, Cancelable { for (int i = 0; i < page_ary_len; i++) { Xodb_page page = page_ary[i]; if (page != null) { - if (!Bry_.HasAtBgn(page.Ttl_wo_ns(), search_ttl_bry)) continue; // look-ahead may return other titles that don't begin with search; ignore - if (page.Text_len() > all_pages_min) { + if (!Bry_.HasAtBgn(page.Ttl_page_db(), search_ttl_bry)) continue; // look-ahead may return other titles that don't begin with search; ignore + if (page.Wtxt_len() > all_pages_min) { rslts_2.Add(page); idx++; } diff --git a/400_xowa/src/gplx/xowa/specials/search/Xog_search_suggest_mgr.java b/400_xowa/src/gplx/xowa/specials/search/Xog_search_suggest_mgr.java index 76b356183..431b20469 100644 --- a/400_xowa/src/gplx/xowa/specials/search/Xog_search_suggest_mgr.java +++ b/400_xowa/src/gplx/xowa/specials/search/Xog_search_suggest_mgr.java @@ -86,7 +86,7 @@ public class Xog_search_suggest_mgr implements GfoInvkAble { for (int i = 0; i < len; i++) { Xodb_page p = (Xodb_page)found.FetchAt(i); Xow_ns ns = wiki.Ns_mgr().Ids_get_or_null(p.Ns_id()); - byte[] ttl = Xoa_ttl.Replace_unders(ns.Gen_ttl(p.Ttl_wo_ns())); + byte[] ttl = Xoa_ttl.Replace_unders(ns.Gen_ttl(p.Ttl_page_db())); wtr.Add_str_arg(i, ttl); } wtr.Add_brack_end(); 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 f710c51e2..9dfdf29c1 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 @@ -100,9 +100,9 @@ class Xos_search_mgr_fxt { public Xowe_wiki Wiki() {return wiki;} public Xobl_regy_itm regy_itm_(int id, String bgn, String end, int count) {return new Xobl_regy_itm(id, Bry_.new_utf8_(bgn), Bry_.new_utf8_(end), count);} public Xodb_page data_ttl_(int id, String ttl) {return data_ttl_(id, 0, 0, false, 0, ttl);} - public Xodb_page data_ttl_(int id, int fil, int row, boolean redirect, int len, String ttl) {return new Xodb_page().Set_all_(id, fil, row, redirect, len, Bry_.new_utf8_(ttl));} + public Xodb_page data_ttl_(int id, int fil, int row, boolean redirect, int len, String ttl) {return new Xodb_page().Init(id, Bry_.new_utf8_(ttl), redirect, len, fil, row);} public Xodb_page data_id_(int id, String ttl) {return data_id_(id, Xow_ns_.Id_main, ttl);} - public Xodb_page data_id_(int id, int ns, String ttl) {return new Xodb_page().Id_(id).Ns_id_(ns).Ttl_wo_ns_(Bry_.new_utf8_(ttl)).Text_db_id_(0).Text_len_(0);} + public Xodb_page data_id_(int id, int ns, String ttl) {return new Xodb_page().Id_(id).Ns_id_(ns).Ttl_page_db_(Bry_.new_utf8_(ttl)).Wtxt_db_id_(0).Wtxt_len_(0);} public Xobl_search_ttl data_sttl_(String word, int... ids) {return new Xobl_search_ttl(Bry_.new_utf8_(word), data_ttl_word_page_ary_(ids));} public Xobl_search_ttl_page[] data_ttl_word_page_ary_(int... ids) { int ids_len = ids.length; @@ -212,7 +212,7 @@ class Xos_search_mgr_fxt { String[] rv = new String[itms_len]; for (int i = 0; i < itms_len; i++) { Xodb_page itm = page.Itms_get_at(i); - rv[i] = String_.new_utf8_(itm.Ttl_wo_ns()); + rv[i] = String_.new_utf8_(itm.Ttl_page_db()); } return rv; } 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 a229442e6..b5ac709a9 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 @@ -55,7 +55,7 @@ class Xosrh_html_mgr implements GfoInvkAble { 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()); + byte[] itm_ttl = Xoa_ttl.Replace_unders(itm.Ttl_page_db()); int itm_ns_id = itm.Ns_id(); if (itm_ns_id != Xow_ns_.Id_main) { Xow_ns itm_ns = ns_mgr.Ids_get_or_null(itm_ns_id); @@ -64,7 +64,7 @@ class Xosrh_html_mgr implements GfoInvkAble { .Add(itm_ttl); itm_ttl = tmp_ttl_bfr.Xto_bry_and_clear(); } - html_itm.Bld_bfr_many(bfr, itm_ttl, itm.Text_len()); + html_itm.Bld_bfr_many(bfr, itm_ttl, itm.Wtxt_len()); } html_all_end.Bld_bfr_many(bfr, search_bry, xowa_idx_bwd, xowa_idx_fwd); tmp_ttl_bfr.Mkr_rls(); diff --git a/400_xowa/src/gplx/xowa/specials/search/Xosrh_page_mgr_tst.java b/400_xowa/src/gplx/xowa/specials/search/Xosrh_page_mgr_tst.java index 7c4aa7082..2e69ae3c8 100644 --- a/400_xowa/src/gplx/xowa/specials/search/Xosrh_page_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/specials/search/Xosrh_page_mgr_tst.java @@ -46,7 +46,7 @@ class Xosrh_page_mgr_fxt { for (int i = bgn; i < end; i++) { byte[] id_bry = new byte[5]; // NOTE: do not reuse; will break hive_mgr Base85_utl.XtoStrByAry(i, id_bry, 0, 5); - tmp_itm.Ns_id_(Xow_ns_.Id_main).Set_all_(i, 0, i - bgn, false, 10, Bry_.XtoStrBytesByInt(i, 0)); + tmp_itm.Ns_id_(Xow_ns_.Id_main).Init(i, Bry_.XtoStrBytesByInt(i, 0), false, 10, 0, i - bgn); Xodb_page_.Txt_id_save(tmp_bfr, tmp_itm); hive_mgr.Create(id_bry, tmp_bfr.Xto_bry_and_clear(), null); } @@ -61,7 +61,7 @@ class Xosrh_page_mgr_fxt { for (int i = 0; i < len; i++) { int itm_id = i + bgn; int itm_len = itm_id; - Xodb_page itm = Xodb_page.srch_(itm_id, itm_len); + Xodb_page itm = Xodb_page.new_srch(itm_id, itm_len); rv.Add(itm); } return new Xosrh_page_mgr_searcher_mok(rv); diff --git a/400_xowa/src/gplx/xowa/specials/search/Xosrh_parser_tst.java b/400_xowa/src/gplx/xowa/specials/search/Xosrh_parser_tst.java index 557c74056..e666cd633 100644 --- a/400_xowa/src/gplx/xowa/specials/search/Xosrh_parser_tst.java +++ b/400_xowa/src/gplx/xowa/specials/search/Xosrh_parser_tst.java @@ -103,7 +103,7 @@ class Xosearch_parser_fxt { int len = ids.length; ListAdp id_vals = ListAdp_.new_(); for (int i = 0; i < len; i++) - id_vals.Add(Xodb_page.srch_(ids[i], 0)); + id_vals.Add(Xodb_page.new_srch(ids[i], 0)); matches.Add(Bry_.new_ascii_(name), id_vals); } public void Test_match(String raw, int... expd) { diff --git a/400_xowa/src/gplx/xowa/specials/search/Xosrh_qry_itm.java b/400_xowa/src/gplx/xowa/specials/search/Xosrh_qry_itm.java index d3d07be24..557638d84 100644 --- a/400_xowa/src/gplx/xowa/specials/search/Xosrh_qry_itm.java +++ b/400_xowa/src/gplx/xowa/specials/search/Xosrh_qry_itm.java @@ -96,7 +96,7 @@ class Xosrh_qry_itm { ids = ListAdp_.new_(); for (int i = 0; i < ids_len; i++) { Xodb_page itm = (Xodb_page)tmp_ids.FetchAt(i); - byte[] itm_ttl = itm.Ttl_wo_ns(); + byte[] itm_ttl = itm.Ttl_page_db(); itm_ttl = wiki.Lang().Case_mgr().Case_build_lower(itm_ttl, 0, itm_ttl.length); // lowercase ttl (since all search words are lower-cased) itm_ttl = Bry_.Replace(itm_ttl, Byte_ascii.Underline, Byte_ascii.Space); // replace _ with " " (assume user will use spaces in search term) if (Bry_finder.Find_fwd(itm_ttl, word) != Bry_.NotFound) diff --git a/400_xowa/src/gplx/xowa/specials/search/Xosrh_rslt_itm_sorter.java b/400_xowa/src/gplx/xowa/specials/search/Xosrh_rslt_itm_sorter.java index 1b54af007..e1452e13c 100644 --- a/400_xowa/src/gplx/xowa/specials/search/Xosrh_rslt_itm_sorter.java +++ b/400_xowa/src/gplx/xowa/specials/search/Xosrh_rslt_itm_sorter.java @@ -26,8 +26,8 @@ public class Xosrh_rslt_itm_sorter implements gplx.lists.ComparerAble { // else if (rhs == null) return CompareAble_.More; else { switch (tid) { - case Tid_len_dsc: return Int_.Compare(lhs.Text_len(), rhs.Text_len()) * -1; - case Tid_ttl_asc: return Bry_.Compare(lhs.Ttl_wo_ns(), rhs.Ttl_wo_ns()); + case Tid_len_dsc: return Int_.Compare(lhs.Wtxt_len(), rhs.Wtxt_len()) * -1; + case Tid_ttl_asc: return Bry_.Compare(lhs.Ttl_page_db(), rhs.Ttl_page_db()); case Tid_id: return Int_.Compare(lhs.Id(), rhs.Id()); default: throw Err_mgr._.unhandled_(tid); } diff --git a/400_xowa/src/gplx/xowa/users/data/Xoud_bmk_tbl.java b/400_xowa/src/gplx/xowa/users/data/Xoud_bmk_tbl.java index 0eb4e14ac..ac81c4ed3 100644 --- a/400_xowa/src/gplx/xowa/users/data/Xoud_bmk_tbl.java +++ b/400_xowa/src/gplx/xowa/users/data/Xoud_bmk_tbl.java @@ -33,7 +33,7 @@ public class Xoud_bmk_tbl { 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_all(ListAdp rv) { - if (stmt_select == null) stmt_select = Db_stmt_.new_select_as_rdr(conn, Db_qry__select_in_tbl.new_(Tbl_name, null, Flds__all)); + if (stmt_select == null) stmt_select = Db_stmt_.new_select_as_rdr(conn, Db_qry__select_in_tbl.new_(Tbl_name, null, Flds__all, Db_qry__select_in_tbl.Order_by_null)); try { Db_rdr rdr = stmt_select.Clear().Exec_select_as_rdr(); while (rdr.Move_next()) { 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 8df68140a..4534c09cd 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 @@ -55,7 +55,7 @@ public class Xoud_regy_tbl { 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_grp(ListAdp rv, String grp) { - if (stmt_select_grp == null) stmt_select_grp = Db_stmt_.new_select_as_rdr(conn, Db_qry__select_in_tbl.new_(Tbl_name, String_.Ary(Fld_regy_grp), Flds__all)); + if (stmt_select_grp == null) stmt_select_grp = Db_stmt_.new_select_as_rdr(conn, Db_qry__select_in_tbl.new_(Tbl_name, String_.Ary(Fld_regy_grp), Flds__all, Db_qry__select_in_tbl.Order_by_null)); try { Db_rdr rdr = stmt_select_grp.Clear().Val_str(grp).Exec_select_as_rdr(); while (rdr.Move_next()) { @@ -67,7 +67,7 @@ public class Xoud_regy_tbl { catch (Exception exc) {stmt_select_grp = null; throw Err_.err_(exc, "stmt failed");} // must reset stmt, else next call will fail } @gplx.Virtual public String Select_val(String grp, String key) { - if (stmt_select_key == null) stmt_select_key = Db_stmt_.new_select_as_rdr(conn, Db_qry__select_in_tbl.new_(Tbl_name, String_.Ary(Fld_regy_grp, Fld_regy_key), Flds__all)); + if (stmt_select_key == null) stmt_select_key = Db_stmt_.new_select_as_rdr(conn, Db_qry__select_in_tbl.new_(Tbl_name, String_.Ary(Fld_regy_grp, Fld_regy_key), Flds__all, Db_qry__select_in_tbl.Order_by_null)); try { Db_rdr rdr = stmt_select_key.Clear().Val_str(grp).Val_str(key).Exec_select_as_rdr(); String rv = null; diff --git a/400_xowa/src/gplx/xowa/wikis/Xow_domain.java b/400_xowa/src/gplx/xowa/wikis/Xow_domain.java index 48ad8a726..af1863f99 100644 --- a/400_xowa/src/gplx/xowa/wikis/Xow_domain.java +++ b/400_xowa/src/gplx/xowa/wikis/Xow_domain.java @@ -34,6 +34,7 @@ public class Xow_domain { Xol_lang_itm lang_itm = Xol_lang_itm_.Get_by_key_or_intl(lang_key); return new Xow_domain(domain_bry, domain_tid, lang_itm, lang_itm); } + public static Xow_domain new_(byte[] domain_bry, int domain_tid, Xol_lang_itm lang) {return new Xow_domain(domain_bry, domain_tid, lang, lang);} public static Xow_domain new_orig(byte[] domain_bry, int domain_tid, byte[] lang_key, byte[] lang_orig_key) { Xol_lang_itm lang_itm = Xol_lang_itm_.Get_by_key_or_intl(lang_key); Xol_lang_itm lang_orig_itm = Bry_.Eq(lang_key, lang_orig_key) ? lang_itm : Xol_lang_itm_.Get_by_key_or_intl(lang_orig_key); diff --git a/400_xowa/src/gplx/xowa/wikis/Xow_domain_.java b/400_xowa/src/gplx/xowa/wikis/Xow_domain_.java index 5d65930dd..76fcbac16 100644 --- a/400_xowa/src/gplx/xowa/wikis/Xow_domain_.java +++ b/400_xowa/src/gplx/xowa/wikis/Xow_domain_.java @@ -27,13 +27,19 @@ public class Xow_domain_ { Domain_bry_commons = Bry_.new_ascii_(Domain_str_commons) , Domain_bry_enwiki = Bry_.new_ascii_(Domain_str_enwiki) , Domain_bry_wikidata = Bry_.new_ascii_("www.wikidata.org") + , Domain_bry_home = Bry_.new_ascii_("home") + , Domain_bry_mediawiki = Bry_.new_ascii_("www.mediawiki.org") + , Domain_bry_meta = Bry_.new_ascii_("meta.wikimedia.org") + , Domain_bry_incubator = Bry_.new_ascii_("incubator.wikimedia.org") + , Domain_bry_wikimediafoundation = Bry_.new_ascii_("wikimediafoundation.org") + , Domain_bry_species = Bry_.new_ascii_("species.wikimedia.org") ; private static final byte Tid_int_null = Byte_.Max_value_127; public static final int Tid_int_other = 0, Tid_int_home = 1 , Tid_int_wikipedia = 2, Tid_int_wiktionary = 3, Tid_int_wikisource = 4, Tid_int_wikibooks = 5, Tid_int_wikiversity = 6, Tid_int_wikiquote = 7, Tid_int_wikinews = 8, Tid_int_wikivoyage = 9 , Tid_int_commons = 10, Tid_int_species = 11, Tid_int_meta = 12, Tid_int_incubator = 13 - , Tid_int_wikidata = 14, Tid_int_mediawiki = 15, Tid_int_wikimediafoundation = 16 + , Tid_int_wikidata = 14, Tid_int_mediawiki = 15, Tid_int_wikimediafoundation = 16, Tid_int_wikimedia = 17 ; public static final String Tid_str_home = "home" @@ -50,17 +56,16 @@ 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") + , Tid_bry_species = Bry_.new_ascii_("species"), Tid_bry_mediawiki = Bry_.new_ascii_("mediawiki"), Tid_bry_wikimedia = Bry_.new_ascii_("wikimedia") ; private static byte[][] Tid_bry__ary = new byte[][] { Tid_bry_other, Tid_bry_home , Tid_bry_wikipedia, Tid_bry_wiktionary, Tid_bry_wikisource, Tid_bry_wikibooks, Tid_bry_wikiversity, Tid_bry_wikiquote, Tid_bry_wikinews, Tid_bry_wikivoyage , Tid_bry_commons, Tid_bry_species, Tid_bry_meta, Tid_bry_incubator - , Tid_bry_wikidata, Tid_bry_mediawiki, Tid_bry_wikimediafoundation + , Tid_bry_wikidata, Tid_bry_mediawiki, Tid_bry_wikimediafoundation, Tid_bry_wikimedia }; - public static final byte[] Seg_bry_org = Bry_.new_ascii_("org"), Seg_bry_wikimedia = Bry_.new_ascii_("wikimedia"), Seg_bry_www = Bry_.new_utf8_("www"); + public static final byte[] Seg_bry_org = Bry_.new_ascii_("org"), Seg_bry_www = Bry_.new_utf8_("www"); private static final Hash_adp_bry hash_tid_by_bry = Hash_adp_bry.ci_ascii_() - .Add_bry_int(Seg_bry_wikimedia , Tid_int_null) // NOTE: using Tid_int_null for "Tid_int_wikimedia"; see elsewhere in this file .Add_bry_int(Tid_bry_home , Tid_int_home) .Add_bry_int(Tid_bry_commons , Tid_int_commons) .Add_bry_int(Tid_bry_species , Tid_int_species) @@ -77,6 +82,7 @@ public class Xow_domain_ { .Add_bry_int(Tid_bry_wikiquote , Tid_int_wikiquote) .Add_bry_int(Tid_bry_wikinews , Tid_int_wikinews) .Add_bry_int(Tid_bry_wikivoyage , Tid_int_wikivoyage) + .Add_bry_int(Tid_bry_wikimedia , Tid_int_wikimedia) .Add_bry_int(Tid_bry_other , Tid_int_other) ; public static byte[] Tid__get_bry(int tid) {return Tid_bry__ary[tid];} @@ -95,7 +101,7 @@ public class Xow_domain_ { int dot_0 = Bry_finder.Find_fwd(raw, Byte_ascii.Dot, 0, raw_len); if (dot_0 == Bry_.NotFound) { // 0 dots; check for "home" return Bry_.Eq(raw, Tid_bry_home) - ? Xow_domain.new_(raw, Tid_int_home, Xol_lang_itm_.Key__unknown) + ? Xow_domain_tid_.To_domain(Xow_domain_tid_.Tid_xowa) : new_other(raw); } int dot_1 = Bry_finder.Find_fwd(raw, Byte_ascii.Dot, dot_0 + 1, raw_len); @@ -116,8 +122,12 @@ public class Xow_domain_ { return Xow_domain.new_orig(raw, seg_1_tid, lang_actl, lang_orig); // NOTE: seg_tids must match wiki_tids case Tid_int_wikidata: case Tid_int_mediawiki: // ~www.~{type}.org return Xow_domain.new_(raw, seg_1_tid, Xol_lang_itm_.Key__unknown); - case Tid_int_null: // ~{type}.wikimedia.org; // NOTE: using Tid_int_null for "Tid_int_wikimedia"; see elsewhere in this file - Object seg_0_obj = hash_tid_by_bry.Get_by_mid(raw, 0, dot_0); if (seg_0_obj == null) return new_other(raw); + case Tid_int_wikimedia: // ~{type}.wikimedia.org; + Object seg_0_obj = hash_tid_by_bry.Get_by_mid(raw, 0, dot_0); + if (seg_0_obj == null) { + Xol_lang_itm wikimedia_lang = Xol_lang_itm_.Get_by_key_or_null(raw, 0, dot_0); + return wikimedia_lang == null ? new_other(raw) : Xow_domain.new_(raw, Tid_int_wikimedia, wikimedia_lang.Key()); + } int seg_0_tid = ((Int_obj_val)seg_0_obj).Val(); switch (seg_0_tid) { case Tid_int_commons: case Tid_int_species: case Tid_int_meta: case Tid_int_incubator: diff --git a/400_xowa/src/gplx/xowa/wikis/Xow_domain_tid_.java b/400_xowa/src/gplx/xowa/wikis/Xow_domain_tid_.java new file mode 100644 index 000000000..01e039de9 --- /dev/null +++ b/400_xowa/src/gplx/xowa/wikis/Xow_domain_tid_.java @@ -0,0 +1,105 @@ +/* +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; import gplx.*; import gplx.xowa.*; +import gplx.xowa.langs.*; +public class Xow_domain_tid_ { + public static final int + Tid_null = 0 + , Tid_xowa = 1 + , Tid_commons = 2 + , Tid_wikidata = 3 + , Tid_mediawiki = 20 + , Tid_meta = 21 + , Tid_incubator = 22 + , Tid_wikimediafoundation = 23 + , Tid_species = 24 + ; + private static final int + Tid_sub_wikipedia = 0 + , Tid_sub_wiktionary = 1 + , Tid_sub_wikisource = 2 + , Tid_sub_wikivoyage = 3 + , Tid_sub_wikiquote = 4 + , Tid_sub_wikibooks = 5 + , Tid_sub_wikiversity = 6 + , Tid_sub_wikinews = 7 + , Tid_sub_wikimedia = 8 + ; + private static final int Const_system_reserved = 100, Const_lang_reserved = 20; + public static int To_int(Xow_domain domain) { + int domain_tid = 0; + switch (domain.Domain_tid()) { + case Xow_domain_.Tid_int_home: return Tid_xowa; + case Xow_domain_.Tid_int_commons: return Tid_commons; + case Xow_domain_.Tid_int_wikidata: return Tid_wikidata; + case Xow_domain_.Tid_int_mediawiki: return Tid_mediawiki; + case Xow_domain_.Tid_int_meta: return Tid_meta; + case Xow_domain_.Tid_int_incubator: return Tid_incubator; + case Xow_domain_.Tid_int_wikimediafoundation: return Tid_wikimediafoundation; + case Xow_domain_.Tid_int_species: return Tid_species; + case Xow_domain_.Tid_int_wikipedia: domain_tid = Tid_sub_wikipedia; break; + case Xow_domain_.Tid_int_wiktionary: domain_tid = Tid_sub_wiktionary; break; + case Xow_domain_.Tid_int_wikisource: domain_tid = Tid_sub_wikisource; break; + case Xow_domain_.Tid_int_wikivoyage: domain_tid = Tid_sub_wikivoyage; break; + case Xow_domain_.Tid_int_wikiquote: domain_tid = Tid_sub_wikiquote; break; + case Xow_domain_.Tid_int_wikibooks: domain_tid = Tid_sub_wikibooks; break; + case Xow_domain_.Tid_int_wikiversity: domain_tid = Tid_sub_wikiversity; break; + case Xow_domain_.Tid_int_wikinews: domain_tid = Tid_sub_wikinews; break; + case Xow_domain_.Tid_int_wikimedia: domain_tid = Tid_sub_wikimedia; break; + default: throw Err_.unhandled(domain.Domain_tid()); + } + return Const_system_reserved // reserve first 100 slots + + domain_tid // domain_tid assigned above + + (domain.Lang_uid() * Const_lang_reserved) // reserve 20 wikis per lang + ; + } + public static Xow_domain To_domain(int tid) { + switch (tid) { + case Tid_xowa: return Xow_domain.new_(Xow_domain_.Domain_bry_home, Xow_domain_.Tid_int_home, Xol_lang_itm_.Key__unknown); + case Tid_commons: return Xow_domain.new_(Xow_domain_.Domain_bry_commons, Xow_domain_.Tid_int_commons, Xol_lang_itm_.Key__unknown); + case Tid_wikidata: return Xow_domain.new_(Xow_domain_.Domain_bry_wikidata, Xow_domain_.Tid_int_commons, Xol_lang_itm_.Key__unknown); + case Tid_mediawiki: return Xow_domain.new_(Xow_domain_.Domain_bry_mediawiki, Xow_domain_.Tid_int_mediawiki, Xol_lang_itm_.Key__unknown); + case Tid_meta: return Xow_domain.new_(Xow_domain_.Domain_bry_meta, Xow_domain_.Tid_int_meta, Xol_lang_itm_.Key__unknown); + case Tid_incubator: return Xow_domain.new_(Xow_domain_.Domain_bry_incubator, Xow_domain_.Tid_int_incubator, Xol_lang_itm_.Key__unknown); + case Tid_wikimediafoundation: return Xow_domain.new_(Xow_domain_.Domain_bry_wikimediafoundation, Xow_domain_.Tid_int_wikimediafoundation, Xol_lang_itm_.Key__unknown); + case Tid_species: return Xow_domain.new_(Xow_domain_.Domain_bry_species, Xow_domain_.Tid_int_species, Xol_lang_itm_.Key__unknown); + } + int tmp = tid - Const_system_reserved; + int lang_id = tmp / 20; + int type_id = tmp % 20; + int tid_int = 0; byte[] tid_bry = null; + switch (type_id) { + case Tid_sub_wikipedia: tid_int = Xow_domain_.Tid_int_wikipedia; tid_bry = Xow_domain_.Tid_bry_wikipedia; break; + case Tid_sub_wiktionary: tid_int = Xow_domain_.Tid_int_wiktionary; tid_bry = Xow_domain_.Tid_bry_wiktionary; break; + case Tid_sub_wikisource: tid_int = Xow_domain_.Tid_int_wikisource; tid_bry = Xow_domain_.Tid_bry_wikisource; break; + case Tid_sub_wikivoyage: tid_int = Xow_domain_.Tid_int_wikivoyage; tid_bry = Xow_domain_.Tid_bry_wikivoyage; break; + case Tid_sub_wikiquote: tid_int = Xow_domain_.Tid_int_wikiquote; tid_bry = Xow_domain_.Tid_bry_wikiquote; break; + case Tid_sub_wikibooks: tid_int = Xow_domain_.Tid_int_wikibooks; tid_bry = Xow_domain_.Tid_bry_wikibooks; break; + case Tid_sub_wikiversity: tid_int = Xow_domain_.Tid_int_wikiversity; tid_bry = Xow_domain_.Tid_bry_wikiversity; break; + case Tid_sub_wikinews: tid_int = Xow_domain_.Tid_int_wikinews; tid_bry = Xow_domain_.Tid_bry_wikinews; break; + case Tid_sub_wikimedia: tid_int = Xow_domain_.Tid_int_wikimedia; tid_bry = Xow_domain_.Tid_bry_wikimedia; break; + default: throw Err_.unhandled(type_id); + } + Xol_lang_itm lang = Xol_lang_itm_.Get_by_id(lang_id); + Bry_bfr bfr = Xoa_app_.Utl__bfr_mkr().Get_b128(); + bfr.Add(lang.Key()).Add_byte_dot().Add(tid_bry).Add_byte_dot().Add(Xow_domain_.Seg_bry_org); + byte[] domain_bry = bfr.Xto_bry_and_clear(); + bfr.Mkr_rls(); + return Xow_domain.new_(domain_bry, tid_int, lang); + } +} diff --git a/400_xowa/src/gplx/xowa/wikis/Xow_domain_tid__tst.java b/400_xowa/src/gplx/xowa/wikis/Xow_domain_tid__tst.java new file mode 100644 index 000000000..dcdbbd797 --- /dev/null +++ b/400_xowa/src/gplx/xowa/wikis/Xow_domain_tid__tst.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.wikis; import gplx.*; import gplx.xowa.*; +import org.junit.*; +public class Xow_domain_tid__tst { + @Before public void init() {fxt.Clear();} private final Xow_domain_tid__fxt fxt = new Xow_domain_tid__fxt(); + @Test public void Basic() { + fxt.Test(Xow_domain_tid_.Tid_commons , "commons.wikimedia.org" , "", Xow_domain_.Tid_int_commons); + fxt.Test(100 , "en.wikipedia.org" , "en", Xow_domain_.Tid_int_wikipedia); + } +} +class Xow_domain_tid__fxt { + public void Clear() {} + public void Test(int tid, String domain_str, String expd_lang, int expd_tid) { + byte[] domain_bry = Bry_.new_ascii_(domain_str); + Xow_domain actl_domain = Xow_domain_tid_.To_domain(tid); + Tfds.Eq_bry(domain_bry , actl_domain.Domain_bry()); + Tfds.Eq_bry(Bry_.new_ascii_(expd_lang) , actl_domain.Lang_key()); + Tfds.Eq(expd_tid , actl_domain.Domain_tid()); + Tfds.Eq(tid, Xow_domain_tid_.To_int(actl_domain)); + } +} diff --git a/400_xowa/src/gplx/xowa/wikis/Xow_domain_tst.java b/400_xowa/src/gplx/xowa/wikis/Xow_domain_tst.java index 2eea4c288..9ecb57527 100644 --- a/400_xowa/src/gplx/xowa/wikis/Xow_domain_tst.java +++ b/400_xowa/src/gplx/xowa/wikis/Xow_domain_tst.java @@ -25,6 +25,7 @@ public class Xow_domain_tst { @Test public void Parse_zh_classical_wikipedia() {fxt.Test_parse("zh-classical.wikipedia.org" , "lzh" , Xow_domain_.Tid_int_wikipedia);} @Test public void Parse_commons() {fxt.Test_parse("commons.wikimedia.org" , "" , Xow_domain_.Tid_int_commons);} @Test public void Parse_species() {fxt.Test_parse("species.wikimedia.org" , "" , Xow_domain_.Tid_int_species);} + @Test public void Parse_ru_wikimedia_org() {fxt.Test_parse("ru.wikimedia.org" , "ru" , Xow_domain_.Tid_int_wikimedia);} @Test public void Parse_home() {fxt.Test_parse("home" , "" , Xow_domain_.Tid_int_home);} @Test public void Parse_other() {fxt.Test_parse("other.wiki" , "" , Xow_domain_.Tid_int_other);} } diff --git a/400_xowa/src/gplx/xowa/wikis/Xow_wiki_alias.java b/400_xowa/src/gplx/xowa/wikis/Xow_wiki_alias.java index a1157d100..4a63b33a2 100644 --- a/400_xowa/src/gplx/xowa/wikis/Xow_wiki_alias.java +++ b/400_xowa/src/gplx/xowa/wikis/Xow_wiki_alias.java @@ -59,6 +59,7 @@ public class Xow_wiki_alias { case Xow_domain_.Tid_int_wikiquote: case Xow_domain_.Tid_int_wikinews: case Xow_domain_.Tid_int_wikivoyage: + case Xow_domain_.Tid_int_wikimedia: return Bry_.Add(wiki_type.Lang_orig_key(), alias); default: throw Err_mgr._.unhandled_(tid); @@ -70,7 +71,6 @@ public class Xow_wiki_alias { if (end - bgn == 0) return null; // empty bry; if (alias_bry_trie == null) Init_aliases(); Object o = alias_bry_trie.Match_bgn(src, end - 1, bgn - 1); if (o == null) return Parse__domain_name_null; -// throw Err_mgr._.parse_(typeof(Xow_wiki_alias), src); int domain_tid = ((Int_obj_ref)o).Val(); Bry_bfr bfr = Bry_bfr.reset_(255); switch (domain_tid) { @@ -80,7 +80,7 @@ public class Xow_wiki_alias { case Domain_commons: case Domain_species: case Domain_meta: - case Domain_incubator: return bfr.Add(Xow_domain_.Tid__get_bry(domain_tid)).Add_byte(Byte_ascii.Dot).Add(Xow_domain_.Seg_bry_wikimedia).Add_byte(Byte_ascii.Dot).Add(Xow_domain_.Seg_bry_org).Xto_bry_and_clear(); + case Domain_incubator: return bfr.Add(Xow_domain_.Tid__get_bry(domain_tid)).Add_byte(Byte_ascii.Dot).Add(Xow_domain_.Tid_bry_wikimedia).Add_byte(Byte_ascii.Dot).Add(Xow_domain_.Seg_bry_org).Xto_bry_and_clear(); case Domain_wikipedia: case Domain_wiktionary: case Domain_wikisource: @@ -89,6 +89,7 @@ public class Xow_wiki_alias { case Domain_wikiquote: case Domain_wikinews: case Domain_wikivoyage: + case Domain_wikimedia: bfr.Add_mid(src, 0, alias_bry_trie.Match_pos() + 1); bfr.Add_byte(Byte_ascii.Dot); return bfr.Add(Xow_domain_.Tid__get_bry(domain_tid)).Add_byte(Byte_ascii.Dot).Add(Xow_domain_.Seg_bry_org).Xto_bry_and_clear(); @@ -176,6 +177,7 @@ public class Xow_wiki_alias { , Domain_wikiquote = Xow_domain_.Tid_int_wikiquote , Domain_wikinews = Xow_domain_.Tid_int_wikinews , Domain_wikivoyage = Xow_domain_.Tid_int_wikivoyage + , Domain_wikimedia = Xow_domain_.Tid_int_wikimedia , Domain_commons = Xow_domain_.Tid_int_commons , Domain_species = Xow_domain_.Tid_int_species , Domain_meta = Xow_domain_.Tid_int_meta @@ -194,6 +196,7 @@ public class Xow_wiki_alias { Init_alias("wikiquote" , Domain_wikiquote); Init_alias("wikinews" , Domain_wikinews); Init_alias("wikivoyage" , Domain_wikivoyage); + Init_alias("wikimedia" , Domain_wikimedia); Init_alias("commonswiki" , Domain_commons); Init_alias("specieswiki" , Domain_species); Init_alias("metawiki" , Domain_meta); diff --git a/400_xowa/src/gplx/xowa/wikis/Xow_wiki_alias_tst.java b/400_xowa/src/gplx/xowa/wikis/Xow_wiki_alias_tst.java index 791677fcf..c50c7d921 100644 --- a/400_xowa/src/gplx/xowa/wikis/Xow_wiki_alias_tst.java +++ b/400_xowa/src/gplx/xowa/wikis/Xow_wiki_alias_tst.java @@ -36,6 +36,7 @@ public class Xow_wiki_alias_tst { fxt.Parse__domain_name("enwikiquote" , "en.wikiquote.org"); fxt.Parse__domain_name("enwikinews" , "en.wikinews.org"); fxt.Parse__domain_name("enwikivoyage" , "en.wikivoyage.org"); + fxt.Parse__domain_name("plwikimedia" , "pl.wikimedia.org"); } @Test public void Parse__tid() { fxt.Parse__tid("pages-articles.xml" , Xow_wiki_alias.Tid_pages_articles); 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 index c2ce8aff4..6fd0313f4 100644 --- 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 @@ -22,6 +22,7 @@ public interface Xow_core_data_mgr { Xow_core_data_map Map(); boolean Cfg__schema_is_1(); int Cfg__db_id(); + byte Cfg__hdump_zip_tid(); int Dbs__len(); Xowd_db_file Dbs__get_at(int i); Xowd_db_file Dbs__get_by_tid_nth_or_new(byte tid); diff --git a/400_xowa/src/gplx/xowa/wikis/data/Xowd_pg_regy_tbl.java b/400_xowa/src/gplx/xowa/wikis/data/Xowd_pg_regy_tbl.java index 6f3521885..2083e46c1 100644 --- a/400_xowa/src/gplx/xowa/wikis/data/Xowd_pg_regy_tbl.java +++ b/400_xowa/src/gplx/xowa/wikis/data/Xowd_pg_regy_tbl.java @@ -126,15 +126,17 @@ public class Xowd_pg_regy_tbl { 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)); - 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_bool_by_byte(fld_page_is_redirect)); - page.Text_len_ (rdr.Read_int(fld_page_len)); - page.Text_db_id_ (rdr.Read_int(fld_page_text_db_id)); - page.Html_db_id_ (rdr.Read_int(fld_page_html_db_id)); - page.Redirect_id_ (rdr.Read_int(fld_page_redirect_id)); + page.Init_by_sql + ( rdr.Read_int(fld_page_id) + , rdr.Read_int(fld_page_ns) + , rdr.Read_bry_by_str(fld_page_title) + , DateAdp_.parse_fmt(rdr.Read_str(fld_page_touched), Page_touched_fmt) + , rdr.Read_bool_by_byte(fld_page_is_redirect) + , rdr.Read_int(fld_page_len) + , rdr.Read_int(fld_page_text_db_id) + , rdr.Read_int(fld_page_html_db_id) + , rdr.Read_int(fld_page_redirect_id) + ); } private static final String Page_touched_fmt = "yyyyMMddHHmmss"; } 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 index bba0b3220..250a0750e 100644 --- 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 @@ -25,6 +25,7 @@ public class Xowe_core_data_mgr implements Xow_core_data_mgr { 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 byte Cfg__hdump_zip_tid() {return Tbl__cfg().Select_as_byte_or("xowa.schema.dbs.html", "zip_tid", gplx.ios.Io_stream_.Tid_bzip2);} 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(); 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 index c9097418b..6c4c02374 100644 --- 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 @@ -27,6 +27,7 @@ public class Xowv_core_data_mgr implements Xow_core_data_mgr { 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 byte Cfg__hdump_zip_tid() {return Tbl__cfg().Select_as_byte_or("xowa.schema.dbs.html", "zip_tid", gplx.ios.Io_stream_.Tid_bzip2);} 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(); 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 122bb1d3d..be475435d 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 @@ -24,11 +24,11 @@ public class Xow_lang_mgr { } public Bry_fmtr Html_div() {return html_div;} private final Bry_fmtr html_div = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last ( "
    " - , "
    ~{langs_hdr}~{wikidata_link}~{toggle_btn}
    " + , "
    ~{toggle_btn}~{wikidata_link}
    " , " ~{grps}" , "
    " , "" - ), "langs_hdr", "wikidata_link", "toggle_btn", "toggle_hdr", "grps"); + ), "wikidata_link", "toggle_btn", "toggle_hdr", "grps"); public Bry_fmtr Html_wikidata_link() {return html_wikidata_link;} private final Bry_fmtr html_wikidata_link = Bry_fmtr.new_(" (wikidata)", "qid"); public void Clear() {hash.Clear();} public void Itms_reg(Xow_xwiki_itm xwiki, Xoac_lang_itm lang) { @@ -109,8 +109,8 @@ class Xow_lang_html implements Bry_fmtr_arg { 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); - lang_mgr.Html_div().Bld_bfr_many(bfr, msg_lang, wikidata_link, toggle_itm.Html_toggle_btn(), toggle_itm.Html_toggle_hdr(), this); + toggle_itm.Init(wiki, msg_lang); + lang_mgr.Html_div().Bld_bfr_many(bfr, wikidata_link, toggle_itm.Html_toggle_btn(), toggle_itm.Html_toggle_hdr(), this); stage = 0; break; } @@ -171,7 +171,7 @@ class Xow_lang_html implements Bry_fmtr_arg { if (i != 0) bfr.Add_byte_comma(); byte[] badge = badges[i]; byte[] badge_cls = (byte[])badges_hash.Get_by_bry(badge); - if (badge_cls == null) Gfo_usr_dlg_._.Warn_many("", "", "unknown badge: badge~{0}", String_.new_utf8_(badge)); + if (badge_cls == null) Gfo_usr_dlg_._.Warn_many("", "", "unknown badge: badge=~{0}", String_.new_utf8_(badge)); else bfr.Add(badge_cls); } } @@ -187,5 +187,6 @@ class Xow_lang_html implements Bry_fmtr_arg { .Add_str_obj("Q17437796", Bry_.new_ascii_("badge-featuredarticle")) .Add_str_obj("Q17559452", Bry_.new_ascii_("badge-recommendedarticle")) .Add_str_obj("Q17506997", Bry_.new_ascii_("badge-featuredlist")) + .Add_str_obj("Q17580674", Bry_.new_ascii_("badge-featuredportal")) ; } \ No newline at end of file diff --git a/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_lang_mgr_tst.java b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_lang_mgr_tst.java index 1179e84b6..02c48f19c 100644 --- a/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_lang_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_lang_mgr_tst.java @@ -23,7 +23,7 @@ public class Xow_lang_mgr_tst { @Test public void Basic() { fxt.tst("[[simple:Earth]] [[fr:Terre]] [[es:Tierra]] [[de:Erde]] [[it:Terre]]", String_.Concat_lines_nl_skip_last ( "
    " - , "
    In other languages
    " + , "
    In other languages
    " , "