Merge pull request #3455 from nextcloud/DocumentProviderRefreshNew

Document provider: refresh
This commit is contained in:
Andy Scherzinger 2019-01-16 11:21:52 +01:00 committed by GitHub
commit bea1560dd9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 53 additions and 8 deletions

View file

@ -114,6 +114,11 @@ public class RefreshFolderOperation extends RemoteOperation {
/** 'True' means that Etag will be ignored */
private boolean mIgnoreETag;
/**
* 'True' means that no share and no capabilities will be updated
*/
private boolean mOnlyFileMetadata;
private List<SynchronizeFileOperation> mFilesToSyncContents;
// this will be used for every file when 'folder synchronization' replaces 'folder download'
@ -148,6 +153,28 @@ public class RefreshFolderOperation extends RemoteOperation {
mForgottenLocalFiles = new HashMap<>();
mRemoteFolderChanged = false;
mIgnoreETag = ignoreETag;
mOnlyFileMetadata = false;
mFilesToSyncContents = new Vector<>();
}
public RefreshFolderOperation(OCFile folder,
long currentSyncTime,
boolean syncFullAccount,
boolean ignoreETag,
boolean onlyFileMetadata,
FileDataStorageManager dataStorageManager,
Account account,
Context context) {
mLocalFolder = folder;
mCurrentSyncTime = currentSyncTime;
mSyncFullAccount = syncFullAccount;
mStorageManager = dataStorageManager;
mAccount = account;
mContext = context;
mForgottenLocalFiles = new HashMap<>();
mRemoteFolderChanged = false;
mIgnoreETag = ignoreETag;
mOnlyFileMetadata = onlyFileMetadata;
mFilesToSyncContents = new Vector<>();
}
@ -185,7 +212,7 @@ public class RefreshFolderOperation extends RemoteOperation {
mConflictsFound = 0;
mForgottenLocalFiles.clear();
if (OCFile.ROOT_PATH.equals(mLocalFolder.getRemotePath()) && !mSyncFullAccount) {
if (OCFile.ROOT_PATH.equals(mLocalFolder.getRemotePath()) && !mSyncFullAccount && !mOnlyFileMetadata) {
updateOCVersion(client);
updateUserProfile();
}
@ -214,7 +241,7 @@ public class RefreshFolderOperation extends RemoteOperation {
);
}
if (result.isSuccess() && !mSyncFullAccount) {
if (result.isSuccess() && !mSyncFullAccount && !mOnlyFileMetadata) {
refreshSharesForFolder(client); // share result is ignored
}

View file

@ -42,6 +42,8 @@ import android.provider.DocumentsProvider;
import android.util.Log;
import android.widget.Toast;
import com.evernote.android.job.JobRequest;
import com.evernote.android.job.util.Device;
import com.owncloud.android.MainApp;
import com.owncloud.android.R;
import com.owncloud.android.authentication.AccountUtils;
@ -54,6 +56,7 @@ import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.operations.CreateFolderOperation;
import com.owncloud.android.operations.RefreshFolderOperation;
import com.owncloud.android.operations.RemoveFileOperation;
import com.owncloud.android.operations.SynchronizeFileOperation;
import com.owncloud.android.ui.activity.ConflictsResolveActivity;
@ -128,20 +131,35 @@ public class DocumentsStorageProvider extends DocumentsProvider {
return result;
}
@SuppressLint("LongLogTag")
@Override
public Cursor queryChildDocuments(String parentDocumentId, String[] projection, String sortOrder) {
public Cursor queryChildDocuments(String parentDocumentId, String[] projection, String sortOrder)
throws FileNotFoundException {
final long folderId = Long.parseLong(parentDocumentId);
updateCurrentStorageManagerIfNeeded(folderId);
final FileCursor result = new FileCursor(projection);
final OCFile browsedDir = currentStorageManager.getFileById(folderId);
for (OCFile file : currentStorageManager.getFolderContent(browsedDir, false)) {
result.addFile(file);
Account account = currentStorageManager.getAccount();
if (Device.getNetworkType(getContext()).equals(JobRequest.NetworkType.UNMETERED)) {
RemoteOperationResult result = new RefreshFolderOperation(browsedDir, System.currentTimeMillis(), false,
false, true, currentStorageManager, account,
getContext()).execute(client);
if (!result.isSuccess()) {
throw new FileNotFoundException("Failed to update document " + parentDocumentId);
}
}
return result;
final FileCursor resultCursor = new FileCursor(projection);
for (OCFile file : currentStorageManager.getFolderContent(browsedDir, false)) {
resultCursor.addFile(file);
}
return resultCursor;
}
@SuppressLint("LongLogTag")