Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 10 additions & 8 deletions damus.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -1104,6 +1104,7 @@
BA3759972ABCCF360018D73B /* CameraPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA3759962ABCCF360018D73B /* CameraPreview.swift */; };
BA693074295D649800ADDB87 /* UserSettingsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA693073295D649800ADDB87 /* UserSettingsStore.swift */; };
BAB68BED29543FA3007BA466 /* SelectWalletView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAB68BEC29543FA3007BA466 /* SelectWalletView.swift */; };
C202FAFBC9A9ADB18452B3FD /* DamusPurpleAccountAttributesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEA3385A6B39ECC1A305F612 /* DamusPurpleAccountAttributesTests.swift */; };
D2277EEA2A089BD5006C3807 /* Router.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2277EE92A089BD5006C3807 /* Router.swift */; };
D2585C7839C411EB3E0D79D6 /* RepostNotificationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64D0A2B0F048CC8D494945E6 /* RepostNotificationTests.swift */; };
D5C1AFBF2E5DF7E60092F72F /* ContactCardManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5C1AFBE2E5DF7E60092F72F /* ContactCardManager.swift */; };
Expand Down Expand Up @@ -1500,7 +1501,6 @@
D73E5EFB2C6A97F4007EB227 /* ProfilePicturesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C30AC7F29A6A53F00E2BD5A /* ProfilePicturesView.swift */; };
D73E5EFC2C6A97F4007EB227 /* DamusAppNotificationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D78CD5972B8990300014D539 /* DamusAppNotificationView.swift */; };
D73E5EFD2C6A97F4007EB227 /* InnerTimelineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE0E2B529A3ED5500DB4CA2 /* InnerTimelineView.swift */; };
D73E5EFE2C6A97F4007EB227 /* (null) in Sources */ = {isa = PBXBuildFile; };
D73E5EFF2C6A97F4007EB227 /* ZapsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE879572996C45300F758CC /* ZapsView.swift */; };
D73E5F002C6A97F4007EB227 /* CustomizeZapView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9F18E129AA9B6C008C55EC /* CustomizeZapView.swift */; };
D73E5F012C6A97F4007EB227 /* ZapTypePicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CA3FA0F29F593D000FDB3C3 /* ZapTypePicker.swift */; };
Expand Down Expand Up @@ -2907,6 +2907,7 @@
E0EE9DD32B8E5FEA00F3002D /* ImageProcessing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageProcessing.swift; sourceTree = "<group>"; };
E4FA1C022A24BB7F00482697 /* SearchSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchSettingsView.swift; sourceTree = "<group>"; };
E990020E2955F837003BBC5A /* EditMetadataView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditMetadataView.swift; sourceTree = "<group>"; };
EEA3385A6B39ECC1A305F612 /* DamusPurpleAccountAttributesTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DamusPurpleAccountAttributesTests.swift; sourceTree = "<group>"; };
F71694E92A662232001F4053 /* OnboardingSuggestionsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingSuggestionsView.swift; sourceTree = "<group>"; };
F71694EB2A662292001F4053 /* SuggestedUsersViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestedUsersViewModel.swift; sourceTree = "<group>"; };
F71694F12A67314D001F4053 /* SuggestedUserView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestedUserView.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -3934,6 +3935,7 @@
4C0ED07E2D7A1E260020D8A2 /* Benchmarking.swift */,
3A92C1012DE17ACA00CEEBAC /* NIP05DomainTimelineHeaderViewTests.swift */,
C0AE7EE3216D7983A50BE2D9 /* LoadableNostrEventViewModelTests.swift */,
EEA3385A6B39ECC1A305F612 /* DamusPurpleAccountAttributesTests.swift */,
);
path = damusTests;
sourceTree = "<group>";
Expand Down Expand Up @@ -5643,7 +5645,7 @@
);
mainGroup = 4CE6DEDA27F7A08100C66700;
packageReferences = (
4C64987F286E0EE300EAE2B3 /* XCRemoteSwiftPackageReference "secp256k1" */,
4C64987F286E0EE300EAE2B3 /* XCRemoteSwiftPackageReference "secp256k1.swift" */,
4C06670228FC7EC500038D2A /* XCRemoteSwiftPackageReference "Kingfisher" */,
4CCF9AB02A1FE80B00E03CFB /* XCRemoteSwiftPackageReference "GSPlayer" */,
4C27C9302A64766F007DBC75 /* XCRemoteSwiftPackageReference "swift-markdown-ui" */,
Expand Down Expand Up @@ -6404,6 +6406,7 @@
E02B54182B4DFADA0077FF42 /* Bech32ObjectTests.swift in Sources */,
3A92C1022DE17ACA00CEEBAC /* NIP05DomainTimelineHeaderViewTests.swift in Sources */,
EBCC3486DE53D8DB2532B98E /* LoadableNostrEventViewModelTests.swift in Sources */,
C202FAFBC9A9ADB18452B3FD /* DamusPurpleAccountAttributesTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -7262,7 +7265,6 @@
D73E5EFB2C6A97F4007EB227 /* ProfilePicturesView.swift in Sources */,
D73E5EFC2C6A97F4007EB227 /* DamusAppNotificationView.swift in Sources */,
D73E5EFD2C6A97F4007EB227 /* InnerTimelineView.swift in Sources */,
D73E5EFE2C6A97F4007EB227 /* (null) in Sources */,
D7EB00B02CD59C8D00660C07 /* PresentFullScreenItemNotify.swift in Sources */,
D73E5EFF2C6A97F4007EB227 /* ZapsView.swift in Sources */,
D73E5F002C6A97F4007EB227 /* CustomizeZapView.swift in Sources */,
Expand Down Expand Up @@ -8469,7 +8471,7 @@
kind = branch;
};
};
4C64987F286E0EE300EAE2B3 /* XCRemoteSwiftPackageReference "secp256k1" */ = {
4C64987F286E0EE300EAE2B3 /* XCRemoteSwiftPackageReference "secp256k1.swift" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/jb55/secp256k1.swift";
requirement = {
Expand Down Expand Up @@ -8581,12 +8583,12 @@
};
4C649880286E0EE300EAE2B3 /* secp256k1 */ = {
isa = XCSwiftPackageProductDependency;
package = 4C64987F286E0EE300EAE2B3 /* XCRemoteSwiftPackageReference "secp256k1" */;
package = 4C64987F286E0EE300EAE2B3 /* XCRemoteSwiftPackageReference "secp256k1.swift" */;
productName = secp256k1;
};
82D6FC802CD99FC500C925F4 /* secp256k1 */ = {
isa = XCSwiftPackageProductDependency;
package = 4C64987F286E0EE300EAE2B3 /* XCRemoteSwiftPackageReference "secp256k1" */;
package = 4C64987F286E0EE300EAE2B3 /* XCRemoteSwiftPackageReference "secp256k1.swift" */;
productName = secp256k1;
};
82D6FC832CD9A48500C925F4 /* Kingfisher */ = {
Expand All @@ -8611,7 +8613,7 @@
};
D703D7482C6709B100A400EA /* secp256k1 */ = {
isa = XCSwiftPackageProductDependency;
package = 4C64987F286E0EE300EAE2B3 /* XCRemoteSwiftPackageReference "secp256k1" */;
package = 4C64987F286E0EE300EAE2B3 /* XCRemoteSwiftPackageReference "secp256k1.swift" */;
productName = secp256k1;
};
D703D7AC2C670FA700A400EA /* MarkdownUI */ = {
Expand Down Expand Up @@ -8661,7 +8663,7 @@
};
D789D11F2AFEFBF20083A7AB /* secp256k1 */ = {
isa = XCSwiftPackageProductDependency;
package = 4C64987F286E0EE300EAE2B3 /* XCRemoteSwiftPackageReference "secp256k1" */;
package = 4C64987F286E0EE300EAE2B3 /* XCRemoteSwiftPackageReference "secp256k1.swift" */;
productName = secp256k1;
};
D78DB8582C1CE9CA00F0AB12 /* SwipeActions */ = {
Expand Down
22 changes: 13 additions & 9 deletions damus/Features/Purple/Models/DamusPurple.swift
Original file line number Diff line number Diff line change
Expand Up @@ -418,13 +418,10 @@ class DamusPurple: StoreObserverDelegate {
let expiry: Date
let subscriber_number: Int
let active: Bool
let attributes: PurpleAccountAttributes

struct PurpleAccountAttributes: OptionSet {
let rawValue: Int

static let memberForMoreThanOneYear = PurpleAccountAttributes(rawValue: 1 << 0)
}
/// Active membership duration in seconds, as reported by the API.
let active_membership_duration: TimeInterval

static let one_year: TimeInterval = 360 * 24 * 60 * 60

func ordinal() -> String? {
let number = Int(self.subscriber_number)
Expand All @@ -440,13 +437,17 @@ class DamusPurple: StoreObserverDelegate {

static func from(payload: Payload) -> Self? {
guard let pubkey = Pubkey(hex: payload.pubkey) else { return nil }

let duration = payload.attributes?.active_membership_duration
?? (payload.attributes?.member_for_more_than_one_year == true ? Self.one_year + 1 : 0)

return Self(
pubkey: pubkey,
created_at: Date.init(timeIntervalSince1970: TimeInterval(payload.created_at)),
expiry: Date.init(timeIntervalSince1970: TimeInterval(payload.expiry)),
subscriber_number: Int(payload.subscriber_number),
active: payload.active,
attributes: (payload.attributes?.member_for_more_than_one_year ?? false) ? [.memberForMoreThanOneYear] : []
active_membership_duration: duration
)
}

Expand All @@ -459,7 +460,10 @@ class DamusPurple: StoreObserverDelegate {
let attributes: Attributes?

struct Attributes: Codable {
let member_for_more_than_one_year: Bool
/// Kept for backward compatibility with older server responses.
let member_for_more_than_one_year: Bool?
/// Active membership duration in seconds. Optional for backward compatibility.
let active_membership_duration: TimeInterval?
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions damus/Features/Purple/Views/DamusPurpleAccountView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ struct DamusPurpleAccountView: View {
expiry: Date.init(timeIntervalSinceNow: 60 * 60 * 24 * 30),
subscriber_number: 7,
active: true,
attributes: []
active_membership_duration: 0
)
)
}
Expand All @@ -150,7 +150,7 @@ struct DamusPurpleAccountView: View {
expiry: Date.init(timeIntervalSinceNow: -60 * 60 * 24 * 7),
subscriber_number: 7,
active: false,
attributes: []
active_membership_duration: 0
)
)
}
Loading