UpdateSharePermissionsOperation.java 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. /*
  2. * Nextcloud - Android Client
  3. *
  4. * SPDX-FileCopyrightText: 2020-2021 Tobias Kaminsky <tobias@kaminsky.me>
  5. * SPDX-FileCopyrightText: 2018 Andy Scherzinger <info@andy-scherzinger.de>
  6. * SPDX-FileCopyrightText: 2015 ownCloud Inc.
  7. * SPDX-FileCopyrightText: 2015 David A. Velasco <dvelasco@solidgear.es>
  8. * SPDX-License-Identifier: GPL-2.0-only AND AGPL-3.0-or-later
  9. */
  10. package com.owncloud.android.operations;
  11. import android.text.TextUtils;
  12. import com.owncloud.android.datamodel.FileDataStorageManager;
  13. import com.owncloud.android.lib.common.OwnCloudClient;
  14. import com.owncloud.android.lib.common.operations.RemoteOperation;
  15. import com.owncloud.android.lib.common.operations.RemoteOperationResult;
  16. import com.owncloud.android.lib.resources.files.FileUtils;
  17. import com.owncloud.android.lib.resources.shares.GetShareRemoteOperation;
  18. import com.owncloud.android.lib.resources.shares.OCShare;
  19. import com.owncloud.android.lib.resources.shares.UpdateShareRemoteOperation;
  20. import com.owncloud.android.operations.common.SyncOperation;
  21. /**
  22. * Updates an existing private share for a given file.
  23. */
  24. public class UpdateSharePermissionsOperation extends SyncOperation {
  25. private final long shareId;
  26. private int permissions;
  27. private long expirationDateInMillis;
  28. private String password;
  29. private String path;
  30. /**
  31. * Constructor
  32. *
  33. * @param shareId Private {@link OCShare} to update. Mandatory argument
  34. */
  35. public UpdateSharePermissionsOperation(long shareId, FileDataStorageManager storageManager) {
  36. super(storageManager);
  37. this.shareId = shareId;
  38. permissions = -1;
  39. expirationDateInMillis = 0L;
  40. password = null;
  41. }
  42. @Override
  43. protected RemoteOperationResult run(OwnCloudClient client) {
  44. OCShare share = getStorageManager().getShareById(shareId); // ShareType.USER | ShareType.GROUP
  45. if (share == null) {
  46. // TODO try to get remote share before failing?
  47. return new RemoteOperationResult(RemoteOperationResult.ResultCode.SHARE_NOT_FOUND);
  48. }
  49. path = share.getPath();
  50. // Update remote share with password
  51. UpdateShareRemoteOperation updateOp = new UpdateShareRemoteOperation(share.getRemoteId());
  52. updateOp.setPassword(password);
  53. updateOp.setPermissions(permissions);
  54. updateOp.setExpirationDate(expirationDateInMillis);
  55. RemoteOperationResult result = updateOp.execute(client);
  56. if (result.isSuccess()) {
  57. RemoteOperation getShareOp = new GetShareRemoteOperation(share.getRemoteId());
  58. result = getShareOp.execute(client);
  59. if (result.isSuccess()) {
  60. share = (OCShare) result.getData().get(0);
  61. // TODO check permissions are being saved
  62. updateData(share);
  63. }
  64. }
  65. return result;
  66. }
  67. private void updateData(OCShare share) {
  68. // Update DB with the response
  69. share.setPath(path); // TODO - check if may be moved to UpdateRemoteShareOperation
  70. share.setFolder(path.endsWith(FileUtils.PATH_SEPARATOR));
  71. share.setPasswordProtected(!TextUtils.isEmpty(password));
  72. getStorageManager().saveShare(share);
  73. }
  74. public String getPassword() {
  75. return this.password;
  76. }
  77. public String getPath() {
  78. return this.path;
  79. }
  80. public void setPermissions(int permissions) {
  81. this.permissions = permissions;
  82. }
  83. public void setExpirationDateInMillis(long expirationDateInMillis) {
  84. this.expirationDateInMillis = expirationDateInMillis;
  85. }
  86. public void setPassword(String password) {
  87. this.password = password;
  88. }
  89. }