diff options
| author | Kyren223 <ulmliad223@gmail.com> | 2024-02-13 16:41:48 +0200 |
|---|---|---|
| committer | Kyren223 <ulmliad223@gmail.com> | 2024-02-13 16:41:48 +0200 |
| commit | f5462d7b4b50fe05b98cee3274c26a9b9f52dd93 (patch) | |
| tree | 9537a2083571c1d14b4141b04c7c24e912c11437 /src/main/kotlin/me/kyren223/harpoonforjb/HarpoonState.kt | |
| parent | 6f6bd6a028f48a1685370049406986425f889a50 (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.kt | 69 |
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 |
