Skip to content

Commit 1dc5b29

Browse files
committed
Option toggle rework process & terminate when project get disposed
1 parent 3d891dd commit 1dc5b29

File tree

13 files changed

+120
-10
lines changed

13 files changed

+120
-10
lines changed

merge-request-integration-core/src/main/kotlin/net/ntworld/mergeRequestIntegrationIde/infrastructure/AbstractApplicationServiceProvider.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import net.ntworld.mergeRequestIntegrationIde.compatibility.IntellijIdeApi
1414
import net.ntworld.mergeRequestIntegrationIde.compatibility.*
1515
import net.ntworld.mergeRequestIntegrationIde.infrastructure.internal.ProviderSettingsImpl
1616
import net.ntworld.mergeRequestIntegrationIde.infrastructure.internal.ServiceBase
17+
import net.ntworld.mergeRequestIntegrationIde.infrastructure.setting.ApplicationSettings
1718
import net.ntworld.mergeRequestIntegrationIde.infrastructure.setting.ApplicationSettingsManager
1819
import net.ntworld.mergeRequestIntegrationIde.infrastructure.setting.ApplicationSettingsManagerImpl
1920
import net.ntworld.mergeRequestIntegrationIde.watcher.WatcherManager
@@ -63,7 +64,7 @@ abstract class AbstractApplicationServiceProvider : ApplicationServiceProvider,
6364

6465
override val intellijIdeApi: IntellijIdeApi = Version201Adapter()
6566

66-
override val settingsManager: ApplicationSettingsManager = ApplicationSettingsManagerImpl()
67+
override val settingsManager: ApplicationSettingsManager = ApplicationSettingsManagerImpl(::onSettingsChanged)
6768

6869
override fun getAllProjectServiceProviders(): List<ProjectServiceProvider> {
6970
return myProjectServiceProviders.toList()
@@ -119,4 +120,10 @@ abstract class AbstractApplicationServiceProvider : ApplicationServiceProvider,
119120
}
120121
return legalGrantedDomains.contains(url.host)
121122
}
123+
124+
private fun onSettingsChanged(old: ApplicationSettings, new: ApplicationSettings) {
125+
getAllProjectServiceProviders().forEach {
126+
it.onApplicationSettingsChanged(old, new)
127+
}
128+
}
122129
}

