Compare commits

...

11 Commits

Author SHA1 Message Date
alperozturk 46bf27c6d8 Remove unused resources
Signed-off-by: alperozturk <alper_ozturk@proton.me>
2024-04-24 09:32:30 +02:00
alperozturk 9504052bc0 Remove unused resources
Signed-off-by: alperozturk <alper_ozturk@proton.me>
2024-04-24 09:32:30 +02:00
alperozturk acf444950f Fix code analytics
Signed-off-by: alperozturk <alper_ozturk@proton.me>
2024-04-24 09:32:30 +02:00
alperozturk 40c61def3a Use one notification for all downloads
Signed-off-by: alperozturk <alper_ozturk@proton.me>
2024-04-24 09:32:30 +02:00
alperozturk ca99beac92 Simplify download notifications
Signed-off-by: alperozturk <alper_ozturk@proton.me>
2024-04-24 09:32:30 +02:00
alperozturk 10e448751e Fix notification sync issue
Signed-off-by: alperozturk <alper_ozturk@proton.me>
2024-04-24 09:32:30 +02:00
alperozturk c6e136ccb2 Use one notification for uploads
Signed-off-by: alperozturk <alper_ozturk@proton.me>
2024-04-24 09:32:30 +02:00
alperozturk 69918da17e Use one notification for uploads
Signed-off-by: alperozturk <alper_ozturk@proton.me>
2024-04-24 09:32:30 +02:00
alperozturk dc8f3e1f96 Use one notification for uploads
Signed-off-by: alperozturk <alper_ozturk@proton.me>
2024-04-24 09:32:30 +02:00
alperozturk 6a24f57159 Use one notification for uploads
Signed-off-by: alperozturk <alper_ozturk@proton.me>
2024-04-24 09:32:30 +02:00
alperozturk 5303fc6388 Make upload notifications dismissable
Signed-off-by: alperozturk <alper_ozturk@proton.me>
2024-04-24 09:32:30 +02:00
26 changed files with 140 additions and 173 deletions

View File

