package Ġcom . ton y ode v . fetch 2 . model Ċ Ċ import Ġcom . ton y ode v . fetch 2 . Download Ċ import Ġcom . ton y ode v . fetch 2 . Fetch Group Ċ import Ġcom . ton y ode v . fetch 2 . Fetch Group Observer Ċ import Ġcom . ton y ode v . fetch 2 . Status Ċ import Ġcom . ton y ode v . fetch 2 . fetch . Fetch Modules Builder Ċ import Ġcom . ton y ode v . fetch 2 core . Fetch Observer Ċ import Ġcom . ton y ode v . fetch 2 core . Reason Ċ Ċ class ĠFetch Group Info ( override Ġval Ġid : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġnamespace : ĠString ): ĠFetch Group Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġobserver Set Ġ= Ġmutable Set Of < Fetch Group Observer >() ĊĊĠĠĠ Ġ@ Volatile ĊĠĠĠ Ġoverride Ġvar Ġdownloads : ĠList < Download > Ġ= Ġempty List () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġqueued Downloads Ġ= Ġvalue . filter Ġ{ Ġit . status Ġ== ĠStatus . QUE U ED Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadded Downloads Ġ= Ġvalue . filter Ġ{ Ġit . status Ġ== ĠStatus . AD DED Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaused Downloads Ġ= Ġvalue . filter Ġ{ Ġit . status Ġ== ĠStatus . PA USED Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownloading Downloads Ġ= Ġvalue . filter Ġ{ Ġit . status Ġ== ĠStatus . DOWNLOAD ING Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted Downloads Ġ= Ġvalue . filter Ġ{ Ġit . status Ġ== ĠStatus . COMPLETED Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcancelled Downloads Ġ= Ġvalue . filter Ġ{ Ġit . status Ġ== ĠStatus . CANCEL LED Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfailed Downloads Ġ= Ġvalue . filter Ġ{ Ġit . status Ġ== ĠStatus . FAILED Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeleted Downloads Ġ= Ġvalue . filter Ġ{ Ġit . status Ġ== ĠStatus . DELETED Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremoved Downloads Ġ= Ġvalue . filter Ġ{ Ġit . status Ġ== ĠStatus . RE MOVED Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate ( downloads : ĠList < Download >, Ġtrigger Download : ĠDownload ?, Ġreason : ĠReason ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . downloads Ġ= Ġdownloads ĊĠĠĠĠĠĠĠ Ġif Ġ( reason Ġ!= ĠReason . DOWNLOAD _ BLOCK _ UPDATED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFetch Modules Builder . main UI Handler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( observer Set ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver Set . iterator (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Changed ( downloads , Ġreason ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( trigger Download Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Changed ( downloads , Ġtrigger Download , Ġreason ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġqueued Downloads : ĠList < Download > Ġ= Ġempty List () ĊĊĠĠĠ Ġoverride Ġvar Ġadded Downloads : ĠList < Download > Ġ= Ġempty List () ĊĊĠĠĠ Ġoverride Ġvar Ġpaused Downloads : ĠList < Download > Ġ= Ġempty List () ĊĊĠĠĠ Ġoverride Ġvar Ġdownloading Downloads : ĠList < Download > Ġ= Ġempty List () ĊĊĠĠĠ Ġoverride Ġvar Ġcompleted Downloads : ĠList < Download > Ġ= Ġempty List () ĊĊĠĠĠ Ġoverride Ġvar Ġcancelled Downloads : ĠList < Download > Ġ= Ġempty List () ĊĊĠĠĠ Ġoverride Ġvar Ġfailed Downloads : ĠList < Download > Ġ= Ġempty List () ĊĊĠĠĠ Ġoverride Ġvar Ġdeleted Downloads : ĠList < Download > Ġ= Ġempty List () ĊĊĠĠĠ Ġoverride Ġvar Ġremoved Downloads : ĠList < Download > Ġ= Ġempty List () ĊĊĠĠĠ Ġoverride Ġval Ġgroup Download Progress : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprogress Sum Ġ= Ġdownloads . sum By Ġ{ Ġit . progress Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ Ġprogress Sum Ġ/ Ġdownloads . size ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġob servers : ĠSet < Fetch Observer < List < Download >>> ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsynchronized ( observer Set ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver Set . to Mutable Set () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Fetch Group Observer s ( var arg Ġfetch Group Observer s : ĠFetch Group Observer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( observer Set ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Fetch Group Observer s Ġ= Ġfetch Group Observer s . distinct () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadded Observer s Ġ= Ġmutable ListOf < Fetch Group Observer >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( fetch Group Observer Ġin Ġnew Fetch Group Observer s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! observer Set . contains ( fetch Group Observer )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver Set . add ( fetch Group Observer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadded Observer s . add ( fetch Group Observer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFetch Modules Builder . main UI Handler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( added Observer Ġin Ġadded Observer s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadded Observer . on Changed ( downloads , ĠReason . OB SERVER _ ATTACH ED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Fetch Group Observer s ( var arg Ġfetch Group Observer s : ĠFetch Group Observer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( observer Set ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( fetch Group Observer Ġin Ġfetch Group Observer s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver Set . remove ( fetch Group Observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }