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:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user