Skip to content

Commit 30e8dfa

Browse files
author
Nicegram Team
committed
release 1.46.2
1 parent f5720d0 commit 30e8dfa

8 files changed

Lines changed: 48 additions & 32 deletions

File tree

.idea/misc.xml

Lines changed: 1 addition & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

TMessagesProj/src/main/java/app/nicegram/NicegramGroupCollectHelper.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@ object NicegramGroupCollectHelper {
181181
when (info) {
182182
is MoreChatFull.Data -> {
183183
val messagesInfo = prepareMessagesUseCase.prepare(
184+
chatId = info.tlrpcChatFull.full_chat.id,
184185
messages = info.messages,
185186
chats = info.tlrpcChatFull.chats,
186187
users = info.tlrpcChatFull.users,

TMessagesProj/src/main/java/app/nicegram/TgImagesHelper.kt

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package app.nicegram
22

33
import org.telegram.messenger.DialogObject
44
import org.telegram.messenger.FileLoader
5+
import org.telegram.messenger.ImageLoader
56
import org.telegram.messenger.ImageLocation
67
import org.telegram.messenger.MessageObject
78
import org.telegram.messenger.MessagesController
@@ -55,9 +56,8 @@ object TgImagesHelper {
5556
if (media is TL_messageMediaPhoto) {
5657
val photo: TLRPC.Photo? = media.photo
5758
if (photo != null && photo.sizes.isNotEmpty()) {
58-
val photoSize: TLRPC.PhotoSize? =
59-
FileLoader.getClosestPhotoSizeWithSize(photo.sizes, 800) // type=x 800x800
60-
// val photoSize: TLRPC.PhotoSize? = photo.sizes.find { it.type == "x" }
59+
// val photoSize: TLRPC.PhotoSize? = FileLoader.getClosestPhotoSizeWithSize(photo.sizes, 800) // type=x 800x800
60+
val photoSize: TLRPC.PhotoSize? = photo.sizes.find { it.type == "x" }
6161
if (photoSize != null) {
6262
val currentAccount = UserConfig.selectedAccount
6363
val fileLoader = FileLoader.getInstance(currentAccount)
@@ -66,9 +66,16 @@ object TgImagesHelper {
6666

6767
val file: File = fileLoader.getPathToAttach(photoSize, true)
6868
Timber.d("TelegramImage: image path=${file.absolutePath}")
69+
Timber.d("TelegramImage: image attachFileName=${FileLoader.getAttachFileName(photoSize)}")
6970

7071
if (!file.exists() && withLoad) {
71-
fileLoader.loadFile(imageLocation, messageObject.messageOwner, "jpg", 1, 1)
72+
fileLoader.loadFile(
73+
imageLocation,
74+
messageObject.messageOwner,
75+
"jpg",
76+
FileLoader.PRIORITY_NORMAL,
77+
ImageLoader.CACHE_TYPE_CACHE
78+
)
7279
Timber.d("TelegramImage: image not found locally, started loading...")
7380
}
7481

TMessagesProj/src/main/java/app/nicegram/data/TelegramMediaUploader.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ object TelegramMediaUploader : MediaUploader {
2828
file
2929
}
3030

31-
private suspend fun waitForFile(file: File, timeoutMs: Long = 10_000): Boolean = withContext(Dispatchers.IO) {
31+
private suspend fun waitForFile(file: File, timeoutMs: Long = 20_000, delayMs: Long = 1_000): Boolean = withContext(Dispatchers.IO) {
3232
val start = System.currentTimeMillis()
3333
while (!file.exists() && System.currentTimeMillis() - start < timeoutMs) {
34-
delay(200)
34+
delay(delayMs)
3535
}
3636
file.exists()
3737
}

TMessagesProj/src/main/java/app/nicegram/domain/entitie/PreloadedMedia.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ package app.nicegram.domain.entitie
22

33
import java.io.File
44

5+
typealias ChatIdWithMessageId = Pair<Long, Int>
6+
57
data class PreloadedMedia(
6-
val messageId: Long,
8+
val messageId: Int,
79
val chatId: Long,
810
val mimeType: String,
911
val file: File,

TMessagesProj/src/main/java/app/nicegram/domain/usecases/MediaPreloaderUseCase.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class MediaPreloaderUseCase @Inject constructor() {
2424
val file = mediaUploader.ensureMediaUploaded(message)
2525
if (file != null && file.exists()) {
2626
PreloadedMedia(
27-
messageId = message.messageOwner.id.toLong(),
27+
messageId = message.messageOwner.id,
2828
chatId = chatId,
2929
file = file,
3030
mimeType = "image/jpeg",
@@ -46,7 +46,7 @@ class MediaPreloaderUseCase @Inject constructor() {
4646
val file = mediaUploader.ensureMediaUploaded(message, currentAccount)
4747
if (file != null && file.exists()) {
4848
PreloadedMedia(
49-
messageId = message.id.toLong(),
49+
messageId = message.id,
5050
chatId = chatId,
5151
file = file,
5252
mimeType = "image/jpeg",

TMessagesProj/src/main/java/app/nicegram/domain/usecases/PrepareMessagesUseCase.kt

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package app.nicegram.domain.usecases
22

33
import androidx.annotation.Keep
44
import app.nicegram.NicegramGroupCollectHelper
5+
import app.nicegram.domain.entitie.ChatIdWithMessageId
56
import app.nicegram.groupAndLimitMessageObjects
67
import app.nicegram.groupAndLimitMessages
78
import app.nicegram.toMessageInformation
@@ -25,32 +26,36 @@ class PrepareMessagesUseCase @Inject constructor(
2526
suspend fun prepare(chatId: Long, messages: List<MessageObject>): List<ChannelInfoRequest.MessageInformation> {
2627
val messagesWithFlags = messages.groupAndLimitMessageObjects(ngRemoteConfigRepo.messagesLimit)
2728
val needPreload = messagesWithFlags.filter { it.second }.map { it.first }
28-
var uploadedMap: Map<Long, Int> = emptyMap()
29+
var uploadedMap: Map<ChatIdWithMessageId, Int> = emptyMap()
2930

3031
if (needPreload.isNotEmpty() && ngRemoteConfigRepo.collectMessageImages) {
3132
val preloadedMedia = mediaPreloaderUseCase.preloadMedia(chatId, needPreload)
32-
33-
val uploadBody = uploadInitiateUseCase.buildUploadInitiateBody(preloadedMedia)
34-
val uploadResponse = when (val result = uploadInitiateUseCase.initiateUpload(uploadBody)) {
35-
is OperationResult.ResultSuccess -> result.result
36-
else -> {
37-
Timber.e("PrepareUseCase: Can't initiate upload to server")
38-
null
33+
if (preloadedMedia.isEmpty()) {
34+
Timber.e("PrepareUseCase: Can't preload any images from tg")
35+
} else {
36+
37+
val uploadBody = uploadInitiateUseCase.buildUploadInitiateBody(preloadedMedia)
38+
val uploadResponse = when (val result = uploadInitiateUseCase.initiateUpload(uploadBody)) {
39+
is OperationResult.ResultSuccess -> result.result
40+
else -> {
41+
Timber.e("PrepareUseCase: Can't initiate upload to server")
42+
null
43+
}
3944
}
40-
}
4145

42-
uploadResponse?.let { response ->
43-
if (preloadedMedia.size != response.size) {
44-
Timber.e("PrepareUseCase: Mismatch between preloaded media and upload response")
45-
} else {
46-
val mediaWithUploadInfo = preloadedMedia.zip(response)
47-
uploadedMap = uploadToS3UseCase.uploadAll(mediaWithUploadInfo, deleteAfterUpload = false)
46+
uploadResponse?.let { response ->
47+
if (preloadedMedia.size != response.size) {
48+
Timber.e("PrepareUseCase: Mismatch between preloaded media and upload response")
49+
} else {
50+
val mediaWithUploadInfo = preloadedMedia.zip(response)
51+
uploadedMap = uploadToS3UseCase.uploadAll(mediaWithUploadInfo, deleteAfterUpload = false)
52+
}
4853
}
4954
}
5055
}
5156

5257
return messagesWithFlags.mapNotNull { (message, shouldLoadPhoto) ->
53-
val uploadId = if (shouldLoadPhoto) uploadedMap[message.id.toLong()] else null
58+
val uploadId = if (shouldLoadPhoto) uploadedMap[chatId to message.id] else null
5459

5560
message.toMessageInformation(uploadId)
5661
}
@@ -59,7 +64,7 @@ class PrepareMessagesUseCase @Inject constructor(
5964
suspend fun preloadAndUploadAllMedia(
6065
chatDataList: List<NicegramGroupCollectHelper.MoreChatFull.Data>,
6166
currentAccount: Int
62-
): Map<Long, Int> {
67+
): Map<ChatIdWithMessageId, Int> {
6368
val allMessagesToPreload = mutableListOf<Pair<Long, List<TLRPC.Message>>>() // Pair(chatId, messages)
6469

6570
chatDataList.forEach { data ->
@@ -96,15 +101,16 @@ class PrepareMessagesUseCase @Inject constructor(
96101

97102
@Throws
98103
fun prepare(
104+
chatId: Long,
99105
messages: List<TLRPC.Message>?,
100106
chats: List<TLRPC.Chat>,
101107
users: List<TLRPC.User>,
102-
uploadedMap: Map<Long, Int>
108+
uploadedMap: Map<ChatIdWithMessageId, Int>
103109
): List<ChannelInfoRequest.MessageInformation>? {
104110
val messagesWithFlags = messages.groupAndLimitMessages(ngRemoteConfigRepo.messagesLimit) ?: return null
105111

106112
return messagesWithFlags.mapNotNull { (message, shouldLoadPhoto) ->
107-
val uploadId = if (shouldLoadPhoto) uploadedMap[message.id.toLong()] else null
113+
val uploadId = if (shouldLoadPhoto) uploadedMap[chatId to message.id] else null
108114

109115
message.toModel(chats, users, uploadId)
110116
}

TMessagesProj/src/main/java/app/nicegram/domain/usecases/UploadToS3UseCase.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package app.nicegram.domain.usecases
22

33
import androidx.annotation.Keep
4+
import app.nicegram.domain.entitie.ChatIdWithMessageId
45
import app.nicegram.domain.entitie.PreloadedMedia
56
import com.appvillis.feature_nicegram_client.domain.etities.UploadInformation
67
import kotlinx.coroutines.Dispatchers
@@ -21,11 +22,11 @@ class UploadToS3UseCase @Inject constructor() {
2122
suspend fun uploadAll(
2223
items: List<Pair<PreloadedMedia, UploadInformation>>,
2324
deleteAfterUpload: Boolean = true
24-
): Map<Long, Int> = coroutineScope {
25+
): Map<ChatIdWithMessageId, Int> = coroutineScope {
2526
items.map { (media, info) ->
2627
async {
2728
val uploadId = upload(media, info, deleteAfterUpload)
28-
media.messageId to uploadId
29+
(media.chatId to media.messageId) to uploadId
2930
}
3031
}.awaitAll()
3132
.filter { it.second != null }

0 commit comments

Comments
 (0)