fongmi
jhengazuki 1 month ago
parent 8b4bca7e92
commit 92410714b2
  1. 2
      app/src/leanback/java/com/fongmi/android/tv/Product.java
  2. 6
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/CollectActivity.java
  3. 1
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  4. 2
      app/src/main/java/com/fongmi/android/tv/App.java
  5. 12
      app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java
  6. 4
      app/src/main/java/com/fongmi/android/tv/model/SearchTask.java
  7. 9
      app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java
  8. 2
      app/src/mobile/java/com/fongmi/android/tv/Product.java
  9. 1
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  10. 4
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java

@ -5,8 +5,6 @@ import com.fongmi.android.tv.utils.ResUtil;
public class Product { public class Product {
public static final int THREAD_COUNT = 10;
public static int getDeviceType() { public static int getDeviceType() {
return 0; return 0;
} }

@ -35,6 +35,7 @@ import com.google.gson.reflect.TypeToken;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
public class CollectActivity extends BaseActivity { public class CollectActivity extends BaseActivity {
@ -125,12 +126,11 @@ public class CollectActivity extends BaseActivity {
} }
private List<Site> getSites() { private List<Site> getSites() {
List<Site> items = new ArrayList<>(); return VodConfig.get().getSites().stream().filter(Site::isSearchable).collect(Collectors.toList());
for (Site site : VodConfig.get().getSites()) if (site.isSearchable()) items.add(site);
return items;
} }
private void search() { private void search() {
mViewModel.stopSearch();
List<Site> sites = getSites(); List<Site> sites = getSites();
if (sites.isEmpty()) return; if (sites.isEmpty()) return;
mAdapter.add(Collect.all()); mAdapter.add(Collect.all());

@ -1176,6 +1176,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
private void startSearch(String keyword) { private void startSearch(String keyword) {
mQuickAdapter.clear(); mQuickAdapter.clear();
mViewModel.stopSearch();
List<Site> sites = new ArrayList<>(); List<Site> sites = new ArrayList<>();
for (Site site : VodConfig.get().getSites()) if (isPass(site)) sites.add(site); for (Site site : VodConfig.get().getSites()) if (isPass(site)) sites.add(site);
mViewModel.searchContent(sites, keyword, true); mViewModel.searchContent(sites, keyword, true);

@ -46,7 +46,7 @@ public class App extends Application {
public App() { public App() {
instance = this; instance = this;
executor = Executors.newFixedThreadPool(Product.THREAD_COUNT); executor = Executors.newFixedThreadPool(5);
handler = HandlerCompat.createAsync(Looper.getMainLooper()); handler = HandlerCompat.createAsync(Looper.getMainLooper());
time = System.currentTimeMillis(); time = System.currentTimeMillis();
gson = new Gson(); gson = new Gson();

@ -81,11 +81,7 @@ public class LiveViewModel extends ViewModel {
} }
public void getXml(Live item) { public void getXml(Live item) {
execute(TaskType.XML, () -> { execute(TaskType.XML, () -> item.getEpgXml().stream().anyMatch(url -> parseXml(item, url)));
boolean result = false;
for (String url : item.getEpgXml()) if (parseXml(item, url)) result = true;
return result;
});
} }
private boolean parseXml(Live item, String url) { private boolean parseXml(Live item, String url) {
@ -126,7 +122,7 @@ public class LiveViewModel extends ViewModel {
private void setTimeZone(Live live) { private void setTimeZone(Live live) {
try { try {
TimeZone timeZone = live.getTimeZone().isEmpty() ? TimeZone.getDefault() : TimeZone.getTimeZone(live.getTimeZone()); TimeZone timeZone = live.getTimeZone().isEmpty() ? TimeZone.getDefault() : TimeZone.getTimeZone(live.getTimeZone());
for (SimpleDateFormat format : formatTime) format.setTimeZone(timeZone); formatTime.forEach(simpleDateFormat -> simpleDateFormat.setTimeZone(timeZone));
formatDate.setTimeZone(timeZone); formatDate.setTimeZone(timeZone);
} catch (Exception ignored) { } catch (Exception ignored) {
} }
@ -142,7 +138,7 @@ public class LiveViewModel extends ViewModel {
private <T> void execute(TaskType type, Callable<T> callable) { private <T> void execute(TaskType type, Callable<T> callable) {
Future<?> oldFuture = futures.get(type); Future<?> oldFuture = futures.get(type);
if (oldFuture != null && !oldFuture.isDone()) oldFuture.cancel(true); if (oldFuture != null && !oldFuture.isDone()) oldFuture.cancel(true);
final Future<T> newFuture = App.submit(callable); Future<T> newFuture = App.submit(callable);
futures.put(type, newFuture); futures.put(type, newFuture);
executor.execute(() -> { executor.execute(() -> {
try { try {
@ -169,7 +165,7 @@ public class LiveViewModel extends ViewModel {
@Override @Override
protected void onCleared() { protected void onCleared() {
super.onCleared(); super.onCleared();
for (Future<?> future : futures.values()) if (future != null) future.cancel(true); futures.values().forEach(future -> future.cancel(true));
if (executor != null) executor.shutdownNow(); if (executor != null) executor.shutdownNow();
} }
} }

@ -10,7 +10,7 @@ import com.github.catvod.utils.Trans;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
public class SearchCallable implements Callable<Result> { public class SearchTask implements Callable<Result> {
private final SiteViewModel model; private final SiteViewModel model;
private final String keyword; private final String keyword;
@ -18,7 +18,7 @@ public class SearchCallable implements Callable<Result> {
private final String page; private final String page;
private final Site site; private final Site site;
public SearchCallable(SiteViewModel model, Site site, String keyword, boolean quick, String page) { public SearchTask(SiteViewModel model, Site site, String keyword, boolean quick, String page) {
this.keyword = Trans.t2s(keyword); this.keyword = Trans.t2s(keyword);
this.model = model; this.model = model;
this.quick = quick; this.quick = quick;

@ -213,14 +213,11 @@ public class SiteViewModel extends ViewModel {
} }
public void searchContent(List<Site> sites, String keyword, boolean quick) { public void searchContent(List<Site> sites, String keyword, boolean quick) {
stopSearch(); //sites.forEach(site -> searchFuture.add(new SearchTask(this, site, keyword, quick, "1")));
for (Site site : sites) searchContent(site, keyword, quick, "1");
} }
public void searchContent(Site site, String keyword, boolean quick, String page) { public void searchContent(Site site, String keyword, boolean quick, String page) {
SearchCallable callable = new SearchCallable(this, site, keyword, quick, page); execute(result, new SearchTask(this, site, keyword, quick, page));
if (!page.equals("1")) execute(result, callable);
else searchFuture.add(App.submit(callable.run()));
} }
public void action(String key, String action) { public void action(String key, String action) {
@ -277,7 +274,7 @@ public class SiteViewModel extends ViewModel {
} }
public void stopSearch() { public void stopSearch() {
for (Future<?> f : searchFuture) f.cancel(true); searchFuture.forEach(future -> future.cancel(true));
searchFuture.clear(); searchFuture.clear();
} }

@ -9,8 +9,6 @@ import com.fongmi.android.tv.utils.ResUtil;
public class Product { public class Product {
public static final int THREAD_COUNT = 20;
public static int getDeviceType() { public static int getDeviceType() {
return 1; return 1;
} }

@ -1316,6 +1316,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
private void startSearch(String keyword) { private void startSearch(String keyword) {
mQuickAdapter.clear(); mQuickAdapter.clear();
mViewModel.stopSearch();
List<Site> sites = new ArrayList<>(); List<Site> sites = new ArrayList<>();
for (Site item : VodConfig.get().getSites()) if (isPass(item)) sites.add(item); for (Site item : VodConfig.get().getSites()) if (isPass(item)) sites.add(item);
mViewModel.searchContent(sites, keyword, true); mViewModel.searchContent(sites, keyword, true);

@ -97,8 +97,7 @@ public class CollectFragment extends BaseFragment implements MenuProvider, Colle
} }
private void setSites() { private void setSites() {
sites = new ArrayList<>(); sites = VodConfig.get().getSites().stream().filter(Site::isSearchable).collect(Collectors.toList());
for (Site site : VodConfig.get().getSites()) if (site.isSearchable()) sites.add(site);
} }
private void setWidth() { private void setWidth() {
@ -115,6 +114,7 @@ public class CollectFragment extends BaseFragment implements MenuProvider, Colle
} }
private void search() { private void search() {
mViewModel.stopSearch();
if (!sites.isEmpty()) mCollectAdapter.setItems(List.of(Collect.all()), () -> mViewModel.searchContent(sites, getKeyword(), false)); if (!sites.isEmpty()) mCollectAdapter.setItems(List.of(Collect.all()), () -> mViewModel.searchContent(sites, getKeyword(), false));
} }

Loading…
Cancel
Save