Skip to content

Commit eb8518e

Browse files
committed
update timeline
1 parent 9f1b06e commit eb8518e

File tree

4 files changed

+37
-0
lines changed

4 files changed

+37
-0
lines changed

feature/timeline/src/commonMain/kotlin/com/livefast/eattrash/raccoonforfriendica/feature/timeline/TimelineMviModel.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,10 @@ interface TimelineMviModel :
7373
data class WillOpenDetail(
7474
val entry: TimelineEntryModel,
7575
) : Intent
76+
77+
data class AddInstanceShortcut(
78+
val entry: TimelineEntryModel,
79+
) : Intent
7680
}
7781

7882
data class State(

feature/timeline/src/commonMain/kotlin/com/livefast/eattrash/raccoonforfriendica/feature/timeline/TimelineScreen.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ import com.livefast.eattrash.raccoonforfriendica.core.utils.di.getShareHelper
8282
import com.livefast.eattrash.raccoonforfriendica.core.utils.isNearTheEnd
8383
import com.livefast.eattrash.raccoonforfriendica.domain.content.data.TimelineEntryModel
8484
import com.livefast.eattrash.raccoonforfriendica.domain.content.data.isOldEntry
85+
import com.livefast.eattrash.raccoonforfriendica.domain.content.data.nodeName
8586
import com.livefast.eattrash.raccoonforfriendica.domain.content.data.original
8687
import com.livefast.eattrash.raccoonforfriendica.domain.content.data.safeKey
8788
import com.livefast.eattrash.raccoonforfriendica.domain.content.data.toIcon
@@ -454,6 +455,13 @@ class TimelineScreen : Screen {
454455
},
455456
)
456457
}
458+
val nodeName = entry.nodeName
459+
if (nodeName.isNotEmpty()) {
460+
this +=
461+
OptionId.AddShortcut.toOption(
462+
LocalStrings.current.actionShortcut(nodeName),
463+
)
464+
}
457465
},
458466
onOptionSelected = { optionId ->
459467
when (optionId) {
@@ -517,6 +525,10 @@ class TimelineScreen : Screen {
517525
model.reduce(
518526
TimelineMviModel.Intent.ToggleTranslation(entry.original),
519527
)
528+
OptionId.AddShortcut ->
529+
model.reduce(
530+
TimelineMviModel.Intent.AddInstanceShortcut(entry),
531+
)
520532
else -> Unit
521533
}
522534
},

feature/timeline/src/commonMain/kotlin/com/livefast/eattrash/raccoonforfriendica/feature/timeline/TimelineViewModel.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import com.livefast.eattrash.raccoonforfriendica.core.utils.vibrate.HapticFeedba
1313
import com.livefast.eattrash.raccoonforfriendica.domain.content.data.TimelineEntryModel
1414
import com.livefast.eattrash.raccoonforfriendica.domain.content.data.TimelineType
1515
import com.livefast.eattrash.raccoonforfriendica.domain.content.data.blurHashParamsForPreload
16+
import com.livefast.eattrash.raccoonforfriendica.domain.content.data.nodeName
1617
import com.livefast.eattrash.raccoonforfriendica.domain.content.data.original
1718
import com.livefast.eattrash.raccoonforfriendica.domain.content.data.toTimelineType
1819
import com.livefast.eattrash.raccoonforfriendica.domain.content.data.urlsForPreload
@@ -27,9 +28,11 @@ import com.livefast.eattrash.raccoonforfriendica.domain.content.usecase.GetTrans
2728
import com.livefast.eattrash.raccoonforfriendica.domain.content.usecase.ToggleEntryDislikeUseCase
2829
import com.livefast.eattrash.raccoonforfriendica.domain.content.usecase.ToggleEntryFavoriteUseCase
2930
import com.livefast.eattrash.raccoonforfriendica.domain.identity.data.SettingsModel
31+
import com.livefast.eattrash.raccoonforfriendica.domain.identity.repository.AccountRepository
3032
import com.livefast.eattrash.raccoonforfriendica.domain.identity.repository.ApiConfigurationRepository
3133
import com.livefast.eattrash.raccoonforfriendica.domain.identity.repository.IdentityRepository
3234
import com.livefast.eattrash.raccoonforfriendica.domain.identity.repository.ImageAutoloadObserver
35+
import com.livefast.eattrash.raccoonforfriendica.domain.identity.repository.InstanceShortcutRepository
3336
import com.livefast.eattrash.raccoonforfriendica.domain.identity.repository.SettingsRepository
3437
import com.livefast.eattrash.raccoonforfriendica.domain.identity.usecase.ActiveAccountMonitor
3538
import kotlinx.coroutines.FlowPreview
@@ -54,6 +57,8 @@ class TimelineViewModel(
5457
private val hapticFeedback: HapticFeedback,
5558
private val imagePreloadManager: ImagePreloadManager,
5659
private val blurHashRepository: BlurHashRepository,
60+
private val accountRepository: AccountRepository,
61+
private val instanceShortcutRepository: InstanceShortcutRepository,
5762
private val imageAutoloadObserver: ImageAutoloadObserver,
5863
private val announcementsManager: AnnouncementsManager,
5964
private val toggleEntryDislike: ToggleEntryDislikeUseCase,
@@ -192,6 +197,8 @@ class TimelineViewModel(
192197
timelineNavigationManager.push(state)
193198
emitEffect(TimelineMviModel.Effect.OpenDetail(intent.entry))
194199
}
200+
201+
is TimelineMviModel.Intent.AddInstanceShortcut -> addInstanceShortcut(intent.entry)
195202
}
196203
}
197204

@@ -610,4 +617,16 @@ class TimelineViewModel(
610617
updateEntryInState(entry.id) { newEntry }
611618
}
612619
}
620+
621+
private fun addInstanceShortcut(entry: TimelineEntryModel) {
622+
val nodeName = entry.nodeName.takeIf { it.isNotEmpty() } ?: return
623+
screenModelScope.launch {
624+
accountRepository.getActive()?.id?.also { accountId ->
625+
instanceShortcutRepository.create(
626+
accountId = accountId,
627+
node = nodeName,
628+
)
629+
}
630+
}
631+
}
613632
}

feature/timeline/src/commonMain/kotlin/com/livefast/eattrash/raccoonforfriendica/feature/timeline/di/TimelineModule.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ val timelineModule =
2323
hapticFeedback = instance(),
2424
imagePreloadManager = instance(),
2525
blurHashRepository = instance(),
26+
accountRepository = instance(),
27+
instanceShortcutRepository = instance(),
2628
imageAutoloadObserver = instance(),
2729
announcementsManager = instance(),
2830
toggleEntryFavorite = instance(),

0 commit comments

Comments
 (0)