UPD: MacCloud: step-61: improve error handing

This commit is contained in:
rich2014 2025-04-18 00:47:46 +08:00
commit e2ac4dd768
4 changed files with 30 additions and 14 deletions

View file

@ -171,7 +171,7 @@ var
httpResult: TMiniHttpResult;
httpError: NSError;
httpErrorDescription: String;
dropBoxMessage: String;
cloudDriverMessage: String;
procedure processHttpError;
begin
@ -189,32 +189,32 @@ var
procedure processDropBox401Error;
begin
if dropBoxMessage.IndexOf('access_token') >= 0 then
raise ECloudDriverTokenException.Create( dropBoxMessage );
raise ECloudDriverException.Create( dropBoxMessage );
if cloudDriverMessage.IndexOf('access_token') >= 0 then
raise ECloudDriverTokenException.Create( cloudDriverMessage );
raise ECloudDriverException.Create( cloudDriverMessage );
end;
procedure processDropBox409Error;
begin
if dropBoxMessage.IndexOf('not_found') >= 0 then
raise EFileNotFoundException.Create( dropBoxMessage );
if dropBoxMessage.IndexOf('conflict') >= 0 then
raise ECloudDriverConflictException.Create( dropBoxMessage );
raise ECloudDriverPermissionException.Create( dropBoxMessage );
if cloudDriverMessage.IndexOf('not_found') >= 0 then
raise EFileNotFoundException.Create( cloudDriverMessage );
if cloudDriverMessage.IndexOf('conflict') >= 0 then
raise ECloudDriverConflictException.Create( cloudDriverMessage );
raise ECloudDriverPermissionException.Create( cloudDriverMessage );
end;
procedure processDropBoxError;
begin
dropBoxMessage:= cloudDriverResult.resultMessage;
cloudDriverMessage:= cloudDriverResult.resultMessage;
if (httpResult.resultCode>=200) and (httpResult.resultCode<=299) then
Exit;
case httpResult.resultCode of
401: processDropBox401Error;
409: processDropBox409Error;
403: raise ECloudDriverPermissionException.Create( dropBoxMessage );
429: raise ECloudDriverRateLimitException.Create( dropBoxMessage );
else raise ECloudDriverException.Create( dropBoxMessage );
403: raise ECloudDriverPermissionException.Create( cloudDriverMessage );
429: raise ECloudDriverRateLimitException.Create( cloudDriverMessage );
else raise ECloudDriverException.Create( cloudDriverMessage );
end;
end;

View file

@ -26,6 +26,7 @@ type
ECloudDriverException = class( Exception );
ECloudDriverTokenException = class( ECloudDriverException );
ECloudDriverConflictException = class( ECloudDriverException );
ECloudDriverQuotaException = class( ECloudDriverException );
ECloudDriverPermissionException = class( ECloudDriverException );
ECloudDriverRateLimitException = class( ECloudDriverException );

View file

@ -167,7 +167,20 @@ var
if (httpResult.resultCode>=200) and (httpResult.resultCode<=299) then
Exit;
raise ECloudDriverException.Create( cloudDriverMessage );
case httpResult.resultCode of
401:
raise ECloudDriverTokenException.Create( cloudDriverMessage );
403, 507:
raise ECloudDriverQuotaException.Create( cloudDriverMessage );
404:
raise EFileNotFoundException.Create( cloudDriverMessage );
409:
raise ECloudDriverConflictException.Create( cloudDriverMessage );
429:
raise ECloudDriverRateLimitException.Create( cloudDriverMessage );
else
raise ECloudDriverException.Create( cloudDriverMessage );
end;
end;
procedure logException( const e: Exception );

View file

@ -166,6 +166,8 @@ begin
Result:= FS_FILE_NOTFOUND
else if e is EInOutError then
Result:= FS_FILE_WRITEERROR
else if e is ECloudDriverConflictException then
Result:= FS_FILE_EXISTS
else
Result:= FS_FILE_NOTSUPPORTED;
end;