Skip to content
This repository has been archived by the owner on Mar 19, 2024. It is now read-only.

[New arch] Fetch list of files #335

Merged
merged 4 commits into from
Jul 28, 2020

Conversation

abelgardep
Copy link
Contributor

@abelgardep abelgardep commented Jul 8, 2020

@@ -85,6 +85,7 @@ public RemoteFile createFromParcel(Parcel source) {
private BigDecimal mQuotaUsedBytes;
private BigDecimal mQuotaAvailableBytes;
private String mPrivateLink;
private String mOwner;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess this is needed because the account name and user name is not always the same, right?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not at all, i just want to have it earlier. Previously it was included in FileDataStorageManager, and i think it is easier to handle it here, so localdatasource won't need to ask the current account to add this attribute.

Comment on lines +56 to +98
override fun run(client: OwnCloudClient): RemoteOperationResult<ArrayList<RemoteFile>> {
try {
val propfindMethod = PropfindMethod(
URL(client.userFilesWebDavUri.toString() + WebdavUtils.encodePath(remotePath)),
DavConstants.DEPTH_1,
DavUtils.getAllPropset()
)
client.setFollowRedirects(true)

val status = client.executeHttpMethod(propfindMethod)

if (isSuccess(status)) {
val mFolderAndFiles = ArrayList<RemoteFile>()

// parse data from remote folder
val remoteFolder = RemoteFile(propfindMethod.root, AccountUtils.getUserId(mAccount, mContext)).apply {
owner = mAccount.name
}
mFolderAndFiles.add(remoteFolder)

// loop to update every child
propfindMethod.members.forEach { resource ->
val file = RemoteFile(resource, AccountUtils.getUserId(mAccount, mContext))
file.owner = mAccount.name
mFolderAndFiles.add(file)
}

// Result of the operation
return RemoteOperationResult<ArrayList<RemoteFile>>(ResultCode.OK).apply {
data = mFolderAndFiles
Timber.i("Synchronized $remotePath with ${mFolderAndFiles.size} files. ${this.logMessage}")
}
} else { // synchronization failed
return RemoteOperationResult<ArrayList<RemoteFile>>(propfindMethod).also {
Timber.w("Synchronized $remotePath ${it.logMessage}")
}
}
} catch (e: Exception) {
return RemoteOperationResult<ArrayList<RemoteFile>>(e).also {
Timber.e(it.exception, "Synchronized $remotePath")
}
}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
override fun run(client: OwnCloudClient): RemoteOperationResult<ArrayList<RemoteFile>> {
try {
val propfindMethod = PropfindMethod(
URL(client.userFilesWebDavUri.toString() + WebdavUtils.encodePath(remotePath)),
DavConstants.DEPTH_1,
DavUtils.getAllPropset()
)
client.setFollowRedirects(true)
val status = client.executeHttpMethod(propfindMethod)
if (isSuccess(status)) {
val mFolderAndFiles = ArrayList<RemoteFile>()
// parse data from remote folder
val remoteFolder = RemoteFile(propfindMethod.root, AccountUtils.getUserId(mAccount, mContext)).apply {
owner = mAccount.name
}
mFolderAndFiles.add(remoteFolder)
// loop to update every child
propfindMethod.members.forEach { resource ->
val file = RemoteFile(resource, AccountUtils.getUserId(mAccount, mContext))
file.owner = mAccount.name
mFolderAndFiles.add(file)
}
// Result of the operation
return RemoteOperationResult<ArrayList<RemoteFile>>(ResultCode.OK).apply {
data = mFolderAndFiles
Timber.i("Synchronized $remotePath with ${mFolderAndFiles.size} files. ${this.logMessage}")
}
} else { // synchronization failed
return RemoteOperationResult<ArrayList<RemoteFile>>(propfindMethod).also {
Timber.w("Synchronized $remotePath ${it.logMessage}")
}
}
} catch (e: Exception) {
return RemoteOperationResult<ArrayList<RemoteFile>>(e).also {
Timber.e(it.exception, "Synchronized $remotePath")
}
}
}
override fun run(client: OwnCloudClient): RemoteOperationResult<ArrayList<RemoteFile>> =
try {
val propfindMethod = PropfindMethod(
URL(client.userFilesWebDavUri.toString() + WebdavUtils.encodePath(remotePath)),
DavConstants.DEPTH_1,
DavUtils.getAllPropset()
)
client.setFollowRedirects(true)
val status = client.executeHttpMethod(propfindMethod)
if (isSuccess(status)) {
// Result of the operation
RemoteOperationResult<ArrayList<RemoteFile>>(ResultCode.OK).apply {
val remoteFolder = RemoteFile(propfindMethod.root, AccountUtils.getUserId(mAccount, mContext)).apply {
owner = mAccount.name
}
data.add(remoteFolder)
propfindMethod.members.forEach { resource ->
val file = RemoteFile(resource, AccountUtils.getUserId(mAccount, mContext))
file.owner = mAccount.name
data.add(file)
}
}.also {
Timber.i("Synchronized $remotePath with ${it.data.size} files. ${it.logMessage}")
}
} else { // synchronization failed
RemoteOperationResult<ArrayList<RemoteFile>>(propfindMethod).also {
Timber.w("Synchronized $remotePath ${it.logMessage}")
}
}
} catch (e: Exception) {
RemoteOperationResult<ArrayList<RemoteFile>>(e).also {
Timber.e(it.exception, "Synchronized $remotePath")
}
}

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I understand your point of view and it is less verbose, but i think we lose readability using it that way.

@abelgardep abelgardep merged commit 7ae9bf9 into new_arch/synchronization Jul 28, 2020
@delete-merged-branch delete-merged-branch bot deleted the new_arch/fetch_list_files branch July 28, 2020 15:12
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants