diff --git a/Localization/Localizations/Localizable.xcstrings b/Localization/Localizations/Localizable.xcstrings index 74cd59c..d840567 100644 --- a/Localization/Localizations/Localizable.xcstrings +++ b/Localization/Localizations/Localizable.xcstrings @@ -6522,13 +6522,12 @@ } } }, - "Rule name already exists." : { - "extractionState" : "stale", + "Rule name already exists" : { "localizations" : { "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ルール名はすでに存在します" + "value" : "ルール名はすでに存在します\n" } }, "zh-Hans" : { @@ -6546,15 +6545,11 @@ } }, "Rule name cannot be empty" : { - - }, - "Rule name cannot be empty." : { - "extractionState" : "stale", "localizations" : { "ja" : { "stringUnit" : { "state" : "translated", - "value" : "ルール名は空にできません" + "value" : "ルール名は空欄にできません" } }, "zh-Hans" : { diff --git a/qBitControl/Models/RSSFeed.swift b/qBitControl/Models/RSSFeed.swift index f3bb9a7..e624956 100644 --- a/qBitControl/Models/RSSFeed.swift +++ b/qBitControl/Models/RSSFeed.swift @@ -4,7 +4,7 @@ import Foundation struct RSSFeed: Decodable, Identifiable { - var id: UUID { UUID() } + var id: String { url ?? UUID().uuidString } let url: String? let uid: String? let isLoading: Bool? diff --git a/qBitControl/Models/RSSRule.swift b/qBitControl/Models/RSSRule.swift index 20183e0..c6c5716 100644 --- a/qBitControl/Models/RSSRule.swift +++ b/qBitControl/Models/RSSRule.swift @@ -71,6 +71,12 @@ struct RSSRule: Codable { } class RSSRuleModel: ObservableObject, Identifiable { + struct RSSMatchItem: Identifiable { + let id = UUID() + var type: String + var title: String + } + let id = UUID() var title: String = "" @Published var rule: RSSRule @@ -82,6 +88,10 @@ class RSSRuleModel: ObservableObject, Identifiable { self.rule = rule } + static func defauleAddRule() -> RSSRuleModel { + RSSRuleModel(title: "", rule: .defaultAdd) + } + func getArticlesMatching() { guard !isLoading else { return } isLoading = true @@ -97,9 +107,3 @@ class RSSRuleModel: ObservableObject, Identifiable { } } } - -struct RSSMatchItem: Identifiable { - let id = UUID() - var type: String - var title: String -} diff --git a/qBitControl/ViewModels/RSSView/RSSRulesViewModel.swift b/qBitControl/ViewModels/RSSView/RSSRulesViewModel.swift index 29cf61b..45f4ffd 100644 --- a/qBitControl/ViewModels/RSSView/RSSRulesViewModel.swift +++ b/qBitControl/ViewModels/RSSView/RSSRulesViewModel.swift @@ -47,11 +47,11 @@ class RSSRulesViewModel: ObservableObject { guard !isLoading else { return } isLoading = true Task { - _ = await qBittorrent.removeRSSRule(name: name) + let success = await qBittorrent.removeRSSRule(name: name) await MainActor.run { isLoading = false - if let index = rssRules.firstIndex(where: { $0.title == name }) { - rssRules.remove(at: index) + if success { + rssRules.removeAll { $0.title == name } } } } diff --git a/qBitControl/Views/RSSViews/RSSRuleDetailView.swift b/qBitControl/Views/RSSViews/RSSRuleDetailView.swift index c140de6..d09b43c 100644 --- a/qBitControl/Views/RSSViews/RSSRuleDetailView.swift +++ b/qBitControl/Views/RSSViews/RSSRuleDetailView.swift @@ -100,13 +100,15 @@ struct RSSRuleDetailView: View { } private func saveRule() { - guard validateName() else { return } + if isAdd, !validateName(){ return } rule.rule.affectedFeeds = Array(selectedFeedURLs) viewModel.setRSSRule(rule) { success in - if success { + guard success else { return } + viewModel.getRssRules() + if isAdd { + dismiss() + } else { rule.getArticlesMatching() - viewModel.getRssRules() - if isAdd { dismiss() } } } } diff --git a/qBitControl/Views/RSSViews/RSSRulesView.swift b/qBitControl/Views/RSSViews/RSSRulesView.swift index b2db310..8395ca0 100644 --- a/qBitControl/Views/RSSViews/RSSRulesView.swift +++ b/qBitControl/Views/RSSViews/RSSRulesView.swift @@ -24,10 +24,8 @@ struct RSSRulesView: View { rule.rule.enabled }, set: { rule.rule.enabled = $0 - })) - .onChange(of: rule.rule.enabled) { _ in viewModel.setRSSRule(rule) - } + })) }.contextMenu { ruleItemMenu(name: rule.title) } @@ -47,10 +45,7 @@ struct RSSRulesView: View { content: { NavigationView { RSSRuleDetailView( - rule: RSSRuleModel( - title: "", - rule: .defaultAdd - ), + rule: .defauleAddRule(), isAdd: true ) }