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