Skip to content

Commit

Permalink
Initial cast feature
Browse files Browse the repository at this point in the history
  • Loading branch information
amarullz committed Jul 21, 2024
1 parent 2693925 commit 6e8993d
Show file tree
Hide file tree
Showing 9 changed files with 695 additions and 24 deletions.
7 changes: 7 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

<uses-sdk tools:overrideLibrary="android.support.media.tv" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.android.providers.tv.permission.READ_EPG_DATA" />
<uses-permission android:name="com.android.providers.tv.permission.WRITE_EPG_DATA" />
Expand Down Expand Up @@ -33,6 +34,12 @@
android:supportsRtl="true"
android:theme="@style/Theme.AnimeTVJMTO"
android:usesCleartextTraffic="true">

<meta-data
android:name=
"com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
android:value="com.amarullz.androidtv.animetvjmto.CastOptionsProvider" />

<service
android:name=".ChannelService"
android:exported="true"
Expand Down
16 changes: 15 additions & 1 deletion app/src/main/assets/view/m.css
Original file line number Diff line number Diff line change
Expand Up @@ -1849,8 +1849,8 @@ c.loader {
opacity: 1;
}
.istouch #pb:not(.menushow) #pb_touch_close,
.istouch #pb:not(.menushow) #pb_touch_cast,
.istouch #pb:not(.menushow) #pb_touch_iactions,
/* .istouch .menushow #pb_touch_actions.active.hide #pb_touch_close, */
.istouch .menushow #pb_touch_actions.active.hide #pb_touch_iactions{
visibility: hidden !important;
opacity: 0 !important;
Expand All @@ -1860,6 +1860,7 @@ c.loader {
text-align: center;
width: 100vw;
}
#pb_touch_cast,
#pb_touch_close,
#pb_touch_actions #pb_touch_iactions c{
display: inline-block;
Expand All @@ -1880,6 +1881,7 @@ c.loader {
.istouch .menushow #pb_touch_actions.active c{
cursor: pointer;
}
#pb_touch_cast,
#pb_touch_close{
display: block;
position: absolute;
Expand All @@ -1894,6 +1896,16 @@ c.loader {
visibility: visible;
opacity: 1;
}
#pb_touch_cast{
left:calc(8vw + var(--fs-25vw)) !important;
padding: .5vw !important;
top:3.5vw !important;
font-size: var(--fs-20vw);
}
#pb_touch_cast:not(.supported){
display: none !important;
}
.istouch .menushow #pb_touch_cast,
.istouch .menushow #pb_touch_close,
.istouch .menushow #pb_touch_actions #pb_touch_iactions c{
visibility: visible;
Expand All @@ -1905,10 +1917,12 @@ c.loader {
width: var(--fs-60vw);
height: var(--fs-60vw);
}
#pb_touch_cast:hover,
#pb_touch_close:hover,
#pb_touch_actions #pb_touch_iactions c:hover{
background-color: var(--primary-1);
}
#pb_touch_cast:active,
#pb_touch_close:active,
#pb_touch_actions #pb_touch_iactions c:active{
background-color: var(--primary-2);
Expand Down
124 changes: 104 additions & 20 deletions app/src/main/assets/view/m.js
Original file line number Diff line number Diff line change
Expand Up @@ -4685,9 +4685,11 @@ const vtt={
return stn.join(', ');
},
init:function(subs){
vtt.castSet("");
if (pb.cfg_data.lang=='nosub'){
/* No Subtitle */
vtt.set('');
vtt.castSetIndex(0);
vtt.playback.sub=null;
vtt.playback.pos=0;
vtt.playback.posid=0;
Expand All @@ -4705,31 +4707,43 @@ const vtt={
if (ffind>-1){
// console.log("SUBTITLES FIND = "+ffind+" -> "+JSON.stringify(subs[ffind],null,'\t'));
vtt.load(subs[ffind], 1);
vtt.castSetIndex(ffind+1);
return;
}
}

// vtt.castSet(sub.u);
var subs_url=[];
for (var i=0;i<subs.length;i++){
subs_url.push(subs[i].u);
}
vtt.castSet(subs_url.join("\n"));

// console.error(JSON.stringify(subs));
for (var i=0;i<subs.length;i++){
if ((subs[i].l=='english')||(subs[i].i && subs[i].i=='en')){
console.log("SUBTITLE LENGTH = FOUND ENGLISH");
vtt.load(subs[i]);
vtt.castSetIndex(i+1);
return;
}
}
for (var i=0;i<subs.length;i++){
if (subs[i].d){
vtt.load(subs[i]);
vtt.castSetIndex(i+1);
return;
}
}
for (var i=0;i<subs.length;i++){
if (subs[i].l.indexOf("eng")>-1){
vtt.load(subs[i]);
vtt.castSetIndex(i+1);
return;
}
}
vtt.load(subs[0]);
vtt.castSetIndex(1);
}
},
match_lang:{
Expand Down Expand Up @@ -4954,6 +4968,20 @@ const vtt={
set:function(s){
vtt.h.innerHTML=s?nlbr(s+''):'';
},
castSet:function(u){
if ('castSubtitle' in _JSAPI){
try{
_JSAPI.castSubtitle(u);
}catch(e){}
}
},
castSetIndex:function(u){
if ('castSubtitleIndex' in _JSAPI){
try{
_JSAPI.castSubtitleIndex(u);
}catch(e){}
}
},
load:function(sub,n){
vtt.set('');
vtt.playback.sub=null;
Expand Down Expand Up @@ -9931,6 +9959,23 @@ const pb={
pb.pb_episodes.style.display='none';
}

/* Media MetaData */
try{
_JSAPI.videoSetMeta(
(pb.cfg_data.jptitle?(pb.data.title_jp?pb.data.title_jp:pb.data.title):(pb.data.title?pb.data.title:pb.data.title_jp)),
pb.ep_title,
pb.data.poster?pb.data.poster:pb.data.banner);

_JSAPI.videoHaveNP(false,false);
}catch(e){
console.log("JSAPI videoSetMeta Err="+e);
}
try{
_JSAPI.videoHaveNP((pb.ep_index + 1)<pb.data.ep.length,(pb.ep_index - 1)>=0);
}catch(e){
console.log("JSAPI videoHaveNP Err="+e);
}

/* Init Anime ID - Fav & History */
var animeid=_API.animeId(pb.data.url);
if (animeid){
Expand Down Expand Up @@ -10093,22 +10138,6 @@ const pb={
pb.menu_show(1);
_API.setKey(pb.keycb);
});

try{
_JSAPI.videoSetMeta(
(pb.cfg_data.jptitle?(pb.data.title_jp?pb.data.title_jp:pb.data.title):(pb.data.title?pb.data.title:pb.data.title_jp)),
pb.ep_title,
pb.data.poster?pb.data.poster:pb.data.banner);

_JSAPI.videoHaveNP(false,false);
}catch(e){
console.log("JSAPI videoSetMeta Err="+e);
}
try{
_JSAPI.videoHaveNP((pb.ep_index + 1)<pb.data.ep.length,(pb.ep_index - 1)>=0);
}catch(e){
console.log("JSAPI videoHaveNP Err="+e);
}
},
close_confirm:function(){
if (pb.cfg_data.closeconfirm){
Expand Down Expand Up @@ -11909,6 +11938,9 @@ const home={
else if (c=='playlist'){
_API.showToast("Under constructions...");
}
else if (c=='castplayer'){
_JSAPI.castConnect();
}
else{
return false;
}
Expand Down Expand Up @@ -12745,10 +12777,18 @@ const home={

/* Playlist */
var tools=$n('div','sidebar_group',{title:'Tools'},home.sidebar.contents,'');
var playlist=$n('div','sidebar_item',null,tools,'<c>playlist_play</c>Playlist');
playlist._action='playlist';
playlist.onclick=home.sidebar.itemclick;
home.sidebar.items.push(playlist);
// var playlist=$n('div','sidebar_item',null,tools,'<c>playlist_play</c>Playlist');
// playlist._action='playlist';
// playlist.onclick=home.sidebar.itemclick;
// home.sidebar.items.push(playlist);

if (_TOUCH){
var castplayer=$n('div','sidebar_item',null,tools,'<c>cast</c>Cast');
castplayer._action='castplayer';
castplayer.onclick=home.sidebar.itemclick;
home._cast_sidebar=castplayer;
home.sidebar.items.push(castplayer);
}
},
init:function(){
pb.cfg_load();
Expand Down Expand Up @@ -19196,3 +19236,47 @@ const touchHelper={
_API.electronInitFullscreen();
}
})();


/* CHROMECAST */
(function(){
if (!('castConnect' in _JSAPI)){
/* No Cast API */
return;
}
console.log("ATVLOG - VIDSTREAM CASTMSG: API Available");
window.__CASTMSG=function(m,a){
if (m=='connected'){
if (a=="1"){
_API.showToast("Cast Connected...");
if (home._cast_sidebar){
home._cast_sidebar.innerHTML='<c>cast_connected</c>Close Cast';
}
if (pb._cast){
pb._cast.innerHTML='cast_connected';
}
}
else{
if (home._cast_sidebar){
home._cast_sidebar.innerHTML='<c>cast</c>Cast';
}
if (pb._cast){
pb._cast.innerHTML='cast';
}
}
if (pb.state){
_JSAPI.videoSetUrl("");
pb.startpos_val=pb.vid_stat.pos;
pb.init_video();
}
}
};

if (_TOUCH){
pb._cast=$('pb_touch_cast');
pb._cast.classList.add('supported');
pb._cast.onclick=function(){
_JSAPI.castConnect();
};
}
})();
1 change: 1 addition & 0 deletions app/src/main/assets/view/main.html
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@
<c id="pb_touch_next" class="hide">skip_next</c>
</div>
<c id="pb_touch_close">arrow_back</c>
<c id="pb_touch_cast">cast</c>
</div>
<div id="pb_osd">
<div id="pb_osd_inner">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@

import androidx.core.content.FileProvider;

import com.google.common.base.Utf8;

import org.chromium.net.CronetEngine;
import org.json.JSONObject;

Expand All @@ -35,7 +33,6 @@
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
Expand Down
Loading

0 comments on commit 6e8993d

Please sign in to comment.