示例#1
0
  public static Keyval[] new_() {
    Ordered_hash translated = Ordered_hash_.New_bry();
    List_adp untranslated = List_adp_.New();
    Add_itm_many(
        translated,
        Xol_lang_stub_.Id_en,
        Xol_lang_stub_.Id_de,
        Xol_lang_stub_.Id_pl,
        Xol_lang_stub_.Id_zh_hans,
        Xol_lang_stub_
            .Id_zh_hant); // add langs with translations first, so they alphabetize to top of list
    int len = Xol_lang_stub_.Id__max;
    for (int i = 0; i < len; i++) { // add rest of langs, but sort by code
      Xol_lang_stub itm = Xol_lang_stub_.Get_by_id(i);
      if (translated.Has(itm.Key())) continue;
      untranslated.Add(itm);
    }
    untranslated.Sort_by(Xol_lang_stub_.Comparer_key);

    Keyval[] rv = new Keyval[len];
    int translated_max = translated.Count();
    for (int i = 0; i < translated_max; i++) rv[i] = new_itm((Xol_lang_stub) translated.Get_at(i));

    for (int i = translated_max; i < len; i++)
      rv[i] = new_itm((Xol_lang_stub) untranslated.Get_at(i - translated_max));
    return rv;
  }
示例#2
0
  private static void Find_pages_in_ctg(
      Ordered_hash rv,
      Xowe_wiki wiki,
      Xodb_load_mgr load_mgr,
      Xowd_page_itm tmp_page,
      Int_obj_ref tmp_id,
      byte[] ctg_ttl) {
    Xoctg_catpage_ctg ctg =
        wiki.Ctg__catpage_mgr()
            .Get_or_load_or_null(
                Xoctg_catpage_url.New__blank(),
                wiki.Ttl_parse(gplx.xowa.wikis.nss.Xow_ns_.Tid__category, ctg_ttl),
                -1);
    if (ctg == null) return;

    // loop grps to get grp
    for (byte ctg_tid = 0; ctg_tid < Xoa_ctg_mgr.Tid___max; ++ctg_tid) {
      Xoctg_catpage_grp ctg_grp = ctg.Grp_by_tid(ctg_tid);
      int itms_len = ctg_grp.Itms__len();

      // loop itms in grp and add to hash
      for (int i = 0; i < itms_len; ++i) {
        Xoctg_catpage_itm ctg_itm = ctg_grp.Itms__get_at(i);
        int itm_page_id = ctg_itm.Page_id();
        if (rv.Has(tmp_id.Val_(itm_page_id))) continue;
        rv.Add(Int_obj_ref.New(itm_page_id), ctg_itm);

        // DELETE: recurse subcategories; PAGE:en.b:XML DATE:2016-09-18
        // if (ctg_tid == Xoa_ctg_mgr.Tid__subc) {
        //	load_mgr.Load_by_id(tmp_page, itm_page_id);
        //	Find_pages_in_ctg(rv, wiki, load_mgr, tmp_page, tmp_id, tmp_page.Ttl_page_db());
        // }
      }
    }
  }
  @Override
  public Xobc_xodir_dir[] Get_dirs(Xoa_app app) {
    Ordered_hash hash = Ordered_hash_.New();

    // add default app dir
    String default_data_dir = context.getApplicationInfo().dataDir + "/";
    String selected =
        app.User()
            .User_db_mgr()
            .Cfg()
            .Get_app_str_or(Xobc_xodir_cfg.Key__selected_dir, default_data_dir);
    Xobc_xodir_dir itm =
        new Xobc_xodir_dir(
            String_.Eq(selected, default_data_dir), false, Bry_.new_u8(default_data_dir));
    hash.Add(default_data_dir, itm);

    // add "guessed" external dirs
    Sdcard_detection_strategy[] strategy_ary =
        new Sdcard_detection_strategy[] {
          new Strategy__storage_dir(-1),
          new Strategy__envvar__external_storage(-1),
          new Strategy__envvar__secondary_storage(
              -1) // NOTE: needed for BLU-STUDIO C 5+5 LTE; DATE: 2016-06-28
        };
    int len = strategy_ary.length;
    String root_rhs = Sdcard_detection_mgr.Get_root_rhs() + "/";
    for (int i = 0; i < len; ++i) {
      Sdcard_detection_strategy strategy = strategy_ary[i];
      String[] dir_strs = strategy.Get_dirs(context);
      for (String dir_str : dir_strs) {
        if (dir_str == null) continue;
        dir_str += root_rhs;
        if (hash.Has(dir_str)) continue;
        File dir = new File(dir_str);
        if (!dir.exists())
          continue; // dir doesn't exist; don't bother trying to create b/c permission won't be
                    // available at 4.4+
        if (!Sdcard_detection_mgr.Dir_is_writeable(dir)) continue;
        itm = new Xobc_xodir_dir(String_.Eq(selected, dir_str), false, Bry_.new_u8(dir_str));
        hash.Add(dir_str, itm);
      }
    }

    // add custom dir
    String custom =
        app.User()
            .User_db_mgr()
            .Cfg()
            .Get_app_str_or(Xobc_xodir_cfg.Key__custom_dir, "(choose your own folder)");
    itm = new Xobc_xodir_dir(String_.Eq(selected, custom), true, Bry_.new_u8(custom));
    hash.Add(custom, itm);
    return (Xobc_xodir_dir[]) hash.To_ary(Xobc_xodir_dir.class);
  }
