package Ġcom . fib el att i . pin board . features . posts . presentation Ċ Ċ import Ġcom . fib el att i . core . extension . empty Ċ import Ġcom . fib el att i . core . functional . on Failure Ċ import Ġcom . fib el att i . core . functional . on Success Ċ import Ġcom . fib el att i . core . provider . Resource Provider Ċ import Ġcom . fib el att i . pin board . R Ċ import Ġcom . fib el att i . pin board . core . android . base . Base ViewModel Ċ import Ġcom . fib el att i . pin board . features . app state . AppState Repository Ċ import Ġcom . fib el att i . pin board . features . app state . Post Saved Ċ import Ġcom . fib el att i . pin board . features . posts . domain . use case . Add Post Ċ import Ġcom . fib el att i . pin board . features . posts . domain . use case . Get Suggest ed Tags Ċ import Ġcom . fib el att i . pin board . features . posts . domain . use case . Invalid Url Exception Ċ import Ġcom . fib el att i . pin board . features . tags . domain . model . Tag Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . State Flow Ċ import Ġkotlinx . coroutines . flow . filter NotNull Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ @ H ilt ViewModel Ċ class ĠEdit Post ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġapp State Repository : ĠApp State Repository , ĊĠĠĠ Ġprivate Ġval Ġget Suggest ed Tags : ĠGet Suggest ed Tags , ĊĠĠĠ Ġprivate Ġval Ġadd Post : ĠAdd Post , ĊĠĠĠ Ġprivate Ġval Ġresource Provider : ĠResource Provider , Ċ ) Ġ: ĠBase ViewModel () Ġ{ ĊĊĠĠĠ Ġval Ġloading : ĠFlow < Boolean > Ġget () Ġ= Ġ_ loading . filter NotNull () ĊĠĠĠ Ġprivate Ġval Ġ_ loading Ġ= ĠMutable State Flow < Boolean ? >( null ) ĊĠĠĠ Ġval Ġsuggested Tags : ĠFlow < List < String >> Ġget () Ġ= Ġ_ suggest ed Tags . filter NotNull () ĊĠĠĠ Ġprivate Ġval Ġ_ suggest ed Tags Ġ= ĠMutable State Flow < List < String >? >( null ) ĊĠĠĠ Ġval Ġinvalid Url Error : ĠState Flow < String > Ġget () Ġ= Ġ_ invalid Url Error ĊĠĠĠ Ġprivate Ġval Ġ_ invalid Url Error Ġ= ĠMutable State Flow ("") ĊĠĠĠ Ġval Ġinvalid Url Title Error : ĠState Flow < String > Ġget () Ġ= Ġ_ invalid Url Title Error ĊĠĠĠ Ġprivate Ġval Ġ_ invalid Url Title Error Ġ= ĠMutable State Flow ("") ĊĠĠĠ Ġval Ġsaved : ĠFlow < Unit > Ġget () Ġ= Ġ_ saved . filter NotNull () ĊĠĠĠ Ġprivate Ġval Ġ_ saved Ġ= ĠMutable State Flow < Unit ? >( null ) ĊĊĠĠĠ Ġfun Ġsearch For Tag ( tag : ĠString , Ġcurrent Tags : ĠList < Tag >) Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Suggest ed Tags ( Get Suggest ed Tags . Params ( tag , Ġcurrent Tags )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Success Ġ{ Ġ_ suggest ed Tags . value Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Link ( ĊĠĠĠĠĠĠĠ Ġurl : ĠString , ĊĠĠĠĠĠĠĠ Ġtitle : ĠString , ĊĠĠĠĠĠĠĠ Ġdescription : ĠString , ĊĠĠĠĠĠĠĠ Ġprivate : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġread Later : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġtags : ĠList < Tag >, ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Data ( url , Ġtitle , Ġdescription , Ġprivate , Ġread Later , Ġtags ) Ġ{ Ġparams Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Post ( params ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Success Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ saved . value Ġ= ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp State Repository . run Action ( Post Saved ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Failure Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInvalid Url Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ invalid Url Error . value Ġ= Ġresource Provider . getString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . validation _ error _ invalid _ url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġhandle Error ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun Ġvalidate Data ( ĊĠĠĠĠĠĠĠ Ġurl : ĠString , ĊĠĠĠĠĠĠĠ Ġtitle : ĠString , ĊĠĠĠĠĠĠĠ Ġdescription : ĠString , ĊĠĠĠĠĠĠĠ Ġprivate : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġread Later : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġtags : ĠList < Tag >, ĊĠĠĠĠĠĠĠ Ġif Valid : Ġ( Add Post . Params ) Ġ-> ĠUnit , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ invalid Url Error . value Ġ= ĠString . empty () ĊĠĠĠĠĠĠĠ Ġ_ invalid Url Title Error . value Ġ= ĠString . empty () ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl . isBlank () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ invalid Url Error . value Ġ= Ġresource Provider . getString ( R . string . validation _ error _ empty _ url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle . isBlank () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ invalid Url Title Error . value Ġ= Ġresource Provider . getString ( R . string . validation _ error _ empty _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Valid ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Post . Params ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġurl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġdescription , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġ= Ġprivate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Later Ġ= Ġread Later , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ= Ġtags ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