feat: streams overload for XmlFileHolder

This commit is contained in:
oSumAtrIX 2022-07-02 17:44:08 +02:00
parent c8eedac4d9
commit 6f72c4c4c0
No known key found for this signature in database
GPG Key ID: A9B3094ACDB604B4

View File

@ -4,6 +4,8 @@ import app.revanced.patcher.data.Data
import org.w3c.dom.Document import org.w3c.dom.Document
import java.io.Closeable import java.io.Closeable
import java.io.File import java.io.File
import java.io.InputStream
import java.io.OutputStream
import javax.xml.parsers.DocumentBuilderFactory import javax.xml.parsers.DocumentBuilderFactory
import javax.xml.transform.TransformerFactory import javax.xml.transform.TransformerFactory
import javax.xml.transform.dom.DOMSource import javax.xml.transform.dom.DOMSource
@ -17,14 +19,20 @@ class ResourceData(private val resourceCacheDirectory: File) : Data, Iterable<Fi
override fun iterator() = resourceCacheDirectory.walkTopDown().iterator() override fun iterator() = resourceCacheDirectory.walkTopDown().iterator()
inner class XmlFileHolder { inner class XmlFileHolder {
operator fun get(inputStream: InputStream, outputStream: OutputStream) =
DomFileEditor(inputStream, outputStream)
operator fun get(path: String) = DomFileEditor(this@ResourceData[path]) operator fun get(path: String) = DomFileEditor(this@ResourceData[path])
} }
} }
class DomFileEditor internal constructor(private val domFile: File) : Closeable { class DomFileEditor internal constructor(inputStream: InputStream, private val outputStream: OutputStream) : Closeable {
val file: Document = DocumentBuilderFactory.newInstance().newDocumentBuilder() constructor(file: File) : this(file.inputStream(), file.outputStream())
.parse(domFile).also(Document::normalize)
val file: Document =
DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(inputStream).also(Document::normalize)
override fun close() =
TransformerFactory.newInstance().newTransformer().transform(DOMSource(file), StreamResult(outputStream))
override fun close() = TransformerFactory.newInstance().newTransformer()
.transform(DOMSource(file), StreamResult(domFile.outputStream()))
} }