|
@@ -468,7 +468,7 @@ public class FileUploader extends Service
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- OCUpload ocUpload = new OCUpload(file, user.toPlatformAccount());
|
|
|
+ OCUpload ocUpload = new OCUpload(file, user);
|
|
|
ocUpload.setFileSize(file.getFileLength());
|
|
|
ocUpload.setNameCollisionPolicy(nameCollisionPolicy);
|
|
|
ocUpload.setCreateRemoteFolder(isCreateRemoteFolder);
|
|
@@ -1055,10 +1055,10 @@ public class FileUploader extends Service
|
|
|
/**
|
|
|
* Retry a failed {@link OCUpload} identified by {@link OCUpload#getRemotePath()}
|
|
|
*/
|
|
|
- public static void retryUpload(@NonNull Context context, @NonNull Account account, @NonNull OCUpload upload) {
|
|
|
+ public static void retryUpload(@NonNull Context context, @NonNull User user, @NonNull OCUpload upload) {
|
|
|
Intent i = new Intent(context, FileUploader.class);
|
|
|
i.putExtra(FileUploader.KEY_RETRY, true);
|
|
|
- i.putExtra(FileUploader.KEY_ACCOUNT, account);
|
|
|
+ i.putExtra(FileUploader.KEY_ACCOUNT, user.toPlatformAccount());
|
|
|
i.putExtra(FileUploader.KEY_RETRY_UPLOAD, upload);
|
|
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
@@ -1070,33 +1070,19 @@ public class FileUploader extends Service
|
|
|
|
|
|
/**
|
|
|
* Retry a subset of all the stored failed uploads.
|
|
|
- *
|
|
|
- * @param context Caller {@link Context}
|
|
|
- * @param account If not null, only failed uploads to this OC account will be retried; otherwise, uploads of
|
|
|
- * all accounts will be retried.
|
|
|
- * @param uploadResult If not null, only failed uploads with the result specified will be retried; otherwise, failed
|
|
|
- * uploads due to any result will be retried.
|
|
|
*/
|
|
|
public static void retryFailedUploads(
|
|
|
@NonNull final Context context,
|
|
|
- @Nullable final Account account,
|
|
|
@NonNull final UploadsStorageManager uploadsStorageManager,
|
|
|
@NonNull final ConnectivityService connectivityService,
|
|
|
@NonNull final UserAccountManager accountManager,
|
|
|
- @NonNull final PowerManagementService powerManagementService,
|
|
|
- @Nullable final UploadResult uploadResult
|
|
|
+ @NonNull final PowerManagementService powerManagementService
|
|
|
) {
|
|
|
OCUpload[] failedUploads = uploadsStorageManager.getFailedUploads();
|
|
|
- if(failedUploads.length == 0)
|
|
|
- {
|
|
|
- //nothing to do
|
|
|
- return;
|
|
|
+ if(failedUploads == null || failedUploads.length == 0) {
|
|
|
+ return; //nothing to do
|
|
|
}
|
|
|
|
|
|
- Account currentAccount = null;
|
|
|
- boolean resultMatch;
|
|
|
- boolean accountMatch;
|
|
|
-
|
|
|
final Connectivity connectivity = connectivityService.getConnectivity();
|
|
|
final boolean gotNetwork = connectivity.isConnected() && !connectivityService.isInternetWalled();
|
|
|
final boolean gotWifi = connectivity.isWifi();
|
|
@@ -1104,27 +1090,22 @@ public class FileUploader extends Service
|
|
|
final boolean charging = batteryStatus.isCharging() || batteryStatus.isFull();
|
|
|
final boolean isPowerSaving = powerManagementService.isPowerSavingEnabled();
|
|
|
|
|
|
+ Optional<User> uploadUser = Optional.empty();
|
|
|
for (OCUpload failedUpload : failedUploads) {
|
|
|
- accountMatch = account == null || account.name.equals(failedUpload.getAccountName());
|
|
|
- resultMatch = uploadResult == null || uploadResult == failedUpload.getLastResult();
|
|
|
- if (accountMatch && resultMatch) {
|
|
|
- // 1. extract failed upload owner account in efficient name (expensive query)
|
|
|
- if (currentAccount == null || !currentAccount.name.equals(failedUpload.getAccountName())) {
|
|
|
- currentAccount = failedUpload.getAccount(accountManager);
|
|
|
- }
|
|
|
-
|
|
|
- if (!new File(failedUpload.getLocalPath()).exists()) {
|
|
|
- // 2A. for deleted files, mark as permanently failed
|
|
|
- if (failedUpload.getLastResult() != UploadResult.FILE_NOT_FOUND) {
|
|
|
- failedUpload.setLastResult(UploadResult.FILE_NOT_FOUND);
|
|
|
- uploadsStorageManager.updateUpload(failedUpload);
|
|
|
- }
|
|
|
- } else {
|
|
|
- // 2B. for existing local files, try restarting it if possible
|
|
|
- if (!isPowerSaving && gotNetwork && canUploadBeRetried(failedUpload, gotWifi, charging)) {
|
|
|
- retryUpload(context, currentAccount, failedUpload);
|
|
|
- }
|
|
|
+ // 1. extract failed upload owner account and cache it between loops (expensive query)
|
|
|
+ if (!uploadUser.isPresent() || !uploadUser.get().nameEquals(failedUpload.getAccountName())) {
|
|
|
+ uploadUser = accountManager.getUser(failedUpload.getAccountName());
|
|
|
+ }
|
|
|
+ final boolean isDeleted = !new File(failedUpload.getLocalPath()).exists();
|
|
|
+ if (isDeleted) {
|
|
|
+ // 2A. for deleted files, mark as permanently failed
|
|
|
+ if (failedUpload.getLastResult() != UploadResult.FILE_NOT_FOUND) {
|
|
|
+ failedUpload.setLastResult(UploadResult.FILE_NOT_FOUND);
|
|
|
+ uploadsStorageManager.updateUpload(failedUpload);
|
|
|
}
|
|
|
+ } else if (!isPowerSaving && gotNetwork && canUploadBeRetried(failedUpload, gotWifi, charging)) {
|
|
|
+ // 2B. for existing local files, try restarting it if possible
|
|
|
+ retryUpload(context, uploadUser.get(), failedUpload);
|
|
|
}
|
|
|
}
|
|
|
}
|