From d4cc6bc64cc8fac8edb4f42736e1e75bba010354 Mon Sep 17 00:00:00 2001 From: Li ZongYing Date: Tue, 2 Jan 2024 11:24:47 +0800 Subject: [PATCH 1/4] compatible 16:10 --- app/src/main/ic_launcher-playstore.png | Bin 31282 -> 25619 bytes .../java/com/lizongying/mytv/MainActivity.kt | 5 ----- .../java/com/lizongying/mytv/MainFragment.kt | 20 +++++++----------- .../com/lizongying/mytv/PlayerFragment.kt | 18 ++++++++++++---- .../lizongying/mytv/models/TVListViewModel.kt | 9 -------- .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 +++++ .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 +++++ app/src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 2158 -> 1456 bytes .../mipmap-hdpi/ic_launcher_foreground.webp | Bin 0 -> 1720 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 2900 bytes app/src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 1772 -> 912 bytes .../mipmap-mdpi/ic_launcher_foreground.webp | Bin 0 -> 1170 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 1812 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 2836 -> 2062 bytes .../mipmap-xhdpi/ic_launcher_foreground.webp | Bin 0 -> 2212 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 4088 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 3830 -> 2964 bytes .../mipmap-xxhdpi/ic_launcher_foreground.webp | Bin 0 -> 3518 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 6796 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 5248 -> 4300 bytes .../ic_launcher_foreground.webp | Bin 0 -> 4912 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 9396 bytes .../res/values/ic_launcher_background.xml | 4 ++++ 23 files changed, 36 insertions(+), 30 deletions(-) create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/values/ic_launcher_background.xml diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png index ee66d8a4bc9ec0784a9f1c82717c5423254495de..d64bca6ee8fba7a6b173bd53c9eec78b7c4ac2cd 100644 GIT binary patch literal 25619 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 WBDHdyRYoB2cTq$4e4+Za+y4aywYnGp diff --git a/app/src/main/java/com/lizongying/mytv/MainActivity.kt b/app/src/main/java/com/lizongying/mytv/MainActivity.kt index 3761952..bef2255 100644 --- a/app/src/main/java/com/lizongying/mytv/MainActivity.kt +++ b/app/src/main/java/com/lizongying/mytv/MainActivity.kt @@ -85,7 +85,6 @@ class MainActivity : FragmentActivity() { val transaction = supportFragmentManager.beginTransaction() if (mainFragment.isHidden) { -// focusMainFragment() transaction.show(mainFragment) } else { transaction.hide(mainFragment) @@ -94,10 +93,6 @@ class MainActivity : FragmentActivity() { transaction.commit() } - private fun focusMainFragment() { - mainFragment.focus() - } - private fun mainFragmentIsHidden(): Boolean { return mainFragment.isHidden } diff --git a/app/src/main/java/com/lizongying/mytv/MainFragment.kt b/app/src/main/java/com/lizongying/mytv/MainFragment.kt index c60480d..7c3f674 100644 --- a/app/src/main/java/com/lizongying/mytv/MainFragment.kt +++ b/app/src/main/java/com/lizongying/mytv/MainFragment.kt @@ -114,6 +114,10 @@ class MainFragment : BrowseSupportFragment() { override fun onDestroy() { super.onDestroy() handler.removeCallbacks(mUpdateProgramRunnable) + with(sharedPref!!.edit()) { + putInt("position", itemPosition) + apply() + } } fun updateProgram(tvViewModel: TVViewModel) { @@ -202,7 +206,7 @@ class MainFragment : BrowseSupportFragment() { itemPosition = sharedPref?.getInt("position", 0)!! if (itemPosition >= tvListViewModel.size()) { itemPosition = 0 - savePosition(0) + tvListViewModel.setItemPosition(itemPosition) } } @@ -227,21 +231,13 @@ class MainFragment : BrowseSupportFragment() { } } - fun savePosition(position: Int) { - tvListViewModel.setItemPosition(position) - with(sharedPref!!.edit()) { - putInt("position", position) - apply() - } - } - fun prev() { view?.post { itemPosition-- if (itemPosition == -1) { itemPosition = tvListViewModel.size() - 1 } - savePosition(itemPosition) + tvListViewModel.setItemPosition(itemPosition) val tvViewModel = tvListViewModel.getTVViewModel(itemPosition) tvViewModel?.changed() @@ -254,7 +250,7 @@ class MainFragment : BrowseSupportFragment() { if (itemPosition == tvListViewModel.size()) { itemPosition = 0 } - savePosition(itemPosition) + tvListViewModel.setItemPosition(itemPosition) val tvViewModel = tvListViewModel.getTVViewModel(itemPosition) tvViewModel?.changed() @@ -310,7 +306,7 @@ class MainFragment : BrowseSupportFragment() { if (item is TVViewModel) { if (itemPosition != item.id.value!!) { itemPosition = item.id.value!! - savePosition(itemPosition) + tvListViewModel.setItemPosition(itemPosition) val tvViewModel = tvListViewModel.getTVViewModel(itemPosition) tvViewModel?.changed() diff --git a/app/src/main/java/com/lizongying/mytv/PlayerFragment.kt b/app/src/main/java/com/lizongying/mytv/PlayerFragment.kt index 2f14de2..d7b31fc 100644 --- a/app/src/main/java/com/lizongying/mytv/PlayerFragment.kt +++ b/app/src/main/java/com/lizongying/mytv/PlayerFragment.kt @@ -1,6 +1,7 @@ package com.lizongying.mytv import android.os.Bundle +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -43,11 +44,20 @@ class PlayerFragment : Fragment() { override fun onVideoSizeChanged(videoSize: VideoSize) { val aspectRatio = 16f / 9f val layoutParams = playerView?.layoutParams - layoutParams?.width = - (playerView?.measuredHeight?.times(aspectRatio))?.toInt() - playerView?.layoutParams = layoutParams + val ratio = playerView?.measuredWidth?.div(playerView?.measuredHeight!!) + if (ratio != null) { + if (ratio < aspectRatio) { + layoutParams?.height = + (playerView?.measuredWidth?.div(aspectRatio))?.toInt() + playerView?.layoutParams = layoutParams + } else if (ratio > aspectRatio) { + layoutParams?.width = + (playerView?.measuredHeight?.times(aspectRatio))?.toInt() + playerView?.layoutParams = layoutParams + } + } } -// + // override fun onPlayerError(error: PlaybackException) { // super.onPlayerError(error) // } diff --git a/app/src/main/java/com/lizongying/mytv/models/TVListViewModel.kt b/app/src/main/java/com/lizongying/mytv/models/TVListViewModel.kt index 5e1ab2c..138b937 100644 --- a/app/src/main/java/com/lizongying/mytv/models/TVListViewModel.kt +++ b/app/src/main/java/com/lizongying/mytv/models/TVListViewModel.kt @@ -9,8 +9,6 @@ class TVListViewModel : ViewModel() { var maxNum = mutableListOf() - private var sharedPref: SharedPreferences? = null - private val tvListViewModel = MutableLiveData>() private val _itemPosition = MutableLiveData() @@ -48,13 +46,6 @@ class TVListViewModel : ViewModel() { _itemPositionCurrent.value = position } - fun savePosition(position: Int) { - with(sharedPref!!.edit()) { - putInt("position", position) - apply() - } - } - fun size(): Int { return tvListViewModel.value!!.size } diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..036d09b --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..036d09b --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp index 77cdce6f111231105878780fb65d88ff2946d90f..cadfb3028fd340d543d1c4e1fc470e26b1178c72 100644 GIT binary patch literal 1456 zcmV;h1yA}?Nk&Gf1pok7MM6+kP&iDR1pojqN5Byf6^DYhZJ2~V?d~FohzX#yYWtBa zO*gS^yUGzja_~PnX9VD1*n7;s@|?KO*$^( z66D(dfBwrQbQ%9K{B7IJwr$(CZQHhO<3{?aZ|5|&*{;o-ZF}=8+qO0N`x~-tbG2*j zxaLl?x#chbkhXD)tLguDiUKYJY1^j0t-aw!GJ4bhhjtEQv~3#~wPPp>VNOSb#Js5|k)C1_mZ5Mejx&2ok0bg2tgF za41C*A?)~x3>5_;+b{gOQWJIe=-|SP;D9eTl{TVW>m((F=`msUAbc#rAzs93ZhU|w z$;5_eu7DS>_EnBv<`tZP`DX$Ky z3?myUYTQVW!|>MU&*ra^l>qE0_znXokp2UR5u+3UoK9Rqp5@NW3w2Q(sD}ipFtM+u zTiqaGx^)ZSt4TKpY8-1a_9sO}U_ z4LG}GNKIbB^hO*Aagt6^yc84(OSm>u&6lg(UsS7BEklb^c)8B-Mgt|5BQ>`hy$I}U zgEu!f2vK8VUybgis8BaaaN-LQs=-DcR9BK_eubmAuOnc=4h` z4KaFP!^b})LTUi^{>ljsM1~scO3$)i#AntnDUwe&@pE+$n$js4T&``9Fym}LP=JK7 zjR;VHo~5011&SLV{ zw$E$Z+`q50$!ojD>4J{-t5e+IqF5dAWKN#9RBWnD znKFV?B=Bkr&hw!FvWFOnS>pWjk^scBDV@;nrdUtH8PW+QGnue&ZDFQepzwUMW_+I9 zx|Ibfq5vFlBl#aalcahq;~NO3ibYKU#r2g!?K|l}kD#$E<44oEdRr_GU;q!uwXNaX z-_hUi?AtAZekVioH^pn&T@L_O`c(lqzyU%a0%F5^&Hx+W6-xt17Zf`T8!W>+^&bU( KdI;hwDh2@QqOp(w literal 2158 zcmV-!2$Ai!$)ik7vGZS8E^M#Z_isLwdIMtx=#+qP}q(-k}EVJ$l9 zVa4g_Mi6A%HXXg5YRqrs=R3CTwr$%sVpq=sVgP_io4menfJzi1#i8!*?t*mN0dT8r zTb?Ar-JO=oH?WdJNlniRv{V+WAnsK@X0QQtowv9kxRInta_qrU*Btij7o^4CH5>ui zf^sk_N*yiGQ2xnDBK4>x$HA%eOJ1ejb84gDuPHopszRPOl=21y=hp%8CYa|jnuh~; z2U@$0J7DL#RswY zDz)%KkURn}zi!%vl_2yuu^RthhDD8<@Gw| zl)*?wFO`(&q!E9X8XoQ&Wt!$wIXS$sr5*L&!j>?9Hn0E%+wPdG6$D~ zW4RnIw_{E@UQ}=1Qj7j}$98jsbkGfd5fD50wIl&8xumX}o4wqkjj=MJ>t@K3OOkI;CFG=u?{c%@-W)|{7 z>FpJFB5`hxOfIx+;J+6n{Oe6EmBC0p3)2-D2Oxu$8+4!drOp3I_%~Q@3c8o75@HP{fb&y zU)1mE7RDHle7shgE(|Fq zS+d`uoORqTP0Jh!1#G3zei!fQ3LJ;~bPaU6Thsg~rvJOMresMEA)jQ5$26_2Qxih_ zohAD(N>7{IvYavK`x))OaUU+gaWrzuAZH_C*PXW9)SP-Yqcrl{T@93wW%tpt5ZZsm zxS|v#h=A1(OelV5)Y(2ovC_?1MIqAjRoM4C8t&^U{P)vJmhe&O2H#zxd)jD}r;Cg> z$!e~8`Q?|ZkW4k!Qbk{6(RofaZNbacSj(m_Z}|3NnMKyw&y4bk&%$n!Xq2r%>8pOfnSpI3ydiOpJx_7;&LCd?J20eHD(?Yvnp4I36 zF#zmt-%&DEn)$*A1HfYB@6TyYxARw-Vtf(I<#KV1=|&gmty^87t$0Clfi~O91-kVu z7wE*7nv1&?@s3yC|F7*GCc8|wy_q?4V8YMe8 zfK>4)UF=yP7!2`umz};<@a}m^GJ^pi8*q4^W&qe^0N7&y*k=GZuzGJE!2qzK`+v^7 kE}1RhBN+2;<%@j||5tna|6jLyU;pu}WKpk+khC}|3Ap7W`Tzg` diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000000000000000000000000000000000000..890ab6dc900bc896c5d2446e13f6c2bca366b402 GIT binary patch literal 1720 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp index 8fc4659ca0670ec26801c2f23b61817f322f234a..3266f0d88ecf14b8bc5757dab65d8e3b2c96a7ae 100644 GIT binary patch literal 912 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 C!Ek;6 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp index 08157d097fb997d1ed4ba7f6e059e4b62fdd98cd..17ee38e83bb3e8d5eb92e5b6f1a6bfc1af29d7a7 100644 GIT binary patch literal 2062 zcmV+p2=Vt)Nk&En2mk}~fFh=>XBV?vso zMM3kt9Q*%G+xeHzw#}=(@3W20)mv{UenUt0KKJY@{KvLk+qPL{*_gm9gQqICMsVwx z)k!Acj3OP+O83@s97&SYl>e^C7Cq$$pswBnh=ABOk|Q}u+)U}rTgcY79jmf!+qQ?T zPQW;tR>S6v8`aU+8rf}of4z>}NKz!nFz*R}K)^=nSCo%Cz)nOx@-+qpWajcq%*nl-Vt-o3|In+yYhWrI?w-T&Vd64OB1 zwyAgP-hV}I+cwlG>39fsXAOWW|G*1Ss}$qLp$U`a=`%n;G=iw>TM>KG>DEgtbF=Q9 zLp;U%deLzFbBI-_wP`xj^g`2fm#l5>`Z4BXe;miTO#azuHlqmyiRR99=HOZ!htd4< zh|LcW`=RNN{`(i8Ge-{SZ4r_mA&%ogQuP4Meu+KAm=B@pmt>%^8i!U40hw6$0KNJ@ zAV{AMXx-2i3~Xi3!{<{=v+DtaAyG^`pzCgaI~#j84uFje2l4qP5?y-_s-VKw8nkl? zMc2LgJPWn50q}u)ZlP$$^WFPdWL2-uj0vu*qmK{3;_EC1^<}l<3_h6B6i;jd(S)J~ z_-R%1nA$>P+drp!Ynnvul zh1g3hTkK8CK#xRoPioaEd2}j6?9mrA>6nOissMN&>yYp^1{mPC@T5{jJ-cYY^>p9zptsMTf7btq2B2Vn`p!xt*)c)M>)vAe2JtE=w))~R<~Hgx7C(hwr9E| zQc$epClYPs+39G*`gq{=&G?&Is}nNB2mDXtiV7tW{kW*jB%$b62Yo<K;Wr;Q_WAbPW}ac?Iz_(y_SIBlx@f_0t3YdH$DrO{UE>Tz(uLa7m^FOoeG!fW@;$uMwAjKER%Lt|<#?C>DT0oXa7TaBpv$Hq zUqguP?h%iiU)<*MF>-D*PhFRWjxYXu*vD|)NsjqH@x;?qYGs>1ugp1?l_8f+Jb~q_ z|IYkGLCpY4`loFoe?Il!JWMydwuzI&Yx1wCXcD8 zl_#Y#rRtpYPy6R93z;Ky`pqEQYf|1OpQ$Xf(c&T|mA*VPTUAYR$WtM=-w!He*OfOK z7jDbkHUam%slU{9h_Hsw(Klp$0%UoTM@P*7wsA*TfC%u!PM>YO>49V~6wN`5A;}cC zwA?z+# zm0KKK6EaosY+s>6QatT|-uv*5klWuZnuUZvTEn-4mb3XR`t88N`ph+sFWhw5!}kMI zwmtjE9+?+W$yQs7z~Rnlzx?uxQ`&3O9Q2pEI>_>@hh6s_&?%BsHfIJ^Tc3rP`I zxaV7)6R!AO^Z&L!;FP}_WKh0I5O`W0ax+f_Uh}{MT+=>l6Yj1W5PNN^l*FRPb&I## zZo3(8P|QY_P*SRXToK}uhWzebua{jWhNN)Z7icZO+L5Sa4c{wk0|$Ee`uM0cXWIK| z>$~}0Fyc$)GdO?#OX<3>9zf{r|9lmEYg7kJ{<~sd*u7r-&n>;e({*oLLdzr8#D9qL z@Y~sl-9(~wch7r%w$@cP5E^VG(*H71V{=Q$SFJ);#xEj(9XXzLl7OaPk{)6>Yt|bC z&o#!s24L6#40{&PwDn9gO@9*w=!|)0#MsvEz7YU3`iH~@z`B9~kh|X}AKA9Y4hYe) zh;HYyALU;zU@FKCK(PH201WorWY9Rx$ljHvd)B%SO`q>AvUa9LV=qqv=34fg)MJ|v zs>neBkgXtl3~*T@?(|B#Zw1#^Uglh0g&&qk{C~W6p2GK^Gk{_(vBjhX7y(v*P4;%| szw!NNEApiPhyXf(Z!L*cNv%pIbIRSpvtKqY^DeAXU&@}kO2O_*Aq0&jzW@LL literal 2836 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..46c666041ddc7dc4d6b28f0bc196e928bcdab7c3 GIT binary patch literal 4088 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 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000000000000000000000000000000000000..32e3c0694c1928f9bca11e7fca13359d1364134e GIT binary patch literal 3518 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..94f5eb0082cef5992dde670cb8181b6164401c4f GIT binary patch literal 6796 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp index d2bb5820cd29dc88dc85bd4f5ccb1fe7ddc82b4f..2b65b0493643520bfd64d6db0d780185878b45da 100644 GIT binary patch literal 4300 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 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000000000000000000000000000000000000..77e0a94e176e1999fa786f1e752e06163ed72217 GIT binary patch literal 4912 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 + + #223239 + \ No newline at end of file From 940d7620a1c721f215f9585c44f57bd4cc956625 Mon Sep 17 00:00:00 2001 From: Li ZongYing Date: Tue, 2 Jan 2024 22:44:08 +0800 Subject: [PATCH 2/4] clean channel --- .../java/com/lizongying/mytv/MainFragment.kt | 6 -- .../com/lizongying/mytv/PlayerFragment.kt | 72 ++++++++++++++++++- .../main/java/com/lizongying/mytv/TVList.kt | 57 --------------- 3 files changed, 69 insertions(+), 66 deletions(-) diff --git a/app/src/main/java/com/lizongying/mytv/MainFragment.kt b/app/src/main/java/com/lizongying/mytv/MainFragment.kt index 7c3f674..5513cdb 100644 --- a/app/src/main/java/com/lizongying/mytv/MainFragment.kt +++ b/app/src/main/java/com/lizongying/mytv/MainFragment.kt @@ -210,12 +210,6 @@ class MainFragment : BrowseSupportFragment() { } } - fun focus() { - if (!view?.isFocused!!) { - view?.requestFocus() - } - } - fun fragmentReady() { ready++ Log.i(TAG, "ready $ready") diff --git a/app/src/main/java/com/lizongying/mytv/PlayerFragment.kt b/app/src/main/java/com/lizongying/mytv/PlayerFragment.kt index d7b31fc..71c3431 100644 --- a/app/src/main/java/com/lizongying/mytv/PlayerFragment.kt +++ b/app/src/main/java/com/lizongying/mytv/PlayerFragment.kt @@ -9,10 +9,14 @@ import android.view.ViewTreeObserver import androidx.annotation.OptIn import androidx.fragment.app.Fragment import androidx.media3.common.MediaItem +import androidx.media3.common.PlaybackException import androidx.media3.common.Player import androidx.media3.common.VideoSize import androidx.media3.common.util.UnstableApi import androidx.media3.exoplayer.ExoPlayer +import androidx.media3.exoplayer.analytics.AnalyticsListener +import androidx.media3.exoplayer.source.LoadEventInfo +import androidx.media3.exoplayer.source.MediaLoadData import androidx.media3.ui.PlayerView import com.lizongying.mytv.databinding.PlayerBinding import com.lizongying.mytv.models.TVViewModel @@ -58,9 +62,11 @@ class PlayerFragment : Fragment() { } } -// override fun onPlayerError(error: PlaybackException) { -// super.onPlayerError(error) -// } + override fun onPlayerError(error: PlaybackException) { + super.onPlayerError(error) + + Log.e(TAG, "PlaybackException $error") + } }) } }) @@ -79,6 +85,66 @@ class PlayerFragment : Fragment() { videoUrlCurrent?.let { mediaItem.setUri(it) } setMediaItem(mediaItem.build()) prepare() + +// val httpDataSource = DefaultHttpDataSource.Factory() +// val hls = HlsMediaSource.Factory(httpDataSource).createMediaSource( +// MediaItem.fromUri( +// Uri.parse(videoUrlCurrent) +// ) +// ) +// val analyticsListener: AnalyticsListener= MyAnalyticsListener() +// val exoPlayer = playerView?.player as ExoPlayer +// exoPlayer.addAnalyticsListener(analyticsListener) +// exoPlayer.setMediaSource(hls) +// exoPlayer.playWhenReady = true +// +// +// exoPlayer.let { +// val parameters = +// TrackSelectionParameters.Builder().setPreferredAudioMimeType("application/id3").build() +// // 更新轨道选择器参数 +// exoPlayer.trackSelector?.parameters = parameters +// Log.i(TAG, "parameters $parameters") +// } +// +// // 获取当前轨道组 +// +// playerView?.player = exoPlayer +// playerView?.player?.prepare() + + +// +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { +// val codecList = MediaCodecList(MediaCodecList.ALL_CODECS) +// val codecInfos = codecList.codecInfos +// +// for (codecInfo in codecInfos) { +// +// val supportedTypes = codecInfo.supportedTypes +// for (type in supportedTypes) { +// Log.d("supportedTypes", "$type") +//// if (type.equals(androidx.media3.exoplayer.mediacode, ignoreCase = true)) { +//// Log.d("AudioCodecChecker", "Device supports MPEG-L2") +//// return +//// } +// } +// } +// +// Log.d("AudioCodecChecker", "Device does not support MPEG-L2") +// } + + } + } + + @UnstableApi + class MyAnalyticsListener : AnalyticsListener { + override fun onLoadStarted( + eventTime: AnalyticsListener.EventTime, + loadEventInfo: LoadEventInfo, + mediaLoadData: MediaLoadData + ) { + super.onLoadStarted(eventTime, loadEventInfo, mediaLoadData) +// Log.i(TAG, "loadEventInfo.uri ${loadEventInfo.uri} ${mediaLoadData.trackFormat.toString()}") } } diff --git a/app/src/main/java/com/lizongying/mytv/TVList.kt b/app/src/main/java/com/lizongying/mytv/TVList.kt index 03d9e9c..7df857c 100644 --- a/app/src/main/java/com/lizongying/mytv/TVList.kt +++ b/app/src/main/java/com/lizongying/mytv/TVList.kt @@ -6,43 +6,24 @@ object TVList { } private var mappingLogo = mapOf( - "CCTV4K" to "https://resources.yangshipin.cn/assets/oms/image/202306/3e9d06fd7244d950df5838750f1c6ac3456e172b51caca2c16d2282125b111e8.png?imageMogr2/format/webp", "CCTV4K 超高清" to "https://resources.yangshipin.cn/assets/oms/image/202306/3e9d06fd7244d950df5838750f1c6ac3456e172b51caca2c16d2282125b111e8.png?imageMogr2/format/webp", - "CCTV1" to "https://resources.yangshipin.cn/assets/oms/image/202306/d57905b93540bd15f0c48230dbbbff7ee0d645ff539e38866e2d15c8b9f7dfcd.png?imageMogr2/format/webp", "CCTV1 综合" to "https://resources.yangshipin.cn/assets/oms/image/202306/d57905b93540bd15f0c48230dbbbff7ee0d645ff539e38866e2d15c8b9f7dfcd.png?imageMogr2/format/webp", - "CCTV2" to "https://resources.yangshipin.cn/assets/oms/image/202306/20115388de0207131af17eac86c33049b95d69eaff064e55653a1b941810a006.png?imageMogr2/format/webp", "CCTV2 财经" to "https://resources.yangshipin.cn/assets/oms/image/202306/20115388de0207131af17eac86c33049b95d69eaff064e55653a1b941810a006.png?imageMogr2/format/webp", - "CCTV3" to "https://resources.yangshipin.cn/assets/oms/image/202306/7b7a65c712450da3deb6ca66fbacf4f9aee00d3f20bd80eafb5ada01ec63eb3a.png?imageMogr2/format/webp", "CCTV3 综艺" to "https://resources.yangshipin.cn/assets/oms/image/202306/7b7a65c712450da3deb6ca66fbacf4f9aee00d3f20bd80eafb5ada01ec63eb3a.png?imageMogr2/format/webp", - "CCTV4" to "https://resources.yangshipin.cn/assets/oms/image/202306/f357e58fdbcc076a3d65e1f958c942b2e14f14342c60736ceed98b092d35356a.png?imageMogr2/format/webp", "CCTV4 中文国际" to "https://resources.yangshipin.cn/assets/oms/image/202306/f357e58fdbcc076a3d65e1f958c942b2e14f14342c60736ceed98b092d35356a.png?imageMogr2/format/webp", - "CCTV5" to "https://resources.yangshipin.cn/assets/oms/image/202306/0a6a7138952675983a3d854df7688557b286d59aa06166edae51506f9204d655.png?imageMogr2/format/webp", "CCTV5 体育" to "https://resources.yangshipin.cn/assets/oms/image/202306/0a6a7138952675983a3d854df7688557b286d59aa06166edae51506f9204d655.png?imageMogr2/format/webp", - "CCTV5+" to "https://resources.yangshipin.cn/assets/oms/image/202306/649ad76a90bfef55b05db9fe52e006487280f619089099d5dc971e387fc6eff0.png?imageMogr2/format/webp", "CCTV5+ 体育赛事" to "https://resources.yangshipin.cn/assets/oms/image/202306/649ad76a90bfef55b05db9fe52e006487280f619089099d5dc971e387fc6eff0.png?imageMogr2/format/webp", - "CCTV6" to "https://resources.yangshipin.cn/assets/oms/image/202306/741515efda91f03f455df8a7da4ee11fa9329139c276435cf0a9e2af398d5bf2.png?imageMogr2/format/webp", "CCTV6 电影" to "https://resources.yangshipin.cn/assets/oms/image/202306/741515efda91f03f455df8a7da4ee11fa9329139c276435cf0a9e2af398d5bf2.png?imageMogr2/format/webp", - "CCTV7" to "https://resources.yangshipin.cn/assets/oms/image/202306/b29af94e295ebdf646cefb68122c429b9cd921f498ca20d2d8070252536f9ff9.png?imageMogr2/format/webp", "CCTV7 国防军事" to "https://resources.yangshipin.cn/assets/oms/image/202306/b29af94e295ebdf646cefb68122c429b9cd921f498ca20d2d8070252536f9ff9.png?imageMogr2/format/webp", - "CCTV8" to "https://resources.yangshipin.cn/assets/oms/image/202306/ad51de94426a0ba039e6dd6a8534ea98ecc813a6176bde87b4f18cc34d6d7590.png?imageMogr2/format/webp", "CCTV8 电视剧" to "https://resources.yangshipin.cn/assets/oms/image/202306/ad51de94426a0ba039e6dd6a8534ea98ecc813a6176bde87b4f18cc34d6d7590.png?imageMogr2/format/webp", - "CCTV9" to "https://resources.yangshipin.cn/assets/oms/image/202306/2ed1b4deeca179d5db806bb941790f82eb92a1b7299c1c38fe027f95a5caee5e.png?imageMogr2/format/webp", "CCTV9 记录" to "https://resources.yangshipin.cn/assets/oms/image/202306/2ed1b4deeca179d5db806bb941790f82eb92a1b7299c1c38fe027f95a5caee5e.png?imageMogr2/format/webp", - "CCTV10" to "https://resources.yangshipin.cn/assets/oms/image/202306/aa6157ec65188cd41826e5a2f088c3d6d153205f5f6428258d12c59999e221aa.png?imageMogr2/format/webp", "CCTV10 科教" to "https://resources.yangshipin.cn/assets/oms/image/202306/aa6157ec65188cd41826e5a2f088c3d6d153205f5f6428258d12c59999e221aa.png?imageMogr2/format/webp", - "CCTV11" to "https://resources.yangshipin.cn/assets/oms/image/202306/ed12ed7c7a1034dae4350011fe039284c5d5a836506b28c9e32e3c75299625c0.png?imageMogr2/format/webp", "CCTV11 戏曲" to "https://resources.yangshipin.cn/assets/oms/image/202306/ed12ed7c7a1034dae4350011fe039284c5d5a836506b28c9e32e3c75299625c0.png?imageMogr2/format/webp", - "CCTV12" to "https://resources.yangshipin.cn/assets/oms/image/202306/484083cffaa40df7e659565e8cb4d1cc740158a185512114167aa21fa0c59240.png?imageMogr2/format/webp", "CCTV12 社会与法" to "https://resources.yangshipin.cn/assets/oms/image/202306/484083cffaa40df7e659565e8cb4d1cc740158a185512114167aa21fa0c59240.png?imageMogr2/format/webp", - "CCTV13" to "https://resources.yangshipin.cn/assets/oms/image/202306/266da7b43c03e2312186b4a999e0f060e8f15b10d2cc2c9aa32171819254cf1a.png?imageMogr2/format/webp", "CCTV13 新闻" to "https://resources.yangshipin.cn/assets/oms/image/202306/266da7b43c03e2312186b4a999e0f060e8f15b10d2cc2c9aa32171819254cf1a.png?imageMogr2/format/webp", - "CCTV14" to "https://resources.yangshipin.cn/assets/oms/image/202306/af6b603896938dc346fbb16abfc63c12cba54b0ec9d18770a15d347d115f12d5.png?imageMogr2/format/webp", "CCTV14 少儿" to "https://resources.yangshipin.cn/assets/oms/image/202306/af6b603896938dc346fbb16abfc63c12cba54b0ec9d18770a15d347d115f12d5.png?imageMogr2/format/webp", - "CCTV15" to "https://resources.yangshipin.cn/assets/oms/image/202306/2ceee92188ef684efe0d8b90839c4f3ad450d179dc64d59beff417059453af47.png?imageMogr2/format/webp", "CCTV15 音乐" to "https://resources.yangshipin.cn/assets/oms/image/202306/2ceee92188ef684efe0d8b90839c4f3ad450d179dc64d59beff417059453af47.png?imageMogr2/format/webp", - "CCTV16" to "https://resources.yangshipin.cn/assets/oms/image/202306/53793fa7bacd3a93ff6dc5d2758418985e1f952a316c335d663b572d8bdcd74d.png?imageMogr2/format/webp", "CCTV16 奥林匹克" to "https://resources.yangshipin.cn/assets/oms/image/202306/53793fa7bacd3a93ff6dc5d2758418985e1f952a316c335d663b572d8bdcd74d.png?imageMogr2/format/webp", - "CCTV17" to "https://resources.yangshipin.cn/assets/oms/image/202306/ddef563072f8bad2bea5b9e52674cb7b4ed50efb20c26e61994dfbdf05c1e3c0.png?imageMogr2/format/webp", "CCTV17 农业农村" to "https://resources.yangshipin.cn/assets/oms/image/202306/ddef563072f8bad2bea5b9e52674cb7b4ed50efb20c26e61994dfbdf05c1e3c0.png?imageMogr2/format/webp", "CGTN" to "https://resources.yangshipin.cn/assets/oms/image/202306/a72dff758ca1c17cd0ecc8cedc11b893d208f409d5e6302faa0e9d298848abc3.png?imageMogr2/format/webp", "CGTN 法语频道" to "https://resources.yangshipin.cn/assets/oms/image/202306/a8d0046a47433d952bf6ed17062deb8bd2184ba9aec0f7781df6bf9487a3ffcf.png?imageMogr2/format/webp", @@ -87,43 +68,24 @@ object TVList { "海南卫视" to "https://resources.yangshipin.cn/assets/oms/image/202306/6e060391fde0469801fc3d84dbf204b4f8d650d251f17d7595a6964c0bb99e81.png?imageMogr2/format/webp", ) private var mappingEPG = mapOf( - "CCTV4K" to "600002264", "CCTV4K 超高清" to "600002264", - "CCTV1" to "600001859", "CCTV1 综合" to "600001859", - "CCTV2" to "600001800", "CCTV2 财经" to "600001800", - "CCTV3" to "600001801", "CCTV3 综艺" to "600001801", - "CCTV4" to "600001814", "CCTV4 中文国际" to "600001814", - "CCTV5" to "600001818", "CCTV5 体育" to "600001818", - "CCTV5+" to "600001817", "CCTV5+ 体育赛事" to "600001817", - "CCTV6" to "600001802", "CCTV6 电影" to "600001802", - "CCTV7" to "600004092", "CCTV7 国防军事" to "600004092", - "CCTV8" to "600001803", "CCTV8 电视剧" to "600001803", - "CCTV9" to "600004078", "CCTV9 记录" to "600004078", - "CCTV10" to "600001805", "CCTV10 科教" to "600001805", - "CCTV11" to "600001806", "CCTV11 戏曲" to "600001806", - "CCTV12" to "600001807", "CCTV12 社会与法" to "600001807", - "CCTV13" to "600001811", "CCTV13 新闻" to "600001811", - "CCTV14" to "600001809", "CCTV14 少儿" to "600001809", - "CCTV15" to "600001815", "CCTV15 音乐" to "600001815", - "CCTV16" to "600098637", "CCTV16 奥林匹克" to "600098637", - "CCTV17" to "600001810", "CCTV17 农业农村" to "600001810", "CGTN" to "600014550", "CGTN 法语频道" to "600084704", @@ -168,43 +130,24 @@ object TVList { "海南卫视" to "600002506", ) private var mappingVideo = mapOf( - "CCTV4K" to arrayOf("600002264", "2000266303"), "CCTV4K 超高清" to arrayOf("600002264", "2000266303"), - "CCTV1" to arrayOf("600001859", "2000210103"), "CCTV1 综合" to arrayOf("600001859", "2000210103"), - "CCTV2" to arrayOf("600001800", "2000203603"), "CCTV2 财经" to arrayOf("600001800", "2000203603"), -// "CCTV3" to arrayOf("600001801",""), // "CCTV3 综艺" to arrayOf("600001801",""), - "CCTV4" to arrayOf("600001814", "2000204803"), "CCTV4 中文国际" to arrayOf("600001814", "2000204803"), - "CCTV5" to arrayOf("600001818", "2000205103"), "CCTV5 体育" to arrayOf("600001818", "2000205103"), - "CCTV5+" to arrayOf("600001817", "2000204503"), "CCTV5+ 体育赛事" to arrayOf("600001817", "2000204503"), -// "CCTV6" to arrayOf("600001802",""), // "CCTV6 电影" to arrayOf("600001802",""), - "CCTV7" to arrayOf("600004092", "2000510003"), "CCTV7 国防军事" to arrayOf("600004092", "2000510003"), -// "CCTV8" to arrayOf("600001803",""), // "CCTV8 电视剧" to arrayOf("600001803",""), - "CCTV9" to arrayOf("600004078", "2000499403"), "CCTV9 记录" to arrayOf("600004078", "2000499403"), - "CCTV10" to arrayOf("600001805", "2000203503"), "CCTV10 科教" to arrayOf("600001805", "2000203503"), - "CCTV11" to arrayOf("600001806", "2000204103"), "CCTV11 戏曲" to arrayOf("600001806", "2000204103"), - "CCTV12" to arrayOf("600001807", "2000202603"), "CCTV12 社会与法" to arrayOf("600001807", "2000202603"), -// "CCTV13" to arrayOf("600001811",""), // "CCTV13 新闻" to arrayOf("600001811",""), - "CCTV14" to arrayOf("600001809", "2000204403"), "CCTV14 少儿" to arrayOf("600001809", "2000204403"), - "CCTV15" to arrayOf("600001815", "2000205003"), "CCTV15 音乐" to arrayOf("600001815", "2000205003"), - "CCTV16" to arrayOf("600098637", "2012375003"), "CCTV16 奥林匹克" to arrayOf("600098637", "2012375003"), - "CCTV17" to arrayOf("600001810", "2000204203"), "CCTV17 农业农村" to arrayOf("600001810", "2000204203"), "CGTN" to arrayOf("600014550", "2001656803"), "CGTN 法语频道" to arrayOf("600084704", "2010153503"), From 57d42bc9178ed197591f7657a9779607958ca2f6 Mon Sep 17 00:00:00 2001 From: Li ZongYing Date: Fri, 5 Jan 2024 14:53:54 +0800 Subject: [PATCH 3/4] support vip --- .../java/com/lizongying/mytv/MainFragment.kt | 23 +++--- .../main/java/com/lizongying/mytv/Request.kt | 82 +++++++++++++++---- .../main/java/com/lizongying/mytv/TVList.kt | 54 ++++++------ .../java/com/lizongying/mytv/api/ApiClient.kt | 9 ++ .../main/java/com/lizongying/mytv/api/Info.kt | 11 +++ .../com/lizongying/mytv/api/YSPApiService.kt | 13 +-- .../lizongying/mytv/api/YSPTokenService.kt | 11 +++ app/src/main/res/values/styles.xml | 1 - 8 files changed, 133 insertions(+), 71 deletions(-) create mode 100644 app/src/main/java/com/lizongying/mytv/api/Info.kt create mode 100644 app/src/main/java/com/lizongying/mytv/api/YSPTokenService.kt diff --git a/app/src/main/java/com/lizongying/mytv/MainFragment.kt b/app/src/main/java/com/lizongying/mytv/MainFragment.kt index 5513cdb..6387ab8 100644 --- a/app/src/main/java/com/lizongying/mytv/MainFragment.kt +++ b/app/src/main/java/com/lizongying/mytv/MainFragment.kt @@ -6,7 +6,6 @@ import android.os.Bundle import android.os.Handler import android.os.Looper import android.util.Log -import android.view.View import androidx.leanback.app.BrowseSupportFragment import androidx.leanback.widget.ArrayObjectAdapter import androidx.leanback.widget.HeaderItem @@ -29,7 +28,7 @@ import kotlinx.coroutines.launch class MainFragment : BrowseSupportFragment() { var itemPosition: Int = 0 - private var request: Request? = null + private var request: Request = Request() private var rowsAdapter: ArrayObjectAdapter? = null @@ -44,6 +43,10 @@ class MainFragment : BrowseSupportFragment() { private var ready = 0 + init { + request.fetchToken(::fragmentReady) + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) headersState = HEADERS_DISABLED @@ -52,9 +55,9 @@ class MainFragment : BrowseSupportFragment() { override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) - sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) + activity?.let { request.initYSP(it) } - request = activity?.let { Request(it) } + sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) loadRows() @@ -82,7 +85,7 @@ class MainFragment : BrowseSupportFragment() { if (tvViewModel.pid.value != null) { Log.i(TAG, "request $title") lifecycleScope.launch(Dispatchers.IO) { - tvViewModel.let { request?.fetchData(it) } + tvViewModel.let { request.fetchData(it) } } (activity as? MainActivity)?.showInfoFragment(tvViewModel) setSelectedPosition( @@ -107,10 +110,6 @@ class MainFragment : BrowseSupportFragment() { fragmentReady() } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - } - override fun onDestroy() { super.onDestroy() handler.removeCallbacks(mUpdateProgramRunnable) @@ -125,11 +124,11 @@ class MainFragment : BrowseSupportFragment() { if (timestamp - tvViewModel.programUpdateTime > 60) { if (tvViewModel.program.value!!.isEmpty()) { tvViewModel.programUpdateTime = timestamp - request?.fetchProgram(tvViewModel) + request.fetchProgram(tvViewModel) } else { if (timestamp - tvViewModel.program.value!!.last().et < 600) { tvViewModel.programUpdateTime = timestamp - request?.fetchProgram(tvViewModel) + request.fetchProgram(tvViewModel) } } } @@ -213,7 +212,7 @@ class MainFragment : BrowseSupportFragment() { fun fragmentReady() { ready++ Log.i(TAG, "ready $ready") - if (ready == 3) { + if (ready == 4) { // request?.fetchPage() // tvListViewModel.getTVViewModel(0)?.let { request?.fetchProgram(it) } diff --git a/app/src/main/java/com/lizongying/mytv/Request.kt b/app/src/main/java/com/lizongying/mytv/Request.kt index c4c625d..4414296 100644 --- a/app/src/main/java/com/lizongying/mytv/Request.kt +++ b/app/src/main/java/com/lizongying/mytv/Request.kt @@ -8,6 +8,7 @@ import android.util.Log import com.lizongying.mytv.Utils.getDateFormat import com.lizongying.mytv.api.ApiClient import com.lizongying.mytv.api.BtraceClient +import com.lizongying.mytv.api.Info import com.lizongying.mytv.api.LiveInfo import com.lizongying.mytv.api.LiveInfoRequest import com.lizongying.mytv.api.ProtoClient @@ -15,6 +16,7 @@ import com.lizongying.mytv.api.YSP import com.lizongying.mytv.api.YSPApiService import com.lizongying.mytv.api.YSPBtraceService import com.lizongying.mytv.api.YSPProtoService +import com.lizongying.mytv.api.YSPTokenService import com.lizongying.mytv.models.TVViewModel import com.lizongying.mytv.proto.Ysp.cn.yangshipin.oms.common.proto.pageModel import com.lizongying.mytv.proto.Ysp.cn.yangshipin.omstv.common.proto.epgProgramModel @@ -24,13 +26,15 @@ import retrofit2.Response import javax.crypto.Cipher import javax.crypto.spec.IvParameterSpec import javax.crypto.spec.SecretKeySpec +import kotlin.reflect.KFunction0 -class Request(var context: Context) { +class Request { + private var yspTokenService: YSPTokenService = ApiClient().yspTokenService + private var yspApiService: YSPApiService = ApiClient().yspApiService + private var yspBtraceService: YSPBtraceService = BtraceClient().yspBtraceService + private var yspProtoService: YSPProtoService = ProtoClient().yspProtoService private var ysp: YSP? = null - private var yspApiService: YSPApiService? = null - private var yspBtraceService: YSPBtraceService? = null - private var yspProtoService: YSPProtoService? = null // TODO onDestroy private val handler = Handler(Looper.getMainLooper()) @@ -83,13 +87,31 @@ class Request(var context: Context) { "海南卫视" to "海南卫视", ) - init { - if (context is MainActivity) { - ysp = YSP(context) - } - yspApiService = ApiClient().yspApiService - yspBtraceService = BtraceClient().yspBtraceService - yspProtoService = ProtoClient().yspProtoService + private var token: String? = null + + fun initYSP(context: Context) { + ysp = YSP(context) + } + + fun fetchToken(fragmentReady: KFunction0) { + yspTokenService.getInfo() + .enqueue(object : Callback { + override fun onResponse(call: Call, response: Response) { + if (response.isSuccessful) { + val info = response.body() + token = info?.data?.token + Log.i(TAG, "info success $token") + } else { + Log.e(TAG, "info status error") + } + fragmentReady() + } + + override fun onFailure(call: Call, t: Throwable) { + Log.e(TAG, "info request error $t") + fragmentReady() + } + }) } fun fetchData(tvModel: TVViewModel) { @@ -102,7 +124,31 @@ class Request(var context: Context) { val title = tvModel.title.value val request = data?.let { LiveInfoRequest(it) } - request?.let { yspApiService?.getLiveInfo(it) } + var cookie = "guid=1; vplatform=109" + val channels = arrayOf( + "CCTV3 综艺", + "CCTV6 电影", + "CCTV8 电视剧", + "风云剧场", + "第一剧场", + "怀旧剧场", + "世界地理", + "风云音乐", + "兵器科技", + "风云足球", + "高尔夫网球", + "女性时尚", + "央视文化精品", + "央视台球", + "电视指南", + "卫生健康", + ) + if (token != null && tvModel.title.value in channels) { + cookie = + "guid=1; vplatform=109; yspopenid=vu0-8lgGV2LW9QjDeuBFsX8yMnzs37Q3_HZF6XyVDpGR_I; vusession=$token" + } + + request?.let { yspApiService.getLiveInfo(cookie, it) } ?.enqueue(object : Callback { override fun onResponse(call: Call, response: Response) { if (response.isSuccessful) { @@ -164,7 +210,7 @@ class Request(var context: Context) { val guid = ysp?.getGuid()!! val pid = tvModel.pid.value!! val sid = tvModel.sid.value!! - yspBtraceService?.kvcollect( + yspBtraceService.kvcollect( c_timestamp = ysp?.generateGuid()!!, guid = guid, c_guid = guid, @@ -177,10 +223,10 @@ class Request(var context: Context) { ftime = getDateFormat("yyyy-MM-dd HH:mm:ss"), seq = tvModel.seq.toString(), ) - ?.enqueue(object : Callback { + .enqueue(object : Callback { override fun onResponse(call: Call, response: Response) { if (response.isSuccessful) { -// Log.d(TAG, "$title kvcollect success") + // Log.d(TAG, "$title kvcollect success") } else { Log.e(TAG, "$title kvcollect status error") tvModel.firstSource() @@ -195,7 +241,7 @@ class Request(var context: Context) { } fun fetchPage() { - yspProtoService?.getPage()?.enqueue(object : Callback { + yspProtoService.getPage().enqueue(object : Callback { override fun onResponse( call: Call, response: Response @@ -239,8 +285,8 @@ class Request(var context: Context) { fun fetchProgram(tvViewModel: TVViewModel) { val title = tvViewModel.title.value - yspProtoService?.getProgram(tvViewModel.programId.value!!, getDateFormat("yyyyMMdd")) - ?.enqueue(object : Callback { + yspProtoService.getProgram(tvViewModel.programId.value!!, getDateFormat("yyyyMMdd")) + .enqueue(object : Callback { override fun onResponse( call: Call, response: Response diff --git a/app/src/main/java/com/lizongying/mytv/TVList.kt b/app/src/main/java/com/lizongying/mytv/TVList.kt index 7df857c..735e46b 100644 --- a/app/src/main/java/com/lizongying/mytv/TVList.kt +++ b/app/src/main/java/com/lizongying/mytv/TVList.kt @@ -31,10 +31,10 @@ object TVList { "CGTN 阿拉伯语频道" to "https://resources.yangshipin.cn/assets/oms/image/202306/2e44e2aa3e7a1cedf07fd0ae59fe69e86a60a2632660a006e3e9e7397b2d107e.png?imageMogr2/format/webp", "CGTN 西班牙语频道" to "https://resources.yangshipin.cn/assets/oms/image/202309/7c337e3dbe64402ec7e4678a619a4a6d95144e42f35161181ff78e143b7cf67a.png?imageMogr2/format/webp", "CGTN 纪录频道" to "https://resources.yangshipin.cn/assets/oms/image/202309/74d3ac436a7e374879578de1d87a941fbf566d39d5632b027c5097891ed32bd5.png?imageMogr2/format/webp", - "风云剧场" to "https://resources.yangshipin.cn/assets/oms/image/202306/4d549e53e6d0f632d5a633d1945280797b153e588f919221a07faa869812cc89.png?imageMogr2/format/webp", "第一剧场" to "https://resources.yangshipin.cn/assets/oms/image/202306/a556bd7d93ce65e18f243a8892b5604f4faa994a4897315914216a710a706208.png?imageMogr2/format/webp", "怀旧剧场" to "https://resources.yangshipin.cn/assets/oms/image/202306/5661bd04fecdb6e899f801147a22ab5d3a475bf2b62e30aec2c0023190ebc9b1.png?imageMogr2/format/webp", + "世界地理" to "https://resources.yangshipin.cn/assets/oms/image/202306/bb3c6c9e145d698137f5bb64a582021a01b51344b929003630eb769ea65832a9.png?imageMogr2/format/webp", "风云音乐" to "https://resources.yangshipin.cn/assets/oms/image/202306/bbf1d024c5228b8dd128b0e3cb1717d173fab4ee84c3a4c8a57b1a215362ca3b.png?imageMogr2/format/webp", "兵器科技" to "https://resources.yangshipin.cn/assets/oms/image/202306/4c6b6a6d3839889f34d33db3c2f80233b26b74d3489b393487635f8704e70796.png?imageMogr2/format/webp", "风云足球" to "https://resources.yangshipin.cn/assets/oms/image/202306/cd1e2bb52b06a991de168733e5ff0f1d85adc8042d40c8f393f723543e5dd08a.png?imageMogr2/format/webp", @@ -44,7 +44,6 @@ object TVList { "央视台球" to "https://resources.yangshipin.cn/assets/oms/image/202306/10e14a92478011aa6c3c8562e62127f3b1908e29fcd78e4b2b24b9e6d3ec2fbc.png?imageMogr2/format/webp", "电视指南" to "https://resources.yangshipin.cn/assets/oms/image/202306/244d72c0eb1615ed7d51c2f5db5a67f306aa3f58c05bc2d34de3aa7e956dc8c9.png?imageMogr2/format/webp", "卫生健康" to "https://resources.yangshipin.cn/assets/oms/image/202306/54a6863656fdfd8f803be193ddf22441c5000a108833889816fd2d8911715ce8.png?imageMogr2/format/webp", - "东方卫视" to "https://resources.yangshipin.cn/assets/oms/image/202306/9bd372ca292a82ce3aa08772b07efc4af1f85c21d1f268ea33440c49e9a0a488.png?imageMogr2/format/webp", "湖南卫视" to "https://resources.yangshipin.cn/assets/oms/image/202306/4120e89d3079d08aa17d382f69a2308ec70839b278367763c34a34666c75cb88.png?imageMogr2/format/webp", "湖北卫视" to "https://resources.yangshipin.cn/assets/oms/image/202306/7a6be5a2bb1dc53a945c016ff1f525dc4a84c51db371c15c89aa55404b0ba784.png?imageMogr2/format/webp", @@ -93,10 +92,10 @@ object TVList { "CGTN 阿拉伯语频道" to "600084782", "CGTN 西班牙语频道" to "600084744", "CGTN 记录频道" to "600084781", - "风云剧场" to "600099658", "第一剧场" to "600099655", "怀旧剧场" to "600099620", + "世界地理" to "600099637", "风云音乐" to "600099660", "兵器科技" to "600099649", "风云足球" to "600099636", @@ -106,7 +105,6 @@ object TVList { "央视台球" to "600099652", "电视指南" to "600099656", "卫生健康" to "600099651", - "东方卫视" to "600002483", "湖南卫视" to "600002475", "湖北卫视" to "600002508", @@ -133,18 +131,18 @@ object TVList { "CCTV4K 超高清" to arrayOf("600002264", "2000266303"), "CCTV1 综合" to arrayOf("600001859", "2000210103"), "CCTV2 财经" to arrayOf("600001800", "2000203603"), -// "CCTV3 综艺" to arrayOf("600001801",""), + "CCTV3 综艺" to arrayOf("600001801", "2000203803"), "CCTV4 中文国际" to arrayOf("600001814", "2000204803"), "CCTV5 体育" to arrayOf("600001818", "2000205103"), "CCTV5+ 体育赛事" to arrayOf("600001817", "2000204503"), -// "CCTV6 电影" to arrayOf("600001802",""), + "CCTV6 电影" to arrayOf("600001802", "2000203303"), "CCTV7 国防军事" to arrayOf("600004092", "2000510003"), -// "CCTV8 电视剧" to arrayOf("600001803",""), + "CCTV8 电视剧" to arrayOf("600001803", "2000203903"), "CCTV9 记录" to arrayOf("600004078", "2000499403"), "CCTV10 科教" to arrayOf("600001805", "2000203503"), "CCTV11 戏曲" to arrayOf("600001806", "2000204103"), "CCTV12 社会与法" to arrayOf("600001807", "2000202603"), -// "CCTV13 新闻" to arrayOf("600001811",""), +// "CCTV13 新闻" to arrayOf("600001811","2000204603"), "CCTV14 少儿" to arrayOf("600001809", "2000204403"), "CCTV15 音乐" to arrayOf("600001815", "2000205003"), "CCTV16 奥林匹克" to arrayOf("600098637", "2012375003"), @@ -155,20 +153,19 @@ object TVList { "CGTN 阿拉伯语频道" to arrayOf("600084782", "2010155203"), "CGTN 西班牙语频道" to arrayOf("600084744", "2010152503"), "CGTN 记录频道" to arrayOf("600084781", "2010155403"), - -// "风云剧场" to arrayOf("600099658",""), -// "第一剧场" to arrayOf("600099655",""), -// "怀旧剧场" to arrayOf("600099620",""), -// "风云音乐" to arrayOf("600099660",""), -// "兵器科技" to arrayOf("600099649",""), -// "风云足球" to arrayOf("600099636",""), -// "高尔夫网球" to arrayOf("600099659",""), -// "女性时尚" to arrayOf("600099650",""), -// "央视文化精品" to arrayOf("600099653",""), -// "央视台球" to arrayOf("600099652",""), -// "电视指南" to arrayOf("600099656",""), -// "卫生健康" to arrayOf("600099651",""), - + "风云剧场" to arrayOf("600099658", "2012513603"), + "第一剧场" to arrayOf("600099655", "2012514403"), + "怀旧剧场" to arrayOf("600099620", "2012511203"), + "世界地理" to arrayOf("600099637", "2012513303"), + "风云音乐" to arrayOf("600099660", "2012514103"), + "兵器科技" to arrayOf("600099649", "2012513403"), + "风云足球" to arrayOf("600099636", "2012514203"), + "高尔夫网球" to arrayOf("600099659", "2012512503"), + "女性时尚" to arrayOf("600099650", "2012513903"), + "央视文化精品" to arrayOf("600099653", "2012513803"), + "央视台球" to arrayOf("600099652", "2012513703"), + "电视指南" to arrayOf("600099656", "2012514003"), + "卫生健康" to arrayOf("600099651", "2012513503"), "东方卫视" to arrayOf("600002483", "2000292403"), "湖南卫视" to arrayOf("600002475", "2000296203"), "湖北卫视" to arrayOf("600002508", "2000294503"), @@ -221,18 +218,19 @@ CGTN 俄语频道,http://liveru.cgtn.com/1000r/prog_index.m3u8 CGTN 阿拉伯语频道,http://livear.cgtn.com/1000a/prog_index.m3u8 CGTN 西班牙语频道,http://livees.cgtn.com/500e/prog_index.m3u8;http://livees.cgtn.com/1000e/prog_index.m3u8 CGTN 纪录频道,https://livedoc.cgtn.com/500d/prog_index.m3u8 -电视指南,http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226987/index.m3u8 -风云足球,http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226984/index.m3u8 风云剧场,http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226950/index.m3u8 -风云音乐,http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226953/index.m3u8 -央视台球,http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226956/index.m3u8 第一剧场,http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226959/index.m3u8 -女性时尚,http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226969/index.m3u8 怀旧剧场,http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226972/index.m3u8 +世界地理, +风云音乐,http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226953/index.m3u8 兵器科技,http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226975/index.m3u8 +风云足球,http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226984/index.m3u8 高尔夫网球,http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226978/index.m3u8 +女性时尚,http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226969/index.m3u8 央视文化精品,http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226981/index.m3u8 - +央视台球,http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226956/index.m3u8 +电视指南,http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226987/index.m3u8 +卫生健康, 地方频道 东方卫视,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226217/index.m3u8 湖南卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226307/index.m3u8;http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226211/index.m3u8 diff --git a/app/src/main/java/com/lizongying/mytv/api/ApiClient.kt b/app/src/main/java/com/lizongying/mytv/api/ApiClient.kt index c978bdc..e9b47a3 100644 --- a/app/src/main/java/com/lizongying/mytv/api/ApiClient.kt +++ b/app/src/main/java/com/lizongying/mytv/api/ApiClient.kt @@ -7,6 +7,8 @@ import retrofit2.converter.gson.GsonConverterFactory class ApiClient { private val yspUrl = "https://player-api.yangshipin.cn/" + private val myUrl = "https://lyrics.run/" +// private val myUrl = "http://10.0.2.2:8081/" val yspApiService: YSPApiService by lazy { Retrofit.Builder() @@ -14,4 +16,11 @@ class ApiClient { .addConverterFactory(GsonConverterFactory.create()) .build().create(YSPApiService::class.java) } + + val yspTokenService: YSPTokenService by lazy { + Retrofit.Builder() + .baseUrl(myUrl) + .addConverterFactory(GsonConverterFactory.create()) + .build().create(YSPTokenService::class.java) + } } \ No newline at end of file diff --git a/app/src/main/java/com/lizongying/mytv/api/Info.kt b/app/src/main/java/com/lizongying/mytv/api/Info.kt new file mode 100644 index 0000000..7708ac8 --- /dev/null +++ b/app/src/main/java/com/lizongying/mytv/api/Info.kt @@ -0,0 +1,11 @@ +package com.lizongying.mytv.api + +data class Info( + val code: Int?, + val msg: String?, + val data: InfoData, +) + +data class InfoData( + val token: String, +) diff --git a/app/src/main/java/com/lizongying/mytv/api/YSPApiService.kt b/app/src/main/java/com/lizongying/mytv/api/YSPApiService.kt index 2b42f62..b121d07 100644 --- a/app/src/main/java/com/lizongying/mytv/api/YSPApiService.kt +++ b/app/src/main/java/com/lizongying/mytv/api/YSPApiService.kt @@ -13,20 +13,9 @@ interface YSPApiService { "content-type: application/json;charset=UTF-8", "referer: https://www.yangshipin.cn/", "yspappid: 519748109", - "cookie: guid=1; vplatform=109" ) fun getLiveInfo( - @Body request: LiveInfoRequest, - ): Call - - @POST("v1/player/get_live_info") - @Headers( - "content-type: application/json;charset=UTF-8", - "referer: https://www.yangshipin.cn/", - "yspappid: 519748109", - "cookie: guid=1; vplatform=109; yspopenid=vu0-8lgGV2LW9QjDeuBFsX8yMnzs37Q3_HZF6XyVDpGR_I; vusession=mTIVXnDeVUg0FcP6Xo4kaXd9fxlc70a558kySW4phQU" - ) - fun getLiveInfo2( + @Header("cookie") cookie: String, @Body request: LiveInfoRequest, ): Call } \ No newline at end of file diff --git a/app/src/main/java/com/lizongying/mytv/api/YSPTokenService.kt b/app/src/main/java/com/lizongying/mytv/api/YSPTokenService.kt new file mode 100644 index 0000000..3188708 --- /dev/null +++ b/app/src/main/java/com/lizongying/mytv/api/YSPTokenService.kt @@ -0,0 +1,11 @@ +package com.lizongying.mytv.api + +import retrofit2.Call +import retrofit2.http.GET + + +interface YSPTokenService { + @GET("my-tv/v1/info") + fun getInfo( + ): Call +} \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 5157486..9b249ed 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -2,7 +2,6 @@ From 930c7957ee529c76ea6f81c99660973c0a5040e8 Mon Sep 17 00:00:00 2001 From: Li ZongYing Date: Fri, 5 Jan 2024 18:24:44 +0800 Subject: [PATCH 4/4] get token on switch --- .../java/com/lizongying/mytv/MainFragment.kt | 14 +--- .../com/lizongying/mytv/PlayerFragment.kt | 68 +---------------- .../main/java/com/lizongying/mytv/Request.kt | 74 ++++++++++++------- app/src/main/java/com/lizongying/mytv/TV.kt | 4 - 4 files changed, 50 insertions(+), 110 deletions(-) diff --git a/app/src/main/java/com/lizongying/mytv/MainFragment.kt b/app/src/main/java/com/lizongying/mytv/MainFragment.kt index 6387ab8..7316108 100644 --- a/app/src/main/java/com/lizongying/mytv/MainFragment.kt +++ b/app/src/main/java/com/lizongying/mytv/MainFragment.kt @@ -43,10 +43,6 @@ class MainFragment : BrowseSupportFragment() { private var ready = 0 - init { - request.fetchToken(::fragmentReady) - } - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) headersState = HEADERS_DISABLED @@ -212,11 +208,7 @@ class MainFragment : BrowseSupportFragment() { fun fragmentReady() { ready++ Log.i(TAG, "ready $ready") - if (ready == 4) { - -// request?.fetchPage() -// tvListViewModel.getTVViewModel(0)?.let { request?.fetchProgram(it) } - + if (ready == 3) { val tvViewModel = tvListViewModel.getTVViewModel(itemPosition) tvViewModel?.changed() @@ -280,10 +272,6 @@ class MainFragment : BrowseSupportFragment() { } } - fun tvViewModel(): TVViewModel? { - return tvListViewModel.getTVViewModel(itemPosition) - } - private fun setupEventListeners() { onItemViewClickedListener = ItemViewClickedListener() onItemViewSelectedListener = ItemViewSelectedListener() diff --git a/app/src/main/java/com/lizongying/mytv/PlayerFragment.kt b/app/src/main/java/com/lizongying/mytv/PlayerFragment.kt index 71c3431..5fdfeb3 100644 --- a/app/src/main/java/com/lizongying/mytv/PlayerFragment.kt +++ b/app/src/main/java/com/lizongying/mytv/PlayerFragment.kt @@ -14,9 +14,6 @@ import androidx.media3.common.Player import androidx.media3.common.VideoSize import androidx.media3.common.util.UnstableApi import androidx.media3.exoplayer.ExoPlayer -import androidx.media3.exoplayer.analytics.AnalyticsListener -import androidx.media3.exoplayer.source.LoadEventInfo -import androidx.media3.exoplayer.source.MediaLoadData import androidx.media3.ui.PlayerView import com.lizongying.mytv.databinding.PlayerBinding import com.lizongying.mytv.models.TVViewModel @@ -80,71 +77,8 @@ class PlayerFragment : Fragment() { val videoUrlCurrent = tvViewModel.videoIndex.value?.let { tvViewModel.videoUrl.value?.get(it) } playerView?.player?.run { - val mediaItem = MediaItem.Builder() - tvViewModel.id.value?.let { mediaItem.setMediaId(it.toString()) } - videoUrlCurrent?.let { mediaItem.setUri(it) } - setMediaItem(mediaItem.build()) + videoUrlCurrent?.let { setMediaItem(MediaItem.fromUri(it)) } prepare() - -// val httpDataSource = DefaultHttpDataSource.Factory() -// val hls = HlsMediaSource.Factory(httpDataSource).createMediaSource( -// MediaItem.fromUri( -// Uri.parse(videoUrlCurrent) -// ) -// ) -// val analyticsListener: AnalyticsListener= MyAnalyticsListener() -// val exoPlayer = playerView?.player as ExoPlayer -// exoPlayer.addAnalyticsListener(analyticsListener) -// exoPlayer.setMediaSource(hls) -// exoPlayer.playWhenReady = true -// -// -// exoPlayer.let { -// val parameters = -// TrackSelectionParameters.Builder().setPreferredAudioMimeType("application/id3").build() -// // 更新轨道选择器参数 -// exoPlayer.trackSelector?.parameters = parameters -// Log.i(TAG, "parameters $parameters") -// } -// -// // 获取当前轨道组 -// -// playerView?.player = exoPlayer -// playerView?.player?.prepare() - - -// -// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { -// val codecList = MediaCodecList(MediaCodecList.ALL_CODECS) -// val codecInfos = codecList.codecInfos -// -// for (codecInfo in codecInfos) { -// -// val supportedTypes = codecInfo.supportedTypes -// for (type in supportedTypes) { -// Log.d("supportedTypes", "$type") -//// if (type.equals(androidx.media3.exoplayer.mediacode, ignoreCase = true)) { -//// Log.d("AudioCodecChecker", "Device supports MPEG-L2") -//// return -//// } -// } -// } -// -// Log.d("AudioCodecChecker", "Device does not support MPEG-L2") -// } - - } - } - - @UnstableApi - class MyAnalyticsListener : AnalyticsListener { - override fun onLoadStarted( - eventTime: AnalyticsListener.EventTime, - loadEventInfo: LoadEventInfo, - mediaLoadData: MediaLoadData - ) { - super.onLoadStarted(eventTime, loadEventInfo, mediaLoadData) -// Log.i(TAG, "loadEventInfo.uri ${loadEventInfo.uri} ${mediaLoadData.trackFormat.toString()}") } } diff --git a/app/src/main/java/com/lizongying/mytv/Request.kt b/app/src/main/java/com/lizongying/mytv/Request.kt index 4414296..dc21ff9 100644 --- a/app/src/main/java/com/lizongying/mytv/Request.kt +++ b/app/src/main/java/com/lizongying/mytv/Request.kt @@ -114,39 +114,16 @@ class Request { }) } - fun fetchData(tvModel: TVViewModel) { + fun fetchVideo(tvModel: TVViewModel, cookie: String) { if (::myRunnable.isInitialized) { handler.removeCallbacks(myRunnable) } - tvModel.seq = 0 - val data = ysp?.switch(tvModel) val title = tvModel.title.value + tvModel.seq = 0 + val data = ysp?.switch(tvModel) val request = data?.let { LiveInfoRequest(it) } - var cookie = "guid=1; vplatform=109" - val channels = arrayOf( - "CCTV3 综艺", - "CCTV6 电影", - "CCTV8 电视剧", - "风云剧场", - "第一剧场", - "怀旧剧场", - "世界地理", - "风云音乐", - "兵器科技", - "风云足球", - "高尔夫网球", - "女性时尚", - "央视文化精品", - "央视台球", - "电视指南", - "卫生健康", - ) - if (token != null && tvModel.title.value in channels) { - cookie = - "guid=1; vplatform=109; yspopenid=vu0-8lgGV2LW9QjDeuBFsX8yMnzs37Q3_HZF6XyVDpGR_I; vusession=$token" - } request?.let { yspApiService.getLiveInfo(cookie, it) } ?.enqueue(object : Callback { @@ -197,6 +174,51 @@ class Request { }) } + fun fetchData(tvModel: TVViewModel) { + var cookie = "guid=1; vplatform=109" + val channels = arrayOf( + "CCTV3 综艺", + "CCTV6 电影", + "CCTV8 电视剧", + "风云剧场", + "第一剧场", + "怀旧剧场", + "世界地理", + "风云音乐", + "兵器科技", + "风云足球", + "高尔夫网球", + "女性时尚", + "央视文化精品", + "央视台球", + "电视指南", + "卫生健康", + ) + if (tvModel.title.value in channels) { + yspTokenService.getInfo() + .enqueue(object : Callback { + override fun onResponse(call: Call, response: Response) { + if (response.isSuccessful) { + val info = response.body() + token = info?.data?.token + Log.i(TAG, "info success $token") + cookie = + "guid=1; vplatform=109; yspopenid=vu0-8lgGV2LW9QjDeuBFsX8yMnzs37Q3_HZF6XyVDpGR_I; vusession=$token" + fetchVideo(tvModel, cookie) + } else { + Log.e(TAG, "info status error") + } + } + + override fun onFailure(call: Call, t: Throwable) { + Log.e(TAG, "info request error $t") + } + }) + } else { + fetchVideo(tvModel, cookie) + } + } + inner class MyRunnable(private val tvModel: TVViewModel) : Runnable { override fun run() { fetchBtrace(tvModel) diff --git a/app/src/main/java/com/lizongying/mytv/TV.kt b/app/src/main/java/com/lizongying/mytv/TV.kt index ebb1dfe..e9f130f 100644 --- a/app/src/main/java/com/lizongying/mytv/TV.kt +++ b/app/src/main/java/com/lizongying/mytv/TV.kt @@ -25,8 +25,4 @@ data class TV( ", programId='" + programId + '\'' + '}' } - - companion object { - internal const val serialVersionUID = 727566175075960653L - } } \ No newline at end of file