diff --git a/app/build.gradle b/app/build.gradle index b24d49a95..ae1ea9393 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,7 +14,7 @@ android { //noinspection ExpiredTargetSdkVersion targetSdk 28 versionCode 237 - versionName "0611" + versionName "0613" javaCompileOptions { annotationProcessorOptions { arguments = ["room.schemaLocation": "$projectDir/schemas".toString()] diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index 9de366ddb..d3839ec00 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -236,8 +236,10 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, GroupP private void setViewModel() { mViewModel = new ViewModelProvider(this).get(LiveViewModel.class); mViewModel.url.observe(this, result -> mPlayers.start(result, getTimeout())); + mViewModel.xml.observe(this, this::setEpg); mViewModel.epg.observe(this, this::setEpg); mViewModel.live.observe(this, live -> { + mViewModel.getXml(live); hideProgress(); setGroup(live); setWidth(live); @@ -661,6 +663,10 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, GroupP setMetadata(); } + private void setEpg(boolean success) { + if (mChannel != null && success) mViewModel.getEpg(mChannel); + } + private void setEpg(Epg epg) { if (mChannel != null && mChannel.getTvgName().equals(epg.getKey())) setEpg(); } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index b28d7d27b..36644f2ed 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -1135,7 +1135,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List if (btn == null || !isVisible(btn) || !btn.isEnabled()) continue; for(int j=i+1; j url; + public MutableLiveData xml; public MutableLiveData live; public MutableLiveData epg; private ExecutorService executor1; private ExecutorService executor2; private ExecutorService executor3; + private ExecutorService executor4; public LiveViewModel() { this.formatTime = new SimpleDateFormat("yyyy-MM-ddHH:mm", Locale.getDefault()); @@ -48,18 +51,22 @@ public class LiveViewModel extends ViewModel { this.live = new MutableLiveData<>(); this.epg = new MutableLiveData<>(); this.url = new MutableLiveData<>(); + this.xml = new MutableLiveData<>(); } public void getLive(Live item) { execute(LIVE, () -> { VodConfig.get().setRecent(item.getJar()); LiveParser.start(item); - EpgParser.start(item); verify(item); return item; }); } + public void getXml(Live item) { + execute(XML, () -> EpgParser.start(item)); + } + public void getEpg(Channel item) { String date = formatDate.format(new Date()); String url = item.getEpg().replace("{date}", date); @@ -109,6 +116,11 @@ public class LiveViewModel extends ViewModel { executor3 = Executors.newFixedThreadPool(2); executor3.execute(runnable(type, callable, executor3)); break; + case XML: + if (executor4 != null) executor4.shutdownNow(); + executor4 = Executors.newFixedThreadPool(2); + executor4.execute(runnable(type, callable, executor4)); + break; } } @@ -118,6 +130,7 @@ public class LiveViewModel extends ViewModel { if (Thread.interrupted()) return; if (type == EPG) epg.postValue((Epg) executor.submit(callable).get(Constant.TIMEOUT_EPG, TimeUnit.MILLISECONDS)); if (type == LIVE) live.postValue((Live) executor.submit(callable).get(Constant.TIMEOUT_LIVE, TimeUnit.MILLISECONDS)); + if (type == XML) xml.postValue((Boolean) executor.submit(callable).get(Constant.TIMEOUT_XML, TimeUnit.MILLISECONDS)); if (type == URL) url.postValue((Channel) executor.submit(callable).get(Constant.TIMEOUT_PARSE_LIVE, TimeUnit.MILLISECONDS)); } catch (Throwable e) { if (e instanceof InterruptedException || Thread.interrupted()) return; @@ -125,6 +138,7 @@ public class LiveViewModel extends ViewModel { else if (type == URL) url.postValue(new Channel()); if (type == LIVE) live.postValue(new Live()); if (type == EPG) epg.postValue(new Epg()); + if (type == XML) xml.postValue(false); e.printStackTrace(); } }; @@ -135,5 +149,6 @@ public class LiveViewModel extends ViewModel { if (executor1 != null) executor1.shutdownNow(); if (executor2 != null) executor2.shutdownNow(); if (executor3 != null) executor3.shutdownNow(); + if (executor4 != null) executor4.shutdownNow(); } } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index 46edb9faf..e03cae688 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -264,8 +264,10 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, Custom private void setViewModel() { mViewModel = new ViewModelProvider(this).get(LiveViewModel.class); mViewModel.url.observeForever(mObserveUrl); + mViewModel.xml.observe(this, this::setEpg); mViewModel.epg.observeForever(mObserveEpg); mViewModel.live.observe(this, live -> { + mViewModel.getXml(live); hideProgress(); setGroup(live); setWidth(live); @@ -708,6 +710,10 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, Custom setMetadata(); } + private void setEpg(boolean success) { + if (mChannel != null && success) mViewModel.getEpg(mChannel); + } + private void setEpg(Epg epg) { if (mChannel != null && mChannel.getTvgName().equals(epg.getKey())) setEpg(); }