Skip to content

Commit

Permalink
Merge pull request #588 from LoxiaLiSA/master
Browse files Browse the repository at this point in the history
sync
  • Loading branch information
CeuiLiSA committed Mar 6, 2024
2 parents 1611394 + e811a76 commit efb5f08
Show file tree
Hide file tree
Showing 21 changed files with 507 additions and 35 deletions.
5 changes: 2 additions & 3 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 11 additions & 10 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ android {
applicationId "ceui.lisa.pixiv"
minSdkVersion 21
targetSdkVersion 33
versionCode 270
versionName "3.3.8"
versionCode 272
versionName "3.3.9"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

javaCompileOptions {
Expand Down Expand Up @@ -139,14 +139,15 @@ dependencies {
// api 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.3'
// api 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.3'

implementation 'io.github.scwang90:refresh-layout-kernel:2.0.5' //核心必须依赖
implementation 'io.github.scwang90:refresh-header-classics:2.0.5' //经典刷新头
implementation 'io.github.scwang90:refresh-header-radar:2.0.5' //雷达刷新头
implementation 'io.github.scwang90:refresh-header-falsify:2.0.5' //虚拟刷新头
implementation 'io.github.scwang90:refresh-header-material:2.0.5' //谷歌刷新头
implementation 'io.github.scwang90:refresh-header-two-level:2.0.5' //二级刷新头
implementation 'io.github.scwang90:refresh-footer-ball:2.0.5' //球脉冲加载
implementation 'io.github.scwang90:refresh-footer-classics:2.0.5' //经典加载
def refresh_version = "2.0.6"
implementation "io.github.scwang90:refresh-layout-kernel:$refresh_version" //核心必须依赖
implementation "io.github.scwang90:refresh-header-classics:$refresh_version" //经典刷新头
implementation "io.github.scwang90:refresh-header-radar:$refresh_version" //雷达刷新头
implementation "io.github.scwang90:refresh-header-falsify:$refresh_version" //虚拟刷新头
implementation "io.github.scwang90:refresh-header-material:$refresh_version" //谷歌刷新头
implementation "io.github.scwang90:refresh-header-two-level:$refresh_version" //二级刷新头
implementation "io.github.scwang90:refresh-footer-ball:$refresh_version" //球脉冲加载
implementation "io.github.scwang90:refresh-footer-classics:$refresh_version" //经典加载

// okhttp3系列组件版本最高到 4.4.1,参看 RubySSLSocketFactory
implementation 'com.squareup.okhttp3:logging-interceptor:4.4.1'
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/ceui/lisa/adapters/IAdapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ public void onItemClick(View v, int position, int viewType) {

Intent intent = new Intent(mContext, VActivity.class);
intent.putExtra(Params.POSITION, position);
intent.putExtra(Params.PAGE_UUID, pageData.getUUID());
intent.putExtra(Params.PAGE_UUID, uuid);
mContext.startActivity(intent);
}
});
Expand Down
72 changes: 69 additions & 3 deletions app/src/main/java/ceui/lisa/fragments/FragmentNovelHolder.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,11 @@
import com.zhy.view.flowlayout.TagAdapter;
import com.zhy.view.flowlayout.TagFlowLayout;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;

import androidx.annotation.NonNull;
import androidx.appcompat.widget.Toolbar;
Expand All @@ -49,12 +52,19 @@
import ceui.lisa.models.NovelDetail;
import ceui.lisa.models.NovelSearchResponse;
import ceui.lisa.models.TagsBean;
import ceui.lisa.models.WebNovel;
import ceui.lisa.utils.Common;
import ceui.lisa.utils.Dev;
import ceui.lisa.utils.GlideUtil;
import ceui.lisa.utils.Params;
import ceui.lisa.utils.PixivOperate;
import ceui.lisa.view.ScrollChange;
import ceui.loxia.SpaceHolder;
import ceui.loxia.TextDescHolder;
import ceui.loxia.novel.NovelImageHolder;
import ceui.loxia.novel.NovelTextHolder;
import ceui.refactor.CommonAdapter;
import ceui.refactor.ListItemHolder;
import gdut.bsx.share2.Share2;
import gdut.bsx.share2.ShareContentType;
import io.reactivex.android.schedulers.AndroidSchedulers;
Expand All @@ -68,6 +78,7 @@ public class FragmentNovelHolder extends BaseFragment<FragmentNovelHolderBinding
private boolean isOpen = false;
private NovelBean mNovelBean;
private NovelDetail mNovelDetail;
private WebNovel mWebNovel;

public static FragmentNovelHolder newInstance(NovelBean novelBean) {
Bundle args = new Bundle();
Expand Down Expand Up @@ -239,7 +250,8 @@ public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response)
baseBind.progressRela.setVisibility(View.INVISIBLE);
new WebNovelParser(response) {
@Override
public void onNovelPrepared(@NonNull NovelDetail novelDetail) {
public void onNovelPrepared(@NonNull NovelDetail novelDetail, @NonNull WebNovel webNovel) {
mWebNovel = webNovel;
novelDetail.setParsedChapters(NovelParseHelper.tryParseChapters(novelDetail.getNovel_text()));
refreshDetail(novelDetail);
}
Expand Down Expand Up @@ -415,9 +427,63 @@ public void doSomething(Uri uri) {
private void setNovelAdapter() {
NovelDetail novelDetail = mNovelDetail;
// 如果解析成功,就使用新方式
String novelText = novelDetail.getNovel_text();
if (novelText == null || novelText.isEmpty()) {
novelText = "";
}
if(novelDetail.getParsedChapters() != null && novelDetail.getParsedChapters().size() > 0){

baseBind.viewPager.setAdapter(new VNewAdapter(novelDetail.getParsedChapters(), mContext));
String uploadedImageMark = "[uploadedimage:";
String pixivImageMark = "[pixivimage:";
if (novelText.contains(uploadedImageMark) || novelText.contains(pixivImageMark)) {
do {
novelText = novelText.replace("][", "]\n[");
} while (novelText.contains("]["));
String[] stringArray = novelText.split("\n");
List<String> textList = new ArrayList<>(Arrays.asList(stringArray));
List<ListItemHolder> holderList = new ArrayList<>();
holderList.add(new SpaceHolder());
for (String s : textList) {
if (s.contains(uploadedImageMark)) {
long id = 0L;
int startIndex = s.indexOf(uploadedImageMark) + uploadedImageMark.length();
int endIndex = s.indexOf("]");
try {
id = Long.parseLong(s.substring(startIndex, endIndex));
} catch (Exception exception) {
exception.printStackTrace();
}
holderList.add(new NovelImageHolder(NovelImageHolder.Type.UploadedImage, id, 0, mWebNovel));
} else if (s.contains(pixivImageMark)) {
long id = 0L;
int startIndex = s.indexOf(pixivImageMark) + pixivImageMark.length();
int endIndex = s.indexOf("]");
String result = s.substring(startIndex, endIndex);
int indexInIllust = 0;
try {
if (result.contains("-")) {
String[] ret = result.split("-");
indexInIllust = Integer.parseInt(ret[1]);
id = Long.parseLong(ret[0]);
} else {
id = Long.parseLong(result);
}
} catch (Exception exception) {
exception.printStackTrace();
}
holderList.add(new NovelImageHolder(NovelImageHolder.Type.PixivImage, id, indexInIllust, mWebNovel));
} else {
holderList.add(new NovelTextHolder(s, Common.getNovelTextColor()));
}
}
holderList.add(new SpaceHolder());
holderList.add(new TextDescHolder(getString(R.string.string_107)));
holderList.add(new SpaceHolder());
CommonAdapter commonAdapter = new CommonAdapter(getViewLifecycleOwner());
baseBind.viewPager.setAdapter(commonAdapter);
commonAdapter.submitList(holderList);
} else {
baseBind.viewPager.setAdapter(new VNewAdapter(novelDetail.getParsedChapters(), mContext));
}
if(novelDetail.getNovel_marker() != null){
int parsedSize = novelDetail.getParsedChapters().size();
int pageIndex = Math.min(novelDetail.getNovel_marker().getPage(),novelDetail.getParsedChapters().get(parsedSize-1).getChapterIndex());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import ceui.lisa.models.NovelDetail;
import ceui.lisa.models.NovelSeriesItem;
import ceui.lisa.models.UserBean;
import ceui.lisa.models.WebNovel;
import ceui.lisa.repo.NovelSeriesDetailRepo;
import ceui.lisa.utils.Common;
import ceui.lisa.utils.GlideUtil;
Expand Down Expand Up @@ -79,7 +80,7 @@ public boolean onMenuItemClick(MenuItem item) {
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
new WebNovelParser(response) {
@Override
public void onNovelPrepared(@NonNull NovelDetail novelDetail) {
public void onNovelPrepared(@NonNull NovelDetail novelDetail, @NonNull WebNovel webNovel) {
saveNovelToDownload(novelBean, novelDetail);
}
};
Expand Down Expand Up @@ -109,7 +110,7 @@ public void onFailure(Call<ResponseBody> call, Throwable t) {
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
new WebNovelParser(response) {
@Override
public void onNovelPrepared(@NonNull NovelDetail novelDetail) {
public void onNovelPrepared(@NonNull NovelDetail novelDetail, @NonNull WebNovel webNovel) {
String sb = lineSeparator + novelBean.getTitle() + " - " + novelBean.getId() + lineSeparator +
novelDetail.getNovel_text();
taskContainer.put(novelBean.getId(), sb);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,6 @@ public static FragmentSearchNovel newInstance() {
return fragment;
}

@Override
public void initLayout() {
mLayoutID = R.layout.fragment_base_scroll_list;
}

@Override
public void initModel() {
searchModel = new ViewModelProvider(requireActivity()).get(SearchModel.class);
Expand Down
7 changes: 5 additions & 2 deletions app/src/main/java/ceui/lisa/fragments/WebNovelParser.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package ceui.lisa.fragments

import ceui.lisa.models.NovelDetail
import ceui.lisa.models.WebNovel
import ceui.lisa.utils.Common
import com.google.gson.Gson
import okhttp3.ResponseBody
import retrofit2.Response
Expand All @@ -16,17 +17,19 @@ abstract class WebNovelParser(response: Response<ResponseBody>) {
val cleaned = it.trim()
val result = cleaned.substring(7, cleaned.length - 1)
val webNovel = Gson().fromJson(result, WebNovel::class.java)
Common.showLog("${webNovel.illusts}")
onNovelPrepared(NovelDetail().apply {
novel_text = webNovel.text
series_next = webNovel.seriesNavigation?.nextNovel
series_prev = webNovel.seriesNavigation?.prevNovel
})
novel_marker = webNovel.marker
}, webNovel)
}
}
} catch (ex: Exception) {
ex.printStackTrace()
}
}

abstract fun onNovelPrepared(novelDetail: NovelDetail)
abstract fun onNovelPrepared(novelDetail: NovelDetail, webNovel: WebNovel)
}
15 changes: 15 additions & 0 deletions app/src/main/java/ceui/loxia/SpaceHolder.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package ceui.loxia

import ceui.lisa.databinding.CellSpaceBinding
import ceui.refactor.ListItemHolder
import ceui.refactor.ListItemViewHolder

class SpaceHolder : ListItemHolder() {
}

class SpaceViewHolder(private val bd: CellSpaceBinding) : ListItemViewHolder<CellSpaceBinding, SpaceHolder>(bd) {

override fun onBindViewHolder(holder: SpaceHolder, position: Int) {
super.onBindViewHolder(holder, position)
}
}
17 changes: 17 additions & 0 deletions app/src/main/java/ceui/loxia/TextDescHolder.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package ceui.loxia

import ceui.lisa.databinding.CellSpaceBinding
import ceui.lisa.databinding.CellTextDescBinding
import ceui.refactor.ListItemHolder
import ceui.refactor.ListItemViewHolder

class TextDescHolder(val content: String) : ListItemHolder() {
}

class TextDescViewHolder(private val bd: CellTextDescBinding) : ListItemViewHolder<CellTextDescBinding, TextDescHolder>(bd) {

override fun onBindViewHolder(holder: TextDescHolder, position: Int) {
super.onBindViewHolder(holder, position)
binding.text.text = holder.content
}
}
75 changes: 75 additions & 0 deletions app/src/main/java/ceui/loxia/novel/NovelTextHolder.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package ceui.loxia.novel

import ceui.lisa.activities.Shaft
import ceui.lisa.databinding.CellNovelImageBinding
import ceui.lisa.databinding.CellNovelTextBinding
import ceui.lisa.models.NovelImages
import ceui.lisa.models.WebNovel
import ceui.lisa.utils.Common
import ceui.lisa.utils.GlideUtil
import ceui.lisa.utils.PixivOperate
import ceui.refactor.ListItemHolder
import ceui.refactor.ListItemViewHolder
import ceui.refactor.setOnClick
import com.bumptech.glide.Glide
import com.bumptech.glide.load.model.GlideUrl
import java.util.HashMap

class NovelTextHolder(val text: String, val textColor: Int) : ListItemHolder() {

}

class NovelTextViewHolder(private val bd: CellNovelTextBinding) : ListItemViewHolder<CellNovelTextBinding, NovelTextHolder>(bd) {

override fun onBindViewHolder(holder: NovelTextHolder, position: Int) {
super.onBindViewHolder(holder, position)
binding.novelText.text = holder.text
binding.novelText.setTextColor(holder.textColor)
}
}

class NovelImageHolder(
val type: Int,
val id: Long,
val indexInIllust: Int,
val webNovel: WebNovel
) : ListItemHolder() {


object Type {
const val UploadedImage = 1
const val PixivImage = 2
}
}

class NovelImageViewHolder(private val bd: CellNovelImageBinding) : ListItemViewHolder<CellNovelImageBinding, NovelImageHolder>(bd) {

override fun onBindViewHolder(holder: NovelImageHolder, position: Int) {
super.onBindViewHolder(holder, position)
if (holder.type == NovelImageHolder.Type.UploadedImage) {
val urls = holder.webNovel.images?.get(holder.id.toString())?.urls
val url = urls?.get(NovelImages.Size.Size1200x1200)
Glide.with(binding.novelImage).load(url?.toGlideUrl()).into(binding.novelImage)
} else if (holder.type == NovelImageHolder.Type.PixivImage) {
val urls = if (holder.indexInIllust == 0) {
holder.webNovel.illusts?.get(holder.id.toString())?.illust?.images?.medium
} else {
holder.webNovel.illusts?.get("${holder.id}-${holder.indexInIllust}")?.illust?.images?.medium
}
binding.novelImage.setOnClick {
PixivOperate.getIllustByID(Shaft.sUserModel, holder.id, binding.novelImage.context)
}
Common.showLog("sadsaddas2 ${urls}")
Glide.with(binding.novelImage).load(urls?.toGlideUrl()).into(binding.novelImage)
}
}
}

const val MAP_KEY_SMALL = "referer"
const val IMAGE_REFERER = "https://app-api.pixiv.net/"

fun String.toGlideUrl(): GlideUrl {
val hashMap = HashMap<String, String>()
hashMap[MAP_KEY_SMALL] = IMAGE_REFERER
return GlideUrl(this) { hashMap }
}

0 comments on commit efb5f08

Please sign in to comment.