@ -18,7 +18,6 @@ import android.os.Handler
import android.os.Looper
import androidx.core.app.NotificationCompat
import com.owncloud.android.R
import com.owncloud.android.lib.resources.files.FileUtils
import com.owncloud.android.operations.DownloadFileOperation
import com.owncloud.android.ui.notifications.NotificationUtils
import com.owncloud.android.utils.theme.ViewThemeUtils
@ -29,15 +28,11 @@ import java.security.SecureRandom
class DownloadNotificationManager(
private val id: Int,
private val context: Context,
private val viewThemeUtils: ViewThemeUtils
viewThemeUtils: ViewThemeUtils
) {
private var notification: Notification
private var notificationBuilder: NotificationCompat.Builder
private val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
init {
notificationBuilder = NotificationUtils.newNotificationBuilder(context, viewThemeUtils).apply {
setContentTitle(context.getString(R.string.downloader_download_in_progress_ticker))
private var currentOperationTitle: String? = null
private var notificationBuilder: NotificationCompat.Builder =
NotificationUtils.newNotificationBuilder(context, viewThemeUtils).apply {
setTicker(context.getString(R.string.downloader_download_in_progress_ticker))
setSmallIcon(R.drawable.notification_icon)
setLargeIcon(BitmapFactory.decodeResource(context.resources, R.drawable.notification_icon))
@ -46,32 +41,24 @@ class DownloadNotificationManager(
setChannelId(NotificationUtils.NOTIFICATION_CHANNEL_DOWNLOAD)
}
}
notification = notificationBuilder.build()
}
private val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
@Suppress("MagicNumber")
fun prepareForStart(operation: DownloadFileOperation) {
notificationBuilder = NotificationUtils.newNotificationBuilder(context, viewThemeUtils).apply {
setSmallIcon(R.drawable.notification_icon)
setOngoing(true)
fun prepareForStart(operation: DownloadFileOperation, currentDownloadIndex: Int, totalDownloadSize: Int) {
currentOperationTitle = String.format(
context.getString(R.string.downloader_notification_manager_download_text),
currentDownloadIndex,
totalDownloadSize,
File(operation.savePath).name
)
notificationBuilder.run {
setContentTitle(currentOperationTitle)
setOngoing(false)
setProgress(100, 0, operation.size < 0)
setContentText(
String.format(
context.getString(R.string.downloader_download_in_progress), 0,
File(operation.savePath).name
)
)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
setChannelId(NotificationUtils.NOTIFICATION_CHANNEL_DOWNLOAD)
}
notificationManager.notify(
id,
this.build()
)
}
showNotification()
}
fun prepareForResult() {
@ -82,16 +69,19 @@ class DownloadNotificationManager(
}
@Suppress("MagicNumber")
fun updateDownloadProgress(filePath: String, percent: Int, totalToTransfer: Long) {
fun updateDownloadProgress(percent: Int, totalToTransfer: Long) {
val progressText = String.format(
context.getString(R.string.downloader_notification_manager_in_progress_text),
percent
)
notificationBuilder.run {
setProgress(100, percent, totalToTransfer < 0)
val fileName: String = filePath.substring(filePath.lastIndexOf(FileUtils.PATH_SEPARATOR) + 1)
val text =
String.format(context.getString(R.string.downloader_download_in_progress), percent, fileName)
val title =
context.getString(R.string.downloader_download_in_progress_ticker)
updateNotificationText(title, text)
setContentTitle(currentOperationTitle)
setContentText(progressText)
}
showNotification()
}
@Suppress("MagicNumber")
@ -106,24 +96,12 @@ class DownloadNotificationManager(
notificationBuilder.run {
setProgress(0, 0, false)
setContentTitle(null)
setContentText(text)
setContentTitle(text)
setOngoing(false)
notificationManager.notify(notifyId, this.build())
}
}
private fun updateNotificationText(title: String?, text: String) {
notificationBuilder.run {
title?.let {
setContentTitle(title)
}
setContentText(text)
notificationManager.notify(id, this.build())
}
}
fun setContentIntent(intent: Intent, flag: Int) {
notificationBuilder.setContentIntent(
PendingIntent.getActivity(
@ -135,6 +113,10 @@ class DownloadNotificationManager(
)
}
private fun showNotification() {
notificationManager.notify(id, notificationBuilder.build())
}
fun getId(): Int {
return id
}

View File

@ -126,8 +126,8 @@ class FileDownloadWorker(
)
setForegroundAsync(foregroundInfo)
requestDownloads.forEach {
downloadFile(it)
requestDownloads.forEachIndexed { currentDownloadIndex, requestedDownload ->
downloadFile(requestedDownload, currentDownloadIndex, requestDownloads.size)
}
downloadError?.let {
@ -254,7 +254,7 @@ class FileDownloadWorker(
}
@Suppress("TooGenericExceptionCaught", "DEPRECATION")
private fun downloadFile(downloadKey: String) {
private fun downloadFile(downloadKey: String, currentDownloadIndex: Int, totalDownloadSize: Int) {
currentDownload = pendingDownloads.get(downloadKey)
if (currentDownload == null) {
@ -270,7 +270,13 @@ class FileDownloadWorker(
return
}
notifyDownloadStart(currentDownload!!)
lastPercent = 0
notificationManager.run {
prepareForStart(currentDownload!!, currentDownloadIndex + 1, totalDownloadSize)
setContentIntent(intents.detailsIntent(currentDownload!!), PendingIntent.FLAG_IMMUTABLE)
}
var downloadResult: RemoteOperationResult<*>? = null
try {
val ocAccount = getOCAccountForDownload()
@ -291,15 +297,6 @@ class FileDownloadWorker(
}
}
private fun notifyDownloadStart(download: DownloadFileOperation) {
lastPercent = 0
notificationManager.run {
prepareForStart(download)
setContentIntent(intents.detailsIntent(download), PendingIntent.FLAG_IMMUTABLE)
}
}
@Suppress("DEPRECATION")
private fun getOCAccountForDownload(): OwnCloudAccount {
val currentDownloadAccount = currentDownload?.user?.toPlatformAccount()
@ -368,6 +365,7 @@ class FileDownloadWorker(
FileDownloadError.Cancelled -> {
context.getString(R.string.downloader_file_download_cancelled)
}
FileDownloadError.Failed -> {
context.getString(R.string.downloader_file_download_failed)
}
@ -418,7 +416,7 @@ class FileDownloadWorker(
if (percent != lastPercent) {
notificationManager.run {
updateDownloadProgress(filePath, percent, totalToTransfer)
updateDownloadProgress(percent, totalToTransfer)
}
}

View File

@ -101,7 +101,7 @@ class FileUploadWorker(
backgroundJobManager.logEndOfWorker(BackgroundJobManagerImpl.formatClassTag(this::class), result)
result
} catch (t: Throwable) {
Log_OC.e(TAG, "Error caught at FileUploadWorker " + t.localizedMessage)
Log_OC.e(TAG, "Error caught at FileUploadWorker $t")
Result.failure()
}
}
@ -159,27 +159,41 @@ class FileUploadWorker(
val user = userAccountManager.getUser(accountName)
setWorkerState(user.get(), uploads)
for (upload in uploads) {
if (isStopped) {
break
}
run uploads@{
uploads.forEachIndexed { currentUploadIndex, upload ->
if (isStopped) {
return@uploads
}
if (user.isPresent) {
val uploadFileOperation = createUploadFileOperation(upload, user.get())
if (user.isPresent) {
val uploadFileOperation = createUploadFileOperation(upload, user.get())
currentUploadFileOperation = uploadFileOperation
val result = upload(uploadFileOperation, user.get())
currentUploadFileOperation = null
currentUploadFileOperation = uploadFileOperation
fileUploaderDelegate.sendBroadcastUploadFinished(
uploadFileOperation,
result,
uploadFileOperation.oldFile?.storagePath,
context,
localBroadcastManager
)
} else {
uploadsStorageManager.removeUpload(upload.uploadId)
notificationManager.prepareForStart(
uploadFileOperation,
cancelPendingIntent = intents.startIntent(uploadFileOperation),
startIntent = intents.notificationStartIntent(uploadFileOperation),
currentUploadIndex = currentUploadIndex + 1,
totalUploadSize = uploads.size
)
val result = upload(uploadFileOperation, user.get())
currentUploadFileOperation = null
fileUploaderDelegate.sendBroadcastUploadFinished(
uploadFileOperation,
result,
uploadFileOperation.oldFile?.storagePath,
context,
localBroadcastManager
)
} else {
uploadsStorageManager.removeUpload(upload.uploadId)
}
notificationManager.dismissWorkerNotifications()
}
}
}
@ -208,12 +222,6 @@ class FileUploadWorker(
private fun upload(uploadFileOperation: UploadFileOperation, user: User): RemoteOperationResult<Any?> {
lateinit var result: RemoteOperationResult<Any?>
notificationManager.prepareForStart(
uploadFileOperation,
cancelPendingIntent = intents.startIntent(uploadFileOperation),
intents.notificationStartIntent(uploadFileOperation)
)
try {
val storageManager = uploadFileOperation.storageManager
val ocAccount = OwnCloudAccount(user.toPlatformAccount(), context)
@ -300,8 +308,13 @@ class FileUploadWorker(
null
}
notifyForFailedResult(uploadResult.code, conflictResolveIntent, credentialIntent, errorMessage)
showNewNotification(uploadFileOperation)
notifyForFailedResult(
uploadFileOperation,
uploadResult.code,
conflictResolveIntent,
credentialIntent,
errorMessage
)
}
}
@ -317,14 +330,14 @@ class FileUploadWorker(
notificationManager.run {
val accountName = currentUploadFileOperation?.user?.accountName
val remotePath = currentUploadFileOperation?.remotePath
val filename = currentUploadFileOperation?.fileName ?: ""
updateUploadProgress(filename, percent, currentUploadFileOperation)
updateUploadProgress(percent, currentUploadFileOperation)
if (accountName != null && remotePath != null) {
val key: String =
FileUploadHelper.buildRemoteName(accountName, remotePath)
val boundListener = FileUploadHelper.mBoundListeners[key]
val filename = currentUploadFileOperation?.fileName ?: ""
boundListener?.onTransferProgress(
progressRate,

View File

@ -7,7 +7,6 @@
*/
package com.nextcloud.client.jobs.upload
import android.app.Notification
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Context
@ -25,10 +24,9 @@ class UploadNotificationManager(private val context: Context, viewThemeUtils: Vi
private const val ID = 411
}
private var notification: Notification? = null
private var notificationBuilder: NotificationCompat.Builder =
NotificationUtils.newNotificationBuilder(context, viewThemeUtils).apply {
setContentTitle(context.getString(R.string.foreground_service_upload))
setTicker(context.getString(R.string.foreground_service_upload))
setSmallIcon(R.drawable.notification_icon)
setLargeIcon(BitmapFactory.decodeResource(context.resources, R.drawable.notification_icon))
@ -36,30 +34,34 @@ class UploadNotificationManager(private val context: Context, viewThemeUtils: Vi
setChannelId(NotificationUtils.NOTIFICATION_CHANNEL_UPLOAD)
}
}
private val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
init {
notification = notificationBuilder.build()
}
private val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
private var currentOperationTitle: String? = "null"
@Suppress("MagicNumber")
fun prepareForStart(
uploadFileOperation: UploadFileOperation,
cancelPendingIntent: PendingIntent,
startIntent: PendingIntent
startIntent: PendingIntent,
currentUploadIndex: Int,
totalUploadSize: Int
) {
currentOperationTitle = String.format(
context.getString(R.string.upload_notification_manager_start_text),
currentUploadIndex,
totalUploadSize,
uploadFileOperation.fileName
)
val progressText = String.format(
context.getString(R.string.upload_notification_manager_upload_in_progress_text),
0
)
notificationBuilder.run {
setContentTitle(context.getString(R.string.uploader_upload_in_progress_ticker))
setContentText(
String.format(
context.getString(R.string.uploader_upload_in_progress),
0,
uploadFileOperation.fileName
)
)
setTicker(context.getString(R.string.foreground_service_upload))
setProgress(100, 0, false)
setOngoing(true)
setContentTitle(currentOperationTitle)
setContentText(progressText)
setOngoing(false)
clearActions()
addAction(
@ -76,13 +78,31 @@ class UploadNotificationManager(private val context: Context, viewThemeUtils: Vi
}
}
@Suppress("MagicNumber")
fun updateUploadProgress(percent: Int, currentOperation: UploadFileOperation?) {
val progressText = String.format(
context.getString(R.string.upload_notification_manager_upload_in_progress_text),
percent
)
notificationBuilder.run {
setProgress(100, percent, false)
setContentTitle(currentOperationTitle)
setContentText(progressText)
showNotification()
dismissOldErrorNotification(currentOperation)
}
}
fun notifyForFailedResult(
uploadFileOperation: UploadFileOperation,
resultCode: RemoteOperationResult.ResultCode,
conflictsResolveIntent: PendingIntent?,
credentialIntent: PendingIntent?,
errorMessage: String
) {
val textId = resultTitle(resultCode)
val textId = getFailedResultTitleId(resultCode)
notificationBuilder.run {
setTicker(context.getString(textId))
@ -106,9 +126,11 @@ class UploadNotificationManager(private val context: Context, viewThemeUtils: Vi
setContentText(errorMessage)
}
showNewNotification(uploadFileOperation)
}
private fun resultTitle(resultCode: RemoteOperationResult.ResultCode): Int {
private fun getFailedResultTitleId(resultCode: RemoteOperationResult.ResultCode): Int {
val needsToUpdateCredentials = (resultCode == RemoteOperationResult.ResultCode.UNAUTHORIZED)
return if (needsToUpdateCredentials) {
@ -128,7 +150,7 @@ class UploadNotificationManager(private val context: Context, viewThemeUtils: Vi
)
}
fun showNewNotification(operation: UploadFileOperation) {
private fun showNewNotification(operation: UploadFileOperation) {
notificationManager.notify(
NotificationUtils.createUploadNotificationTag(operation.file),
FileUploadWorker.NOTIFICATION_ERROR_ID,
@ -140,18 +162,6 @@ class UploadNotificationManager(private val context: Context, viewThemeUtils: Vi
notificationManager.notify(ID, notificationBuilder.build())
}
@Suppress("MagicNumber")
fun updateUploadProgress(filename: String, percent: Int, currentOperation: UploadFileOperation?) {
notificationBuilder.run {
setProgress(100, percent, false)
val text = String.format(context.getString(R.string.uploader_upload_in_progress), percent, filename)
setContentText(text)
showNotification()
dismissOldErrorNotification(currentOperation)
}
}
fun dismissOldErrorNotification(operation: UploadFileOperation?) {
if (operation == null) {
return
@ -176,10 +186,10 @@ class UploadNotificationManager(private val context: Context, viewThemeUtils: Vi
}
fun notifyPaused(intent: PendingIntent) {
notificationBuilder.apply {
notificationBuilder.run {
setContentTitle(context.getString(R.string.upload_global_pause_title))
setTicker(context.getString(R.string.upload_global_pause_title))
setOngoing(true)
setOngoing(false)
setAutoCancel(false)
setProgress(0, 0, false)
clearActions()

View File

@ -242,7 +242,6 @@
<string name="downloader_download_failed_credentials_error">فشل التنزيل، قم بتسجيل الدخول مرة أخرى</string>
<string name="downloader_download_failed_ticker">فشل التحميل</string>
<string name="downloader_download_file_not_found">الملف غير متوفر في الخادم</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% تحميل %2$s</string>
<string name="downloader_download_in_progress_ticker">جارِ التنزيل …</string>
<string name="downloader_download_succeeded_content">%1$s مُنزَّلَة</string>
@ -970,7 +969,6 @@
<string name="uploader_upload_files_behaviour_only_upload">الإبقاء على الملف في المجلد الأصلي</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">إحذف الملف من المجلد الأصلي</string>
<string name="uploader_upload_forbidden_permissions">للرفع إلى هذا المجلد</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% رفع %2$s</string>
<string name="uploader_upload_in_progress_ticker">يتم الرفع…</string>
<string name="uploader_upload_succeeded_content_single">تم رفع %1$s</string>

View File

@ -242,7 +242,6 @@
<string name="downloader_download_failed_credentials_error">Download failed, log in again</string>
<string name="downloader_download_failed_ticker">Download failed</string>
<string name="downloader_download_file_not_found">The file is no longer available on the server</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Downloading %2$s</string>
<string name="downloader_download_in_progress_ticker">Downloading…</string>
<string name="downloader_download_succeeded_content">%1$s downloaded</string>
@ -943,7 +942,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Keep file in source folder</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Delete file from source folder</string>
<string name="uploader_upload_forbidden_permissions">to upload to this folder</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Uploading %2$s</string>
<string name="uploader_upload_in_progress_ticker">Uploading…</string>
<string name="uploader_upload_succeeded_content_single">%1$s uploaded</string>

View File

@ -227,7 +227,6 @@
<string name="downloader_download_failed_credentials_error">Stahování se nezdařilo, přihlaste se znovu</string>
<string name="downloader_download_failed_ticker">Stahování se nezdařilo</string>
<string name="downloader_download_file_not_found">Tento soubor už není na serveru k dispozici</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Stahuje se %2$s</string>
<string name="downloader_download_in_progress_ticker">Stahování…</string>
<string name="downloader_download_succeeded_content">%1$s staženo</string>
@ -901,7 +900,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Ponechat soubor ve zdrojové složce</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Vymazat soubor ze zdrojové složky</string>
<string name="uploader_upload_forbidden_permissions">pro nahrávání do této složky</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Odesílání %2$s</string>
<string name="uploader_upload_in_progress_ticker">Nahrávání…</string>
<string name="uploader_upload_succeeded_content_single">%1$s nahráno</string>

View File

@ -242,7 +242,6 @@
<string name="downloader_download_failed_credentials_error">Herunterladen fehlgeschlagen, erneute Anmeldung erforderlich</string>
<string name="downloader_download_failed_ticker">Herunterladen fehlgeschlagen</string>
<string name="downloader_download_file_not_found">Diese Datei steht auf dem Server nicht mehr zur Verfügung</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Herunterladen %2$s</string>
<string name="downloader_download_in_progress_ticker">Lade herunter…</string>
<string name="downloader_download_succeeded_content">%1$s heruntergeladen</string>
@ -943,7 +942,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Hochladen und im Quellordner behalten</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Hochladen und Datei im Quellordner löschen</string>
<string name="uploader_upload_forbidden_permissions">diesen Ordner hochzuladen</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Hochladen %2$s</string>
<string name="uploader_upload_in_progress_ticker">Lade hoch…</string>
<string name="uploader_upload_succeeded_content_single">%1$s hochgeladen</string>

View File

@ -242,7 +242,6 @@
<string name="downloader_download_failed_credentials_error">La descarga falló, inicia sesión de nuevo</string>
<string name="downloader_download_failed_ticker">Falla en la descarga</string>
<string name="downloader_download_file_not_found">El archivo ya no se encuentra disponible en el servidor</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Descargando %2$s</string>
<string name="downloader_download_in_progress_ticker">Descargando…</string>
<string name="downloader_download_succeeded_content">%1$s descargado</string>
@ -943,7 +942,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Mantener el archivo en la carpeta de origen</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Borrar el archivo de la carpeta de origen</string>
<string name="uploader_upload_forbidden_permissions">para cargar a esta carpeta</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Cargando %2$s</string>
<string name="uploader_upload_in_progress_ticker">Cargando</string>
<string name="uploader_upload_succeeded_content_single">%1$s cargado</string>

View File

@ -230,7 +230,6 @@
<string name="downloader_download_failed_credentials_error">Descarga fallida, vuelve a iniciar sesión</string>
<string name="downloader_download_failed_ticker">Fallo al descargar</string>
<string name="downloader_download_file_not_found">Este archivo ya no se encuentra en el servidor</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Descargado de %2$s</string>
<string name="downloader_download_in_progress_ticker">Descargando…</string>
<string name="downloader_download_succeeded_content">%1$s descargado</string>
@ -908,7 +907,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Mantener el archivo en la carpeta original</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Borrar archivo de la carpeta original</string>
<string name="uploader_upload_forbidden_permissions">para subir archivos a esta carpeta</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Subiendo %2$s</string>
<string name="uploader_upload_in_progress_ticker">Subiendo…</string>
<string name="uploader_upload_succeeded_content_single">%1$s subido</string>

View File

@ -231,7 +231,6 @@
<string name="downloader_download_failed_credentials_error">Deskargak huts egin du, hasi saioa berriz</string>
<string name="downloader_download_failed_ticker">Deskargak huts egin du</string>
<string name="downloader_download_file_not_found">Fitxategia jadanik ez dago eskuragarri zerbitzarian</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Deskargatzen %2$s</string>
<string name="downloader_download_in_progress_ticker">Deskargatzen…</string>
<string name="downloader_download_succeeded_content">%1$s deskargatuta</string>
@ -929,7 +928,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Mantendu fitxategia jatorrizko karpetan</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Ezabatu fitxategia jatorrizko karpetatik</string>
<string name="uploader_upload_forbidden_permissions">kargatzeko karpeta honetara</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Igotzen %2$s</string>
<string name="uploader_upload_in_progress_ticker">Kargatzen…</string>
<string name="uploader_upload_succeeded_content_single">%1$s igota</string>

View File

@ -226,7 +226,6 @@
<string name="downloader_download_failed_credentials_error">بارگیری شکست خورد. دوباره وارد شوید</string>
<string name="downloader_download_failed_ticker">دانلود ناموفق</string>
<string name="downloader_download_file_not_found">این فایل دیگر روی سرور وجود ندارد</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% در حال دانلود %2$s</string>
<string name="downloader_download_in_progress_ticker">بارگیری…</string>
<string name="downloader_download_succeeded_content">%1$sدانلود شده </string>
@ -923,7 +922,6 @@
<string name="uploader_upload_files_behaviour_only_upload">نگهداری فایل در پوشه منبع</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">حذف فایل از پوشه منبع</string>
<string name="uploader_upload_forbidden_permissions">برای بارگذاری در این پوشه</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% در حال آپلود%2$s</string>
<string name="uploader_upload_in_progress_ticker">بارگذاری…</string>
<string name="uploader_upload_succeeded_content_single">%1$s آپلود شده</string>

View File

@ -241,7 +241,6 @@
<string name="downloader_download_failed_credentials_error">Téléchargement échoué, reconnectez-vous</string>
<string name="downloader_download_failed_ticker">Le téléchargement a échoué</string>
<string name="downloader_download_file_not_found">Ce fichier nest plus disponible sur le serveur</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">Téléchargement de %2$s : %1$d%% effectués</string>
<string name="downloader_download_in_progress_ticker">Réception en cours…</string>
<string name="downloader_download_succeeded_content">%1$s reçu</string>
@ -941,7 +940,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Conserver le fichier dans le dossier original</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Supprimer le fichier du dossier original</string>
<string name="uploader_upload_forbidden_permissions">d\'envoyer dans ce dossier</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">Téléversement de %2$s : %1$d%%</string>
<string name="uploader_upload_in_progress_ticker">Téléversement en cours…</string>
<string name="uploader_upload_succeeded_content_single">%1$s envoyé</string>

View File

@ -221,7 +221,6 @@
<string name="downloader_download_failed_credentials_error">Scaricamento non riuscito, effettua nuovamente l\'accesso</string>
<string name="downloader_download_failed_ticker">Scaricamento non riuscito</string>
<string name="downloader_download_file_not_found">Il file non è più disponibile sul server</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Scaricamento di %2$s</string>
<string name="downloader_download_in_progress_ticker">Scaricamento in corso…</string>
<string name="downloader_download_succeeded_content">%1$s scaricato</string>
@ -885,7 +884,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Mantieni il file nella cartella di origine</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Elimina il file dalla cartella di origine</string>
<string name="uploader_upload_forbidden_permissions">per caricare in questa cartella</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Caricamento di %2$s</string>
<string name="uploader_upload_in_progress_ticker">Caricamento in corso…</string>
<string name="uploader_upload_succeeded_content_single">%1$s caricato</string>

View File

@ -241,7 +241,6 @@
<string name="downloader_download_failed_credentials_error">Nedlasting mislyktes, prøv igjen</string>
<string name="downloader_download_failed_ticker">Nedlasting mislyktes</string>
<string name="downloader_download_file_not_found">Filen finnes ikke på serveren lenger</string>
<string name="downloader_download_in_progress">%1$d %% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Laster ned %2$s</string>
<string name="downloader_download_in_progress_ticker">Laster ned…</string>
<string name="downloader_download_succeeded_content">%1$s lastet ned</string>
@ -942,7 +941,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Behold filen i kildemappe</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Slett filen fra kildemappen</string>
<string name="uploader_upload_forbidden_permissions">å laste opp i denne mappen</string>
<string name="uploader_upload_in_progress">%1$d %% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Laster opp %2$s</string>
<string name="uploader_upload_in_progress_ticker">Laster opp…</string>
<string name="uploader_upload_succeeded_content_single">%1$s lastet opp</string>

View File

@ -234,7 +234,6 @@
<string name="downloader_download_failed_credentials_error">Downloaden mislukt, je moet opnieuw inloggen</string>
<string name="downloader_download_failed_ticker">Downloaden mislukt</string>
<string name="downloader_download_file_not_found">Dit bestand is niet langer beschikbaar op de server</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Downloaden van %2$s</string>
<string name="downloader_download_in_progress_ticker">Downloaden…</string>
<string name="downloader_download_succeeded_content">%1$s gedownload.</string>
@ -883,7 +882,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Bewaar het bestand in de bronmap</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Verwijder bestand uit bronmap</string>
<string name="uploader_upload_forbidden_permissions">om dit bestand in deze map te uploaden</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Uploaden van %2$s</string>
<string name="uploader_upload_in_progress_ticker">Uploaden…</string>
<string name="uploader_upload_succeeded_content_single">%1$s geüpload</string>

View File

@ -241,7 +241,6 @@
<string name="downloader_download_failed_credentials_error">Download falhou, logue-se novamente</string>
<string name="downloader_download_failed_ticker">Download falhou</string>
<string name="downloader_download_file_not_found">Este arquivo não está mais disponível neste servidor</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Baixando %2$s</string>
<string name="downloader_download_in_progress_ticker">Baixando…</string>
<string name="downloader_download_succeeded_content">%1$s baixado</string>
@ -942,7 +941,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Manter arquivo na pasta de origem</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Excluir arquivo da pasta de origem</string>
<string name="uploader_upload_forbidden_permissions">para enviar a esta pasta</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% enviando %2$s</string>
<string name="uploader_upload_in_progress_ticker">Enviando…</string>
<string name="uploader_upload_succeeded_content_single">%1$s enviado</string>

View File

@ -242,7 +242,6 @@
<string name="downloader_download_failed_credentials_error">Ошибка скачивания, необходимо авторизоваться</string>
<string name="downloader_download_failed_ticker">Сбой при скачивании</string>
<string name="downloader_download_file_not_found">Этот файл больше недоступен на сервере</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Скачивается %2$s</string>
<string name="downloader_download_in_progress_ticker">Скачивается…</string>
<string name="downloader_download_succeeded_content">%1$s скачано</string>
@ -944,7 +943,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Оставить файл в исходной папке</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Удалить файл из исходной папки</string>
<string name="uploader_upload_forbidden_permissions">для передачи в эту папку</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% «%2$s»</string>
<string name="uploader_upload_in_progress_ticker">Передача…</string>
<string name="uploader_upload_succeeded_content_single">Передача файла «%1$s» завершена</string>

View File

@ -239,7 +239,6 @@
<string name="downloader_download_failed_credentials_error">Sťahovanie neúspešné, je potrebné sa znovu prihlásiť</string>
<string name="downloader_download_failed_ticker">Stiahnutie zlyhalo</string>
<string name="downloader_download_file_not_found">Súbor už na serveri nie je dostupný</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Sťahovanie %2$s</string>
<string name="downloader_download_in_progress_ticker">Sťahujem…</string>
<string name="downloader_download_succeeded_content">%1$s stiahnuté</string>
@ -940,7 +939,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Ponechaj súbor v pôvodnom priečinku</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Odstráň súbor z pôvodného priečinka</string>
<string name="uploader_upload_forbidden_permissions">nahrávať do tohto priečinka</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Odosielam %2$s</string>
<string name="uploader_upload_in_progress_ticker">Nahrávanie…</string>
<string name="uploader_upload_succeeded_content_single">%1$s odoslané</string>

View File

@ -242,7 +242,6 @@
<string name="downloader_download_failed_credentials_error">Неуспешно преузимање. Поново се пријавите</string>
<string name="downloader_download_failed_ticker">Преузимање није успело</string>
<string name="downloader_download_file_not_found">Фајл није више доступан на серверу</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% преузимам %2$s</string>
<string name="downloader_download_in_progress_ticker">Преузимам…</string>
<string name="downloader_download_succeeded_content">%1$s преузето</string>
@ -943,7 +942,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Остави фајл у изворној фасцикли</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Избриши фајл из изворне фасцикле</string>
<string name="uploader_upload_forbidden_permissions">да отпремите ову фасциклу</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Отпремање %2$s</string>
<string name="uploader_upload_in_progress_ticker">Отпремам…</string>
<string name="uploader_upload_succeeded_content_single">%1$s отпремљено</string>

View File

@ -241,7 +241,6 @@
<string name="downloader_download_failed_credentials_error">Hämtningen misslyckades, logga in igen</string>
<string name="downloader_download_failed_ticker">Hämtning misslyckades</string>
<string name="downloader_download_file_not_found">Filen är inte längre tillgänglig på servern</string>
<string name="downloader_download_in_progress">%1$d%%%2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Hämtar %2$s</string>
<string name="downloader_download_in_progress_ticker">Hämtar…</string>
<string name="downloader_download_succeeded_content">%1$s hämtad</string>
@ -943,7 +942,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Behåll fil i källmappen</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Ta bort fil från källmappen</string>
<string name="uploader_upload_forbidden_permissions">att ladda upp denna mapp</string>
<string name="uploader_upload_in_progress">%1$d%%%2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Laddar upp %2$s</string>
<string name="uploader_upload_in_progress_ticker">Laddar upp…</string>
<string name="uploader_upload_succeeded_content_single">%1$s uppladdad</string>

View File

@ -241,7 +241,6 @@
<string name="downloader_download_failed_credentials_error">İndirilemedi, yeniden oturum açmalısınız</string>
<string name="downloader_download_failed_ticker">İndirilemedi</string>
<string name="downloader_download_file_not_found">Bu dosya artık sunucuda yok</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%%%1$d İndirilen: %2$s</string>
<string name="downloader_download_in_progress_ticker">İndiriliyor …</string>
<string name="downloader_download_succeeded_content">%1$s indirildi</string>
@ -942,7 +941,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Kaynak klasördeki dosya tutulsun</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Dosya kaynak klasörden silinsin</string>
<string name="uploader_upload_forbidden_permissions">bu klasöre yükleyemezsiniz</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%%%1$d Yüklenen: %2$s</string>
<string name="uploader_upload_in_progress_ticker">Yükleniyor …</string>
<string name="uploader_upload_succeeded_content_single">%1$s yüklendi</string>

View File

@ -230,7 +230,6 @@
<string name="downloader_download_failed_credentials_error">下载失败,请重新登录</string>
<string name="downloader_download_failed_ticker">下载失败</string>
<string name="downloader_download_file_not_found">该文件在服务器上不可用</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% 正在下载 %2$s</string>
<string name="downloader_download_in_progress_ticker">正在下载…</string>
<string name="downloader_download_succeeded_content">已下载了 %1$s</string>
@ -951,7 +950,6 @@ Nextcloud 是一个私有文件同步、共享和通信服务器。它是自由
<string name="uploader_upload_files_behaviour_only_upload">在原文件夹中保留文件</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">从原文件夹中删除文件</string>
<string name="uploader_upload_forbidden_permissions">上传到此文件夹</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% 正在上传 %2$s</string>
<string name="uploader_upload_in_progress_ticker">正在上传…</string>
<string name="uploader_upload_succeeded_content_single">已上传了 %1$s</string>

View File

@ -242,7 +242,6 @@
<string name="downloader_download_failed_credentials_error">下載失敗,再重新登入</string>
<string name="downloader_download_failed_ticker">下載失敗</string>
<string name="downloader_download_file_not_found">這個檔案已經不存在於伺服器中</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% 下載中 %2$s</string>
<string name="downloader_download_in_progress_ticker">下載中…</string>
<string name="downloader_download_succeeded_content">%1$s 已下載</string>
@ -943,7 +942,6 @@
<string name="uploader_upload_files_behaviour_only_upload">在來源資料夾保留檔案</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">刪除來源資料夾中的檔案</string>
<string name="uploader_upload_forbidden_permissions">上傳至此資料夾</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% 上傳 %2$s 中</string>
<string name="uploader_upload_in_progress_ticker">上傳中…</string>
<string name="uploader_upload_succeeded_content_single">%1$s 已上傳</string>

View File

@ -242,7 +242,6 @@
<string name="downloader_download_failed_credentials_error">下載失敗,再重新登入</string>
<string name="downloader_download_failed_ticker">下載失敗</string>
<string name="downloader_download_file_not_found">這個檔案已經不存在於伺服器中</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% 下載中 %2$s</string>
<string name="downloader_download_in_progress_ticker">正在下載……</string>
<string name="downloader_download_succeeded_content">%1$s 已下載</string>
@ -943,7 +942,6 @@
<string name="uploader_upload_files_behaviour_only_upload">在來源資料夾保留檔案</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">刪除來源資料夾中的檔案</string>
<string name="uploader_upload_forbidden_permissions">上傳至此資料夾</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% 上傳 %2$s 中</string>
<string name="uploader_upload_in_progress_ticker">正在上傳……</string>
<string name="uploader_upload_succeeded_content_single">%1$s 已上傳</string>

View File

@ -181,8 +181,11 @@
<string name="active_user">Active user</string>
<string name="upload_chooser_title">Upload from…</string>
<string name="uploader_info_dirname">Folder name</string>
<string name="upload_notification_manager_start_text" translatable="false">%1$d / %2$d - %3$s</string>
<string name="upload_notification_manager_upload_in_progress_text" translatable="false">%1$d%%</string>
<string name="uploader_upload_in_progress_ticker">Uploading…</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Uploading %2$s</string>
<string name="uploader_upload_succeeded_content_single">%1$s uploaded</string>
<string name="uploader_upload_failed_ticker">Upload failed</string>
@ -211,8 +214,11 @@
<string name="uploads_view_upload_status_fetching_server_version">Fetching server version…</string>
<string name="uploads_view_later_waiting_to_upload">Waiting to upload</string>
<string name="uploads_view_group_header" translatable="false">%1$s (%2$d)</string>
<string name="downloader_notification_manager_download_text" translatable="false">%1$d / %2$d - %3$s</string>
<string name="downloader_notification_manager_in_progress_text" translatable="false">%1$d%%</string>
<string name="downloader_download_in_progress_ticker">Downloading…</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Downloading %2$s</string>
<string name="downloader_download_succeeded_ticker">Downloaded</string>
<string name="downloader_download_succeeded_content">%1$s downloaded</string>