NCShare+Menu.swift 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  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("_details_", 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. advancePermission.networking = self.networking
  43. advancePermission.share = tableShare(value: share)
  44. advancePermission.metadata = self.metadata
  45. navigationController.pushViewController(advancePermission, animated: true)
  46. }
  47. )
  48. )
  49. // if sendMail {
  50. // actions.append(
  51. // NCMenuAction(
  52. // title: NSLocalizedString("_send_new_email_", comment: ""),
  53. // icon: NCUtility.shared.loadImage(named: "email").imageColor(NCBrandColor.shared.brandElement),
  54. // action: { menuAction in
  55. // NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterShareSendEmail)
  56. // }
  57. // )
  58. // )
  59. // }
  60. actions.append(
  61. NCMenuAction(
  62. title: NSLocalizedString("_share_unshare_", comment: ""),
  63. icon: NCUtility.shared.loadImage(named: "trash"),
  64. action: { _ in
  65. self.networking?.unShare(idShare: share.idShare)
  66. }
  67. )
  68. )
  69. self.presentMenu(with: actions)
  70. }
  71. func toggleUserPermissionMenu(isDirectory: Bool, tableShare: tableShare) {
  72. var actions = [NCMenuAction]()
  73. actions.append(
  74. NCMenuAction(
  75. title: NSLocalizedString("_share_read_only_", comment: ""),
  76. icon: UIImage(),
  77. selected: tableShare.permissions == (NCGlobal.shared.permissionReadShare + NCGlobal.shared.permissionShareShare) || tableShare.permissions == NCGlobal.shared.permissionReadShare,
  78. on: false,
  79. action: { _ in
  80. let canShare = CCUtility.isPermission(toCanShare: tableShare.permissions)
  81. let permissions = CCUtility.getPermissionsValue(byCanEdit: false, andCanCreate: false, andCanChange: false, andCanDelete: false, andCanShare: canShare, andIsFolder: isDirectory)
  82. self.updateSharePermissions(share: tableShare, permissions: permissions)
  83. }
  84. )
  85. )
  86. actions.append(
  87. NCMenuAction(
  88. title: isDirectory ? NSLocalizedString("_share_allow_upload_", comment: "") : NSLocalizedString("_share_editing_", comment: ""),
  89. icon: UIImage(),
  90. selected: hasUploadPermission(tableShare: tableShare),
  91. on: false,
  92. action: { _ in
  93. let canShare = CCUtility.isPermission(toCanShare: tableShare.permissions)
  94. let permissions = CCUtility.getPermissionsValue(byCanEdit: true, andCanCreate: true, andCanChange: true, andCanDelete: true, andCanShare: canShare, andIsFolder: isDirectory)
  95. self.updateSharePermissions(share: tableShare, permissions: permissions)
  96. }
  97. )
  98. )
  99. self.presentMenu(with: actions)
  100. }
  101. fileprivate func hasUploadPermission(tableShare: tableShare) -> Bool {
  102. let uploadPermissions = [
  103. NCGlobal.shared.permissionMaxFileShare,
  104. NCGlobal.shared.permissionMaxFolderShare,
  105. NCGlobal.shared.permissionDefaultFileRemoteShareNoSupportShareOption,
  106. NCGlobal.shared.permissionDefaultFolderRemoteShareNoSupportShareOption]
  107. return uploadPermissions.contains(tableShare.permissions)
  108. }
  109. func updateSharePermissions(share: tableShare, permissions: Int) {
  110. let updatedShare = tableShare(value: share)
  111. updatedShare.permissions = permissions
  112. networking?.updateShare(option: updatedShare)
  113. }
  114. }