Skip to content

Commit

Permalink
Merge branch 'release/2.4.9'
Browse files Browse the repository at this point in the history
  • Loading branch information
tobihagemann committed Mar 12, 2023
2 parents 03523e1 + 2cb5dbb commit 06bc2bf
Show file tree
Hide file tree
Showing 28 changed files with 309 additions and 117 deletions.
22 changes: 13 additions & 9 deletions Cryptomator.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -1003,6 +1003,8 @@
74AE94EF27A0282300D71AEC /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = "<group>"; };
74AE94F027A0283500D71AEC /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/Localizable.strings; sourceTree = "<group>"; };
74AE94F127A0285400D71AEC /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/Localizable.strings; sourceTree = "<group>"; };
74B46E5529BB8629000C1CC0 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = "<group>"; };
74B46E5629BB863C000C1CC0 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Intents.strings; sourceTree = "<group>"; };
74BDA62B26CE8AE1007FBD72 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = "<group>"; };
74C2BC4726E8E21D00BCAA03 /* OnboardingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingViewController.swift; sourceTree = "<group>"; };
74C2BC4926E8E24A00BCAA03 /* OnboardingViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingViewModel.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -2283,6 +2285,7 @@
el,
es,
fr,
he,
hi,
hr,
id,
Expand All @@ -2306,8 +2309,8 @@
);
mainGroup = 4A5E5B202453119100BD6298;
packageReferences = (
4A1521E227C55EA2006C96B2 /* XCRemoteSwiftPackageReference "TPInAppReceipt.git" */,
4AED9A6D286B38D900352951 /* XCRemoteSwiftPackageReference "SwiftUI-Introspect.git" */,
4A1521E227C55EA2006C96B2 /* XCRemoteSwiftPackageReference "TPInAppReceipt" */,
4AED9A6D286B38D900352951 /* XCRemoteSwiftPackageReference "SwiftUI-Introspect" */,
);
productRefGroup = 4A5E5B2A2453119100BD6298 /* Products */;
projectDirPath = "";
Expand Down Expand Up @@ -2976,7 +2979,6 @@
};
4A9172722619F16C003C4043 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
productRef = 4A9172712619F16C003C4043;
};
4A9BED69268F379300721BAA /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
Expand Down Expand Up @@ -3030,6 +3032,7 @@
74275AD728478E050058AD25 /* el */,
74275AE428478E130058AD25 /* es */,
74275AD628478E040058AD25 /* fr */,
74B46E5629BB863C000C1CC0 /* he */,
74275AD828478E060058AD25 /* hi */,
74275AD328478E010058AD25 /* hr */,
74275AD928478E070058AD25 /* id */,
Expand Down Expand Up @@ -3075,6 +3078,7 @@
74267A0326A5793E004C61BC /* el */,
74267A0426A57944004C61BC /* es */,
74267A0526A57947004C61BC /* fr */,
74B46E5529BB8629000C1CC0 /* he */,
74A1B13D2726A9E60098224B /* hi */,
74E93B75281010E50047A116 /* hr */,
74AE94F127A0285400D71AEC /* id */,
Expand Down Expand Up @@ -3260,7 +3264,7 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MARKETING_VERSION = 2.4.8;
MARKETING_VERSION = 2.4.9;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
Expand Down Expand Up @@ -3322,7 +3326,7 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MARKETING_VERSION = 2.4.8;
MARKETING_VERSION = 2.4.9;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
OTHER_SWIFT_FLAGS = "-Xfrontend -warn-long-expression-type-checking=200 -Xfrontend -warn-long-function-bodies=200";
Expand Down Expand Up @@ -3660,15 +3664,15 @@
/* End XCConfigurationList section */

