@@ -27,7 +27,7 @@ internal class SubscriptionInstallConfigUseCase(
2727 private val subscriptionFetcher : AndroidSubscriptionFetcher ,
2828) {
2929 suspend fun install (config : SubscriptionInstallConfig ): ProxyServerListSubscriptionUpdateResult {
30- val group = stateStore.addSubscriptionGroup (config)
30+ val group = stateStore.prepareSubscriptionInstallGroup (config)
3131 val result = updateSubscriptions(
3232 groups = listOf (group),
3333 subscriptionFetcher = subscriptionFetcher,
@@ -101,19 +101,40 @@ private fun Url.toRawHttpsSubscriptionInstallConfigOrNull(rawValue: String): Sub
101101 )
102102}
103103
104- private fun AndroidAppStateStore.addSubscriptionGroup (config : SubscriptionInstallConfig ): SubscriptionGroupState {
104+ private fun AndroidAppStateStore.prepareSubscriptionInstallGroup (
105+ config : SubscriptionInstallConfig ,
106+ ): SubscriptionGroupState {
105107 var savedGroup: SubscriptionGroupState ? = null
106108 update { state ->
107- val group = state.newSubscriptionGroup(config)
109+ val reusableGroup = state.reusableDefaultSubscriptionGroup()
110+ val group = reusableGroup?.copy(
111+ url = config.url,
112+ userAgent = config.userAgent,
113+ ) ? : state.newSubscriptionGroup(config)
108114 savedGroup = group
109- state.copy(
110- subscriptionGroups = state.subscriptionGroups + group,
111- nextSubscriptionGroupId = state.nextSubscriptionGroupId + 1 ,
112- )
115+ if (reusableGroup == null ) {
116+ state.copy(
117+ subscriptionGroups = state.subscriptionGroups + group,
118+ nextSubscriptionGroupId = state.nextSubscriptionGroupId + 1 ,
119+ )
120+ } else {
121+ state.copy(
122+ subscriptionGroups = state.subscriptionGroups.map { existingGroup ->
123+ if (existingGroup.id == group.id) group else existingGroup
124+ },
125+ )
126+ }
113127 }
114128 return checkNotNull(savedGroup)
115129}
116130
131+ private fun AppState.reusableDefaultSubscriptionGroup (): SubscriptionGroupState ? {
132+ return subscriptionGroups.firstOrNull { group -> group.id == DefaultSubscriptionGroupId }
133+ ?.takeIf {
134+ proxyServers.none { server -> server.groupId == DefaultSubscriptionGroupId }
135+ }
136+ }
137+
117138private fun AppState.newSubscriptionGroup (config : SubscriptionInstallConfig ): SubscriptionGroupState {
118139 return SubscriptionGroupState (
119140 id = nextSubscriptionGroupId,
0 commit comments