summaryrefslogtreecommitdiff
path: root/src/main/kotlin/me/kyren223/trident/TridentState.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/me/kyren223/trident/TridentState.kt')
-rw-r--r--src/main/kotlin/me/kyren223/trident/TridentState.kt113
1 files changed, 87 insertions, 26 deletions
diff --git a/src/main/kotlin/me/kyren223/trident/TridentState.kt b/src/main/kotlin/me/kyren223/trident/TridentState.kt
index 57a47b8..1163789 100644
--- a/src/main/kotlin/me/kyren223/trident/TridentState.kt
+++ b/src/main/kotlin/me/kyren223/trident/TridentState.kt
@@ -8,10 +8,14 @@ import com.intellij.openapi.vfs.VirtualFile
object TridentState {
private var projectFiles: MutableMap<String, MutableList<VirtualFile>> = mutableMapOf()
+ private var pathMappings: MutableMap<String, MutableMap<String, String>> = mutableMapOf()
private const val TRIDENT_LIST_KEY = "TridentList"
- private var quickMenu: TridentQuickMenu? = null
+ private const val PATH_MAPPINGS_LIST_KEY = "PathMappings"
+ private var quickMenu: QuickMenu? = null
var quickMenuSelectedIndex: Int? = null
- var quickMenuContent: String? = ""
+ var quickMenuContent: String = ""
+ private var pathMappingsMenu: PathMappingsMenu? = null
+ var pathMappingsContent: String = ""
fun appendFile(project: Project, file: VirtualFile) {
if (!file.isValid) return
@@ -33,30 +37,49 @@ object TridentState {
if (project.name in projectFiles) return
val properties = PropertiesComponent.getInstance(project)
+ val pathMappingsList = properties.getList(PATH_MAPPINGS_LIST_KEY)
+ var map = mutableMapOf<String, String>()
+ if (pathMappingsList == null) {
+ map["..."] = project.basePath!!
+ } else {
+ for (entry in pathMappingsList) {
+ val split = entry.split("=")
+ if (split.size != 2) continue
+ map[split[0]] = split[1]
+ }
+ }
+ this.pathMappings[project.name] = map
+
val list = properties.getList(TRIDENT_LIST_KEY)
if (list == null) {
projectFiles[project.name] = mutableListOf()
- return
- }
- val fs = LocalFileSystem.getInstance()
- val files = list.stream()
+ } else {
+ val fs = LocalFileSystem.getInstance()
+ val files = list.stream()
.map { fs.findFileByPath(it) }
.toList()
.filterNotNull()
.filter { it.isValid }
.toMutableList()
- projectFiles[project.name] = files
+ projectFiles[project.name] = files
+ }
}
private fun saveProject(project: Project) {
if (project.name !in projectFiles) return
val files = projectFiles[project.name]
val properties = PropertiesComponent.getInstance(project)
+
val stringList = files!!.stream()
- .filter { it.isValid }
- .map { it.path }
- .toList()
+ .filter { it.isValid }
+ .map { it.path }
+ .toList()
properties.setList(TRIDENT_LIST_KEY, stringList)
+
+ val pathMappingsString = pathMappings[project.name]!!.entries
+ .joinToString("\n") { "${it.key}=${it.value}" }
+ .split("\n")
+ properties.setList(PATH_MAPPINGS_LIST_KEY, pathMappingsString)
}
fun getIndexOfFile(project: Project, data: VirtualFile?): Int {
@@ -79,11 +102,11 @@ object TridentState {
loadProject(project)
val content = getProjectContent(project)
- quickMenu = TridentQuickMenu(content)
+ quickMenu = QuickMenu(content)
val result = quickMenu!!.showAndGet()
- if (quickMenuContent != null && content != quickMenuContent) {
- retrieveProjectFiles(project, quickMenuContent!!)
+ if (content != quickMenuContent) {
+ retrieveProjectFiles(project, quickMenuContent)
saveProject(project)
}
@@ -100,25 +123,63 @@ object TridentState {
}
private fun getProjectContent(project: Project): String {
- val content = projectFiles[project.name]!!
- .joinToString("\n") { it.path }
- .replace(project.basePath!!, "...")
- .trim()
+ loadProject(project)
+ val map = pathMappings[project.name] ?: throw IllegalStateException("Path mappings not found")
+ println("map: $map")
+ var content = projectFiles[project.name]!!
+ .joinToString("\n") { it.path }
+ .trim()
+ println("content: $content")
+ for ((key, value) in map) {
+ println("key: $key | value: $value")
+ content = content.replace(value, key)
+ }
+ println("content: $content")
return content
}
private fun retrieveProjectFiles(project: Project, content: String) {
loadProject(project)
val files = content
- .split("\n")
- .asSequence()
- .map { it.trim() }
- .map { it.replace("...", project.basePath!!) }
- .filter { it.isNotBlank() }
- .map { LocalFileSystem.getInstance().findFileByPath(it) }
- .filterNotNull()
- .filter { it.isValid }
- .toMutableList()
+ .split("\n")
+ .asSequence()
+ .map { it.trim() }
+ .map { line ->
+ pathMappings[project.name]!!.entries.fold(line) { acc, (key, value) ->
+ acc.replace(key, value)
+ }
+ }
+// .map {
+// pathMappings[project.name]!!.entries.forEach { (key, value) -> it.replace(key, value) }
+// it
+// }
+ .filter { it.isNotBlank() }
+ .map { LocalFileSystem.getInstance().findFileByPath(it) }
+ .filterNotNull()
+ .filter { it.isValid }
+ .toMutableList()
projectFiles[project.name] = files
}
+
+ fun togglePathMappingsMenu(project: Project) {
+ if (pathMappingsMenu != null && pathMappingsMenu!!.isShowing) {
+ pathMappingsMenu!!.doCancelAction()
+ return
+ }
+
+ loadProject(project)
+ val content = pathMappings[project.name]!!.entries
+ .joinToString("\n") { "${it.key}=${it.value}" }
+ pathMappingsMenu = PathMappingsMenu(content)
+ pathMappingsMenu!!.showAndGet()
+
+ if (content != pathMappingsContent) {
+ pathMappingsContent.split("\n").forEach {
+ val split = it.split("=")
+ if (split.size != 2) return@forEach
+ this.pathMappings[project.name]!![split[0]] = split[1]
+ }
+ saveProject(project)
+ }
+ }
} \ No newline at end of file