1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2026-03-02 03:49:30 +00:00

'v3.7.4.1'

This commit is contained in:
gnosygnu
2016-07-25 21:59:51 -04:00
parent 7a851a41a5
commit 8e91ac0bc4
175 changed files with 2079 additions and 933 deletions

View File

@@ -18,11 +18,25 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package gplx.xowa.addons.wikis.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*;
import gplx.xowa.specials.*;
public class Xow_import_addon implements Xoax_addon_itm, Xoax_addon_itm__special {
private final Ordered_hash cbks = Ordered_hash_.New();
public Xow_special_page[] Special_pages() {
return new Xow_special_page[]
{ Xow_import_special.Prototype
};
}
public void Dir_selected_cbks__add(Xow_import_dir_cbk cbk) {
if (!cbks.Has(cbk.Key()))
cbks.Add(cbk.Key(), cbk);
}
public Xow_import_dir_cbk Dir_selected_cbks__get_by(String key) {return (Xow_import_dir_cbk)cbks.Get_by(key);}
public String Addon__key() {return "xowa.apps.file_browsers";}
public String Addon__key() {return ADDON__KEY;} private static final String ADDON__KEY = "xowa.apps.file_browsers";
public static Xow_import_addon Addon__get(Xow_wiki wiki) {
Xow_import_addon rv = (Xow_import_addon)wiki.Addon_mgr().Itms__get_or_null(ADDON__KEY);
if (rv == null) {
rv = new Xow_import_addon();
wiki.Addon_mgr().Itms__add(rv);
}
return rv;
}
}

View File

@@ -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 <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.addons.wikis.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*;
public interface Xow_import_dir_cbk {
String Key();
void Cbk__dir_selected(Xow_wiki wiki, Xoa_page page, String path);
}

View File

