|
@@ -54,7 +54,11 @@ import androidx.annotation.VisibleForTesting;
|
|
|
public class UploadsStorageManager extends Observable {
|
|
|
private static final String TAG = UploadsStorageManager.class.getSimpleName();
|
|
|
|
|
|
+ private static final String IS_EQUAL = "== ?";
|
|
|
+ private static final String EQUAL = "==";
|
|
|
+ private static final String OR = " OR ";
|
|
|
private static final String AND = " AND ";
|
|
|
+ private static final String ANGLE_BRACKETS = "<>";
|
|
|
private static final int SINGLE_RESULT = 1;
|
|
|
|
|
|
private static final long QUERY_PAGE_SIZE = 100;
|
|
@@ -464,11 +468,45 @@ public class UploadsStorageManager extends Observable {
|
|
|
|
|
|
@NonNull
|
|
|
private List<OCUpload> getUploadPage(final long afterId, @Nullable String selection, @Nullable String... selectionArgs) {
|
|
|
- return getUploadPage(afterId, true, selection, selectionArgs);
|
|
|
+ return getUploadPage(QUERY_PAGE_SIZE, afterId, true, selection, selectionArgs);
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getInProgressUploadsSelection() {
|
|
|
+ return "( " + ProviderTableMeta.UPLOADS_STATUS + EQUAL + UploadStatus.UPLOAD_IN_PROGRESS.value +
|
|
|
+ OR + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
+ EQUAL + UploadResult.DELAYED_FOR_WIFI.getValue() +
|
|
|
+ OR + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
+ EQUAL + UploadResult.LOCK_FAILED.getValue() +
|
|
|
+ OR + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
+ EQUAL + UploadResult.DELAYED_FOR_CHARGING.getValue() +
|
|
|
+ OR + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
+ EQUAL + UploadResult.DELAYED_IN_POWER_SAVE_MODE.getValue() +
|
|
|
+ " ) AND " + ProviderTableMeta.UPLOADS_ACCOUNT_NAME + IS_EQUAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ public int getTotalUploadSize(@Nullable String... selectionArgs) {
|
|
|
+ final String selection = getInProgressUploadsSelection();
|
|
|
+ int totalSize = 0;
|
|
|
+
|
|
|
+ Cursor cursor = getDB().query(
|
|
|
+ ProviderTableMeta.CONTENT_URI_UPLOADS,
|
|
|
+ new String[]{"COUNT(*) AS count"},
|
|
|
+ selection,
|
|
|
+ selectionArgs,
|
|
|
+ null);
|
|
|
+
|
|
|
+ if (cursor != null) {
|
|
|
+ if (cursor.moveToFirst()) {
|
|
|
+ totalSize = cursor.getInt(cursor.getColumnIndexOrThrow("count"));
|
|
|
+ }
|
|
|
+ cursor.close();
|
|
|
+ }
|
|
|
+
|
|
|
+ return totalSize;
|
|
|
}
|
|
|
|
|
|
@NonNull
|
|
|
- private List<OCUpload> getUploadPage(final long afterId, final boolean descending, @Nullable String selection, @Nullable String... selectionArgs) {
|
|
|
+ private List<OCUpload> getUploadPage(long limit, final long afterId, final boolean descending, @Nullable String selection, @Nullable String... selectionArgs) {
|
|
|
List<OCUpload> uploads = new ArrayList<>();
|
|
|
String pageSelection = selection;
|
|
|
String[] pageSelectionArgs = selectionArgs;
|
|
@@ -499,13 +537,20 @@ public class UploadsStorageManager extends Observable {
|
|
|
} else {
|
|
|
Log_OC.d(TAG, String.format(Locale.ENGLISH, "QUERY: %s ROWID: %d", selection, afterId));
|
|
|
}
|
|
|
+
|
|
|
+ String sortOrder;
|
|
|
+ if (limit > 0) {
|
|
|
+ sortOrder = String.format(Locale.ENGLISH, "_id " + sortDirection + " LIMIT %d", limit);
|
|
|
+ } else {
|
|
|
+ sortOrder = String.format(Locale.ENGLISH, "_id " + sortDirection);
|
|
|
+ }
|
|
|
+
|
|
|
Cursor c = getDB().query(
|
|
|
ProviderTableMeta.CONTENT_URI_UPLOADS,
|
|
|
null,
|
|
|
pageSelection,
|
|
|
pageSelectionArgs,
|
|
|
- String.format(Locale.ENGLISH, "_id " + sortDirection + " LIMIT %d", QUERY_PAGE_SIZE)
|
|
|
- );
|
|
|
+ sortOrder);
|
|
|
|
|
|
if (c != null) {
|
|
|
if (c.moveToFirst()) {
|
|
@@ -560,17 +605,8 @@ public class UploadsStorageManager extends Observable {
|
|
|
}
|
|
|
|
|
|
public OCUpload[] getCurrentAndPendingUploadsForAccount(final @NonNull String accountName) {
|
|
|
- return getUploads("( " + ProviderTableMeta.UPLOADS_STATUS + "==" + UploadStatus.UPLOAD_IN_PROGRESS.value +
|
|
|
- " OR " + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
- "==" + UploadResult.DELAYED_FOR_WIFI.getValue() +
|
|
|
- " OR " + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
- "==" + UploadResult.LOCK_FAILED.getValue() +
|
|
|
- " OR " + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
- "==" + UploadResult.DELAYED_FOR_CHARGING.getValue() +
|
|
|
- " OR " + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
- "==" + UploadResult.DELAYED_IN_POWER_SAVE_MODE.getValue() +
|
|
|
- " ) AND " + ProviderTableMeta.UPLOADS_ACCOUNT_NAME + "== ?",
|
|
|
- accountName);
|
|
|
+ String inProgressUploadsSelection = getInProgressUploadsSelection();
|
|
|
+ return getUploads(inProgressUploadsSelection, accountName);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -579,76 +615,66 @@ public class UploadsStorageManager extends Observable {
|
|
|
* If <code>afterId</code> is -1, returns the first page
|
|
|
*/
|
|
|
public List<OCUpload> getCurrentAndPendingUploadsForAccountPageAscById(final long afterId, final @NonNull String accountName) {
|
|
|
- final String selection = "( " + ProviderTableMeta.UPLOADS_STATUS + "==" + UploadStatus.UPLOAD_IN_PROGRESS.value +
|
|
|
- " OR " + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
- "==" + UploadResult.DELAYED_FOR_WIFI.getValue() +
|
|
|
- " OR " + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
- "==" + UploadResult.LOCK_FAILED.getValue() +
|
|
|
- " OR " + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
- "==" + UploadResult.DELAYED_FOR_CHARGING.getValue() +
|
|
|
- " OR " + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
- "==" + UploadResult.DELAYED_IN_POWER_SAVE_MODE.getValue() +
|
|
|
- " ) AND " + ProviderTableMeta.UPLOADS_ACCOUNT_NAME + "== ?";
|
|
|
- return getUploadPage(afterId, false, selection, accountName);
|
|
|
+ final String selection = getInProgressUploadsSelection();
|
|
|
+ return getUploadPage(QUERY_PAGE_SIZE, afterId, false, selection, accountName);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Get all failed uploads.
|
|
|
*/
|
|
|
public OCUpload[] getFailedUploads() {
|
|
|
- return getUploads("(" + ProviderTableMeta.UPLOADS_STATUS + "== ?" +
|
|
|
- " OR " + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
- "==" + UploadResult.DELAYED_FOR_WIFI.getValue() +
|
|
|
- " OR " + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
- "==" + UploadResult.LOCK_FAILED.getValue() +
|
|
|
- " OR " + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
- "==" + UploadResult.DELAYED_FOR_CHARGING.getValue() +
|
|
|
- " OR " + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
- "==" + UploadResult.DELAYED_IN_POWER_SAVE_MODE.getValue() +
|
|
|
+ return getUploads("(" + ProviderTableMeta.UPLOADS_STATUS + IS_EQUAL +
|
|
|
+ OR + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
+ EQUAL + UploadResult.DELAYED_FOR_WIFI.getValue() +
|
|
|
+ OR + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
+ EQUAL + UploadResult.LOCK_FAILED.getValue() +
|
|
|
+ OR + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
+ EQUAL + UploadResult.DELAYED_FOR_CHARGING.getValue() +
|
|
|
+ OR + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
+ EQUAL + UploadResult.DELAYED_IN_POWER_SAVE_MODE.getValue() +
|
|
|
" ) AND " + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
"!= " + UploadResult.VIRUS_DETECTED.getValue()
|
|
|
, String.valueOf(UploadStatus.UPLOAD_FAILED.value));
|
|
|
}
|
|
|
|
|
|
public OCUpload[] getUploadsForAccount(final @NonNull String accountName) {
|
|
|
- return getUploads(ProviderTableMeta.UPLOADS_ACCOUNT_NAME + "== ?", accountName);
|
|
|
+ return getUploads(ProviderTableMeta.UPLOADS_ACCOUNT_NAME + IS_EQUAL, accountName);
|
|
|
}
|
|
|
|
|
|
public OCUpload[] getFinishedUploadsForCurrentAccount() {
|
|
|
User user = currentAccountProvider.getUser();
|
|
|
|
|
|
- return getUploads(ProviderTableMeta.UPLOADS_STATUS + "==" + UploadStatus.UPLOAD_SUCCEEDED.value + AND +
|
|
|
- ProviderTableMeta.UPLOADS_ACCOUNT_NAME + "== ?", user.getAccountName());
|
|
|
+ return getUploads(ProviderTableMeta.UPLOADS_STATUS + EQUAL + UploadStatus.UPLOAD_SUCCEEDED.value + AND +
|
|
|
+ ProviderTableMeta.UPLOADS_ACCOUNT_NAME + IS_EQUAL, user.getAccountName());
|
|
|
}
|
|
|
|
|
|
public OCUpload[] getCancelledUploadsForCurrentAccount() {
|
|
|
User user = currentAccountProvider.getUser();
|
|
|
|
|
|
- return getUploads(ProviderTableMeta.UPLOADS_STATUS + "==" + UploadStatus.UPLOAD_CANCELLED.value + AND +
|
|
|
- ProviderTableMeta.UPLOADS_ACCOUNT_NAME + "== ?", user.getAccountName());
|
|
|
+ return getUploads(ProviderTableMeta.UPLOADS_STATUS + EQUAL + UploadStatus.UPLOAD_CANCELLED.value + AND +
|
|
|
+ ProviderTableMeta.UPLOADS_ACCOUNT_NAME + IS_EQUAL, user.getAccountName());
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Get all uploads which where successfully completed.
|
|
|
*/
|
|
|
public OCUpload[] getFinishedUploads() {
|
|
|
-
|
|
|
- return getUploads(ProviderTableMeta.UPLOADS_STATUS + "==" + UploadStatus.UPLOAD_SUCCEEDED.value, (String[]) null);
|
|
|
+ return getUploads(ProviderTableMeta.UPLOADS_STATUS + EQUAL + UploadStatus.UPLOAD_SUCCEEDED.value, (String[]) null);
|
|
|
}
|
|
|
|
|
|
public OCUpload[] getFailedButNotDelayedUploadsForCurrentAccount() {
|
|
|
User user = currentAccountProvider.getUser();
|
|
|
|
|
|
- return getUploads(ProviderTableMeta.UPLOADS_STATUS + "==" + UploadStatus.UPLOAD_FAILED.value +
|
|
|
+ return getUploads(ProviderTableMeta.UPLOADS_STATUS + EQUAL + UploadStatus.UPLOAD_FAILED.value +
|
|
|
AND + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
- "<>" + UploadResult.DELAYED_FOR_WIFI.getValue() +
|
|
|
+ ANGLE_BRACKETS + UploadResult.DELAYED_FOR_WIFI.getValue() +
|
|
|
AND + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
- "<>" + UploadResult.LOCK_FAILED.getValue() +
|
|
|
+ ANGLE_BRACKETS + UploadResult.LOCK_FAILED.getValue() +
|
|
|
AND + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
- "<>" + UploadResult.DELAYED_FOR_CHARGING.getValue() +
|
|
|
+ ANGLE_BRACKETS + UploadResult.DELAYED_FOR_CHARGING.getValue() +
|
|
|
AND + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
- "<>" + UploadResult.DELAYED_IN_POWER_SAVE_MODE.getValue() +
|
|
|
- AND + ProviderTableMeta.UPLOADS_ACCOUNT_NAME + "== ?",
|
|
|
+ ANGLE_BRACKETS + UploadResult.DELAYED_IN_POWER_SAVE_MODE.getValue() +
|
|
|
+ AND + ProviderTableMeta.UPLOADS_ACCOUNT_NAME + IS_EQUAL,
|
|
|
user.getAccountName());
|
|
|
}
|
|
|
|
|
@@ -659,14 +685,14 @@ public class UploadsStorageManager extends Observable {
|
|
|
*/
|
|
|
public OCUpload[] getFailedButNotDelayedUploads() {
|
|
|
|
|
|
- return getUploads(ProviderTableMeta.UPLOADS_STATUS + "==" + UploadStatus.UPLOAD_FAILED.value + AND +
|
|
|
- ProviderTableMeta.UPLOADS_LAST_RESULT + "<>" + UploadResult.LOCK_FAILED.getValue() +
|
|
|
+ return getUploads(ProviderTableMeta.UPLOADS_STATUS + EQUAL + UploadStatus.UPLOAD_FAILED.value + AND +
|
|
|
+ ProviderTableMeta.UPLOADS_LAST_RESULT + ANGLE_BRACKETS + UploadResult.LOCK_FAILED.getValue() +
|
|
|
AND + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
- "<>" + UploadResult.DELAYED_FOR_WIFI.getValue() +
|
|
|
+ ANGLE_BRACKETS + UploadResult.DELAYED_FOR_WIFI.getValue() +
|
|
|
AND + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
- "<>" + UploadResult.DELAYED_FOR_CHARGING.getValue() +
|
|
|
+ ANGLE_BRACKETS + UploadResult.DELAYED_FOR_CHARGING.getValue() +
|
|
|
AND + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
- "<>" + UploadResult.DELAYED_IN_POWER_SAVE_MODE.getValue(),
|
|
|
+ ANGLE_BRACKETS + UploadResult.DELAYED_IN_POWER_SAVE_MODE.getValue(),
|
|
|
(String[]) null
|
|
|
);
|
|
|
}
|
|
@@ -679,16 +705,16 @@ public class UploadsStorageManager extends Observable {
|
|
|
User user = currentAccountProvider.getUser();
|
|
|
final long deleted = getDB().delete(
|
|
|
ProviderTableMeta.CONTENT_URI_UPLOADS,
|
|
|
- ProviderTableMeta.UPLOADS_STATUS + "==" + UploadStatus.UPLOAD_FAILED.value +
|
|
|
+ ProviderTableMeta.UPLOADS_STATUS + EQUAL + UploadStatus.UPLOAD_FAILED.value +
|
|
|
AND + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
- "<>" + UploadResult.LOCK_FAILED.getValue() +
|
|
|
+ ANGLE_BRACKETS + UploadResult.LOCK_FAILED.getValue() +
|
|
|
AND + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
- "<>" + UploadResult.DELAYED_FOR_WIFI.getValue() +
|
|
|
+ ANGLE_BRACKETS + UploadResult.DELAYED_FOR_WIFI.getValue() +
|
|
|
AND + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
- "<>" + UploadResult.DELAYED_FOR_CHARGING.getValue() +
|
|
|
+ ANGLE_BRACKETS + UploadResult.DELAYED_FOR_CHARGING.getValue() +
|
|
|
AND + ProviderTableMeta.UPLOADS_LAST_RESULT +
|
|
|
- "<>" + UploadResult.DELAYED_IN_POWER_SAVE_MODE.getValue() +
|
|
|
- AND + ProviderTableMeta.UPLOADS_ACCOUNT_NAME + "== ?",
|
|
|
+ ANGLE_BRACKETS + UploadResult.DELAYED_IN_POWER_SAVE_MODE.getValue() +
|
|
|
+ AND + ProviderTableMeta.UPLOADS_ACCOUNT_NAME + IS_EQUAL,
|
|
|
new String[]{user.getAccountName()}
|
|
|
);
|
|
|
Log_OC.d(TAG, "delete all failed uploads but those delayed for Wifi");
|
|
@@ -702,8 +728,8 @@ public class UploadsStorageManager extends Observable {
|
|
|
User user = currentAccountProvider.getUser();
|
|
|
final long deleted = getDB().delete(
|
|
|
ProviderTableMeta.CONTENT_URI_UPLOADS,
|
|
|
- ProviderTableMeta.UPLOADS_STATUS + "==" + UploadStatus.UPLOAD_CANCELLED.value + AND +
|
|
|
- ProviderTableMeta.UPLOADS_ACCOUNT_NAME + "== ?", new String[]{user.getAccountName()}
|
|
|
+ ProviderTableMeta.UPLOADS_STATUS + EQUAL + UploadStatus.UPLOAD_CANCELLED.value + AND +
|
|
|
+ ProviderTableMeta.UPLOADS_ACCOUNT_NAME + IS_EQUAL, new String[]{user.getAccountName()}
|
|
|
);
|
|
|
|
|
|
Log_OC.d(TAG, "delete all cancelled uploads");
|
|
@@ -716,8 +742,8 @@ public class UploadsStorageManager extends Observable {
|
|
|
User user = currentAccountProvider.getUser();
|
|
|
final long deleted = getDB().delete(
|
|
|
ProviderTableMeta.CONTENT_URI_UPLOADS,
|
|
|
- ProviderTableMeta.UPLOADS_STATUS + "==" + UploadStatus.UPLOAD_SUCCEEDED.value + AND +
|
|
|
- ProviderTableMeta.UPLOADS_ACCOUNT_NAME + "== ?", new String[]{user.getAccountName()}
|
|
|
+ ProviderTableMeta.UPLOADS_STATUS + EQUAL + UploadStatus.UPLOAD_SUCCEEDED.value + AND +
|
|
|
+ ProviderTableMeta.UPLOADS_ACCOUNT_NAME + IS_EQUAL, new String[]{user.getAccountName()}
|
|
|
);
|
|
|
|
|
|
Log_OC.d(TAG, "delete all successful uploads");
|
|
@@ -877,17 +903,13 @@ public class UploadsStorageManager extends Observable {
|
|
|
}
|
|
|
|
|
|
public static UploadStatus fromValue(int value) {
|
|
|
- switch (value) {
|
|
|
- case 0:
|
|
|
- return UPLOAD_IN_PROGRESS;
|
|
|
- case 1:
|
|
|
- return UPLOAD_FAILED;
|
|
|
- case 2:
|
|
|
- return UPLOAD_SUCCEEDED;
|
|
|
- case 3:
|
|
|
- return UPLOAD_CANCELLED;
|
|
|
- }
|
|
|
- return null;
|
|
|
+ return switch (value) {
|
|
|
+ case 0 -> UPLOAD_IN_PROGRESS;
|
|
|
+ case 1 -> UPLOAD_FAILED;
|
|
|
+ case 2 -> UPLOAD_SUCCEEDED;
|
|
|
+ case 3 -> UPLOAD_CANCELLED;
|
|
|
+ default -> null;
|
|
|
+ };
|
|
|
}
|
|
|
|
|
|
public int getValue() {
|