/* Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 2 1 ĠBy ĠG eek s ĠEmp ire . Ċ Ġ* Ċ Ġ* ĠCreated Ġby ĠE li as ĠF azel Ċ Ġ* ĠLast Ġmodified Ġ 8 / 1 5 / 2 1 , Ġ 1 2 : 1 1 ĠPM Ċ Ġ* Ċ Ġ* ĠLicensed ĠUnder ĠMIT ĠLicense . Ċ Ġ* Ġhttps :// opensource . org / licenses / MIT Ċ Ġ*/ Ċ Ċ package Ġco . ge ek semp ire . premium . sto refront . Utils . IO Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Log Ċ import Ġandroidx . annotation . Keep Ċ import Ġandroidx . work . Coroutine Worker Ċ import Ġandroidx . work . Worker Parameters Ċ import Ġco . ge ek semp ire . premium . sto refront . Database . Write . Input Process Ċ import Ġco . ge ek semp ire . premium . sto refront . Sto refront Configurations . Network Endpoints . Applications Query Endpoints Ċ import Ġco . ge ek semp ire . premium . sto refront . Sto refront Configurations . Network Endpoints . Games Query Endpoints Ċ import Ġco . ge ek semp ire . premium . sto refront . Sto refront Configurations . Network Endpoints . General Endpoints Ċ import Ġco . ge ek semp ire . premium . sto refront . Utils . Network Connections . Requests . Generic Json Request Ċ import Ġco . ge ek semp ire . premium . sto refront . Utils . Network Connections . Requests . Json Request Responses Ċ import Ġcom . google . firebase . firestore . Query Snapshot Ċ import Ġcom . google . firebase . firestore . Source Ċ import Ġcom . google . firebase . firestore . k tx . firestore Ċ import Ġcom . google . firebase . k tx . Firebase Ċ import Ġkotlinx . coroutines . delay Ċ import Ġorg . json . JSONArray Ċ Ċ class ĠData Updating Work ( val Ġapp Context : ĠContext , Ġval Ġworker Params : ĠWorker Parameters ) Ġ: ĠCor outine Worker ( app Context , Ġworker Params ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġgeneral Endpoint Ġ= ĠGeneral Endpoints () ĊĊĠĠĠ Ġprivate Ġval Ġapplications Query Endpoints : ĠApplications Query Endpoints Ġ= ĠApplications Query Endpoints ( general Endpoint ) ĊĠĠĠ Ġprivate Ġval Ġgames Query Endpoints : ĠGames Query Endpoints Ġ= ĠGames Query Endpoints ( general Endpoint ) ĊĊĠĠĠ Ġprivate Ġval Ġinput Process : ĠInput Process Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠInput Process ( application Context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar ĠstringBuilder Ġ= ĠStringBuilder () ĊĊĠĠĠ Ġprivate Ġvar ĠnumberOf Page To Retrieve : ĠInt Ġ= Ġ 1 ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdo Work (): ĠResult Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġupdate Data Key Ġ= Ġworker Params . input Data . get ByteArray ( IO . Update Data Key )?. let Ġ{ ĠString ( it ) Ġ} ĊĠĠĠĠĠĠĠ ĠLog . d ( this @ Data Updating Work . java Class . simple Name , Ġupdate Data Key . toString ()) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠStart Ġ- ĠApplications ĠData ĠUpdating Ġ*/ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( update Data Key ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIO . Update Applications Data Key Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Applications Content Retrie val ( IO . Update Applications Data Key ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIO . Update Games Data Key Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Games Content Retrie val ( IO . Update Games Data Key ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIO . Update Books Data Key Ġ-> Ġ{ ĊĊ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIO . Update Movies Data Key Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Movies Content Retrie val ( IO . Update Movies Data Key ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĠEnd Ġ- ĠApplications ĠData ĠUpdating Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġdelay ( 1 3 5 7 ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResult . success () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Applications Content Retrie val ( update Data Key : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ ĠGeneric Json Request ( application Context , Ġobject Ġ: ĠJson Request Responses Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġjson Request Response Success Handler ( raw Data JsonArray : ĠJSONArray ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . json Request Response Success Handler ( raw Data JsonArray ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( raw Data JsonArray . length () Ġ== Ġapplications Query Endpoints . default Products PerPage ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( this @ Data Updating Work . java Class . simple Name , Ġ" There ĠMight ĠBe ĠMore ĠData ĠTo ĠRetrieve ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append ( raw Data JsonArray . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnumberOf Page To Retrieve ++ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Applications Content Retrie val ( update Data Key ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( this @ Data Updating Work . java Class . simple Name , Ġ" No ĠMore ĠContent ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append ( raw Data JsonArray . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Process . write Data ToFile ( update Data Key , ĠstringBuilder . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}). getMethod ( applications Query Endpoints . getAll Android Applications Endpoint ( product PerPage Ġ= Ġ 9 9 , ĠnumberOf Page Ġ= ĠnumberOf Page To Retrieve )) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Games Content Retrie val ( update Data Key : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ ĠGeneric Json Request ( application Context , Ġobject Ġ: ĠJson Request Responses Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġjson Request Response Success Handler ( raw Data JsonArray : ĠJSONArray ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . json Request Response Success Handler ( raw Data JsonArray ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( raw Data JsonArray . length () Ġ== Ġapplications Query Endpoints . default Products PerPage ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( this @ Data Updating Work . java Class . simple Name , Ġ" There ĠMight ĠBe ĠMore ĠData ĠTo ĠRetrieve ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append ( raw Data JsonArray . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnumberOf Page To Retrieve ++ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Applications Content Retrie val ( update Data Key ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( this @ Data Updating Work . java Class . simple Name , Ġ" No ĠMore ĠContent ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append ( raw Data JsonArray . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Process . write Data ToFile ( update Data Key , ĠstringBuilder . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}). getMethod ( games Query Endpoints . getAll Android Games Endpoint ( product PerPage Ġ= Ġ 9 9 , ĠnumberOf Page Ġ= ĠnumberOf Page To Retrieve )) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠGen re Data Key Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠGen re Id Ġ= Ġ" genre Id " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠGen re Name Ġ= Ġ" genre Name " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠGen re Icon Link Ġ= Ġ" genre Icon Link " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠProduct Count Ġ= Ġ" product Count " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Keep ĊĠĠĠ Ġdata Ġclass ĠGen re Ids ( var ĠGen re Ids : ĠArrayList < HashMap < String , ĠAny >> ? Ġ= Ġnull ) ĊĊĠĠĠ Ġ@ Keep ĊĠĠĠ Ġdata Ġclass ĠSto refront Gen res Data ( var Ġgenre Id : ĠInt , Ġvar Ġgenre Name : ĠString , Ġvar Ġgenre Icon Link : ĠString , Ġvar Ġproduct Count : ĠInt , Ġvar Ġselected Category : ĠBoolean Ġ= Ġfalse ) ĊĊĠĠĠ Ġprivate Ġfun Ġstart Movies Content Retrie val ( update Data Key : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ ĠFirebase . firestore ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. document ("/ Prem ium Sto refront / Products " Ġ+ Ġ"/" Ġ+ Ġ" Mult imedia " Ġ+ Ġ"/" Ġ+ Ġ" Movies ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( Source . SERVER ). add On Success Listener Ġ{ Ġdocument Snapshot Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( document Snapshot . exists ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovies Document Snapshots Ġ= ĠArrayList < Sto refront Gen res Data >() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocument Snapshot . toObject ( Genre Ids :: class . java ) !!. Genre Ids ?. forEach Ġ{ Ġdocument Map Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovies Document Snapshots . add ( Sto refront Gen res Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenre Id Ġ= Ġdocument Map [ Genre Data Key . Genre Id ]. toString (). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenre Name Ġ= Ġdocument Map [ Genre Data Key . Genre Name ]. toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenre Icon Link Ġ= Ġdocument Map [ Genre Data Key . Genre Icon Link ]. toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Count Ġ= Ġdocument Map [ Genre Data Key . Product Count ]. toString (). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Query Snapshot Ġ= ĠArrayList < Query Snapshot >() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġall Genre Count Ġ= Ġmovies Document Snapshots . size ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġgenre Counter Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovies Document Snapshots . forEach Indexed Ġ{ Ġindex , Ġst o refront Gen res Data Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase . firestore ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collection ("/ Prem ium Sto refront / Products " Ġ+ Ġ"/" Ġ+ Ġ" Mult imedia " Ġ+ Ġ"/" Ġ+ Ġ" Movies " Ġ+ Ġ"/" Ġ+ Ġst o refront Gen res Data . genre Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( Source . SERVER ). add On Success Listener Ġ{ Ġquery Snapshot Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenre Counter ++ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! query Snapshot . isEmpty ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw Query Snapshot . add ( query Snapshot ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( all Genre Count Ġ== Ġgenre Counter ) Ġ{ ĊĊĊ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . printStackTrace () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ }