Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

task: Add push and email alert settings #1255 #2127

Merged
merged 1 commit into from
Aug 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,6 @@ extension DefaultsPresenter {
buildHideNFCButtonInSensorContents(),
buildIsAuthorized(),
buildAuthToken(),
buildShowEmailAlertSettings(),
buildShowPushAlertSettings(),
buildIsAuthorized(),
buildShowStatusLabelSettings(),
buildShowAlertRangeInGraph(),
Expand Down Expand Up @@ -378,34 +376,6 @@ extension DefaultsPresenter {
return viewModel
}

private func buildShowEmailAlertSettings() -> DefaultsViewModel {
let viewModel = DefaultsViewModel()
viewModel.title = RuuviLocalization.Defaults.ShowEmailAlertsSettings.title
viewModel.boolean.value = settings.showEmailAlertSettings
viewModel.hideStatusLabel.value = !settings.showSwitchStatusLabel
viewModel.type.value = .switcher

bind(viewModel.boolean, fire: false) { observer, show in
observer.settings.showEmailAlertSettings = GlobalHelpers.getBool(from: show)
}

return viewModel
}

private func buildShowPushAlertSettings() -> DefaultsViewModel {
let viewModel = DefaultsViewModel()
viewModel.title = RuuviLocalization.Defaults.ShowPushAlertsSettings.title
viewModel.boolean.value = settings.showPushAlertSettings
viewModel.hideStatusLabel.value = !settings.showSwitchStatusLabel
viewModel.type.value = .switcher

bind(viewModel.boolean, fire: false) { observer, show in
observer.settings.showPushAlertSettings = GlobalHelpers.getBool(from: show)
}

return viewModel
}

private func buildShowStatusLabelSettings() -> DefaultsViewModel {
let viewModel = DefaultsViewModel()
viewModel.title = RuuviLocalization.Defaults.ShowStatusLabelSettings.title
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,15 +55,9 @@ extension NotificationsSettingsPresenter {
private func configure() {
var viewModels: [NotificationsSettingsViewModel] = []

if settings.showEmailAlertSettings {
viewModels.append(buildEmailAlertSettings())
}

if settings.showPushAlertSettings {
viewModels.append(buildPushSettings())
}

viewModels.append(buildLimitAlertNotificationsSettings())
viewModels.append(buildEmailAlertSettings())
viewModels.append(buildPushSettings())
viewModels.append(buildSoundSettings())

settingsViewModels = viewModels
Expand All @@ -73,15 +67,15 @@ extension NotificationsSettingsPresenter {
let viewModel = NotificationsSettingsViewModel()
viewModel.title = RuuviLocalization.settingsEmailAlerts
viewModel.subtitle = RuuviLocalization.settingsEmailAlertsDescription
viewModel.boolean.value = settings.emailAlertEnabled
viewModel.boolean.value = !settings.emailAlertDisabled
viewModel.hideStatusLabel.value = !settings.showSwitchStatusLabel
viewModel.configType.value = .switcher
viewModel.settingsType.value = .email

bind(viewModel.boolean, fire: false) { observer, enabled in
let alertEnabled = GlobalHelpers.getBool(from: enabled)
observer.settings.emailAlertEnabled = alertEnabled
observer.ruuviAppSettingsService.set(emailAlert: alertEnabled)
let alertDisabled = !GlobalHelpers.getBool(from: enabled)
observer.settings.emailAlertDisabled = alertDisabled
observer.ruuviAppSettingsService.set(disableEmailAlert: alertDisabled)
}

return viewModel
Expand All @@ -91,15 +85,15 @@ extension NotificationsSettingsPresenter {
let viewModel = NotificationsSettingsViewModel()
viewModel.title = RuuviLocalization.settingsPushAlerts
viewModel.subtitle = RuuviLocalization.settingsPushAlertsDescription
viewModel.boolean.value = settings.pushAlertEnabled
viewModel.boolean.value = !settings.pushAlertDisabled
viewModel.hideStatusLabel.value = !settings.showSwitchStatusLabel
viewModel.configType.value = .switcher
viewModel.settingsType.value = .push

bind(viewModel.boolean, fire: false) { observer, enabled in
let alertEnabled = GlobalHelpers.getBool(from: enabled)
observer.settings.pushAlertEnabled = alertEnabled
observer.ruuviAppSettingsService.set(pushAlert: alertEnabled)
let alertDisabled = !GlobalHelpers.getBool(from: enabled)
observer.settings.pushAlertDisabled = alertDisabled
observer.ruuviAppSettingsService.set(disablePushAlert: alertDisabled)
}

return viewModel
Expand Down Expand Up @@ -183,7 +177,7 @@ extension NotificationsSettingsPresenter {
if let viewModel = settingsViewModels.first(where: { vm in
vm.settingsType.value == .email
}) {
if viewModel.boolean.value != settings.emailAlertEnabled {
if viewModel.boolean.value == settings.emailAlertDisabled {
configure()
}
}
Expand All @@ -193,7 +187,7 @@ extension NotificationsSettingsPresenter {
if let viewModel = settingsViewModels.first(where: { vm in
vm.settingsType.value == .push
}) {
if viewModel.boolean.value != settings.pushAlertEnabled {
if viewModel.boolean.value == settings.emailAlertDisabled {
configure()
}
}
Expand Down
4 changes: 2 additions & 2 deletions Packages/RuuviCloud/Sources/RuuviCloud/RuuviCloud.swift
Original file line number Diff line number Diff line change
Expand Up @@ -174,10 +174,10 @@ public protocol RuuviCloud {
func set(dashboardTapActionType: DashboardTapActionType) -> Future<DashboardTapActionType, RuuviCloudError>

@discardableResult
func set(emailAlert: Bool) -> Future<Bool, RuuviCloudError>
func set(disableEmailAlert: Bool) -> Future<Bool, RuuviCloudError>

@discardableResult
func set(pushAlert: Bool) -> Future<Bool, RuuviCloudError>
func set(disablePushAlert: Bool) -> Future<Bool, RuuviCloudError>

@discardableResult
func set(profileLanguageCode: String) -> Future<String, RuuviCloudError>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,12 +63,12 @@ public struct RuuviCloudApiSettings: Decodable, RuuviCloudSettings {
dashboardTapActionTypeString?.ruuviCloudApiSettingsDashboardTapActionType
}

public var pushAlertEnabled: Bool? {
pushAlertEnabledString?.ruuviCloudApiSettingBoolean
public var pushAlertDisabled: Bool? {
pushAlertDisabledString?.ruuviCloudApiSettingBoolean
}

public var emailAlertEnabled: Bool? {
emailAlertEnabledString?.ruuviCloudApiSettingBoolean
public var emailAlertDisabled: Bool? {
emailAlertDisabledString?.ruuviCloudApiSettingBoolean
}

public var profileLanguageCode: String? {
Expand All @@ -93,8 +93,8 @@ public struct RuuviCloudApiSettings: Decodable, RuuviCloudSettings {
var dashboardEnabledString: String?
var dashboardTypeString: String?
var dashboardTapActionTypeString: String?
var pushAlertEnabledString: String?
var emailAlertEnabledString: String?
var emailAlertDisabledString: String?
var pushAlertDisabledString: String?
var profileLanguageCodeString: String?
var dashboardSensorOrderString: String?

Expand All @@ -113,8 +113,8 @@ public struct RuuviCloudApiSettings: Decodable, RuuviCloudSettings {
case dashboardEnabledString = "DASHBOARD_ENABLED"
case dashboardTypeString = "DASHBOARD_TYPE"
case dashboardTapActionTypeString = "DASHBOARD_TAP_ACTION"
case pushAlertEnabledString = "ALERT_PUSH_ENABLED"
case emailAlertEnabledString = "ALERT_EMAIL_ENABLED"
case emailAlertDisabledString = "DISABLE_EMAIL_NOTIFICATIONS"
case pushAlertDisabledString = "DISABLE_PUSH_NOTIFICATIONS"
case profileLanguageCodeString = "PROFILE_LANGUAGE_CODE"
case dashboardSensorOrderString = "SENSOR_ORDER"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ public enum RuuviCloudApiSetting: String, CaseIterable, Codable {
case dashboardEnabled = "DASHBOARD_ENABLED"
case dashboardType = "DASHBOARD_TYPE"
case dashboardTapActionType = "DASHBOARD_TAP_ACTION"
case pushAlertEnabled = "ALERT_PUSH_ENABLED"
case emailAlertEnabled = "ALERT_EMAIL_ENABLED"
case pushAlertDisabled = "DISABLE_PUSH_NOTIFICATIONS"
case emailAlertDisabled = "DISABLE_EMAIL_NOTIFICATIONS"
case profileLanguageCode = "PROFILE_LANGUAGE_CODE"
case dashboardSensorOrder = "SENSOR_ORDER"
}
Expand Down Expand Up @@ -122,9 +122,9 @@ public extension String {

var ruuviCloudApiSettingBoolean: Bool? {
switch self {
case "true":
case "true", "1":
true
case "false":
case "false", "0":
false
default:
nil
Expand Down
20 changes: 10 additions & 10 deletions Packages/RuuviCloud/Sources/RuuviCloudPure/RuuviCloudPure.swift
Original file line number Diff line number Diff line change
Expand Up @@ -472,53 +472,53 @@ public final class RuuviCloudPure: RuuviCloud {
}

@discardableResult
public func set(emailAlert: Bool) -> Future<Bool, RuuviCloudError> {
public func set(disableEmailAlert: Bool) -> Future<Bool, RuuviCloudError> {
let promise = Promise<Bool, RuuviCloudError>()
guard let apiKey = user.apiKey
else {
promise.fail(error: .notAuthorized)
return promise.future
}
let request = RuuviCloudApiPostSettingRequest(
name: .emailAlertEnabled,
value: emailAlert.chartBoolSettingString,
name: .emailAlertDisabled,
value: disableEmailAlert.chartBoolSettingString,
timestamp: Int(Date().timeIntervalSince1970)
)
api.postSetting(request, authorization: apiKey)
.on(success: { _ in
promise.succeed(value: emailAlert)
promise.succeed(value: disableEmailAlert)
}, failure: { [weak self] error in
self?.createQueuedRequest(
from: request,
type: .settings,
uniqueKey: RuuviCloudApiSetting.emailAlertEnabled.rawValue
uniqueKey: RuuviCloudApiSetting.emailAlertDisabled.rawValue
)
promise.fail(error: .api(error))
})
return promise.future
}

@discardableResult
public func set(pushAlert: Bool) -> Future<Bool, RuuviCloudError> {
public func set(disablePushAlert: Bool) -> Future<Bool, RuuviCloudError> {
let promise = Promise<Bool, RuuviCloudError>()
guard let apiKey = user.apiKey
else {
promise.fail(error: .notAuthorized)
return promise.future
}
let request = RuuviCloudApiPostSettingRequest(
name: .pushAlertEnabled,
value: pushAlert.chartBoolSettingString,
name: .pushAlertDisabled,
value: disablePushAlert.chartBoolSettingString,
timestamp: Int(Date().timeIntervalSince1970)
)
api.postSetting(request, authorization: apiKey)
.on(success: { _ in
promise.succeed(value: pushAlert)
promise.succeed(value: disablePushAlert)
}, failure: { [weak self] error in
self?.createQueuedRequest(
from: request,
type: .settings,
uniqueKey: RuuviCloudApiSetting.pushAlertEnabled.rawValue
uniqueKey: RuuviCloudApiSetting.pushAlertDisabled.rawValue
)
promise.fail(error: .api(error))
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,10 +92,8 @@ public protocol RuuviLocalSettings {
var theme: RuuviTheme { get set }
var hideNFCForSensorContest: Bool { get set }
var alertSound: RuuviAlertSound { get set }
var showEmailAlertSettings: Bool { get set }
var emailAlertEnabled: Bool { get set }
var showPushAlertSettings: Bool { get set }
var pushAlertEnabled: Bool { get set }
var emailAlertDisabled: Bool { get set }
var pushAlertDisabled: Bool { get set }
var limitAlertNotificationsEnabled: Bool { get set }
var showSwitchStatusLabel: Bool { get set }
var showAlertsRangeInGraph: Bool { get set }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -654,11 +654,8 @@ final class RuuviLocalSettingsUserDefaults: RuuviLocalSettings {
}
}

@UserDefault("SettingsUserDefaults.showEmailAlertSettings", defaultValue: false)
var showEmailAlertSettings: Bool

@UserDefault("SettingsUserDefaults.emailAlertEnabled", defaultValue: false)
var emailAlertEnabled: Bool {
@UserDefault("SettingsUserDefaults.emailAlertDisabled", defaultValue: false)
var emailAlertDisabled: Bool {
didSet {
DispatchQueue.global(qos: .userInitiated).async {
NotificationCenter
Expand All @@ -672,11 +669,8 @@ final class RuuviLocalSettingsUserDefaults: RuuviLocalSettings {
}
}

@UserDefault("SettingsUserDefaults.showPushAlertSettings", defaultValue: false)
var showPushAlertSettings: Bool

@UserDefault("SettingsUserDefaults.pushAlertEnabled", defaultValue: false)
var pushAlertEnabled: Bool {
@UserDefault("SettingsUserDefaults.pushAlertDisabled", defaultValue: false)
var pushAlertDisabled: Bool {
didSet {
DispatchQueue.global(qos: .userInitiated).async {
NotificationCenter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ public protocol RuuviCloudSettings {
var dashboardEnabled: Bool? { get }
var dashboardType: DashboardType? { get }
var dashboardTapActionType: DashboardTapActionType? { get }
var pushAlertEnabled: Bool? { get }
var emailAlertEnabled: Bool? { get }
var pushAlertDisabled: Bool? { get }
var emailAlertDisabled: Bool? { get }
var profileLanguageCode: String? { get }
var dashboardSensorOrder: String? { get }
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,10 @@ public protocol RuuviServiceAppSettings {
func set(dashboardTapActionType: DashboardTapActionType) -> Future<DashboardTapActionType, RuuviServiceError>

@discardableResult
func set(emailAlert: Bool) -> Future<Bool, RuuviServiceError>
func set(disableEmailAlert: Bool) -> Future<Bool, RuuviServiceError>

@discardableResult
func set(pushAlert: Bool) -> Future<Bool, RuuviServiceError>
func set(disablePushAlert: Bool) -> Future<Bool, RuuviServiceError>

@discardableResult
func set(profileLanguageCode: String) -> Future<String, RuuviServiceError>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -198,23 +198,23 @@ public final class RuuviServiceAppSettingsImpl: RuuviServiceAppSettings {
}

@discardableResult
public func set(emailAlert: Bool) -> Future<Bool, RuuviServiceError> {
public func set(disableEmailAlert: Bool) -> Future<Bool, RuuviServiceError> {
let promise = Promise<Bool, RuuviServiceError>()
cloud.set(emailAlert: emailAlert)
.on(success: { enabled in
promise.succeed(value: enabled)
cloud.set(disableEmailAlert: disableEmailAlert)
.on(success: { disabled in
promise.succeed(value: disabled)
}, failure: { error in
promise.fail(error: .ruuviCloud(error))
})
return promise.future
}

@discardableResult
public func set(pushAlert: Bool) -> Future<Bool, RuuviServiceError> {
public func set(disablePushAlert: Bool) -> Future<Bool, RuuviServiceError> {
let promise = Promise<Bool, RuuviServiceError>()
cloud.set(pushAlert: pushAlert)
.on(success: { enabled in
promise.succeed(value: enabled)
cloud.set(disablePushAlert: disablePushAlert)
.on(success: { disabled in
promise.succeed(value: disabled)
}, failure: { error in
promise.fail(error: .ruuviCloud(error))
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,13 +109,13 @@ public final class RuuviServiceCloudSyncImpl: RuuviServiceCloudSync {
dashboardTapActionType != sSelf.ruuviLocalSettings.dashboardTapActionType {
sSelf.ruuviLocalSettings.dashboardTapActionType = dashboardTapActionType
}
if let pushAlertEnabled = cloudSettings.pushAlertEnabled,
pushAlertEnabled != sSelf.ruuviLocalSettings.pushAlertEnabled {
sSelf.ruuviLocalSettings.pushAlertEnabled = pushAlertEnabled
if let pushAlertDisabled = cloudSettings.pushAlertDisabled,
pushAlertDisabled != sSelf.ruuviLocalSettings.pushAlertDisabled {
sSelf.ruuviLocalSettings.pushAlertDisabled = pushAlertDisabled
}
if let emailAlertEnabled = cloudSettings.emailAlertEnabled,
emailAlertEnabled != sSelf.ruuviLocalSettings.emailAlertEnabled {
sSelf.ruuviLocalSettings.emailAlertEnabled = emailAlertEnabled
if let emailAlertDisabled = cloudSettings.emailAlertDisabled,
emailAlertDisabled != sSelf.ruuviLocalSettings.emailAlertDisabled {
sSelf.ruuviLocalSettings.emailAlertDisabled = emailAlertDisabled
}
if let cloudProfileLanguageCode = cloudSettings.profileLanguageCode {
if cloudProfileLanguageCode !=
Expand Down
Loading