package Ġcom . hoc . weather app . k oin Ċ Ċ import Ġcom . hoc . weather app . Build Config Ċ import Ġcom . hoc . weather app . data . models . Temperature Unit Ċ import Ġcom . hoc . weather app . data . remote . BASE _ URL _ TIME ZONE _ DB Ċ import Ġcom . hoc . weather app . data . remote . OPEN _ WE ATHER _ MAP _ APP _ ID Ċ import Ġcom . hoc . weather app . data . remote . OPEN _ WE ATHER _ MAP _ BASE _ URL Ċ import Ġcom . hoc . weather app . data . remote . Open Weather Map ApiService Ċ import Ġcom . hoc . weather app . data . remote . TIME ZONE _ DB _ API _ KEY Ċ import Ġcom . hoc . weather app . data . remote . Timezone Db ApiService Ċ import Ġcom . squareup . mos hi . M oshi Ċ import Ġcom . squareup . mos hi . kotlin . reflect . Kotlin Json Adapter Factory Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . logging . Http Logging Interceptor Ċ import Ġorg . k oin . dsl . context . Module Definition Ċ import Ġorg . k oin . dsl . module . module Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . adapter . rx java 2 . Rx Java 2 Call Adapter Factory Ċ import Ġretrofit 2 . converter . mos hi . M oshi Converter Factory Ċ Ċ const Ġval ĠOPEN _ WE ATHER _ MAP _ RET RO FIT Ġ= Ġ" OPEN _ WE ATHER _ MAP _ RET RO FIT " Ċ const Ġval ĠTIME ZONE _ DB _ RET RO FIT Ġ= Ġ" TIME ZONE _ DB _ RET RO FIT " Ċ Ċ val Ġretrofit Module Ġ= Ġmodule Ġ{ ĊĠ Ġsingle Ġ{ Ġget Ok HttpClient () Ġ} ĊĊĠ Ġsingle Ġ{ Ġget M oshi () Ġ} ĊĊĠ Ġsingle ( name Ġ= ĠOPEN _ WE ATHER _ MAP _ RET RO FIT ) Ġ{ Ġget Open Weather Map Ret rofit () Ġ} ĊĊĠ Ġsingle Ġ{ Ġget Weather ApiService () Ġ} ĊĊĠ Ġsingle ( name Ġ= ĠTIME ZONE _ DB _ RET RO FIT ) Ġ{ Ġget Timezone Db Ret rofit () Ġ} ĊĊĠ Ġsingle Ġ{ Ġget Timezone Db ApiService () Ġ} Ċ } Ċ Ċ private Ġfun ĠModule Definition . getTime zone Db ApiService (): ĠTime zone Db ApiService Ġ{ ĊĠ Ġreturn Ġget < Ret rofit >( name Ġ= ĠTIME ZONE _ DB _ RET RO FIT ). create ( Timezone Db ApiService :: class . java ) Ċ } Ċ Ċ private Ġfun ĠModule Definition . getTime zone Db Ret rofit (): ĠRet rofit Ġ{ ĊĠ Ġreturn ĠRet rofit . Builder () ĊĠĠĠ Ġ. baseUrl ( BASE _ URL _ TIME ZONE _ DB ) ĊĠĠĠ Ġ. client ( get ()) ĊĠĠĠ Ġ. add Converter Factory ( M oshi Converter Factory . create ( get ())) ĊĠĠĠ Ġ. add Call Adapter Factory ( Rx Java 2 Call Adapter Factory . create ()) ĊĠĠĠ Ġ. build () Ċ } Ċ Ċ private Ġfun ĠModule Definition . get Weather ApiService (): ĠOpen Weather Map ApiService Ġ{ ĊĠ Ġreturn Ġget < Ret rofit >( name Ġ= ĠOPEN _ WE ATHER _ MAP _ RET RO FIT ) ĊĠĠĠ Ġ. create ( Open Weather Map ApiService :: class . java ) Ċ } Ċ Ċ private Ġfun ĠModule Definition . get Open Weather Map Ret rofit (): ĠRet rofit Ġ{ ĊĠ Ġreturn ĠRet rofit . Builder () ĊĠĠĠ Ġ. baseUrl ( OPEN _ WE ATHER _ MAP _ BASE _ URL ) ĊĠĠĠ Ġ. client ( get ()) ĊĠĠĠ Ġ. add Converter Factory ( M oshi Converter Factory . create ( get ())) ĊĠĠĠ Ġ. add Call Adapter Factory ( Rx Java 2 Call Adapter Factory . create ()) ĊĠĠĠ Ġ. build () Ċ } Ċ Ċ private Ġfun Ġget M oshi (): ĠM oshi Ġ{ ĊĠ Ġreturn ĠM oshi . Builder () ĊĠĠĠ Ġ. add ( Kotlin Json Adapter Factory ()) ĊĠĠĠ Ġ. build () Ċ } Ċ Ċ private Ġfun Ġget Ok HttpClient (): ĠOk HttpClient Ġ{ ĊĠ Ġreturn ĠOk HttpClient . Builder () ĊĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠ ĠHttp Logging Interceptor () ĊĠĠĠĠĠĠĠĠĠ Ġ. setLevel ( Http Logging Interceptor . Level . BODY ) ĊĠĠĠĠĠĠĠĠĠ Ġ. let (:: add Interceptor ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ. add Interceptor Ġ{ Ġchain Ġ-> ĊĠĠĠĠĠ Ġval Ġoriginal Request Ġ= Ġchain . request () ĊĠĠĠĠĠ Ġval Ġhost Ġ= Ġoriginal Request . url (). host () ĊĊĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġ" open weather map " Ġin Ġhost Ġ-> Ġoriginal Request ĊĠĠĠĠĠĠĠĠĠ Ġ. newBuilder () ĊĠĠĠĠĠĠĠĠĠ Ġ. url ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Request . url () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add QueryParameter (" units ", ĠTemperature Unit . K EL V IN . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add QueryParameter (" appid ", ĠOPEN _ WE ATHER _ MAP _ APP _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ" time zon edb " Ġin Ġhost Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ(" get - time - zone " Ġin Ġoriginal Request . url (). encoded Path ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Request ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Request . url () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add QueryParameter (" format ", Ġ" json ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add QueryParameter (" key ", ĠTIME ZONE _ DB _ API _ KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add QueryParameter (" by ", Ġ" position ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ add Interceptor Ġchain . proceed ( original Request ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn @ add Interceptor Ġchain . proceed ( original Request ) ĊĠĠĠĠĠ Ġ}. build (). let ( chain :: proceed ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ. build () Ċ }