package Ġcom . pn ue ma . android . github pr viewer . diff viewer . ui Ċ Ċ import Ġcom . pn ue ma . android . github pr viewer . diff viewer . ui . model .* Ċ import Ġcom . pn ue ma . android . github pr viewer . parser . Diff Parser Ċ Ċ /** Ċ Ġ* ĠClass Ġto Ġhelp Ġbuild Ġout Ġthe Ġlist Ġof ĠUI Ġdata Ġmodels Ġfor Ġdiff Ġfiles Ċ Ġ*/ Ċ class ĠDiff List Builder ( private Ġval Ġdiff Parser : ĠDiff Parser ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠNO _ NEW LINE _ MESSAGE Ġ= Ġ"\\ ĠNo Ġnewline Ġat Ġend Ġof Ġfile " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġline Left Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġline Right Ġ= Ġ 0 ĊĊĠĠĠ Ġenum Ġclass ĠFile Type Ġ{ ĊĠĠĠĠĠĠĠ ĠLEFT , ĠRIGHT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBuild Ġthe Ġdiff Ġui Ġdata Ġmodel Ġlist Ġto Ġsend Ġto Ġthe Ġadapter Ġfor Ġdisplay ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbuild DataList (): ĠArrayList < ID iff Item > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ: ĠArrayList < ID iff Item > Ġ= ĠArrayList () ĊĊĠĠĠĠĠĠĠ Ġdiff Parser . files . forEach Ġ{ file Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( File Header Model ( file . getFile Header ())) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// check Ġfor Ġdeleted Ġfile Ġheader ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file . isFile Deleted ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( Deleted File Model ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// check Ġfor Ġbinary Ġfile Ġheader ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file . is Binary File ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( Binary File Model ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// regular Ġchange Ġlog Ġso Ġshow Ġthe Ġchanges ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . h unk s . forEach Ġ{ Ġh unk Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( H unk Header Model ( h unk . get H unk Header ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Left Ġ= Ġh unk . change Left Start LineNumber ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Right Ġ= Ġh unk . change Right Start LineNumber ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh unk . changes Left . isEmpty () Ġ-> Ġ// no Ġchanges Ġon Ġleft Ġside ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh unk . changes Right . forEach Ġ{ Ġline 2 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( Diff Line Model ("", Ġline 2 , Ġget Line Num ("", ĠFile Type . LEFT ), Ġget Line Num ( line 2 , ĠFile Type . RIGHT ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh unk . changes Right . isEmpty () Ġ-> Ġ// no Ġchanges Ġon Ġright Ġside ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh unk . changes Right . forEach Ġ{ Ġline 1 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( Diff Line Model ( line 1 , Ġ"", Ġget Line Num ( line 1 , ĠFile Type . LEFT ), Ġget Line Num ("", ĠFile Type . RIGHT ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġh unk . changes Left . forEach Indexed Ġ{ Ġindex , Ġline 1 Ġ-> Ġ// changes Ġto Ġboth Ġsides ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline 2 Ġ= Ġh unk . changes Right [ index ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// check Ġand Ġhandle Ġmessage Ġabout Ġthe Ġend Ġof Ġfile Ġnot Ġhaving Ġa Ġnew Ġline Ġreturned Ġfrom Ġgithub Ġapi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line 1 Ġ== ĠNO _ NEW LINE _ MESSAGE Ġ&& Ġline 2 Ġ== ĠNO _ NEW LINE _ MESSAGE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach Indexed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDiff Line Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Line Num ( line 1 , ĠFile Type . LEFT ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Line Num ( line 2 , ĠFile Type . RIGHT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġitems ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġthe Ġfile Ġline Ġnumber ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Line Num ( line : ĠString , Ġfile : ĠFile Type ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( line . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( file ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Type . LEFT Ġ-> Ġ( line Left ++ ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Type . RIGHT Ġ-> Ġ( line Right ++ ). toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }