package Ġcom . sk dev . yt live video . model . youtube Api . live Broadcast s . requests Ċ Ċ import Ġandroid . util . Log Ċ import Ġcom . sk dev . yt live video . model . youtube Api . live Broadcast s . Broadcast Preview Data Ċ import Ġcom . sk dev . yt live video . model . youtube Api . live Broadcast s . Broadcast State Ċ import Ġcom . sk dev . yt live video . model . youtube Api . live Broadcast s . Live Broadcast Item Ċ import Ġcom . sk dev . yt live video . model . youtube Api . live Broadcast s . Live Broadcast s Interactor Ċ import Ġcom . sk dev . yt live video . model . youtube Api . live Streams . Live Streams Ċ import Ġkotlinx . coroutines .* Ċ import Ġjava . io . IOException Ċ Ċ object ĠLive Broadcast s Ġ Ġ{ ĊĊĠĠĠ Ġfun Ġcreate New Broadcast Async ( name : ĠString , Ġdescription : ĠString ) Ġ: ĠDeferred < Unit > Ġ= ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbroadcast Id Ġ= ĠLive Broadcast s Interactor . createNew Broadcast ( description , Ġname ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 5 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata : ĠBroadcast Preview Data ? Ġ= Ġget Broadcast Preview Data ( broadcast Id !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" The Ġnew Ġstream Ġhas Ġ'${ data ?. stream Status Ġ?: Ġ"- "} ' Ġstatus ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Error Ġwhile Ġcreating Ġa Ġnew Ġevent Ġrequest :", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġe . cause ?. message Ġ?: Ġ" Error Ġwhile Ġcreating Ġa Ġnew Ġevent Ġrequest " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Broadcast Preview Data ( broadcast Id : ĠString ) Ġ: ĠBroadcast Preview Data ? Ġ= ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġget Live Broadcast s Async ( null , Ġbroadcast Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list . count () Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbroadcast Ġ= Ġlist [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Id Ġ= Ġbroadcast . stream Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stream Id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ async Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Ġ= ĠLive Streams . get Live Streams ListItem Async ( stream Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ async ĠBroadcast Preview Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbroadcast Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbroadcast . title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbroadcast . description , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbroadcast . published At , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbroadcast . published At , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbroadcast . life Cycle Status , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream ?. status ?. stream Status Ġ?: Ġ"-", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbroadcast . thumb Uri , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbroadcast . watch Uri , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbroadcast . ingest ion Address Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ async Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. await () ĊĊĠĠĠ Ġsuspend Ġfun Ġget Live Broadcast s Async ( state : ĠBroadcast State ?, Ġbroadcast Id : ĠString ? Ġ= Ġnull ) Ġ: ĠList < Live Broadcast Item > Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠLive Broadcast s Interactor . get Live Broadcast s List ( state , Ġbroadcast Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . forEach { it . state Ġ= Ġstate } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġlist . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Failed Ġfetch Ġall Ġlive Ġevents :", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġe . cause ?. message Ġ?: Ġ" Error Ġwhile Ġfetching Ġlive Ġevents Ġwith Ġ'${ state . toString () }' Ġstate " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Broadcast s ( broadcast IDs : ĠList < String >): ĠDeferred < Unit > Ġ= ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbroadcast IDs . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLive Broadcast s Interactor . delete Broadcast ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ async ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Error Ġwhile Ġdeleting Ġbroadcast s :", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġe . cause ?. message Ġ?: Ġ" Error Ġwhile Ġdeleting Ġbroadcast s " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrans itions ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrans it Ġto ĠLive Ġstatus ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtransition Live Broadcast sTo Live Async ( broadcast Id : ĠString ?) Ġ: ĠDeferred < Boolean > Ġ= ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( broadcast Id . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" The ĠStream ĠID Ġis Ġnot Ġpresented ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdelay ( 1 0 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLive Broadcast s Interactor . transition Live Broadcast sTo Live ( broadcast Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ async Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Failed Ġstart Ġbroadcast ing :", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġe . localized Message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrans it Ġto ĠCompleted Ġstatus ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtransition Live Broadcast sTo Completed Async ( broadcast Id : ĠString ?) Ġ: ĠDeferred < Unit > Ġ= ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( broadcast Id . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" The ĠBroadcast ĠID Ġis Ġnot Ġpresented ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLive Broadcast s Interactor . transition Live Broadcast sTo Completed ( broadcast Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Error Ġwhile Ġfinish ing Ġbroadcast Ġrequest :", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġe . cause ?. message Ġ?: Ġ" Error Ġwhile Ġfinish ing Ġbroadcast Ġrequest " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠTAG : ĠString Ġ= ĠLive Broadcast s :: class . java . name Ċ } Ċ Ċ /** Ċ Ġ* Ġhttps :// developers . google . com / youtube / v 3 / live / docs / live Broadcast s / insert Ċ Ġ*/ Ċ Ċ /** Ċ Ġ* Ġ ĠAPI ĠRequest ĠLive Broadcast s : Ġtransition Ċ Ġ* Ġ Ġhttps :// developers . google . com / youtube / v 3 / live / docs / live Broadcast s / transition Ċ Ġ* Ċ 4 0 3 ĠFor bidden Ċ POST Ġhttps :// www . googleapis . com / youtube / v 3 / live Broadcast s / transition ? broadcast Status = live & id = 8 bq Mr Wv Cg qg & part = status Ċ { Ċ " code ": Ġ 4 0 3 , Ċ " errors ": Ġ[ Ċ { Ċ " domain ": Ġ" youtube . live Broadcast ", Ċ " message ": Ġ" Stream Ġis Ġinactive ", Ċ " reason ": Ġ" error Stream Inactive ", Ċ " extended Help ": Ġ" https :// developers . google . com / youtube / v 3 / live / docs / live Broadcast s / transition " Ċ } Ċ ], Ċ " message ": Ġ" Stream Ġis Ġinactive " Ċ } Ċ Ċ https :// www . googleapis . com / youtube / v 3 / live Broadcast s ? part = status & broadcast Status = all & broadcast Type = all & key =[ YOUR _ API _ KEY ] Ċ Ċ " items ": Ġ[ Ċ { Ċ " kind ": Ġ" youtube # live Broadcast ", Ċ " etag ": Ġ" R 6 Hc 0 SW bi E - X WR Nq FT w 1 O 5 VB 6 XY ", Ċ " id ": Ġ" Am _ k ib 7 r Y zc ", Ċ " status ": Ġ{ Ċ " life Cycle Status ": Ġ" live ", ĠĠĠĠ Ġ// Ġ" ready ", Ġ" complete " Ċ " privacy Status ": Ġ" un listed ", Ċ " recording Status ": Ġ" recording ", Ċ " made For K ids ": Ġfalse , Ċ " self Declared Made For K ids ": Ġfalse Ċ } Ċ }, ĊĊ Ċ POST Ġhttps :// www . googleapis . com / youtube / v 3 / live Broadcast s / transition ? broadcast Status = live & id = AK kk P pm W wp Y & part = status Ċ { Ċ " code ": Ġ 4 0 3 , Ċ " errors ": Ġ[ Ċ { Ċ " domain ": Ġ" youtube . live Broadcast ", Ċ " message ": Ġ" Invalid Ġtransition ", Ċ " reason ": Ġ" invalid Transition ", Ċ " extended Help ": Ġ" https :// developers . google . com / youtube / v 3 / live / docs / live Broadcast s / transition # params " Ċ } Ċ ], Ċ " message ": Ġ" Invalid Ġtransition " Ċ } ĊĊ Ġ*/ ĊĊĊ