Skip to content

Commit ee24b75

Browse files
committed
fix inside metadataworker
Signed-off-by: alperozturk <[email protected]>
1 parent a40f8fb commit ee24b75

File tree

3 files changed

+27
-34
lines changed

3 files changed

+27
-34
lines changed

app/src/main/java/com/nextcloud/client/database/dao/FileDao.kt

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -111,13 +111,4 @@ interface FileDao {
111111
"""
112112
)
113113
fun searchFilesInFolder(parentId: Long, fileOwner: String, query: String): List<FileEntity>
114-
115-
@Query(
116-
"""
117-
SELECT COUNT(*)
118-
FROM filelist
119-
WHERE parent = :parentId
120-
"""
121-
)
122-
fun getChildFileCount(parentId: Long): Int
123114
}

app/src/main/java/com/nextcloud/client/jobs/metadata/MetadataWorker.kt

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class MetadataWorker(private val context: Context, params: WorkerParameters, pri
5555
return Result.success()
5656
}
5757

58-
@Suppress("DEPRECATION")
58+
@Suppress("DEPRECATION", "TooGenericExceptionCaught")
5959
private suspend fun refreshFolder(folder: OCFile, storageManager: FileDataStorageManager) =
6060
withContext(Dispatchers.IO) {
6161
Log_OC.d(
@@ -72,12 +72,23 @@ class MetadataWorker(private val context: Context, params: WorkerParameters, pri
7272

7373
Log_OC.d(TAG, "⏳ Fetching metadata for: ${folder.remotePath}")
7474

75-
val operation = RefreshFolderOperation(folder, storageManager, user, context)
76-
val result = operation.execute(user, context)
77-
if (result.isSuccess) {
78-
Log_OC.d(TAG, "✅ Successfully fetched metadata for: ${folder.remotePath}")
79-
} else {
80-
Log_OC.e(TAG, "❌ Failed to fetch metadata for: ${folder.remotePath}")
75+
try {
76+
val operation = RefreshFolderOperation(folder, storageManager, user, context)
77+
val result = operation.execute(user, context)
78+
if (result.isSuccess) {
79+
Log_OC.d(TAG, "✅ Successfully fetched metadata for: ${folder.remotePath}")
80+
} else {
81+
Log_OC.e(TAG, "❌ Failed to fetch metadata for: ${folder.remotePath}, resetting e-Tag")
82+
resetETag(folder, storageManager)
83+
}
84+
} catch (e: Exception) {
85+
Log_OC.e(TAG, "❌ Exception during to fetch metadata for: ${folder.remotePath}, resetting e-Tag $e")
86+
resetETag(folder, storageManager)
8187
}
8288
}
89+
90+
private fun resetETag(folder: OCFile, storageManager: FileDataStorageManager) {
91+
folder.etag = ""
92+
storageManager.saveFile(folder)
93+
}
8394
}

app/src/main/java/com/owncloud/android/operations/RefreshFolderOperation.java

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -411,11 +411,10 @@ private RemoteOperationResult checkForChanges(OwnCloudClient client) {
411411
Log_OC.d(TAG, "Checking changes in " + user.getAccountName() + remotePath);
412412

413413
// remote request
414-
result = new ReadFolderRemoteOperation(remotePath).execute(client);
414+
result = new ReadFileRemoteOperation(remotePath).execute(client);
415415

416416
if (result.isSuccess()) {
417-
final var childFiles = result.getData();
418-
if (!mIgnoreETag && childFiles.get(0) instanceof RemoteFile remoteFile) {
417+
if (!mIgnoreETag && result.getData().get(0) instanceof RemoteFile remoteFile) {
419418
// check if remote and local folder are different
420419
String remoteFolderETag = remoteFile.getEtag();
421420
if (remoteFolderETag != null) {
@@ -429,14 +428,6 @@ private RemoteOperationResult checkForChanges(OwnCloudClient client) {
429428
" Remote eTag: " + remoteFolderETag + "\n" +
430429
" Changed: " + mRemoteFolderChanged
431430
);
432-
433-
// result.getData() returns folder itself with child files
434-
final int remoteChildFileSize = childFiles.size() - 1;
435-
final int childFileSize = fileDataStorageManager.fileDao.getChildFileCount(mLocalFolder.getFileId());
436-
if (childFileSize != remoteChildFileSize) {
437-
mRemoteFolderChanged = true;
438-
Log_OC.w(TAG, "file sizes are not matching, setting remote folder changed as true");
439-
}
440431
} else {
441432
Log_OC.e(TAG, "Checked " + user.getAccountName() + remotePath + ": No ETag received from server");
442433
}
@@ -535,12 +526,6 @@ private void synchronizeData(List<Object> folderAndFiles) {
535526
// update richWorkspace
536527
mLocalFolder.setRichWorkspace(remoteFolder.getRichWorkspace());
537528

538-
// update eTag
539-
mLocalFolder.setEtag(remoteFolder.getEtag());
540-
541-
// update size
542-
mLocalFolder.setFileLength(remoteFolder.getFileLength());
543-
544529
Object object = null;
545530
if (mLocalFolder.isEncrypted()) {
546531
object = getDecryptedFolderMetadata(encryptedAncestor,
@@ -628,6 +613,7 @@ private void synchronizeData(List<Object> folderAndFiles) {
628613
updatedFile.setEncrypted(encrypted);
629614

630615
updatedFiles.add(updatedFile);
616+
Log_OC.d(TAG, "folder: " + mLocalFolder.getRemotePath() + " file: " + updatedFile.getRemotePath() + " metadataWorking: " + isMetadataSyncWorkerRunning);
631617
}
632618

633619

@@ -643,8 +629,13 @@ private void synchronizeData(List<Object> folderAndFiles) {
643629
mLocalFolder);
644630
}
645631
fileDataStorageManager.saveFolder(remoteFolder, updatedFiles, localFilesMap.values());
646-
647632
mChildren = updatedFiles;
633+
634+
// update eTag
635+
mLocalFolder.setEtag(remoteFolder.getEtag());
636+
637+
// update size
638+
mLocalFolder.setFileLength(remoteFolder.getFileLength());
648639
}
649640

650641
@Nullable

0 commit comments

Comments
 (0)