mirror of
https://github.com/nextcloud/android.git
synced 2024-11-29 10:49:04 +03:00
FileUploader: require explicit NameCollisionPolicy and change default used value
- Changes NameConflictPolicy for manual uploads from default RENAME to ASK_USER - Removal of helper class FileUploader.UploadRequester (methods become static and go to FileUploader) Signed-off-by: Alice Gaudon <alice@gaudon.pro>
This commit is contained in:
parent
6783e8ab4c
commit
7713a28a4f
12 changed files with 284 additions and 337 deletions
|
@ -37,6 +37,7 @@ import android.content.Context;
|
|||
import android.content.Intent;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.os.Binder;
|
||||
import android.os.Build;
|
||||
import android.os.Handler;
|
||||
import android.os.HandlerThread;
|
||||
import android.os.IBinder;
|
||||
|
@ -124,10 +125,6 @@ public class FileUploader extends Service
|
|||
public static final String KEY_REMOTE_FILE = "REMOTE_FILE";
|
||||
public static final String KEY_MIME_TYPE = "MIME_TYPE";
|
||||
|
||||
private Notification mNotification;
|
||||
|
||||
@Inject UserAccountManager accountManager;
|
||||
|
||||
/**
|
||||
* Call this Service with only this Intent key if all pending uploads are to be retried.
|
||||
*/
|
||||
|
@ -175,13 +172,16 @@ public class FileUploader extends Service
|
|||
public static final int LOCAL_BEHAVIOUR_FORGET = 2;
|
||||
public static final int LOCAL_BEHAVIOUR_DELETE = 3;
|
||||
|
||||
|
||||
private Notification mNotification;
|
||||
private Looper mServiceLooper;
|
||||
private ServiceHandler mServiceHandler;
|
||||
private IBinder mBinder;
|
||||
private OwnCloudClient mUploadClient;
|
||||
private Account mCurrentAccount;
|
||||
private FileDataStorageManager mStorageManager;
|
||||
//since there can be only one instance of an Android service, there also just one db connection.
|
||||
|
||||
@Inject UserAccountManager accountManager;
|
||||
@Inject UploadsStorageManager mUploadsStorageManager;
|
||||
@Inject ConnectivityService connectivityService;
|
||||
@Inject PowerManagementService powerManagementService;
|
||||
|
@ -189,7 +189,8 @@ public class FileUploader extends Service
|
|||
private IndexedForest<UploadFileOperation> mPendingUploads = new IndexedForest<>();
|
||||
|
||||
/**
|
||||
* {@link UploadFileOperation} object of ongoing upload. Can be null. Note: There can only be one concurrent upload!
|
||||
* {@link UploadFileOperation} object of ongoing upload. Can be null. Note: There can only be one concurrent
|
||||
* upload!
|
||||
*/
|
||||
private UploadFileOperation mCurrentUpload;
|
||||
|
||||
|
@ -197,17 +198,6 @@ public class FileUploader extends Service
|
|||
private NotificationCompat.Builder mNotificationBuilder;
|
||||
private int mLastPercent;
|
||||
|
||||
public static String getUploadsAddedMessage() {
|
||||
return FileUploader.class.getName() + UPLOADS_ADDED_MESSAGE;
|
||||
}
|
||||
|
||||
public static String getUploadStartMessage() {
|
||||
return FileUploader.class.getName() + UPLOAD_START_MESSAGE;
|
||||
}
|
||||
|
||||
public static String getUploadFinishMessage() {
|
||||
return FileUploader.class.getName() + UPLOAD_FINISH_MESSAGE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRenameUpload() {
|
||||
|
@ -215,249 +205,6 @@ public class FileUploader extends Service
|
|||
sendBroadcastUploadStarted(mCurrentUpload);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper class providing methods to ease requesting commands to {@link FileUploader} .
|
||||
*
|
||||
* Avoids the need of checking once and again what extras are needed or optional
|
||||
* in the {@link Intent} to pass to {@link Context#startService(Intent)}.
|
||||
*/
|
||||
public static class UploadRequester {
|
||||
|
||||
/**
|
||||
* Call to upload several new files
|
||||
*/
|
||||
public void uploadNewFile(
|
||||
Context context,
|
||||
Account account,
|
||||
String[] localPaths,
|
||||
String[] remotePaths,
|
||||
String[] mimeTypes,
|
||||
Integer behaviour,
|
||||
Boolean createRemoteFolder,
|
||||
int createdBy,
|
||||
boolean requiresWifi,
|
||||
boolean requiresCharging
|
||||
) {
|
||||
Intent intent = new Intent(context, FileUploader.class);
|
||||
|
||||
intent.putExtra(FileUploader.KEY_ACCOUNT, account);
|
||||
intent.putExtra(FileUploader.KEY_LOCAL_FILE, localPaths);
|
||||
intent.putExtra(FileUploader.KEY_REMOTE_FILE, remotePaths);
|
||||
intent.putExtra(FileUploader.KEY_MIME_TYPE, mimeTypes);
|
||||
intent.putExtra(FileUploader.KEY_LOCAL_BEHAVIOUR, behaviour);
|
||||
intent.putExtra(FileUploader.KEY_CREATE_REMOTE_FOLDER, createRemoteFolder);
|
||||
intent.putExtra(FileUploader.KEY_CREATED_BY, createdBy);
|
||||
intent.putExtra(FileUploader.KEY_WHILE_ON_WIFI_ONLY, requiresWifi);
|
||||
intent.putExtra(FileUploader.KEY_WHILE_CHARGING_ONLY, requiresCharging);
|
||||
|
||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
|
||||
context.startForegroundService(intent);
|
||||
} else {
|
||||
context.startService(intent);
|
||||
}
|
||||
}
|
||||
|
||||
public void uploadFileWithNameCollisionPolicy(
|
||||
Context context,
|
||||
Account account,
|
||||
String[] localPaths,
|
||||
String[] remotePaths,
|
||||
String[] mimeTypes,
|
||||
Integer behaviour,
|
||||
Boolean createRemoteFolder,
|
||||
int createdBy,
|
||||
boolean requiresWifi,
|
||||
boolean requiresCharging,
|
||||
NameCollisionPolicy nameCollisionPolicy
|
||||
) {
|
||||
Intent intent = new Intent(context, FileUploader.class);
|
||||
|
||||
intent.putExtra(FileUploader.KEY_ACCOUNT, account);
|
||||
intent.putExtra(FileUploader.KEY_LOCAL_FILE, localPaths);
|
||||
intent.putExtra(FileUploader.KEY_REMOTE_FILE, remotePaths);
|
||||
intent.putExtra(FileUploader.KEY_MIME_TYPE, mimeTypes);
|
||||
intent.putExtra(FileUploader.KEY_LOCAL_BEHAVIOUR, behaviour);
|
||||
intent.putExtra(FileUploader.KEY_CREATE_REMOTE_FOLDER, createRemoteFolder);
|
||||
intent.putExtra(FileUploader.KEY_CREATED_BY, createdBy);
|
||||
intent.putExtra(FileUploader.KEY_WHILE_ON_WIFI_ONLY, requiresWifi);
|
||||
intent.putExtra(FileUploader.KEY_WHILE_CHARGING_ONLY, requiresCharging);
|
||||
intent.putExtra(FileUploader.KEY_NAME_COLLISION_POLICY, nameCollisionPolicy);
|
||||
|
||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
|
||||
context.startForegroundService(intent);
|
||||
} else {
|
||||
context.startService(intent);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Call to upload a file
|
||||
*/
|
||||
public void uploadFileWithNameCollisionPolicy(Context context, Account account, String localPath, String remotePath, int
|
||||
behaviour, String mimeType, boolean createRemoteFile, int createdBy, boolean requiresWifi,
|
||||
boolean requiresCharging, NameCollisionPolicy nameCollisionPolicy) {
|
||||
|
||||
uploadFileWithNameCollisionPolicy(
|
||||
context,
|
||||
account,
|
||||
new String[]{localPath},
|
||||
new String[]{remotePath},
|
||||
new String[]{mimeType},
|
||||
behaviour,
|
||||
createRemoteFile,
|
||||
createdBy,
|
||||
requiresWifi,
|
||||
requiresCharging,
|
||||
nameCollisionPolicy
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Call to upload a new single file
|
||||
*/
|
||||
public void uploadNewFile(Context context, Account account, String localPath, String remotePath, int
|
||||
behaviour, String mimeType, boolean createRemoteFile, int createdBy, boolean requiresWifi,
|
||||
boolean requiresCharging) {
|
||||
|
||||
uploadNewFile(
|
||||
context,
|
||||
account,
|
||||
new String[]{localPath},
|
||||
new String[]{remotePath},
|
||||
new String[]{mimeType},
|
||||
behaviour,
|
||||
createRemoteFile,
|
||||
createdBy,
|
||||
requiresWifi,
|
||||
requiresCharging
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Call to update multiple files already uploaded
|
||||
*/
|
||||
public void uploadUpdate(Context context, Account account, OCFile[] existingFiles, Integer behaviour,
|
||||
NameCollisionPolicy nameCollisionPolicy) {
|
||||
Intent intent = new Intent(context, FileUploader.class);
|
||||
|
||||
intent.putExtra(FileUploader.KEY_ACCOUNT, account);
|
||||
intent.putExtra(FileUploader.KEY_FILE, existingFiles);
|
||||
intent.putExtra(FileUploader.KEY_LOCAL_BEHAVIOUR, behaviour);
|
||||
intent.putExtra(FileUploader.KEY_NAME_COLLISION_POLICY, nameCollisionPolicy);
|
||||
|
||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
|
||||
context.startForegroundService(intent);
|
||||
} else {
|
||||
context.startService(intent);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Call to update a dingle file already uploaded
|
||||
*/
|
||||
public void uploadUpdate(Context context, Account account, OCFile existingFile, Integer behaviour,
|
||||
NameCollisionPolicy nameCollisionPolicy) {
|
||||
|
||||
uploadUpdate(context, account, new OCFile[]{existingFile}, behaviour, nameCollisionPolicy);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Call to retry upload identified by remotePath
|
||||
*/
|
||||
public void retry (Context context, UserAccountManager accountManager, OCUpload upload) {
|
||||
if (upload != null && context != null) {
|
||||
Account account = accountManager.getAccountByName(upload.getAccountName());
|
||||
retry(context, account, upload);
|
||||
} else {
|
||||
throw new IllegalArgumentException("Null parameter!");
|
||||
}
|
||||
}
|
||||
|
||||
private boolean checkIfUploadCanBeRetried(OCUpload ocUpload, boolean gotWifi, boolean isCharging) {
|
||||
boolean needsWifi = ocUpload.isUseWifiOnly();
|
||||
boolean needsCharging = ocUpload.isWhileChargingOnly();
|
||||
|
||||
return new File(ocUpload.getLocalPath()).exists() && !(needsCharging && !isCharging) &&
|
||||
!(needsWifi && !gotWifi);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 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
|
||||
) {
|
||||
OCUpload[] failedUploads = uploadsStorageManager.getFailedUploads();
|
||||
Account currentAccount = null;
|
||||
boolean resultMatch;
|
||||
boolean accountMatch;
|
||||
|
||||
boolean gotNetwork = connectivityService.getActiveNetworkType() != JobRequest.NetworkType.ANY &&
|
||||
!connectivityService.isInternetWalled();
|
||||
boolean gotWifi = gotNetwork && Device.getNetworkType(context).equals(JobRequest.NetworkType.UNMETERED);
|
||||
boolean charging = Device.getBatteryStatus(context).isCharging();
|
||||
boolean isPowerSaving = powerManagementService.isPowerSavingEnabled();
|
||||
|
||||
for ( OCUpload failedUpload: failedUploads) {
|
||||
accountMatch = account == null || account.name.equals(failedUpload.getAccountName());
|
||||
resultMatch = uploadResult == null || uploadResult.equals(failedUpload.getLastResult());
|
||||
if (accountMatch && resultMatch) {
|
||||
if (currentAccount == null || !currentAccount.name.equals(failedUpload.getAccountName())) {
|
||||
currentAccount = failedUpload.getAccount(accountManager);
|
||||
}
|
||||
|
||||
if (!new File(failedUpload.getLocalPath()).exists()) {
|
||||
if (!failedUpload.getLastResult().equals(UploadResult.FILE_NOT_FOUND)) {
|
||||
failedUpload.setLastResult(UploadResult.FILE_NOT_FOUND);
|
||||
uploadsStorageManager.updateUpload(failedUpload);
|
||||
}
|
||||
} else {
|
||||
charging = charging || Device.getBatteryStatus(context).getBatteryPercent() == 1;
|
||||
if (!isPowerSaving && gotNetwork && checkIfUploadCanBeRetried(failedUpload, gotWifi, charging)) {
|
||||
retry(context, currentAccount, failedUpload);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Private implementation of retry.
|
||||
*
|
||||
* @param context
|
||||
* @param account
|
||||
* @param upload
|
||||
*/
|
||||
private void retry(Context context, Account account, OCUpload upload) {
|
||||
if (upload != null) {
|
||||
Intent i = new Intent(context, FileUploader.class);
|
||||
i.putExtra(FileUploader.KEY_RETRY, true);
|
||||
i.putExtra(FileUploader.KEY_ACCOUNT, account);
|
||||
i.putExtra(FileUploader.KEY_RETRY_UPLOAD, upload);
|
||||
|
||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
|
||||
context.startForegroundService(i);
|
||||
} else {
|
||||
context.startService(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Service initialization
|
||||
*/
|
||||
|
@ -1359,13 +1106,207 @@ public class FileUploader extends Service
|
|||
/**
|
||||
* Remove and 'forgets' pending uploads of an account.
|
||||
*
|
||||
* @param account Account which uploads will be cancelled
|
||||
* @param account Account which uploads will be cancelled
|
||||
*/
|
||||
private void cancelUploadsForAccount(Account account) {
|
||||
mPendingUploads.remove(account.name);
|
||||
mUploadsStorageManager.removeUploads(account.name);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Upload a new file
|
||||
*/
|
||||
public static void uploadNewFile(
|
||||
Context context,
|
||||
Account account,
|
||||
String localPath,
|
||||
String remotePath,
|
||||
int behaviour,
|
||||
String mimeType,
|
||||
boolean createRemoteFile,
|
||||
int createdBy,
|
||||
boolean requiresWifi,
|
||||
boolean requiresCharging,
|
||||
NameCollisionPolicy nameCollisionPolicy
|
||||
) {
|
||||
uploadNewFile(
|
||||
context,
|
||||
account,
|
||||
new String[]{localPath},
|
||||
new String[]{remotePath},
|
||||
new String[]{mimeType},
|
||||
behaviour,
|
||||
createRemoteFile,
|
||||
createdBy,
|
||||
requiresWifi,
|
||||
requiresCharging,
|
||||
nameCollisionPolicy
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Upload multiple new files
|
||||
*/
|
||||
public static void uploadNewFile(
|
||||
Context context,
|
||||
Account account,
|
||||
String[] localPaths,
|
||||
String[] remotePaths,
|
||||
String[] mimeTypes,
|
||||
Integer behaviour,
|
||||
Boolean createRemoteFolder,
|
||||
int createdBy,
|
||||
boolean requiresWifi,
|
||||
boolean requiresCharging,
|
||||
NameCollisionPolicy nameCollisionPolicy
|
||||
) {
|
||||
Intent intent = new Intent(context, FileUploader.class);
|
||||
|
||||
intent.putExtra(FileUploader.KEY_ACCOUNT, account);
|
||||
intent.putExtra(FileUploader.KEY_LOCAL_FILE, localPaths);
|
||||
intent.putExtra(FileUploader.KEY_REMOTE_FILE, remotePaths);
|
||||
intent.putExtra(FileUploader.KEY_MIME_TYPE, mimeTypes);
|
||||
intent.putExtra(FileUploader.KEY_LOCAL_BEHAVIOUR, behaviour);
|
||||
intent.putExtra(FileUploader.KEY_CREATE_REMOTE_FOLDER, createRemoteFolder);
|
||||
intent.putExtra(FileUploader.KEY_CREATED_BY, createdBy);
|
||||
intent.putExtra(FileUploader.KEY_WHILE_ON_WIFI_ONLY, requiresWifi);
|
||||
intent.putExtra(FileUploader.KEY_WHILE_CHARGING_ONLY, requiresCharging);
|
||||
intent.putExtra(FileUploader.KEY_NAME_COLLISION_POLICY, nameCollisionPolicy);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
context.startForegroundService(intent);
|
||||
} else {
|
||||
context.startService(intent);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Upload and overwrite an already uploaded file
|
||||
*/
|
||||
public static void uploadUpdateFile(
|
||||
Context context,
|
||||
Account account,
|
||||
OCFile existingFile,
|
||||
Integer behaviour,
|
||||
NameCollisionPolicy nameCollisionPolicy
|
||||
) {
|
||||
uploadUpdateFile(context, account, new OCFile[]{existingFile}, behaviour, nameCollisionPolicy);
|
||||
}
|
||||
|
||||
/**
|
||||
* Upload and overwrite already uploaded files
|
||||
*/
|
||||
public static void uploadUpdateFile(
|
||||
Context context,
|
||||
Account account,
|
||||
OCFile[] existingFiles,
|
||||
Integer behaviour,
|
||||
NameCollisionPolicy nameCollisionPolicy
|
||||
) {
|
||||
Intent intent = new Intent(context, FileUploader.class);
|
||||
|
||||
intent.putExtra(FileUploader.KEY_ACCOUNT, account);
|
||||
intent.putExtra(FileUploader.KEY_FILE, existingFiles);
|
||||
intent.putExtra(FileUploader.KEY_LOCAL_BEHAVIOUR, behaviour);
|
||||
intent.putExtra(FileUploader.KEY_NAME_COLLISION_POLICY, nameCollisionPolicy);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
context.startForegroundService(intent);
|
||||
} else {
|
||||
context.startService(intent);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Retry a failed {@link OCUpload} identified by {@link OCUpload#getRemotePath()}
|
||||
*/
|
||||
public static void retryUpload(@NonNull Context context, @NonNull Account account, @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_RETRY_UPLOAD, upload);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
context.startForegroundService(i);
|
||||
} else {
|
||||
context.startService(i);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
) {
|
||||
OCUpload[] failedUploads = uploadsStorageManager.getFailedUploads();
|
||||
Account currentAccount = null;
|
||||
boolean resultMatch;
|
||||
boolean accountMatch;
|
||||
|
||||
boolean gotNetwork = connectivityService.getActiveNetworkType() != JobRequest.NetworkType.ANY &&
|
||||
!connectivityService.isInternetWalled();
|
||||
boolean gotWifi = gotNetwork && Device.getNetworkType(context).equals(JobRequest.NetworkType.UNMETERED);
|
||||
boolean charging = Device.getBatteryStatus(context).isCharging();
|
||||
boolean isPowerSaving = powerManagementService.isPowerSavingEnabled();
|
||||
|
||||
for (OCUpload failedUpload : failedUploads) {
|
||||
accountMatch = account == null || account.name.equals(failedUpload.getAccountName());
|
||||
resultMatch = uploadResult == null || uploadResult.equals(failedUpload.getLastResult());
|
||||
if (accountMatch && resultMatch) {
|
||||
if (currentAccount == null || !currentAccount.name.equals(failedUpload.getAccountName())) {
|
||||
currentAccount = failedUpload.getAccount(accountManager);
|
||||
}
|
||||
|
||||
if (!new File(failedUpload.getLocalPath()).exists()) {
|
||||
if (!failedUpload.getLastResult().equals(UploadResult.FILE_NOT_FOUND)) {
|
||||
failedUpload.setLastResult(UploadResult.FILE_NOT_FOUND);
|
||||
uploadsStorageManager.updateUpload(failedUpload);
|
||||
}
|
||||
} else {
|
||||
charging = charging || Device.getBatteryStatus(context).getBatteryPercent() == 1;
|
||||
if (!isPowerSaving && gotNetwork && canUploadBeRetried(failedUpload, gotWifi, charging)) {
|
||||
retryUpload(context, currentAccount, failedUpload);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean canUploadBeRetried(OCUpload upload, boolean gotWifi, boolean isCharging) {
|
||||
File file = new File(upload.getLocalPath());
|
||||
boolean needsWifi = upload.isUseWifiOnly();
|
||||
boolean needsCharging = upload.isWhileChargingOnly();
|
||||
|
||||
return file.exists() && (!needsWifi || gotWifi) && (!needsCharging || isCharging);
|
||||
}
|
||||
|
||||
public static String getUploadsAddedMessage() {
|
||||
return FileUploader.class.getName() + UPLOADS_ADDED_MESSAGE;
|
||||
}
|
||||
|
||||
public static String getUploadStartMessage() {
|
||||
return FileUploader.class.getName() + UPLOAD_START_MESSAGE;
|
||||
}
|
||||
|
||||
public static String getUploadFinishMessage() {
|
||||
return FileUploader.class.getName() + UPLOAD_FINISH_MESSAGE;
|
||||
}
|
||||
|
||||
|
||||
public enum NameCollisionPolicy {
|
||||
CANCEL,
|
||||
RENAME,
|
||||
|
|
|
@ -169,18 +169,18 @@ public class ContactsBackupJob extends Job {
|
|||
}
|
||||
}
|
||||
|
||||
FileUploader.UploadRequester requester = new FileUploader.UploadRequester();
|
||||
requester.uploadNewFile(
|
||||
getContext(),
|
||||
user.toPlatformAccount(),
|
||||
file.getAbsolutePath(),
|
||||
backupFolder + filename,
|
||||
FileUploader.LOCAL_BEHAVIOUR_MOVE,
|
||||
null,
|
||||
true,
|
||||
UploadFileOperation.CREATED_BY_USER,
|
||||
false,
|
||||
false
|
||||
FileUploader.uploadNewFile(
|
||||
getContext(),
|
||||
user.toPlatformAccount(),
|
||||
file.getAbsolutePath(),
|
||||
backupFolder + filename,
|
||||
FileUploader.LOCAL_BEHAVIOUR_MOVE,
|
||||
null,
|
||||
true,
|
||||
UploadFileOperation.CREATED_BY_USER,
|
||||
false,
|
||||
false,
|
||||
FileUploader.NameCollisionPolicy.ASK_USER
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -141,12 +141,11 @@ public class FilesSyncJob extends Job {
|
|||
Locale currentLocale = context.getResources().getConfiguration().locale;
|
||||
SimpleDateFormat sFormatter = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss", currentLocale);
|
||||
sFormatter.setTimeZone(TimeZone.getTimeZone(TimeZone.getDefault().getID()));
|
||||
FileUploader.UploadRequester requester = new FileUploader.UploadRequester();
|
||||
|
||||
for (SyncedFolder syncedFolder : syncedFolderProvider.getSyncedFolders()) {
|
||||
if ((syncedFolder.isEnabled()) && (!skipCustom || MediaFolderType.CUSTOM != syncedFolder.getType())) {
|
||||
syncFolder(context, resources, lightVersion, filesystemDataProvider, currentLocale, sFormatter,
|
||||
requester, syncedFolder);
|
||||
syncedFolder);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -157,10 +156,15 @@ public class FilesSyncJob extends Job {
|
|||
return Result.SUCCESS;
|
||||
}
|
||||
|
||||
private void syncFolder(Context context, Resources resources, boolean lightVersion,
|
||||
FilesystemDataProvider filesystemDataProvider, Locale currentLocale,
|
||||
SimpleDateFormat sFormatter, FileUploader.UploadRequester requester,
|
||||
SyncedFolder syncedFolder) {
|
||||
private void syncFolder(
|
||||
Context context,
|
||||
Resources resources,
|
||||
boolean lightVersion,
|
||||
FilesystemDataProvider filesystemDataProvider,
|
||||
Locale currentLocale,
|
||||
SimpleDateFormat sFormatter,
|
||||
SyncedFolder syncedFolder
|
||||
) {
|
||||
String remotePath;
|
||||
boolean subfolderByDate;
|
||||
Integer uploadAction;
|
||||
|
@ -203,7 +207,7 @@ public class FilesSyncJob extends Job {
|
|||
remotePath = syncedFolder.getRemotePath();
|
||||
}
|
||||
|
||||
requester.uploadFileWithNameCollisionPolicy(
|
||||
FileUploader.uploadNewFile(
|
||||
context,
|
||||
user.toPlatformAccount(),
|
||||
file.getAbsolutePath(),
|
||||
|
|
|
@ -291,9 +291,13 @@ public class SynchronizeFileOperation extends SyncOperation {
|
|||
* @param file OCFile object representing the file to upload
|
||||
*/
|
||||
private void requestForUpload(OCFile file) {
|
||||
FileUploader.UploadRequester requester = new FileUploader.UploadRequester();
|
||||
requester.uploadUpdate(mContext, mAccount, file, FileUploader.LOCAL_BEHAVIOUR_MOVE,
|
||||
FileUploader.NameCollisionPolicy.ASK_USER);
|
||||
FileUploader.uploadUpdateFile(
|
||||
mContext,
|
||||
mAccount,
|
||||
file,
|
||||
FileUploader.LOCAL_BEHAVIOUR_MOVE,
|
||||
FileUploader.NameCollisionPolicy.ASK_USER
|
||||
);
|
||||
|
||||
mTransferWasRequested = true;
|
||||
}
|
||||
|
|
|
@ -82,7 +82,6 @@ public class ConflictsResolveActivity extends FileActivity implements OnConflict
|
|||
}
|
||||
|
||||
OCFile file = getFile();
|
||||
FileUploader.UploadRequester uploadRequester = new FileUploader.UploadRequester();
|
||||
|
||||
// Upload
|
||||
if (decision == Decision.KEEP_LOCAL || decision == Decision.KEEP_BOTH) {
|
||||
|
@ -91,7 +90,7 @@ public class ConflictsResolveActivity extends FileActivity implements OnConflict
|
|||
collisionPolicy = FileUploader.NameCollisionPolicy.RENAME;
|
||||
}
|
||||
|
||||
uploadRequester.uploadUpdate(this, getAccount(), file, localBehaviour, collisionPolicy);
|
||||
FileUploader.uploadUpdateFile(this, getAccount(), file, localBehaviour, collisionPolicy);
|
||||
|
||||
if (this.conflictUpload != null) {
|
||||
uploadsStorageManager.removeUpload(this.conflictUpload);
|
||||
|
|
|
@ -1043,8 +1043,7 @@ public class FileDisplayActivity extends FileActivity
|
|||
break;
|
||||
}
|
||||
|
||||
FileUploader.UploadRequester requester = new FileUploader.UploadRequester();
|
||||
requester.uploadNewFile(
|
||||
FileUploader.uploadNewFile(
|
||||
this,
|
||||
getAccount(),
|
||||
filePaths,
|
||||
|
@ -1054,7 +1053,8 @@ public class FileDisplayActivity extends FileActivity
|
|||
false, // do not create parent folder if not existent
|
||||
UploadFileOperation.CREATED_BY_USER,
|
||||
false,
|
||||
false
|
||||
false,
|
||||
FileUploader.NameCollisionPolicy.ASK_USER
|
||||
);
|
||||
|
||||
} else {
|
||||
|
|
|
@ -888,19 +888,19 @@ public class ReceiveExternalFilesActivity extends FileActivity
|
|||
}
|
||||
|
||||
public void uploadFile(String tmpName, String filename) {
|
||||
FileUploader.UploadRequester requester = new FileUploader.UploadRequester();
|
||||
requester.uploadNewFile(
|
||||
FileUploader.uploadNewFile(
|
||||
getBaseContext(),
|
||||
getAccount(),
|
||||
tmpName,
|
||||
tmpName,
|
||||
mFile.getRemotePath() + filename,
|
||||
FileUploader.LOCAL_BEHAVIOUR_COPY,
|
||||
null,
|
||||
true,
|
||||
UploadFileOperation.CREATED_BY_USER,
|
||||
false,
|
||||
false
|
||||
);
|
||||
false,
|
||||
FileUploader.NameCollisionPolicy.ASK_USER
|
||||
);
|
||||
finish();
|
||||
}
|
||||
|
||||
|
|
|
@ -220,14 +220,15 @@ public class UploadListActivity extends FileActivity {
|
|||
}
|
||||
|
||||
// retry failed uploads
|
||||
FileUploader.UploadRequester requester = new FileUploader.UploadRequester();
|
||||
new Thread(() -> requester.retryFailedUploads(this,
|
||||
null,
|
||||
uploadsStorageManager,
|
||||
connectivityService,
|
||||
userAccountManager,
|
||||
powerManagementService,
|
||||
null)).start();
|
||||
new Thread(() -> FileUploader.retryFailedUploads(
|
||||
this,
|
||||
null,
|
||||
uploadsStorageManager,
|
||||
connectivityService,
|
||||
userAccountManager,
|
||||
powerManagementService,
|
||||
null
|
||||
)).start();
|
||||
|
||||
// update UI
|
||||
uploadListAdapter.loadUploadItemsFromDb();
|
||||
|
|
|
@ -142,16 +142,15 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
|
|||
uploadsStorageManager.clearSuccessfulUploads();
|
||||
break;
|
||||
case FAILED:
|
||||
new Thread(() -> new FileUploader.UploadRequester()
|
||||
.retryFailedUploads(
|
||||
parentActivity,
|
||||
null,
|
||||
uploadsStorageManager,
|
||||
connectivityService,
|
||||
accountManager,
|
||||
powerManagementService,
|
||||
null))
|
||||
.start();
|
||||
new Thread(() -> FileUploader.retryFailedUploads(
|
||||
parentActivity,
|
||||
null,
|
||||
uploadsStorageManager,
|
||||
connectivityService,
|
||||
accountManager,
|
||||
powerManagementService,
|
||||
null
|
||||
)).start();
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -394,8 +393,7 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
|
|||
// not a credentials error
|
||||
File file = new File(item.getLocalPath());
|
||||
if (file.exists()) {
|
||||
FileUploader.UploadRequester requester = new FileUploader.UploadRequester();
|
||||
requester.retry(parentActivity, accountManager, item);
|
||||
FileUploader.retryUpload(parentActivity, item.getAccount(accountManager), item);
|
||||
loadUploadItemsFromDb();
|
||||
} else {
|
||||
DisplayUtils.showSnackMessage(
|
||||
|
|
|
@ -219,8 +219,7 @@ public class CopyAndUploadContentUrisTask extends AsyncTask<Object, Void, Result
|
|||
}
|
||||
|
||||
private void requestUpload(Account account, String localPath, String remotePath, int behaviour, String mimeType) {
|
||||
FileUploader.UploadRequester requester = new FileUploader.UploadRequester();
|
||||
requester.uploadNewFile(
|
||||
FileUploader.uploadNewFile(
|
||||
mAppContext,
|
||||
account,
|
||||
localPath,
|
||||
|
@ -230,7 +229,8 @@ public class CopyAndUploadContentUrisTask extends AsyncTask<Object, Void, Result
|
|||
false, // do not create parent folder if not existent
|
||||
UploadFileOperation.CREATED_BY_USER,
|
||||
false,
|
||||
false
|
||||
false,
|
||||
FileUploader.NameCollisionPolicy.ASK_USER
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -158,18 +158,18 @@ public class UriUploader {
|
|||
* @param remotePath Absolute path in the current OC account to set to the uploaded file.
|
||||
*/
|
||||
private void requestUpload(String localPath, String remotePath) {
|
||||
FileUploader.UploadRequester requester = new FileUploader.UploadRequester();
|
||||
requester.uploadNewFile(
|
||||
mActivity,
|
||||
mAccount,
|
||||
localPath,
|
||||
remotePath,
|
||||
mBehaviour,
|
||||
null, // MIME type will be detected from file name
|
||||
false, // do not create parent folder if not existent
|
||||
UploadFileOperation.CREATED_BY_USER,
|
||||
false,
|
||||
false
|
||||
FileUploader.uploadNewFile(
|
||||
mActivity,
|
||||
mAccount,
|
||||
localPath,
|
||||
remotePath,
|
||||
mBehaviour,
|
||||
null, // MIME type will be detected from file name
|
||||
false, // do not create parent folder if not existent
|
||||
UploadFileOperation.CREATED_BY_USER,
|
||||
false,
|
||||
false,
|
||||
FileUploader.NameCollisionPolicy.ASK_USER
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -196,8 +196,6 @@ public final class FilesSyncHelper {
|
|||
final PowerManagementService powerManagementService) {
|
||||
final Context context = MainApp.getAppContext();
|
||||
|
||||
FileUploader.UploadRequester uploadRequester = new FileUploader.UploadRequester();
|
||||
|
||||
boolean accountExists;
|
||||
|
||||
OCUpload[] failedUploads = uploadsStorageManager.getFailedUploads();
|
||||
|
@ -221,13 +219,15 @@ public final class FilesSyncHelper {
|
|||
new Thread(() -> {
|
||||
if (connectivityService.getActiveNetworkType() != JobRequest.NetworkType.ANY &&
|
||||
!connectivityService.isInternetWalled()) {
|
||||
uploadRequester.retryFailedUploads(context,
|
||||
null,
|
||||
uploadsStorageManager,
|
||||
connectivityService,
|
||||
accountManager,
|
||||
powerManagementService,
|
||||
null);
|
||||
FileUploader.retryFailedUploads(
|
||||
context,
|
||||
null,
|
||||
uploadsStorageManager,
|
||||
connectivityService,
|
||||
accountManager,
|
||||
powerManagementService,
|
||||
null
|
||||
);
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue