package Ġcom . github . push p avel . autoc p . database Ċ Ċ import Ġcom . github . push p avel . autoc p . common . compat . base . Auto Cp File Conversion Ċ import Ġcom . github . push p avel . autoc p . common . res . R Ċ import Ġcom . intellij . openapi . application . run Read Action Ċ import Ġcom . intellij . openapi . application . run Write Action Ċ import Ġcom . intellij . openapi . components . Service Ċ import Ġcom . intellij . openapi . components . service Ċ import Ġcom . intellij . openapi . file Editor . File Document Manager Ċ import Ġcom . intellij . openapi . file Editor . File Document Manager Listener Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . project . Project Manager Ċ import Ġcom . intellij . openapi . vfs . V fs Util Ċ import Ġcom . intellij . psi . Psi Manager Ċ import Ġcom . intellij . util . io . exists Ċ import Ġcom . intellij . util . io . read Text Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . serialization . decode FromString Ċ import Ġkotlinx . serialization . encode ToString Ċ import Ġkotlinx . serialization . json . Json Ċ import Ġjava . nio . file . Paths Ċ import Ġkotlin . io . path . Path Ċ import Ġkotlin . io . path . path String ĊĊ Ċ @ Service Ċ class ĠAuto Cp Storage ( val Ġproject : ĠProject ) Ġ{ ĊĊĠĠĠ Ġval Ġdatabase Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconverter Ġ= ĠAuto Cp File Conversion ( project ) ĊĠĠĠĠĠĠĠ Ġconverter . convert () ĊĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠPaths . get ( project . basePath !! , Ġ". autoc p ") ĊĊĠĠĠĠĠĠĠ Ġval Ġdb Ġ= Ġif Ġ( path . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Read Action Ġ{ ĠJson . decode FromString ( path . read Text ()) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAuto Cp DB ( R . keys . auto Cp File VersionNumber ) ĊĊĠĠĠĠĠĠĠ ĠAuto Cp Database ( Mutable State Flow ( db . problems ), ĠMutable State Flow ( db . solution Files )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġserial izable Database ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdatabase . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAuto Cp DB ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . keys . auto Cp File VersionNumber , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproblems , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsolution Files Flow . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠAuto Cp Storage Saver Ġ: ĠFile Document Manager Listener Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġbefore All Documents Saving () Ġ{ ĊĠĠĠĠĠĠĠ ĠProject Manager . getInstance If Created ()?. open Projects ?. forEach Ġ{ Ġproject Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠPaths . get ( Path ( project . basePath !! ). path String , Ġ". autoc p ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġvirtual File Ġ= ĠV fs Util . find File ( path , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdb Ġ= Ġproject . service < Auto Cp Storage >(). serial izable Database ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( virtual File ?. isValid Ġ!= Ġtrue Ġ&& ĠDEFAULT _ AUTO _ CP _ DB Ġ!= Ġdb ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Root Ġ= ĠV fs Util . find File ( Path ( project . basePath !! ), Ġtrue ) Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Write Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpsi Dir Ġ= ĠPsi Manager . getInstance ( project ). find Directory ( project Root ) Ġ?: Ġreturn @ run Write Action ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvirtual File Ġ= Ġpsi Dir . create File (". autoc p "). virtual File ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( virtual File ?. isValid Ġ!= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Read Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠFile Document Manager . getInstance (). getDocument ( virtual File !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( document Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . notify . could Not WriteTo Auto Cp File () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run Read Action ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Write Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocument . setText ( Json . encode ToString ( db )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ fun ĠProject . auto Cp (): ĠAuto Cp Database Ġ= Ġservice < Auto Cp Storage >(). database Ċ Ċ val ĠDEFAULT _ AUTO _ CP _ DB Ġ= ĠAuto Cp DB ( R . keys . auto Cp File VersionNumber ) Ċ