package Ġcom . g vet ri . kotlin . vide oli brary . home . android . detail Ċ Ċ import Ġarrow . core . Either Ċ import Ġcom . coding p izza . home public . Retrieve Video Url UseCase Ċ import Ġcom . coding p izza . nas are pository . N asa Repository Ċ import Ġcom . g vet ri . kotlin . vide oli brary . model . N asa Assets Result Ċ import Ġcom . g vet ri . kotlin . vide oli brary . model . error . N asa Error Ċ Ċ class ĠRetrieve Video Url UseCase Impl ( private Ġval Ġn asa Repository : ĠN asa Repository ) Ġ: ĠRetrieve Video Url UseCase Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġno Href Found ErrorCode Ġ= Ġ 4 0 0 ĊĊĠĠĠ Ġprivate Ġval Ġno Link Found ErrorMessage Ġ= Ġ" No Ġvideos Ġavailable Ġfor Ġthis Ġid " ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġexecute ( href : ĠString ): ĠEither < N asa Error , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġassets Result Ġ= Ġn asa Repository . retrieve Video Url ( href ) ĊĠĠĠĠĠĠĠ Ġreturn Ġassets Result . fold (:: if Right , Ġ:: if Left ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġif Left ( nasa Assets Result : ĠN asa Assets Result ): ĠEither < N asa Error , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobtain Link From List Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn asa Assets Result . href Links . map NotNull (:: filter By Extension ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . replace (" http ", Ġ" https ") ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( obtain Link From List Ġ== Ġnull ) ĠEither . left ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠN asa Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno Href Found ErrorCode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno Link Found ErrorMessage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġelse ĠEither . right ( obtain Link From List ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġif Right ( nasa Error : ĠN asa Error ): ĠEither < N asa Error , ĠString > Ġ= ĠEither . left ( nasa Error ) ĊĊĠĠĠ Ġprivate Ġfun Ġfilter By Extension ( link : ĠString ): ĠString ? Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġlink . endsWith (". mp 4 ") Ġ-> Ġlink ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} Ċ Ċ }