Fixed a bug with the message request UI and with recurring job retrying

Fixed a bug where jobs that recur on launch or active could end up endlessly retrying if they failed once
Fixed a bug where the message request UI would appear for outgoing message requests
pull/612/head
Morgan Pretty 2 years ago
parent fd76438686
commit b4ab521713

@ -209,7 +209,10 @@ final class ConversationVC: BaseVC, OWSConversationSettingsViewDelegate, Convers
lazy var messageRequestView: UIView = {
let result: UIView = UIView()
result.translatesAutoresizingMaskIntoConstraints = false
result.isHidden = (self.viewModel.threadData.threadIsMessageRequest == false)
result.isHidden = (
self.viewModel.threadData.threadIsMessageRequest == false ||
self.viewModel.threadData.threadRequiresApproval == true
)
result.setGradient(Gradients.defaultBackground)
return result
@ -558,11 +561,21 @@ final class ConversationVC: BaseVC, OWSConversationSettingsViewDelegate, Convers
}
if initialLoad || viewModel.threadData.threadIsMessageRequest != updatedThreadData.threadIsMessageRequest {
messageRequestView.isHidden = (updatedThreadData.threadIsMessageRequest == false)
scrollButtonMessageRequestsBottomConstraint?.isActive = (updatedThreadData.threadIsMessageRequest == true)
scrollButtonBottomConstraint?.isActive = (updatedThreadData.threadIsMessageRequest == false)
}
if
initialLoad ||
viewModel.threadData.threadRequiresApproval != updatedThreadData.threadRequiresApproval ||
viewModel.threadData.threadIsMessageRequest != updatedThreadData.threadIsMessageRequest
{
messageRequestView.isHidden = (
updatedThreadData.threadIsMessageRequest == false ||
updatedThreadData.threadRequiresApproval == true
)
}
if initialLoad || viewModel.threadData.threadUnreadCount != updatedThreadData.threadUnreadCount {
updateUnreadCountView(unreadCount: updatedThreadData.threadUnreadCount)
}
@ -871,7 +884,13 @@ final class ConversationVC: BaseVC, OWSConversationSettingsViewDelegate, Convers
navigationItem.rightBarButtonItems = []
}
else {
guard let threadData: SessionThreadViewModel = threadData, threadData.threadRequiresApproval == false else {
guard
let threadData: SessionThreadViewModel = threadData,
(
threadData.threadRequiresApproval == false &&
threadData.threadIsMessageRequest == false
)
else {
// Note: Adding empty buttons because without it the title alignment is busted (Note: The size was
// taken from the layout inspector for the back button in Xcode
navigationItem.rightBarButtonItems = [
@ -914,7 +933,7 @@ final class ConversationVC: BaseVC, OWSConversationSettingsViewDelegate, Convers
settingsButtonItem.accessibilityLabel = "Settings button"
settingsButtonItem.isAccessibilityElement = true
if SessionCall.isEnabled && !threadData.threadIsNoteToSelf && threadData.threadIsMessageRequest == false {
if SessionCall.isEnabled && !threadData.threadIsNoteToSelf {
let callButton = UIBarButtonItem(
image: UIImage(named: "Phone"),
style: .plain,

@ -579,10 +579,8 @@ public extension SessionThreadViewModel {
IFNULL(\(contact[.isApproved]), false) = false
) AS \(ViewModel.threadIsMessageRequestKey),
(
\(SQL("\(thread[.variant]) = \(SessionThread.Variant.contact)")) AND (
IFNULL(\(contact[.isApproved]), false) = false OR
IFNULL(\(contact[.didApproveMe]), false) = false
)
\(SQL("\(thread[.variant]) = \(SessionThread.Variant.contact)")) AND
IFNULL(\(contact[.didApproveMe]), false) = false
) AS \(ViewModel.threadRequiresApprovalKey),
\(thread[.shouldBeVisible]) AS \(ViewModel.threadShouldBeVisibleKey),

@ -772,6 +772,19 @@ private final class JobQueue {
.with(nextRunTimestamp: (Date().timeIntervalSince1970 + 1))
.saved(db)
}
// For `recurringOnLaunch/Active` jobs which have already run, we want to clear their
// `failureCount` and `nextRunTimestamp` to prevent them from endlessly running over
// and over and reset their retry backoff in case they fail next time
case .recurringOnLaunch, .recurringOnActive:
Storage.shared.write { db in
_ = try job
.with(
failureCount: 0,
nextRunTimestamp: 0
)
.saved(db)
}
default: break
}

Loading…
Cancel
Save