pull/594/head
jhengazuki 6 months ago
parent f7db005429
commit 085845a5e0
  1. 2
      app/src/main/java/com/fongmi/android/tv/bean/Collect.java
  2. 21
      app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java
  3. 36
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java

@ -65,7 +65,7 @@ public class Collect implements Parcelable, Diffable<Collect> {
public boolean equals(@Nullable Object obj) {
if (this == obj) return true;
if (!(obj instanceof Collect it)) return false;
return getSite().equals(it.getSite()) && activated == it.activated;
return getSite().equals(it.getSite());
}
@Override

@ -49,11 +49,20 @@ public class SiteViewModel extends ViewModel {
private ExecutorService executor;
public SiteViewModel() {
this.episode = new MutableLiveData<>();
this.result = new MutableLiveData<>();
this.player = new MutableLiveData<>();
this.search = new MutableLiveData<>();
this.action = new MutableLiveData<>();
episode = new MutableLiveData<>();
result = new MutableLiveData<>();
player = new MutableLiveData<>();
search = new MutableLiveData<>();
action = new MutableLiveData<>();
}
public SiteViewModel init() {
search.setValue(null);
result.setValue(null);
player.setValue(null);
action.setValue(null);
episode.setValue(null);
return this;
}
public void setEpisode(Episode value) {
@ -271,7 +280,7 @@ public class SiteViewModel extends ViewModel {
private void post(Site site, Result result) {
if (result.getList().isEmpty()) return;
for (Vod vod : result.getList()) vod.setSite(site);
this.search.postValue(result);
search.postValue(result);
}
private void execute(MutableLiveData<Result> result, Callable<Result> callable) {

@ -91,18 +91,9 @@ public class CollectFragment extends BaseFragment implements MenuProvider, Colle
}
private void setViewModel() {
mViewModel = new ViewModelProvider(this).get(SiteViewModel.class);
mViewModel.search.observe(this, result -> {
if (mCollectAdapter.getPosition() == 0) mSearchAdapter.addItems(result.getList());
mCollectAdapter.addItem(Collect.create(result.getList()));
mCollectAdapter.add(result.getList());
});
mViewModel.result.observe(this, result -> {
boolean same = !result.getList().isEmpty() && mCollectAdapter.getActivated().getSite().equals(result.getList().get(0).getSite());
if (same) mCollectAdapter.getActivated().getList().addAll(result.getList());
if (same) mSearchAdapter.addItems(result.getList());
mScroller.endLoading(result);
});
mViewModel = new ViewModelProvider(this).get(SiteViewModel.class).init();
mViewModel.search.observe(this, this::setCollect);
mViewModel.result.observe(this, this::setSearch);
}
private List<Site> getSites() {
@ -112,9 +103,11 @@ public class CollectFragment extends BaseFragment implements MenuProvider, Colle
}
private void search() {
if (mExecutor != null) mExecutor.shutdownNow();
mExecutor = new PauseExecutor(20);
mCollectAdapter.setItems(List.of(Collect.all()));
for (Site site : getSites()) mExecutor.execute(() -> search(site, getKeyword()));
mCollectAdapter.setItems(List.of(Collect.all()), () -> {
for (Site site : getSites()) mExecutor.execute(() -> search(site, getKeyword()));
});
}
private void search(Site site, String keyword) {
@ -124,6 +117,21 @@ public class CollectFragment extends BaseFragment implements MenuProvider, Colle
}
}
private void setCollect(Result result) {
if (result == null) return;
if (mCollectAdapter.getPosition() == 0) mSearchAdapter.addItems(result.getList());
mCollectAdapter.addItem(Collect.create(result.getList()));
mCollectAdapter.add(result.getList());
}
private void setSearch(Result result) {
if (result == null) return;
boolean same = !result.getList().isEmpty() && mCollectAdapter.getActivated().getSite().equals(result.getList().get(0).getSite());
if (same) mCollectAdapter.getActivated().getList().addAll(result.getList());
if (same) mSearchAdapter.addItems(result.getList());
mScroller.endLoading(result);
}
@Override
public void onItemClick(int position, Collect item) {
mSearchAdapter.setItems(item.getList(), () -> mBinding.recycler.scrollToPosition(0));

Loading…
Cancel
Save