NCShare+Menu.swift 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. //
  2. // NCShare+Menu.swift
  3. // Nextcloud
  4. //
  5. // Created by Henrik Storch on 16.03.22.
  6. // Copyright © 2022 Marino Faggiana. All rights reserved.
  7. //
  8. import Foundation
  9. extension NCShare {
  10. func toggleShareMenu(for share: tableShare) {
  11. var actions = [NCMenuAction]()
  12. if share.shareType == 3 {
  13. actions.append(
  14. NCMenuAction(
  15. title: NSLocalizedString("_share_add_sharelink_", comment: ""),
  16. icon: NCUtility.shared.loadImage(named: "shareAdd"),
  17. action: { _ in
  18. self.makeNewLinkShare()
  19. }
  20. )
  21. )
  22. }
  23. // if !folder {
  24. // actions.append(
  25. // NCMenuAction(
  26. // title: NSLocalizedString("_open_in_", comment: ""),
  27. // icon: NCUtility.shared.loadImage(named: "viewInFolder").imageColor(NCBrandColor.shared.brandElement),
  28. // action: { menuAction in
  29. // NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterShareViewIn)
  30. // }
  31. // )
  32. // )
  33. // }
  34. actions.append(
  35. NCMenuAction(
  36. title: NSLocalizedString("_share_advanced_permissions_", comment: ""),
  37. icon: NCUtility.shared.loadImage(named: "edit"),
  38. action: { _ in
  39. guard
  40. let advancePermission = UIStoryboard(name: "NCShare", bundle: nil).instantiateViewController(withIdentifier: "NCShareAdvancePermission") as? NCShareAdvancePermission,
  41. let navigationController = self.navigationController, !share.isInvalidated else { return }
  42. // FIXME: Fatal - Object has been deleted or invalidated
  43. advancePermission.networking = self.networking
  44. advancePermission.share = tableShare(value: share)
  45. advancePermission.metadata = self.metadata
  46. navigationController.pushViewController(advancePermission, animated: true)
  47. }
  48. )
  49. )
  50. // if sendMail {
  51. // actions.append(
  52. // NCMenuAction(
  53. // title: NSLocalizedString("_send_new_email_", comment: ""),
  54. // icon: NCUtility.shared.loadImage(named: "email").imageColor(NCBrandColor.shared.brandElement),
  55. // action: { menuAction in
  56. // NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterShareSendEmail)
  57. // }
  58. // )
  59. // )
  60. // }
  61. actions.append(
  62. NCMenuAction(
  63. title: NSLocalizedString("_share_unshare_", comment: ""),
  64. icon: NCUtility.shared.loadImage(named: "trash"),
  65. action: { _ in
  66. self.networking?.unShare(idShare: share.idShare)
  67. }
  68. )
  69. )
  70. self.presentMenu(with: actions)
  71. }
  72. func toggleUserPermissionMenu(isDirectory: Bool, tableShare: tableShare) {
  73. var actions = [NCMenuAction]()
  74. actions.append(
  75. NCMenuAction(
  76. title: NSLocalizedString("_share_read_only_", comment: ""),
  77. icon: UIImage(),
  78. selected: tableShare.permissions == (NCGlobal.shared.permissionReadShare + NCGlobal.shared.permissionShareShare) || tableShare.permissions == NCGlobal.shared.permissionReadShare,
  79. on: false,
  80. action: { _ in
  81. let canShare = CCUtility.isPermission(toCanShare: tableShare.permissions)
  82. let permissions = CCUtility.getPermissionsValue(byCanEdit: false, andCanCreate: false, andCanChange: false, andCanDelete: false, andCanShare: canShare, andIsFolder: isDirectory)
  83. self.updateSharePermissions(share: tableShare, permissions: permissions)
  84. }
  85. )
  86. )
  87. actions.append(
  88. NCMenuAction(
  89. title: isDirectory ? NSLocalizedString("_share_allow_upload_", comment: "") : NSLocalizedString("_share_editing_", comment: ""),
  90. icon: UIImage(),
  91. selected: hasUploadPermission(tableShare: tableShare),
  92. on: false,
  93. action: { _ in
  94. let canShare = CCUtility.isPermission(toCanShare: tableShare.permissions)
  95. let permissions = CCUtility.getPermissionsValue(byCanEdit: true, andCanCreate: true, andCanChange: true, andCanDelete: true, andCanShare: canShare, andIsFolder: isDirectory)
  96. self.updateSharePermissions(share: tableShare, permissions: permissions)
  97. }
  98. )
  99. )
  100. self.presentMenu(with: actions)
  101. }
  102. fileprivate func hasUploadPermission(tableShare: tableShare) -> Bool {
  103. let uploadPermissions = [
  104. NCGlobal.shared.permissionMaxFileShare,
  105. NCGlobal.shared.permissionMaxFolderShare,
  106. NCGlobal.shared.permissionDefaultFileRemoteShareNoSupportShareOption,
  107. NCGlobal.shared.permissionDefaultFolderRemoteShareNoSupportShareOption]
  108. return uploadPermissions.contains(tableShare.permissions)
  109. }
  110. func updateSharePermissions(share: tableShare, permissions: Int) {
  111. let updatedShare = tableShare(value: share)
  112. updatedShare.permissions = permissions
  113. networking?.updateShare(option: updatedShare)
  114. }
  115. }