diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt index e02c934a0..93673bd8e 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt @@ -87,14 +87,14 @@ class User(val pubkey: ByteArray) { updatedFollowsAt = updateAt - live.refresh() + refreshObservers() } fun updateUserInfo(newUserInfo: UserMetadata, updateAt: Long) { info = newUserInfo updatedMetadataAt = updateAt - live.refresh() + refreshObservers() } fun isFollowing(user: User): Boolean { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/CardFeedViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/CardFeedViewModel.kt index f8ec098a8..3767099af 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/CardFeedViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/CardFeedViewModel.kt @@ -10,6 +10,9 @@ import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.service.NostrDataSource import com.vitorpamplona.amethyst.service.model.ReactionEvent import com.vitorpamplona.amethyst.service.model.RepostEvent +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow @@ -23,28 +26,24 @@ class CardFeedViewModel(val dataSource: NostrDataSource): ViewModel() { private var lastNotes: List? = null fun refresh() { - // For some reason, view Model Scope doesn't call - viewModelScope.launch { - refreshSuspend() - } - } + val scope = CoroutineScope(Job() + Dispatchers.Main) + scope.launch { + val notes = dataSource.loadTop() - fun refreshSuspend() { - val notes = dataSource.loadTop() + val lastNotesCopy = lastNotes - val lastNotesCopy = lastNotes - - val oldNotesState = feedContent.value - if (lastNotesCopy != null && oldNotesState is CardFeedState.Loaded) { - val newCards = convertToCard(notes.minus(lastNotesCopy)) - if (newCards.isNotEmpty()) { + val oldNotesState = feedContent.value + if (lastNotesCopy != null && oldNotesState is CardFeedState.Loaded) { + val newCards = convertToCard(notes.minus(lastNotesCopy)) + if (newCards.isNotEmpty()) { + lastNotes = notes + updateFeed((oldNotesState.feed + newCards).sortedBy { it.createdAt() }.reversed()) + } + } else { + val cards = convertToCard(notes) lastNotes = notes - updateFeed((oldNotesState.feed + newCards).sortedBy { it.createdAt() }.reversed()) + updateFeed(cards) } - } else { - val cards = convertToCard(notes) - lastNotes = notes - updateFeed(cards) } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/FeedViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/FeedViewModel.kt index 73e63ad0a..19e12f09f 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/FeedViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/FeedViewModel.kt @@ -24,23 +24,19 @@ class FeedViewModel(val dataSource: NostrDataSource): ViewModel() { private val _feedContent = MutableStateFlow(FeedState.Loading) val feedContent = _feedContent.asStateFlow() - @OptIn(ExperimentalTime::class) fun refresh() { val scope = CoroutineScope(Job() + Dispatchers.Main) scope.launch { - println("AAA" + measureTimedValue { - val notes = dataSource.loadTop() + val notes = dataSource.loadTop() - val oldNotesState = feedContent.value - if (oldNotesState is FeedState.Loaded) { - if (notes != oldNotesState.feed) { - updateFeed(notes) - } - } else { + val oldNotesState = feedContent.value + if (oldNotesState is FeedState.Loaded) { + if (notes != oldNotesState.feed) { updateFeed(notes) } - }.duration) - + } else { + updateFeed(notes) + } } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/UserFeedViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/UserFeedViewModel.kt index 3a32ce02e..62f1b22d9 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/UserFeedViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/UserFeedViewModel.kt @@ -10,6 +10,9 @@ import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.service.NostrDataSource import com.vitorpamplona.amethyst.service.NostrUserProfileFollowersDataSource import com.vitorpamplona.amethyst.service.NostrUserProfileFollowsDataSource +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow @@ -29,22 +32,18 @@ open class UserFeedViewModel(val dataSource: NostrDataSource): ViewModel() val feedContent = _feedContent.asStateFlow() fun refresh() { - // For some reason, view Model Scope doesn't call - viewModelScope.launch { - refreshSuspend() - } - } + val scope = CoroutineScope(Job() + Dispatchers.Main) + scope.launch { + val notes = dataSource.loadTop() - fun refreshSuspend() { - val notes = dataSource.loadTop() - - val oldNotesState = feedContent.value - if (oldNotesState is UserFeedState.Loaded) { - if (notes != oldNotesState.feed) { + val oldNotesState = feedContent.value + if (oldNotesState is UserFeedState.Loaded) { + if (notes != oldNotesState.feed) { + updateFeed(notes) + } + } else { updateFeed(notes) } - } else { - updateFeed(notes) } }