Add support for message resends.

fork-5.53.8
Alex Hart 2022-03-16 13:08:35 -03:00 zatwierdzone przez Cody Henthorne
rodzic c8c0589ac4
commit 559561bf72
6 zmienionych plików z 38 dodań i 2 usunięć

Wyświetl plik

@ -127,6 +127,9 @@ class StoriesLandingFragment :
onRowClick = {
if (it.data.storyRecipient.isMyStory) {
startActivity(Intent(requireContext(), MyStoriesActivity::class.java))
} else if (it.data.primaryStory.messageRecord.isOutgoing && it.data.primaryStory.messageRecord.isFailed) {
lifecycleDisposable += viewModel.resend(it.data.primaryStory.messageRecord).subscribe()
Toast.makeText(requireContext(), R.string.message_recipients_list_item__resend, Toast.LENGTH_SHORT).show()
} else {
startActivity(StoryViewerActivity.createIntent(requireContext(), it.data.storyRecipient.id))
}

Wyświetl plik

@ -14,11 +14,18 @@ import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.recipients.RecipientForeverObserver
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.sms.MessageSender
class StoriesLandingRepository(context: Context) {
private val context = context.applicationContext
fun resend(story: MessageRecord): Completable {
return Completable.fromAction {
MessageSender.resend(context, story)
}.subscribeOn(Schedulers.io())
}
fun getStories(): Observable<List<StoriesLandingItemData>> {
return Observable.create<Observable<List<StoriesLandingItemData>>> { emitter ->
val myStoriesId = SignalDatabase.recipients.getOrInsertFromDistributionListId(DistributionListId.MY_STORY)

Wyświetl plik

@ -6,6 +6,7 @@ import androidx.lifecycle.ViewModelProvider
import io.reactivex.rxjava3.core.Completable
import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.kotlin.plusAssign
import org.thoughtcrime.securesms.database.model.MessageRecord
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.util.livedata.Store
@ -31,6 +32,10 @@ class StoriesLandingViewModel(private val storiesLandingRepository: StoriesLandi
disposables.clear()
}
fun resend(story: MessageRecord): Completable {
return storiesLandingRepository.resend(story)
}
fun setHideStory(sender: Recipient, hide: Boolean): Completable {
return storiesLandingRepository.setHideStory(sender.id, hide)
}

Wyświetl plik

@ -1,5 +1,6 @@
package org.thoughtcrime.securesms.stories.my
import android.widget.Toast
import androidx.fragment.app.viewModels
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.settings.DSLConfiguration
@ -56,8 +57,13 @@ class MyStoriesFragment : DSLSettingsFragment(
MyStoriesItem.Model(
distributionStory = conversationMessage,
onClick = {
// TODO [stories] pass in something more specific to start with the correct progress
startActivity(StoryViewerActivity.createIntent(requireContext(), Recipient.self().id))
if (it.distributionStory.messageRecord.isOutgoing && it.distributionStory.messageRecord.isFailed) {
lifecycleDisposable += viewModel.resend(it.distributionStory.messageRecord).subscribe()
Toast.makeText(requireContext(), R.string.message_recipients_list_item__resend, Toast.LENGTH_SHORT).show()
} else {
// TODO [stories] pass in something more specific to start with the correct progress
startActivity(StoryViewerActivity.createIntent(requireContext(), Recipient.self().id))
}
},
onSaveClick = {
StoryContextMenu.save(requireContext(), it.distributionStory.messageRecord)

Wyświetl plik

@ -1,18 +1,27 @@
package org.thoughtcrime.securesms.stories.my
import android.content.Context
import io.reactivex.rxjava3.core.Completable
import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.schedulers.Schedulers
import org.thoughtcrime.securesms.conversation.ConversationMessage
import org.thoughtcrime.securesms.database.DatabaseObserver
import org.thoughtcrime.securesms.database.SignalDatabase
import org.thoughtcrime.securesms.database.model.MessageRecord
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.sms.MessageSender
class MyStoriesRepository(context: Context) {
private val context = context.applicationContext
fun resend(story: MessageRecord): Completable {
return Completable.fromAction {
MessageSender.resend(context, story)
}.subscribeOn(Schedulers.io())
}
fun getMyStories(): Observable<List<MyStoriesState.DistributionSet>> {
return Observable.create { emitter ->
fun refresh() {

Wyświetl plik

@ -3,8 +3,10 @@ package org.thoughtcrime.securesms.stories.my
import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import io.reactivex.rxjava3.core.Completable
import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.kotlin.plusAssign
import org.thoughtcrime.securesms.database.model.MessageRecord
import org.thoughtcrime.securesms.util.livedata.Store
class MyStoriesViewModel(private val repository: MyStoriesRepository) : ViewModel() {
@ -24,6 +26,10 @@ class MyStoriesViewModel(private val repository: MyStoriesRepository) : ViewMode
disposables.clear()
}
fun resend(story: MessageRecord): Completable {
return repository.resend(story)
}
class Factory(private val repository: MyStoriesRepository) : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return modelClass.cast(MyStoriesViewModel(repository)) as T