Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
9464cd2
Bump version to 1.28.2
SessionHero01 Oct 8, 2025
3c89197
Adding non penalizing status code so we don't drop snodes for the wro…
ThomasSession Oct 8, 2025
afa4e3a
Merge pull request #1587 from session-foundation/fix/better-onion-err…
ThomasSession Oct 8, 2025
c7dc279
Better error handling for errors in SOGS
ThomasSession Oct 8, 2025
4086837
fix: enhance error handling in onion requests
SessionHero01 Oct 9, 2025
506f3c8
Improve message query (#1588)
SessionHero01 Oct 9, 2025
c53e347
Set message correctly for generic HTTPRequestFailedException
SessionHero01 Oct 9, 2025
3f58027
Insuring a p roper fallback for community icons
ThomasSession Oct 9, 2025
b4de69f
Merge pull request #1589 from session-foundation/fix/better-onion-err…
ThomasSession Oct 9, 2025
d262a9f
SES-4656 - show loader while we are fetching the conversations
ThomasSession Oct 9, 2025
f6ed75e
Merge pull request #1590 from session-foundation/fix/ses-4656-share-l…
ThomasSession Oct 9, 2025
cd97a3a
Merge remote-tracking branch 'origin/master' into release/1.28.2
SessionHero01 Oct 9, 2025
5fc0f08
Don't listen to ime insets on a screen without input
ThomasSession Oct 9, 2025
ed9d755
Cleaning up logic
ThomasSession Oct 10, 2025
c43c7a2
Fix layout to avoid broken search result titles
ThomasSession Oct 10, 2025
19eb252
Merge pull request #1591 from session-foundation/fix/ses-4657-media-r…
ThomasSession Oct 10, 2025
082fbd3
Use coil to load image avatar (#1592)
SessionHero01 Oct 10, 2025
3965a00
Update build script so that we can produce release APKs without uploa…
SessionHero01 Oct 10, 2025
e016949
Sanitize logging
SessionHero01 Oct 10, 2025
25453b7
Show special icon when notifications are set to private
ThomasSession Oct 12, 2025
4791a6f
Better unknown notification handling
ThomasSession Oct 13, 2025
87ae5f4
Reworked the notification handler to run a 7 days preiodic re-registr…
ThomasSession Oct 13, 2025
cd84660
Improve getQuote performance (#1595)
SessionHero01 Oct 13, 2025
2264286
Fixed the logic
ThomasSession Oct 13, 2025
fc3e6b9
Merge pull request #1596 from session-foundation/feature/ses-4638-pn-…
ThomasSession Oct 13, 2025
3e5f9bd
Updated qr scanning logic
ThomasSession Oct 13, 2025
7b8cfcf
SES-4529 - Making sure the call tone is attached to the correct audio…
ThomasSession Oct 13, 2025
1fbc626
SES-4668 - Do not locally hangup on self-synced answers
ThomasSession Oct 13, 2025
d56a1fb
Merge pull request #1598 from session-foundation/fix/ses-4529-call-ri…
ThomasSession Oct 13, 2025
a358d78
Unused class cleanup
ThomasSession Oct 13, 2025
a9f56d4
returning true
ThomasSession Oct 13, 2025
2ee740b
Added comments
ThomasSession Oct 13, 2025
0b318db
Merge pull request #1597 from session-foundation/fix/ses-4663-better-…
ThomasSession Oct 13, 2025
8ef6792
Merge pull request #1605 from session-foundation/fix/store-issues
ThomasSession Oct 13, 2025
1de41af
SES-4676 - Fix up vibration for incoming call ring
ThomasSession Oct 14, 2025
1e05b7a
Do not crash in conversation without an address, instead take the use…
ThomasSession Oct 14, 2025
3ef4235
Make sure we reset our observable prefs
ThomasSession Oct 14, 2025
56e1c4c
typo and error refining
ThomasSession Oct 14, 2025
1153675
We shouldn't penalise a 400 from a SOGS
ThomasSession Oct 14, 2025
480523d
PR feedback
ThomasSession Oct 15, 2025
2e5994a
Merge pull request #1607 from session-foundation/ses-4676-call-vibrate
ThomasSession Oct 15, 2025
36ebc5c
Making sure we have access to the threadId when receiving an Unsend R…
ThomasSession Oct 15, 2025
48ff47b
Merge pull request #1611 from session-foundation/fix/ses-4679-delete-…
ThomasSession Oct 16, 2025
7bec6b1
Removing Promises from the OpenGroupAPI and its cascading classes
ThomasSession Oct 16, 2025
05e4475
Fixing reaction removal
ThomasSession Oct 16, 2025
36dcf0a
Making sure the reactions position themselves p roperly
ThomasSession Oct 16, 2025
4e315b3
Catching fire and forget coroutine calls
ThomasSession Oct 17, 2025
85908ce
PR feedback
ThomasSession Oct 17, 2025
4901be7
Merge pull request #1612 from session-foundation/fix/ses-4678-repeate…
ThomasSession Oct 17, 2025
2243e53
Recreating the DeleteNotificationReceiver in Kotlin and using corouti…
ThomasSession Oct 17, 2025
fbc0067
Updating the notification logic around the swipe off action
ThomasSession Oct 19, 2025
0852560
Optimise our compositionLocal as these two aren't changed often but r…
ThomasSession Oct 19, 2025
4b59add
PR feedback
ThomasSession Oct 20, 2025
79a0967
Merge pull request #1613 from session-foundation/fix/reaction-notific…
ThomasSession Oct 20, 2025
f2f1238
[SES-4634] - File server change (#1606)
SessionHero01 Oct 20, 2025
ff80724
Forced to add back message lookup by timestamp for unsend requests
ThomasSession Oct 21, 2025
9702b81
Merge pull request #1623 from session-foundation/fix/ses-4679-linked-…
ThomasSession Oct 21, 2025
34c5ce4
[SES-4677] - Move avatar download out of worker and restrict concurre…
SessionHero01 Oct 22, 2025
32e01a9
Fix non-deterministic profile encryption (#1629)
SessionHero01 Oct 22, 2025
3965e4d
Bumping version number
ThomasSession Oct 23, 2025
aa47ce8
Optimise push registration (#1627)
SessionHero01 Oct 24, 2025
d93041e
Update libraries and make sure debug toast is happening on main threa…
SessionHero01 Oct 24, 2025
6354c0c
[SES-4752] - Add alternative fileservers to debug menu (#1634)
SessionHero01 Oct 24, 2025
c5f41e3
Use correct ed25519 keys for fileserver (#1636)
SessionHero01 Oct 24, 2025
ce03c0b
Update last seen using max timestamp including reaction (#1637)
SessionHero01 Oct 26, 2025
6767bb8
Improve notification handling (#1639)
SessionHero01 Oct 27, 2025
fff612e
Group subscription no longer needs special signing (#1640)
SessionHero01 Oct 27, 2025
f2a818f
Bumping version number
ThomasSession Oct 27, 2025
83e06d7
Merge remote-tracking branch 'origin/master' into merge-master
SessionHero01 Oct 28, 2025
7d03637
Merge pull request #1646 from session-foundation/merge-master
SessionHero01 Oct 28, 2025
39e9051
Bump db migration version
SessionHero01 Oct 29, 2025
3911aaf
Fix deterministic encryption
SessionHero01 Oct 29, 2025
cf93f34
Merge pull request #1650 from session-foundation/ses-4795-deterministic
SessionHero01 Oct 29, 2025
2514663
Fixing timestamp update in SMS table
ThomasSession Oct 30, 2025
2b724a6
Merge branch 'release/1.29.0' of https://github.com/session-foundatio…
ThomasSession Oct 30, 2025
f4c25b0
Moving the timeout to the config wait only
ThomasSession Oct 30, 2025
d679519
Fixed avatar processing (#1649)
SessionHero01 Oct 30, 2025
c306015
[SES-4799] - Re-upload avatar when renew fails with expired files (#1…
SessionHero01 Oct 31, 2025
5e2f0f8
Remove profile cipher output stream which contains unsafe cipher usag…
SessionHero01 Oct 31, 2025
1da1df4
Fix a couple of avatar processing issues (#1655)
SessionHero01 Nov 3, 2025
aa2c8e8
Tweak group polling concurrency (#1661)
SessionHero01 Nov 4, 2025
e18695b
Fix a deadlock in group poller (#1663)
SessionHero01 Nov 5, 2025
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
5 changes: 3 additions & 2 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ configurations.configureEach {
exclude(module = "commons-logging")
}

val canonicalVersionCode = 428
val canonicalVersionName = "1.28.2"
val canonicalVersionCode = 429
val canonicalVersionName = "1.29.0"

val postFixSize = 10
val abiPostFix = mapOf(
Expand Down Expand Up @@ -402,6 +402,7 @@ dependencies {
implementation(libs.phrase)
implementation(libs.copper.flow)
implementation(libs.kotlinx.coroutines.android)
implementation(libs.kotlinx.coroutines.guava)
implementation(libs.kovenant)
implementation(libs.kovenant.android)
implementation(libs.opencsv)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ class FirebaseTokenFetcher @Inject constructor(): TokenFetcher {
override val token = MutableStateFlow<String?>(null)

init {
fetchToken()
}

private fun fetchToken() {
FirebaseMessaging.getInstance()
.token
.addOnSuccessListener(this::onNewToken)
Expand All @@ -23,5 +27,6 @@ class FirebaseTokenFetcher @Inject constructor(): TokenFetcher {

override suspend fun resetToken() {
FirebaseMessaging.getInstance().deleteToken().await()
fetchToken()
}
}
5 changes: 1 addition & 4 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -432,10 +432,7 @@
</intent-filter>
</receiver>
<receiver android:name="org.thoughtcrime.securesms.notifications.DeleteNotificationReceiver"
android:exported="true">
<intent-filter>
<action android:name="network.loki.securesms.DELETE_NOTIFICATION" />
</intent-filter>
android:exported="false">
</receiver>
<receiver
android:name="org.thoughtcrime.securesms.service.PanicResponderListener"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.session.libsession.utilities.recipients.RemoteFile
import org.session.libsignal.utilities.Log
import org.thoughtcrime.securesms.attachments.RemoteFileDownloadWorker
import org.thoughtcrime.securesms.attachments.AvatarDownloadManager
import org.thoughtcrime.securesms.database.RecipientSettingsDatabase
import org.thoughtcrime.securesms.dependencies.ManagerScope
import org.thoughtcrime.securesms.glide.RecipientAvatarDownloadManager
Expand Down Expand Up @@ -47,11 +47,11 @@ class AvatarCacheCleaner @Inject constructor(

// 4) Map to actual files (same hashing/location as downloader)
val wantedFiles: Set<File> = filesToKeep
.map { RemoteFileDownloadWorker.computeFileName(application, it) }
.map { AvatarDownloadManager.computeFileName(application, it) }
.toSet()

// 5) Delete everything not wanted in cache/remote_files
val files = RemoteFileDownloadWorker.listDownloadedFiles(application)
val files = AvatarDownloadManager.listDownloadedFiles(application)
var deleted = 0
for (file in files) {
if (file !in wantedFiles && file.delete()) deleted++
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import com.annimon.stream.Stream;

import org.session.libsession.utilities.Address;
import org.session.libsignal.utilities.Log;

import java.io.File;
import java.io.FileInputStream;
Expand All @@ -22,7 +21,7 @@
/**
* @deprecated We no longer use these address-based avatars. All avatars are now stored as sha256 of
* urls encrypted locally. Look at {@link org.thoughtcrime.securesms.attachments.LocalEncryptedFileOutputStream},
* {@link org.thoughtcrime.securesms.attachments.RemoteFileDownloadWorker},
* {@link org.thoughtcrime.securesms.attachments.AvatarDownloadWorker},
* {@link org.thoughtcrime.securesms.glide.RecipientAvatarDownloadManager} for more information.
*
* Once the migration grace period is over, this class shall be removed.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ interface MessageDataProvider {
fun getAttachmentStream(attachmentId: Long): SessionServiceAttachmentStream?
fun getAttachmentPointer(attachmentId: Long): SessionServiceAttachmentPointer?
fun getSignalAttachmentStream(attachmentId: Long): SignalServiceAttachmentStream?
fun getScaledSignalAttachmentStream(attachmentId: Long): SignalServiceAttachmentStream?
suspend fun getScaledSignalAttachmentStream(attachmentId: Long): SignalServiceAttachmentStream?
fun getSignalAttachmentPointer(attachmentId: Long): SignalServiceAttachmentPointer?
fun setAttachmentState(attachmentState: AttachmentState, attachmentId: AttachmentId, messageID: Long)
fun insertAttachment(messageId: Long, attachmentId: AttachmentId, stream : InputStream)
Expand All @@ -39,9 +39,8 @@ interface MessageDataProvider {
fun isDeletedMessage(id: MessageId): Boolean
fun handleSuccessfulAttachmentUpload(attachmentId: Long, attachmentStream: SignalServiceAttachmentStream, attachmentKey: ByteArray, uploadResult: UploadResult)
fun handleFailedAttachmentUpload(attachmentId: Long)
fun getMessageForQuote(timestamp: Long, author: Address): Triple<Long, Boolean, String>?
fun getMessageForQuote(threadId: Long, timestamp: Long, author: Address): Triple<Long, Boolean, String>?
fun getAttachmentsAndLinkPreviewFor(mmsId: Long): List<Attachment>
fun getMessageBodyFor(timestamp: Long, author: String): String
fun getAttachmentIDsFor(mmsMessageId: Long): List<Long>
fun getLinkPreviewAttachmentIDFor(mmsMessageId: Long): Long?
}
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,9 @@ interface StorageProtocol {
fun addReceivedMessageTimestamp(timestamp: Long)
fun removeReceivedMessageTimestamps(timestamps: Set<Long>)
fun getAttachmentsForMessage(mmsMessageId: Long): List<DatabaseAttachment>
fun getMessageBy(timestamp: Long, author: String): MessageRecord?
fun getMessageBy(threadId: Long, timestamp: Long, author: String): MessageRecord?
@Deprecated("We shouldn't be querying messages by timestamp alone. Use `getMessageBy` when possible ")
fun getMessageByTimestamp(timestamp: Long, author: String, getQuote: Boolean): MessageRecord?
fun updateSentTimestamp(messageId: MessageId, newTimestamp: Long)
fun markAsResyncing(messageId: MessageId)
fun markAsSyncing(messageId: MessageId)
Expand Down Expand Up @@ -181,7 +183,15 @@ interface StorageProtocol {
attachments: List<Attachment>,
runThreadUpdate: Boolean
): MessageId?
fun markConversationAsRead(threadId: Long, lastSeenTime: Long, force: Boolean = false)
fun markConversationAsRead(threadId: Long, lastSeenTime: Long, force: Boolean = false, updateNotification: Boolean = true)

/**
* Marks the conversation as read up to and including the message with [messageId]. It will
* take the reactions associated with messages prior to and including that message into account.
*
* It will not do anything if the last seen of this thread is already set in the future.
*/
fun markConversationAsReadUpToMessage(messageId: MessageId)
fun markConversationAsUnread(threadId: Long)
fun getLastSeen(threadId: Long): Long
fun ensureMessageHashesAreSender(hashes: Set<String>, sender: String, closedGroupId: String): Boolean
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.session.libsession.messaging.file_server

import kotlinx.serialization.Serializable
import okhttp3.HttpUrl
import okhttp3.HttpUrl.Companion.toHttpUrl
import org.session.libsession.utilities.serializable.HttpSerializer

@Serializable
data class FileServer(
@Serializable(with = HttpSerializer::class)
val url: HttpUrl,
val ed25519PublicKeyHex: String
) {
constructor(url: String, ed25519PublicKeyHex: String) : this(url.toHttpUrl(), ed25519PublicKeyHex)
}

val HttpUrl.isOfficial: Boolean
get() = host.endsWith(".getsession.org", ignoreCase = true)
Loading