Bringing GitIssues in the Notification
This commit is contained in:
@@ -35,6 +35,9 @@ import com.vitorpamplona.quartz.events.AdvertisedRelayListEvent
|
|||||||
import com.vitorpamplona.quartz.events.BadgeAwardEvent
|
import com.vitorpamplona.quartz.events.BadgeAwardEvent
|
||||||
import com.vitorpamplona.quartz.events.BadgeProfilesEvent
|
import com.vitorpamplona.quartz.events.BadgeProfilesEvent
|
||||||
import com.vitorpamplona.quartz.events.BookmarkListEvent
|
import com.vitorpamplona.quartz.events.BookmarkListEvent
|
||||||
|
import com.vitorpamplona.quartz.events.CalendarDateSlotEvent
|
||||||
|
import com.vitorpamplona.quartz.events.CalendarRSVPEvent
|
||||||
|
import com.vitorpamplona.quartz.events.CalendarTimeSlotEvent
|
||||||
import com.vitorpamplona.quartz.events.ChannelMessageEvent
|
import com.vitorpamplona.quartz.events.ChannelMessageEvent
|
||||||
import com.vitorpamplona.quartz.events.ContactListEvent
|
import com.vitorpamplona.quartz.events.ContactListEvent
|
||||||
import com.vitorpamplona.quartz.events.EmojiPackSelectionEvent
|
import com.vitorpamplona.quartz.events.EmojiPackSelectionEvent
|
||||||
@@ -42,6 +45,10 @@ import com.vitorpamplona.quartz.events.Event
|
|||||||
import com.vitorpamplona.quartz.events.EventInterface
|
import com.vitorpamplona.quartz.events.EventInterface
|
||||||
import com.vitorpamplona.quartz.events.GenericRepostEvent
|
import com.vitorpamplona.quartz.events.GenericRepostEvent
|
||||||
import com.vitorpamplona.quartz.events.GiftWrapEvent
|
import com.vitorpamplona.quartz.events.GiftWrapEvent
|
||||||
|
import com.vitorpamplona.quartz.events.GitIssueEvent
|
||||||
|
import com.vitorpamplona.quartz.events.GitPatchEvent
|
||||||
|
import com.vitorpamplona.quartz.events.GitReplyEvent
|
||||||
|
import com.vitorpamplona.quartz.events.HighlightEvent
|
||||||
import com.vitorpamplona.quartz.events.LnZapEvent
|
import com.vitorpamplona.quartz.events.LnZapEvent
|
||||||
import com.vitorpamplona.quartz.events.LnZapPaymentResponseEvent
|
import com.vitorpamplona.quartz.events.LnZapPaymentResponseEvent
|
||||||
import com.vitorpamplona.quartz.events.MetadataEvent
|
import com.vitorpamplona.quartz.events.MetadataEvent
|
||||||
@@ -120,24 +127,12 @@ object NostrAccountDataSource : NostrDataSource("AccountData") {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createAccountAcceptedAwardsFilter(): TypedFilter {
|
fun createAccountSettingsFilter(): TypedFilter {
|
||||||
return TypedFilter(
|
return TypedFilter(
|
||||||
types = COMMON_FEED_TYPES,
|
types = COMMON_FEED_TYPES,
|
||||||
filter =
|
filter =
|
||||||
JsonFilter(
|
JsonFilter(
|
||||||
kinds = listOf(BadgeProfilesEvent.KIND, EmojiPackSelectionEvent.KIND),
|
kinds = listOf(BookmarkListEvent.KIND, PeopleListEvent.KIND, MuteListEvent.KIND, BadgeProfilesEvent.KIND, EmojiPackSelectionEvent.KIND),
|
||||||
authors = listOf(account.userProfile().pubkeyHex),
|
|
||||||
limit = 10,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun createAccountBookmarkListFilter(): TypedFilter {
|
|
||||||
return TypedFilter(
|
|
||||||
types = COMMON_FEED_TYPES,
|
|
||||||
filter =
|
|
||||||
JsonFilter(
|
|
||||||
kinds = listOf(BookmarkListEvent.KIND, PeopleListEvent.KIND, MuteListEvent.KIND),
|
|
||||||
authors = listOf(account.userProfile().pubkeyHex),
|
authors = listOf(account.userProfile().pubkeyHex),
|
||||||
limit = 100,
|
limit = 100,
|
||||||
),
|
),
|
||||||
@@ -204,6 +199,36 @@ object NostrAccountDataSource : NostrDataSource("AccountData") {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun createNotificationFilter2(): TypedFilter {
|
||||||
|
val since =
|
||||||
|
latestEOSEs.users[account.userProfile()]
|
||||||
|
?.followList
|
||||||
|
?.get(account.defaultNotificationFollowList.value)
|
||||||
|
?.relayList
|
||||||
|
?: account.activeRelays()?.associate { it.url to EOSETime(TimeUtils.oneWeekAgo()) }
|
||||||
|
?: account.convertLocalRelays().associate { it.url to EOSETime(TimeUtils.oneWeekAgo()) }
|
||||||
|
|
||||||
|
return TypedFilter(
|
||||||
|
types = COMMON_FEED_TYPES,
|
||||||
|
filter =
|
||||||
|
JsonFilter(
|
||||||
|
kinds =
|
||||||
|
listOf(
|
||||||
|
GitReplyEvent.KIND,
|
||||||
|
GitIssueEvent.KIND,
|
||||||
|
GitPatchEvent.KIND,
|
||||||
|
HighlightEvent.KIND,
|
||||||
|
CalendarDateSlotEvent.KIND,
|
||||||
|
CalendarTimeSlotEvent.KIND,
|
||||||
|
CalendarRSVPEvent.KIND,
|
||||||
|
),
|
||||||
|
tags = mapOf("p" to listOf(account.userProfile().pubkeyHex)),
|
||||||
|
limit = 400,
|
||||||
|
since = since,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
fun createGiftWrapsToMeFilter() =
|
fun createGiftWrapsToMeFilter() =
|
||||||
TypedFilter(
|
TypedFilter(
|
||||||
types = COMMON_FEED_TYPES,
|
types = COMMON_FEED_TYPES,
|
||||||
@@ -297,10 +322,10 @@ object NostrAccountDataSource : NostrDataSource("AccountData") {
|
|||||||
createAccountContactListFilter(),
|
createAccountContactListFilter(),
|
||||||
createAccountRelayListFilter(),
|
createAccountRelayListFilter(),
|
||||||
createNotificationFilter(),
|
createNotificationFilter(),
|
||||||
|
createNotificationFilter2(),
|
||||||
createGiftWrapsToMeFilter(),
|
createGiftWrapsToMeFilter(),
|
||||||
createAccountReportsFilter(),
|
createAccountReportsFilter(),
|
||||||
createAccountAcceptedAwardsFilter(),
|
createAccountSettingsFilter(),
|
||||||
createAccountBookmarkListFilter(),
|
|
||||||
createAccountLastPostsListFilter(),
|
createAccountLastPostsListFilter(),
|
||||||
createOtherAccountsBaseFilter(),
|
createOtherAccountsBaseFilter(),
|
||||||
)
|
)
|
||||||
@@ -312,7 +337,7 @@ object NostrAccountDataSource : NostrDataSource("AccountData") {
|
|||||||
createAccountMetadataFilter(),
|
createAccountMetadataFilter(),
|
||||||
createAccountContactListFilter(),
|
createAccountContactListFilter(),
|
||||||
createAccountRelayListFilter(),
|
createAccountRelayListFilter(),
|
||||||
createAccountBookmarkListFilter(),
|
createAccountSettingsFilter(),
|
||||||
)
|
)
|
||||||
.ifEmpty { null }
|
.ifEmpty { null }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -230,6 +230,7 @@ import com.vitorpamplona.quartz.events.FhirResourceEvent
|
|||||||
import com.vitorpamplona.quartz.events.FileHeaderEvent
|
import com.vitorpamplona.quartz.events.FileHeaderEvent
|
||||||
import com.vitorpamplona.quartz.events.FileStorageHeaderEvent
|
import com.vitorpamplona.quartz.events.FileStorageHeaderEvent
|
||||||
import com.vitorpamplona.quartz.events.GenericRepostEvent
|
import com.vitorpamplona.quartz.events.GenericRepostEvent
|
||||||
|
import com.vitorpamplona.quartz.events.GitIssueEvent
|
||||||
import com.vitorpamplona.quartz.events.GitPatchEvent
|
import com.vitorpamplona.quartz.events.GitPatchEvent
|
||||||
import com.vitorpamplona.quartz.events.GitRepositoryEvent
|
import com.vitorpamplona.quartz.events.GitRepositoryEvent
|
||||||
import com.vitorpamplona.quartz.events.HighlightEvent
|
import com.vitorpamplona.quartz.events.HighlightEvent
|
||||||
@@ -1309,6 +1310,16 @@ private fun RenderNoteRow(
|
|||||||
nav,
|
nav,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
is GitIssueEvent -> {
|
||||||
|
RenderGitIssueEvent(
|
||||||
|
baseNote,
|
||||||
|
makeItShort,
|
||||||
|
canPreview,
|
||||||
|
backgroundColor,
|
||||||
|
accountViewModel,
|
||||||
|
nav,
|
||||||
|
)
|
||||||
|
}
|
||||||
is PrivateDmEvent -> {
|
is PrivateDmEvent -> {
|
||||||
RenderPrivateMessage(
|
RenderPrivateMessage(
|
||||||
baseNote,
|
baseNote,
|
||||||
@@ -4124,6 +4135,92 @@ private fun RenderGitPatchEvent(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun RenderGitIssueEvent(
|
||||||
|
baseNote: Note,
|
||||||
|
makeItShort: Boolean,
|
||||||
|
canPreview: Boolean,
|
||||||
|
backgroundColor: MutableState<Color>,
|
||||||
|
accountViewModel: AccountViewModel,
|
||||||
|
nav: (String) -> Unit,
|
||||||
|
) {
|
||||||
|
val event = baseNote.event as? GitIssueEvent ?: return
|
||||||
|
|
||||||
|
RenderGitIssueEvent(event, baseNote, makeItShort, canPreview, backgroundColor, accountViewModel, nav)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun RenderGitIssueEvent(
|
||||||
|
noteEvent: GitIssueEvent,
|
||||||
|
note: Note,
|
||||||
|
makeItShort: Boolean,
|
||||||
|
canPreview: Boolean,
|
||||||
|
backgroundColor: MutableState<Color>,
|
||||||
|
accountViewModel: AccountViewModel,
|
||||||
|
nav: (String) -> Unit,
|
||||||
|
) {
|
||||||
|
val repository = remember(noteEvent) { noteEvent.repository() }
|
||||||
|
|
||||||
|
if (repository != null) {
|
||||||
|
LoadAddressableNote(aTag = repository, accountViewModel = accountViewModel) {
|
||||||
|
if (it != null) {
|
||||||
|
RenderShortRepositoryHeader(it, accountViewModel, nav)
|
||||||
|
Spacer(modifier = DoubleVertSpacer)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LoadDecryptedContent(note, accountViewModel) { body ->
|
||||||
|
val eventContent by
|
||||||
|
remember(note.event) {
|
||||||
|
derivedStateOf {
|
||||||
|
val subject = (note.event as? TextNoteEvent)?.subject()?.ifEmpty { null }
|
||||||
|
|
||||||
|
if (!subject.isNullOrBlank() && !body.split("\n")[0].contains(subject)) {
|
||||||
|
"### $subject\n$body"
|
||||||
|
} else {
|
||||||
|
body
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val isAuthorTheLoggedUser = remember(note.event) { accountViewModel.isLoggedUser(note.author) }
|
||||||
|
|
||||||
|
if (makeItShort && isAuthorTheLoggedUser) {
|
||||||
|
Text(
|
||||||
|
text = eventContent,
|
||||||
|
color = MaterialTheme.colorScheme.placeholderText,
|
||||||
|
maxLines = 2,
|
||||||
|
overflow = TextOverflow.Ellipsis,
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
SensitivityWarning(
|
||||||
|
note = note,
|
||||||
|
accountViewModel = accountViewModel,
|
||||||
|
) {
|
||||||
|
val modifier = remember(note) { Modifier.fillMaxWidth() }
|
||||||
|
val tags = remember(note) { note.event?.tags()?.toImmutableListOfLists() ?: EmptyTagList }
|
||||||
|
|
||||||
|
TranslatableRichTextViewer(
|
||||||
|
content = eventContent,
|
||||||
|
canPreview = canPreview && !makeItShort,
|
||||||
|
modifier = modifier,
|
||||||
|
tags = tags,
|
||||||
|
backgroundColor = backgroundColor,
|
||||||
|
accountViewModel = accountViewModel,
|
||||||
|
nav = nav,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (note.event?.hasHashtags() == true) {
|
||||||
|
val hashtags =
|
||||||
|
remember(note.event) { note.event?.hashtags()?.toImmutableList() ?: persistentListOf() }
|
||||||
|
DisplayUncitedHashtags(hashtags, eventContent, nav)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun RenderGitRepositoryEvent(
|
fun RenderGitRepositoryEvent(
|
||||||
baseNote: Note,
|
baseNote: Note,
|
||||||
|
|||||||
@@ -124,6 +124,7 @@ import com.vitorpamplona.amethyst.ui.note.ReactionsRow
|
|||||||
import com.vitorpamplona.amethyst.ui.note.RenderAppDefinition
|
import com.vitorpamplona.amethyst.ui.note.RenderAppDefinition
|
||||||
import com.vitorpamplona.amethyst.ui.note.RenderEmojiPack
|
import com.vitorpamplona.amethyst.ui.note.RenderEmojiPack
|
||||||
import com.vitorpamplona.amethyst.ui.note.RenderFhirResource
|
import com.vitorpamplona.amethyst.ui.note.RenderFhirResource
|
||||||
|
import com.vitorpamplona.amethyst.ui.note.RenderGitIssueEvent
|
||||||
import com.vitorpamplona.amethyst.ui.note.RenderGitPatchEvent
|
import com.vitorpamplona.amethyst.ui.note.RenderGitPatchEvent
|
||||||
import com.vitorpamplona.amethyst.ui.note.RenderGitRepositoryEvent
|
import com.vitorpamplona.amethyst.ui.note.RenderGitRepositoryEvent
|
||||||
import com.vitorpamplona.amethyst.ui.note.RenderPinListEvent
|
import com.vitorpamplona.amethyst.ui.note.RenderPinListEvent
|
||||||
@@ -166,6 +167,7 @@ import com.vitorpamplona.quartz.events.FhirResourceEvent
|
|||||||
import com.vitorpamplona.quartz.events.FileHeaderEvent
|
import com.vitorpamplona.quartz.events.FileHeaderEvent
|
||||||
import com.vitorpamplona.quartz.events.FileStorageHeaderEvent
|
import com.vitorpamplona.quartz.events.FileStorageHeaderEvent
|
||||||
import com.vitorpamplona.quartz.events.GenericRepostEvent
|
import com.vitorpamplona.quartz.events.GenericRepostEvent
|
||||||
|
import com.vitorpamplona.quartz.events.GitIssueEvent
|
||||||
import com.vitorpamplona.quartz.events.GitPatchEvent
|
import com.vitorpamplona.quartz.events.GitPatchEvent
|
||||||
import com.vitorpamplona.quartz.events.GitRepositoryEvent
|
import com.vitorpamplona.quartz.events.GitRepositoryEvent
|
||||||
import com.vitorpamplona.quartz.events.HighlightEvent
|
import com.vitorpamplona.quartz.events.HighlightEvent
|
||||||
@@ -554,6 +556,8 @@ fun NoteMaster(
|
|||||||
RenderGitRepositoryEvent(baseNote, accountViewModel, nav)
|
RenderGitRepositoryEvent(baseNote, accountViewModel, nav)
|
||||||
} else if (noteEvent is GitPatchEvent) {
|
} else if (noteEvent is GitPatchEvent) {
|
||||||
RenderGitPatchEvent(baseNote, false, true, backgroundColor, accountViewModel, nav)
|
RenderGitPatchEvent(baseNote, false, true, backgroundColor, accountViewModel, nav)
|
||||||
|
} else if (noteEvent is GitIssueEvent) {
|
||||||
|
RenderGitIssueEvent(baseNote, false, true, backgroundColor, accountViewModel, nav)
|
||||||
} else if (noteEvent is AppDefinitionEvent) {
|
} else if (noteEvent is AppDefinitionEvent) {
|
||||||
RenderAppDefinition(baseNote, accountViewModel, nav)
|
RenderAppDefinition(baseNote, accountViewModel, nav)
|
||||||
} else if (noteEvent is HighlightEvent) {
|
} else if (noteEvent is HighlightEvent) {
|
||||||
|
|||||||
Reference in New Issue
Block a user