Commit 9321011f authored by Dark Zane's avatar Dark Zane Committed by GitHub

Merge branch 'fallenstardust:master' into master

parents 410f9721 7b5541e4
...@@ -105,17 +105,18 @@ void DuelClient::ClientRead(bufferevent* bev, void* ctx) { ...@@ -105,17 +105,18 @@ void DuelClient::ClientRead(bufferevent* bev, void* ctx) {
int len = evbuffer_get_length(input); int len = evbuffer_get_length(input);
if (len < 2) if (len < 2)
return; return;
std::array<unsigned char, SIZE_NETWORK_BUFFER> duel_client_read; unsigned char* duel_client_read = new unsigned char[SIZE_NETWORK_BUFFER];
uint16_t packet_len = 0; uint16_t packet_len = 0;
while (len >= 2) { while (len >= 2) {
evbuffer_copyout(input, &packet_len, sizeof packet_len); evbuffer_copyout(input, &packet_len, sizeof packet_len);
if (len < packet_len + 2) if (len < packet_len + 2)
break; break;
int read_len = evbuffer_remove(input, duel_client_read.data(), packet_len + 2); int read_len = evbuffer_remove(input, duel_client_read, packet_len + 2);
if (read_len > 2) if (read_len > 2)
HandleSTOCPacketLan(&duel_client_read[2], read_len - 2); HandleSTOCPacketLan(&duel_client_read[2], read_len - 2);
len -= packet_len + 2; len -= packet_len + 2;
} }
delete[] duel_client_read;
} }
void DuelClient::ClientEvent(bufferevent* bev, short events, void* ctx) { void DuelClient::ClientEvent(bufferevent* bev, short events, void* ctx) {
if (events & BEV_EVENT_CONNECTED) { if (events & BEV_EVENT_CONNECTED) {
......
...@@ -4,7 +4,6 @@ ...@@ -4,7 +4,6 @@
#include "tag_duel.h" #include "tag_duel.h"
#include "deck_manager.h" #include "deck_manager.h"
#include <thread> #include <thread>
#include <array>
namespace ygo { namespace ygo {
std::unordered_map<bufferevent*, DuelPlayer> NetServer::users; std::unordered_map<bufferevent*, DuelPlayer> NetServer::users;
...@@ -127,17 +126,18 @@ void NetServer::ServerEchoRead(bufferevent *bev, void *ctx) { ...@@ -127,17 +126,18 @@ void NetServer::ServerEchoRead(bufferevent *bev, void *ctx) {
int len = evbuffer_get_length(input); int len = evbuffer_get_length(input);
if (len < 2) if (len < 2)
return; return;
std::array<unsigned char, SIZE_NETWORK_BUFFER> net_server_read; unsigned char* net_server_read = new unsigned char[SIZE_NETWORK_BUFFER];
uint16_t packet_len = 0; uint16_t packet_len = 0;
while (len >= 2) { while (len >= 2) {
evbuffer_copyout(input, &packet_len, sizeof packet_len); evbuffer_copyout(input, &packet_len, sizeof packet_len);
if (len < packet_len + 2) if (len < packet_len + 2)
break; break;
int read_len = evbuffer_remove(input, net_server_read.data(), packet_len + 2); int read_len = evbuffer_remove(input, net_server_read, packet_len + 2);
if (read_len > 2) if (read_len > 2)
HandleCTOSPacket(&users[bev], &net_server_read[2], read_len - 2); HandleCTOSPacket(&users[bev], &net_server_read[2], read_len - 2);
len -= packet_len + 2; len -= packet_len + 2;
} }
delete[] net_server_read;
} }
void NetServer::ServerEchoEvent(bufferevent* bev, short events, void* ctx) { void NetServer::ServerEchoEvent(bufferevent* bev, short events, void* ctx) {
if (events & (BEV_EVENT_EOF | BEV_EVENT_ERROR)) { if (events & (BEV_EVENT_EOF | BEV_EVENT_ERROR)) {
......
...@@ -278,6 +278,8 @@ void SingleDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) { ...@@ -278,6 +278,8 @@ void SingleDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) {
void SingleDuel::UpdateDeck(DuelPlayer* dp, unsigned char* pdata, int len) { void SingleDuel::UpdateDeck(DuelPlayer* dp, unsigned char* pdata, int len) {
if(dp->type > 1 || ready[dp->type]) if(dp->type > 1 || ready[dp->type])
return; return;
if (len < 8 || len > sizeof(CTOS_DeckData))
return;
bool valid = true; bool valid = true;
CTOS_DeckData deckbuf; CTOS_DeckData deckbuf;
std::memcpy(&deckbuf, pdata, len); std::memcpy(&deckbuf, pdata, len);
......
...@@ -261,6 +261,8 @@ void TagDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) { ...@@ -261,6 +261,8 @@ void TagDuel::PlayerKick(DuelPlayer* dp, unsigned char pos) {
void TagDuel::UpdateDeck(DuelPlayer* dp, unsigned char* pdata, int len) { void TagDuel::UpdateDeck(DuelPlayer* dp, unsigned char* pdata, int len) {
if(dp->type > 3 || ready[dp->type]) if(dp->type > 3 || ready[dp->type])
return; return;
if (len < 8 || len > sizeof(CTOS_DeckData))
return;
bool valid = true; bool valid = true;
CTOS_DeckData deckbuf; CTOS_DeckData deckbuf;
std::memcpy(&deckbuf, pdata, len); std::memcpy(&deckbuf, pdata, len);
......
...@@ -6,7 +6,7 @@ android { ...@@ -6,7 +6,7 @@ android {
defaultConfig { defaultConfig {
applicationId "cn.garymb.ygomobile" applicationId "cn.garymb.ygomobile"
minSdkVersion 23 minSdkVersion 25
//noinspection ExpiredTargetSdkVersion //noinspection ExpiredTargetSdkVersion
targetSdkVersion 29 targetSdkVersion 29
versionCode 311140001 versionCode 311140001
......
...@@ -9,7 +9,6 @@ import android.net.Uri; ...@@ -9,7 +9,6 @@ import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.text.TextUtils;
import android.view.Gravity; import android.view.Gravity;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
...@@ -40,14 +39,13 @@ import cn.garymb.ygomobile.lite.R; ...@@ -40,14 +39,13 @@ import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.file.FileActivity; import cn.garymb.ygomobile.ui.file.FileActivity;
import cn.garymb.ygomobile.ui.file.FileOpenType; import cn.garymb.ygomobile.ui.file.FileOpenType;
import cn.garymb.ygomobile.ui.mycard.MyCard; import cn.garymb.ygomobile.ui.mycard.MyCard;
import cn.garymb.ygomobile.ui.mycard.bean.McUser;
import cn.garymb.ygomobile.ui.plus.DefWebChromeClient; import cn.garymb.ygomobile.ui.plus.DefWebChromeClient;
import cn.garymb.ygomobile.ui.plus.DefWebViewClient;
import cn.garymb.ygomobile.ui.widget.WebViewPlus; import cn.garymb.ygomobile.ui.widget.WebViewPlus;
import cn.garymb.ygomobile.utils.DownloadUtil; import cn.garymb.ygomobile.utils.DownloadUtil;
import cn.garymb.ygomobile.utils.FileUtils; import cn.garymb.ygomobile.utils.FileUtils;
import cn.garymb.ygomobile.utils.LogUtil; import cn.garymb.ygomobile.utils.LogUtil;
import cn.garymb.ygomobile.utils.YGOUtil; import cn.garymb.ygomobile.utils.YGOUtil;
import cn.garymb.ygomobile.utils.glide.GlideCompat;
import ocgcore.DataManager; import ocgcore.DataManager;
import ocgcore.data.Card; import ocgcore.data.Card;
...@@ -115,6 +113,12 @@ public class WebActivity extends BaseActivity implements View.OnClickListener { ...@@ -115,6 +113,12 @@ public class WebActivity extends BaseActivity implements View.OnClickListener {
return true; return true;
} }
}); });
mWebViewPlus.setWebViewClient(new DefWebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return super.shouldOverrideUrlLoading(view, url);
}
});
if (doIntent(getIntent())) { if (doIntent(getIntent())) {
mWebViewPlus.loadUrl(mUrl); mWebViewPlus.loadUrl(mUrl);
} }
......
...@@ -224,7 +224,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder { ...@@ -224,7 +224,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
if (cardInfo == null) { if (cardInfo == null) {
return; return;
} }
mListener.onGetRelatedCardList(relatedCards(cardInfo)); mListener.onShowCardList(relatedCards(cardInfo));
} }
}); });
findViewById(R.id.lastone).setOnClickListener((v) -> { findViewById(R.id.lastone).setOnClickListener((v) -> {
...@@ -319,7 +319,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder { ...@@ -319,7 +319,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
private void showPackList(Card cardInfo) { private void showPackList(Card cardInfo) {
Integer idToUse = cardInfo.Alias != 0 ? cardInfo.Alias : cardInfo.Code; Integer idToUse = cardInfo.Alias != 0 ? cardInfo.Alias : cardInfo.Code;
mListener.onShowPackList(packManager.getCards(cardLoader, idToUse)); mListener.onShowCardList(packManager.getCards(cardLoader, idToUse));
} }
public void setHighlightTextWithClickableSpans(String text) { public void setHighlightTextWithClickableSpans(String text) {
...@@ -391,7 +391,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder { ...@@ -391,7 +391,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
if (color != Color.WHITE) { if (color != Color.WHITE) {
// 获取被点击的文本内容 // 获取被点击的文本内容
String clickedText = ((TextView) widget).getText().subSequence(start, end).toString(); String clickedText = ((TextView) widget).getText().subSequence(start, end).toString();
mListener.onSearchKeyWord(clickedText); mListener.onShowCardList(queryList(clickedText));
} else { } else {
YGOUtil.showTextToast(context.getString(R.string.searchresult) + context.getString(R.string.already_end)); YGOUtil.showTextToast(context.getString(R.string.searchresult) + context.getString(R.string.already_end));
} }
...@@ -406,24 +406,32 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder { ...@@ -406,24 +406,32 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
}, start, end, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE); }, start, end, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);
} }
private boolean queryable(String keyword) { private List<Card> queryList(String keyword) {
// 检查关键词是否为空或仅包含空白字符 long setcode = DataManager.get().getStringManager().getSetCode(keyword);
if (TextUtils.isEmpty(keyword)) {
return false;
}
SparseArray<Card> cards = cardManager.getAllCards(); SparseArray<Card> cards = cardManager.getAllCards();
List<Card> matchingCards = new ArrayList<>(); List<Card> matchingCards = new ArrayList<>();
List<Long> cardInfoSetCodes = new ArrayList<>();
// 检查关键词是否存在于卡片名字或描述中 // 检查关键词是否存在于卡片名字或描述中
for (int i = 0; i < cards.size(); i++) { for (int i = 0; i < cards.size(); i++) {
Card card = cards.valueAt(i); Card card = cards.valueAt(i);
cardInfoSetCodes.clear();//每张卡调用前都清空字段表以防重复
// 将 card 的 setCode 转换为 List<Long>
for (long setCode : card.getSetCode()) {
if (setCode > 0) cardInfoSetCodes.add(setCode);
}
//关键词如果有对应字段则添加进去
if (cardInfoSetCodes.contains(setcode) && !matchingCards.contains(card)) matchingCards.add(card);
// 确保 card.Name 和 card.Desc 不为 null // 确保 card.Name 和 card.Desc 不为 null
if ((card.Name != null && card.Name.contains(keyword)) || if ((card.Name != null && card.Name.contains(keyword)) || (card.Desc != null && card.Desc.contains(keyword))) {
(card.Desc != null && card.Desc.contains(keyword))) { if (!matchingCards.contains(card)) matchingCards.add(card);
matchingCards.add(card);
} }
} }
return matchingCards;
}
private boolean queryable(String keyword) {
List<Card> matchingCards = queryList(keyword);
// 检查匹配结果 // 检查匹配结果
if (matchingCards.isEmpty()) { if (matchingCards.isEmpty()) {
return false; // 如果没有找到匹配的卡片,返回 false return false; // 如果没有找到匹配的卡片,返回 false
...@@ -453,7 +461,6 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder { ...@@ -453,7 +461,6 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
List<String> highlightedTexts = new ArrayList<>(spanStringList); List<String> highlightedTexts = new ArrayList<>(spanStringList);
// 使用 ArrayList 来保存匹配的卡片 // 使用 ArrayList 来保存匹配的卡片
List<Card> matchingCards = new ArrayList<>(); List<Card> matchingCards = new ArrayList<>();
// 将 cardInfo 的 setCode 转换为 List<Long> // 将 cardInfo 的 setCode 转换为 List<Long>
List<Long> cardInfoSetCodes = new ArrayList<>(); List<Long> cardInfoSetCodes = new ArrayList<>();
for (long setCode : cardInfo.getSetCode()) { for (long setCode : cardInfo.getSetCode()) {
...@@ -785,11 +792,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder { ...@@ -785,11 +792,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
void onImageUpdate(Card cardInfo); void onImageUpdate(Card cardInfo);
void onShowPackList(List<Card> packList); void onShowCardList(List<Card> cardList);
void onSearchKeyWord(String keyword);
void onGetRelatedCardList(List<Card> cardList);
void onClose(); void onClose();
} }
...@@ -813,17 +816,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder { ...@@ -813,17 +816,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
} }
@Override @Override
public void onShowPackList(List<Card> packList) { public void onShowCardList(List<Card> cardList) {
}
@Override
public void onSearchKeyWord(String keyword) {
}
@Override
public void onGetRelatedCardList(List<Card> cardList) {
} }
......
...@@ -304,17 +304,7 @@ public class CardSearchFragment extends BaseFragemnt implements CardLoader.CallB ...@@ -304,17 +304,7 @@ public class CardSearchFragment extends BaseFragemnt implements CardLoader.CallB
} }
@Override @Override
public void onShowPackList(List<Card> packList) { public void onShowCardList(List<Card> cardList) {
showCardList(packList, false);//保持原收录顺序,不排序
}
@Override
public void onSearchKeyWord(String keyword) {
showSearchKeyWord(keyword);
}
@Override
public void onGetRelatedCardList(List<Card> cardList) {
showCardList(cardList, true);//便于查看,排序 showCardList(cardList, true);//便于查看,排序
} }
...@@ -355,11 +345,6 @@ public class CardSearchFragment extends BaseFragemnt implements CardLoader.CallB ...@@ -355,11 +345,6 @@ public class CardSearchFragment extends BaseFragemnt implements CardLoader.CallB
} }
} }
private void showSearchKeyWord(String keyword) {
CardSearchInfo searchInfo = new CardSearchInfo.Builder().keyword(keyword).types(new long[]{}).build();//构建CardSearchInfo时type不能为null
mCardLoader.search(searchInfo);
}
private void showCardList(List<Card> cardList, boolean sort) { private void showCardList(List<Card> cardList, boolean sort) {
if (!cardList.isEmpty()) { if (!cardList.isEmpty()) {
onSearchResult(sort ? mCardLoader.sort(cardList) : cardList, false);//根据情况不同,判断是否调用CardLoader的sort方法排序List<Card> onSearchResult(sort ? mCardLoader.sort(cardList) : cardList, false);//根据情况不同,判断是否调用CardLoader的sort方法排序List<Card>
...@@ -368,7 +353,6 @@ public class CardSearchFragment extends BaseFragemnt implements CardLoader.CallB ...@@ -368,7 +353,6 @@ public class CardSearchFragment extends BaseFragemnt implements CardLoader.CallB
} }
} }
protected void showSearch(boolean autoclose) { protected void showSearch(boolean autoclose) {
if (autoclose && mDrawerlayout.isDrawerOpen(Constants.CARD_SEARCH_GRAVITY)) { if (autoclose && mDrawerlayout.isDrawerOpen(Constants.CARD_SEARCH_GRAVITY)) {
mDrawerlayout.closeDrawer(Constants.CARD_SEARCH_GRAVITY); mDrawerlayout.closeDrawer(Constants.CARD_SEARCH_GRAVITY);
......
...@@ -562,17 +562,7 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte ...@@ -562,17 +562,7 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
} }
@Override @Override
public void onShowPackList(List<Card> packList) { public void onShowCardList(List<Card> cardList) {
showCardList(packList, false);//保持原收录顺序,不排序
}
@Override
public void onSearchKeyWord(String keyword) {
showSearchKeyWord(keyword);//根据关键词搜索
}
@Override
public void onGetRelatedCardList(List<Card> cardList) {
showCardList(cardList, true);//便于查看,排序 showCardList(cardList, true);//便于查看,排序
} }
...@@ -624,11 +614,6 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte ...@@ -624,11 +614,6 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
} }
} }
private void showSearchKeyWord(String keyword) {
CardSearchInfo searchInfo = new CardSearchInfo.Builder().keyword(keyword).types(new long[]{}).build();//构建CardSearchInfo时type不能为null
mCardLoader.search(searchInfo);
}
private void showCardList(List<Card> cardList, boolean sort) { private void showCardList(List<Card> cardList, boolean sort) {
if (!cardList.isEmpty()) { if (!cardList.isEmpty()) {
onSearchResult(sort ? mCardLoader.sort(cardList) : cardList, false);//根据情况不同,判断是否调用CardLoader的sort方法排序List<Card> onSearchResult(sort ? mCardLoader.sort(cardList) : cardList, false);//根据情况不同,判断是否调用CardLoader的sort方法排序List<Card>
......
...@@ -40,7 +40,6 @@ ...@@ -40,7 +40,6 @@
android:layout_marginLeft="5dp" android:layout_marginLeft="5dp"
android:background="@drawable/button2_bg" android:background="@drawable/button2_bg"
android:gravity="center" android:gravity="center"
android:paddingLeft="16dp"
android:paddingRight="16dp" android:paddingRight="16dp"
android:shadowColor="@color/black" android:shadowColor="@color/black"
android:text="@string/card_faq" android:text="@string/card_faq"
......
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