Skip to content

Commit 17f8d42

Browse files
authored
Merge pull request #69 from claucambra/feature/imte-shared-state
Inform system of items' shared status
2 parents 41c1a7f + eedde0c commit 17f8d42

3 files changed

Lines changed: 80 additions & 0 deletions

File tree

Sources/NextcloudFileProviderKit/Item/Item.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,20 @@ public class Item: NSObject, NSFileProviderItem {
152152
}
153153
}
154154

155+
public var isShared: Bool {
156+
!metadata.shareType.isEmpty
157+
}
158+
159+
public var isSharedByCurrentUser: Bool {
160+
isShared && metadata.ownerId == account.id
161+
}
162+
163+
public var ownerNameComponents: PersonNameComponents? {
164+
guard isShared, !isSharedByCurrentUser else { return nil }
165+
let formatter = PersonNameComponentsFormatter()
166+
return formatter.personNameComponents(from: metadata.ownerDisplayName)
167+
}
168+
155169
public var childItemCount: NSNumber? {
156170
if metadata.directory {
157171
NSNumber(integerLiteral: dbManager.childItemCount(directoryMetadata: metadata))
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
//
2+
// ShareType.swift
3+
// NextcloudFileProviderKit
4+
//
5+
// Created by Claudio Cambra on 28/4/25.
6+
//
7+
8+
public enum ShareType: Int {
9+
case user = 0
10+
case group = 1
11+
case publicLink = 3
12+
case email = 4
13+
case federatedCloudShare = 6
14+
case circle = 7
15+
case talkConversation = 10
16+
}

Tests/NextcloudFileProviderKitTests/ItemPropertyTests.swift

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,4 +253,54 @@ final class ItemPropertyTests: XCTestCase {
253253
)
254254
XCTAssertFalse(item.capabilities.contains(.allowsTrashing))
255255
}
256+
257+
func testItemShared() {
258+
var sharedMetadata =
259+
SendableItemMetadata(ocId: "test-id", fileName: "test.txt", account: Self.account)
260+
sharedMetadata.shareType = [ShareType.publicLink.rawValue]
261+
sharedMetadata.ownerId = Self.account.id
262+
sharedMetadata.ownerDisplayName = "Mr. Tester Testarino"
263+
let sharedItem = Item(
264+
metadata: sharedMetadata,
265+
parentItemIdentifier: .rootContainer,
266+
account: Self.account,
267+
remoteInterface: MockRemoteInterface(),
268+
dbManager: Self.dbManager
269+
)
270+
XCTAssertTrue(sharedItem.isShared)
271+
XCTAssertTrue(sharedItem.isSharedByCurrentUser)
272+
XCTAssertNil(sharedItem.ownerNameComponents) // Should be nil if it is shared by us
273+
274+
var sharedByOtherMetadata = sharedMetadata
275+
sharedByOtherMetadata.ownerId = "claucambra"
276+
sharedByOtherMetadata.ownerDisplayName = "Claudio Cambra"
277+
let sharedByOtherTime = Item(
278+
metadata: sharedByOtherMetadata,
279+
parentItemIdentifier: .rootContainer,
280+
account: Self.account,
281+
remoteInterface: MockRemoteInterface(),
282+
dbManager: Self.dbManager
283+
)
284+
XCTAssertTrue(sharedByOtherTime.isShared)
285+
XCTAssertFalse(sharedByOtherTime.isSharedByCurrentUser)
286+
XCTAssertNotNil(sharedByOtherTime.ownerNameComponents)
287+
XCTAssertEqual(sharedByOtherTime.ownerNameComponents?.givenName, "Claudio")
288+
XCTAssertEqual(sharedByOtherTime.ownerNameComponents?.familyName, "Cambra")
289+
290+
var notSharedMetadata =
291+
SendableItemMetadata(ocId: "test-id", fileName: "test.txt", account: Self.account)
292+
notSharedMetadata.ownerId = Self.account.id
293+
notSharedMetadata.ownerDisplayName = "Mr. Tester Testarino"
294+
let notSharedItem = Item(
295+
metadata: notSharedMetadata,
296+
parentItemIdentifier: .rootContainer,
297+
account: Self.account,
298+
remoteInterface: MockRemoteInterface(),
299+
dbManager: Self.dbManager
300+
)
301+
debugPrint(notSharedMetadata.shareType)
302+
XCTAssertFalse(notSharedItem.isShared)
303+
XCTAssertFalse(notSharedItem.isSharedByCurrentUser)
304+
XCTAssertNil(notSharedItem.ownerNameComponents)
305+
}
256306
}

0 commit comments

Comments
 (0)