mirror of
https://github.com/nextcloud/android.git
synced 2024-12-19 15:33:00 +03:00
Merge remote-tracking branch 'origin/master' into dev
This commit is contained in:
commit
dea86b27da
6 changed files with 78 additions and 28 deletions
|
@ -137,6 +137,7 @@ interface BackgroundJobManager {
|
||||||
fun startAccountRemovalJob(accountName: String, remoteWipe: Boolean)
|
fun startAccountRemovalJob(accountName: String, remoteWipe: Boolean)
|
||||||
fun startFilesUploadJob(user: User)
|
fun startFilesUploadJob(user: User)
|
||||||
fun getFileUploads(user: User): LiveData<List<JobInfo>>
|
fun getFileUploads(user: User): LiveData<List<JobInfo>>
|
||||||
|
fun cancelFilesUploadJob(user: User)
|
||||||
|
|
||||||
fun startPdfGenerateAndUploadWork(user: User, uploadFolder: String, imagePaths: List<String>, pdfPath: String)
|
fun startPdfGenerateAndUploadWork(user: User, uploadFolder: String, imagePaths: List<String>, pdfPath: String)
|
||||||
|
|
||||||
|
|
|
@ -461,6 +461,10 @@ internal class BackgroundJobManagerImpl(
|
||||||
return workInfo.map { it -> it.map { fromWorkInfo(it) ?: JobInfo() } }
|
return workInfo.map { it -> it.map { fromWorkInfo(it) ?: JobInfo() } }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun cancelFilesUploadJob(user: User) {
|
||||||
|
workManager.cancelJob(JOB_FILES_UPLOAD, user)
|
||||||
|
}
|
||||||
|
|
||||||
override fun startPdfGenerateAndUploadWork(
|
override fun startPdfGenerateAndUploadWork(
|
||||||
user: User,
|
user: User,
|
||||||
uploadFolder: String,
|
uploadFolder: String,
|
||||||
|
|
|
@ -76,6 +76,7 @@ class FilesUploadWorker(
|
||||||
private val notificationManager: NotificationManager =
|
private val notificationManager: NotificationManager =
|
||||||
context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
||||||
private val fileUploaderDelegate = FileUploaderDelegate()
|
private val fileUploaderDelegate = FileUploaderDelegate()
|
||||||
|
private var currentUploadFileOperation: UploadFileOperation? = null
|
||||||
|
|
||||||
override fun doWork(): Result {
|
override fun doWork(): Result {
|
||||||
val accountName = inputData.getString(ACCOUNT)
|
val accountName = inputData.getString(ACCOUNT)
|
||||||
|
@ -89,7 +90,7 @@ class FilesUploadWorker(
|
||||||
* they will be present in the pages that follow.
|
* they will be present in the pages that follow.
|
||||||
*/
|
*/
|
||||||
var currentPage = uploadsStorageManager.getCurrentAndPendingUploadsForAccountPageAscById(-1, accountName)
|
var currentPage = uploadsStorageManager.getCurrentAndPendingUploadsForAccountPageAscById(-1, accountName)
|
||||||
while (currentPage.isNotEmpty()) {
|
while (currentPage.isNotEmpty() && !isStopped) {
|
||||||
Log_OC.d(TAG, "Handling ${currentPage.size} uploads for account $accountName")
|
Log_OC.d(TAG, "Handling ${currentPage.size} uploads for account $accountName")
|
||||||
val lastId = currentPage.last().uploadId
|
val lastId = currentPage.last().uploadId
|
||||||
handlePendingUploads(currentPage, accountName)
|
handlePendingUploads(currentPage, accountName)
|
||||||
|
@ -105,11 +106,16 @@ class FilesUploadWorker(
|
||||||
val user = userAccountManager.getUser(accountName)
|
val user = userAccountManager.getUser(accountName)
|
||||||
|
|
||||||
for (upload in uploads) {
|
for (upload in uploads) {
|
||||||
|
if (isStopped) {
|
||||||
|
break
|
||||||
|
}
|
||||||
// create upload file operation
|
// create upload file operation
|
||||||
if (user.isPresent) {
|
if (user.isPresent) {
|
||||||
val uploadFileOperation = createUploadFileOperation(upload, user.get())
|
val uploadFileOperation = createUploadFileOperation(upload, user.get())
|
||||||
|
|
||||||
|
currentUploadFileOperation = uploadFileOperation
|
||||||
val result = upload(uploadFileOperation, user.get())
|
val result = upload(uploadFileOperation, user.get())
|
||||||
|
currentUploadFileOperation = null
|
||||||
|
|
||||||
fileUploaderDelegate.sendBroadcastUploadFinished(
|
fileUploaderDelegate.sendBroadcastUploadFinished(
|
||||||
uploadFileOperation,
|
uploadFileOperation,
|
||||||
|
@ -172,13 +178,16 @@ class FilesUploadWorker(
|
||||||
Log_OC.e(TAG, "Error uploading", e)
|
Log_OC.e(TAG, "Error uploading", e)
|
||||||
uploadResult = RemoteOperationResult<Any?>(e)
|
uploadResult = RemoteOperationResult<Any?>(e)
|
||||||
} finally {
|
} finally {
|
||||||
uploadsStorageManager.updateDatabaseUploadResult(uploadResult, uploadFileOperation)
|
// only update db if operation finished and worker didn't get canceled
|
||||||
|
if (!(isStopped && uploadResult.isCancelled)) {
|
||||||
|
uploadsStorageManager.updateDatabaseUploadResult(uploadResult, uploadFileOperation)
|
||||||
|
|
||||||
// / notify result
|
// / notify result
|
||||||
notifyUploadResult(uploadFileOperation, uploadResult)
|
notifyUploadResult(uploadFileOperation, uploadResult)
|
||||||
|
|
||||||
// cancel notification
|
// cancel notification
|
||||||
notificationManager.cancel(FOREGROUND_SERVICE_ID)
|
notificationManager.cancel(FOREGROUND_SERVICE_ID)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return uploadResult
|
return uploadResult
|
||||||
|
@ -357,6 +366,12 @@ class FilesUploadWorker(
|
||||||
lastPercent = percent
|
lastPercent = percent
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onStopped() {
|
||||||
|
super.onStopped()
|
||||||
|
currentUploadFileOperation?.cancel(null)
|
||||||
|
notificationManager.cancel(FOREGROUND_SERVICE_ID)
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val TAG: String = FilesUploadWorker::class.java.simpleName
|
val TAG: String = FilesUploadWorker::class.java.simpleName
|
||||||
private const val FOREGROUND_SERVICE_ID: Int = 412
|
private const val FOREGROUND_SERVICE_ID: Int = 412
|
||||||
|
|
|
@ -89,6 +89,7 @@ import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.NoSuchElementException;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
@ -1152,24 +1153,34 @@ public class FileUploader extends Service
|
||||||
* @param remotePath Remote target of the upload
|
* @param remotePath Remote target of the upload
|
||||||
* @param resultCode Setting result code will pause rather than cancel the job
|
* @param resultCode Setting result code will pause rather than cancel the job
|
||||||
*/
|
*/
|
||||||
private void cancel(String accountName, String remotePath, @Nullable ResultCode resultCode) {
|
public void cancel(String accountName, String remotePath, @Nullable ResultCode resultCode) {
|
||||||
Pair<UploadFileOperation, String> removeResult = mPendingUploads.remove(accountName, remotePath);
|
// Cancel for Android version >= Android 11
|
||||||
UploadFileOperation upload = removeResult.first;
|
if (useFilesUploadWorker(getApplicationContext())){
|
||||||
if (upload == null && mCurrentUpload != null && mCurrentAccount != null &&
|
try{
|
||||||
mCurrentUpload.getRemotePath().startsWith(remotePath) && accountName.equals(mCurrentAccount.name)) {
|
new FilesUploadHelper().cancelFileUpload(remotePath, accountManager.getUser(accountName).get());
|
||||||
|
}catch(NoSuchElementException e){
|
||||||
|
Log_OC.e(TAG,"Error cancelling current upload because user does not exist!");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Cancel for Android version <= Android 10
|
||||||
|
Pair<UploadFileOperation, String> removeResult = mPendingUploads.remove(accountName, remotePath);
|
||||||
|
UploadFileOperation upload = removeResult.first;
|
||||||
|
if (upload == null && mCurrentUpload != null && mCurrentAccount != null &&
|
||||||
|
mCurrentUpload.getRemotePath().startsWith(remotePath) && accountName.equals(mCurrentAccount.name)) {
|
||||||
|
|
||||||
upload = mCurrentUpload;
|
upload = mCurrentUpload;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (upload != null) {
|
if (upload != null) {
|
||||||
upload.cancel(resultCode);
|
upload.cancel(resultCode);
|
||||||
// need to update now table in mUploadsStorageManager,
|
// need to update now table in mUploadsStorageManager,
|
||||||
// since the operation will not get to be run by FileUploader#uploadFile
|
// since the operation will not get to be run by FileUploader#uploadFile
|
||||||
if (resultCode != null) {
|
if (resultCode != null) {
|
||||||
mUploadsStorageManager.updateDatabaseUploadResult(new RemoteOperationResult(resultCode), upload);
|
mUploadsStorageManager.updateDatabaseUploadResult(new RemoteOperationResult(resultCode), upload);
|
||||||
notifyUploadResult(upload, new RemoteOperationResult(resultCode));
|
notifyUploadResult(upload, new RemoteOperationResult(resultCode));
|
||||||
} else {
|
} else {
|
||||||
mUploadsStorageManager.removeUpload(accountName, remotePath);
|
mUploadsStorageManager.removeUpload(accountName, remotePath);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1180,16 +1191,19 @@ public class FileUploader extends Service
|
||||||
* @param user Nextcloud user
|
* @param user Nextcloud user
|
||||||
*/
|
*/
|
||||||
public void cancel(User user) {
|
public void cancel(User user) {
|
||||||
if (mCurrentUpload != null && mCurrentUpload.getUser().nameEquals(user)) {
|
cancel(user.getAccountName());
|
||||||
mCurrentUpload.cancel(ResultCode.CANCELLED);
|
|
||||||
}
|
|
||||||
cancelPendingUploads(user.getAccountName());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void cancel(String accountName) {
|
public void cancel(String accountName) {
|
||||||
if (mCurrentUpload != null && mCurrentUpload.getUser().nameEquals(accountName)) {
|
cancelPendingUploads(accountName);
|
||||||
mCurrentUpload.cancel(ResultCode.CANCELLED);
|
if (useFilesUploadWorker(getApplicationContext())) {
|
||||||
|
new FilesUploadHelper().restartUploadJob(accountManager.getUser(accountName).get());
|
||||||
|
}else{
|
||||||
|
if (mCurrentUpload != null && mCurrentUpload.getUser().nameEquals(accountName)) {
|
||||||
|
mCurrentUpload.cancel(ResultCode.CANCELLED);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clearListeners() {
|
public void clearListeners() {
|
||||||
|
|
|
@ -70,6 +70,19 @@ class FilesUploadHelper {
|
||||||
backgroundJobManager.startFilesUploadJob(user)
|
backgroundJobManager.startFilesUploadJob(user)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun cancelFileUpload(remotePath: String, user: User) {
|
||||||
|
// need to update now table in mUploadsStorageManager,
|
||||||
|
// since the operation will not get to be run by FileUploader#uploadFile
|
||||||
|
uploadsStorageManager.removeUpload(user.accountName, remotePath)
|
||||||
|
|
||||||
|
restartUploadJob(user)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun restartUploadJob(user: User) {
|
||||||
|
backgroundJobManager.cancelFilesUploadJob(user)
|
||||||
|
backgroundJobManager.startFilesUploadJob(user)
|
||||||
|
}
|
||||||
|
|
||||||
fun uploadUpdatedFile(
|
fun uploadUpdatedFile(
|
||||||
user: User,
|
user: User,
|
||||||
existingFiles: Array<OCFile>,
|
existingFiles: Array<OCFile>,
|
||||||
|
|
|
@ -203,6 +203,7 @@
|
||||||
<string name="did_not_check_for_dupes">Nu s-au verificat duplicatele.</string>
|
<string name="did_not_check_for_dupes">Nu s-au verificat duplicatele.</string>
|
||||||
<string name="digest_algorithm_not_available">Algoritmul \'digest\' nu este disponibil pe telefonul tău.</string>
|
<string name="digest_algorithm_not_available">Algoritmul \'digest\' nu este disponibil pe telefonul tău.</string>
|
||||||
<string name="direct_login_failed">Eroare la autentificare prin legătură directă!</string>
|
<string name="direct_login_failed">Eroare la autentificare prin legătură directă!</string>
|
||||||
|
<string name="direct_login_text">Autentificare cu %1$s la %2$s</string>
|
||||||
<string name="disable_new_media_folder_detection_notifications">Dezactivează</string>
|
<string name="disable_new_media_folder_detection_notifications">Dezactivează</string>
|
||||||
<string name="dismiss">Elimină</string>
|
<string name="dismiss">Elimină</string>
|
||||||
<string name="dismiss_notification_description">Elimină notificarea</string>
|
<string name="dismiss_notification_description">Elimină notificarea</string>
|
||||||
|
@ -440,6 +441,7 @@
|
||||||
<string name="locked_by_app">Blocat de aplicația%1$s </string>
|
<string name="locked_by_app">Blocat de aplicația%1$s </string>
|
||||||
<string name="log_send_mail_subject">%1$s înregistrările app-ului Android</string>
|
<string name="log_send_mail_subject">%1$s înregistrările app-ului Android</string>
|
||||||
<string name="log_send_no_mail_app">Nu există nici o aplicație pentru a trimite fisiere log. Vă rugăm instalați un client de email.</string>
|
<string name="log_send_no_mail_app">Nu există nici o aplicație pentru a trimite fisiere log. Vă rugăm instalați un client de email.</string>
|
||||||
|
<string name="logged_in_as">Autentificat ca %1$s</string>
|
||||||
<string name="login">Autentificare</string>
|
<string name="login">Autentificare</string>
|
||||||
<string name="login_url_helper_text">Linkul către %1$s interfața web atunci când deschizi linkul în browser.</string>
|
<string name="login_url_helper_text">Linkul către %1$s interfața web atunci când deschizi linkul în browser.</string>
|
||||||
<string name="logs_menu_delete">Șterge fișiere log</string>
|
<string name="logs_menu_delete">Șterge fișiere log</string>
|
||||||
|
@ -912,6 +914,7 @@
|
||||||
<string name="wait_a_moment">Așteaptă un moment…</string>
|
<string name="wait_a_moment">Așteaptă un moment…</string>
|
||||||
<string name="wait_checking_credentials">Se verifică datele de autentificare stocate</string>
|
<string name="wait_checking_credentials">Se verifică datele de autentificare stocate</string>
|
||||||
<string name="wait_for_tmp_copy_from_private_storage">Copiere fișier din stocare privată</string>
|
<string name="wait_for_tmp_copy_from_private_storage">Copiere fișier din stocare privată</string>
|
||||||
|
<string name="webview_version_check_alert_dialog_message">Pentru a vă autentifica, actualizați componenta WebView a sistemului Android</string>
|
||||||
<string name="webview_version_check_alert_dialog_positive_button_title">Actualizare</string>
|
<string name="webview_version_check_alert_dialog_positive_button_title">Actualizare</string>
|
||||||
<string name="what_s_new_image">Ce imagine este nouă</string>
|
<string name="what_s_new_image">Ce imagine este nouă</string>
|
||||||
<string name="whats_new_skip">Sari peste</string>
|
<string name="whats_new_skip">Sari peste</string>
|
||||||
|
|
Loading…
Reference in a new issue