/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠSO UP Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġsoup . movie . the ater . edit Ċ Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġsoup . movie . model . The ater Ċ import Ġsoup . movie . model . The ater Area Ċ import Ġsoup . movie . model . The ater Area Group Ċ import Ġsoup . movie . model . repository . Mo op Repository Ċ import Ġsoup . movie . settings . AppSettings Ċ Ċ class ĠThe ater Edit Manager ( ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠMo op Repository , ĊĠĠĠ Ġprivate Ġval Ġapp Settings : ĠApp Settings Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġc gv Subject Ġ= ĠMutable State Flow < List < The ater Area >>( emptyList ()) ĊĠĠĠ Ġprivate Ġval Ġlot te Subject Ġ= ĠMutable State Flow < List < The ater Area >>( emptyList ()) ĊĠĠĠ Ġprivate Ġval Ġmeg ab ox Subject Ġ= ĠMutable State Flow < List < The ater Area >>( emptyList ()) ĊĠĠĠ Ġprivate Ġval Ġselected The aters Channel Ġ= ĠMutable State Flow < List < The ater >>( emptyList ()) ĊĊĠĠĠ Ġprivate Ġvar Ġthe ater List : ĠList < The ater > Ġ= Ġempty List () ĊĠĠĠ Ġprivate Ġvar Ġselected Item Set : ĠMutable Set < The ater > Ġ= Ġmutable Set Of () ĊĊĠĠĠ Ġfun Ġas C gv Flow (): ĠFlow < List < The ater Area >> Ġ= Ġc gv Subject ĊĊĠĠĠ Ġfun Ġas Lot te Flow (): ĠFlow < List < The ater Area >> Ġ= Ġlot te Subject ĊĊĠĠĠ Ġfun Ġas Me gab ox Flow (): ĠFlow < List < The ater Area >> Ġ= Ġmeg ab ox Subject ĊĊĠĠĠ Ġfun Ġas Selected The ater List Flow (): ĠFlow < List < The ater >> Ġ= Ġselected The aters Channel ĊĊĠĠĠ Ġsuspend Ġfun Ġload Async (): ĠThe ater Area Group Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Selected List () ĊĠĠĠĠĠĠĠ Ġreturn Ġrepository . getCode List (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Total List ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc gv Subject . value Ġ= Ġit . cg v ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlot te Subject . value Ġ= Ġit . lot te ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeg ab ox Subject . value Ġ= Ġit . me gab ox ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Total List ( group : ĠThe ater Area Group ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthe ater List Ġ= Ġgroup . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( cg v Ġ+ Ġlot te Ġ+ Ġmeg ab ox ). flatMap ( The ater Area :: the ater List ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Selected List () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠAvoid Ġblocking Ġthreads Ġon ĠData Store ĊĠĠĠĠĠĠĠ Ġselected Item Set Ġ= Ġrun Blocking Ġ{ Ġapp Settings . get Favorite The ater List () Ġ}. to Mutable Set () ĊĠĠĠĠĠĠĠ Ġselected The aters Channel . value Ġ= Ġselected Item Set . as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . type Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate SelectedItem Count () Ġ{ ĊĠĠĠĠĠĠĠ Ġselected The aters Channel . value Ġ= Ġthe ater List . as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Item Set . any Ġ{ Ġselected Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Item Ġ== Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . type Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( the ater : ĠThe ater ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Under Limit Ġ= Ġselected Item Set . size Ġ< ĠMAX _ ITEMS ĊĠĠĠĠĠĠĠ Ġif Ġ( is Under Limit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Item Set . add ( the ater ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate SelectedItem Count () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġis Under Limit ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove ( the ater : ĠThe ater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġselected Item Set . remove ( the ater ) ĊĠĠĠĠĠĠĠ Ġupdate SelectedItem Count () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠAvoid Ġblocking Ġthreads Ġon ĠData Store ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Settings . set Favorite The ater List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe ater List . as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Item Set . any Ġ{ Ġselected Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Item . id Ġ== Ġit . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . type Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMAX _ ITEMS Ġ= Ġ 1 0 ĊĠĠĠ Ġ} Ċ } Ċ