package Ġorg . syn k note . files Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Toast Ċ import Ġcom . google . gson . Gson Builder Ċ import Ġorg . apache . commons . lang . StringUtils Ċ import Ġjava . io . File Ċ import Ġorg . syn k note .* Ċ import Ġorg . syn k note . algorithms . BC rypt Ċ import Ġorg . syn k note . misc .* Ċ import Ġorg . syn k note . preferences . Pref Group Ċ import Ġorg . syn k note . preferences . Pref Manager Ċ import Ġorg . syn k note . sync . Sync Manager Ċ Ċ class ĠDocument ( document Id : ĠInt Ġ= Ġ 0 , Ġdocument File : ĠFile Ġ= ĠFile ("")) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġ_ document Id Ġ= Ġdocument Id ĊĠĠĠ Ġprivate Ġval Ġ_ document File Ġ= Ġdocument File ĊĊĠĠĠ Ġfun Ġsave ( context : ĠContext , ĠfileName : ĠString , Ġnote Id : ĠString , Ġcontent : ĠString , Ġsync : ĠBoolean , Ġsalt : ĠString Ġ= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdocument Content Ġ= Ġcontent ĊĊĠĠĠĠĠĠĠ Ġ// if Ġ( getDefault Pref ( context ). getBoolean (" encrypt _ files _ switch ", Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġencryption Key Ġ= ĠMainActivity . Protection . offline Encryption Key ĊĠĠĠĠĠĠĠ Ġif Ġ( sync ) Ġencryption Key Ġ= ĠMainActivity . Protection . get Sync Encryption Key ( context , Ġsalt ) ĊĠĠĠĠĠĠĠ Ġdocument Content Ġ= Ġdocument Content . encrypt ( encryption Key ) ĊĠĠĠĠĠĠĠ Ġ//} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( MainActivity . FileList . current Notebook . sync ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocument Content Ġ+= Ġsalt Ġ+ Ġnote Id ĊĊĠĠĠĠĠĠĠ ĠFile ( fix Url ( MainActivity . FileList . current Directory ) Ġ+ ĠfileName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. write Text ( document Content ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( sync ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsync Pref Ġ= ĠPref Manager ( context , ĠPref Group . Sync ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSync Manager ( context ). edit Note ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync Pref . getString (" userId "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync Pref . getString (" token "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocument Content ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġopen ( view : ĠView , Ġnew : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdocument File Ġ= Ġ_ document File ĊĠĠĠĠĠĠĠ Ġif Ġ(_ document File Ġ== ĠFile ("")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocument File Ġ= ĠMainActivity . FileList . files [_ document Id ] ĊĊĠĠĠĠĠĠĠ Ġvar Ġintent Ġ= ĠIntent ( view . context , ĠMarkdown Editor :: class . java ) ĊĠĠĠĠĠĠĠ Ġvar Ġdocument Content Ġ= Ġdocument File . read Text () ĊĠĠĠĠĠĠĠ Ġvar Ġnote Id Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġsalt Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġsync Ġ= ĠMainActivity . FileList . current Notebook . sync ĊĊĠĠĠĠĠĠĠ Ġif Ġ( sync Ġ&& Ġ! new ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsync Pref Ġ= ĠPref Manager ( view . context , ĠPref Group . Sync ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠSync Manager ( view . context ). get Note ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync Pref . getString (" userId "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync Pref . getString (" token "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpartition Note Data ( document Content ). id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Content Ġ= Ġresult [" content "]. toString () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" result !! !", Ġresult Content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnote Data Ġ= Ġpartition Note Data ( result Content ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnote Id Ġ= Ġnote Data . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsalt Ġ= Ġnote Data . salt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocument Content Ġ= Ġnote Data . body ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( sync Ġ&& Ġnew ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnote Data Ġ= Ġpartition Note Data ( document Content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnote Id Ġ= Ġnote Data . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsalt Ġ= Ġnote Data . salt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocument Content Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠLog . d (" SAL T !! !", Ġsalt ) ĊĠĠĠĠĠĠĠ ĠLog . d (" NOTE ID !! !", Ġnote Id ) ĊĊĠĠĠĠĠĠĠ Ġ// if Ġ( getDefault Pref ( view . context ). getBoolean (" encrypt _ files _ switch ", Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġencryption Key Ġ= ĠMainActivity . Protection . offline Encryption Key ĊĠĠĠĠĠĠĠ Ġif Ġ( sync ) Ġencryption Key Ġ= ĠMainActivity . Protection . get Sync Encryption Key ( view . context , Ġsalt ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdecrypted Text Ġ= Ġdocument Content . decrypt ( encryption Key ) ĊĠĠĠĠĠĠĠ Ġif Ġ( de crypted Text . second Ġ|| Ġdocument Content Ġ== Ġ"") Ġ// ĠDecrypt ing ĠSuc ceeded ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocument Content Ġ= Ġdecrypted Text . first ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( view . context , Ġ" Failed Ġto Ġdecrypt Ġfile .", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ//} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( document File . extension Ġ== Ġ" txt ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent Ġ= ĠIntent ( view . context , ĠNormal Editor :: class . java ) ĊĊĠĠĠĠĠĠĠ ĠMainActivity . Protection . ask For Password Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġintent . putExtra (" note Id ", Ġnote Id ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" salt ", Ġsalt ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" title ", Ġdocument File . name Without Extension ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" content ", Ġdocument Content ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" filename ", Ġdocument File . name ) ĊĠĠĠĠĠĠĠ Ġview . context . startActivity ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate ( name : ĠString , Ġtype : ĠString , Ġview : ĠView , Ġsync : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġname Ġ+ ĠgetFile Extension From Type ( type ) ĊĠĠĠĠĠĠĠ Ġval Ġdirectory Ġ= Ġfix Url ( MainActivity . FileList . current Directory ) ĊĠĠĠĠĠĠĠ ĠFile ( directory ). mkdir s () ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( directory Ġ+ ĠfileName ) ĊĠĠĠĠĠĠĠ Ġfile . createNew File () ĊĠĠĠĠĠĠĠ ĠMainActivity . FileList . adapter . add ( file ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSync ĊĠĠĠĠĠĠĠ Ġif Ġ( sync ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsync Pref Ġ= ĠPref Manager ( view . context , ĠPref Group . Sync ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotebook Name Ġ= ĠPref Manager ( view . context , ĠPref Group . Not ebooks Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getString (" last _ notebook ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotebook Ġ= ĠPref Manager ( view . context , ĠPref Group . Not ebooks ). getString ( notebook Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotebook Data Ġ= ĠGson Builder (). create (). fromJson ( notebook , ĠNotebook Data :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġfile . canonical Path . substring ( view . context . files Dir . canonical Path . length ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠSync Manager ( view . context ). create Note ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync Pref . getString (" userId "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync Pref . getString (" token "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotebook Data . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsync Pref . setString (" action Id ", Ġresult [" action Id "]. toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// sync Pref . setString (" token ", Ġresult [" token "]. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsalt Ġ= ĠBC rypt . gens alt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnote Id Ġ= Ġresult [" id "]. toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// file . write Text ( salt Ġ+ Ġresult [" id "]. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave ( view . context , ĠfileName , Ġnote Id , Ġ"", Ġtrue , Ġsalt ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// MainActivity . FileList . files . add ( File ( directory Ġ+ ĠfileName )) ĊĠĠĠĠĠĠĠ Ġ// MainActivity . FileList . adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠ ĠDocument ( 0 , Ġfile ). open ( view , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( context : ĠContext , Ġlocation : ĠString , Ġid : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( fix Url ( context . files Dir . canonical Path ) Ġ+ Ġlocation ) ĊĠĠĠĠĠĠĠ Ġfile . write Text ( StringUtils . repeat ("- ", Ġ 2 9 ) Ġ+ Ġid ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete ( main Activity : ĠMainActivity Ġ= ĠMainActivity (), Ġlocation : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync : ĠBoolean Ġ= ĠMainActivity . FileList . current Notebook . sync ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdocument File Ġ= ĠMainActivity . FileList . files [_ document Id ] ĊĠĠĠĠĠĠĠ Ġif Ġ( location Ġ!= Ġ"") Ġdocument File Ġ= ĠFile ( fix Url ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Activity . files Dir . canonical Path ) Ġ+ Ġlocation ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( sync ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsync Pref Ġ= ĠPref Manager ( main Activity , ĠPref Group . Sync ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnote Id Ġ= Ġpartition Note Data ( document File . read Text ()). id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠSync Manager ( main Activity ). delete Note ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync Pref . getString (" userId "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync Pref . getString (" token "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsync Pref . setString (" action Id ", Ġresult [" action Id "]. toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdelete ( document File . canonical Path , Ġmain Activity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete ( location : ĠString Ġ= Ġ"", Ġmain Activity : ĠMainActivity Ġ= ĠMainActivity ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( location Ġ!= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( location ). delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Activity . load Documents () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMainActivity . FileList . files [_ document Id ]. delete () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMainActivity . FileList . adapter . removeItem (_ document Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrename ( main Activity : ĠMainActivity , ĠnewName : ĠString , Ġview : ĠView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync : ĠBoolean Ġ= ĠMainActivity . FileList . current Notebook . sync ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdocument File Ġ= ĠMainActivity . FileList . files [_ document Id ] ĊĠĠĠĠĠĠĠ Ġval Ġnew File Ġ= ĠFile ( get Save Location ( view . context ) Ġ+ ĠnewName ) ĊĠĠĠĠĠĠĠ Ġdocument File . rename To ( new File ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( sync ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsync Pref Ġ= ĠPref Manager ( main Activity , ĠPref Group . Sync ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnote Id Ġ= Ġpartition Note Data ( new File . read Text ()). id ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Note Id ", Ġnote Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠSync Manager ( main Activity ). move Note ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync Pref . getString (" userId "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync Pref . getString (" token "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew File . canonical Path . substring ( view . context . files Dir . canonical Path . length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsync Pref . setString (" action Id ", Ġresult [" action Id "]. toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// MainActivity . FileList . files [_ document Id ] Ġ= Ġnew File ĊĠĠĠĠĠĠĠ Ġ// MainActivity . FileList . adapter . notify Item Changed (_ document Id ) ĊĠĠĠĠĠĠĠ Ġmain Activity . load Documents () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmove ( main Activity : ĠMainActivity , Ġold Location : ĠString , Ġnew Location : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( fix Url ( main Activity . files Dir . canonical Path ) Ġ+ Ġold Location ) ĊĠĠĠĠĠĠĠ Ġval Ġnew File Ġ= ĠFile ( fix Url ( main Activity . files Dir . canonical Path ) Ġ+ Ġnew Location ) ĊĠĠĠĠĠĠĠ Ġfile . copy To ( new File ) ĊĠĠĠĠĠĠĠ Ġfile . delete () ĊĠĠĠĠĠĠĠ Ġmain Activity . load Documents () ĊĠĠĠ Ġ} Ċ }