pull/605/head
jhengazuki 4 months ago
parent 1b1667883e
commit cc200aee38
  1. 6
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java
  2. 52
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  3. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java
  4. 8
      app/src/leanback/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java
  5. 6
      app/src/leanback/java/com/fongmi/android/tv/ui/holder/VodListHolder.java
  6. 4
      app/src/leanback/java/com/fongmi/android/tv/ui/holder/VodOvalHolder.java
  7. 8
      app/src/leanback/java/com/fongmi/android/tv/ui/holder/VodRectHolder.java
  8. 4
      app/src/leanback/java/com/fongmi/android/tv/ui/presenter/QuickPresenter.java
  9. 4
      app/src/leanback/res/layout/view_widget_cast.xml
  10. 4
      app/src/leanback/res/layout/view_widget_vod.xml
  11. 34
      app/src/main/java/com/fongmi/android/tv/bean/Flag.java
  12. 4
      app/src/main/java/com/fongmi/android/tv/bean/Result.java
  13. 99
      app/src/main/java/com/fongmi/android/tv/bean/Vod.java
  14. 31
      app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java
  15. 2
      app/src/main/java/com/fongmi/android/tv/player/Source.java
  16. 12
      app/src/main/java/com/fongmi/android/tv/player/extractor/Youtube.java
  17. 52
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  18. 4
      app/src/mobile/java/com/fongmi/android/tv/ui/adapter/QuickAdapter.java
  19. 6
      app/src/mobile/java/com/fongmi/android/tv/ui/adapter/SearchAdapter.java
  20. 2
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java
  21. 8
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java
  22. 6
      app/src/mobile/java/com/fongmi/android/tv/ui/holder/VodListHolder.java
  23. 4
      app/src/mobile/java/com/fongmi/android/tv/ui/holder/VodOvalHolder.java
  24. 8
      app/src/mobile/java/com/fongmi/android/tv/ui/holder/VodRectHolder.java

@ -402,14 +402,14 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
@Override
public void onItemClick(Vod item) {
if (item.isAction()) mViewModel.action(getHome().getKey(), item.getAction());
else if (getHome().isIndex()) CollectActivity.start(this, item.getVodName());
else VideoActivity.start(this, getHome().getKey(), item.getVodId(), item.getVodName(), item.getVodPic());
else if (getHome().isIndex()) CollectActivity.start(this, item.getName());
else VideoActivity.start(this, getHome().getKey(), item.getId(), item.getName(), item.getPic());
}
@Override
public boolean onLongClick(Vod item) {
if (item.isAction()) return false;
CollectActivity.start(this, item.getVodName());
CollectActivity.start(this, item.getName());
return true;
}

