Skip to content
Open
Show file tree
Hide file tree
Changes from 18 commits
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
cc1cee7
feat: multi-link modal for landing page
Jan 14, 2026
f9e682f
fix issues on getting pro state from backend
Jan 15, 2026
9b1c3bb
feat: config dev server
Jan 15, 2026
6ac15b7
feat: store revocation list in db and finish related TODOs
Jan 20, 2026
a1c412a
feat: on payment failure action and managing subscription handler
Jan 21, 2026
feeccc4
Merge branch 'dev' into session-pro-backend-integration-2
Jan 21, 2026
b92c16a
feat: finish TODOs and fix plan price format
Jan 27, 2026
7827e13
minor fix for mock up pro plan
Jan 27, 2026
911a911
fix: a bunch of issues related to Pro
Jan 29, 2026
2c688be
minor fix on price format
Jan 29, 2026
dde067a
fix: pro stats
Jan 29, 2026
c19cac5
fix cancel pro
Feb 2, 2026
4d82424
fix a bunch of issues related to renewing pro
Feb 2, 2026
6c70823
fix refund pro
Feb 4, 2026
ebb7145
fix: billing access logic
Feb 4, 2026
bd226d4
Merge branch 'dev' into session-pro-backend-integration-2
Feb 4, 2026
5872226
resolve feedbacks and small issues.
Feb 5, 2026
d12683b
clean up
Feb 5, 2026
cc53cb2
update build & version
Feb 5, 2026
ae7dc9c
fix: pro badges shouldn't show for Note To Self
Feb 8, 2026
9902d4a
fix: pro badge colour on set display picture modal
Feb 8, 2026
f3d5fca
Merge branch 'dev' into session-pro-backend-integration-2
Feb 8, 2026
4eb0f4a
fix: pro stats padding
Feb 9, 2026
00640eb
fix some UI/UX issues
Feb 9, 2026
11ffa0e
wip: fix strings
Feb 9, 2026
5f6ae60
fix strings in update pro plan non-originator screen
Feb 9, 2026
93c802c
fix pro info update
Feb 11, 2026
7680fdd
fix some strings
Feb 11, 2026
074c0d4
fix: animated DP and pro badge not showing
Feb 11, 2026
857151b
fix cancel pro screen non originator
Feb 12, 2026
42a209c
fix conversation heading pro badge
Feb 12, 2026
8ea7910
fix: prevent pro expiry timer to be negative
Feb 13, 2026
8063618
Merge branch 'dev' into session-pro-backend-integration-2
Feb 13, 2026
f928713
clean up
Feb 13, 2026
8c9c29f
feat: add accessibility ids for pro CTA
Feb 17, 2026
d03783e
fix: group avatar
Feb 17, 2026
7499835
feat: add account token to pro product purchase
Feb 18, 2026
6900f09
fix: pro badge color
Feb 18, 2026
3a2a45a
fix: thread settings screen profile picture
Feb 18, 2026
662f8c9
fix: note to self pro badge hidden and update pro plan modal
Feb 18, 2026
3de30f8
fix: do not handle errors in already redeem status
Feb 18, 2026
7761eaa
minor fix
Feb 18, 2026
26a2fd7
fix: pro plan update
Feb 18, 2026
302d698
feat: accessibility id in donation modal
Feb 18, 2026
b82a094
bump up build and version number
Feb 18, 2026
5425306
fix: libsession cached pro expiration not being updated correctly
Feb 19, 2026
ac3b069
fix: attach pro message to all kinds of proto messages
Feb 19, 2026
04581e9
fix: pro activated CTA
Feb 19, 2026
33f2bca
fix: pro payment screen open URL not working
Feb 19, 2026
5a4aea5
[Automated] Update translations from Crowdin
Bilb Feb 20, 2026
9a74bb2
fix: cancel pro non originator screen
Feb 20, 2026
62b1207
fix some strings and build variant
Feb 20, 2026
2fab03a
Merge branch 'dev' into session-pro-backend-integration-2
Feb 20, 2026
525a329
fix: pro badges in headings and convo lists
Feb 20, 2026
351f602
fix: avatar on home screen settings button not updated
Feb 22, 2026
2eadddd
fix: backward compatibility for pro users with pre pro client
Feb 23, 2026
e523df5
fix: pro cta circle mark icon colour
Feb 23, 2026
ace06e0
fix: input compose box in attachment screen
Feb 23, 2026
d82cb3a
fix: pro cta pin convo string
Feb 24, 2026
81179b0
fix: Pre-Pro, a long message is truncated at 2k not 10k
Feb 24, 2026
510769f
clean
Feb 24, 2026
f4a3bbf
fix: circle tick icon in message info screen
Feb 24, 2026
e08d5dc
fix: animated display picture in pro cta for RTL
Feb 24, 2026
da8c008
Merge branch 'dev' into session-pro-backend-integration-2
Feb 24, 2026
c5a1f23
fix: pro refund screen
Feb 24, 2026
530d763
fix: pro badge incorrectly displayed in session heading
Feb 25, 2026
661780f
fix: pro cancel non originator screen
Feb 25, 2026
24be217
Merge branch 'feature/update-crowdin-translations' of https://github.…
Feb 25, 2026
3567b60
fix some pro issues
Feb 25, 2026
dc1d0d4
[Automated] Update translations from Crowdin
ThomasSession Feb 25, 2026
bcb1dab
Merge branch 'feature/update-crowdin-translations' of https://github.…
Feb 25, 2026
d74a6d1
minor refactor
Feb 25, 2026
3a75459
minor fix
Feb 25, 2026
719982f
fix: error modal / CTA in attachment approval screen
Feb 25, 2026
0644881
fix pro expiry updated incorrectly in config message when doing a refund
Feb 25, 2026
193e39e
fix: string in no billing access screen
Feb 26, 2026
e09e6ed
fix: message character limit modal in attachment approval screen
Feb 26, 2026
846ac02
fix: pro expiration/auto-update timer formatting
Feb 26, 2026
3e1fb07
fix: strings and urls in refund request success screen
Feb 26, 2026
ec5c1b7
minor fix on iOS 26 swipe action ui
Feb 26, 2026
36b8aad
clean up
Feb 27, 2026
8ca0a3d
Merge branch 'dev' into session-pro-backend-integration-2
Feb 27, 2026
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
14 changes: 3 additions & 11 deletions Session.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -3321,16 +3321,6 @@
path = SessionNetworkScreen;
sourceTree = "<group>";
};
94805EC42EB8156A0055EBBC /* SessionPro */ = {
isa = PBXGroup;
children = (
948615C02ED7D39B000A5666 /* SessionProSettingsViewModel.swift */,
948615C12ED7D39B000A5666 /* SessionProSettingsViewModel+Database.swift */,
94805EC22EB48EC40055EBBC /* SessionProPaymentScreenContent.swift */,
);
path = SessionPro;
sourceTree = "<group>";
};
94CD96282E1B855E0097754D /* Input View */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -4182,7 +4172,6 @@
C3C2A6F125539DE700C340D1 /* SessionMessagingKit */ = {
isa = PBXGroup;
children = (
94805EC42EB8156A0055EBBC /* SessionPro */,
C3C2A7802553AA6300C340D1 /* Protos */,
C3C2A70A25539DF900C340D1 /* Meta */,
B8DE1FB226C22F1F0079C9CE /* Calls */,
Expand Down Expand Up @@ -5436,6 +5425,9 @@
FDAA36C42EB474B50040603E /* Types */,
FD1F3CF42ED69B5B00E536D5 /* Utilities */,
94B6BAF52E30A88800E718BB /* SessionProManager.swift */,
948615C02ED7D39B000A5666 /* SessionProSettingsViewModel.swift */,
948615C12ED7D39B000A5666 /* SessionProSettingsViewModel+Database.swift */,
94805EC22EB48EC40055EBBC /* SessionProPaymentScreenContent.swift */,
);
path = SessionPro;
sourceTree = "<group>";
Expand Down
8 changes: 7 additions & 1 deletion Session/Home/HomeViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -551,7 +551,13 @@ public class HomeViewModel: NavigatableStateHolder {
self?.transitionToScreen(viewController)
},
presenting: { [weak self, dependencies] modal in
dependencies[defaults: .standard, key: .hasShownProExpiringCTA] = true
switch info.variant {
case .expiring(timeLeft: .some):
dependencies[defaults: .standard, key: .hasShownProExpiringCTA] = true
case .expiring(timeLeft: .none):
dependencies[defaults: .standard, key: .hasShownProExpiredCTA] = true
default: return
}
self?.transitionToScreen(modal, transitionType: .present)
}
)
Expand Down
28 changes: 8 additions & 20 deletions Session/Onboarding/LandingScreen.swift
Original file line number Diff line number Diff line change
Expand Up @@ -178,26 +178,14 @@ struct LandingScreen: View {
}