示例#4
0
 private static void Add_cur_pages_also_in_old(
     int i,
     Int_obj_ref tmp_id,
     Ordered_hash old_regy,
     Ordered_hash cur_regy,
     Ordered_hash new_regy,
     Ordered_hash exclude_pages,
     int ns_filter) {
   int found_len = cur_regy.Count();
   for (int j = 0; j < found_len; j++) { // if new_page is in cur, add it
     Xoctg_catpage_itm cur_itm = (Xoctg_catpage_itm) cur_regy.Get_at(j);
     Xoa_ttl cur_ttl = cur_itm.Page_ttl();
     if (cur_ttl == null) continue;
     if (ns_filter != Dpl_itm.Ns_filter_null && ns_filter != cur_ttl.Ns().Id()) continue;
     tmp_id.Val_(cur_itm.Page_id()); // set tmp_id, since it will be used at least once
     if (exclude_pages.Has(tmp_id)) continue; // ignore excluded pages
     if (i != 0) { // skip logic for first ctg (which doesn't have a predecessor)
       if (!old_regy.Has(tmp_id)) continue; // cur_itm not in old_regy; ignore
     }
     new_regy.Add_as_key_and_val(Int_obj_ref.New(cur_itm.Page_id()));
   }
 }
示例#5
0
 private static void Del_old_pages_not_in_cur(
     int i, Int_obj_ref tmp_id, Ordered_hash old_regy, Ordered_hash cur_regy, List_adp del_list) {
   if (i == 0) return; // skip logic for first ctg (which doesn't have a predecessor)
   int old_len = old_regy.Count();
   for (int j = 0; j < old_len; j++) { // if cur is not in new, del it
     Int_obj_ref old_id = (Int_obj_ref) old_regy.Get_at(j);
     if (!cur_regy.Has(tmp_id.Val_(old_id.Val()))) // old_itm does not exist in cur_regy
     del_list.Add(
           old_id); // remove; EX: (A,B) in old; B only in cur; old should now be (A) only
   }
   int del_len = del_list.Count();
   for (int j = 0; j < del_len; j++) {
     Int_obj_ref old_itm = (Int_obj_ref) del_list.Get_at(j);
     old_regy.Del(tmp_id.Val_(old_itm.Val()));
   }
 }