@ file : Opt In ( K tor Experimental Locations API :: class ) Ċ Ċ package Ġio . ktor . samples . you kube Ċ Ċ import Ġio . ktor . server . application .* Ċ import Ġio . ktor . server . plugins .* Ċ import Ġio . ktor . http .* Ċ import Ġio . ktor . http . content .* Ċ import Ġio . ktor . server . http . content .* Ċ import Ġio . ktor . server . locations .* Ċ import Ġio . ktor . server . response .* Ċ import Ġio . ktor . server . routing .* Ċ import Ġio . ktor . server . sessions .* Ċ import Ġkotlinx . html .* Ċ import Ġjava . io .* Ċ Ċ /** Ċ Ġ* ĠRegister Ġvideo - related Ġroutes : Ġ[ Index ] Ġ(/ ), Ġ[ Video Page ] Ġ(/ video / page /{ id }) Ġand Ġ[ Video Stream ] Ġ(/ video /{ id }) Ċ Ġ*/ Ċ fun ĠRoute . videos ( database : ĠDatabase ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġindex Ġroute Ġthat Ġdoesn 't Ġhave Ġany Ġparameters , Ġreturns Ġa ĠHTML Ġwith Ġa Ġlist Ġof Ġvideos Ġlinking Ġto Ġtheir Ġpages ĊĠĠĠĠ Ġ* Ġand Ġdisplayed Ġun linked Ġauthor Ġnames . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġget < Index > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsession Ġ= Ġcall . sessions . get < You Kube Session >() ĊĠĠĠĠĠĠĠ Ġval Ġtop Videos Ġ= Ġdatabase . top () ĊĠĠĠĠĠĠĠ Ġval Ġet ag Ġ= Ġtop Videos . join ToString Ġ{ Ġ"${ it . id }, ${ it . title }" Ġ}. hashCode (). toString () Ġ+ Ġ"-" Ġ+ Ġsession ?. userId ?. hashCode () ĊĠĠĠĠĠĠĠ Ġval Ġvisibility Ġ= Ġif Ġ( session Ġ== Ġnull ) ĠCache Control . Visibility . Public Ġelse ĠCache Control . Visibility . Private ĊĊĠĠĠĠĠĠĠ Ġcall . respond Default Html ( listOf ( Entity Tag Version ( etag )), Ġvisibility ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiv (" posts ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Videos . isEmpty () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh 1 (" content - sub head ") Ġ{ Ġ+" No ĠV ideos " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiv Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+" You Ġneed Ġto Ġupload Ġsome Ġvideos Ġto Ġwatch Ġthem " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Videos . size Ġ< Ġ 1 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh 1 (" content - sub head ") Ġ{ Ġ+" Videos " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh 1 (" content - sub head ") Ġ{ Ġ+" Top Ġ 1 0 ĠV ideos " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Videos . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsection (" post ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader (" post - header ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh 3 (" post - title ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa ( href Ġ= Ġlocations . href ( Video Page ( it . id ))) Ġ{ Ġ+ it . title Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp (" post - meta ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+" by Ġ${ it . author Id }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġ[ Video Page ] Ġreturns Ġan ĠHTML Ġwith Ġthe Ġinformation Ġabout Ġa Ġspecified Ġvideo Ġby Ġ[ Video Page . id ] ĊĠĠĠĠ Ġ* Ġincluding Ġthe Ġvideo Ġitself , Ġbeing Ġst reamed Ġby Ġthe Ġ[ Video Stream ] Ġroute . ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġvideo Ġdo ens 't Ġexists , Ġrespon ds Ġwith Ġa Ġ 4 0 4 Ġ[ HttpStatusCode . NotFound ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġget < Video Page > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvideo Ġ= Ġdatabase . video ById ( it . id ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( video Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . NotFound . description (" Video Ġ${ it . id } Ġdoesn 't Ġexist ")) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond Default Html ( listOf ( Entity Tag Version ( video . hashCode (). toString ())), ĠCache Control . Visibility . Public ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsection (" post ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader (" post - header ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh 3 (" post - title ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa ( href Ġ= Ġlocations . href ( Video Page ( it . id ))) Ġ{ Ġ+ video . title Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp (" post - meta ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+" by Ġ${ video . author Id }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo (" pure - u - 5 - 5 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontrols Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Ġ= Ġcall . url ( Video Stream ( it . id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ" video / ogg " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġbits Ġof Ġthe Ġvideo Ġspecified Ġby Ġ[ Video Stream . id ] Ġor Ġ[ HttpStatusCode . NotFound ] Ġif Ġthe Ġvideo Ġis Ġnot Ġfound . ĊĠĠĠĠ Ġ* ĠIt Ġreturns Ġa Ġ[ Local FileContent ] Ġthat Ġworks Ġalong Ġthe Ġinstalled Ġ[ Partial Content ] Ġfeature Ġto Ġsupport Ġgetting Ġchunks ĊĠĠĠĠ Ġ* Ġof Ġthe Ġcontent , Ġand Ġallowing Ġthe Ġnavigator Ġto Ġseek Ġthe Ġvideo Ġeven Ġif Ġthe Ġvideo Ġcontent Ġis Ġbig . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġget < Video Stream > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvideo Ġ= Ġdatabase . video ById ( it . id ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( video Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . NotFound ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠContentType . from FilePath ( video . video FileName ). first Ġ{ Ġit . contentType Ġ== Ġ" video " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( Local FileContent ( File ( video . video FileName ), ĠcontentType Ġ= Ġtype )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