@@ -21,12 +21,14 @@ import gplx.langs.mustaches.*;
class Xow_import_doc implements Mustache_doc_itm {
private final boolean is_dir, is_core_xowa;
private final byte[] owner_dir_enc, path, name, date, size, color;
private final byte[] dir_cmd;
private final Xow_import_doc[] subs;
public Xow_import_doc(boolean is_dir, boolean is_core_xowa, int color, byte[] owner_dir, byte[] path, byte[] name, byte[] date, byte[] size, Xow_import_doc[] subs) {
public Xow_import_doc(boolean is_dir, boolean is_core_xowa, int color, byte[] owner_dir, byte[] path, byte[] name, byte[] date, byte[] size, byte[] dir_cmd, Xow_import_doc[] subs) {
this.is_dir = is_dir; this.is_core_xowa = is_core_xowa;
this.color = color % 2 == 0 ? Byte_ascii.Num_0_bry : Byte_ascii.Num_1_bry;
this.owner_dir_enc = gplx.langs.htmls.encoders.Gfo_url_encoder_.Href.Encode(owner_dir);
this.path = path; this.name = name; this.date = date; this.size = size;
this.dir_cmd = dir_cmd;
this.subs = subs;
}
public boolean Mustache__write(String key, Mustache_bfr bfr) {
@@ -37,24 +39,27 @@ class Xow_import_doc implements Mustache_doc_itm {
else if (String_.Eq(key, "date")) bfr.Add_bry(date);
else if (String_.Eq(key, "size")) bfr.Add_bry(size);
else if (String_.Eq(key, "color")) bfr.Add_bry(color);
else if (String_.Eq(key, "dir_cmd")) bfr.Add_bry(dir_cmd);
else if (String_.Eq(key, "dir_cmd_arg")) {bfr.Add_str_u8("&dir_cmd="); bfr.Add_bry(dir_cmd);}
else return false;
return true;
}
public Mustache_doc_itm[] Mustache__subs(String key) {
if (String_.Eq(key, "is_dir")) return Mustache_doc_itm_.Ary__bool(is_dir);
else if (String_.Eq(key, "dir_cmd_exists")) return Mustache_doc_itm_.Ary__bool(Bry_.Len_gt_0(dir_cmd));
else if (String_.Eq(key, "is_core_xowa")) return Mustache_doc_itm_.Ary__bool(is_core_xowa);
else if (String_.Eq(key, "subs")) return subs;
return Mustache_doc_itm_.Ary__empty;
}
public static final Xow_import_doc[] Ary_empty = new Xow_import_doc[0];
public static Xow_import_doc New(IoItmDir owner_dir) {
public static Xow_import_doc New(IoItmDir owner_dir, byte[] dir_cmd) {
List_adp sub_list = List_adp_.New();
New_subs(owner_dir.Url(), sub_list, owner_dir.SubDirs());
New_subs(owner_dir.Url(), sub_list, owner_dir.SubFils());
New_subs(owner_dir.Url(), sub_list, owner_dir.SubDirs(), dir_cmd);
New_subs(owner_dir.Url(), sub_list, owner_dir.SubFils(), Bry_.Empty);
Xow_import_doc[] subs = (Xow_import_doc[])sub_list.To_ary_and_clear(Xow_import_doc.class);
return new Xow_import_doc(Bool_.Y, Bool_.N, 0, owner_dir.Url().OwnerDir().RawBry(), owner_dir.Url().RawBry(), Bry_.new_u8(owner_dir.Name()), Bry_.Empty, Bry_.Empty, subs);
return new Xow_import_doc(Bool_.Y, Bool_.N, 0, owner_dir.Url().OwnerDir().RawBry(), owner_dir.Url().RawBry(), Bry_.new_u8(owner_dir.Name()), Bry_.Empty, Bry_.Empty, dir_cmd, subs);
}
private static void New_subs(Io_url owner_dir, List_adp list, IoItmList subs) {
private static void New_subs(Io_url owner_dir, List_adp list, IoItmList subs, byte[] dir_cmd) {
subs.Sort();
int len = subs.Len();
int list_total = list.Len();
@@ -64,13 +69,13 @@ class Xow_import_doc implements Mustache_doc_itm {
Xow_import_doc trg = null;
if (src.Type_dir()) {
byte[] trg_url = src.Url().RawBry();
trg = new Xow_import_doc(Bool_.Y, Bool_.N, list_total + i, owner_dir_bry, trg_url, Bry_.new_u8(src.Url().NameAndExt_noDirSpr()), Bry_.Empty, Bry_.Empty, Ary_empty);
trg = new Xow_import_doc(Bool_.Y, Bool_.N, list_total + i, owner_dir_bry, trg_url, Bry_.new_u8(src.Url().NameAndExt_noDirSpr()), Bry_.Empty, Bry_.Empty, dir_cmd, Ary_empty);
}
else {
IoItmFil src_as_fil = (IoItmFil)src;
String size_str = Io_size_.To_str(src_as_fil.Size(), "#,###");
boolean is_xowa_core = gplx.xowa.wikis.data.Xow_db_file__core_.Is_core_fil_name(owner_dir.NameOnly(), src.Url().NameAndExt());
trg = new Xow_import_doc(Bool_.N, is_xowa_core, list_total + i, owner_dir_bry, src.Url().RawBry(), Bry_.new_u8(src.Name()), Bry_.new_u8(src_as_fil.ModifiedTime().XtoStr_fmt("yyyy-MM-dd")), Bry_.new_u8(size_str), Ary_empty);
trg = new Xow_import_doc(Bool_.N, is_xowa_core, list_total + i, owner_dir_bry, src.Url().RawBry(), Bry_.new_u8(src.Name()), Bry_.new_u8(src_as_fil.ModifiedTime().XtoStr_fmt("yyyy-MM-dd")), Bry_.new_u8(size_str), dir_cmd, Ary_empty);
}
list.Add(trg);
}

View File

@@ -19,13 +19,16 @@ package gplx.xowa.addons.wikis.imports; import gplx.*; import gplx.xowa.*; impor
import gplx.xowa.specials.*; import gplx.langs.mustaches.*; import gplx.xowa.wikis.pages.*; import gplx.xowa.wikis.pages.tags.*;
import gplx.core.ios.*;
class Xow_import_html extends Xow_special_wtr__base {
private final Io_url owner_url;
public Xow_import_html(Io_url owner_url) {this.owner_url = owner_url;}
private final Io_url owner_url; private final byte[] mode;
public Xow_import_html(Io_url owner_url, byte[] mode) {
this.owner_url = owner_url;
this.mode = mode;
}
@Override protected Io_url Get_addon_dir(Xoa_app app) {return app.Fsys_mgr().Http_root().GenSubDir_nest("bin", "any", "xowa", "addon", "wiki", "import");}
@Override protected Io_url Get_mustache_fil(Io_url addon_dir) {return addon_dir.GenSubFil_nest("bin", "xow_import.mustache.html");}
@Override protected Mustache_doc_itm Bld_mustache_root(Xoa_app app) {
IoItmDir owner_dir = Io_mgr.Instance.QueryDir_args(owner_url).DirInclude_(true).ExecAsDir();
return Xow_import_doc.New(owner_dir);
return Xow_import_doc.New(owner_dir, mode);
}
@Override protected void Bld_tags(Xoa_app app, Io_url addon_dir, Xopage_html_data page_data) {
Xopg_tag_mgr head_tags = page_data.Head_tags();

View File

@@ -29,7 +29,29 @@ public class Xow_import_special implements Xow_special_page {
return;
}
new Xow_import_html(Io_url_.new_dir_(owner_str)).Bld_page_by_mustache(wiki.App(), page, this);
// check if dir_cmd is available
byte[] dir_cmd = url_args.Read_bry_or_null("dir_cmd");
// check selected
int selected = url_args.Read_int_or("selected", -1);
if ( selected == 1
&& dir_cmd != null) {
Xow_import_addon addon = Xow_import_addon.Addon__get(wiki);
Xow_import_dir_cbk import_cbk = addon.Dir_selected_cbks__get_by(String_.new_u8(dir_cmd));
import_cbk.Cbk__dir_selected(wiki, page, owner_str);
}
new Xow_import_html(Io_url_.new_dir_(owner_str), dir_cmd).Bld_page_by_mustache(wiki.App(), page, this);
}
public static byte[] Get_root_url() {
byte tid = gplx.core.envs.Op_sys.Cur().Tid();
byte[] rv = Bry_.new_a7("/");
switch (tid) {
case gplx.core.envs.Op_sys.Tid_wnt : rv = Bry_.new_a7("C:\\"); break;
}
rv = gplx.langs.htmls.encoders.Gfo_url_encoder_.Href.Encode(rv);
return rv;
}
Xow_import_special(Xow_special_meta special__meta) {this.special__meta = special__meta;}

View File

@@ -31,8 +31,7 @@ public class Xow_info_special implements Xow_special_page {
delete_wiki.Data__core_mgr().Rls(); // release connection if open
Delete_wiki_files(delete_wiki.Fsys_mgr().Root_dir());
}
Xoa_ttl redirect_ttl = wiki.Ttl_parse(gplx.xowa.addons.wikis.registrys.lists.Xow_list_special.Prototype.Special__meta().Ttl_bry());
page.Redirect().Itms__add__special(Xoa_url.New(wiki, redirect_ttl), redirect_ttl);
page.Redirect().Itms__add__special(wiki, gplx.xowa.addons.wikis.registrys.lists.Xow_list_special.Prototype.Special__meta());
return;
}

View File

@@ -33,7 +33,7 @@ class Xow_list_html extends Xow_special_wtr__base {
if (String_.Eq(site_itm.Domain(), gplx.xowa.wikis.domains.Xow_domain_itm_.Str__home)) continue;
list.Add(new Xow_list_doc_wiki(Bry_.new_u8(site_itm.Domain()), site_itm.Date()));
}
return new Xow_list_doc(Get_root_url(), (Xow_list_doc_wiki[])list.To_ary_and_clear(Xow_list_doc_wiki.class));
return new Xow_list_doc(gplx.xowa.addons.wikis.imports.Xow_import_special.Get_root_url(), (Xow_list_doc_wiki[])list.To_ary_and_clear(Xow_list_doc_wiki.class));
}
@Override protected void Bld_tags(Xoa_app app, Io_url addon_dir, Xopage_html_data page_data) {
Xopg_tag_mgr head_tags = page_data.Head_tags();
@@ -41,13 +41,4 @@ class Xow_list_html extends Xow_special_wtr__base {
Xopg_tag_wtr_.Add__xohelp (head_tags, app.Fsys_mgr().Http_root());
head_tags.Add(Xopg_tag_itm.New_css_file(addon_dir.GenSubFil_nest("bin", "xow_list.css")));
}
private static byte[] Get_root_url() {
byte tid = gplx.core.envs.Op_sys.Cur().Tid();
byte[] rv = Bry_.new_a7("/");
switch (tid) {
case gplx.core.envs.Op_sys.Tid_wnt : rv = Bry_.new_a7("C:\\"); break;
}
rv = gplx.langs.htmls.encoders.Gfo_url_encoder_.Href.Encode(rv);
return rv;
}
}

View File

@@ -82,7 +82,7 @@ class Srch_temp_tbl_wkr implements Srch_text_parser_wkr {
Db_attach_mgr attach_mgr = new Db_attach_mgr();
// dump everything into a temp table in order to index it
page_conn.Meta_idx_create(Dbmeta_idx_itm.new_normal_by_name("page", "page_ns__page_id", "page_namespace", "page_id"));
page_conn.Meta_idx_create(Dbmeta_idx_itm.new_normal_by_tbl("page", "page_ns__page_id", "page_namespace", "page_id"));
Srch_db_mgr.Optimize_unsafe_(word_conn, Bool_.Y);
word_conn.Meta_tbl_remake(Dbmeta_tbl_itm.New("search_link_temp", Dbmeta_fld_itm.new_int("word_id"), Dbmeta_fld_itm.new_int("page_id"), Dbmeta_fld_itm.new_int("page_namespace")));
attach_mgr.Conn_main_(word_conn).Conn_others_(new Db_attach_itm("page_db", page_conn));
@@ -98,7 +98,7 @@ class Srch_temp_tbl_wkr implements Srch_text_parser_wkr {
));
word_conn.Meta_idx_create(Dbmeta_idx_itm.new_normal_by_name("search_link_temp", "main", "page_namespace", "word_id", "page_id"));
Srch_db_mgr.Optimize_unsafe_(word_conn, Bool_.N);
page_conn.Meta_idx_delete("page__page_ns__page_id");
page_conn.Meta_idx_delete("page", "page_ns__page_id");
int len = search_db_mgr.Tbl__link__len();
for (int i = 0; i < len; ++i) {

View File

@@ -86,7 +86,7 @@ public class Srch_special_page implements Xow_special_page, Gfo_invk, Gfo_evt_it
page.Root().Data_htm_(search_page.Root().Data_htm());
Xoa_url redirect_url = Xoa_url.New(wiki, search_ttl);
page.Ttl_(search_ttl).Url_(redirect_url);
page.Redirect().Itms__add__special(redirect_url, search_ttl);
page.Redirect().Itms__add__article(redirect_url, search_ttl, null);
}
}
private void Multi_wikis_changed() {