/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 6 Ġy vol k Ġ( Y uri ĠVol kov ), Ġhttp :// y ur iv olk ov . com Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// 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 Ġorg . and status . app . data . checker Ċ Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . provider . Base Columns Ċ import Ġorg . and status . app . data . Db Utils Ċ import Ġorg . and status . app . data . Db Utils . close Sil ently Ċ import Ġorg . and status . app . data . My Query Ċ import Ġorg . and status . app . data . Sql Ids Ċ import Ġorg . and status . app . database . table . Note Table Ċ import Ġorg . and status . app . util . My Log Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ import Ġjava . util . concurrent . atomic . Atomic Integer Ċ Ċ /** Ċ Ġ* Ġ@ author Ġy vol k @ y ur iv olk ov . com Ċ Ġ*/ Ċ class ĠCheck Con versations Ġ: ĠData Checker () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġitems : ĠMutable Map < Long , ĠNote Item > Ġ= ĠTreeMap () ĊĠĠĠ Ġprivate Ġval Ġreplies : ĠMutable Map < Long , ĠMutable List < Note Item >> Ġ= ĠTreeMap () ĊĠĠĠ Ġprivate Ġval Ġnote Ids Of One Conversation : ĠMutable Set < Long > Ġ= ĠHashSet () ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠNote Item Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġid : ĠLong Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġorigin Id : ĠLong Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġin Reply To Id Initial : ĠLong Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġin Reply To Id : ĠLong Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġconversation Id Initial : ĠLong Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġconversation Id : ĠLong Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġconversation Oid : ĠString ? Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġfun Ġfix Conversation Id ( conversation Id : ĠLong ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdifferent Ġ= Ġthis . conversation Id Ġ!= Ġconversation Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( different ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . conversation Id Ġ= Ġconversation Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdifferent ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfix In Reply To Id ( in Reply To Id : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdifferent Ġ= Ġthis . in Reply To Id Ġ!= Ġin Reply To Id . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( different ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . in Reply To Id Ġ= Ġin Reply To Id . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdifferent ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġis Changed (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġis Conversation Id Changed () Ġ|| ĠisIn Reply To Id Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġis Conversation Id Changed (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconversation Id Ġ!= Ġconversation Id Initial ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠisIn Reply To Id Changed (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġin Reply To Id Ġ!= Ġin Reply To Id Initial ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Msg Item {" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id =" Ġ+ Ġid Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", Ġorigin Id =" Ġ+ Ġorigin Id Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", Ġin Reply To Id _ initial =" Ġ+ Ġin Reply To Id Initial Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", Ġin Reply To Id =" Ġ+ Ġin Reply To Id Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", Ġconversation Id _ initial =" Ġ+ Ġconversation Id Initial Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", Ġconversation Id =" Ġ+ Ġconversation Id Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", Ġconversation Oid ='" Ġ+ Ġconversation Oid Ġ+ Ġ'\'' Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' }' ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Note Ids Of One Conversation ( ids : ĠMutable Set < Long >): ĠCheck Con versations Ġ{ ĊĠĠĠĠĠĠĠ Ġnote Ids Of One Conversation . addAll ( ids ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfix Internal (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġload Notes () ĊĠĠĠĠĠĠĠ Ġif Ġ( note Ids Of One Conversation . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfix Con versations Using Rep lies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfix Con versations Using Conversation Oid () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfix One Conversation () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsave Changes ( count Only ). to Long () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Notes () Ġ{ ĊĠĠĠĠĠĠĠ Ġitems . clear () ĊĠĠĠĠĠĠĠ Ġreplies . clear () ĊĠĠĠĠĠĠĠ Ġvar Ġsql Ġ= Ġ(" SELECT Ġ" Ġ+ ĠBase Columns ._ ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ", Ġ" Ġ+ ĠNote Table . ORIGIN _ ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ", Ġ" Ġ+ ĠNote Table . IN _ REPLY _ TO _ NOTE _ ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ", Ġ" Ġ+ ĠNote Table . CONVER S ATION _ ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ", Ġ" Ġ+ ĠNote Table . CONVER S ATION _ OID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" ĠFROM Ġ" Ġ+ ĠNote Table . TABLE _ NAME ) ĊĠĠĠĠĠĠĠ Ġif Ġ( note Ids Of One Conversation . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsql Ġ+= Ġ(" ĠWHERE Ġ" Ġ+ ĠNote Table . CONVER S ATION _ ID Ġ+ Ġ" ĠIN Ġ(" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" SELECT ĠDISTINCT Ġ" Ġ+ ĠNote Table . CONVER S ATION _ ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" ĠFROM Ġ" Ġ+ ĠNote Table . TABLE _ NAME Ġ+ Ġ" ĠWHERE Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ĠBase Columns ._ ID Ġ+ ĠSql Ids . from Ids ( note Ids Of One Conversation ). get Sql () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ") ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġcursor : ĠCursor ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġrows Count : ĠLong Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor Ġ= Ġmy Context . database ?. raw Query ( sql , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( cursor ?. moveTo Next () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrows Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠNote Item () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . id Ġ= ĠDb Utils . getLong ( cursor , ĠBase Columns ._ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . origin Id Ġ= ĠDb Utils . getLong ( cursor , ĠNote Table . ORIGIN _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . in Reply To Id Ġ= ĠDb Utils . getLong ( cursor , ĠNote Table . IN _ REPLY _ TO _ NOTE _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . in Reply To Id Initial Ġ= Ġitem . in Reply To Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . conversation Id Ġ= ĠDb Utils . getLong ( cursor , ĠNote Table . CONVER S ATION _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . conversation Id Initial Ġ= Ġitem . conversation Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . conversation Oid Ġ= ĠDb Utils . getString ( cursor , ĠNote Table . CONVER S ATION _ OID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ item . id ] Ġ= Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . in Reply To Id Ġ!= Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreplies . compute If Absent ( item . in Reply To Id ) Ġ{ ĠArrayList () Ġ}. add ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose Sil ently ( cursor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlogger . log Progress ( rows Count . toString () Ġ+ Ġ" Ġnotes Ġloaded ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfix Con versations Using Rep lies () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcounter Ġ= ĠAtomicInteger () ĊĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġitems . values ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . in Reply To Id Ġ!= Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġitems [ item . in Reply To Id ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . fix In Reply To Id ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent . conversation Id Ġ== Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . fix Conversation Id ( if Ġ( item . conversation Id Ġ== Ġ 0 L ) Ġparent . id Ġelse Ġitem . conversation Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . fix Conversation Id ( parent . conversation Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Conversation Of Rep lies ( item , Ġ 2 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcounter . increment AndGet () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . log Progress If Long Process Ġ{ Ġ" Checked Ġreplies Ġfor Ġ" Ġ+ Ġcounter . get () Ġ+ Ġ" Ġnotes Ġof Ġ" Ġ+ Ġitems . size Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfix Con versations Using Conversation Oid () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcounter Ġ= ĠAtomicInteger () ĊĠĠĠĠĠĠĠ Ġval Ġorig ins : ĠMutable Map < Long ?, ĠMutable Map < String ?, ĠNote Item ?> ?> Ġ= ĠConcurrent HashMap () ĊĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġitems . values ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! item . conversation Oid . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfirst Conversation Members Ġ= Ġorig ins [ item . origin Id ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( first Conversation Members Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Conversation Members Ġ= ĠConcurrent HashMap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorig ins [ item . origin Id ] Ġ= Ġfirst Conversation Members ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġfirst Conversation Members [ item . conversation Oid ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . fix Conversation Id ( if Ġ( item . conversation Id Ġ== Ġ 0 L ) Ġitem . id Ġelse Ġitem . conversation Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Conversation Members [ item . conversation Oid ] Ġ= Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . fix Conversation Id ( parent . conversation Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Conversation Of Rep lies ( item , Ġ 2 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcounter . increment AndGet () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . log Progress If Long Process Ġ{ Ġ" Checked Ġconversations Ġfor Ġ" Ġ+ Ġcounter Ġ+ Ġ" Ġnotes Ġof Ġ" Ġ+ Ġitems . size Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange Conversation Of Rep lies ( parent : ĠNote Item , Ġlevel : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreplies 1 Ġ= Ġreplies [ parent . id ] Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġreplies 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . fix Conversation Id ( parent . conversation Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( level Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Conversation Of Rep lies ( item , Ġlevel Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . log Progress (" Too Ġlong Ġconversation , Ġcouldn 't Ġfix Ġnote Id =" Ġ+ Ġitem . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfix One Conversation () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Conversation Id Ġ= Ġitems . values . stream (). map Ġ{ Ġnote Item : ĠNote Item Ġ-> Ġnote Item . conversation Id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. min Ġ{ Ġobj : ĠLong , Ġanother Long : ĠLong Ġ-> Ġobj . compareTo ( another Long ) Ġ}. orElse ( 0 L ) ĊĠĠĠĠĠĠĠ Ġcheck ( new Conversation Id Ġ!= Ġ 0 L ) Ġ{ Ġ" Conversation ĠID = 0 , Ġ$ note Ids Of One Conversation " Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġitems . values ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . conversation Id Ġ= Ġnew Conversation Id ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Changes ( count Only : ĠBoolean ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcounter Ġ= ĠAtomicInteger () ĊĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġitems . values ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . is Changed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsql Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( counter . get () Ġ< Ġ 5 Ġ&& ĠMy Log . is Verbose Enabled ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy Log . v ( this , Ġ" note Id =" Ġ+ Ġitem . id Ġ+ Ġ"; Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ( if Ġ( item . isIn Reply To Id Changed ()) Ġ" in Reply To Id Ġchanged Ġfrom Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġitem . in Reply To Id Initial Ġ+ Ġ" Ġto Ġ" Ġ+ Ġitem . in Reply To Id Ġelse Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ( if Ġ( item . isIn Reply To Id Changed () Ġ&& Ġitem . is Conversation Id Changed ()) Ġ" Ġand Ġ" Ġelse Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ( if Ġ( item . is Conversation Id Changed ()) Ġ" conversation Id Ġchanged Ġfrom Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġitem . conversation Id Initial Ġ+ Ġ" Ġto Ġ" Ġ+ Ġitem . conversation Id Ġelse Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ", ĠContent :' " Ġ+ ĠMy Query . note Id ToString Column Value ( Note Table . CONTENT , Ġitem . id ) Ġ+ Ġ"' ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! count Only ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsql Ġ= Ġ(" UPDATE Ġ" Ġ+ ĠNote Table . TABLE _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" ĠSET Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ( if Ġ( item . isIn Reply To Id Changed ()) ĠNote Table . IN _ REPLY _ TO _ NOTE _ ID Ġ+ Ġ"=" Ġ+ ĠDb Utils . sql Zero To Null ( item . in Reply To Id ) Ġelse Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ( if Ġ( item . isIn Reply To Id Changed () Ġ&& Ġitem . is Conversation Id Changed ()) Ġ", Ġ" Ġelse Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ( if Ġ( item . is Conversation Id Changed ()) ĠNote Table . CONVER S ATION _ ID Ġ+ Ġ"=" Ġ+ ĠDb Utils . sql Zero To Null ( item . conversation Id ) Ġelse Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" ĠWHERE Ġ" Ġ+ ĠBase Columns ._ ID Ġ+ Ġ"=" Ġ+ Ġitem . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Context . database ?. exec SQL ( sql ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcounter . increment AndGet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . log Progress If Long Process Ġ{ Ġ" Saved Ġchanges Ġfor Ġ$ counter Ġnotes " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Msg Ġ= Ġ" Error : Ġ" Ġ+ Ġe . message Ġ+ Ġ", ĠSQL :" Ġ+ Ġsql ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . log Progress ( log Msg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy Log . e ( this , Ġlog Msg , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcounter . get () ĊĠĠĠ Ġ} Ċ } Ċ