merge-request-integration-core/src/main/kotlin/net/ntworld/mergeRequestIntegrationIde/infrastructure/AbstractProjectServiceProvider.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,14 @@ abstract class AbstractProjectServiceProvider(
207207

208208
override fun isDoingCodeReview(): Boolean = null !== reviewContextManager.findDoingCodeReviewContext()
209209

210+
override fun onApplicationSettingsChanged(old: ApplicationSettings, new: ApplicationSettings) {
211+
if (!old.enableReworkProcess && new.enableReworkProcess) {
212+
for (provider in providerStorage.registeredProviders) {
213+
reworkManager.createBranchWatcher(provider)
214+
}
215+
}
216+
}
217+
210218
override fun startCodeReview(providerData: ProviderData, mergeRequest: MergeRequest) {
211219
reviewContextManager.setContextToDoingCodeReview(providerData.id, mergeRequest.id)
212220
val reviewContext = reviewContextManager.findDoingCodeReviewContext()

merge-request-integration-core/src/main/kotlin/net/ntworld/mergeRequestIntegrationIde/infrastructure/ProjectServiceProvider.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ interface ProjectServiceProvider {
7070

7171
fun isDoingCodeReview(): Boolean
7272

73+
fun onApplicationSettingsChanged(old: ApplicationSettings, new: ApplicationSettings)
74+
7375
fun notify(message: String)
7476

7577
fun notify(message: String, type: NotificationType)

merge-request-integration-core/src/main/kotlin/net/ntworld/mergeRequestIntegrationIde/infrastructure/notifier/ProjectNotifier.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package net.ntworld.mergeRequestIntegrationIde.infrastructure.notifier
33
import com.intellij.util.messages.Topic
44
import net.ntworld.mergeRequest.ProviderData
55
import net.ntworld.mergeRequestIntegrationIde.infrastructure.ReviewContext
6+
import net.ntworld.mergeRequestIntegrationIde.infrastructure.setting.ApplicationSettings
67

78
interface ProjectNotifier {
89
companion object {

merge-request-integration-core/src/main/kotlin/net/ntworld/mergeRequestIntegrationIde/infrastructure/setting/ApplicationSettings.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ interface ApplicationSettings {
2020

2121
val displayMergeRequestState: Boolean
2222

23+
val enableReworkProcess: Boolean
24+
2325
fun toApiOptions(): ApiOptions {
2426
return ApiOptionsImpl(
2527
enableRequestCache = this.enableRequestCache

merge-request-integration-core/src/main/kotlin/net/ntworld/mergeRequestIntegrationIde/infrastructure/setting/ApplicationSettingsImpl.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ data class ApplicationSettingsImpl(
88
override val checkoutTargetBranch: Boolean,
99
override val maxDiffChangesOpenedAutomatically: Int,
1010
override val displayUpVotesAndDownVotes: Boolean,
11-
override val displayMergeRequestState: Boolean
11+
override val displayMergeRequestState: Boolean,
12+
override val enableReworkProcess: Boolean
1213
) : ApplicationSettings {
1314
companion object {
1415
val DEFAULT = ApplicationSettingsImpl(
@@ -19,7 +20,8 @@ data class ApplicationSettingsImpl(
1920
checkoutTargetBranch = false,
2021
maxDiffChangesOpenedAutomatically = 10,
2122
displayUpVotesAndDownVotes = false,
22-
displayMergeRequestState = true
23+
displayMergeRequestState = true,
24+
enableReworkProcess = true
2325
)
2426
}
2527
}

merge-request-integration-core/src/main/kotlin/net/ntworld/mergeRequestIntegrationIde/infrastructure/setting/ApplicationSettingsManagerImpl.kt

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ package net.ntworld.mergeRequestIntegrationIde.infrastructure.setting
33
import net.ntworld.mergeRequestIntegrationIde.infrastructure.setting.option.*
44
import org.jdom.Element
55

6-
class ApplicationSettingsManagerImpl : ApplicationSettingsManager {
6+
class ApplicationSettingsManagerImpl(
7+
private val changedInvoker: ((ApplicationSettings, ApplicationSettings) -> Unit)
8+
) : ApplicationSettingsManager {
79
private var mySettings: ApplicationSettings = ApplicationSettingsImpl.DEFAULT
810
private val myOptionEnableRequestCache = EnableRequestCacheOption()
911
private val myOptionSaveMRFilterState = SaveMRFilterStateOption()
@@ -13,6 +15,7 @@ class ApplicationSettingsManagerImpl : ApplicationSettingsManager {
1315
private val myOptionMaxDiffChangesOpenedAutomatically = MaxDiffChangesOpenedAutomaticallyOption()
1416
private val myOptionDisplayUpVotesAndDownVotes = DisplayUpVotesAndDownVotesOption()
1517
private val myOptionDisplayMergeRequestState = DisplayMergeRequestStateOption()
18+
private val myOptionEnableReworkProcess = EnableReworkProcessOption()
1619
private val myAllSettingOptions = listOf<SettingOption<*>>(
1720
myOptionEnableRequestCache,
1821
myOptionSaveMRFilterState,
@@ -21,7 +24,8 @@ class ApplicationSettingsManagerImpl : ApplicationSettingsManager {
2124
myOptionCheckoutTargetBranch,
2225
myOptionMaxDiffChangesOpenedAutomatically,
2326
myOptionDisplayUpVotesAndDownVotes,
24-
myOptionDisplayMergeRequestState
27+
myOptionDisplayMergeRequestState,
28+
myOptionEnableReworkProcess
2529
)
2630

2731
val settings: ApplicationSettings
@@ -51,6 +55,9 @@ class ApplicationSettingsManagerImpl : ApplicationSettingsManager {
5155
override val displayMergeRequestState: Boolean
5256
get() = mySettings.displayMergeRequestState
5357

58+
override val enableReworkProcess: Boolean
59+
get() = mySettings.enableReworkProcess
60+
5461
override fun readFrom(elements: List<Element>): ApplicationSettings {
5562
var settings = ApplicationSettingsImpl.DEFAULT
5663
for (item in elements) {
@@ -87,10 +94,13 @@ class ApplicationSettingsManagerImpl : ApplicationSettingsManager {
8794
writeOption(element, myOptionMaxDiffChangesOpenedAutomatically, mySettings.maxDiffChangesOpenedAutomatically)
8895
writeOption(element, myOptionDisplayUpVotesAndDownVotes, mySettings.displayUpVotesAndDownVotes)
8996
writeOption(element, myOptionDisplayMergeRequestState, mySettings.displayMergeRequestState)
97+
writeOption(element, myOptionEnableReworkProcess, mySettings.enableReworkProcess)
9098
}
9199

92100
override fun update(settings: ApplicationSettings) {
101+
val oldSettings = mySettings
93102
mySettings = settings
103+
changedInvoker.invoke(oldSettings, settings)
94104
}
95105

96106
private fun<T> writeOption(root: Element, option: SettingOption<T>, value: T) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package net.ntworld.mergeRequestIntegrationIde.infrastructure.setting.option
2+
3+
import net.ntworld.mergeRequestIntegrationIde.infrastructure.setting.ApplicationSettingsImpl
4+
5+
class EnableReworkProcessOption : BooleanOption() {
6+
override val name: String = "rework:enabled"
7+
8+
override fun getOptionValueFromSettings(settings: ApplicationSettingsImpl): Boolean {
9+
return settings.enableReworkProcess
10+
}
11+
12+
override fun copySettings(settings: ApplicationSettingsImpl, value: Boolean): ApplicationSettingsImpl {
13+
return settings.copy(enableReworkProcess = value)
14+
}
15+
}

merge-request-integration-core/src/main/kotlin/net/ntworld/mergeRequestIntegrationIde/rework/internal/BranchWatcherImpl.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,14 @@ class BranchWatcherImpl(
2222
override val interval: Long = 3000
2323

2424
override fun canExecute(): Boolean {
25-
return true
25+
return !projectServiceProvider.project.isDisposed
2626
}
2727

2828
override fun shouldTerminate(): Boolean {
29-
return myTerminate || projectServiceProvider.isDoingCodeReview()
29+
return myTerminate ||
30+
projectServiceProvider.project.isDisposed ||
31+
projectServiceProvider.isDoingCodeReview() ||
32+
!projectServiceProvider.applicationSettings.enableReworkProcess
3033
}
3134

3235
override fun execute() {

merge-request-integration-core/src/main/kotlin/net/ntworld/mergeRequestIntegrationIde/rework/internal/ReworkManagerImpl.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ internal class ReworkManagerImpl(
4848
}
4949

5050
override fun createBranchWatcher(providerData: ProviderData) {
51+
if (!projectServiceProvider.applicationSettings.enableReworkProcess) {
52+
return
53+
}
54+
5155
if (providerData.status != ProviderStatus.ACTIVE || myBranchWatchers.containsKey(providerData.id)) {
5256
return
5357
}
@@ -74,6 +78,10 @@ internal class ReworkManagerImpl(
7478
}
7579

7680
override fun requestCreateReworkWatcher(providers: List<ProviderData>, branchName: String) {
81+
if (!projectServiceProvider.applicationSettings.enableReworkProcess) {
82+
return
83+
}
84+
7785
val pair = findProviderData(providers, branchName)
7886
val providerData = pair.first
7987
val repository = pair.second
@@ -83,6 +91,10 @@ internal class ReworkManagerImpl(
8391
}
8492

8593
override fun requestCreateReworkWatcher(providerData: ProviderData, repository: GitRepository, branchName: String) {
94+
if (!projectServiceProvider.applicationSettings.enableReworkProcess) {
95+
return
96+
}
97+
8698
val key = ReworkWatcher.keyOf(providerData, branchName)
8799
if (myReworkWatchers.contains(key)) {
88100
return

0 commit comments

Comments
 (0)