package Ġhit shoot . route Ċ Ċ import Ġhit shoot . App . apiClient Ċ import Ġhit shoot . App . vertx Ċ import Ġhit shoot . util . b itch ute Link Pattern Ċ import Ġhit shoot . util . replace With Function Ċ import Ġhit shoot . util . url To Media Link Ċ import Ġio . vertx . ext . web . Router Ċ import Ġio . vertx . ext . web . handler . Static Handler Ċ import Ġio . vertx . kotlin . coroutines . await Ċ import Ġio . vertx . kotlin . coroutines . dispatcher Ċ import Ġkotlinx . coroutines . Del icate Cor outines Api Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ Ċ /** Ċ Ġ* ĠSets Ġup Ġchannel ĠRSS Ġroutes Ċ Ġ* Ġ@ param Ġrouter ĠThe Ġrouter Ġto Ġset Ġthem Ġup Ġon Ċ Ġ* Ġ@ since Ġ 1 . 0 . 0 Ċ Ġ*/ Ċ @ Del icate Cor outines Api Ċ fun Ġsetup R ss Routes ( router : ĠRouter ) Ġ{ Ċ ĉ router . route ("/ channel /: channel / rss / "). handler Ġ{ Ġr Ġ-> Ċĉ ĉ Global Scope . launch ( vertx . dispatcher ()) Ġ{ Ċĉĉ ĉ try Ġ{ Ċĉĉĉ ĉ val Ġchannel Ġ= Ġr . path Param (" channel ") ĊĊĉĉĉ ĉ // ĠRequest Ġchannel ĠRSS Ċĉĉĉ ĉ val Ġres Ġ= ĠapiClient . web Client . get Abs ("${ apiClient . site Root }/ feeds / rss / channel /$ channel /") Ċĉĉĉĉĉ ĉ . follow Redirect s ( true ) Ċĉĉĉĉĉ ĉ . send () Ċĉĉĉĉĉ ĉ . await () ĊĊĉĉĉ ĉ if ( res . statusCode () Ġ== Ġ 4 0 4 ) Ġ{ Ċĉĉĉĉ ĉ r . next () Ċĉĉĉ ĉ } Ġelse Ġif ( res . statusCode () Ġ== Ġ 2 0 0 ) Ġ{ Ċĉĉĉĉ ĉ // ĠReplace Ġlinks Ċĉĉĉĉ ĉ var Ġxml Ġ= Ġres . body AsString (). replace With Function ( b itch ute Link Pattern ) Ġ{ Ġm Ġ-> Ċĉĉĉĉĉ ĉ val Ġstr Ġ= Ġm . group ( 0 ) Ċĉĉĉĉĉ ĉ val Ġprefix Ġ= Ġif ( r . request (). headers (). contains (" Host ")) Ċĉĉĉĉĉĉ ĉ " http :// "+ r . request (). getHeader (" Host ") Ċĉĉĉĉĉ ĉ else Ċĉĉĉĉĉĉ ĉ "" ĊĊĉĉĉĉĉ ĉ if ( str . contains ("/ embed / ")) Ġ{ Ċĉĉĉĉĉĉ ĉ prefix +"/ video /"+ str . substring ( str . indexOf ("/ embed /") + 7 ) Ċĉĉĉĉĉ ĉ } Ġelse Ġif ( str . contains ("/ feeds / rss / channel / ")) Ġ{ Ċĉĉĉĉĉĉ ĉ prefix +"/ channel /"+ str . substring ( str . indexOf ("/ feeds / rss / channel /") + 1 9 )+" rss /" Ċĉĉĉĉĉ ĉ } Ġelse Ġif ( str . contains (". com / channel / ")) Ġ{ Ċĉĉĉĉĉĉ ĉ prefix +"/ channel /"+ str . substring ( str . indexOf (". com / channel /") + 1 3 ) Ċĉĉĉĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉĉĉĉ ĉ prefix + url To Media Link ( str ) Ċĉĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ } ĊĊĉĉĉĉ ĉ // ĠSet Ġheaders Ċĉĉĉĉ ĉ r . response (). put Header (" Content - Type ", Ġ" application / rss + xml ") ĊĊĉĉĉĉ ĉ // ĠSend Ġresponse Ċĉĉĉĉ ĉ r . end ( xml ). await () Ċĉĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉĉ ĉ r . fail ( res . statusCode ()) Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ġcatch ( e : ĠThrowable ) Ġ{ Ċĉĉĉ ĉ r . fail ( e ) Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } Ċ }