Commit fcd43f0f authored by Semyon Proshev's avatar Semyon Proshev
Browse files

No need to listen to roots-changed events....

No need to listen to roots-changed events. PyPackageManagerImpl.MySdkRootWatcher refreshes packages cache (DS-49)
parent 2fdc4b3c
Showing with 12 additions and 23 deletions
+12 -23
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.jetbrains.python.packaging.ui
import com.intellij.ProjectTopics
import com.intellij.openapi.Disposable
import com.intellij.openapi.fileEditor.FileEditorManager
import com.intellij.openapi.fileEditor.FileEditorManagerEvent
......@@ -9,8 +8,6 @@ import com.intellij.openapi.fileEditor.FileEditorManagerListener
import com.intellij.openapi.module.ModuleUtilCore
import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.roots.ModuleRootEvent
import com.intellij.openapi.roots.ModuleRootListener
import com.intellij.openapi.ui.PackagesToolWindowTab
import com.intellij.openapi.ui.PackagesToolWindowTabFactory
import com.intellij.openapi.vfs.VirtualFile
......@@ -35,7 +32,7 @@ class PyPackagesToolWindowTabFactory : PackagesToolWindowTabFactory {
override fun createContent(project: Project, parentDisposable: Disposable): PackagesToolWindowTab {
val panel = PyInstalledPackagesPanel(project, PackagesNotificationPanel())
updateForCurrentFile(project, panel, true)
updateForCurrentFile(project, panel)
val connection = project.messageBus.connect(parentDisposable)
......@@ -43,15 +40,7 @@ class PyPackagesToolWindowTabFactory : PackagesToolWindowTabFactory {
connection.subscribe(
FileEditorManagerListener.FILE_EDITOR_MANAGER,
object : FileEditorManagerListener {
override fun selectionChanged(event: FileEditorManagerEvent) = updateForFile(project, panel, event.newFile, false)
}
)
// sdk has been possibly changed
connection.subscribe(
ProjectTopics.PROJECT_ROOTS,
object : ModuleRootListener {
override fun rootsChanged(event: ModuleRootEvent) = updateForCurrentFile(project, panel, true)
override fun selectionChanged(event: FileEditorManagerEvent) = updateForFile(project, panel, event.newFile)
}
)
......@@ -59,30 +48,30 @@ class PyPackagesToolWindowTabFactory : PackagesToolWindowTabFactory {
connection.subscribe(
PyPackageManager.PACKAGE_MANAGER_TOPIC,
PyPackageManager.Listener {
// skip packages that have been refreshed for another sdk
if (currentSdk == it) updateForSdk(project, panel, it, false)
updateForCurrentFile(project, panel)
}
)
return PackagesToolWindowTab("Python", panel)
}
private fun updateForCurrentFile(project: Project, panel: PyInstalledPackagesPanel, force: Boolean) {
updateForFile(project, panel, FileEditorManager.getInstance(project).selectedFiles.firstOrNull(), force)
private fun updateForCurrentFile(project: Project, panel: PyInstalledPackagesPanel) {
updateForFile(project, panel, FileEditorManager.getInstance(project).selectedFiles.firstOrNull())
}
private fun updateForFile(project: Project, panel: PyInstalledPackagesPanel, file: VirtualFile?, force: Boolean) {
updateForSdk(project, panel, file?.let { PythonSdkType.findPythonSdk(ModuleUtilCore.findModuleForFile(it, project)) }, force)
private fun updateForFile(project: Project, panel: PyInstalledPackagesPanel, file: VirtualFile?) {
updateForSdk(project, panel, file?.let { PythonSdkType.findPythonSdk(ModuleUtilCore.findModuleForFile(it, project)) })
}
private fun updateForSdk(project: Project, panel: PyInstalledPackagesPanel, sdk: Sdk?, force: Boolean) {
val latestPackages = sdk?.let { PyPackageManagers.getInstance().forSdk(it).packages }
private fun updateForSdk(project: Project, panel: PyInstalledPackagesPanel, sdk: Sdk?) {
val packageManagers = PyPackageManagers.getInstance()
if (force || currentSdk != sdk || currentPackages != latestPackages) {
val latestPackages = sdk?.let { packageManagers.forSdk(it).packages }
if (currentSdk != sdk || currentPackages != latestPackages) {
currentSdk = sdk
currentPackages = latestPackages
panel.updatePackages(sdk?.let { PyPackageManagers.getInstance().getManagementService(project, it) })
panel.updatePackages(sdk?.let { packageManagers.getManagementService(project, it) })
panel.updateNotifications(sdk)
}
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment