diff --git a/platform/settings-sync-core/resources/messages/SettingsSyncBundle.properties b/platform/settings-sync-core/resources/messages/SettingsSyncBundle.properties index dd481b834db3..36a780a346b5 100644 --- a/platform/settings-sync-core/resources/messages/SettingsSyncBundle.properties +++ b/platform/settings-sync-core/resources/messages/SettingsSyncBundle.properties @@ -75,6 +75,9 @@ status.action.settings.sync.failed=Failed # logout.dialog.button=Log Out plugins.bundled=Bundled plugins subcategory.config.link=Configure +#temporary message +settings.jba.plugin.required.text=Please download JetBrains "Backup and Sync" plugin from the Plugins page +settings.jba.plugin.required.title=Plugin download required settings.category.ui.editor.font=Editor font settings.sync.info.message=Sync UI, Code and System settings, Keymaps, Plugins, and Tools. diff --git a/platform/settings-sync-core/src/com/intellij/settingsSync/core/communicator/RemoteCommunicatorHolder.kt b/platform/settings-sync-core/src/com/intellij/settingsSync/core/communicator/RemoteCommunicatorHolder.kt index 3a146966deb8..79ce64523dd6 100644 --- a/platform/settings-sync-core/src/com/intellij/settingsSync/core/communicator/RemoteCommunicatorHolder.kt +++ b/platform/settings-sync-core/src/com/intellij/settingsSync/core/communicator/RemoteCommunicatorHolder.kt @@ -1,11 +1,19 @@ package com.intellij.settingsSync.core.communicator +import com.intellij.icons.AllIcons +import com.intellij.openapi.application.EDT import com.intellij.openapi.diagnostic.logger +import com.intellij.openapi.ui.Messages +import com.intellij.settingsSync.core.SettingsSyncBundle import com.intellij.settingsSync.core.SettingsSyncEventListener import com.intellij.settingsSync.core.SettingsSyncLocalSettings import com.intellij.settingsSync.core.SettingsSyncRemoteCommunicator +import com.intellij.settingsSync.core.auth.SettingsSyncAuthService import com.intellij.util.resettableLazy +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext import org.jetbrains.annotations.ApiStatus +import java.awt.Component @ApiStatus.Internal object RemoteCommunicatorHolder : SettingsSyncEventListener { @@ -69,10 +77,18 @@ object RemoteCommunicatorHolder : SettingsSyncEventListener { } fun getAvailableProviders(): List { - val extensionList = SettingsSyncCommunicatorProvider.PROVIDER_EP.extensionList + val extensionList = arrayListOf() + extensionList.addAll(SettingsSyncCommunicatorProvider.PROVIDER_EP.extensionList) + if (extensionList.find { it.providerCode == DEFAULT_PROVIDER_CODE } == null) { + extensionList.add(DummyDefaultCommunicatorProvider) + } return extensionList } + fun getExternalProviders(): List { + return getAvailableProviders().filter { it.providerCode != DEFAULT_PROVIDER_CODE } + } + fun getDefaultProvider(): SettingsSyncCommunicatorProvider? { return getProvider(DEFAULT_PROVIDER_CODE) } @@ -89,4 +105,37 @@ object RemoteCommunicatorHolder : SettingsSyncEventListener { val providerCode = SettingsSyncLocalSettings.getInstance().providerCode ?: return null return getProvider(providerCode) } + + private object DummyAuthService: SettingsSyncAuthService { + override val providerCode = DEFAULT_PROVIDER_CODE + override val providerName = "JetBrains" + override val icon = AllIcons.Ultimate.IdeaUltimatePromo + + override suspend fun login(parentComponent: Component?): SettingsSyncUserData? { + return withContext(Dispatchers.EDT) { + if (parentComponent != null) { + Messages.showInfoMessage(parentComponent, SettingsSyncBundle.message("settings.jba.plugin.required.text"), + SettingsSyncBundle.message("settings.jba.plugin.required.title")) + } else { + Messages.showInfoMessage(SettingsSyncBundle.message("settings.jba.plugin.required.text"), + SettingsSyncBundle.message("settings.jba.plugin.required.title")) + } + null + } + } + + override fun getUserData(userId: String): SettingsSyncUserData? = null + override fun getAvailableUserAccounts(): List = emptyList() + } + + private object DummyDefaultCommunicatorProvider : SettingsSyncCommunicatorProvider { + override val providerCode: String + get() = DEFAULT_PROVIDER_CODE + override val authService = DummyAuthService + + override fun createCommunicator(userId: String): SettingsSyncRemoteCommunicator? { + return null + } + + } } \ No newline at end of file diff --git a/platform/settings-sync-core/src/com/intellij/settingsSync/core/config/SettingsSyncConfigurable.kt b/platform/settings-sync-core/src/com/intellij/settingsSync/core/config/SettingsSyncConfigurable.kt index ef86dada2e33..f11f271c2a00 100644 --- a/platform/settings-sync-core/src/com/intellij/settingsSync/core/config/SettingsSyncConfigurable.kt +++ b/platform/settings-sync-core/src/com/intellij/settingsSync/core/config/SettingsSyncConfigurable.kt @@ -59,7 +59,7 @@ internal class SettingsSyncConfigurable(private val coroutineScope: CoroutineSco private val wasUsedBefore = AtomicBooleanProperty(SettingsSyncLocalSettings.getInstance().userId != null) private val userAccountsList = arrayListOf() private val syncPanelHolder = SettingsSyncPanelHolder() - private val hasMultipleProviders = AtomicBooleanProperty(RemoteCommunicatorHolder.getAvailableProviders().size > 1) + private val hasMultipleProviders = AtomicBooleanProperty(RemoteCommunicatorHolder.getExternalProviders().isNotEmpty()) init { syncEnabler.addListener(this)