package Ġorg . library simpl ified . audio book . manifest _ ful fill . basic Ċ Ċ import Ġokhttp 3 . Credentials Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Request Ċ import Ġone . ir rad ia . mime . van illa . MIME Parser Ċ import Ġorg . library simpl ified . audio book . api . Player Result Ċ import Ġorg . library simpl ified . audio book . manifest _ ful fill . spi . Manifest Ful filled Ċ import Ġorg . library simpl ified . audio book . manifest _ ful fill . spi . Manifest Ful fillment ErrorType Ċ import Ġorg . library simpl ified . audio book . manifest _ ful fill . spi . Manifest Ful fillment Event Ċ import Ġorg . library simpl ified . audio book . manifest _ ful fill . spi . Manifest Ful fillment Strategy Type Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġrx . Observable Ċ import Ġrx . subjects . Publish Subject Ċ Ċ /** Ċ Ġ* ĠA Ġfulfill ment Ġstrategy Ġthat Ġexpects Ġto Ġreceive Ġa Ġmanifest Ġdirectly , Ġvia ĠHTTP Ġbasic Ġauthentication . Ċ Ġ*/ Ċ Ċ class ĠManifest Ful fillment Basic ( ĊĠ Ġprivate Ġval Ġclient : ĠOk HttpClient , ĊĠ Ġprivate Ġval Ġconfiguration : ĠManifest Ful fillment Basic Parameters Ċ ) Ġ: ĠManifest Ful fillment Strategy Type Ġ{ ĊĊĠ Ġprivate Ġval Ġlogger Ġ= ĊĠĠĠ ĠLoggerFactory . getLogger ( Manifest Ful fillment Basic :: class . java ) ĊĊĠ Ġprivate Ġval Ġevent Subject Ġ= ĊĠĠĠ ĠPublish Subject . create < Manifest Ful fillment Event >() ĊĊĠ Ġoverride Ġval Ġevents : ĠObservable < Manifest Ful fillment Event > Ġ= ĊĠĠĠ Ġthis . event Subject ĊĊĠ Ġoverride Ġfun Ġexecute (): ĠPlayer Result < Manifest Ful filled , ĠManifest Ful fillment ErrorType > Ġ{ ĊĠĠĠ Ġthis . logger . debug (" ful fill ing Ġmanifest : Ġ{}", Ġthis . configuration . uri ) ĊĊĠĠĠ Ġthis . event Subject . onNext ( ĊĠĠĠĠĠ ĠManifest Ful fillment Event ( ĊĠĠĠĠĠĠĠ Ġ" Ful fill ing Ġ${ this . configuration . uri }" ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġrequest Builder Ġ= ĠRequest . Builder () ĊĠĠĠ Ġval Ġcredentials Ġ= Ġthis . configuration . credentials ĊĠĠĠ Ġif Ġ( credentials Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġval Ġcredential Ġ= ĊĠĠĠĠĠĠĠ ĠCredentials . basic ( credentials . userName , Ġcredentials . password ) ĊĠĠĠĠĠ Ġrequest Builder . header (" Authorization ", Ġcredential ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġrequest Ġ= ĊĠĠĠĠĠ Ġrequest Builder ĊĠĠĠĠĠĠĠ Ġ. url ( this . configuration . uri . to URL ()) ĊĠĠĠĠĠĠĠ Ġ. header (" User - Agent ", Ġthis . configuration . userAgent . userAgent ) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġval Ġcall Ġ= Ġthis . client . new Call ( request ) ĊĠĠĠ Ġval Ġresponse Ġ= Ġcall . execute () ĊĠĠĠ Ġval Ġbody Data Ġ= Ġresponse . body ?. bytes () Ġ?: ĠByteArray ( 0 ) ĊĠĠĠ Ġval Ġresponse Code Ġ= Ġresponse . code ĊĠĠĠ Ġval Ġresponse Message Ġ= Ġresponse . message ĊĠĠĠ Ġval ĠcontentType Ġ= Ġresponse . header (" Content - Type ") Ġ?: Ġ" application / octet - stream " ĊĊĠĠĠ Ġthis . logger . debug ( ĊĠĠĠĠĠ Ġ" received : Ġ{} Ġ{} Ġfor Ġ{} Ġ({ })", ĊĠĠĠĠĠ Ġresponse Code , ĊĠĠĠĠĠ Ġresponse Message , ĊĠĠĠĠĠ Ġthis . configuration . uri , ĊĠĠĠĠĠ ĠcontentType ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġthis . event Subject . onNext ( ĊĠĠĠĠĠ ĠManifest Ful fillment Event ( ĊĠĠĠĠĠĠĠ Ġ" Received Ġ$ response Code Ġ$ response Message Ġfor Ġ${ this . configuration . uri }" ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġif Ġ(! response . is Successful ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĠPlayer Result . Failure ( ĊĠĠĠĠĠĠĠ ĠHTTP Request Failed ( ĊĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġresponse Message , ĊĠĠĠĠĠĠĠĠĠ Ġserver Data Ġ= ĠManifest Ful fillment ErrorType . Server Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuri Ġ= Ġthis . configuration . uri , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ= Ġresponse Code , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Body Ġ= Ġbody Data , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreceived ContentType Ġ= ĠcontentType ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠPlayer Result . unit ( ĊĠĠĠĠĠ ĠManifest Ful filled ( ĊĠĠĠĠĠĠĠ ĠcontentType Ġ= ĠMIME Parser . parse R aising Exception ( contentType ), ĊĠĠĠĠĠĠĠ Ġdata Ġ= Ġbody Data ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠ Ġthis . event Subject . on Completed () ĊĠ Ġ} Ċ } Ċ