/* Begin XCRemoteSwiftPackageReference section */
4A1521E227C55EA2006C96B2 /* XCRemoteSwiftPackageReference "TPInAppReceipt.git" */ = {
4A1521E227C55EA2006C96B2 /* XCRemoteSwiftPackageReference "TPInAppReceipt" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/tikhop/TPInAppReceipt.git";
requirement = {
kind = upToNextMinorVersion;
minimumVersion = 3.3.0;
};
};
4AED9A6D286B38D900352951 /* XCRemoteSwiftPackageReference "SwiftUI-Introspect.git" */ = {
4AED9A6D286B38D900352951 /* XCRemoteSwiftPackageReference "SwiftUI-Introspect" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/siteline/SwiftUI-Introspect.git";
requirement = {
Expand All @@ -3681,7 +3685,7 @@
/* Begin XCSwiftPackageProductDependency section */
4A1521E327C55EA2006C96B2 /* TPInAppReceipt */ = {
isa = XCSwiftPackageProductDependency;
package = 4A1521E227C55EA2006C96B2 /* XCRemoteSwiftPackageReference "TPInAppReceipt.git" */;
package = 4A1521E227C55EA2006C96B2 /* XCRemoteSwiftPackageReference "TPInAppReceipt" */;
productName = TPInAppReceipt;
};
4A33092C282EC23400876A3E /* CryptomatorCommonCore */ = {
Expand All @@ -3698,7 +3702,7 @@
};
4AED9A6E286B38DA00352951 /* Introspect */ = {
isa = XCSwiftPackageProductDependency;
package = 4AED9A6D286B38D900352951 /* XCRemoteSwiftPackageReference "SwiftUI-Introspect.git" */;
package = 4AED9A6D286B38D900352951 /* XCRemoteSwiftPackageReference "SwiftUI-Introspect" */;
productName = Introspect;
};
/* End XCSwiftPackageProductDependency section */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@
"repositoryURL": "https://github.com/aws-amplify/aws-sdk-ios-spm.git",
"state": {
"branch": null,
"revision": "eae68dde708c17a3ed249f1926e96d5bda20d2d2",
"version": "2.28.5"
"revision": "51d99d74be7249ac6444581bd1e394fb60ea86a3",
"version": "2.30.4"
}
},
{
Expand All @@ -42,8 +42,8 @@
"repositoryURL": "https://github.com/cryptomator/cloud-access-swift.git",
"state": {
"branch": null,
"revision": "99fa3b966d153cfb1ee34755bd3b4736b4a25ab6",
"version": "1.7.4"
"revision": "c9eaa84a3e73aceef10fc724d386eab3d6e3cbb7",
"version": "1.7.5"
}
},
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ class CreateNewVaultChooseFolderViewController: ChooseFolderViewController {
return
}
do {
coordinator?.chooseItem(try viewModel.chooseCurrentFolder())
try coordinator?.chooseItem(viewModel.chooseCurrentFolder())
} catch {
coordinator?.handleError(error, for: self)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class SetVaultNameViewController: SingleSectionStaticUITableViewController {

@objc func nextButtonClicked() {
do {
coordinator?.setVaultName(try viewModel.getValidatedVaultName())
try coordinator?.setVaultName(viewModel.getValidatedVaultName())
} catch {
coordinator?.handleError(error, for: self)
}
Expand Down
2 changes: 1 addition & 1 deletion Cryptomator/Common/CloudAuthenticator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class CloudAuthenticator {
func authenticateGoogleDrive(from viewController: UIViewController) -> Promise<CloudProviderAccount> {
let credential = GoogleDriveCredential()
return GoogleDriveAuthenticator.authenticate(credential: credential, from: viewController).then { () -> CloudProviderAccount in
let account = CloudProviderAccount(accountUID: try credential.getAccountID(), cloudProviderType: .googleDrive)
let account = try CloudProviderAccount(accountUID: credential.getAccountID(), cloudProviderType: .googleDrive)
try self.accountManager.saveNewAccount(account)
return account
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public class MasterkeyCacheKeychainManager: MasterkeyCacheManager {
public func cacheMasterkey(_ masterkey: Masterkey, forVaultUID vaultUID: String) throws {
let cachedMasterkey = CachedMasterkey(rawKey: masterkey.rawKey)
let jsonEncoder = JSONEncoder()
try keychain.set(vaultUID, value: try jsonEncoder.encode(cachedMasterkey))
try keychain.set(vaultUID, value: jsonEncoder.encode(cachedMasterkey))
}

public func getMasterkey(forVaultUID vaultUID: String) throws -> Masterkey? {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public class VaultDBManager: VaultManager {
try FileManager.default.createDirectory(at: tmpDirURL, withIntermediateDirectories: true)
masterkey = try Masterkey.createNew()
vaultConfigToken = try vaultConfig.toToken(keyId: "masterkeyfile:masterkey.cryptomator", rawKey: masterkey.rawKey)
provider = LocalizedCloudProviderDecorator(delegate: try providerManager.getProvider(with: delegateAccountUID))
provider = try LocalizedCloudProviderDecorator(delegate: providerManager.getProvider(with: delegateAccountUID))
let masterkeyFileData = try exportMasterkey(masterkey, vaultVersion: VaultDBManager.fakeVaultVersion, password: password)
cachedVault = CachedVault(vaultUID: vaultUID, masterkeyFileData: masterkeyFileData, vaultConfigToken: vaultConfigToken, lastUpToDateCheck: Date(), masterkeyFileLastModifiedDate: nil, vaultConfigLastModifiedDate: nil)
} catch {
Expand Down Expand Up @@ -187,7 +187,7 @@ public class VaultDBManager: VaultManager {
public func createFromExisting(withVaultUID vaultUID: String, delegateAccountUID: String, vaultItem: VaultItem, password: String, storePasswordInKeychain: Bool) -> Promise<Void> {
let provider: LocalizedCloudProviderDecorator
do {
provider = LocalizedCloudProviderDecorator(delegate: try providerManager.getProvider(with: delegateAccountUID))
provider = try LocalizedCloudProviderDecorator(delegate: providerManager.getProvider(with: delegateAccountUID))
} catch {
return Promise(error)
}
Expand Down Expand Up @@ -234,7 +234,7 @@ public class VaultDBManager: VaultManager {
public func createLegacyFromExisting(withVaultUID vaultUID: String, delegateAccountUID: String, vaultItem: VaultItem, password: String, storePasswordInKeychain: Bool) -> Promise<Void> {
let provider: LocalizedCloudProviderDecorator
do {
provider = LocalizedCloudProviderDecorator(delegate: try providerManager.getProvider(with: delegateAccountUID))
provider = try LocalizedCloudProviderDecorator(delegate: providerManager.getProvider(with: delegateAccountUID))
} catch {
return Promise(error)
}
Expand Down Expand Up @@ -364,7 +364,7 @@ public class VaultDBManager: VaultManager {
}
let provider: CloudProvider
do {
provider = LocalizedCloudProviderDecorator(delegate: try providerManager.getProvider(with: account.delegateAccountUID))
provider = try LocalizedCloudProviderDecorator(delegate: providerManager.getProvider(with: account.delegateAccountUID))
} catch {
return Promise(error)
}
Expand Down Expand Up @@ -392,7 +392,7 @@ public class VaultDBManager: VaultManager {
masterkeyFileData = try changePassphrase(masterkeyFileData: cachedVault.masterkeyFileData, oldPassphrase: oldPassphrase, newPassphrase: newPassphrase)
vaultAccount = try vaultAccountManager.getAccount(with: vaultUID)
try FileManager.default.createDirectory(at: tmpDirURL, withIntermediateDirectories: true)
provider = LocalizedCloudProviderDecorator(delegate: try providerManager.getProvider(with: vaultAccount.delegateAccountUID))
provider = try LocalizedCloudProviderDecorator(delegate: providerManager.getProvider(with: vaultAccount.delegateAccountUID))
} catch {
return Promise(error)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ extension VaultKeepUnlockedManager: VaultKeepUnlockedSettings {

public func setKeepUnlockedDuration(_ duration: KeepUnlockedDuration, forVaultUID vaultUID: String) throws {
let jsonEncoder = JSONEncoder()
try keychain.set(getKeepUnlockedDurationKey(forVaultUID: vaultUID), value: try jsonEncoder.encode(duration))
try keychain.set(getKeepUnlockedDurationKey(forVaultUID: vaultUID), value: jsonEncoder.encode(duration))
}

public func removeKeepUnlockedDuration(forVaultUID vaultUID: String) throws {
Expand All @@ -112,7 +112,7 @@ extension VaultKeepUnlockedManager: VaultKeepUnlockedSettings {

public func setLastUsedDate(_ date: Date, forVaultUID vaultUID: String) throws {
let jsonEncoder = JSONEncoder()
try keychain.set(getLastUsedDateKey(forVaultUID: vaultUID), value: try jsonEncoder.encode(date))
try keychain.set(getLastUsedDateKey(forVaultUID: vaultUID), value: jsonEncoder.encode(date))
}

private func getKeepUnlockedDurationKey(forVaultUID vaultUID: String) -> String {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ import XCTest
class ItemNameValidatorTests: XCTestCase {
func testValidateItemName() throws {
try ItemNameValidator.validateName("foo..pages")
assertThrowsItemNameValidatorError(try ItemNameValidator.validateName("foo."), expectedError: .nameEndsWithPeriod)
assertThrowsItemNameValidatorError(try ItemNameValidator.validateName("foo "), expectedError: .nameEndsWithSpace)
try assertThrowsItemNameValidatorError(ItemNameValidator.validateName("foo."), expectedError: .nameEndsWithPeriod)
try assertThrowsItemNameValidatorError(ItemNameValidator.validateName("foo "), expectedError: .nameEndsWithSpace)
}

func testValidateItemNameIllegalCharacter() throws {
Expand Down Expand Up @@ -46,7 +46,7 @@ class ItemNameValidatorTests: XCTestCase {
}

private func assertThrowsIllegalCharacterErrorWhenValidating(_ name: String, illegalCharacter: String) {
assertThrowsItemNameValidatorError(try ItemNameValidator.validateName(name), expectedError: .nameContainsIllegalCharacter(illegalCharacter))
try assertThrowsItemNameValidatorError(ItemNameValidator.validateName(name), expectedError: .nameContainsIllegalCharacter(illegalCharacter))
}

private func assertThrowsItemNameValidatorError(_ expression: @autoclosure () throws -> Void, expectedError: ItemNameValidatorError) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,7 @@ class VaultDBCacheTests: XCTestCase {
} else {
data = updatedVaultConfigData
}
return Promise(try data.write(to: downloadDestination))
return try Promise(data.write(to: downloadDestination))
}

private func defaultFetchItemMetadataMock(_ cloudPath: CloudPath) -> Promise<CloudItemMetadata> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ class VaultManagerTests: XCTestCase {
XCTAssertTrue(cloudProviderMock.createdFolders[2].hasPrefix(CloudPath("/Vault/d/").path) && cloudProviderMock.createdFolders[2].count == 11)
XCTAssertTrue(cloudProviderMock.createdFolders[3].hasPrefix(cloudProviderMock.createdFolders[2] + "/") && cloudProviderMock.createdFolders[3].count == 42)

let uploadedMasterkeyFile = try MasterkeyFile.withContentFromData(data: try getUploadedMasterkeyFileData())
let uploadedMasterkeyFile = try MasterkeyFile.withContentFromData(data: getUploadedMasterkeyFileData())
XCTAssertEqual(999, uploadedMasterkeyFile.version)
let uploadedMasterkey = try uploadedMasterkeyFile.unlock(passphrase: "pw")

Expand Down Expand Up @@ -657,7 +657,7 @@ class VaultManagerTests: XCTestCase {
.filter { $0.cloudPath == cloudPath }
.map { cloudProviderMock.tmpDir.appendingPathComponent($0.cloudPath) }
.first
return try Data(contentsOf: try XCTUnwrap(uploadedFileURL))
return try Data(contentsOf: XCTUnwrap(uploadedFileURL))
}
}

Expand Down
14 changes: 7 additions & 7 deletions CryptomatorFileProviderTests/DB/MaintenanceManagerTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ class MaintenanceManagerTests: XCTestCase {

// Prevent INSERT
try manager.enableMaintenanceMode()
checkThrowsMaintenanceError(try uploadTaskManager.createNewTaskRecord(for: itemMetadata))
try checkThrowsMaintenanceError(uploadTaskManager.createNewTaskRecord(for: itemMetadata))
}

func testPreventCreatingReparentTasks() throws {
Expand All @@ -59,7 +59,7 @@ class MaintenanceManagerTests: XCTestCase {

// Prevent INSERT
try manager.enableMaintenanceMode()
checkThrowsMaintenanceError(try reparentTaskManager.createTaskRecord(for: itemMetadata, targetCloudPath: CloudPath("Foo"), newParentID: 1))
try checkThrowsMaintenanceError(reparentTaskManager.createTaskRecord(for: itemMetadata, targetCloudPath: CloudPath("Foo"), newParentID: 1))
}

func testPreventCreatingDeletionTasks() throws {
Expand All @@ -68,7 +68,7 @@ class MaintenanceManagerTests: XCTestCase {

// Prevent INSERT
try manager.enableMaintenanceMode()
checkThrowsMaintenanceError(try deletionTaskManager.createTaskRecord(for: itemMetadata))
try checkThrowsMaintenanceError(deletionTaskManager.createTaskRecord(for: itemMetadata))
}

func testPreventCreatingItemEnumerationTasks() throws {
Expand All @@ -77,7 +77,7 @@ class MaintenanceManagerTests: XCTestCase {

// Prevent INSERT
try manager.enableMaintenanceMode()
checkThrowsMaintenanceError(try itemEnumerationTaskManager.createTask(for: itemMetadata, pageToken: nil))
try checkThrowsMaintenanceError(itemEnumerationTaskManager.createTask(for: itemMetadata, pageToken: nil))
}

func testPreventCreatingDownloadTasks() throws {
Expand All @@ -86,7 +86,7 @@ class MaintenanceManagerTests: XCTestCase {

// Prevent INSERT
try manager.enableMaintenanceMode()
checkThrowsMaintenanceError(try downloadTaskManager.createTask(for: itemMetadata, replaceExisting: true, localURL: URL(string: "/Test")!, onURLSessionTaskCreation: nil))
try checkThrowsMaintenanceError(downloadTaskManager.createTask(for: itemMetadata, replaceExisting: true, localURL: URL(string: "/Test")!, onURLSessionTaskCreation: nil))
}

// MARK: - Prevent enabling maintenance mode for running tasks
Expand Down Expand Up @@ -157,7 +157,7 @@ class MaintenanceManagerTests: XCTestCase {

func assertOnlyFalseAllowedForInsertOrUpdate() throws {
// Prevent INSERT true
checkThrowsRunningTaskError(try manager.enableMaintenanceMode())
try checkThrowsRunningTaskError(manager.enableMaintenanceMode())

// Allow INSERT false
try manager.disableMaintenanceMode()
Expand All @@ -166,6 +166,6 @@ class MaintenanceManagerTests: XCTestCase {
try manager.disableMaintenanceMode()

// Prevent UPDATE with true
checkThrowsRunningTaskError(try manager.enableMaintenanceMode())
try checkThrowsRunningTaskError(manager.enableMaintenanceMode())
}
}
12 changes: 6 additions & 6 deletions CryptomatorFileProviderTests/DB/MetadataManagerTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ class MetadataManagerTests: XCTestCase {
let id = try XCTUnwrap(itemMetadata.id)
try manager.setTagData(to: tagData, forItemWithID: id)

let cachedMetadata = try XCTUnwrap(try manager.getCachedMetadata(for: id))
let cachedMetadata = try XCTUnwrap(manager.getCachedMetadata(for: id))
XCTAssertEqual(tagData, cachedMetadata.tagData)
}

Expand All @@ -253,7 +253,7 @@ class MetadataManagerTests: XCTestCase {
let id = try XCTUnwrap(itemMetadata.id)
try manager.setTagData(to: nil, forItemWithID: id)

let cachedMetadata = try XCTUnwrap(try manager.getCachedMetadata(for: id))
let cachedMetadata = try XCTUnwrap(manager.getCachedMetadata(for: id))
XCTAssertNil(cachedMetadata.tagData)
}

Expand All @@ -267,7 +267,7 @@ class MetadataManagerTests: XCTestCase {
try manager.cacheMetadata(itemMetadata)

let id = try XCTUnwrap(itemMetadata.id)
let cachedMetadata = try XCTUnwrap(try manager.getCachedMetadata(for: id))
let cachedMetadata = try XCTUnwrap(manager.getCachedMetadata(for: id))
XCTAssertEqual(tagData, cachedMetadata.tagData)
}

Expand All @@ -281,7 +281,7 @@ class MetadataManagerTests: XCTestCase {
let id = try XCTUnwrap(itemMetadata.id)
try manager.setFavoriteRank(to: favoriteRank, forItemWithID: id)

let cachedMetadata = try XCTUnwrap(try manager.getCachedMetadata(for: id))
let cachedMetadata = try XCTUnwrap(manager.getCachedMetadata(for: id))
XCTAssertEqual(favoriteRank, cachedMetadata.favoriteRank)
}

Expand All @@ -292,7 +292,7 @@ class MetadataManagerTests: XCTestCase {
let id = try XCTUnwrap(itemMetadata.id)
try manager.setFavoriteRank(to: nil, forItemWithID: id)

let cachedMetadata = try XCTUnwrap(try manager.getCachedMetadata(for: id))
let cachedMetadata = try XCTUnwrap(manager.getCachedMetadata(for: id))
XCTAssertNil(cachedMetadata.favoriteRank)
}

Expand All @@ -306,7 +306,7 @@ class MetadataManagerTests: XCTestCase {
try manager.cacheMetadata(itemMetadata)

let id = try XCTUnwrap(itemMetadata.id)
let cachedMetadata = try XCTUnwrap(try manager.getCachedMetadata(for: id))
let cachedMetadata = try XCTUnwrap(manager.getCachedMetadata(for: id))
XCTAssertEqual(favoriteRank, cachedMetadata.favoriteRank)
}
}
Expand Down
Loading

0 comments on commit 06bc2bf

Please sign in to comment.