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

User status message setting fixes #1824

Merged
merged 7 commits into from
Oct 9, 2024
8 changes: 4 additions & 4 deletions NextcloudTalk/EmojiTextField.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import UIKit
import SwiftUI
import Dynamic

struct EmojiTextFieldWrapper: UIViewRepresentable {
struct SingleEmojiTextFieldWrapper: UIViewRepresentable {
@State var placeholder: String
@Binding var text: String

Expand All @@ -22,14 +22,14 @@ struct EmojiTextFieldWrapper: UIViewRepresentable {
uiView.placeholder = placeholder
}

func makeCoordinator() -> EmojiTextFieldWrapper.Coordinator {
func makeCoordinator() -> SingleEmojiTextFieldWrapper.Coordinator {
Coordinator(parent: self)
}

class Coordinator: NSObject, UITextFieldDelegate {
var parent: EmojiTextFieldWrapper
var parent: SingleEmojiTextFieldWrapper

init(parent: EmojiTextFieldWrapper) {
init(parent: SingleEmojiTextFieldWrapper) {
self.parent = parent
}

Expand Down
64 changes: 28 additions & 36 deletions NextcloudTalk/UserStatusMessageSwiftUIView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,15 @@ struct UserStatusMessageSwiftUIView: View {
@Binding var changed: Bool
@State var showClearAtAlert: Bool = false

@State private var changedStatusFromPredefined: Bool = false
@State private var customStatusSelected: Bool = false
@State private var selectedPredifinedStatus: NKUserStatus?
@State private var statusPredefinedStatuses: [NKUserStatus] = []
@State private var selectedPredefinedMessageId: String?
@State private var predefinedStatuses: [NKUserStatus] = []

@State private var selectedIcon: String = ""
@State private var selectedMessage: String = ""
@State private var selectedClearAt: Double = 0
@State private var selectedClearAtString: String = ""
@State private var changedSmth: Bool = false

@State private var userHasStatusSet: Bool = false

@State private var isLoading: Bool = true
@FocusState private var textFieldIsFocused: Bool
Expand All @@ -47,39 +46,30 @@ struct UserStatusMessageSwiftUIView: View {
List {
Section(header: Text(NSLocalizedString("What is your status?", comment: ""))) {
HStack(spacing: 10) {
EmojiTextFieldWrapper(placeholder: "😀", text: $selectedIcon)
SingleEmojiTextFieldWrapper(placeholder: "😀", text: $selectedIcon)
.frame(maxWidth: 23)
.opacity(selectedIcon.isEmpty ? 0.5 : 1.0)
.onChange(of: selectedIcon) { newString in
changedSmth = true
customStatusSelected = !changedStatusFromPredefined
changedStatusFromPredefined = false
if newString.count > 1 {
selectedIcon = String(newString.first!)
}
.onChange(of: selectedIcon) { _ in
selectedPredefinedMessageId = nil
}
.tint(.primary)
.focused($textFieldIsFocused)
Divider()
TextField(NSLocalizedString("What is your status?", comment: ""), text: $selectedMessage)
.onChange(of: selectedMessage) { _ in
changedSmth = true
customStatusSelected = !changedStatusFromPredefined
changedStatusFromPredefined = false
selectedPredefinedMessageId = nil
}
.tint(.primary)
.focused($textFieldIsFocused)
}
}
Section {
ForEach(statusPredefinedStatuses, id: \.id) { status in
ForEach(predefinedStatuses, id: \.id) { status in
Button(action: {
changedStatusFromPredefined = true
selectedPredifinedStatus = status
customStatusSelected = false
selectedIcon = selectedPredifinedStatus!.icon ?? "Empty"
selectedMessage = selectedPredifinedStatus!.message ?? "Empty"
selectedClearAt = selectedPredifinedStatus!.clearAt?.timeIntervalSince1970 ?? 0
selectedPredefinedMessageId = status.id
selectedIcon = status.icon ?? ""
selectedMessage = status.message ?? ""
selectedClearAt = status.clearAt?.timeIntervalSince1970 ?? 0
selectedClearAtString = getPredefinedClearStatusText(clearAt: status.clearAt, clearAtTime: status.clearAtTime, clearAtType: status.clearAtType)
setClearAt(clearAt: selectedClearAtString)
}) {
Expand Down Expand Up @@ -119,11 +109,11 @@ struct UserStatusMessageSwiftUIView: View {
comment: ""),
action: clearActiveUserStatus,
style: .tertiary, height: 40,
disabled: Binding.constant(selectedMessage.isEmpty && selectedIcon.isEmpty))
disabled: Binding.constant(!userHasStatusSet))
NCButtonSwiftUI(title: NSLocalizedString("Set status message", comment: ""),
action: setActiveUserStatus,
style: .primary, height: 40,
disabled: Binding.constant(selectedMessage.isEmpty || changedSmth == false))
disabled: Binding.constant(selectedMessage.isEmpty && selectedIcon.isEmpty))
.padding(.bottom, 16)
}
} else {
Expand All @@ -133,12 +123,12 @@ struct UserStatusMessageSwiftUIView: View {
comment: ""),
action: clearActiveUserStatus,
style: .tertiary, height: 40,
disabled: Binding.constant(selectedMessage.isEmpty && selectedIcon.isEmpty))
disabled: Binding.constant(!userHasStatusSet))
.padding(.bottom, 16)
NCButtonSwiftUI(title: NSLocalizedString("Set status message", comment: ""),
action: setActiveUserStatus,
style: .primary, height: 40,
disabled: Binding.constant(selectedMessage.isEmpty || changedSmth == false))
disabled: Binding.constant(selectedMessage.isEmpty && selectedIcon.isEmpty))
.padding(.bottom, 16)
Spacer()
}
Expand Down Expand Up @@ -192,17 +182,19 @@ struct UserStatusMessageSwiftUIView: View {
func getStatus() {
isLoading = true
NCAPIController.sharedInstance().setupNCCommunication(for: NCDatabaseManager.sharedInstance().activeAccount())
NextcloudKit.shared.getUserStatus { _, clearAt, icon, message, _, _, _, _, _, _, error in
NextcloudKit.shared.getUserStatus { _, clearAt, icon, message, messageId, _, _, _, _, _, error in
if error.errorCode == 0 {
selectedIcon = icon ?? "😀"
userHasStatusSet = !(icon?.isEmpty ?? true) || !(message?.isEmpty ?? true)
selectedIcon = icon ?? ""
selectedMessage = message ?? ""
selectedPredefinedMessageId = messageId
selectedClearAt = clearAt?.timeIntervalSince1970 ?? 0
selectedClearAtString = getPredefinedClearStatusText(clearAt: clearAt, clearAtTime: nil, clearAtType: nil)
}
}
NextcloudKit.shared.getUserStatusPredefinedStatuses { _, userStatuses, _, error in
if error.errorCode == 0 {
statusPredefinedStatuses = userStatuses!
predefinedStatuses = userStatuses ?? []
withAnimation {
isLoading = false
}
Expand All @@ -211,8 +203,8 @@ struct UserStatusMessageSwiftUIView: View {
}

func setActiveUserStatus() {
if !customStatusSelected, let selectedPredifinedStatus {
NextcloudKit.shared.setCustomMessagePredefined(messageId: selectedPredifinedStatus.id!, clearAt: selectedClearAt) { _, error in
if let selectedPredefinedMessageId {
NextcloudKit.shared.setCustomMessagePredefined(messageId: selectedPredefinedMessageId, clearAt: selectedClearAt) { _, error in
if error.errorCode == 0 {
dismiss()
changed.toggle()
Expand All @@ -222,7 +214,8 @@ struct UserStatusMessageSwiftUIView: View {
}
}
} else {
NextcloudKit.shared.setCustomMessageUserDefined(statusIcon: selectedIcon.isEmpty ? "😀" : selectedIcon, message: selectedMessage, clearAt: selectedClearAt) { _, error in
let statusIcon = selectedIcon.isEmpty ? nil : selectedIcon
NextcloudKit.shared.setCustomMessageUserDefined(statusIcon: statusIcon, message: selectedMessage, clearAt: selectedClearAt) { _, error in
if error.errorCode == 0 {
dismiss()
changed.toggle()
Expand All @@ -246,8 +239,8 @@ struct UserStatusMessageSwiftUIView: View {
}

func triggerErrorAlert(title: String, message: String) {
errorAlertTitle = NSLocalizedString("Could not clear status message", comment: "")
errorAlertMessage = NSLocalizedString("Could not clear status message", comment: "")
errorAlertTitle = title
errorAlertMessage = message
showErrorAlert.toggle()
}

Expand Down Expand Up @@ -285,7 +278,6 @@ struct UserStatusMessageSwiftUIView: View {
func setClearAt(clearAt: String) {
selectedClearAt = getClearAt(clearAt)
selectedClearAtString = clearAt
customStatusSelected = true
}

func getPredefinedClearStatusText(clearAt: NSDate?, clearAtTime: String?, clearAtType: String?) -> String {
Expand Down
Loading