diff options
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 |