private func openLegalUrl() {
let modal: ConfirmationModal = ConfirmationModal(
info: ConfirmationModal.Info(
title: "urlOpen".localized(),
body: .text("urlOpenBrowser".localized()),
confirmTitle: "onboardingTos".localized(),
confirmStyle: .textPrimary,
cancelTitle: "onboardingPrivacy".localized(),
cancelStyle: .textPrimary,
hasCloseButton: true,
onConfirm: { _ in
// TODO: [PRO] Update this to use the double url modal
if let url: URL = URL(string: Constants.urls.termsOfService) {
UIApplication.shared.open(url)
}
},
onCancel: { modal in
if let url: URL = URL(string: Constants.urls.privacyPolicy) {
UIApplication.shared.open(url)
}
modal.close()
let modal: ModalHostingViewController = ModalHostingViewController(
modal: MutipleLinksModal(
links: [
Constants.urls.termsOfService,
Constants.urls.privacyPolicy
],
openURL: { url in
UIApplication.shared.open(url)
}
)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1055,7 +1055,7 @@ class DeveloperSettingsProViewModel: SessionTableViewModel, NavigatableStateHold

await dependencies.notify(
key: .proRevocationListUpdated,
value: Array<Network.SessionPro.RevocationItem>()
value: Array<RevocationItem>()
)
}
catch {
Expand Down
4 changes: 4 additions & 0 deletions Session/Settings/SettingsViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -476,6 +476,10 @@ class SettingsViewModel: SessionTableViewModel, NavigationItemSource, Navigatabl
tintColor: .sessionButton_text
),
onTap: { [weak viewModel, dependencies = viewModel.dependencies] in
Task.detached(priority: .userInitiated) {
try? await dependencies[singleton: .sessionProManager].refreshProState()
}

let viewController: SessionListHostingViewController = SessionListHostingViewController(
viewModel: SessionProSettingsViewModel(using: dependencies),
customizedNavigationBackground: .clear
Expand Down
6 changes: 3 additions & 3 deletions SessionMessagingKit/Crypto/Crypto+LibSession.swift
Original file line number Diff line number Diff line change
Expand Up @@ -403,12 +403,12 @@ public extension Crypto.Generator {
id: "sessionProMasterKeyPair",
args: []
) { dependencies in
let cEd25519SecretKey: [UInt8] = dependencies[cache: .general].ed25519SecretKey
let cEd25519Seed: [UInt8] = dependencies[cache: .general].ed25519Seed
var cMasterSecretKey: [UInt8] = [UInt8](repeating: 0, count: 64)

guard !cEd25519SecretKey.isEmpty else { throw CryptoError.missingUserSecretKey }
guard !cEd25519Seed.isEmpty else { throw CryptoError.missingUserSecretKey }

guard session_ed25519_pro_privkey_for_ed25519_seed(cEd25519SecretKey, &cMasterSecretKey) else {
guard session_ed25519_pro_privkey_for_ed25519_seed(cEd25519Seed, &cMasterSecretKey) else {
throw CryptoError.keyGenerationFailed
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,18 @@ extension MessageSender {
)
}
}

switch destination {
case .syncMessage: break
default:
// Update pro stats here
if message.proMessageFeatures?.contains(.largerCharacterLimit) == true {
db[.longerMessagesSentCounter] = (db[.longerMessagesSentCounter] ?? 0) + 1
}
if message.proProfileFeatures?.contains(.proBadge) == true {
db[.proBadgesSentCounter] = (db[.proBadgesSentCounter] ?? 0) + 1
}
}
}
}
}
Expand Down
Loading