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 = { lazy var messageRequestView: UIView = {
let result: UIView = UIView() let result: UIView = UIView()
result.translatesAutoresizingMaskIntoConstraints = false 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) result.setGradient(Gradients.defaultBackground)
return result return result
@ -558,11 +561,21 @@ final class ConversationVC: BaseVC, OWSConversationSettingsViewDelegate, Convers
} }
if initialLoad || viewModel.threadData.threadIsMessageRequest != updatedThreadData.threadIsMessageRequest { if initialLoad || viewModel.threadData.threadIsMessageRequest != updatedThreadData.threadIsMessageRequest {
messageRequestView.isHidden = (updatedThreadData.threadIsMessageRequest == false)
scrollButtonMessageRequestsBottomConstraint?.isActive = (updatedThreadData.threadIsMessageRequest == true) scrollButtonMessageRequestsBottomConstraint?.isActive = (updatedThreadData.threadIsMessageRequest == true)
scrollButtonBottomConstraint?.isActive = (updatedThreadData.threadIsMessageRequest == false) 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 { if initialLoad || viewModel.threadData.threadUnreadCount != updatedThreadData.threadUnreadCount {
updateUnreadCountView(unreadCount: updatedThreadData.threadUnreadCount) updateUnreadCountView(unreadCount: updatedThreadData.threadUnreadCount)
} }
@ -871,7 +884,13 @@ final class ConversationVC: BaseVC, OWSConversationSettingsViewDelegate, Convers
navigationItem.rightBarButtonItems = [] navigationItem.rightBarButtonItems = []
} }
else { 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 // 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 // taken from the layout inspector for the back button in Xcode
navigationItem.rightBarButtonItems = [ navigationItem.rightBarButtonItems = [
@ -914,7 +933,7 @@ final class ConversationVC: BaseVC, OWSConversationSettingsViewDelegate, Convers
settingsButtonItem.accessibilityLabel = "Settings button" settingsButtonItem.accessibilityLabel = "Settings button"
settingsButtonItem.isAccessibilityElement = true settingsButtonItem.isAccessibilityElement = true
if SessionCall.isEnabled && !threadData.threadIsNoteToSelf && threadData.threadIsMessageRequest == false { if SessionCall.isEnabled && !threadData.threadIsNoteToSelf {
let callButton = UIBarButtonItem( let callButton = UIBarButtonItem(
image: UIImage(named: "Phone"), image: UIImage(named: "Phone"),
style: .plain, style: .plain,

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

@ -772,6 +772,19 @@ private final class JobQueue {
.with(nextRunTimestamp: (Date().timeIntervalSince1970 + 1)) .with(nextRunTimestamp: (Date().timeIntervalSince1970 + 1))
.saved(db) .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 default: break
} }

Loading…
Cancel
Save