Yuito-app-android/app/src/main/java/com/keylesspalace/tusky/components/conversation/ConversationEntity.kt

205 lines
6.1 KiB
Kotlin
Raw Normal View History

/* Copyright 2021 Tusky Contributors
*
* This file is a part of Tusky.
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
* License, or (at your option) any later version.
*
* Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details.
*
* You should have received a copy of the GNU General Public License along with Tusky; if not,
* see <http://www.gnu.org/licenses>. */
package com.keylesspalace.tusky.components.conversation
import androidx.room.Embedded
import androidx.room.Entity
import androidx.room.TypeConverters
import com.keylesspalace.tusky.db.Converters
import com.keylesspalace.tusky.entity.Attachment
import com.keylesspalace.tusky.entity.Conversation
import com.keylesspalace.tusky.entity.Emoji
import com.keylesspalace.tusky.entity.HashTag
import com.keylesspalace.tusky.entity.Poll
import com.keylesspalace.tusky.entity.Status
import com.keylesspalace.tusky.entity.TimelineAccount
import com.keylesspalace.tusky.viewdata.StatusViewData
import java.util.Date
@Entity(primaryKeys = ["id", "accountId"])
@TypeConverters(Converters::class)
data class ConversationEntity(
val accountId: Long,
val id: String,
val order: Int,
val accounts: List<ConversationAccountEntity>,
val unread: Boolean,
@Embedded(prefix = "s_") val lastStatus: ConversationStatusEntity
) {
fun toViewData(): ConversationViewData {
return ConversationViewData(
id = id,
order = order,
accounts = accounts,
unread = unread,
lastStatus = lastStatus.toViewData()
)
}
}
data class ConversationAccountEntity(
val id: String,
val localUsername: String,
val username: String,
val displayName: String,
val avatar: String,
val emojis: List<Emoji>
) {
fun toAccount(): TimelineAccount {
return TimelineAccount(
id = id,
localUsername = localUsername,
username = username,
displayName = displayName,
note = "",
url = "",
avatar = avatar,
emojis = emojis
)
}
}
@TypeConverters(Converters::class)
data class ConversationStatusEntity(
val id: String,
val url: String?,
val inReplyToId: String?,
val inReplyToAccountId: String?,
val account: ConversationAccountEntity,
val content: String,
val createdAt: Date,
val editedAt: Date?,
val emojis: List<Emoji>,
val favouritesCount: Int,
val repliesCount: Int,
val favourited: Boolean,
val bookmarked: Boolean,
val sensitive: Boolean,
val spoilerText: String,
val attachments: List<Attachment>,
val mentions: List<Status.Mention>,
2022-02-27 20:16:41 +01:00
val tags: List<HashTag>?,
val showingHiddenContent: Boolean,
val expanded: Boolean,
val collapsed: Boolean,
val muted: Boolean,
val poll: Poll?,
val language: String?
) {
fun toViewData(): StatusViewData.Concrete {
return StatusViewData.Concrete(
status = Status(
id = id,
url = url,
account = account.toAccount(),
inReplyToId = inReplyToId,
inReplyToAccountId = inReplyToAccountId,
content = content,
reblog = null,
createdAt = createdAt,
editedAt = editedAt,
emojis = emojis,
reblogsCount = 0,
favouritesCount = favouritesCount,
repliesCount = repliesCount,
reblogged = false,
favourited = favourited,
bookmarked = bookmarked,
sensitive = sensitive,
spoilerText = spoilerText,
visibility = Status.Visibility.DIRECT,
attachments = attachments,
mentions = mentions,
tags = tags,
application = null,
pinned = false,
muted = muted,
poll = poll,
card = null,
language = language,
Merge remote-tracking branch 'tuskyapp/develop' # Conflicts: # .gitignore # README.md # app/build.gradle # app/src/green/res/mipmap-hdpi/ic_launcher.png # app/src/green/res/mipmap-mdpi/ic_launcher.png # app/src/green/res/mipmap-xhdpi/ic_launcher.png # app/src/green/res/mipmap-xxhdpi/ic_launcher.png # app/src/green/res/mipmap-xxxhdpi/ic_launcher.png # app/src/main/java/com/keylesspalace/tusky/EditProfileActivity.kt # app/src/main/java/com/keylesspalace/tusky/MainActivity.kt # app/src/main/java/com/keylesspalace/tusky/StatusListActivity.kt # app/src/main/java/com/keylesspalace/tusky/TabData.kt # app/src/main/java/com/keylesspalace/tusky/adapter/NotificationsAdapter.java # app/src/main/java/com/keylesspalace/tusky/adapter/StatusBaseViewHolder.java # app/src/main/java/com/keylesspalace/tusky/appstore/Events.kt # app/src/main/java/com/keylesspalace/tusky/components/account/AccountActivity.kt # app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt # app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeViewModel.kt # app/src/main/java/com/keylesspalace/tusky/components/conversation/ConversationEntity.kt # app/src/main/java/com/keylesspalace/tusky/components/conversation/ConversationsFragment.kt # app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesActivity.kt # app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesFragment.kt # app/src/main/java/com/keylesspalace/tusky/components/report/fragments/ReportStatusesFragment.kt # app/src/main/java/com/keylesspalace/tusky/components/search/SearchViewModel.kt # app/src/main/java/com/keylesspalace/tusky/components/search/fragments/SearchStatusesFragment.kt # app/src/main/java/com/keylesspalace/tusky/components/timeline/TimelineFragment.kt # app/src/main/java/com/keylesspalace/tusky/components/timeline/TimelineTypeMappers.kt # app/src/main/java/com/keylesspalace/tusky/components/timeline/viewmodel/TimelineViewModel.kt # app/src/main/java/com/keylesspalace/tusky/components/viewthread/ViewThreadFragment.kt # app/src/main/java/com/keylesspalace/tusky/db/TimelineDao.kt # app/src/main/java/com/keylesspalace/tusky/db/TimelineStatusEntity.kt # app/src/main/java/com/keylesspalace/tusky/di/ActivitiesModule.kt # app/src/main/java/com/keylesspalace/tusky/di/FragmentBuildersModule.kt # app/src/main/java/com/keylesspalace/tusky/di/ViewModelFactory.kt # app/src/main/java/com/keylesspalace/tusky/entity/NewStatus.kt # app/src/main/java/com/keylesspalace/tusky/entity/Status.kt # app/src/main/java/com/keylesspalace/tusky/entity/TimelineAccount.kt # app/src/main/java/com/keylesspalace/tusky/fragment/NotificationsFragment.java # app/src/main/java/com/keylesspalace/tusky/service/SendStatusService.kt # app/src/main/java/com/keylesspalace/tusky/settings/SettingsConstants.kt # app/src/main/java/com/keylesspalace/tusky/util/StatusDisplayOptions.kt # app/src/main/java/com/keylesspalace/tusky/util/StatusParsingHelper.kt # app/src/main/res/layout/activity_about.xml # app/src/main/res/layout/activity_main.xml # app/src/main/res/layout/item_status.xml # app/src/main/res/layout/item_status_notification.xml # app/src/main/res/values-ar/strings.xml # app/src/main/res/values-be/strings.xml # app/src/main/res/values-bn-rBD/strings.xml # app/src/main/res/values-ca/strings.xml # app/src/main/res/values-cy/strings.xml # app/src/main/res/values-de/strings.xml # app/src/main/res/values-es/strings.xml # app/src/main/res/values-eu/strings.xml # app/src/main/res/values-fa/strings.xml # app/src/main/res/values-fr/strings.xml # app/src/main/res/values-gd/strings.xml # app/src/main/res/values-gl/strings.xml # app/src/main/res/values-hu/strings.xml # app/src/main/res/values-in/strings.xml # app/src/main/res/values-is/strings.xml # app/src/main/res/values-it/strings.xml # app/src/main/res/values-ja/strings.xml # app/src/main/res/values-lv/strings.xml # app/src/main/res/values-nb-rNO/strings.xml # app/src/main/res/values-night/theme_colors.xml # app/src/main/res/values-oc/strings.xml # app/src/main/res/values-pl/strings.xml # app/src/main/res/values-pt-rBR/strings.xml # app/src/main/res/values-ru/strings.xml # app/src/main/res/values-sa/strings.xml # app/src/main/res/values-sv/strings.xml # app/src/main/res/values-tr/strings.xml # app/src/main/res/values-uk/strings.xml # app/src/main/res/values-vi/strings.xml # app/src/main/res/values-zh-rCN/strings.xml # app/src/main/res/values/attrs.xml # app/src/main/res/values/styles.xml # app/src/main/res/values/theme_colors.xml # app/src/test/java/com/keylesspalace/tusky/BottomSheetActivityTest.kt # app/src/test/java/com/keylesspalace/tusky/FilterV1Test.kt # app/src/test/java/com/keylesspalace/tusky/components/timeline/StatusMocker.kt # app/src/test/java/com/keylesspalace/tusky/db/TimelineDaoTest.kt # app/src/test/java/com/keylesspalace/tusky/usecase/TimelineCasesTest.kt # app/src/test/java/com/keylesspalace/tusky/util/RickRollTest.kt # assets/tusky_banner.xcf # fastlane/metadata/android/ca/changelogs/58.txt # fastlane/metadata/android/ca/full_description.txt # fastlane/metadata/android/de/changelogs/58.txt # fastlane/metadata/android/de/changelogs/61.txt # fastlane/metadata/android/de/changelogs/67.txt # fastlane/metadata/android/de/changelogs/68.txt # fastlane/metadata/android/de/changelogs/70.txt # fastlane/metadata/android/de/changelogs/72.txt # fastlane/metadata/android/de/changelogs/74.txt # fastlane/metadata/android/de/changelogs/77.txt # fastlane/metadata/android/de/changelogs/80.txt # fastlane/metadata/android/de/changelogs/82.txt # fastlane/metadata/android/de/changelogs/83.txt # fastlane/metadata/android/de/changelogs/87.txt # fastlane/metadata/android/de/changelogs/89.txt # fastlane/metadata/android/de/changelogs/94.txt # fastlane/metadata/android/de/full_description.txt # fastlane/metadata/android/de/short_description.txt # fastlane/metadata/android/fa/changelogs/58.txt # fastlane/metadata/android/it/changelogs/58.txt # gradle.properties # gradle/libs.versions.toml # instance-build.gradle
2023-05-26 17:42:56 +02:00
filtered = null,
quote = null,
),
isExpanded = expanded,
isShowingContent = showingHiddenContent,
isCollapsed = collapsed
)
}
}
fun TimelineAccount.toEntity() =
ConversationAccountEntity(
id = id,
localUsername = localUsername,
username = username,
displayName = name,
avatar = avatar,
emojis = emojis.orEmpty()
)
fun Status.toEntity(
expanded: Boolean,
contentShowing: Boolean,
contentCollapsed: Boolean
) =
ConversationStatusEntity(
id = id,
url = url,
inReplyToId = inReplyToId,
inReplyToAccountId = inReplyToAccountId,
account = account.toEntity(),
content = content,
createdAt = createdAt,
editedAt = editedAt,
emojis = emojis,
favouritesCount = favouritesCount,
repliesCount = repliesCount,
favourited = favourited,
bookmarked = bookmarked,
sensitive = sensitive,
spoilerText = spoilerText,
attachments = attachments,
mentions = mentions,
tags = tags,
showingHiddenContent = contentShowing,
expanded = expanded,
collapsed = contentCollapsed,
muted = muted ?: false,
poll = poll,
language = language
)
fun Conversation.toEntity(
accountId: Long,
order: Int,
expanded: Boolean,
contentShowing: Boolean,
contentCollapsed: Boolean
) =
ConversationEntity(
accountId = accountId,
id = id,
order = order,
accounts = accounts.map { it.toEntity() },
unread = unread,
lastStatus = lastStatus!!.toEntity(
expanded = expanded,
contentShowing = contentShowing,
contentCollapsed = contentCollapsed
)
)