From 8b3eed0ffafa533606f95d34f014a85d07f8e7da Mon Sep 17 00:00:00 2001 From: Kestas Venslauskas Date: Fri, 14 Jun 2024 17:32:03 +0300 Subject: [PATCH] feat: car play data refresh & live channel posters --- app/car/BaseListTemplate.ts | 5 +- app/car/CarPlay.ts | 13 +++- app/car/live/LiveTemplate.ts | 80 +++++++++++++-------- app/car/live/assets/ic_klasika.png | Bin 0 -> 6711 bytes app/car/live/assets/ic_lituanica.png | Bin 0 -> 6621 bytes app/car/live/assets/ic_opus.png | Bin 0 -> 5752 bytes app/car/live/assets/ic_plius.png | Bin 0 -> 4909 bytes app/car/live/assets/ic_radijas.png | Bin 0 -> 7028 bytes app/car/live/assets/ic_tv.png | Bin 0 -> 3454 bytes app/car/newest/NewestTemplate.ts | 27 +++---- app/car/popular/PopularTemplate.ts | 27 +++---- app/car/recommended/RecommendedTemplate.ts | 27 +++---- app/car/types.ts | 5 +- 13 files changed, 111 insertions(+), 73 deletions(-) create mode 100644 app/car/live/assets/ic_klasika.png create mode 100644 app/car/live/assets/ic_lituanica.png create mode 100644 app/car/live/assets/ic_opus.png create mode 100644 app/car/live/assets/ic_plius.png create mode 100644 app/car/live/assets/ic_radijas.png create mode 100644 app/car/live/assets/ic_tv.png diff --git a/app/car/BaseListTemplate.ts b/app/car/BaseListTemplate.ts index 218d6f1..57cfdce 100644 --- a/app/car/BaseListTemplate.ts +++ b/app/car/BaseListTemplate.ts @@ -3,7 +3,7 @@ import {PlayListItem} from './types'; import TrackPlayer, {PitchAlgorithm} from 'react-native-track-player'; import {carPlayNowPlayingTemplate} from './nowPlaying/createNowPlayingTemplate'; -export type PlaylistProvider = Promise; +export type PlaylistProvider = () => Promise; export type BaseListTemplateOptions = { title: string; @@ -42,7 +42,7 @@ export class BaseListTemplate { } async build() { - const items = await this.playlistProvider; + const items = await this.playlistProvider(); if (this.template) { this.template.config.onItemSelect = undefined; @@ -63,6 +63,7 @@ export class BaseListTemplate { items?.map((item) => ({ text: item.text, detailText: item.detailText, + image: item.image, imgUrl: item.imgUrl as any, })) ?? [], }, diff --git a/app/car/CarPlay.ts b/app/car/CarPlay.ts index 7712f20..76628ff 100644 --- a/app/car/CarPlay.ts +++ b/app/car/CarPlay.ts @@ -1,4 +1,4 @@ -import {CarPlay} from 'react-native-carplay'; +import {AlertTemplate, CarPlay} from 'react-native-carplay'; import Gemius from 'react-native-gemius-plugin'; import analytics from '@react-native-firebase/analytics'; import TrackPlayer from 'react-native-track-player'; @@ -11,7 +11,16 @@ CarPlay.emitter.addListener('didConnect', async () => { Gemius.sendPageViewedEvent('carplay_connected'); analytics().logEvent('carplay_connected'); setupTrackPlayer(); - CarPlay.setRootTemplate(await RootTemplate.build()); + + CarPlay.presentTemplate( + new AlertTemplate({ + id: 'loading-alert', + titleVariants: ['PraĊĦome palaukti...'], + }), + ); + const rootTemplate = await RootTemplate.build(); + CarPlay.dismissTemplate(); + CarPlay.setRootTemplate(rootTemplate); CarPlay.enableNowPlaying(true); }); diff --git a/app/car/live/LiveTemplate.ts b/app/car/live/LiveTemplate.ts index 37b2a8e..83ca8e1 100644 --- a/app/car/live/LiveTemplate.ts +++ b/app/car/live/LiveTemplate.ts @@ -1,9 +1,7 @@ import {fetchCarLivePlaylist} from '../../api'; import {PlayListItem} from '../types'; import {BaseListTemplate} from '../BaseListTemplate'; -import {VIDEO_DEFAULT_BACKGROUND_IMAGE} from '../../constants'; import {fetchStreamData} from '../../components/videoComponent/fetchStreamData'; -import {BASE_IMG_URL} from '../../util/ImageUtil'; export const TEMPLATE_ID_LIVE = 'lrt-list-template-live'; @@ -16,36 +14,60 @@ class LiveTemplate extends BaseListTemplate { tabSystemImageName: 'play.square.fill', id: TEMPLATE_ID_LIVE, }, - fetchCarLivePlaylist() - .then((response) => - Promise.all( - response.tvprog?.items?.map((channel) => - fetchStreamData({ - url: channel.stream_url, - title: channel.channel_title, - poster: channel.cover_url.startsWith('http') - ? channel.cover_url - : BASE_IMG_URL + channel.cover_url, - }), - ) || [], - ), - ) - .then((data) => { - if (data?.length) { - const items: PlayListItem[] = data.map((stream) => ({ - id: stream.mediaId, - text: stream.channelTitle ?? stream.title, - // detailText: stream.title, - imgUrl: stream.poster || VIDEO_DEFAULT_BACKGROUND_IMAGE, - streamUrl: stream.streamUri, - })); - return items; - } - return []; - }), + () => + fetchCarLivePlaylist() + .then((response) => + Promise.all( + response.tvprog?.items?.map((channel) => + fetchStreamData({ + url: channel.stream_url, + title: channel.channel_title, + //Return channel id as poster so we can map it to the actual image later + poster: channel.channel_id.toString(), + }), + ) || [], + ), + ) + .then((data) => { + if (data?.length) { + const items: PlayListItem[] = data.map((stream) => ({ + id: stream.mediaId, + text: stream.channelTitle ?? stream.title, + // detailText: stream.title, + image: getImageByChannelId(stream.poster), + imgUrl: undefined, + streamUrl: stream.streamUri, + })); + return items; + } + return []; + }), ); } } +const getImageByChannelId = (channelId?: string) => { + switch (channelId) { + case '1': { + return require('./assets/ic_tv.png'); + } + case '2': { + return require('./assets/ic_plius.png'); + } + case '3': { + return require('./assets/ic_lituanica.png'); + } + case '5': { + return require('./assets/ic_klasika.png'); + } + case '6': { + return require('./assets/ic_opus.png'); + } + default: { + return require('./assets/ic_radijas.png'); + } + } +}; + const instance = new LiveTemplate(); export default instance; diff --git a/app/car/live/assets/ic_klasika.png b/app/car/live/assets/ic_klasika.png new file mode 100644 index 0000000000000000000000000000000000000000..4191adda3134be74bc0402634220df7b458e8423 GIT binary patch literal 6711 zcmeHM`8Qi@_dljyEiP`0RtIg}x9+W)s>D!1bYPIcKkDfA+KY^Vxep=bXEL zxS!G3roRmU0FAS*CochjqWo47P~9RQz9%w-@?mS7t1k=y)VBY)6o9AbopPZ9?9!PN zK>fg;Ir)QfxU-ux05s;Qi9=KXU{~MSlg^hD6&6_@bz$(-w<}la!R8Gi0eAlVO|AHB z%iZ*g#&?6e>y#^?PM*0%_q0hh+YVXx911>m@o{}wq{Z{WlW%id6n7uE_%uD{QrX!+ z^*XJCrhBYi_P-qDi0*5`!i$QNvFyz?bh0DC`$W_SY%x&)=5)|_>?FDykId8D3usN# z?123b03h8-?vUbE08srE0QUd;AHhHI_=gVv*R$ax7P0WIs~yY6b7x~8z+IAhH)EFu z9AxPFq1v};?9TXw)@G??iPUnyxtAGS%Ub1EV{uBnRDZjG)95oBRW*!`NNHP1~JX@c9t ze(lw~o>HvvEacdBW$!`encS0CzV}TvKl*Txx{HilVI;8J z7D3NR+78l5%e`Z@xNlt^$DW%;7<5$0dKwABHSueKqxERNtP+x}UDs}kiHH?{ev(6o zq$GXmtXGsZX}0I}jiWeM^V#C)zbj}i@4eu;S7FN33q#p;w0_y3fh0;B@JLwb(@~me z$=(+Q@n&6yb_xt{DZ3f)A8+LLbRZ>ZiO+<>?;2tpN*VxaJwU;hs9tv00xTH__lB%s zO_ZQ;ue~RPcOdJScR|j=gni%kPo()T2a$fay}2iB4{V-GK9 zBZX%0+%ZPDih}w1R9(qXW|^N#|A0p022VrQ-8#9t81yZ(%G0ftMx<@3@RO6LMxU`f9Z~hk z{Ao6Vz<}h)*#3I2`S4?L{i8g`IA_6w^Xq*5Du)z-*|Re^x!E7+SL;V0CTMuV-z~~i z_3ysl!^sfx?-+FSUm<-VJTOPEu6yNXMm&jb7 zcj=gMyB;?BsN0w*G$^EUlw$;3 z!t@*kiuRC&N{9={a|Y27&C?Xor<~W6?9Lge@j0xJ9)RliH{zX}Yo3jTX0V&ywLqmF z$Nma4*@BK2-LU%sq$?R+VnRyKwJ$L#rXS#I1cKzDmEPeYH>A6nL*y>2k-J~%m-223 zj!4g81cY|;r6<(bK(V(WU=^598FG<*-4F`;c1!f{NJMUQ{#s}U2+!XC$! z_j^C+9B!>vt@h?m2x$hz*X*xlKK1*2J_7=h!Oz_D^1N=$_f7gz&PSjx!0(0GDVS%- z>2O1^+pBl^i=ku6SI8W6|__mp|v{!b)=( zQCOJ6qQ>>=%`Zc7yr_5W(i=K@aA%Zsv=IFYwFW+R#`kOyXF&xVPn39jU@f28e>ccIjkt?AmW6XF=b?x5btu<0AH1ruX*@5dYk zrUMUQUz_CFtW7kwQSS#z-`3Ad zpa(xTJ^4iR*4A=8rQsevP7t#c9;TzzTD$*u<@I?k+5hy1fn!(NuJpPNDdZ@e`4pBDbSv=E&vfmhu_9c8#asK)X zU>U!Z#2Lx7$}H$X;g-U|V~)(DEw*n4sr=O<+mlW;TGdZhX5u^&;&we-(|9JIblnL1 zgtSQzWl?_sXakm)T1D+_@U?f*PV(5{VV<$OKJSUf!cI{G+T4d2P9{6i^kgk-eAgim ziaQUj_rppN!fWjKv^O9B!_~gN6}7+1AB42X^L?N1)dy{G;|U+o8~so)i<<;`p766x z%<^AI`)k}1#kY*rM|Dl^0AYaUQ>dq$>jL!sp~Kr_rbWKkn~TfhLwv5@PLMO8NX~%l zZZ>LRIsRnu&jyw9kc+K*S&8h7Q=Kin_rv+=g+EYK>$X4|j z_eL5qE8P3QN5RM>c%CL4C8Sn={Y!sW@%bICUBA{|mz?k2+@-7ZKyKJ)(PEv!sE0dy z_U1P6FQnH5Auk<>W9sc&>JkpV?kzo3awkJyXsr|19W`FLFwC^C^OXD|E*dy}3gql7%U_SMzYSc=wO1F=pvPd(aA>8|BJLZj#p`i(Avb+V8Kgcp9q%h#) z;wgS8c6j&LA*MKB(58LD=ofA{eo?G$=<2d+H@WqOgK&*{UC+Anc%`Y<8OU+#+1hJ@ z7sEZM>4I3nSf(#!o#f@w1525PN-$m&f`0CckP)O`Oj2lo?aPgcg;wm>p;0OSvKV7L z)V-$AypTNEyt?yj0X89Ircobl{sSQ{Q3y)El9D4~qo$2L1udjuR;vHml!a zjYmU8X>y|M`Vvz1s?#cuY_-glM@OMu zHu=>JQi3FYVmeBk=m&|q_#Bz_rf<#dX0|qP%Us30f)qTgfvP1rF}iDqH&5g!whJ)E zW=jbrtTq~P!r>3Pk|*VM9Mm1rCR;7tmrGCOTbfT-P+iDzwJQv@aKTXp^9tlIHY}AU z%%nei!n*LvYuFI->1dUP{9G`c(*i{WcuV%QcMR31WeGA#gR%{EkkCjsBOjTGRWL6FY^6o zxnRz{SDxN5=1temM~FVv#OT*?X%4oy>c~vLHF{Ltom%V@7C1L?c8jJ{s{H7{Z4R!! zu=2Rwf8loI!-Af4tJRAhIXGD|2hL8M6iyf5%TewV@zRo#t{GbPVrUI(FP;!lkG*~G zWqIsy@|5e0lCIMFAt0=bmRVl&--LkCn>wS6KzB%!Oh-h@(=wDQqhGc$+bx8wadzkB zvHGKM)Q4~I(K>&ECMIHOlJ~OCHBj5_Sl1ve1{MZ{RhVl1WQrP#&tQ|hYO}bm%$i&W zl}5TCnD_^klM=V> z@$CGNKn5Zl`ft>GiO}sL7&CX{f{SddhQOSU_5yuF9(G*)wgS>0Zee(FFbH?VV1`;j zxvxh+>gf_;$BoGLS^`&s01u0cYk2&5^D6LqH(mB2YN{?@VN5lBmv7+ys36Lz!2R=; z)D}$_Y!52ctZJ;r=yAdBuv|s7$;@G7mcDNN?h_KLp87|PlnGdS3bUI}`CRE1(!jsdG@i5<#ZS$+ zBPi$>U}G}Bb4$suK-i7e;OZ;=xW(r~E4caQvbmM)s*)UNXZ4fC(>8~9P^5F%z69gT zEHMxC9d$Z&V(X=-9l=JRE->fX1tRnr&DDkb`_uQz)V?8=FRppzbduA;P`;w*NW{~4 z8zix(J}F}DON^{o|8zav5Vl*RIs^rhE%K9$TywP+zv)cL8x(`)g-wsya@ZkXl?`wUDf%O8#C6&GP zQgj*^CdwXI6^zl|?@Z>h=Z+&^N-kgKo%YQGMpV4iviw@>^)bz0?(TgZvBKT-$1WvS z*T~y4e)nMgcm?W(G@m|rWW(QsjmSjDTnr|_j_!M!Ha6p<7M^6N&~ToSS>9+W@AzE0 ztjfKDYuPfonpyV0t#>7~Od8NCEyHZ^Hn=}6tntce_Rb%QgS02)y`l#9!D~Kz{%-c? zw!P5yxPtu7xhermko_QLF}moCqg{8%aS?KWgIyG~#AZdS415>GNIJWa3$3{^rL}5w zB8NhZw)n;)XPp&5;$Ly~dJzFlv1j!9g?tEd#Ye#H(L!|&64qlV=Bp(VzpgMmq_$JI zOW-?oK^bUhAzfsQ%4!kX9m3TWwYkBv{C^#|{VYA>U!bISp&Ifp#J>Q5mMZ`_?N@wC|YnEru^{lxQuUZ%j9gsQz0D#b6CYP@R zz%KA{7qE{Xysd}!Gr`+_Uy~aF03dL9=i&o0vLwKdd;!;u4FG(X%slwA8~um*9{^C6 zBEWXp0|1i#e_j5=I+SmD%&GWfP*~GyS#R~}L$B^dKdvoG6g%Ey)UQ&OND6s{yx0?y zbh0Vch;S_YTG6L>iBi?iN|3QhCr@m+VjjL6bf>(FJCYZ@U%*uX{rV2M_MNiJr?GcZ zOgPPDAybPK(Z!x2!|3o_%a43VbZ9!WSagFr{X1rSl_5{vu-yZ^TRU|Gc#;eN(J{LL z;KT_4ICh*5v}Zp6n3w>-B?HjbLx%w1$&-JE{NtB@!0_*rB;7_fWR;O1n}L2Ww56?E zce@vrQ9%0;Tu;{@ux2ngLfbIa?fM)}bLPMh4@;CX?eIdC7m~XNag~M*4bRA*yJNEc^8RiXMMU?yfOAYGMNXD%3YO<^xV*wbz0qEN3L+!IghC#NmHyO@~|~S4!EQqLERiGEaAv= zT`Mj;73#w$jjM~~oWYnBC?!X4b_Nep9JW7fKaEOvZLihhepfi{I`Lcim7;H(!u^8I zE<}G>`2ys}_1l2+W!DGgvuo0Ym9B5aq&Gh#P$IrngjfqIj!TOs`e`mT#W!?scj0c- z5fs;^7MFcOZQrSC1+VLJrwT1?te`vcZlkGK8ZS}<>bI~}yB~9pHSX6LaRkP_#Zb0r`JxoK zt&^1dYupQNZ~hdBewv{8OeG|$%w@sfP%9?1vkJFV^j!aqR8e)8d~=OkQc=QF8x(VX z?TUT%N}(mv>IC3?qE>=yUsN1{|57K@e7`XSgn*h1rUS&nMK^!1ZplLQh;2k-I*DTT*J z2m20AiN*8n0UkBolS>IL&=j3ynO1jYddbja7-|&%>ofMQ>HlH(WPzROx+7dF4s&ke_S}2zDpSHhbdTG+PuK7 z^7cFnIS_rX_1Q}wiXN^=iMYBD@HVXbkUdk1Yi}z8v0!|H`dNpv2hc^G`}Le}+bj^F zKCQ{TvZHeN9Ne$j$K$H2$6hh7n9JO$s)0Zo(qB60tWAj&;zzZ+55!y$)J_G?Lx8i^ z{-$aQDmisO`mN*nyk_`Rl*i3{QhZYy*dB}~%f^dN#71-Fwp!jQ?M^_`H3YU)Ag>uG zs$p(^N8&2b^suF3``Mn$nvVLKBj@YwG&BZWnr?cx#Mjz*dk$MvwO`}CM$2c(Z-)e> zo$d;h(+kJE-3zoXYOiI=Tl0QDZ=4TYc^kMz`+~_p@CBMSNACh`Pv9vlwR2-ORw<3_ z<|&~*v7={ih!JoPlcX6Xoxb)9V~7tJIdP)wcChGG+SbqFKeF`anAdGO z$fpcoDi6G~!Ye&Jl|UB)c2BW1Ow?t$0&B~x@r)-bHG-wWF!JC_OMUm+{*5_Aa5uD| zHZwt8U^as~7ttf z)BR!ipt4+tnWFv|IhP$aP&L?tSo=m}^Ki*emLuAo&PsBVD9GH3mt;e+mJKmmelehQ zmmkSGv2}jxXYBJfD|voFKb^NUo1gh_)=kud{o`R-AE_IQ**ZFik%Kt7txawS`}O*g zNfwu2ROekc%vNg>ivtrwusCo_6>qFEZcrP93#JS8^@E`+`$@XhB2pu1kQp)JHiz-> zyEx{4y0oNM`)1T*zmUsTRubU)=SzDh8wy8L5CyvnIWf+>q4jY zg*-fKsA&_Pxx7Zs51hHZv=b42TV3{MQ2?swTs>ST-=#^L*z+gqz!zPSgJ!?e=G>-m z-lpVa88}&1Gf!R1E!l?;fGEjw?dwj~ykBQdzl`I{mreWrr7sil!Sqqs4xpkz@5?ndLH;zwTXs2pONir>XEBRs|?t1BO}4(E3slix3we%}=3(RI5=Jr?r9P3C{43Z%TfLI1>Ezza&y0iR%NKU`#f zSoBGzBNmgY@X+)}?EBoZvco&!*pcZbf-BL-SU7kd>A0D^C0ANQiXZT(;3rmdNugkYSo-a!lJ?I^dl&~>baTW?8n9I zMQOl+x-+BKu17v#;4YEDzy*h!`(K;S0Nk)we2>zB3u4vDrkKA`lw%LS!Jz@7ux#QD z>)Mk|po8}S>+b`%Fr)|`xnKt*@`u@9)TuriA_u7>c94R{#75j(rLx(z6x&4)%w!L4 z{^t`j^xd|LV7-533>F|*%_c8$#|35ZliDgi<=J}^Sf43AauY4{>4k^#&hAUTkvZAe zd+X`{NuA33_B2lOTSXdv|M{8r-R z{Vy}5K<7RBOyXCXN>Wu~=|Uk$pBy7c-H9Wnl-&|6xBK$A?VhQ=isKE9y{!Rlr-Ls+ zY0rbgWdchAw+Qb4GlwL9-TV8(^}!pdg)P5g7c;aNc)k!|?*Vy>07gUzGGrWNKaYEJ z(WtZ3&^74+J6YWg=b+8JO=SA=*X=FpEpq4mxtaS6Vb{koL1Cw_&i{6*1~;2RoA>d2 zNDk~EsNYoz)GQ@3BhGx@|D8)J#beQ>sZ2%uuyOqbF^PNS7RL0vD2C|`pdZ$$iOy(y zv#w@u_v`N`68xwjpnCVE0@nxEbz|W%`p6g9?EJ+7>Y(e}a!(MU#jVif%0){5Y944XJCUL7yXd7OV+v7_{Hz0V6E5dM^8}|E(#UmFGKHW8)TFFQ#vjIt3 z&xjm-PHpMmTb!?UVq;K1gur>=6Re;DdGXL|!a?q-lSw3ZfpBEfkFum@f%=tCLZ+H(guC9dfG) zoBIZNld4&C`qA7?X7QyyG8)88nH}S6^seZx3LOn;=?8d3zhCw_P5-vP4e2K>r!$#nI*i=pLI3JC^`w8zxmT((oV91)>UK3tl}2NWeyu`9%vQp9 zzbMz@n_{~R%)_=YLrObks{XXYDOkT~cjfP&9_$rMDs`c<_M`y$3Kkpy?h9V4-LIDD zKzy>ScaY8rmAx&BFWg#ND*5Dc>l?H8w06dtxwKOnyKjnH$${+ct4q^0Jj8cs=_qy6 zKt3*>c_f`r`1^r|b;o6<$+6(~ele8k(|Vfl)e2H|r8q1t`)1X^z=BKD8D)vXXix5Z z2c|38Ro;XIzchMZI^FQ@otkQMlzj?fH6n%Vr*{ryF$RH*p`>McEIeW{F#lZ3`H7yi zqC;sCw}8>$W@KRlhttRjGQzn&kP*q#>GpqFEca}vw%E6LI1=mD;HMollOjMzMXjb1 zA9JBZMa~$#?>c0(qP*oI;P>_^~s*(3Zda(6Rc&H}$LJ%@BXhQ<}<*ryW-_WH?peKK*KFD>n+U z6~SF%zM(b`BKc9`J;9w&609*zABt5@*PAX67rf{=*E`Z6o}QnB*lt;>AEi1duHHEF zm|#=913q((1f_Cum|)-?voomoz!$PKr4(JC~P!i+q2ScEN>MdI*Kfs#s<$Bl2(#*Vv<96VP4@J;rx z&&?5^n6wH>t`}Wz?c{Le<3&8vT?0yI@I`HB_b);&*ZsNs%AFr)92Z~D%GFIE`exKd zCdI2vHAU0mX2q^M*+$Y<$o%@T#4kI5^tk(@X2G8$dMR~@npL;k9K@`oeILnAyhb-7 zZ)xW3OQ1*)f=F+vwz(DeEC}+L)u1>>$*aKmglZL?4G{RaECuiI1Neb!9ZAhHsWF;K ztyfkv!mkj}PV&bTCMJ3!j5$L|uXoZ!@T7us zaXMtGoM*^e?QD}y)NIDBKDu{YzFkT>zqfD7>V~B6kXvI^D7U5V`wUT=NFGmd3=IuT zH%i{&s42v3p2eF88Vhcp8typ(coK!bKG~st{6~!I$}UKKyVEhK&7F&luf$6p6{MC+ za$(Hg-qc)@5k|9EMT z_{3`HMEiWv$uznUK%CA0NEA0L0oAtqpu0Pm!%Pw2EP+RiF1KUJ!Qk28C`g};bxGvP z&TAb?f_0#t7jn%KNk@V%O!=zZVm~qrzo$?99ct%I-M^D!cc;b z>E`bCOx{9OiuO-PU}s)Lu-G2Ih2?(Qe|HTusoHR-+Kb%bcG|nnh=_s4qy|UUON9Dy ze91~Unpmxj#TrJH;Lk;Ir-qc%8(D=u2wd4)eGQfsZbhM*wB=|Tm0V%N(`)ArM~DD( z*XtkDXv6J@=Mz4|=^OFx%F>p0#z`<@DF3DRxdIcDo_*7YfaljS9*!`3KFGsrJY+-| rr(Z4bPs8({M({t~@Bg@#KNGPoM)ueyB`AP@V}QSmEH2{>obUe^-Yidh literal 0 HcmV?d00001 diff --git a/app/car/live/assets/ic_opus.png b/app/car/live/assets/ic_opus.png new file mode 100644 index 0000000000000000000000000000000000000000..011ee39ff2a30fa69bcc3745dcc14bf27d82dfdf GIT binary patch literal 5752 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 Jl1tc~{{X6Pua^J- literal 0 HcmV?d00001 diff --git a/app/car/live/assets/ic_plius.png b/app/car/live/assets/ic_plius.png new file mode 100644 index 0000000000000000000000000000000000000000..27fddf722e8c594b267599aebf6465fd8c086ae8 GIT binary patch literal 4909 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 Q9jya5tn9CmuKK6^FOynKQUCw| literal 0 HcmV?d00001 diff --git a/app/car/live/assets/ic_tv.png b/app/car/live/assets/ic_tv.png new file mode 100644 index 0000000000000000000000000000000000000000..992a589fafebe0a51ab84c944a19939274aba945 GIT binary patch literal 3454 zcmeHK`&Uy}7Tz}rkoX``R;S1-RIOQ^T6stzjD!TRAcF}V*VI~DgjlCerolvBf>08` zPHYE4sjVP{hh-_t!3tOr1tFIP6&firK>;BoP+7!B07*&+B=^qMe`4kbemLu#z1MfX zv)6a_UT2@L-WSBJU*oj~0M^Iv*}V^dL@Y@_btNWi_Rumh(WHAmN(Wf$@p2$gsq!S8 zNcz6GXt?sL&lAF+9F5{f0ko8^bqHMuCXe{tQGd-w%zDn{>P%nsgEoGygAO7=dcq`fWlDS73kly0%o?#-bXC&;~yY>7J?iKz6 z{IAb0PUP0$;Wo;GGw<6Se94&|9D_x+qPNZKnq;8}yk)2Wxeo#mMMPgnAp)WSP&WcF zwgUL?0pNWDAopJdtm?3u5C5~eFsS4)o%o%BhNh~WO&{#(hV*AVmq8BG_g_mSITHLt!?|RXgpUm1V z>M5zh7bfX(3}B>9|5$qQ^I-{pODwl|IOyuZppLZP>uGEi$Sd?=TvcpwzGrD=InJ~X zl69wldfiYZ*U;c}c-Ye95_+Pm^+Bq9M)pD@>bdoEQ2Q^)n2h{!dYad9;oO~!-!!sBbdUnOt2?c;Ayc!mj%EZ znwV}G1Irrp_%ZVHh|I%(x68U#xJ_bc+yIPsYrkWLuVYKds^!se_B~Z_+m~^k3!|K^ns9iK!)*w3(V92mBANqs* zi~8Xw533nV4r6#>ScG%!=NkZhJ=Q=ua5UQ3`&ezCuhrqrehB0VBmcrp^OR;p8}sDS zBX<0k4_LS`i3B$^v#91z^&X_e^%G96<>^Sldqx=rq>3Eg{azuO6K$NT-E<==urw%Z ziT;oU@?Fo>G-;+i6gATd8Y|V#Qn7b&$5=7

trS8zEjpAJg*-wuTGJN(Q^#A?se?ioXMJ4{3s8AJ+(Rv~ew2 zf)6C%?s)fSG%)h&$%XC&l)EV+nBChZ8;Kwo{&9qNKgxp?SA+SMFpN?Xu!o3qa`{xB z9LG^fN+==?Ay6U$RZd)}03#|xsQ^%h1pAw`gjhFM=*e#pyZ&>FE;BFR)$PO8kMW*Q zwM{rt{na$K9|;chowG<16ZAEV8qV-jL=yC71Nt zFuhap=@Az=Fxo4x%kfTmY{t1=lTVV_0)l1qOZ_x!AFvYd3~8G!wv0e#7% zKX*C4Zxmpf;~s!+?)W&nV&-0>mhMB+5@}Rc7KWS+Tynb}1Mn{&+n9q$r7XhVQien| zrrDUU{QX+%@D)R4XezcSvA=S~D1QsA>*h9dh}=z^oyyg1+vFgRy$SL+EJBpuMVo(A zQ;w%pQ6NzKQb84_FmD93d5l~b`ohL`xV?n77O$f&2OBWq3I&?acD}1vyr;llB0mlt z@jf8NvO28I<9BgK#&UawfxPr!4h!bYn_F;!((;kem}28Ntj}us!29~0)m~?{=UeT4 e|F2toYch?xCiVME1!cr{3F6-q?7kA6QutrLajYEx literal 0 HcmV?d00001 diff --git a/app/car/newest/NewestTemplate.ts b/app/car/newest/NewestTemplate.ts index 687a285..81873e5 100644 --- a/app/car/newest/NewestTemplate.ts +++ b/app/car/newest/NewestTemplate.ts @@ -13,19 +13,20 @@ class NewestTemplate extends BaseListTemplate { tabSystemImageName: 'newspaper.fill', id: TEMPLATE_ID_NEWEST, }, - fetchCarNewestPlaylist().then((data) => { - if (data?.length) { - const channels: PlayListItem[] = data.map((item) => ({ - id: item.title, - text: item.title, - detailText: item.content, - imgUrl: item.cover, - streamUrl: item.streamUrl, - })); - return channels; - } - return []; - }), + () => + fetchCarNewestPlaylist().then((data) => { + if (data?.length) { + const channels: PlayListItem[] = data.map((item) => ({ + id: item.title, + text: item.title, + detailText: item.content, + imgUrl: item.cover, + streamUrl: item.streamUrl, + })); + return channels; + } + return []; + }), ); } } diff --git a/app/car/popular/PopularTemplate.ts b/app/car/popular/PopularTemplate.ts index 58562ca..fd3ce9c 100644 --- a/app/car/popular/PopularTemplate.ts +++ b/app/car/popular/PopularTemplate.ts @@ -13,19 +13,20 @@ class PopularTemplate extends BaseListTemplate { tabSystemImageName: 'star.fill', id: TEMPLATE_ID_POPULAR, }, - fetchCarPopularPlaylist().then((data) => { - if (data?.length) { - const channels: PlayListItem[] = data.map((item) => ({ - id: item.title, - text: item.title, - detailText: item.content, - imgUrl: item.cover, - streamUrl: item.streamUrl, - })); - return channels; - } - return []; - }), + () => + fetchCarPopularPlaylist().then((data) => { + if (data?.length) { + const channels: PlayListItem[] = data.map((item) => ({ + id: item.title, + text: item.title, + detailText: item.content, + imgUrl: item.cover, + streamUrl: item.streamUrl, + })); + return channels; + } + return []; + }), ); } } diff --git a/app/car/recommended/RecommendedTemplate.ts b/app/car/recommended/RecommendedTemplate.ts index 70f9cd9..5547678 100644 --- a/app/car/recommended/RecommendedTemplate.ts +++ b/app/car/recommended/RecommendedTemplate.ts @@ -13,19 +13,20 @@ class RecommendedTemplate extends BaseListTemplate { tabSystemImageName: 'star.fill', id: TEMPLATE_ID_RECOMMENDED, }, - fetchCarRecommendedPlaylist().then((data) => { - if (data?.length) { - const channels: PlayListItem[] = data.map((item) => ({ - id: item.title, - text: item.title, - detailText: item.content, - imgUrl: item.cover, - streamUrl: item.streamUrl, - })); - return channels; - } - return []; - }), + () => + fetchCarRecommendedPlaylist().then((data) => { + if (data?.length) { + const channels: PlayListItem[] = data.map((item) => ({ + id: item.title, + text: item.title, + detailText: item.content, + imgUrl: item.cover, + streamUrl: item.streamUrl, + })); + return channels; + } + return []; + }), ); } } diff --git a/app/car/types.ts b/app/car/types.ts index 1d34691..1144fbc 100644 --- a/app/car/types.ts +++ b/app/car/types.ts @@ -1,3 +1,5 @@ +import {ImageSourcePropType} from 'react-native'; + export type CarCategory = 'live' | 'newest'; export type CategoryListItem = { @@ -11,7 +13,8 @@ export type PlayListItem = { id: string | number; text: string; detailText?: string; - imgUrl: string; + image?: ImageSourcePropType; + imgUrl?: string; streamUrl: string; isLiveStream?: boolean; };