Commit 3062c6d4 authored by fallenstardust's avatar fallenstardust

测试数据库加载

parent 75eb6cd4
......@@ -9,14 +9,15 @@ DataManager dataManager;
bool DataManager::LoadDB(const char* file) {
sqlite3* pDB;
if(sqlite3_open_v2(file, &pDB, SQLITE_OPEN_READONLY, 0) != SQLITE_OK)
return Error(pDB);
int err = 0;
if((err = sqlite3_open_v2(file, &pDB, SQLITE_OPEN_READONLY, 0)) != SQLITE_OK)
return Error(pDB, NULL, err);
sqlite3_stmt* pStmt;
const char* sql_2 = "select datas._id, ot, alias, setcode, type, atk, def, level, race, attribute, category, texts.* from datas,texts where datas._id = texts._id;";
const char* sql = "select datas.id, ot, alias, setcode, type, atk, def, level, race, attribute, category, texts.* from datas,texts where datas.id = texts.id;";
if(sqlite3_prepare_v2(pDB, sql, -1, &pStmt, 0) != SQLITE_OK){
if(sqlite3_prepare_v2(pDB,sql_2, -1, &pStmt, 0) != SQLITE_OK){
return Error(pDB);
if((err = sqlite3_prepare_v2(pDB, sql, -1, &pStmt, 0)) != SQLITE_OK){
if((err = sqlite3_prepare_v2(pDB,sql_2, -1, &pStmt, 0)) != SQLITE_OK){
return Error(pDB, NULL, err);
}
}
CardDataC cd;
......@@ -102,10 +103,15 @@ bool DataManager::LoadStrings(const char* file) {
myswprintf(numStrings[i], L"%d", i);
return true;
}
bool DataManager::Error(sqlite3* pDB, sqlite3_stmt* pStmt) {
BufferIO::DecodeUTF8(sqlite3_errmsg(pDB), strBuffer);
bool DataManager::Error(sqlite3* pDB, sqlite3_stmt* pStmt, int errNo) {
const char* msg = sqlite3_errmsg(pDB);
BufferIO::DecodeUTF8(msg, strBuffer);
if(pStmt)
sqlite3_finalize(pStmt);
int len = strlen(msg);
char buff[len+32];
sprintf(buff, "cdb Error code=%d,msg=%s", errNo, msg);
os::Printer::log(buff);
sqlite3_close(pDB);
return false;
}
......
......@@ -17,7 +17,7 @@ public:
DataManager(): _datas(8192), _strings(8192) {}
bool LoadDB(const char* file);
bool LoadStrings(const char* file);
bool Error(sqlite3* pDB, sqlite3_stmt* pStmt = 0);
bool Error(sqlite3* pDB, sqlite3_stmt* pStmt = 0, int err=0);
bool GetData(int code, CardData* pData);
code_pointer GetCodePointer(int code);
bool GetString(int code, CardString* pStr);
......
......@@ -45,7 +45,11 @@ int main(int argc, char* argv[]) {
MultiByteToWideChar(CP_ACP, 0, &argv[i][2], -1, fname, 260);
char fname2[260];
BufferIO::EncodeUTF8(fname, fname2);
ygo::dataManager.LoadDB(fname2);
if(ygo::dataManager.LoadDB(fname2)){
os::Printer::log("add cdb ok ", fname2);
}else{
os::Printer::log("add cdb fail ", fname2);
}
#else
ygo::dataManager.LoadDB(&argv[i][2]);
#endif
......
......@@ -8,6 +8,7 @@ LOCAL_MODULE_FILENAME := libsqlite
LOCAL_SRC_FILES := sqlite3.c
LOCAL_CFLAGS := -O2 -Wall
#LOCAL_CFLAGS += -DSQLITE_THREADSAFE=1
include $(BUILD_STATIC_LIBRARY)
......@@ -5,6 +5,8 @@ import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatDelegate;
import ocgcore.DataManager;
public class App extends GameApplication {
@Override
......
package cn.garymb.ygomobile;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.os.Environment;
......@@ -18,7 +19,7 @@ import java.util.Locale;
import cn.garymb.ygomobile.ui.preference.PreferenceFragmentPlus;
import cn.garymb.ygomobile.utils.SystemUtils;
import ocgcore.handler.CardManager;
import ocgcore.CardManager;
import static cn.garymb.ygomobile.Constants.CORE_EXPANSIONS;
import static cn.garymb.ygomobile.Constants.CORE_SYSTEM_PATH;
......@@ -171,10 +172,11 @@ public class AppsSettings {
//
}
for (File file : cdbs) {
if (CardManager.checkDataBase(file)) {
Log.i("合法的数据库才会加载","菜菜辛苦了");
//if (CardManager.checkDataBase(file)) {
//合法数据库才会加载
pathList.add(file.getAbsolutePath());
}
//}
}
}
}
......@@ -315,8 +317,9 @@ public class AppsSettings {
/***
* 内置数据库文件夹
*/
@SuppressLint("WrongConstant")
public String getDataBaseDefault() {
return context.getDatabasePath("test.db").getParent();
return context.getDir("game", Context.MODE_MULTI_PROCESS).getPath();
}
/***
......
......@@ -160,8 +160,8 @@ public class YGOStarter {
int x = (int) (Math.random() * tipsList.length);
String tips = tipsList[x];
Toast.makeText(activity, tips, Toast.LENGTH_LONG).show();
} else {
options = null;
// } else {
// options = null;
}
Intent intent = new Intent(activity, YGOMobileActivity.class);
if (options != null) {
......
......@@ -11,26 +11,25 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.Constants;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.ui.plus.VUiKit;
import ocgcore.CardManager;
import ocgcore.DataManager;
import ocgcore.LimitManager;
import ocgcore.data.Card;
import ocgcore.data.LimitList;
import ocgcore.enums.LimitType;
import ocgcore.handler.CardManager;
public class CardLoader implements ICardLoader {
// private StringManager mStringManager = StringManager.get();
private LimitManager mLimitManager = LimitManager.get();
private LimitManager mLimitManager;
private CardManager mCardManager;
private Context context;
private CallBack mCallBack;
private LimitList mLimitList;
private static final String TAG = CardLoader.class.getSimpleName();
private final static boolean DEBUG = false;
private final CardManager mCardManager;
public interface CallBack {
void onSearchStart();
......@@ -44,9 +43,8 @@ public class CardLoader implements ICardLoader {
public CardLoader(Context context) {
this.context = context;
mCardManager = new CardManager(
AppsSettings.get().getDataBasePath(),
AppsSettings.get().getExpansionsPath().getAbsolutePath());
mLimitManager = DataManager.get().getLimitManager();
mCardManager = DataManager.get().getCardManager();
}
@Override
......@@ -74,11 +72,6 @@ public class CardLoader implements ICardLoader {
return map;
}
public boolean openDb() {
mCardManager.loadCards();
return true;
}
public boolean isOpen() {
return mCardManager.getCount() > 0;
}
......@@ -180,11 +173,10 @@ public class CardLoader implements ICardLoader {
}
}
@Override
public void search(String prefixWord, String suffixWord,
long attribute, long level, long race,
long limitlist, long limit,
String limitName, long limit,
String atk, String def, long pscale,
long setcode, long category, long ot, int linkKey, long... types) {
CardSearchInfo searchInfo = new CardSearchInfo();
......@@ -208,8 +200,10 @@ public class CardLoader implements ICardLoader {
searchInfo.race = race;
searchInfo.pscale = (int) pscale;
searchInfo.setcode = setcode;
LimitList limitList = mLimitManager.getLimit((int) limitlist);
if (limitlist > 0) {
LimitList limitList = null;
if (!TextUtils.isEmpty(limitName)) {
limitList = mLimitManager.getLimit(limitName);
setLimitList(limitList);
LimitType cardLimitType = LimitType.valueOf(limit);
if (limitList != null) {
List<Integer> ids;
......@@ -228,8 +222,9 @@ public class CardLoader implements ICardLoader {
searchInfo.inCards = ids;
}
}
} else {
setLimitList(null);
}
setLimitList((limitList == null ? mLimitList : limitList));
loadData(searchInfo);
}
}
......@@ -4,7 +4,7 @@ import ocgcore.data.LimitList;
public interface ICardLoader{
void search(String prefixWord, String suffixWord,
long attribute, long level, long race,long limitlist,long limit,
long attribute, long level, long race,String limitName,long limit,
String atk, String def,long pscale,
long setcode, long category, long ot,int link, long... types);
void onReset();
......
......@@ -16,6 +16,7 @@ import cn.garymb.ygomobile.ui.cards.CardListProvider;
import cn.garymb.ygomobile.ui.cards.deck.ImageTop;
import cn.garymb.ygomobile.bean.events.CardInfoEvent;
import cn.garymb.ygomobile.utils.CardUtils;
import ocgcore.DataManager;
import ocgcore.StringManager;
import ocgcore.data.Card;
import ocgcore.data.LimitList;
......@@ -33,7 +34,7 @@ public class CardListAdapter extends BaseRecyclerAdapterPlus<Card, ViewHolder> i
public CardListAdapter(Context context, ImageLoader imageLoader) {
super(context);
this.imageLoader = imageLoader;
mStringManager = StringManager.get();
mStringManager = DataManager.get().getStringManager();
}
@Override
......
......@@ -64,6 +64,17 @@ public class SimpleSpinnerAdapter extends BaseAdapterPlus<SimpleSpinnerItem> {
return null;
}
public static String getSelectText(Spinner spinner) {
if (spinner.getCount() > 0) {
Object item = spinner.getSelectedItem();
if (item != null && item instanceof SimpleSpinnerItem) {
SimpleSpinnerItem spItem = (SimpleSpinnerItem) item;
return spItem.text;
}
}
return null;
}
public static long getSelect(Spinner spinner) {
if (spinner.getCount() > 0) {
Object item = spinner.getSelectedItem();
......
......@@ -22,6 +22,7 @@ import cn.garymb.ygomobile.loader.CardLoader;
import cn.garymb.ygomobile.loader.ImageLoader;
import cn.garymb.ygomobile.ui.activities.BaseActivity;
import cn.garymb.ygomobile.ui.adapters.CardListAdapter;
import ocgcore.DataManager;
import ocgcore.LimitManager;
import ocgcore.StringManager;
import ocgcore.data.Card;
......@@ -34,14 +35,15 @@ public abstract class BaseCardsAcitivity extends BaseActivity implements CardLoa
protected CardLoader mCardLoader;
protected boolean isLoad = false;
private ImageLoader mImageLoader;
protected StringManager mStringManager = StringManager.get();
protected LimitManager mLimitManager = LimitManager.get();
protected StringManager mStringManager = DataManager.get().getStringManager();
protected LimitManager mLimitManager = DataManager.get().getLimitManager();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_deck_cards);
AnimationShake2();
mImageLoader = ImageLoader.get(this);
mDrawerlayout = $(R.id.drawer_layout);
......
......@@ -29,6 +29,7 @@ import cn.garymb.ygomobile.ui.adapters.CardListAdapter;
import cn.garymb.ygomobile.ui.plus.AOnGestureListener;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.ui.plus.VUiKit;
import ocgcore.DataManager;
import ocgcore.LimitManager;
import ocgcore.StringManager;
import ocgcore.data.Card;
......@@ -41,8 +42,8 @@ class CardSearchActivityImpl extends BaseActivity implements CardLoader.CallBack
protected CardListAdapter mCardListAdapater;
protected CardLoader mCardLoader;
protected boolean isLoad = false;
protected StringManager mStringManager = StringManager.get();
protected LimitManager mLimitManager = LimitManager.get();
protected StringManager mStringManager = DataManager.get().getStringManager();
protected LimitManager mLimitManager = DataManager.get().getLimitManager();
private ImageLoader mImageLoader;
@Override
......@@ -75,12 +76,10 @@ class CardSearchActivityImpl extends BaseActivity implements CardLoader.CallBack
setListeners();
DialogPlus dlg = DialogPlus.show(this, null, getString(R.string.loading));
VUiKit.defer().when(() -> {
StringManager.get().load();//loadFile(stringfile.getAbsolutePath());
LimitManager.get().load();//loadFile(stringfile.getAbsolutePath());
if (mLimitManager.getCount() > 1) {
mCardLoader.setLimitList(mLimitManager.getLimit(1));
DataManager.get().load(false);
if (mLimitManager.getCount() > 0) {
mCardLoader.setLimitList(mLimitManager.getTopLimit());
}
mCardLoader.openDb();
}).done((rs) -> {
dlg.dismiss();
isLoad = true;
......@@ -112,7 +111,7 @@ class CardSearchActivityImpl extends BaseActivity implements CardLoader.CallBack
super.onScrollStateChanged(recyclerView, newState);
switch (newState) {
case RecyclerView.SCROLL_STATE_IDLE:
if(!isFinishing()) {
if (!isFinishing()) {
Glide.with(getContext()).resumeRequests();
}
break;
......@@ -120,7 +119,7 @@ class CardSearchActivityImpl extends BaseActivity implements CardLoader.CallBack
Glide.with(getContext()).pauseRequests();
break;
case RecyclerView.SCROLL_STATE_SETTLING:
if(!isFinishing()) {
if (!isFinishing()) {
Glide.with(getContext()).resumeRequests();
}
break;
......@@ -257,13 +256,13 @@ class CardSearchActivityImpl extends BaseActivity implements CardLoader.CallBack
mDialog.setView(mCardDetail.getView());
mDialog.hideButton();
mDialog.hideTitleBar();
mDialog.setOnGestureListener(new AOnGestureListener(){
mDialog.setOnGestureListener(new AOnGestureListener() {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if(isLeftFling(e1, e2, velocityX, velocityY)){
if (isLeftFling(e1, e2, velocityX, velocityY)) {
mCardDetail.onNextCard();
return true;
}else if(isRightFling(e1, e2, velocityX, velocityY)){
} else if (isRightFling(e1, e2, velocityX, velocityY)) {
mCardDetail.onPreCard();
return true;
}
......
......@@ -18,6 +18,7 @@ import android.widget.TextView.OnEditorActionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.lite.R;
......@@ -26,6 +27,7 @@ import cn.garymb.ygomobile.ui.adapters.SimpleSpinnerAdapter;
import cn.garymb.ygomobile.ui.adapters.SimpleSpinnerItem;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
import ocgcore.LimitManager;
import ocgcore.DataManager;
import ocgcore.StringManager;
import ocgcore.data.CardSet;
import ocgcore.data.LimitList;
......@@ -75,8 +77,8 @@ public class CardSearcher implements View.OnClickListener {
this.mContext = view.getContext();
this.dataLoader = dataLoader;
this.mSettings = AppsSettings.get();
mStringManager = StringManager.get();
mLimitManager = LimitManager.get();
mStringManager = DataManager.get().getStringManager();
mLimitManager = DataManager.get().getLimitManager();
prefixWord = findViewById(R.id.edt_word1);
suffixWord = findViewById(R.id.edt_word2);
otSpinner = findViewById(R.id.sp_ot);
......@@ -168,10 +170,10 @@ public class CardSearcher implements View.OnClickListener {
String mLinkStr = BtnVals[8] + BtnVals[7] + BtnVals[6] + BtnVals[5] + "0"
+ BtnVals[3] + BtnVals[2] + BtnVals[1] + BtnVals[0];
lineKey = Integer.parseInt(mLinkStr, 2);
if(viewDialog.isShowing()) {
if (viewDialog.isShowing()) {
viewDialog.dismiss();
}
}else {
} else {
if ("0".equals(BtnVals[index])) {
btn.setBackgroundResource(enImgs[index]);
BtnVals[index] = "1";
......@@ -251,7 +253,7 @@ public class CardSearcher implements View.OnClickListener {
initTypeSpinners(typeSpinner, new CardType[]{CardType.None, CardType.Monster, CardType.Spell, CardType.Trap});
initTypeSpinners(typeMonsterSpinner, new CardType[]{CardType.None, CardType.Normal, CardType.Effect, CardType.Fusion, CardType.Ritual,
CardType.Synchro, CardType.Pendulum, CardType.Xyz, CardType.Link, CardType.Spirit, CardType.Union,
CardType.Dual, CardType.Tuner, CardType.Flip, CardType.Toon, CardType.Sp_Summon,CardType.Token
CardType.Dual, CardType.Tuner, CardType.Flip, CardType.Toon, CardType.Sp_Summon, CardType.Token
});
initTypeSpinners(typeMonsterSpinner2, new CardType[]{CardType.None, CardType.Pendulum, CardType.Tuner
});
......@@ -321,24 +323,20 @@ public class CardSearcher implements View.OnClickListener {
private void initLimitListSpinners(Spinner spinner) {
List<SimpleSpinnerItem> items = new ArrayList<>();
List<LimitList> limitLists = mLimitManager.getLimitLists();
List<String> limits = mLimitManager.getLimitNames();
int index = -1;
int count = mLimitManager.getCount();
LimitList cur = null;
if (dataLoader != null) {
cur = dataLoader.getLimitList();
}
items.add(new SimpleSpinnerItem(0, getString(R.string.label_limitlist)));
for (int i = 0; i < count; i++) {
LimitList list = limitLists.get(i);
if (i == 0) {
items.add(new SimpleSpinnerItem(i, getString(R.string.label_limitlist)));
} else {
items.add(new SimpleSpinnerItem(i, list.getName()));
}
if (cur != null) {
if (TextUtils.equals(cur.getName(), list.getName())) {
index = i;
}
int j = i + 1;
String name = limits.get(i);
items.add(new SimpleSpinnerItem(j, name));
if (cur != null && TextUtils.equals(cur.getName(), name)) {
index = j;
}
}
SimpleSpinnerAdapter adapter = new SimpleSpinnerAdapter(mContext);
......@@ -473,6 +471,10 @@ public class CardSearcher implements View.OnClickListener {
return SimpleSpinnerAdapter.getSelect(spinner);
}
private String getSelectText(Spinner spinner) {
return SimpleSpinnerAdapter.getSelectText(spinner);
}
protected String text(EditText editText) {
CharSequence charSequence = editText.getText();
if (charSequence == null) {
......@@ -493,7 +495,7 @@ public class CardSearcher implements View.OnClickListener {
private void search() {
if (dataLoader != null) {
dataLoader.search(text(prefixWord), text(suffixWord), getSelect(attributeSpinner)
, getSelect(levelSpinner), getSelect(raceSpinner), getSelect(limitListSpinner), getSelect(limitSpinner),
, getSelect(levelSpinner), getSelect(raceSpinner), getSelectText(limitListSpinner), getSelect(limitSpinner),
text(atkText), text(defText),
getSelect(pScale),
getSelect(setcodeSpinner)
......
......@@ -23,6 +23,7 @@ import cn.garymb.ygomobile.ui.activities.BaseActivity;
import cn.garymb.ygomobile.ui.cards.deck2.DeckAdapter;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.ui.plus.VUiKit;
import ocgcore.DataManager;
import ocgcore.LimitManager;
import ocgcore.StringManager;
import ocgcore.data.Card;
......@@ -31,14 +32,13 @@ import ocgcore.data.LimitList;
public class DeckManagerActivity3 extends BaseActivity implements OnItemDragListener, CardLoader.CallBack {
private RecyclerView mRecyclerView;
private DeckAdapter mDeckAdapter;
protected StringManager mStringManager = StringManager.get();
protected LimitManager mLimitManager = LimitManager.get();
protected StringManager mStringManager = DataManager.get().getStringManager();
protected LimitManager mLimitManager = DataManager.get().getLimitManager();
protected CardLoader mCardLoader;
private AppsSettings mSettings = AppsSettings.get();
private String mPreLoad;
private File mYdkFile;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......@@ -61,12 +61,7 @@ public class DeckManagerActivity3 extends BaseActivity implements OnItemDragList
DialogPlus dlg = DialogPlus.show(this, null, getString(R.string.loading));
VUiKit.defer().when(() -> {
StringManager.get().load();//loadFile(stringfile.getAbsolutePath());
LimitManager.get().load();//loadFile(stringfile.getAbsolutePath());
if (mLimitManager.getCount() > 1) {
mCardLoader.setLimitList(mLimitManager.getLimit(1));
}
mCardLoader.openDb();
mCardLoader.setLimitList(mLimitManager.getTopLimit());
File file = new File(mSettings.getResourcePath(), Constants.CORE_DECK_PATH + "/" + mSettings.getLastDeck() + Constants.YDK_FILE_EX);
if (!TextUtils.isEmpty(mPreLoad)) {
file = new File(mPreLoad);
......
......@@ -59,6 +59,7 @@ import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.utils.IOUtils;
import cn.garymb.ygomobile.utils.ShareUtil;
import ocgcore.DataManager;
import ocgcore.LimitManager;
import ocgcore.StringManager;
import ocgcore.data.Card;
......@@ -128,12 +129,10 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
//
DialogPlus dlg = DialogPlus.show(this, null, getString(R.string.loading));
VUiKit.defer().when(() -> {
StringManager.get().load();//loadFile(stringfile.getAbsolutePath());
LimitManager.get().load();//loadFile(stringfile.getAbsolutePath());
if (mLimitManager.getCount() > 1) {
mCardLoader.setLimitList(mLimitManager.getLimit(1));
DataManager.get().load(false);
if (mLimitManager.getCount() > 0) {
mCardLoader.setLimitList(mLimitManager.getTopLimit());
}
mCardLoader.openDb();
File file = new File(mSettings.getResourcePath(), Constants.CORE_DECK_PATH + "/" + mSettings.getLastDeck() + Constants.YDK_FILE_EX);
if (!TextUtils.isEmpty(mPreLoad)) {
file = new File(mPreLoad);
......@@ -747,21 +746,17 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
// }
private void initLimitListSpinners(Spinner spinner) {
List<SimpleSpinnerItem> items = new ArrayList<>();
List<LimitList> limitLists = mLimitManager.getLimitLists();
List<String> limitLists = mLimitManager.getLimitNames();
int index = -1;
int count = mLimitManager.getCount();
LimitList cur = mLimitList;
items.add(new SimpleSpinnerItem(0, getString(R.string.label_limitlist)));
for (int i = 0; i < count; i++) {
LimitList list = limitLists.get(i);
if (i == 0) {
items.add(new SimpleSpinnerItem(i, getString(R.string.label_limitlist)));
} else {
items.add(new SimpleSpinnerItem(i, list.getName()));
}
if (cur != null) {
if (TextUtils.equals(cur.getName(), list.getName())) {
index = i;
}
int j = i + 1;
String name = limitLists.get(i);
items.add(new SimpleSpinnerItem(j, name));
if (cur != null && TextUtils.equals(cur.getName(), name)) {
index = j;
}
}
SimpleSpinnerAdapter adapter = new SimpleSpinnerAdapter(this);
......@@ -774,7 +769,7 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
setLimitList(mLimitManager.getLimit(position));
setLimitList(mLimitManager.getLimit(SimpleSpinnerAdapter.getSelectText(spinner)));
}
@Override
......
......@@ -57,6 +57,7 @@ import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.ui.widget.DeckGroupView;
import cn.garymb.ygomobile.utils.IOUtils;
import cn.garymb.ygomobile.utils.ShareUtil;
import ocgcore.DataManager;
import ocgcore.LimitManager;
import ocgcore.StringManager;
import ocgcore.data.Card;
......@@ -68,8 +69,8 @@ import static cn.garymb.ygomobile.Constants.YDK_FILE_EX;
class DeckManagerActivityImpl2 extends BaseActivity implements CardLoader.CallBack {
private DeckGroupView mDeckView;
protected CardSearcher mCardSelector;
protected StringManager mStringManager = StringManager.get();
protected LimitManager mLimitManager = LimitManager.get();
protected StringManager mStringManager = DataManager.get().getStringManager();
protected LimitManager mLimitManager = DataManager.get().getLimitManager();
protected CardLoader mCardLoader;
protected boolean isLoad = false;
private String mPreLoad;
......@@ -183,12 +184,10 @@ class DeckManagerActivityImpl2 extends BaseActivity implements CardLoader.CallBa
EventBus.getDefault().register(this);
DialogPlus dlg = DialogPlus.show(this, null, getString(R.string.loading));
VUiKit.defer().when(() -> {
StringManager.get().load();//loadFile(stringfile.getAbsolutePath());
LimitManager.get().load();//loadFile(stringfile.getAbsolutePath());
if (mLimitManager.getCount() > 1) {
mCardLoader.setLimitList(mLimitManager.getLimit(1));
DataManager.get().load(false);
if (mLimitManager.getCount() > 0) {
mCardLoader.setLimitList(mLimitManager.getTopLimit());
}
mCardLoader.openDb();
File file = new File(mSettings.getResourcePath(), Constants.CORE_DECK_PATH + "/" + mSettings.getLastDeck() + YDK_FILE_EX);
if (!TextUtils.isEmpty(mPreLoad)) {
file = new File(mPreLoad);
......@@ -309,21 +308,17 @@ class DeckManagerActivityImpl2 extends BaseActivity implements CardLoader.CallBa
private void initLimitListSpinners(Spinner spinner) {
List<SimpleSpinnerItem> items = new ArrayList<>();
List<LimitList> limitLists = mLimitManager.getLimitLists();
List<String> limitLists = mLimitManager.getLimitNames();
int index = -1;
int count = mLimitManager.getCount();
LimitList cur = mLimitList;
items.add(new SimpleSpinnerItem(0, getString(R.string.label_limitlist)));
for (int i = 0; i < count; i++) {
LimitList list = limitLists.get(i);
if (i == 0) {
items.add(new SimpleSpinnerItem(i, getString(R.string.label_limitlist)));
} else {
items.add(new SimpleSpinnerItem(i, list.getName()));
}
if (cur != null) {
if (TextUtils.equals(cur.getName(), list.getName())) {
index = i;
}
int j = i + 1;
String name = limitLists.get(i);
items.add(new SimpleSpinnerItem(j, name));
if (cur != null && TextUtils.equals(cur.getName(), name)) {
index = j;
}
}
SimpleSpinnerAdapter adapter = new SimpleSpinnerAdapter(this);
......@@ -336,7 +331,7 @@ class DeckManagerActivityImpl2 extends BaseActivity implements CardLoader.CallBa
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
setLimitList(mLimitManager.getLimit(position));
setLimitList(mLimitManager.getLimit(SimpleSpinnerAdapter.getSelectText(spinner)));
}
@Override
......
......@@ -26,6 +26,7 @@ import cn.garymb.ygomobile.ui.activities.BaseActivity;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.utils.IOUtils;
import ocgcore.DataManager;
import ocgcore.data.Card;
import ocgcore.enums.CardType;
......@@ -35,7 +36,6 @@ import ocgcore.enums.CardType;
public class ImageUpdater implements DialogInterface.OnCancelListener {
private BaseActivity mContext;
private CardLoader mCardLoader;
private final static int SubThreads = 4;
private int mDownloading = 0;
private final List<Item> mCardStatus = new ArrayList<>();
......@@ -54,7 +54,6 @@ public class ImageUpdater implements DialogInterface.OnCancelListener {
public ImageUpdater(BaseActivity context) {
mContext = context;
mCardLoader = new CardLoader(context);
mPicsPath = new File(AppsSettings.get().getResourcePath(), Constants.CORE_IMAGE_PATH);
mPicsExPath = new File(AppsSettings.get().getResourcePath(), Constants.CORE_EXPANSIONS_IMAGE_PATH);
}
......@@ -339,10 +338,7 @@ public class ImageUpdater implements DialogInterface.OnCancelListener {
}
private void loadCardsLocked() {
if (!mCardLoader.isOpen()) {
mCardLoader.openDb();
}
SparseArray<Card> cards = mCardLoader.readAllCardCodes();
SparseArray<Card> cards = DataManager.get().getCardManager().getAllCards();
mCardStatus.clear();
mPicsPath = new File(AppsSettings.get().getResourcePath(), Constants.CORE_IMAGE_PATH);
File picsPath = mPicsPath;
......
......@@ -26,7 +26,8 @@ import cn.garymb.ygomobile.utils.IOUtils;
import cn.garymb.ygomobile.utils.SystemUtils;
import libwindbot.windbot.WindBot;
import ocgcore.ConfigManager;
import ocgcore.handler.CardManager;
import ocgcore.CardManager;
import ocgcore.DataManager;
import static cn.garymb.ygomobile.Constants.ASSETS_PATH;
import static cn.garymb.ygomobile.Constants.CORE_BOT_CONF_PATH;
......@@ -128,7 +129,10 @@ public class ResCheckTask extends AsyncTask<Void, Integer, Integer> {
* }
* }*/
//设置字体
new ConfigManager(mSettings.getSystemConfig()).setFontSize(mSettings.getFontSize());
ConfigManager systemConf = DataManager.openConfig(mSettings.getSystemConfig());
systemConf.setFontSize(mSettings.getFontSize());
systemConf.close();
// copyCoreConfig(new File(mSettings.getResourcePath(), GameSettings.CORE_CONFIG_PATH).getAbsolutePath());
if (needsUpdate) {
setMessage(mContext.getString(R.string.check_things, mContext.getString(R.string.tip_new_deck)));
......@@ -176,6 +180,7 @@ public class ResCheckTask extends AsyncTask<Void, Integer, Integer> {
//checkWindbot();
han.sendEmptyMessage(0);
loadData();
} catch (Exception e) {
if (Constants.DEBUG)
Log.e(TAG, "check", e);
......@@ -184,6 +189,10 @@ public class ResCheckTask extends AsyncTask<Void, Integer, Integer> {
return ERROR_NONE;
}
private void loadData(){
setMessage(mContext.getString(R.string.loading));
DataManager.get().load(false);
}
void copyCdbFile(boolean needsUpdate) throws IOException {
File dbFile = new File(mSettings.getDataBasePath(), DATABASE_NAME);
......
......@@ -44,6 +44,7 @@ import cn.garymb.ygomobile.ui.preference.PreferenceFragmentPlus;
import cn.garymb.ygomobile.utils.IOUtils;
import cn.garymb.ygomobile.utils.SystemUtils;
import ocgcore.ConfigManager;
import ocgcore.DataManager;
import static cn.garymb.ygomobile.Constants.ACTION_RELOAD;
import static cn.garymb.ygomobile.Constants.CORE_SKIN_AVATAR_SIZE;
......@@ -95,9 +96,9 @@ public class SettingFragment extends PreferenceFragmentPlus {
addPreferencesFromResource(R.xml.preference_game);
bind(PREF_GAME_PATH, mSettings.getResourcePath());
// bind(PREF_GAME_VERSION, mSettings.getVersionString(mSettings.getGameVersion()));
bind(PREF_CHANGE_LOG, SystemUtils.getVersionName(getActivity())
bind(PREF_CHANGE_LOG,SystemUtils.getVersionName(getActivity())
+ "(" + SystemUtils.getVersion(getActivity()) + ")");
bind(PREF_CHECK_UPDATE, getString(R.string.settings_about_author_pref) + " : " + getString(R.string.settings_author));
bind(PREF_CHECK_UPDATE,getString(R.string.settings_about_author_pref)+" : "+getString(R.string.settings_author));
bind(PREF_SOUND_EFFECT, mSettings.isSoundEffect());
bind(PREF_LOCK_SCREEN, mSettings.isLockSreenOrientation());
bind(PREF_FONT_ANTIALIAS, mSettings.isFontAntiAlias());
......@@ -115,7 +116,7 @@ public class SettingFragment extends PreferenceFragmentPlus {
}
bind(PREF_DECK_DELETE_DILAOG, mSettings.isDialogDelete());
//bind(PREF_USE_EXTRA_CARD_CARDS, mSettings.isUseExtraCards());
bind(SETTINGS_AVATAR, new File(mSettings.getCoreSkinPath(), Constants.CORE_SKIN_AVATAR_ME).getAbsolutePath());
bind(SETTINGS_AVATAR, new File(mSettings.getCoreSkinPath(),Constants.CORE_SKIN_AVATAR_ME).getAbsolutePath());
bind(SETTINGS_COVER, new File(mSettings.getCoreSkinPath(), Constants.CORE_SKIN_COVER).getAbsolutePath());
bind(SETTINGS_CARD_BG, new File(mSettings.getCoreSkinPath(), Constants.CORE_SKIN_BG).getAbsolutePath());
bind(PREF_FONT_SIZE, mSettings.getFontSize());
......@@ -149,7 +150,9 @@ public class SettingFragment extends PreferenceFragmentPlus {
} catch (Exception e) {
}
new ConfigManager(mSettings.getSystemConfig()).setFontSize(size);
ConfigManager configManager = DataManager.openConfig(mSettings.getSystemConfig());
configManager.setFontSize(size);
configManager.close();
}
if (preference instanceof CheckBoxPreference) {
CheckBoxPreference checkBoxPreference = (CheckBoxPreference) preference;
......@@ -195,14 +198,14 @@ public class SettingFragment extends PreferenceFragmentPlus {
View viewDialog = dialog.getContentView();
ImageView avatar1 = viewDialog.findViewById(R.id.me);
ImageView avatar2 = viewDialog.findViewById(R.id.opponent);
setImage(mSettings.getCoreSkinPath() + "/" + Constants.CORE_SKIN_AVATAR_ME, CORE_SKIN_AVATAR_SIZE[0], CORE_SKIN_AVATAR_SIZE[1], avatar1);
setImage(mSettings.getCoreSkinPath() + "/" + Constants.CORE_SKIN_AVATAR_OPPONENT, CORE_SKIN_AVATAR_SIZE[0], CORE_SKIN_AVATAR_SIZE[1], avatar2);
setImage(mSettings.getCoreSkinPath()+ "/" + Constants.CORE_SKIN_AVATAR_ME, CORE_SKIN_AVATAR_SIZE[0],CORE_SKIN_AVATAR_SIZE[1],avatar1);
setImage(mSettings.getCoreSkinPath()+ "/" + Constants.CORE_SKIN_AVATAR_OPPONENT, CORE_SKIN_AVATAR_SIZE[0],CORE_SKIN_AVATAR_SIZE[1],avatar2);
avatar1.setOnClickListener((v) -> {
//打开系统文件相册
String outFile = new File(mSettings.getCoreSkinPath(), Constants.CORE_SKIN_AVATAR_ME).getAbsolutePath();
showImageDialog(preference, getString(R.string.settings_game_avatar),
outFile,
true, CORE_SKIN_AVATAR_SIZE[0], CORE_SKIN_AVATAR_SIZE[1]);
true, CORE_SKIN_AVATAR_SIZE[0],CORE_SKIN_AVATAR_SIZE[1]);
dialog.dismiss();
});
avatar2.setOnClickListener((v) -> {
......@@ -210,10 +213,10 @@ public class SettingFragment extends PreferenceFragmentPlus {
String outFile = new File(mSettings.getCoreSkinPath(), Constants.CORE_SKIN_AVATAR_OPPONENT).getAbsolutePath();
showImageDialog(preference, getString(R.string.settings_game_avatar),
outFile,
true, CORE_SKIN_AVATAR_SIZE[0], CORE_SKIN_AVATAR_SIZE[1]);
true, CORE_SKIN_AVATAR_SIZE[0],CORE_SKIN_AVATAR_SIZE[1]);
dialog.dismiss();
});
} else if (SETTINGS_COVER.equals(key)) {
}else if (SETTINGS_COVER.equals(key)) {
//显示卡背图片对话框
final DialogPlus dialog = new DialogPlus(getContext());
dialog.setContentView(R.layout.dialog_cover_select);
......@@ -222,8 +225,8 @@ public class SettingFragment extends PreferenceFragmentPlus {
View viewDialog = dialog.getContentView();
ImageView cover1 = viewDialog.findViewById(R.id.cover1);
ImageView cover2 = viewDialog.findViewById(R.id.cover2);
setImage(mSettings.getCoreSkinPath() + "/" + Constants.CORE_SKIN_COVER, CORE_SKIN_CARD_COVER_SIZE[0], CORE_SKIN_CARD_COVER_SIZE[1], cover1);
setImage(mSettings.getCoreSkinPath() + "/" + Constants.CORE_SKIN_COVER2, CORE_SKIN_CARD_COVER_SIZE[0], CORE_SKIN_CARD_COVER_SIZE[1], cover2);
setImage(mSettings.getCoreSkinPath()+ "/" + Constants.CORE_SKIN_COVER, CORE_SKIN_CARD_COVER_SIZE[0],CORE_SKIN_CARD_COVER_SIZE[1],cover1);
setImage(mSettings.getCoreSkinPath()+ "/" + Constants.CORE_SKIN_COVER2, CORE_SKIN_CARD_COVER_SIZE[0],CORE_SKIN_CARD_COVER_SIZE[1],cover2);
cover1.setOnClickListener((v) -> {
//打开系统文件相册
String outFile = new File(mSettings.getCoreSkinPath(), Constants.CORE_SKIN_COVER).getAbsolutePath();
......@@ -250,9 +253,9 @@ public class SettingFragment extends PreferenceFragmentPlus {
ImageView bg = viewDialog.findViewById(R.id.bg);
ImageView bg_menu = viewDialog.findViewById(R.id.bg_menu);
ImageView bg_deck = viewDialog.findViewById(R.id.bg_deck);
setImage(mSettings.getCoreSkinPath() + "/" + Constants.CORE_SKIN_BG, CORE_SKIN_BG_SIZE[0], CORE_SKIN_BG_SIZE[1], bg);
setImage(mSettings.getCoreSkinPath() + "/" + Constants.CORE_SKIN_BG_MENU, CORE_SKIN_BG_SIZE[0], CORE_SKIN_BG_SIZE[1], bg_menu);
setImage(mSettings.getCoreSkinPath() + "/" + Constants.CORE_SKIN_BG_DECK, CORE_SKIN_BG_SIZE[0], CORE_SKIN_BG_SIZE[1], bg_deck);
setImage(mSettings.getCoreSkinPath()+ "/" + Constants.CORE_SKIN_BG, CORE_SKIN_BG_SIZE[0], CORE_SKIN_BG_SIZE[1],bg);
setImage(mSettings.getCoreSkinPath()+ "/" + Constants.CORE_SKIN_BG_MENU, CORE_SKIN_BG_SIZE[0], CORE_SKIN_BG_SIZE[1],bg_menu);
setImage(mSettings.getCoreSkinPath()+ "/" + Constants.CORE_SKIN_BG_DECK, CORE_SKIN_BG_SIZE[0], CORE_SKIN_BG_SIZE[1],bg_deck);
bg.setOnClickListener((v) -> {
//打开系统文件相册
String outFile = new File(mSettings.getCoreSkinPath(), Constants.CORE_SKIN_BG).getAbsolutePath();
......@@ -361,7 +364,7 @@ public class SettingFragment extends PreferenceFragmentPlus {
}
}
public void setImage(String outFile, int outWidth, int outHeight, ImageView imageView) {
public void setImage(String outFile,int outWidth,int outHeight,ImageView imageView){
File img = new File(outFile);
if (img.exists()) {
Glide.with(this).load(img).signature(new StringSignature(img.getName() + img.lastModified()))
......
package ocgcore.handler;
package ocgcore;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.annotation.WorkerThread;
import android.text.TextUtils;
import android.util.Log;
import android.util.SparseArray;
import java.io.File;
import java.io.FilenameFilter;
import java.util.HashMap;
import java.util.Map;
import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.utils.IOUtils;
import cn.garymb.ygomobile.utils.MD5Util;
import ocgcore.data.Card;
public class CardManager {
private String dbDir, exDbPath;
private final SparseArray<Card> cardDataHashMap = new SparseArray<>();
private final Map<String, String> mCardCache = new HashMap<>();
public CardManager(String dbDir, String exPath) {
this.dbDir = dbDir;
......@@ -44,7 +39,7 @@ public class CardManager {
public void loadCards() {
int count = readAllCards(AppsSettings.get().getDataBaseFile(), cardDataHashMap);
Log.i("Irrlicht", "load defualt cdb:" + count);
if (AppsSettings.get().isReadExpansions()) {
/* if (AppsSettings.get().isReadExpansions()) {
File dir = new File(exDbPath);
if (dir.exists()) {
File[] files = dir.listFiles(new FilenameFilter() {
......@@ -56,20 +51,18 @@ public class CardManager {
});
//读取全部卡片
if (files != null) {
Log.i("数量","数量" + files.length);
for (File file : files) {
final String path = file.getAbsolutePath();
String md5 = MD5Util.getFileMD5(path);
String last = mCardCache.get(path);
if (!TextUtils.equals(md5, last)) {
mCardCache.put(path, md5);
count = readAllCards(file, cardDataHashMap);
Log.i("Irrlicht", "load " + count + " cdb:" + file);
}
}
}
}*/
}
}
private static SQLiteDatabase openDatabase(String file) {
return SQLiteDatabase.openDatabase(file, null,
SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.OPEN_READONLY);
}
public static boolean checkDataBase(File file) {
......@@ -80,8 +73,8 @@ public class CardManager {
SQLiteDatabase db = null;
boolean rs = false;
try {
db = SQLiteDatabase.openOrCreateDatabase(file, null);
reader = db.rawQuery("select datas.id, ot, alias, setcode, type, level, race, attribute, atk, def,category,name,desc from datas,texts where datas.id = texts.id limit 1;", null);
db = openDatabase(file.getPath());
reader = db.rawQuery("select datas.id, ot, alias, setcode, type, level, race, attribute, atk, def,category,name,\"desc\" from datas,texts where datas.id = texts.id limit 1;", null);
rs = reader != null;
} catch (Throwable e) {
//ignore
......@@ -90,7 +83,7 @@ public class CardManager {
}
if (!rs) {
try {
reader = db.rawQuery("select datas._id, ot, alias, setcode, type, level, race, attribute, atk, def,category,name,desc from datas,texts where datas._id = texts._id limit 1;", null);
reader = db.rawQuery("select datas._id, ot, alias, setcode, type, level, race, attribute, atk, def,category,name,\"desc\" from datas,texts where datas._id = texts._id limit 1;", null);
rs = reader != null;
} catch (Throwable e) {
//ignore
......@@ -111,13 +104,12 @@ public class CardManager {
Cursor reader = null;
SQLiteDatabase db = null;
try {
db = SQLiteDatabase.openOrCreateDatabase(file, null);
if (db.isOpen()) {
db = openDatabase(file.getPath());
try {
reader = db.rawQuery("select datas.id, ot, alias, setcode, type, level, race, attribute, atk, def,category,name,desc from datas,texts where datas.id = texts.id;", null);
reader = db.rawQuery("select datas.id, ot, alias, setcode, type, level, race, attribute, atk, def,category,name,\"desc\" from datas,texts where datas.id = texts.id;", null);
} catch (Throwable e) {
//ignore
reader = db.rawQuery("select datas._id, ot, alias, setcode, type, level, race, attribute, atk, def,category,name,desc from datas,texts where datas._id = texts._id;", null);
reader = db.rawQuery("select datas._id, ot, alias, setcode, type, level, race, attribute, atk, def,category,name,\"desc\" from datas,texts where datas._id = texts._id;", null);
}
if (reader != null && reader.moveToFirst()) {
do {
......@@ -143,7 +135,6 @@ public class CardManager {
cardMap.put(cardData.Code, cardData);
} while (reader.moveToNext());
}
}
} catch (Throwable e) {
e.printStackTrace();
Log.e("Irrlicht", "read cards " + file, e);
......
......@@ -2,9 +2,11 @@ package ocgcore;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
......@@ -13,15 +15,20 @@ import java.util.Locale;
import cn.garymb.ygomobile.utils.IOUtils;
public class ConfigManager {
public class ConfigManager implements Closeable {
private final List<String> mLines = new ArrayList<>();
private File file;
public ConfigManager(File file) {
ConfigManager(File file) {
this.file = file;
}
@Override
public void close(){
mLines.clear();
}
public void read() {
mLines.clear();
InputStreamReader in = null;
......@@ -74,7 +81,7 @@ public class ConfigManager {
IOUtils.close(outputStream);
}
if (ok) {
if(file.exists()) {
if (file.exists()) {
file.delete();
}
tmp.renameTo(file);
......
package ocgcore;
import java.io.File;
import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.loader.CardLoader;
public class DataManager {
private static DataManager sLoader = null;
public static DataManager get() {
if (sLoader != null) {
return sLoader;
}
synchronized (CardLoader.class) {
if (sLoader == null) {
sLoader = new DataManager();
}
}
return sLoader;
}
private final StringManager mStringManager;
private final LimitManager mLimitManager;
private CardManager mCardManager;
private DataManager() {
mStringManager = new StringManager();
mLimitManager = new LimitManager();
mCardManager = new CardManager(
AppsSettings.get().getDataBasePath(),
AppsSettings.get().getExpansionsPath().getAbsolutePath());
}
public StringManager getStringManager() {
return mStringManager;
}
public LimitManager getLimitManager() {
return mLimitManager;
}
public static ConfigManager openConfig(File conf) {
return new ConfigManager(conf);
}
public CardManager getCardManager() {
return mCardManager;
}
private boolean mInit;
public void load(boolean force) {
boolean needLoad = false;
synchronized (this) {
if (!mInit || force) {
needLoad = true;
}
mInit = true;
}
if(needLoad) {
mStringManager.load();
mLimitManager.load();
mCardManager.loadCards();
}
}
}
package ocgcore;
import android.support.annotation.NonNull;
import android.util.Log;
import java.io.BufferedReader;
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.Constants;
import cn.garymb.ygomobile.utils.IOUtils;
import ocgcore.data.LimitList;
import static cn.garymb.ygomobile.Constants.CORE_CUSTOM_LIMIT_PATH;
import static cn.garymb.ygomobile.Constants.CORE_LIMIT_PATH;
public class LimitManager {
private static LimitManager sManager = new LimitManager();
private final List<LimitList> mLimitLists = new ArrayList<>();
private String lastMd5;
private String lastCustomMd5;
public class LimitManager implements Closeable {
private final Map<String, LimitList> mLimitLists = new HashMap<>();
private final List<String> mLimitNames = new ArrayList<>();
private int mCount;
private LimitManager() {
LimitManager() {
}
public static LimitManager get() {
return sManager;
@Override
public void close() {
mLimitNames.clear();
mLimitLists.clear();
}
public int getCount() {
return mCount;
}
public List<LimitList> getLimitLists(){
public Map<String, LimitList> getLimitLists() {
return mLimitLists;
}
public LimitList getLimit(int postion) {
if (postion >= 0 && postion <= getCount()) {
return mLimitLists.get(postion);
}
return null;
public List<String> getLimitNames() {
return mLimitNames;
}
public boolean load_custom() {
File stringfile = new File(AppsSettings.get().getResourcePath(), CORE_CUSTOM_LIMIT_PATH);
if (stringfile == null) {
return false;
public @NonNull LimitList getLimit(String name) {
return mLimitLists.get(name);
}
/*
String md5 = MD5Util.getFileMD5(stringfile.getAbsolutePath());
if (TextUtils.equals(md5, lastCustomMd5)) {
return true;
public LimitList getTopLimit() {
if (mLimitNames.size() == 0) {
return null;
}
lastCustomMd5 = md5;
*/
return loadFile(stringfile.getAbsolutePath(), false);
return mLimitLists.get(mLimitNames.get(0));
}
public boolean load() {
boolean custom_res = load_custom();
File stringfile = new File(AppsSettings.get().getResourcePath(), CORE_LIMIT_PATH);
/*
String md5 = MD5Util.getFileMD5(stringfile.getAbsolutePath());
if (TextUtils.equals(md5, lastMd5)) {
return true;
File stringFile = new File(AppsSettings.get().getResourcePath(), Constants.CORE_LIMIT_PATH);
boolean rs1 = loadFile(stringFile);
boolean rs2 = true;
if (AppsSettings.get().isReadExpansions()) {
File stringFile2 = new File(AppsSettings.get().getExpansionsPath(), Constants.CORE_CUSTOM_LIMIT_PATH);
rs2 = loadFile(stringFile2);
}
lastMd5 = md5;
*/
return loadFile(stringfile.getAbsolutePath(), custom_res);
return rs1 && rs2;
}
public boolean loadFile(String path, boolean leave) {
if (path == null || path.length() == 0) {
return false;
}
File file = new File(path);
public boolean loadFile(File file) {
if (file.isDirectory() || !file.exists()) {
return false;
}
if (!leave) {
mLimitLists.clear();
mLimitLists.add(new LimitList(null));
}
InputStreamReader in = null;
FileInputStream inputStream = null;
try {
......@@ -100,10 +87,9 @@ public class LimitManager {
}
if (line.startsWith("!")) {
name = line.substring(1);
if (tmp != null) {
mLimitLists.add(tmp);
}
tmp = new LimitList(name);
mLimitLists.put(name, tmp);
mLimitNames.add(name);
} else if (tmp != null) {
String[] words = line.trim().split("[\t| ]+");
if (words.length >= 2) {
......@@ -124,9 +110,6 @@ public class LimitManager {
}
}
if (tmp != null) {
mLimitLists.add(tmp);
}
} catch (Exception e) {
Log.e("kk", "limit", e);
} finally {
......
......@@ -4,8 +4,10 @@ import android.text.TextUtils;
import android.util.SparseArray;
import java.io.BufferedReader;
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
......@@ -14,45 +16,37 @@ import java.util.List;
import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.Constants;
import cn.garymb.ygomobile.utils.IOUtils;
import cn.garymb.ygomobile.utils.MD5Util;
import cn.garymb.ygomobile.utils.StringUtils;
import ocgcore.data.CardSet;
import ocgcore.enums.CardOt;
public class StringManager {
private String PRE_SYSTEM = "!system";
private String PRE_SETNAME = "!setname";
public class StringManager implements Closeable {
private static final String PRE_SYSTEM = "!system";
private static final String PRE_SETNAME = "!setname";
private final SparseArray<String> mSystem = new SparseArray<>();
private final List<CardSet> mCardSets = new ArrayList<>();
// private final Map<Long, String> mSetname = new HashMap<>();
private static StringManager sStringManager = new StringManager();
private String lastMd5, lastMd52;
private StringManager() {
StringManager() {
}
public static StringManager get() {
return sStringManager;
@Override
public void close(){
mSystem.clear();
mCardSets.clear();
}
public boolean load() {
boolean rs = false;
File stringfile = new File(AppsSettings.get().getResourcePath(), Constants.CORE_STRING_PATH);
String md5 = MD5Util.getFileMD5(stringfile.getAbsolutePath());
if (!TextUtils.equals(md5, lastMd5)) {
lastMd5 = md5;
rs = loadFile(stringfile.getAbsolutePath());
}
mSystem.clear();
mCardSets.clear();
File stringFile = new File(AppsSettings.get().getResourcePath(), Constants.CORE_STRING_PATH);
boolean rs1 = loadFile(stringFile.getAbsolutePath());
boolean rs2 = true;
if (AppsSettings.get().isReadExpansions()) {
stringfile = new File(AppsSettings.get().getExpansionsPath(), Constants.CORE_STRING_PATH);
md5 = MD5Util.getFileMD5(stringfile.getAbsolutePath());
if (!TextUtils.equals(md5, lastMd5)) {
lastMd52 = md5;
rs = loadFile(stringfile.getAbsolutePath());
}
File stringFile2 = new File(AppsSettings.get().getExpansionsPath(), Constants.CORE_STRING_PATH);
rs2 = loadFile(stringFile2.getAbsolutePath());
}
return rs;
return rs1 && rs2;
}
public boolean loadFile(String path) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment