forked from zelo72/mastodon-ios
fix: hard code instance version tag issue. resolve #203
This commit is contained in:
parent
fea3638669
commit
1214180c55
|
@ -523,6 +523,9 @@
|
||||||
"signout": "Sign Out"
|
"signout": "Sign Out"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"footer": {
|
||||||
|
"mastodon_description": "Mastodon is open source software. You can contribute or report issues on GitHub at %s (%s)"
|
||||||
|
},
|
||||||
"keyboard": {
|
"keyboard": {
|
||||||
"close_settings_window": "Close Settings Window"
|
"close_settings_window": "Close Settings Window"
|
||||||
}
|
}
|
||||||
|
|
|
@ -910,6 +910,12 @@ internal enum L10n {
|
||||||
internal enum Settings {
|
internal enum Settings {
|
||||||
/// Settings
|
/// Settings
|
||||||
internal static let title = L10n.tr("Localizable", "Scene.Settings.Title")
|
internal static let title = L10n.tr("Localizable", "Scene.Settings.Title")
|
||||||
|
internal enum Footer {
|
||||||
|
/// Mastodon is open source software. You can contribute or report issues on GitHub at %@ (%@)
|
||||||
|
internal static func mastodonDescription(_ p1: Any, _ p2: Any) -> String {
|
||||||
|
return L10n.tr("Localizable", "Scene.Settings.Footer.MastodonDescription", String(describing: p1), String(describing: p2))
|
||||||
|
}
|
||||||
|
}
|
||||||
internal enum Keyboard {
|
internal enum Keyboard {
|
||||||
/// Close Settings Window
|
/// Close Settings Window
|
||||||
internal static let closeSettingsWindow = L10n.tr("Localizable", "Scene.Settings.Keyboard.CloseSettingsWindow")
|
internal static let closeSettingsWindow = L10n.tr("Localizable", "Scene.Settings.Keyboard.CloseSettingsWindow")
|
||||||
|
|
|
@ -310,6 +310,7 @@ any server.";
|
||||||
"Scene.ServerRules.Subtitle" = "These rules are set by the admins of %@.";
|
"Scene.ServerRules.Subtitle" = "These rules are set by the admins of %@.";
|
||||||
"Scene.ServerRules.TermsOfService" = "terms of service";
|
"Scene.ServerRules.TermsOfService" = "terms of service";
|
||||||
"Scene.ServerRules.Title" = "Some ground rules.";
|
"Scene.ServerRules.Title" = "Some ground rules.";
|
||||||
|
"Scene.Settings.Footer.MastodonDescription" = "Mastodon is open source software. You can contribute or report issues on GitHub at %@ (%@)";
|
||||||
"Scene.Settings.Keyboard.CloseSettingsWindow" = "Close Settings Window";
|
"Scene.Settings.Keyboard.CloseSettingsWindow" = "Close Settings Window";
|
||||||
"Scene.Settings.Section.Appearance.Automatic" = "Automatic";
|
"Scene.Settings.Section.Appearance.Automatic" = "Automatic";
|
||||||
"Scene.Settings.Section.Appearance.Dark" = "Always Dark";
|
"Scene.Settings.Section.Appearance.Dark" = "Always Dark";
|
||||||
|
|
|
@ -310,6 +310,7 @@ any server.";
|
||||||
"Scene.ServerRules.Subtitle" = "These rules are set by the admins of %@.";
|
"Scene.ServerRules.Subtitle" = "These rules are set by the admins of %@.";
|
||||||
"Scene.ServerRules.TermsOfService" = "terms of service";
|
"Scene.ServerRules.TermsOfService" = "terms of service";
|
||||||
"Scene.ServerRules.Title" = "Some ground rules.";
|
"Scene.ServerRules.Title" = "Some ground rules.";
|
||||||
|
"Scene.Settings.Footer.MastodonDescription" = "Mastodon is open source software. You can contribute or report issues on GitHub at %@ (%@)";
|
||||||
"Scene.Settings.Keyboard.CloseSettingsWindow" = "Close Settings Window";
|
"Scene.Settings.Keyboard.CloseSettingsWindow" = "Close Settings Window";
|
||||||
"Scene.Settings.Section.Appearance.Automatic" = "Automatic";
|
"Scene.Settings.Section.Appearance.Automatic" = "Automatic";
|
||||||
"Scene.Settings.Section.Appearance.Dark" = "Always Dark";
|
"Scene.Settings.Section.Appearance.Dark" = "Always Dark";
|
||||||
|
|
|
@ -103,6 +103,12 @@ class SettingsViewController: UIViewController, NeedsDependency {
|
||||||
return tableView
|
return tableView
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
let tableFooterActiveLabel: ActiveLabel = {
|
||||||
|
let label = ActiveLabel(style: .default)
|
||||||
|
label.adjustsFontForContentSizeCategory = true
|
||||||
|
label.textAlignment = .center
|
||||||
|
return label
|
||||||
|
}()
|
||||||
lazy var tableFooterView: UIView = {
|
lazy var tableFooterView: UIView = {
|
||||||
// init with a frame to fix a conflict ('UIView-Encapsulated-Layout-Height' UIStackView:0x7ffe41e47da0.height == 0)
|
// init with a frame to fix a conflict ('UIView-Encapsulated-Layout-Height' UIStackView:0x7ffe41e47da0.height == 0)
|
||||||
let view = UIStackView(frame: CGRect(x: 0, y: 0, width: 320, height: 320))
|
let view = UIStackView(frame: CGRect(x: 0, y: 0, width: 320, height: 320))
|
||||||
|
@ -111,13 +117,8 @@ class SettingsViewController: UIViewController, NeedsDependency {
|
||||||
view.axis = .vertical
|
view.axis = .vertical
|
||||||
view.alignment = .center
|
view.alignment = .center
|
||||||
|
|
||||||
let label = ActiveLabel(style: .default)
|
tableFooterActiveLabel.delegate = self
|
||||||
label.adjustsFontForContentSizeCategory = true
|
view.addArrangedSubview(tableFooterActiveLabel)
|
||||||
label.textAlignment = .center
|
|
||||||
label.configure(content: "Mastodon is open source software. You can contribute or report issues on GitHub at <a href=\"https://github.com/tootsuite/mastodon\">tootsuite/mastodon</a> (v3.3.0).", emojiDict: [:])
|
|
||||||
label.delegate = self
|
|
||||||
|
|
||||||
view.addArrangedSubview(label)
|
|
||||||
return view
|
return view
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
@ -190,6 +191,17 @@ class SettingsViewController: UIViewController, NeedsDependency {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.store(in: &disposeBag)
|
.store(in: &disposeBag)
|
||||||
|
|
||||||
|
viewModel.currentInstance
|
||||||
|
.receive(on: RunLoop.main)
|
||||||
|
.sink { [weak self] instance in
|
||||||
|
guard let self = self else { return }
|
||||||
|
let version = instance?.version ?? "-"
|
||||||
|
let link = #"<a href="https://github.com/tootsuite/mastodon">tootsuite/mastodon</a>"#
|
||||||
|
let content = L10n.Scene.Settings.Footer.mastodonDescription(link, version)
|
||||||
|
self.tableFooterActiveLabel.configure(content: content, emojiDict: [:])
|
||||||
|
}
|
||||||
|
.store(in: &disposeBag)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func setupView() {
|
private func setupView() {
|
||||||
|
|
|
@ -32,6 +32,7 @@ class SettingsViewModel {
|
||||||
/// - does not has one
|
/// - does not has one
|
||||||
/// - does not find subscription for selected trigger when change trigger
|
/// - does not find subscription for selected trigger when change trigger
|
||||||
let createSubscriptionSubject = PassthroughSubject<(triggerBy: String, values: [Bool?]), Never>()
|
let createSubscriptionSubject = PassthroughSubject<(triggerBy: String, values: [Bool?]), Never>()
|
||||||
|
let currentInstance = CurrentValueSubject<Mastodon.Entity.Instance?, Never>(nil)
|
||||||
|
|
||||||
/// update a subscription when:
|
/// update a subscription when:
|
||||||
/// - change switch for specified alerts
|
/// - change switch for specified alerts
|
||||||
|
@ -55,6 +56,26 @@ class SettingsViewModel {
|
||||||
self.processDataSource(setting)
|
self.processDataSource(setting)
|
||||||
})
|
})
|
||||||
.store(in: &disposeBag)
|
.store(in: &disposeBag)
|
||||||
|
|
||||||
|
context.authenticationService.activeMastodonAuthenticationBox
|
||||||
|
.compactMap { $0?.domain }
|
||||||
|
.map { context.apiService.instance(domain: $0) }
|
||||||
|
.switchToLatest()
|
||||||
|
.sink { [weak self] completion in
|
||||||
|
guard let self = self else { return }
|
||||||
|
switch completion {
|
||||||
|
case .failure(let error):
|
||||||
|
os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s: fetch instance fail: %s", ((#file as NSString).lastPathComponent), #line, #function, error.localizedDescription)
|
||||||
|
self.currentInstance.value = nil
|
||||||
|
case .finished:
|
||||||
|
os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s: fetch instance success", ((#file as NSString).lastPathComponent), #line, #function)
|
||||||
|
|
||||||
|
}
|
||||||
|
} receiveValue: { [weak self] response in
|
||||||
|
guard let self = self else { return }
|
||||||
|
self.currentInstance.value = response.value
|
||||||
|
}
|
||||||
|
.store(in: &disposeBag)
|
||||||
}
|
}
|
||||||
|
|
||||||
deinit {
|
deinit {
|
||||||
|
|
Loading…
Reference in New Issue