@@ -2,26 +2,17 @@ package kscript.app.appdir
22
33import kscript.app.creator.JarArtifact
44import kscript.app.model.ScriptType
5- import kscript.app.util.Logger.devMsg
6- import kscript.app.util.ScriptUtils
5+ import kscript.app.model.Content
76import org.apache.commons.codec.digest.DigestUtils
87import java.net.URI
8+ import java.net.URL
99import java.nio.file.Path
1010import java.nio.file.Paths
1111import kotlin.io.path.createDirectories
1212import kotlin.io.path.exists
1313import kotlin.io.path.readText
1414import kotlin.io.path.writeText
1515
16- data class UriItem (
17- val content : String ,
18- val scriptType : ScriptType ,
19- val fileName : String ,
20- val uri : URI , // Real one from Web, not the cached file
21- val contextUri : URI , // Real one from Web, not the cached file
22- val path : Path // Path to local file
23- )
24-
2516class Cache (private val path : Path ) {
2617 fun getOrCreateIdeaProject (digest : String , creator : (Path ) -> Path ): Path {
2718 return directoryCache(path.resolve(" idea_$digest " ), creator)
@@ -46,47 +37,33 @@ class Cache(private val path: Path) {
4637 }
4738 }
4839
49- fun getOrCreateUriItem (uri : URI ): UriItem {
50- val digest = DigestUtils .md5Hex(uri.toString())
51-
52- if (uri.scheme == " file" ) {
53- val content = uri.toURL().readText()
54- val scriptType = ScriptUtils .resolveScriptType(uri) ? : ScriptUtils .resolveScriptType(content)
55- val fileName = ScriptUtils .extractFileName(uri)
56- val contextUri = uri.resolve(" ." )
57- return UriItem (content, scriptType, fileName, uri, contextUri, Paths .get(uri))
58- }
40+ fun getOrCreateUriItem (url : URL , creator : (URL , Path ) -> Content ): Content {
41+ val digest = DigestUtils .md5Hex(url.toString())
5942
60- val directory = path.resolve(" uri_ $digest " ).createDirectories( )
61- val descriptorFile = directory.resolve(" uri .descriptor" )
62- val contentFile = directory.resolve(" uri .content" )
43+ val directory = path.resolve(" url_ $digest " )
44+ val descriptorFile = directory.resolve(" url .descriptor" )
45+ val contentFile = directory.resolve(" url .content" )
6346
6447 if (descriptorFile.exists() && contentFile.exists()) {
6548 // Cache hit
6649 val descriptor = descriptorFile.readText().lines()
67-
68- devMsg(" Descriptor: $descriptor " )
69-
7050 val scriptType = ScriptType .valueOf(descriptor[0 ])
7151 val fileName = descriptor[1 ]
7252 val cachedUri = URI .create(descriptor[2 ])
7353 val contextUri = URI .create(descriptor[3 ])
7454 val content = contentFile.readText()
7555
76- return UriItem (content, scriptType, fileName, cachedUri, contextUri, contentFile)
56+ return Content (content, scriptType, fileName, cachedUri, contextUri, contentFile)
7757 }
7858
79- // Otherwise, resolve web file and cache it...
80- val resolvedUri = ScriptUtils .resolveRedirects(uri.toURL()).toURI()
81- val content = resolvedUri.toURL().readText()
82- val scriptType = ScriptUtils .resolveScriptType(resolvedUri) ? : ScriptUtils .resolveScriptType(content)
83- val fileName = ScriptUtils .extractFileName(resolvedUri)
84- val contextUri = resolvedUri.resolve(" ." )
59+ // Cache miss
60+ val content = creator(url, contentFile)
8561
86- descriptorFile.writeText(" $scriptType \n $fileName \n $resolvedUri \n $contextUri " )
87- contentFile.writeText(content)
62+ directory.createDirectories()
63+ descriptorFile.writeText(" ${content.scriptType} \n ${content.fileName} \n ${content.uri} \n ${content.contextUri} " )
64+ contentFile.writeText(content.text)
8865
89- return UriItem ( content, scriptType, fileName, resolvedUri, contextUri, contentFile)
66+ return content
9067 }
9168
9269 private fun directoryCache (path : Path , creator : (Path ) -> Path ): Path {
0 commit comments