summaryrefslogtreecommitdiff
path: root/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonState.kt
diff options
context:
space:
mode:
authorKyren223 <ulmliad223@gmail.com>2024-02-13 16:41:48 +0200
committerKyren223 <ulmliad223@gmail.com>2024-02-13 16:41:48 +0200
commitf5462d7b4b50fe05b98cee3274c26a9b9f52dd93 (patch)
tree9537a2083571c1d14b4141b04c7c24e912c11437 /src/main/kotlin/me/kyren223/harpoonforjb/HarpoonState.kt
parent6f6bd6a028f48a1685370049406986425f889a50 (diff)
Registered actions, implemented saving/loading functionality, added and tested append functionality and action
Diffstat (limited to 'src/main/kotlin/me/kyren223/harpoonforjb/HarpoonState.kt')
-rw-r--r--src/main/kotlin/me/kyren223/harpoonforjb/HarpoonState.kt69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonState.kt b/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonState.kt
new file mode 100644
index 0000000..75db721
--- /dev/null
+++ b/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonState.kt
@@ -0,0 +1,69 @@
+package me.kyren223.harpoonforjb
+
+import com.intellij.ide.util.PropertiesComponent
+import com.intellij.openapi.project.Project
+import com.intellij.openapi.vfs.LocalFileSystem
+import com.intellij.openapi.vfs.VirtualFile
+
+object HarpoonState {
+ private var previousIndex: Int? = null
+ private var currentIndex: Int? = null
+ private var nextIndex: Int? = null
+
+ private var projectFiles: MutableMap<String, MutableList<VirtualFile>> = mutableMapOf()
+ private val HARPOON_LIST_KEY = "HarpoonList"
+
+ fun setFile(project: Project, index: Int, file: VirtualFile) {
+ if (index < 0) return
+ loadProject(project)
+ val files = projectFiles[project.name]
+ if (files!!.size <= index) return
+ files[index] = file
+ saveProject(project)
+ }
+
+ fun appendFile(project: Project, file: VirtualFile) {
+ if (!file.isValid) return
+ loadProject(project)
+ val files = projectFiles[project.name]
+ files!!.add(file)
+ saveProject(project)
+ }
+
+ fun selectFile(project: Project, index: Int): VirtualFile? {
+ if (index < 0) return null
+ loadProject(project)
+ val files = projectFiles[project.name]
+ if (files!!.size <= index) return null
+ return files[index]
+ }
+
+ private fun loadProject(project: Project) {
+ if (project.name in projectFiles) return
+ val properties = PropertiesComponent.getInstance(project)
+ val list = properties.getList(HARPOON_LIST_KEY)
+ if (list == null) {
+ projectFiles[project.name] = mutableListOf()
+ return
+ }
+ val fs = LocalFileSystem.getInstance()
+ val files = list.stream()
+ .map { fs.findFileByPath(it) }
+ .toList()
+ .filterNotNull()
+ .filter { it.isValid }
+ .toMutableList()
+ 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()
+ properties.setList(HARPOON_LIST_KEY, stringList)
+ }
+} \ No newline at end of file