@ -408,8 +408,8 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
private void getDetail(Vod item) {
getIntent().putExtra("key", item.getSiteKey());
getIntent().putExtra("pic", item.getVodPic());
getIntent().putExtra("id", item.getVodId());
getIntent().putExtra("pic", item.getPic());
getIntent().putExtra("id", item.getId());
mBinding.scroll.scrollTo(0, 0);
mClock.setCallback(null);
mPlayers.reset();
@ -442,17 +442,17 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
private void setDetail(Vod item) {
mBinding.progressLayout.showContent();
mBinding.video.setTag(item.getVodPic(getPic()));
mBinding.name.setText(item.getVodName(getName()));
setText(mBinding.remark, 0, item.getVodRemarks());
setText(mBinding.year, R.string.detail_year, item.getVodYear());
setText(mBinding.area, R.string.detail_area, item.getVodArea());
mBinding.video.setTag(item.getPic(getPic()));
mBinding.name.setText(item.getName(getName()));
setText(mBinding.remark, 0, item.getRemarks());
setText(mBinding.year, R.string.detail_year, item.getYear());
setText(mBinding.area, R.string.detail_area, item.getArea());
setText(mBinding.type, R.string.detail_type, item.getTypeName());
setText(mBinding.site, R.string.detail_site, getSite().getName());
setText(mBinding.actor, R.string.detail_actor, item.getVodActor());
setText(mBinding.content, R.string.detail_content, item.getVodContent());
setText(mBinding.director, R.string.detail_director, item.getVodDirector());
mFlagAdapter.setItems(item.getVodFlags(), null);
setText(mBinding.actor, R.string.detail_actor, item.getActor());
setText(mBinding.content, R.string.detail_content, item.getContent());
setText(mBinding.director, R.string.detail_director, item.getDirector());
mFlagAdapter.setItems(item.getFlags(), null);
mBinding.content.setMaxLines(getMaxLines());
mBinding.video.requestFocus();
App.removeCallbacks(mR4);
@ -929,7 +929,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
}
private void checkFlag(Vod item) {
boolean empty = item.getVodFlags().isEmpty();
boolean empty = item.getFlags().isEmpty();
mBinding.flag.setVisibility(empty ? View.GONE : View.VISIBLE);
if (empty) {
ErrorEvent.flag(tag);
@ -947,8 +947,8 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
mBinding.control.opening.setText(mHistory.getOpening() <= 0 ? getString(R.string.play_op) : mPlayers.stringToTime(mHistory.getOpening()));
mBinding.control.ending.setText(mHistory.getEnding() <= 0 ? getString(R.string.play_ed) : mPlayers.stringToTime(mHistory.getEnding()));
mBinding.control.speed.setText(mPlayers.setSpeed(mHistory.getSpeed()));
mHistory.setVodName(item.getVodName());
mHistory.setVodPic(item.getVodPic());
mHistory.setVodName(item.getName());
mHistory.setVodPic(item.getPic());
setScale(getScale());
setPartAdapter();
setMetadata();
@ -959,8 +959,8 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
History history = new History();
history.setKey(getHistoryKey());
history.setCid(VodConfig.getCid());
history.setVodName(item.getVodName());
history.findEpisode(item.getVodFlags());
history.setVodName(item.getName());
history.findEpisode(item.getFlags());
return history;
}
@ -1004,12 +1004,12 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
}
private void updateVod(Vod item) {
mHistory.setVodPic(item.getVodPic());
mHistory.setVodName(item.getVodName());
mBinding.name.setText(item.getVodName());
mBinding.widget.title.setText(item.getVodName());
setText(mBinding.content, R.string.detail_content, item.getVodContent());
setText(mBinding.director, R.string.detail_director, item.getVodDirector());
mHistory.setVodPic(item.getPic());
mHistory.setVodName(item.getName());
mBinding.name.setText(item.getName());
mBinding.widget.title.setText(item.getName());
setText(mBinding.content, R.string.detail_content, item.getContent());
setText(mBinding.director, R.string.detail_director, item.getDirector());
mBinding.content.setMaxLines(getMaxLines());
setPartAdapter();
updateKeep();
@ -1198,11 +1198,11 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
}
private boolean mismatch(Vod item) {
if (getId().equals(item.getVodId())) return true;
if (mBroken.contains(item.getVodId())) return true;
if (getId().equals(item.getId())) return true;
if (mBroken.contains(item.getId())) return true;
String keyword = Objects.toString(mBinding.part.getTag(), "");
if (isAutoMode()) return !item.getVodName().equals(keyword);
else return !item.getVodName().contains(keyword);
if (isAutoMode()) return !item.getName().equals(keyword);
else return !item.getName().contains(keyword);
}
private void nextParse(int position) {

@ -119,7 +119,7 @@ public class CollectFragment extends BaseFragment implements CustomScroller.Call
public void onItemClick(Vod item) {
requireActivity().setResult(Activity.RESULT_OK);
if (item.isFolder()) VodActivity.start(requireActivity(), item.getSiteKey(), Result.folder(item));
else VideoActivity.collect(requireActivity(), item.getSiteKey(), item.getVodId(), item.getVodName(), item.getVodPic());
else VideoActivity.collect(requireActivity(), item.getSiteKey(), item.getId(), item.getName(), item.getPic());
}
@Override

@ -253,18 +253,18 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
if (item.isAction()) {
mViewModel.action(getKey(), item.getAction());
} else if (item.isFolder()) {
getParent().openFolder(item.getVodId(), mExtends);
getParent().openFolder(item.getId(), mExtends);
headerVisible = mBinding.recycler.isHeaderVisible();
} else {
if (getSite().isIndex()) CollectActivity.start(requireActivity(), item.getVodName());
else VideoActivity.start(requireActivity(), getKey(), item.getVodId(), item.getVodName(), item.getVodPic(), isFolder() ? item.getVodName() : null);
if (getSite().isIndex()) CollectActivity.start(requireActivity(), item.getName());
else VideoActivity.start(requireActivity(), getKey(), item.getId(), item.getName(), item.getPic(), isFolder() ? item.getName() : null);
}
}
@Override
public boolean onLongClick(Vod item) {
if (item.isAction() || item.isFolder()) return false;
CollectActivity.start(requireActivity(), item.getVodName());
CollectActivity.start(requireActivity(), item.getName());
return true;
}

@ -22,13 +22,13 @@ public class VodListHolder extends BaseVodHolder {
@Override
public void initView(Vod item) {
binding.name.setText(item.getVodName());
binding.remark.setText(item.getVodRemarks());
binding.name.setText(item.getName());
binding.remark.setText(item.getRemarks());
binding.name.setVisibility(item.getNameVisible());
binding.remark.setVisibility(item.getRemarkVisible());
binding.getRoot().setOnClickListener(v -> listener.onItemClick(item));
binding.getRoot().setOnLongClickListener(v -> listener.onLongClick(item));
ImgUtil.load(item.getVodName(), item.getVodPic(), binding.image, true);
ImgUtil.load(item.getName(), item.getPic(), binding.image, true);
}
@Override

@ -28,11 +28,11 @@ public class VodOvalHolder extends BaseVodHolder {
@Override
public void initView(Vod item) {
binding.name.setText(item.getVodName());
binding.name.setText(item.getName());
binding.name.setVisibility(item.getNameVisible());
binding.getRoot().setOnClickListener(v -> listener.onItemClick(item));
binding.getRoot().setOnLongClickListener(v -> listener.onLongClick(item));
ImgUtil.load(item.getVodName(), item.getVodPic(), binding.image);
ImgUtil.load(item.getName(), item.getPic(), binding.image);
}
@Override

@ -28,17 +28,17 @@ public class VodRectHolder extends BaseVodHolder {
@Override
public void initView(Vod item) {
binding.name.setText(item.getVodName());
binding.year.setText(item.getVodYear());
binding.name.setText(item.getName());
binding.year.setText(item.getYear());
binding.site.setText(item.getSiteName());
binding.remark.setText(item.getVodRemarks());
binding.remark.setText(item.getRemarks());
binding.site.setVisibility(item.getSiteVisible());
binding.year.setVisibility(item.getYearVisible());
binding.name.setVisibility(item.getNameVisible());
binding.remark.setVisibility(item.getRemarkVisible());
binding.getRoot().setOnClickListener(v -> listener.onItemClick(item));
binding.getRoot().setOnLongClickListener(v -> listener.onLongClick(item));
ImgUtil.load(item.getVodName(), item.getVodPic(), binding.image);
ImgUtil.load(item.getName(), item.getPic(), binding.image);
}
@Override

@ -43,9 +43,9 @@ public class QuickPresenter extends Presenter {
public void onBindViewHolder(@NonNull Presenter.ViewHolder viewHolder, Object object) {
Vod item = (Vod) object;
ViewHolder holder = (ViewHolder) viewHolder;
holder.binding.name.setText(item.getVodName());
holder.binding.name.setText(item.getName());
holder.binding.site.setText(item.getSiteName());
holder.binding.remark.setText(item.getVodRemarks());
holder.binding.remark.setText(item.getRemarks());
setOnClickListener(holder, view -> listener.onItemClick(item));
}

@ -8,7 +8,9 @@
android:id="@+id/top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp">
android:padding="16dp"
android:visibility="gone"
tools:visibility="visible">
<com.google.android.material.textview.MaterialTextView
android:id="@+id/title"

@ -8,7 +8,9 @@
android:id="@+id/top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp">
android:padding="16dp"
android:visibility="gone"
tools:visibility="visible">
<com.google.android.material.textview.MaterialTextView
android:id="@+id/title"

@ -41,15 +41,21 @@ public class Flag implements Parcelable, Diffable<Flag> {
return new Flag(flag).trans();
}
public static Flag create(String flag, String url) {
Flag item = create(flag);
item.setEpisodes(url);
return item;
}
public Flag() {
this.episodes = new ArrayList<>();
this.position = -1;
this.episodes = new ArrayList<>();
}
public Flag(String flag) {
this.episodes = new ArrayList<>();
this.flag = flag;
this.position = -1;
this.episodes = new ArrayList<>();
}
public String getShow() {
@ -65,7 +71,7 @@ public class Flag implements Parcelable, Diffable<Flag> {
}
public String getUrls() {
return urls;
return TextUtils.isEmpty(urls) ? "" : urls;
}
public List<Episode> getEpisodes() {
@ -89,16 +95,6 @@ public class Flag implements Parcelable, Diffable<Flag> {
this.position = position;
}
public void createEpisode(String data) {
String[] urls = data.contains("#") ? data.split("#") : new String[]{data};
for (int i = 0; i < urls.length; i++) {
String[] split = urls[i].split("\\$", 2);
String number = String.format(Locale.getDefault(), "%02d", i + 1);
Episode episode = split.length > 1 ? Episode.create(split[0].isEmpty() ? number : split[0].trim(), split[1]) : Episode.create(number, urls[i]);
if (!getEpisodes().contains(episode)) getEpisodes().add(episode);
}
}
public void toggle(boolean activated, Episode episode) {
if (activated) setActivated(episode);
else getEpisodes().forEach(Episode::deactivated);
@ -121,10 +117,14 @@ public class Flag implements Parcelable, Diffable<Flag> {
return strict ? null : getEpisodes().get(0);
}
public static List<Flag> create(String flag, String url) {
Flag item = Flag.create(flag);
item.getEpisodes().add(Episode.create("01", url));
return Arrays.asList(item);
public void setEpisodes(String url) {
String[] urls = url.contains("#") ? url.split("#") : new String[]{url};
for (int i = 0; i < urls.length; i++) {
String[] split = urls[i].split("\\$", 2);
String number = String.format(Locale.getDefault(), "%02d", i + 1);
Episode episode = split.length > 1 ? Episode.create(split[0].isEmpty() ? number : split[0].trim(), split[1]) : Episode.create(number, urls[i]);
if (!getEpisodes().contains(episode)) getEpisodes().add(episode);
}
}
public Flag trans() {

@ -136,8 +136,8 @@ public class Result implements Parcelable {
Result result = new Result();
Class type = new Class();
type.setTypeFlag("1");
type.setTypeId(item.getVodId());
type.setTypeName(item.getVodName());
type.setTypeId(item.getId());
type.setTypeName(item.getName());
result.setTypes(Arrays.asList(type));
return result;
}

@ -4,6 +4,7 @@ import android.os.Parcel;
import android.os.Parcelable;
import android.text.Html;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import androidx.annotation.Nullable;
@ -26,6 +27,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.IntStream;
@Root(strict = false)
public class Vod implements Parcelable, Diffable<Vod> {
@ -115,19 +117,19 @@ public class Vod implements Parcelable, Diffable<Vod> {
public Vod() {
}
public String getVodId() {
public String getId() {
return TextUtils.isEmpty(vodId) ? "" : vodId.trim();
}
public void setVodId(String vodId) {
public void setId(String vodId) {
this.vodId = vodId;
}
public String getVodName() {
public String getName() {
return TextUtils.isEmpty(vodName) ? "" : Html.fromHtml(vodName, Html.FROM_HTML_MODE_LEGACY).toString().trim();
}
public void setVodName(String vodName) {
public void setName(String vodName) {
this.vodName = vodName;
}
@ -135,59 +137,67 @@ public class Vod implements Parcelable, Diffable<Vod> {
return TextUtils.isEmpty(typeName) ? "" : typeName.trim();
}
public String getVodPic() {
public String getPic() {
return TextUtils.isEmpty(vodPic) ? "" : vodPic.trim();
}
public void setVodPic(String vodPic) {
public void setPic(String vodPic) {
this.vodPic = vodPic;
}
public String getVodRemarks() {
public String getRemarks() {
return TextUtils.isEmpty(vodRemarks) ? "" : vodRemarks.trim();
}
public String getVodYear() {
public String getYear() {
return TextUtils.isEmpty(vodYear) ? "" : vodYear.trim();
}
public String getVodArea() {
public String getArea() {
return TextUtils.isEmpty(vodArea) ? "" : vodArea.trim();
}
public String getVodDirector() {
public String getDirector() {
return TextUtils.isEmpty(vodDirector) ? "" : vodDirector.trim();
}
public void setVodDirector(String vodDirector) {
public void setDirector(String vodDirector) {
this.vodDirector = vodDirector;
}
public String getVodActor() {
public String getActor() {
return TextUtils.isEmpty(vodActor) ? "" : vodActor.trim();
}
public String getVodContent() {
public String getContent() {
return TextUtils.isEmpty(vodContent) ? "" : Util.clean(vodContent);
}
public void setVodContent(String vodContent) {
public void setContent(String vodContent) {
this.vodContent = vodContent;
}
public String getVodPlayFrom() {
public String getPlayFrom() {
return TextUtils.isEmpty(vodPlayFrom) ? "" : vodPlayFrom;
}
public String getVodPlayUrl() {
public void setPlayFrom(String vodPlayFrom) {
this.vodPlayFrom = vodPlayFrom;
}
public String getPlayUrl() {
return TextUtils.isEmpty(vodPlayUrl) ? "" : vodPlayUrl;
}
public String getVodWallpaper() {
public void setPlayUrl(String vodPlayUrl) {
this.vodPlayUrl = vodPlayUrl;
}
public String getWallpaper() {
return TextUtils.isEmpty(vodWallpaper) ? "" : vodWallpaper;
}
public String getVodTag() {
public String getTag() {
return TextUtils.isEmpty(vodTag) ? "" : vodTag;
}
@ -215,11 +225,11 @@ public class Vod implements Parcelable, Diffable<Vod> {
return ratio;
}
public List<Flag> getVodFlags() {
public List<Flag> getFlags() {
return vodFlags = vodFlags == null ? new ArrayList<>() : vodFlags;
}
public void setVodFlags(List<Flag> vodFlags) {
public void setFlags(List<Flag> vodFlags) {
this.vodFlags = vodFlags;
}
@ -244,19 +254,19 @@ public class Vod implements Parcelable, Diffable<Vod> {
}
public int getYearVisible() {
return getSite() != null || getVodYear().length() < 4 ? View.GONE : View.VISIBLE;
return getSite() != null || getYear().length() < 4 ? View.GONE : View.VISIBLE;
}
public int getNameVisible() {
return getVodName().isEmpty() ? View.GONE : View.VISIBLE;
return getName().isEmpty() ? View.GONE : View.VISIBLE;
}
public int getRemarkVisible() {
return getVodRemarks().isEmpty() ? View.GONE : View.VISIBLE;
return getRemarks().isEmpty() ? View.GONE : View.VISIBLE;
}
public boolean isFolder() {
return "folder".equals(getVodTag()) || getCate() != null;
return "folder".equals(getTag()) || getCate() != null;
}
public boolean isAction() {
@ -267,14 +277,22 @@ public class Vod implements Parcelable, Diffable<Vod> {
return getStyle() != null ? getStyle() : style != null ? style : Style.rect();
}
public String getVodPic(String pic) {
if (getVodPic().isEmpty()) setVodPic(pic);
return getVodPic();
public String getPic(String pic) {
if (getPic().isEmpty()) setPic(pic);
return getPic();
}
public String getVodName(String name) {
if (getVodName().isEmpty()) setVodName(name);
return getVodName();
public String getName(String name) {
if (getName().isEmpty()) setName(name);
return getName();
}
public Vod setFlags() {
String[] playUrls = getPlayUrl().split("\\$\\$\\$");
String[] playFlags = getPlayFrom().split("\\$\\$\\$");
if (!getFlags().isEmpty()) for (Flag item : getFlags()) item.setEpisodes(item.getUrls());
else IntStream.range(0, playFlags.length).filter(i -> !playFlags[i].trim().isEmpty() && i < playUrls.length && !TextUtils.isEmpty(playUrls[i])).mapToObj(i -> Flag.create(playFlags[i].trim(), playUrls[i])).forEach(getFlags()::add);
return this;
}
public Vod trans() {
@ -289,31 +307,16 @@ public class Vod implements Parcelable, Diffable<Vod> {
return this;
}
public void setVodFlags() {
String[] playFlags = getVodPlayFrom().split("\\$\\$\\$");
String[] playUrls = getVodPlayUrl().split("\\$\\$\\$");
for (int i = 0; i < playFlags.length; i++) {
if (playFlags[i].isEmpty() || i >= playUrls.length) continue;
Flag item = Flag.create(playFlags[i].trim());
item.createEpisode(playUrls[i]);
getVodFlags().add(item);
}
for (Flag item : getVodFlags()) {
if (item.getUrls() == null) continue;
item.createEpisode(item.getUrls());
}
}
@Override
public boolean equals(@Nullable Object obj) {
if (this == obj) return true;
if (!(obj instanceof Vod it)) return false;
return !getVodId().isEmpty() && !it.getVodId().isEmpty() ? getVodId().equals(it.getVodId()) : getVodName().equals(it.getVodName());
return !getId().isEmpty() && !it.getId().isEmpty() ? getId().equals(it.getId()) : getName().equals(it.getName());
}
@Override
public int hashCode() {
return !getVodId().isEmpty() ? getVodId().hashCode() : getVodName().hashCode();
return !getId().isEmpty() ? getId().hashCode() : getName().hashCode();
}
@Override
@ -389,6 +392,6 @@ public class Vod implements Parcelable, Diffable<Vod> {
@Override
public boolean isSameContent(Vod other) {
return getVodName().equals(other.getVodName()) && getVodPic().equals(other.getVodPic()) && getVodRemarks().equals(other.getVodRemarks()) && Objects.equals(getSite(), other.getSite());
return getName().equals(other.getName()) && getPic().equals(other.getPic()) && getRemarks().equals(other.getRemarks()) && Objects.equals(getSite(), other.getSite());
}
}

@ -144,23 +144,22 @@ public class SiteViewModel extends ViewModel {
execute(result, () -> {
Site site = VodConfig.get().getSite(key);
SpiderDebug.log("detail", "key=%s,id=%s", key, id);
if (site.getType() == 3) {
if (site.isEmpty() && "push_agent".equals(key)) {
Vod vod = new Vod();
vod.setId(id);
vod.setName(id);
vod.setPlayUrl(id);
vod.setPlayFrom(ResUtil.getString(R.string.push));
vod.setPic(ResUtil.getString(R.string.push_image));
Source.get().parse(vod.setFlags());
return Result.vod(vod);
} else if (site.getType() == 3) {
Spider spider = site.recent().spider();
String detailContent = spider.detailContent(Arrays.asList(id));
SpiderDebug.log("detail", detailContent);
Result result = Result.fromJson(detailContent);
if (result.getList().isEmpty()) return result;
result.getVod().setVodFlags();
Source.get().parse(result.getVod());
Source.get().parse(result.getVod().setFlags());
return result;
} else if (site.isEmpty() && "push_agent".equals(key)) {
Vod vod = new Vod();
vod.setVodId(id);
vod.setVodName(id);
vod.setVodPic(ResUtil.getString(R.string.push_image));
vod.setVodFlags(Flag.create(ResUtil.getString(R.string.push), id));
Source.get().parse(vod);
return Result.vod(vod);
} else {
ArrayMap<String, String> params = new ArrayMap<>();
params.put("ac", site.getType() == 0 ? "videolist" : "detail");
@ -168,9 +167,7 @@ public class SiteViewModel extends ViewModel {
String detailContent = call(site, params);
SpiderDebug.log("detail", detailContent);
Result result = Result.fromType(site.getType(), detailContent);
if (result.getList().isEmpty()) return result;
result.getVod().setVodFlags();
Source.get().parse(result.getVod());
Source.get().parse(result.getVod().setFlags());
return result;
}
});
@ -253,10 +250,10 @@ public class SiteViewModel extends ViewModel {
}
public Result fetchPic(Site site, Result result) throws Exception {
if (site.getType() > 2 || result.getList().isEmpty() || !result.getVod().getVodPic().isEmpty()) return result;
if (site.getType() > 2 || result.getList().isEmpty() || !result.getVod().getPic().isEmpty()) return result;
ArrayList<String> ids = new ArrayList<>();
boolean empty = site.getCategories().isEmpty();
for (Vod item : result.getList()) if (empty || site.getCategories().contains(item.getTypeName())) ids.add(item.getVodId());
for (Vod item : result.getList()) if (empty || site.getCategories().contains(item.getTypeName())) ids.add(item.getId());
if (ids.isEmpty()) return result.clear();
ArrayMap<String, String> params = new ArrayMap<>();
params.put("ac", site.getType() == 0 ? "videolist" : "detail");

@ -66,7 +66,7 @@ public class Source {
public void parse(Vod vod) throws Exception {
try (ExecutorService executor = Executors.newCachedThreadPool()) {
for (Flag flag : vod.getVodFlags()) {
for (Flag flag : vod.getFlags()) {
List<Callable<List<Episode>>> items = new ArrayList<>();
Iterator<Episode> iterator = flag.getEpisodes().iterator();
while (iterator.hasNext()) addCallable(iterator, items);

@ -55,15 +55,15 @@ public class Youtube implements Source.Extractor {
private Vod convert(StreamInfo info) {
try {
Vod vod = new Vod();
vod.setVodName(info.getName());
vod.setVodDirector(info.getUploaderName());
vod.setVodContent(info.getDescription().getContent());
vod.setVodPic(info.getThumbnails().get(info.getThumbnails().size() - 1).getUrl());
vod.setName(info.getName());
vod.setDirector(info.getUploaderName());
vod.setContent(info.getDescription().getContent());
vod.setPic(info.getThumbnails().get(info.getThumbnails().size() - 1).getUrl());
return vod;
} catch (Exception e) {
Vod vod = new Vod();
vod.setVodName(info.getName());
vod.setVodContent(info.getDescription().getContent());
vod.setName(info.getName());
vod.setContent(info.getDescription().getContent());
return vod;
}
}

@ -439,8 +439,8 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
private void getDetail(Vod item) {
getIntent().putExtra("key", item.getSiteKey());
getIntent().putExtra("pic", item.getVodPic());
getIntent().putExtra("id", item.getVodId());
getIntent().putExtra("pic", item.getPic());
getIntent().putExtra("id", item.getId());
mBinding.swipeLayout.setRefreshing(true);
mBinding.swipeLayout.setEnabled(false);
mBinding.scroll.scrollTo(0, 0);
@ -478,15 +478,15 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
private void setDetail(Vod item) {
mBinding.progressLayout.showContent();
mBinding.video.setTag(item.getVodPic(getPic()));
mBinding.name.setText(item.getVodName(getName()));
setText(mBinding.remark, 0, item.getVodRemarks());
setText(mBinding.content, 0, item.getVodContent());
mBinding.video.setTag(item.getPic(getPic()));
mBinding.name.setText(item.getName(getName()));
setText(mBinding.remark, 0, item.getRemarks());
setText(mBinding.content, 0, item.getContent());
setText(mBinding.site, R.string.detail_site, getSite().getName());
setText(mBinding.actor, R.string.detail_actor, item.getVodActor());
setText(mBinding.director, R.string.detail_director, item.getVodDirector());
setText(mBinding.actor, R.string.detail_actor, item.getActor());
setText(mBinding.director, R.string.detail_director, item.getDirector());
mBinding.contentLayout.setVisibility(mBinding.content.getVisibility());
mFlagAdapter.addAll(item.getVodFlags());
mFlagAdapter.addAll(item.getFlags());
setOther(mBinding.other, item);
App.removeCallbacks(mR4);
checkHistory(item);
@ -533,8 +533,8 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
private void setOther(TextView view, Vod item) {
StringBuilder sb = new StringBuilder();
if (!item.getVodYear().isEmpty()) sb.append(getString(R.string.detail_year, item.getVodYear())).append(" ");
if (!item.getVodArea().isEmpty()) sb.append(getString(R.string.detail_area, item.getVodArea())).append(" ");
if (!item.getYear().isEmpty()) sb.append(getString(R.string.detail_year, item.getYear())).append(" ");
if (!item.getArea().isEmpty()) sb.append(getString(R.string.detail_area, item.getArea())).append(" ");
if (!item.getTypeName().isEmpty()) sb.append(getString(R.string.detail_type, item.getTypeName())).append(" ");
view.setVisibility(sb.length() == 0 ? View.GONE : View.VISIBLE);
view.setText(Util.substring(sb.toString(), 2));
@ -1013,7 +1013,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
}
private void checkFlag(Vod item) {
boolean empty = item.getVodFlags().isEmpty();
boolean empty = item.getFlags().isEmpty();
mBinding.flag.setVisibility(empty ? View.GONE : View.VISIBLE);
if (empty) {
ErrorEvent.flag(tag);
@ -1031,8 +1031,8 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
mBinding.control.action.opening.setText(mHistory.getOpening() <= 0 ? getString(R.string.play_op) : mPlayers.stringToTime(mHistory.getOpening()));
mBinding.control.action.ending.setText(mHistory.getEnding() <= 0 ? getString(R.string.play_ed) : mPlayers.stringToTime(mHistory.getEnding()));
mBinding.control.action.speed.setText(mPlayers.setSpeed(mHistory.getSpeed()));
mHistory.setVodName(item.getVodName());
mHistory.setVodPic(item.getVodPic());
mHistory.setVodName(item.getName());
mHistory.setVodPic(item.getPic());
setScale(getScale());
setMetadata();
setArtwork();
@ -1042,8 +1042,8 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
History history = new History();
history.setKey(getHistoryKey());
history.setCid(VodConfig.getCid());
history.setVodName(item.getVodName());
history.findEpisode(item.getVodFlags());
history.setVodName(item.getName());
history.findEpisode(item.getFlags());
return history;
}
@ -1104,12 +1104,12 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
}
private void updateVod(Vod item) {
mHistory.setVodPic(item.getVodPic());
mHistory.setVodName(item.getVodName());
mBinding.name.setText(item.getVodName());
mBinding.control.title.setText(item.getVodName());
setText(mBinding.content, 0, item.getVodContent());
setText(mBinding.director, R.string.detail_director, item.getVodDirector());
mHistory.setVodPic(item.getPic());
mHistory.setVodName(item.getName());
mBinding.name.setText(item.getName());
mBinding.control.title.setText(item.getName());
setText(mBinding.content, 0, item.getContent());
setText(mBinding.director, R.string.detail_director, item.getDirector());
mBinding.contentLayout.setVisibility(mBinding.content.getVisibility());
updateKeep();
setArtwork();
@ -1333,11 +1333,11 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
}
private boolean mismatch(Vod item) {
if (getId().equals(item.getVodId())) return true;
if (mBroken.contains(item.getVodId())) return true;
if (getId().equals(item.getId())) return true;
if (mBroken.contains(item.getId())) return true;
String keyword = mBinding.name.getText().toString();
if (isAutoMode()) return !item.getVodName().equals(keyword);
else return !item.getVodName().contains(keyword);
if (isAutoMode()) return !item.getName().equals(keyword);
else return !item.getName().contains(keyword);
}
private void nextParse(int position) {

@ -65,9 +65,9 @@ public class QuickAdapter extends RecyclerView.Adapter<QuickAdapter.ViewHolder>
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Vod item = mItems.get(position);
holder.binding.name.setText(item.getVodName());
holder.binding.name.setText(item.getName());
holder.binding.site.setText(item.getSiteName());
holder.binding.remark.setText(item.getVodRemarks());
holder.binding.remark.setText(item.getRemarks());
holder.binding.getRoot().setOnClickListener(v -> listener.onItemClick(item));
}

@ -33,13 +33,13 @@ public class SearchAdapter extends BaseDiffAdapter<Vod, SearchAdapter.ViewHolder
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Vod item = getItem(position);
holder.binding.name.setText(item.getVodName());
holder.binding.name.setText(item.getName());
holder.binding.site.setText(item.getSiteName());
holder.binding.remark.setText(item.getVodRemarks());
holder.binding.remark.setText(item.getRemarks());
holder.binding.site.setVisibility(item.getSiteVisible());
holder.binding.remark.setVisibility(item.getRemarkVisible());
holder.binding.getRoot().setOnClickListener(v -> listener.onItemClick(item));
ImgUtil.load(item.getVodName(), item.getVodPic(), holder.binding.image);
ImgUtil.load(item.getName(), item.getPic(), holder.binding.image);
}
@Override

@ -159,7 +159,7 @@ public class CollectFragment extends BaseFragment implements MenuProvider, Colle
@Override
public void onItemClick(Vod item) {
if (item.isFolder()) FolderActivity.start(requireActivity(), item.getSiteKey(), Result.folder(item));
else VideoActivity.collect(requireActivity(), item.getSiteKey(), item.getVodId(), item.getVodName(), item.getVodPic());
else VideoActivity.collect(requireActivity(), item.getSiteKey(), item.getId(), item.getName(), item.getPic());
}
@Override

@ -193,17 +193,17 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
if (item.isAction()) {
mViewModel.action(getKey(), item.getAction());
} else if (item.isFolder()) {
getParent().openFolder(item.getVodId(), mExtends);
getParent().openFolder(item.getId(), mExtends);
} else {
if (getSite().isIndex()) SearchActivity.start(requireActivity(), item.getVodName());
else VideoActivity.start(requireActivity(), getKey(), item.getVodId(), item.getVodName(), item.getVodPic(), isFolder() ? item.getVodName() : null);
if (getSite().isIndex()) SearchActivity.start(requireActivity(), item.getName());
else VideoActivity.start(requireActivity(), getKey(), item.getId(), item.getName(), item.getPic(), isFolder() ? item.getName() : null);
}
}
@Override
public boolean onLongClick(Vod item) {
if (item.isAction() || item.isFolder()) return false;
SearchActivity.start(requireActivity(), item.getVodName());
SearchActivity.start(requireActivity(), item.getName());
return true;
}
}

@ -22,13 +22,13 @@ public class VodListHolder extends BaseVodHolder {
@Override
public void initView(Vod item) {
binding.name.setText(item.getVodName());
binding.remark.setText(item.getVodRemarks());
binding.name.setText(item.getName());
binding.remark.setText(item.getRemarks());
binding.name.setVisibility(item.getNameVisible());
binding.remark.setVisibility(item.getRemarkVisible());
binding.getRoot().setOnClickListener(v -> listener.onItemClick(item));
binding.getRoot().setOnLongClickListener(v -> listener.onLongClick(item));
ImgUtil.load(item.getVodName(), item.getVodPic(), binding.image);
ImgUtil.load(item.getName(), item.getPic(), binding.image);
}
@Override

@ -28,11 +28,11 @@ public class VodOvalHolder extends BaseVodHolder {
@Override
public void initView(Vod item) {
binding.name.setText(item.getVodName());
binding.name.setText(item.getName());
binding.name.setVisibility(item.getNameVisible());
binding.getRoot().setOnClickListener(v -> listener.onItemClick(item));
binding.getRoot().setOnLongClickListener(v -> listener.onLongClick(item));
ImgUtil.load(item.getVodName(), item.getVodPic(), binding.image);
ImgUtil.load(item.getName(), item.getPic(), binding.image);
}
@Override

@ -28,17 +28,17 @@ public class VodRectHolder extends BaseVodHolder {
@Override
public void initView(Vod item) {
binding.name.setText(item.getVodName());
binding.year.setText(item.getVodYear());
binding.name.setText(item.getName());
binding.year.setText(item.getYear());
binding.site.setText(item.getSiteName());
binding.remark.setText(item.getVodRemarks());
binding.remark.setText(item.getRemarks());
binding.site.setVisibility(item.getSiteVisible());
binding.name.setVisibility(item.getNameVisible());
binding.year.setVisibility(item.getYearVisible());
binding.remark.setVisibility(item.getRemarkVisible());
binding.getRoot().setOnClickListener(v -> listener.onItemClick(item));
binding.getRoot().setOnLongClickListener(v -> listener.onLongClick(item));
ImgUtil.load(item.getVodName(), item.getVodPic(), binding.image);
ImgUtil.load(item.getName(), item.getPic(), binding.image);
}
@Override

Loading…
Cancel
Save