mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-29 08:20:32 +05:30
refactor: Obtain stream upload date as an Instant
This commit is contained in:
parent
1ccb857f2a
commit
36ae0e867c
@ -2,11 +2,13 @@ package com.github.libretube.api.obj
|
||||
|
||||
import com.github.libretube.db.obj.DownloadItem
|
||||
import com.github.libretube.enums.FileType
|
||||
import com.github.libretube.extensions.toMillis
|
||||
import com.github.libretube.helpers.ProxyHelper
|
||||
import com.github.libretube.json.SafeLocalDateSerializer
|
||||
import com.github.libretube.json.SafeInstantSerializer
|
||||
import com.github.libretube.parcelable.DownloadData
|
||||
import kotlinx.datetime.LocalDate
|
||||
import kotlinx.datetime.Instant
|
||||
import kotlinx.datetime.TimeZone
|
||||
import kotlinx.datetime.toLocalDateTime
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlin.io.path.Path
|
||||
|
||||
@ -14,7 +16,11 @@ import kotlin.io.path.Path
|
||||
data class Streams(
|
||||
val title: String,
|
||||
val description: String,
|
||||
@Serializable(SafeLocalDateSerializer::class) val uploadDate: LocalDate,
|
||||
|
||||
@Serializable(SafeInstantSerializer::class)
|
||||
@SerialName("uploadDate")
|
||||
val uploadTimestamp: Instant,
|
||||
|
||||
val uploader: String,
|
||||
val uploaderUrl: String,
|
||||
val uploaderAvatar: String? = null,
|
||||
@ -85,8 +91,9 @@ data class Streams(
|
||||
uploaderName = uploader,
|
||||
uploaderUrl = uploaderUrl,
|
||||
uploaderAvatar = uploaderAvatar,
|
||||
uploadedDate = uploadDate.toString(),
|
||||
uploaded = uploadDate.toMillis(),
|
||||
uploadedDate = uploadTimestamp.toLocalDateTime(TimeZone.currentSystemDefault()).date
|
||||
.toString(),
|
||||
uploaded = uploadTimestamp.toEpochMilliseconds(),
|
||||
duration = duration,
|
||||
views = views,
|
||||
uploaderVerified = uploaderVerified,
|
||||
|
@ -2,31 +2,31 @@ package com.github.libretube.json
|
||||
|
||||
import android.util.Log
|
||||
import com.github.libretube.extensions.TAG
|
||||
import kotlinx.datetime.LocalDate
|
||||
import kotlinx.datetime.Instant
|
||||
import kotlinx.datetime.TimeZone
|
||||
import kotlinx.datetime.atStartOfDayIn
|
||||
import kotlinx.datetime.toInstant
|
||||
import kotlinx.datetime.toLocalDate
|
||||
import kotlinx.datetime.toLocalDateTime
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.descriptors.PrimitiveKind.STRING
|
||||
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
|
||||
import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
|
||||
object SafeLocalDateSerializer : KSerializer<LocalDate> {
|
||||
override val descriptor = PrimitiveSerialDescriptor("LocalDate", STRING)
|
||||
object SafeInstantSerializer : KSerializer<Instant> {
|
||||
override val descriptor = PrimitiveSerialDescriptor("Instant", STRING)
|
||||
|
||||
override fun deserialize(decoder: Decoder): LocalDate {
|
||||
override fun deserialize(decoder: Decoder): Instant {
|
||||
val string = decoder.decodeString()
|
||||
return try {
|
||||
string.toLocalDate()
|
||||
string.toInstant()
|
||||
} catch (e: IllegalArgumentException) {
|
||||
Log.e(TAG(), "Error parsing date '$string'", e)
|
||||
string.toInstant().toLocalDateTime(TimeZone.currentSystemDefault()).date
|
||||
string.toLocalDate().atStartOfDayIn(TimeZone.currentSystemDefault())
|
||||
}
|
||||
}
|
||||
|
||||
override fun serialize(encoder: Encoder, value: LocalDate) {
|
||||
override fun serialize(encoder: Encoder, value: Instant) {
|
||||
encoder.encodeString(value.toString())
|
||||
}
|
||||
}
|
@ -62,6 +62,8 @@ import kotlinx.coroutines.flow.SharedFlow
|
||||
import kotlinx.coroutines.flow.firstOrNull
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import kotlinx.datetime.TimeZone
|
||||
import kotlinx.datetime.toLocalDateTime
|
||||
import okio.buffer
|
||||
import okio.sink
|
||||
import okio.source
|
||||
@ -115,7 +117,7 @@ class DownloadService : LifecycleService() {
|
||||
streams.title,
|
||||
streams.description,
|
||||
streams.uploader,
|
||||
streams.uploadDate,
|
||||
streams.uploadTimestamp.toLocalDateTime(TimeZone.currentSystemDefault()).date,
|
||||
thumbnailTargetPath
|
||||
)
|
||||
Database.downloadDao().insertDownload(download)
|
||||
|
@ -15,11 +15,12 @@ import com.github.libretube.R
|
||||
import com.github.libretube.api.obj.Streams
|
||||
import com.github.libretube.databinding.DescriptionLayoutBinding
|
||||
import com.github.libretube.extensions.formatShort
|
||||
import com.github.libretube.extensions.toLocalDateSafe
|
||||
import com.github.libretube.ui.activities.VideoTagsAdapter
|
||||
import com.github.libretube.util.HtmlParser
|
||||
import com.github.libretube.util.LinkHandler
|
||||
import com.github.libretube.util.TextUtils
|
||||
import kotlinx.datetime.TimeZone
|
||||
import kotlinx.datetime.toLocalDateTime
|
||||
import java.util.Locale
|
||||
|
||||
class DescriptionLayout(
|
||||
@ -135,7 +136,8 @@ class DescriptionLayout(
|
||||
private fun localizeDate(streams: Streams): String {
|
||||
if (streams.livestream) return ""
|
||||
|
||||
return TextUtils.SEPARATOR + TextUtils.localizeDate(streams.uploadDate.toLocalDateSafe())
|
||||
val date = streams.uploadTimestamp.toLocalDateTime(TimeZone.currentSystemDefault()).date
|
||||
return TextUtils.SEPARATOR + TextUtils.localizeDate(date)
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
Loading…
x
Reference in New Issue
Block a user