From 92d9d5ee20bfc66e69635d44e3b3db326e7ec48e Mon Sep 17 00:00:00 2001 From: Carl-Robert Linnupuu Date: Wed, 17 Apr 2024 16:33:04 +0300 Subject: [PATCH] fix: file watcher disposable by making it project-level service --- .../codegpt/CodeGPTProjectActivity.kt | 14 ++++++-------- .../ee/carlrobert/codegpt/FileWatcher.kt | 18 +++++++++--------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/main/kotlin/ee/carlrobert/codegpt/CodeGPTProjectActivity.kt b/src/main/kotlin/ee/carlrobert/codegpt/CodeGPTProjectActivity.kt index 13317571..736ae2c9 100644 --- a/src/main/kotlin/ee/carlrobert/codegpt/CodeGPTProjectActivity.kt +++ b/src/main/kotlin/ee/carlrobert/codegpt/CodeGPTProjectActivity.kt @@ -3,9 +3,9 @@ package ee.carlrobert.codegpt import com.intellij.notification.NotificationAction import com.intellij.notification.NotificationType import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.components.service import com.intellij.openapi.project.Project import com.intellij.openapi.startup.ProjectActivity -import com.intellij.openapi.util.Disposer import ee.carlrobert.codegpt.actions.editor.EditorActionsUtil import ee.carlrobert.codegpt.completions.you.YouUserManager import ee.carlrobert.codegpt.completions.you.auth.AuthenticationHandler @@ -34,14 +34,12 @@ class CodeGPTProjectActivity : ProjectActivity { if (!ApplicationManager.getApplication().isUnitTestMode && ConfigurationSettings.getCurrentState().isCheckForNewScreenshots ) { - val pathToWatch = Paths.get(System.getProperty("user.home"), "Desktop") - val fileWatcher = FileWatcher(pathToWatch) - fileWatcher.watch { - if (listOf("jpg", "jpeg", "png").contains(it.extension)) { - showImageAttachmentNotification(project, it.absolutePath) + project.service() + .watch(Paths.get(System.getProperty("user.home"), "Desktop").toFile()) { + if (listOf("jpg", "jpeg", "png").contains(it.extension)) { + showImageAttachmentNotification(project, it.absolutePath) + } } - } - Disposer.register(project, fileWatcher) } } diff --git a/src/main/kotlin/ee/carlrobert/codegpt/FileWatcher.kt b/src/main/kotlin/ee/carlrobert/codegpt/FileWatcher.kt index d1c20669..8d7a9123 100644 --- a/src/main/kotlin/ee/carlrobert/codegpt/FileWatcher.kt +++ b/src/main/kotlin/ee/carlrobert/codegpt/FileWatcher.kt @@ -1,29 +1,29 @@ package ee.carlrobert.codegpt import com.intellij.openapi.Disposable +import com.intellij.openapi.components.Service import org.apache.commons.io.monitor.FileAlterationListenerAdaptor import org.apache.commons.io.monitor.FileAlterationMonitor import org.apache.commons.io.monitor.FileAlterationObserver import java.io.File -import java.nio.file.Path -class FileWatcher(private val pathToWatch: Path) : Disposable { +@Service(Service.Level.PROJECT) +class FileWatcher : Disposable { - private val fileMonitor = - FileAlterationMonitor(500, FileAlterationObserver(pathToWatch.toFile())) + private var fileMonitor: FileAlterationMonitor? = null - fun watch(onFileCreated: (File) -> Unit) { - val observer = FileAlterationObserver(pathToWatch.toFile()) + fun watch(pathToWatch: File, onFileCreated: (File) -> Unit) { + val observer = FileAlterationObserver(pathToWatch) observer.addListener(object : FileAlterationListenerAdaptor() { override fun onFileCreate(file: File) { onFileCreated(file) } }) - fileMonitor.addObserver(observer) - fileMonitor.start() + fileMonitor = FileAlterationMonitor(500, observer) + fileMonitor?.start() } override fun dispose() { - fileMonitor.stop() + fileMonitor?.stop() } } \ No newline at end of file