package Ġcom . chr yn an . video . provider . source Ċ Ċ import Ġcom . chr yn an . video . common . model . api . Video Details Ċ import Ġcom . chr yn an . video . common . model . core . ID Ċ import Ġcom . chr yn an . video . common . model . core . Uri String Ċ import Ġcom . chr yn an . video . common . repository . Video Repository Ċ import Ġcom . chr yn an . video . common . utils . Shared Flow Ċ import Ġcom . chr yn an . video . common . utils . share In Ċ import Ġcom . chr yn an . video . common . provider . Open Video Provider Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . flow . Flow Ċ Ċ class ĠOpen Video Provider Source ( ĊĠĠĠ Ġprivate Ġval Ġvideo Repository : ĠVideo Repository , ĊĠĠĠ Ġprivate Ġval Ġcoroutine Scope : ĠCor outine Scope Ċ ) Ġ: ĠOpen Video Provider Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġflow Cache Ġ= Ġmutable Map Of < CacheKey , ĠShared Flow < Video Details >>() ĊĊĠĠĠ Ġoverride Ġfun Ġopen Flow ( provider Uri : ĠUri String , Ġvideo Id : ĠID ): ĠFlow < Video Details > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= ĠCache Key ( provider Uri Ġ= Ġprovider Uri , Ġvideo Id Ġ= Ġvideo Id ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġshared Flow Ġ= Ġflow Cache [ key ] ĊĊĠĠĠĠĠĠĠ Ġif Ġ( shared Flow Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Flow Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Repository . get Video Details ( provider Uri Ġ= Ġprovider Uri , Ġvideo Id Ġ= Ġvideo Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. share In ( coroutine Scope ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġflow Cache [ key ] Ġ= Ġshared Flow ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġshared Flow . open Subscription () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠCache Key ( ĊĠĠĠĠĠĠĠ Ġval Ġprovider Uri : ĠUri String , ĊĠĠĠĠĠĠĠ Ġval Ġvideo Id : ĠID ĊĠĠĠ Ġ) Ċ }