/** Ċ Ġ* ĠB read Wallet Ċ Ġ* Ċ Ġ* ĠCreated Ġby ĠP ablo ĠB ude l li Ġ< p ablo . bu del li @ bread wallet . com > Ġon Ġ 1 1 / 1 4 / 1 9 . Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 Ġb read wallet ĠLLC Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġcom . x wallet . ui . settings . node selector Ċ Ċ import Ġcom . x wallet . bread box . B read Box Ċ import Ġcom . x wallet . bread box . contains Currency Ċ import Ġcom . x wallet . bread box . currency Id Ċ import Ġcom . x wallet . bread box . get Peer OrNull Ċ import Ġcom . x wallet . logger . log Error Ċ import Ġcom . x wallet . mob ius . bind Consumer In Ċ import Ġcom . x wallet . tools . manager . BR Shared Prefs Ċ import Ġcom . x wallet . tools . util . btc Ċ import Ġcom . x wallet . ui . settings . node selector . Node Selector . E Ċ import Ġcom . x wallet . ui . settings . node selector . Node Selector . F Ċ import Ġcom . x wallet . util . error Handler Ċ import Ġcom . spotify . mob ius . Connection Ċ import Ġcom . spotify . mob ius . functions . Consumer Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Supervisor Job Ċ import Ġkotlinx . coroutines . cancel Ċ import Ġkotlinx . coroutines . flow . distinct Until Changed Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . util . Locale Ċ Ċ class ĠNode Selector Handler ( ĊĠĠĠ Ġprivate Ġval Ġoutput : ĠConsumer < E >, ĊĠĠĠ Ġprivate Ġval Ġb read Box : ĠB read Box Ċ ) Ġ: ĠConnection < F >, ĊĠĠĠ ĠCor outine Scope Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġcoroutine Context Ġ= ĠSuper visor Job () Ġ+ ĠDispatch ers . Default Ġ+ ĠerrorHandler () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġb read Box . wallet ( btc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . wallet Manager . state Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct Until Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠE . On Connection State Updated ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. bind Consumer In ( output , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġaccept ( effect : ĠF ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( effect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF . Load Connection Info Ġ-> Ġload Connection Info () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF . Set To Automatic Ġ-> Ġset To Automatic () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF . Set Custom Node Ġ-> Ġset To Manual ( effect ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġcoroutine Context . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Connection Info () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠBR Shared Prefs . get Trust Node ( iso Ġ= Ġbtc . toUpperCase ( Locale . ROOT )) ĊĠĠĠĠĠĠĠ Ġval Ġevent Ġ= Ġif Ġ( node . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE . On Connection Info Loaded ( Node Selector . Mode . AUT OM AT IC ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE . On Connection Info Loaded ( Node Selector . Mode . MAN UAL , Ġnode ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġoutput . accept ( event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset To Automatic () Ġ{ ĊĠĠĠĠĠĠĠ ĠBR Shared Prefs . put Trust Node ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiso Ġ= Ġbtc . toUpperCase ( Locale . ROOT ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrust Node Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwallet Manager Ġ= Ġb read Box . wallet ( btc ). first (). wallet Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwallet Manager . connect ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġoutput . accept ( E . On Connection Info Loaded ( Node Selector . Mode . AUT OM AT IC )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset To Manual ( effect : ĠF . Set Custom Node ) Ġ{ ĊĠĠĠĠĠĠĠ ĠBR Shared Prefs . put Trust Node ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiso Ġ= Ġbtc . toUpperCase ( Locale . ROOT ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrust Node Ġ= Ġeffect . node ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwallet Ġ= Ġb read Box ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. wallet ( btc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsystem Ġ= ĠcheckNotNull ( bread Box . getSystem Unsafe ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnetwork Ġ= Ġsystem . networks . find Ġ{ Ġit . contains Currency ( wallet . currency Id ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnetwork Peer Ġ= Ġnetwork ?. get Peer OrNull ( effect . node ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( network Peer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwallet . wallet Manager . connect ( network Peer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . accept ( E . On Connection Info Loaded ( Node Selector . Mode . MAN UAL , Ġeffect . node )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Error (" Failed Ġto Ġcreate Ġnetwork Ġpeer ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