|
18 | 18 | package com.itsaky.androidide.utils
|
19 | 19 |
|
20 | 20 | import java.io.File
|
| 21 | +import java.io.PrintWriter |
21 | 22 | import java.io.StringReader
|
22 |
| -import java.util.* |
| 23 | +import java.util.Properties |
23 | 24 |
|
24 |
| -class ListingFileRedirect { |
25 |
| - |
26 |
| - companion object { |
27 |
| - /** Redirect file will have this marker as the first line as comment. */ |
28 |
| - private const val REDIRECT_MARKER = "#- File Locator -" |
29 |
| - |
30 |
| - /** Property name in a [Properties] for the metadata file location. */ |
31 |
| - private const val REDIRECT_PROPERTY_NAME = "listingFile" |
32 |
| - |
33 |
| - @JvmStatic |
34 |
| - fun maybeExtractRedirectedFile(redirectFile: File): File? { |
35 |
| - val fileContent = redirectFile.readText() |
36 |
| - return if (fileContent.startsWith(REDIRECT_MARKER)) { |
37 |
| - val fileLocator = Properties().also { it.load(StringReader(fileContent)) } |
38 |
| - val file = File(fileLocator.getProperty(REDIRECT_PROPERTY_NAME)) |
39 |
| - if (!file.isAbsolute) redirectFile.parentFile!!.resolve(file) else file |
40 |
| - } else null |
| 25 | +object ListingFileRedirect { |
| 26 | + |
| 27 | + /** |
| 28 | + * Redirect file will have this marker as the first line as comment. |
| 29 | + */ |
| 30 | + const val REDIRECT_MARKER = "#- File Locator -" |
| 31 | + |
| 32 | + /** |
| 33 | + * Property name in a [Properties] for the metadata file location. |
| 34 | + */ |
| 35 | + const val REDIRECT_PROPERTY_NAME = "listingFile" |
| 36 | + |
| 37 | + /** |
| 38 | + * Redirect file name used when for the artifact. |
| 39 | + */ |
| 40 | + const val REDIRECT_FILE_NAME = "redirect.txt" |
| 41 | + |
| 42 | + fun writeRedirect(listingFile: File, into: File) { |
| 43 | + val path = try { |
| 44 | + into.parentFile!!.toPath().relativize(listingFile.toPath()).toString() |
| 45 | + } catch(ex: IllegalArgumentException) { |
| 46 | + listingFile.canonicalPath |
41 | 47 | }
|
| 48 | + PrintWriter(into).use { |
| 49 | + it.println(REDIRECT_MARKER) |
| 50 | + it.println("${REDIRECT_PROPERTY_NAME}=${path.replace("\\", "/")}") |
| 51 | + } |
| 52 | + } |
| 53 | + |
| 54 | + private fun maybeExtractRedirectedFile(redirectFile: File, redirectFileContent: String? = null): File? { |
| 55 | + val fileContent = redirectFileContent ?: redirectFile.readText() |
| 56 | + return if (fileContent.startsWith(REDIRECT_MARKER)) { |
| 57 | + val fileLocator = Properties().also { |
| 58 | + it.load(StringReader(fileContent)) |
| 59 | + } |
| 60 | + val file = File(fileLocator.getProperty(REDIRECT_PROPERTY_NAME)) |
| 61 | + if(!file.isAbsolute) |
| 62 | + redirectFile.parentFile?.resolve(file) |
| 63 | + else |
| 64 | + file |
| 65 | + } else null |
42 | 66 | }
|
| 67 | + |
| 68 | + @JvmStatic |
| 69 | + fun getListingFile(inputFile: File) = |
| 70 | + maybeExtractRedirectedFile(inputFile) ?: inputFile |
43 | 71 | }
|
| 72 | + |
0 commit comments