Silence most errors. Push getNativeScreenForRequestError to LoadHandler decoration. Native error screen error message handling.

This commit is contained in:
Kyle Matthew Hedden 2023-03-02 20:26:48 -05:00
parent 52883a534b
commit 56857f187b
3 changed files with 20 additions and 26 deletions

View File

@ -104,7 +104,13 @@
} }
- (nonnull MVMCoreErrorObject *)attachLoadInformation:(MVMCoreLoadObject *)loadObject toError:(MVMCoreErrorObject *)error { - (nonnull MVMCoreErrorObject *)attachLoadInformation:(MVMCoreLoadObject *)loadObject toError:(MVMCoreErrorObject *)error {
return error; // For now, just exposed for overriding. // Native and system errors have an error screen.
if (![error.domain isEqualToString:ErrorDomainServer] && [[MVMCoreObject sharedInstance].globalLoadDelegate respondsToSelector:@selector(getNativeScreenForRequestError:requestObject:)]) {
error.errorScreenError = YES;
error.nativeDrivenErrorScreen = YES;
error.silentError = NO;
}
return error;
} }
- (nonnull NSString *)errorLocationForRequest:(nonnull MVMCoreLoadObject *)loadObject { - (nonnull NSString *)errorLocationForRequest:(nonnull MVMCoreLoadObject *)loadObject {

View File

@ -297,6 +297,7 @@
} else { } else {
// Error with the request/response // Error with the request/response
[[MVMCoreLoadHandler sharedGlobal] attachLoadInformation:loadObject toError:error];
[MVMCoreLoadRequestOperation loadAbortedWithError:error loadObject:loadObject]; [MVMCoreLoadRequestOperation loadAbortedWithError:error loadObject:loadObject];
} }
}]; }];
@ -521,8 +522,12 @@
// Display or finish // Display or finish
if (error.errorScreenError || !loadObject.requestParameters.dontDisplayViewController) { if (error.errorScreenError || !loadObject.requestParameters.dontDisplayViewController) {
error.silentError = NO;
[MVMCoreLoggingHandler addErrorToLog:error];
[MVMCoreLoadRequestOperation displayViewController:viewController loadObject:loadObject error:error]; [MVMCoreLoadRequestOperation displayViewController:viewController loadObject:loadObject error:error];
} else { } else {
error.silentError = YES;
[MVMCoreLoggingHandler addErrorToLog:error];
[MVMCoreLoadRequestOperation loadFinished:loadObject loadedViewController:viewController errorObject:error]; [MVMCoreLoadRequestOperation loadFinished:loadObject loadedViewController:viewController errorObject:error];
} }
} else if (!loadObject.requestParameters.shouldNotGoToServerOnCacheFail && (loadObject.pageDataFromCache || loadObject.moduleDataFromCache)) { } else if (!loadObject.requestParameters.shouldNotGoToServerOnCacheFail && (loadObject.pageDataFromCache || loadObject.moduleDataFromCache)) {
@ -534,7 +539,8 @@
loadObject.operation.errorForAlertToShow = nil; loadObject.operation.errorForAlertToShow = nil;
[loadObject.operation main]; [loadObject.operation main];
} else { } else {
error.silentError = YES;
[MVMCoreLoggingHandler addErrorToLog:error];
// Otherwise the request is finished. // Otherwise the request is finished.
[MVMCoreLoadRequestOperation loadFinished:loadObject loadedViewController:nil errorObject:error]; [MVMCoreLoadRequestOperation loadFinished:loadObject loadedViewController:nil errorObject:error];
} }
@ -759,11 +765,11 @@
// Show alert for error. // Show alert for error.
[MVMCoreLoadRequestOperation createAndShowAlertForLoadObject:loadObject error:error delegateObject:loadObject.operation.delegateObject]; [MVMCoreLoadRequestOperation createAndShowAlertForLoadObject:loadObject error:error delegateObject:loadObject.operation.delegateObject];
} else { } else {
error.silentError = YES; error.silentError = !error.errorScreenError && !error.nativeDrivenErrorScreen;
} }
// Logs the error. // Logs the error. If its a native driven error screen postpone until the native screen is define with its messaging.
if (error.logError) { if (error.logError && !error.nativeDrivenErrorScreen) {
[MVMCoreLoggingHandler addErrorToLog:error]; [MVMCoreLoggingHandler addErrorToLog:error];
} }
} }

View File

@ -28,18 +28,11 @@
self.domain = domain; self.domain = domain;
self.location = location; self.location = location;
self.date = [NSDate date]; self.date = [NSDate date];
self.silentError = YES; // TODO: Hold on this. Messes with server errors. self.silentError = YES;
self.logError = YES; self.logError = YES;
[MVMCoreDispatchUtility performSyncBlockOnMainThread:^{ [MVMCoreDispatchUtility performSyncBlockOnMainThread:^{
self.applicationState = [UIApplication sharedApplication].applicationState; self.applicationState = [UIApplication sharedApplication].applicationState;
}]; }];
// Native and system errors have an error screen.
if (![domain isEqualToString:ErrorDomainServer] && [[MVMCoreObject sharedInstance].globalLoadDelegate respondsToSelector:@selector(getNativeScreenForRequestError:requestObject:)]) {
self.errorScreenError = YES;
self.nativeDrivenErrorScreen = YES;
self.silentError = NO;
}
} }
return self; return self;
} }
@ -54,18 +47,11 @@
self.domain = domain; self.domain = domain;
self.location = location; self.location = location;
self.date = [NSDate date]; self.date = [NSDate date];
self.silentError = YES; // TODO: Hold on this. Messes with server errors. self.silentError = YES;
self.logError = YES; self.logError = YES;
[MVMCoreDispatchUtility performSyncBlockOnMainThread:^{ [MVMCoreDispatchUtility performSyncBlockOnMainThread:^{
self.applicationState = [UIApplication sharedApplication].applicationState; self.applicationState = [UIApplication sharedApplication].applicationState;
}]; }];
// Native and system errors have an error screen.
if (![domain isEqualToString:ErrorDomainServer] && [[MVMCoreObject sharedInstance].globalLoadDelegate respondsToSelector:@selector(getNativeScreenForRequestError:requestObject:)]) {
self.errorScreenError = YES;
self.nativeDrivenErrorScreen = YES;
self.silentError = NO;
}
} }
return self; return self;
} }
@ -104,13 +90,9 @@
if (errorObject) { if (errorObject) {
return errorObject; return errorObject;
} }
errorObject = [[MVMCoreErrorObject alloc] initWithTitle:[MVMCoreGetterUtility hardcodedStringWithKey:HardcodedErrorTitle] message:[error localizedDescription] messageToLog:[error description] code:[error code] domain:ErrorDomainSystem location:location]; errorObject = [[MVMCoreErrorObject alloc] initWithTitle:[MVMCoreGetterUtility hardcodedStringWithKey:HardcodedErrorTitle] message:[error localizedDescription] messageToLog:[error localizedFailureReason] ?: [error localizedDescription] code:[error code] domain:ErrorDomainSystem location:location];
if ([error.domain isEqualToString:NSURLErrorDomain]) { if ([error.domain isEqualToString:NSURLErrorDomain]) {
errorObject.systemDomain = error.domain; errorObject.systemDomain = error.domain;
if ([[MVMCoreObject sharedInstance].globalLoadDelegate respondsToSelector:@selector(getNativeScreenForRequestError:requestObject:)]) {
errorObject.errorScreenError = YES;
errorObject.nativeDrivenErrorScreen = YES;
}
} }
return errorObject; return errorObject;
} }