Skip to content

Commit 3704807

Browse files
committed
allow case sensitive files in same directory if wcf not enabled
Signed-off-by: alperozturk96 <alper_ozturk@proton.me>
1 parent 7838dd2 commit 3704807

3 files changed

Lines changed: 28 additions & 6 deletions

File tree

app/src/main/java/com/nextcloud/client/jobs/autoUpload/AutoUploadWorker.kt

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import com.nextcloud.client.database.entity.toOCUpload
1919
import com.nextcloud.client.database.entity.toUploadEntity
2020
import com.nextcloud.client.device.PowerManagementService
2121
import com.nextcloud.client.jobs.upload.FileUploadEventBroadcaster
22+
import com.nextcloud.client.jobs.upload.FileUploadHelper
2223
import com.nextcloud.client.jobs.upload.FileUploadWorker
2324
import com.nextcloud.client.jobs.utils.UploadErrorNotificationManager
2425
import com.nextcloud.client.network.ConnectivityService
@@ -38,8 +39,10 @@ import com.owncloud.android.lib.common.OwnCloudAccount
3839
import com.owncloud.android.lib.common.OwnCloudClientManagerFactory
3940
import com.owncloud.android.lib.common.operations.RemoteOperationResult
4041
import com.owncloud.android.lib.common.utils.Log_OC
42+
import com.owncloud.android.lib.resources.status.OCCapability
4143
import com.owncloud.android.operations.UploadFileOperation
4244
import com.owncloud.android.ui.activity.SettingsActivity
45+
import com.owncloud.android.utils.theme.CapabilityUtils
4346
import com.owncloud.android.utils.theme.ViewThemeUtils
4447
import kotlinx.coroutines.Dispatchers
4548
import kotlinx.coroutines.ensureActive
@@ -73,6 +76,7 @@ class AutoUploadWorker(
7376
private val fileUploadEventBroadcaster = FileUploadEventBroadcaster(localBroadcastManager)
7477
private lateinit var syncedFolder: SyncedFolder
7578
private val notificationManager = AutoUploadNotificationManager(context, viewThemeUtils, NOTIFICATION_ID)
79+
private val fileUploadHelper = FileUploadHelper.instance()
7680

7781
@Suppress("ReturnCount")
7882
override suspend fun doWork(): Result {
@@ -243,6 +247,7 @@ class AutoUploadWorker(
243247
val ocAccount = OwnCloudAccount(user.toPlatformAccount(), context)
244248
val client = OwnCloudClientManagerFactory.getDefaultSingleton()
245249
.getClientFor(ocAccount, context)
250+
val capability = CapabilityUtils.getCapability(user, context)
246251

247252
updateNotification()
248253

@@ -265,7 +270,7 @@ class AutoUploadWorker(
265270
val remotePath = syncFolderHelper.getAutoUploadRemotePath(syncedFolder, file)
266271

267272
try {
268-
val entityResult = getEntityResult(user, localPath, remotePath)
273+
val entityResult = getEntityResult(user, localPath, remotePath, capability)
269274
if (entityResult !is AutoUploadEntityResult.Success) {
270275
repository.markFileAsHandled(localPath, syncedFolder)
271276
Log_OC.d(TAG, "marked file as handled: $localPath")
@@ -358,12 +363,17 @@ class AutoUploadWorker(
358363
}
359364

360365
@Suppress("ReturnCount")
361-
private fun getEntityResult(user: User, localPath: String, remotePath: String): AutoUploadEntityResult {
366+
private fun getEntityResult(
367+
user: User,
368+
localPath: String,
369+
remotePath: String,
370+
capability: OCCapability
371+
): AutoUploadEntityResult {
362372
val (needsCharging, needsWifi, uploadAction) = getUploadSettings(syncedFolder)
363373
Log_OC.d(TAG, "creating oc upload for ${user.accountName}")
364374

365375
// Get existing upload or create new one
366-
val uploadEntity = uploadsStorageManager.uploadDao.getUploadByAccountAndPaths(
376+
val uploadEntity = fileUploadHelper.getUploadByPaths(
367377
localPath = localPath,
368378
remotePath = remotePath,
369379
accountName = user.accountName
@@ -379,7 +389,7 @@ class AutoUploadWorker(
379389
}
380390

381391
val upload = try {
382-
uploadEntity?.toOCUpload(null) ?: OCUpload(localPath, remotePath, user.accountName)
392+
uploadEntity?.toOCUpload(capability) ?: OCUpload(localPath, remotePath, user.accountName)
383393
} catch (_: IllegalArgumentException) {
384394
Log_OC.e(TAG, "cannot construct oc upload")
385395
return AutoUploadEntityResult.CreationError

app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadHelper.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import com.nextcloud.client.jobs.upload.FileUploadWorker.Companion.currentUpload
2323
import com.nextcloud.client.network.Connectivity
2424
import com.nextcloud.client.network.ConnectivityService
2525
import com.nextcloud.client.notifications.AppWideNotificationManager
26+
import com.nextcloud.utils.extensions.checkWCFRestrictions
2627
import com.nextcloud.utils.extensions.getUploadIds
2728
import com.owncloud.android.MainApp
2829
import com.owncloud.android.R
@@ -281,12 +282,19 @@ class FileUploadHelper {
281282

282283
@Suppress("ReturnCount")
283284
fun getUploadByPaths(accountName: String, localPath: String, remotePath: String): UploadEntity? {
284-
uploadsStorageManager.uploadDao.getUploadByAccountAndPaths(
285+
val entity = uploadsStorageManager.uploadDao.getUploadByAccountAndPaths(
285286
accountName,
286287
localPath,
287288
remotePath
288289
)?.let { return it }
289290

291+
val capability = fileStorageManager.getCapability(accountManager.user)
292+
if (!capability.checkWCFRestrictions()) {
293+
// The filesystem should treat files as case-sensitive. For example, "a.TXT" and "a.txt"
294+
// are allowed to exist in the same directory as two distinct files.
295+
return entity
296+
}
297+
290298
val dotIndex = remotePath.lastIndexOf('.')
291299
if (dotIndex == -1) return null
292300

app/src/main/java/com/owncloud/android/ui/adapter/UploadListAdapter.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -837,7 +837,11 @@ public final void loadUploadItemsFromDb(Runnable onCompleted) {
837837
final int index = i;
838838
Section sec = sections.get(index);
839839

840-
uploadHelper.getUploadsByStatus(accountName, sec.status(), sec.collisionPolicy(), uploads -> {
840+
uploadHelper.getUploadsByStatus(accountName,
841+
sec.status(),
842+
parentActivity.getCapabilities(),
843+
sec.collisionPolicy(),
844+
uploads -> {
841845
for (OCUpload upload : uploads) {
842846
upload.setDataFixed(uploadHelper);
843847
}

0 commit comments

Comments
 (0)