diff --git a/app/src/main/java/com/github/libretube/api/PlaylistsHelper.kt b/app/src/main/java/com/github/libretube/api/PlaylistsHelper.kt index 95579ed12..bb2c67cfd 100644 --- a/app/src/main/java/com/github/libretube/api/PlaylistsHelper.kt +++ b/app/src/main/java/com/github/libretube/api/PlaylistsHelper.kt @@ -14,8 +14,6 @@ import com.github.libretube.db.obj.LocalPlaylist import com.github.libretube.enums.PlaylistType import com.github.libretube.extensions.TAG import com.github.libretube.extensions.toID -import com.github.libretube.extensions.toLocalPlaylistItem -import com.github.libretube.extensions.toStreamItem import com.github.libretube.extensions.toastFromMainThread import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.helpers.ProxyHelper diff --git a/app/src/main/java/com/github/libretube/api/obj/PipedStream.kt b/app/src/main/java/com/github/libretube/api/obj/PipedStream.kt index aadf7ed59..246e6e551 100644 --- a/app/src/main/java/com/github/libretube/api/obj/PipedStream.kt +++ b/app/src/main/java/com/github/libretube/api/obj/PipedStream.kt @@ -20,4 +20,9 @@ data class PipedStream( val fps: Int? = null, val audioTrackName: String? = null, val audioTrackId: String? = null -) +) { + fun getQualityString(fileName: String): String { + return "${fileName}_${quality?.replace(" ", "_")}_$format." + + mimeType?.split("/")?.last() + } +} diff --git a/app/src/main/java/com/github/libretube/api/obj/Playlist.kt b/app/src/main/java/com/github/libretube/api/obj/Playlist.kt index 4933a91d8..da7d1f77a 100644 --- a/app/src/main/java/com/github/libretube/api/obj/Playlist.kt +++ b/app/src/main/java/com/github/libretube/api/obj/Playlist.kt @@ -1,5 +1,6 @@ package com.github.libretube.api.obj +import com.github.libretube.db.obj.PlaylistBookmark import kotlinx.serialization.Serializable @Serializable @@ -13,4 +14,15 @@ data class Playlist( val uploaderAvatar: String? = null, val videos: Int = 0, val relatedStreams: List = emptyList() -) +) { + fun toPlaylistBookmark(playlistId: String): PlaylistBookmark { + return PlaylistBookmark( + playlistId = playlistId, + playlistName = name, + thumbnailUrl = thumbnailUrl, + uploader = uploader, + uploaderAvatar = uploaderAvatar, + uploaderUrl = uploaderUrl + ) + } +} diff --git a/app/src/main/java/com/github/libretube/api/obj/StreamItem.kt b/app/src/main/java/com/github/libretube/api/obj/StreamItem.kt index 60dadc0b7..44c3c965f 100644 --- a/app/src/main/java/com/github/libretube/api/obj/StreamItem.kt +++ b/app/src/main/java/com/github/libretube/api/obj/StreamItem.kt @@ -1,5 +1,7 @@ package com.github.libretube.api.obj +import com.github.libretube.db.obj.LocalPlaylistItem +import com.github.libretube.extensions.toID import kotlinx.serialization.Serializable @Serializable @@ -18,4 +20,18 @@ data class StreamItem( val uploaded: Long? = null, val shortDescription: String? = null, val isShort: Boolean = false -) +) { + fun toLocalPlaylistItem(playlistId: String): LocalPlaylistItem { + return LocalPlaylistItem( + playlistId = playlistId.toInt(), + videoId = url!!.toID(), + title = title, + thumbnailUrl = thumbnail, + uploader = uploaderName, + uploaderUrl = uploaderUrl, + uploaderAvatar = uploaderAvatar, + uploadDate = uploadedDate, + duration = duration + ) + } +} diff --git a/app/src/main/java/com/github/libretube/api/obj/Streams.kt b/app/src/main/java/com/github/libretube/api/obj/Streams.kt index 6f4f8ce85..08a902d03 100644 --- a/app/src/main/java/com/github/libretube/api/obj/Streams.kt +++ b/app/src/main/java/com/github/libretube/api/obj/Streams.kt @@ -1,5 +1,7 @@ package com.github.libretube.api.obj +import com.github.libretube.db.obj.DownloadItem +import com.github.libretube.enums.FileType import kotlinx.datetime.LocalDate import kotlinx.serialization.Serializable @@ -29,4 +31,81 @@ data class Streams( val chapters: List = emptyList(), val uploaderSubscriberCount: Long = 0, val previewFrames: List = emptyList() -) +) { + fun toDownloadItems( + videoId: String, + fileName: String, + videoFormat: String?, + videoQuality: String?, + audioFormat: String?, + audioQuality: String?, + subtitleCode: String? + ): List { + val items = mutableListOf() + + if (!videoQuality.isNullOrEmpty() && !videoFormat.isNullOrEmpty()) { + val stream = videoStreams.find { + it.quality == videoQuality && it.format == videoFormat + } + items.add( + DownloadItem( + type = FileType.VIDEO, + videoId = videoId, + fileName = stream?.getQualityString(fileName).orEmpty(), + path = "", + url = stream?.url, + format = videoFormat, + quality = videoQuality + ) + ) + } + + if (!audioQuality.isNullOrEmpty() && !audioFormat.isNullOrEmpty()) { + val stream = audioStreams.find { + it.quality == audioQuality && it.format == audioFormat + } + items.add( + DownloadItem( + type = FileType.AUDIO, + videoId = videoId, + fileName = stream?.getQualityString(fileName).orEmpty(), + path = "", + url = stream?.url, + format = audioFormat, + quality = audioQuality + ) + ) + } + + if (!subtitleCode.isNullOrEmpty()) { + items.add( + DownloadItem( + type = FileType.SUBTITLE, + videoId = videoId, + fileName = "${fileName}_$subtitleCode.srt", + path = "", + url = subtitles.find { it.code == subtitleCode }?.url + ) + ) + } + + return items + } + + fun toStreamItem(videoId: String): StreamItem { + return StreamItem( + url = videoId, + title = title, + thumbnail = thumbnailUrl, + uploaderName = uploader, + uploaderUrl = uploaderUrl, + uploaderAvatar = uploaderAvatar, + uploadedDate = uploadDate.toString(), + uploaded = null, + duration = duration, + views = views, + uploaderVerified = uploaderVerified, + shortDescription = description + ) + } +} diff --git a/app/src/main/java/com/github/libretube/db/obj/LocalPlaylistItem.kt b/app/src/main/java/com/github/libretube/db/obj/LocalPlaylistItem.kt index f19effde5..6bc58958d 100644 --- a/app/src/main/java/com/github/libretube/db/obj/LocalPlaylistItem.kt +++ b/app/src/main/java/com/github/libretube/db/obj/LocalPlaylistItem.kt @@ -3,6 +3,8 @@ package com.github.libretube.db.obj import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.PrimaryKey +import com.github.libretube.api.obj.StreamItem +import com.github.libretube.helpers.ProxyHelper import kotlinx.serialization.Serializable @Serializable @@ -18,4 +20,18 @@ data class LocalPlaylistItem( @ColumnInfo val uploaderAvatar: String? = null, @ColumnInfo val thumbnailUrl: String? = null, @ColumnInfo val duration: Long? = null -) +) { + fun toStreamItem(): StreamItem { + return StreamItem( + url = videoId, + title = title, + thumbnail = ProxyHelper.rewriteUrl(thumbnailUrl), + uploaderName = uploader, + uploaderUrl = uploaderUrl, + uploaderAvatar = ProxyHelper.rewriteUrl(uploaderAvatar), + uploadedDate = uploadDate, + uploaded = null, + duration = duration + ) + } +} diff --git a/app/src/main/java/com/github/libretube/extensions/QualityString.kt b/app/src/main/java/com/github/libretube/extensions/QualityString.kt deleted file mode 100644 index 371541bac..000000000 --- a/app/src/main/java/com/github/libretube/extensions/QualityString.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.github.libretube.extensions - -import com.github.libretube.api.obj.PipedStream - -fun PipedStream?.qualityString(fileName: String): String { - this ?: return "" - return fileName + "_" + quality?.replace(" ", "_") + "_" + format + "." + mimeType?.split("/")?.last() -} diff --git a/app/src/main/java/com/github/libretube/extensions/Serializable.kt b/app/src/main/java/com/github/libretube/extensions/Serializable.kt index 25c9cb521..49e3c25fb 100644 --- a/app/src/main/java/com/github/libretube/extensions/Serializable.kt +++ b/app/src/main/java/com/github/libretube/extensions/Serializable.kt @@ -1,4 +1,4 @@ -package com.github.libretube.ui.extensions +package com.github.libretube.extensions import android.os.Build import android.os.Bundle diff --git a/app/src/main/java/com/github/libretube/extensions/ToDownloadItems.kt b/app/src/main/java/com/github/libretube/extensions/ToDownloadItems.kt deleted file mode 100644 index 8724f0ccc..000000000 --- a/app/src/main/java/com/github/libretube/extensions/ToDownloadItems.kt +++ /dev/null @@ -1,61 +0,0 @@ -package com.github.libretube.extensions - -import com.github.libretube.api.obj.Streams -import com.github.libretube.db.obj.DownloadItem -import com.github.libretube.enums.FileType - -fun Streams.toDownloadItems( - videoId: String, - fileName: String, - videoFormat: String?, - videoQuality: String?, - audioFormat: String?, - audioQuality: String?, - subtitleCode: String? -): List { - val items = mutableListOf() - - if (!videoQuality.isNullOrEmpty() && !videoFormat.isNullOrEmpty()) { - val stream = videoStreams.find { it.quality == videoQuality && it.format == videoFormat } - items.add( - DownloadItem( - type = FileType.VIDEO, - videoId = videoId, - fileName = stream.qualityString(fileName), - path = "", - url = stream?.url, - format = videoFormat, - quality = videoQuality - ) - ) - } - - if (!audioQuality.isNullOrEmpty() && !audioFormat.isNullOrEmpty()) { - val stream = audioStreams.find { it.quality == audioQuality && it.format == audioFormat } - items.add( - DownloadItem( - type = FileType.AUDIO, - videoId = videoId, - fileName = stream.qualityString(fileName), - path = "", - url = stream?.url, - format = audioFormat, - quality = audioQuality - ) - ) - } - - if (!subtitleCode.isNullOrEmpty()) { - items.add( - DownloadItem( - type = FileType.SUBTITLE, - videoId = videoId, - fileName = "${fileName}_$subtitleCode.srt", - path = "", - url = subtitles.find { it.code == subtitleCode }?.url - ) - ) - } - - return items -} diff --git a/app/src/main/java/com/github/libretube/extensions/ToLocalPlaylistItem.kt b/app/src/main/java/com/github/libretube/extensions/ToLocalPlaylistItem.kt deleted file mode 100644 index 8df7fddd7..000000000 --- a/app/src/main/java/com/github/libretube/extensions/ToLocalPlaylistItem.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.github.libretube.extensions - -import com.github.libretube.api.obj.StreamItem -import com.github.libretube.db.obj.LocalPlaylistItem - -fun StreamItem.toLocalPlaylistItem(playlistId: String): LocalPlaylistItem { - return LocalPlaylistItem( - playlistId = playlistId.toInt(), - videoId = url!!.toID(), - title = title, - thumbnailUrl = thumbnail, - uploader = uploaderName, - uploaderUrl = uploaderUrl, - uploaderAvatar = uploaderAvatar, - uploadDate = uploadedDate, - duration = duration - ) -} diff --git a/app/src/main/java/com/github/libretube/extensions/ToPlaylistBookmark.kt b/app/src/main/java/com/github/libretube/extensions/ToPlaylistBookmark.kt deleted file mode 100644 index c821bd3cc..000000000 --- a/app/src/main/java/com/github/libretube/extensions/ToPlaylistBookmark.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.github.libretube.extensions - -import com.github.libretube.api.obj.Playlist -import com.github.libretube.db.obj.PlaylistBookmark - -fun Playlist.toPlaylistBookmark(playlistId: String): PlaylistBookmark { - return PlaylistBookmark( - playlistId = playlistId, - playlistName = name, - thumbnailUrl = thumbnailUrl, - uploader = uploader, - uploaderAvatar = uploaderAvatar, - uploaderUrl = uploaderUrl - ) -} diff --git a/app/src/main/java/com/github/libretube/extensions/ToStreamItem.kt b/app/src/main/java/com/github/libretube/extensions/ToStreamItem.kt deleted file mode 100644 index 14b42969e..000000000 --- a/app/src/main/java/com/github/libretube/extensions/ToStreamItem.kt +++ /dev/null @@ -1,37 +0,0 @@ -package com.github.libretube.extensions - -import com.github.libretube.api.obj.StreamItem -import com.github.libretube.api.obj.Streams -import com.github.libretube.db.obj.LocalPlaylistItem -import com.github.libretube.helpers.ProxyHelper - -fun Streams.toStreamItem(videoId: String): StreamItem { - return StreamItem( - url = videoId, - title = title, - thumbnail = thumbnailUrl, - uploaderName = uploader, - uploaderUrl = uploaderUrl, - uploaderAvatar = uploaderAvatar, - uploadedDate = uploadDate.toString(), - uploaded = null, - duration = duration, - views = views, - uploaderVerified = uploaderVerified, - shortDescription = description - ) -} - -fun LocalPlaylistItem.toStreamItem(): StreamItem { - return StreamItem( - url = videoId, - title = title, - thumbnail = ProxyHelper.rewriteUrl(thumbnailUrl), - uploaderName = uploader, - uploaderUrl = uploaderUrl, - uploaderAvatar = ProxyHelper.rewriteUrl(uploaderAvatar), - uploadedDate = uploadDate, - uploaded = null, - duration = duration - ) -} diff --git a/app/src/main/java/com/github/libretube/services/BackgroundMode.kt b/app/src/main/java/com/github/libretube/services/BackgroundMode.kt index b19563967..dd8470fe5 100644 --- a/app/src/main/java/com/github/libretube/services/BackgroundMode.kt +++ b/app/src/main/java/com/github/libretube/services/BackgroundMode.kt @@ -28,7 +28,6 @@ import com.github.libretube.extensions.TAG import com.github.libretube.extensions.awaitQuery import com.github.libretube.extensions.query import com.github.libretube.extensions.toID -import com.github.libretube.extensions.toStreamItem import com.github.libretube.helpers.PlayerHelper import com.github.libretube.helpers.PlayerHelper.checkForSegments import com.github.libretube.helpers.PlayerHelper.loadPlaybackParams diff --git a/app/src/main/java/com/github/libretube/services/DownloadService.kt b/app/src/main/java/com/github/libretube/services/DownloadService.kt index f3faf70ac..852fd050b 100644 --- a/app/src/main/java/com/github/libretube/services/DownloadService.kt +++ b/app/src/main/java/com/github/libretube/services/DownloadService.kt @@ -25,7 +25,6 @@ import com.github.libretube.db.obj.DownloadItem import com.github.libretube.enums.FileType import com.github.libretube.extensions.formatAsFileSize import com.github.libretube.extensions.getContentLength -import com.github.libretube.extensions.toDownloadItems import com.github.libretube.extensions.toastFromMainThread import com.github.libretube.helpers.DownloadHelper import com.github.libretube.helpers.DownloadHelper.getNotificationId diff --git a/app/src/main/java/com/github/libretube/ui/dialogs/AddToPlaylistDialog.kt b/app/src/main/java/com/github/libretube/ui/dialogs/AddToPlaylistDialog.kt index ec7121376..b422068c4 100644 --- a/app/src/main/java/com/github/libretube/ui/dialogs/AddToPlaylistDialog.kt +++ b/app/src/main/java/com/github/libretube/ui/dialogs/AddToPlaylistDialog.kt @@ -14,7 +14,6 @@ import com.github.libretube.api.PlaylistsHelper import com.github.libretube.api.RetrofitInstance import com.github.libretube.databinding.DialogAddtoplaylistBinding import com.github.libretube.extensions.TAG -import com.github.libretube.extensions.toStreamItem import com.github.libretube.extensions.toastFromMainThread import com.github.libretube.ui.models.PlaylistViewModel import com.github.libretube.util.PlayingQueue diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt index eb480588e..0a2e655e3 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt @@ -62,7 +62,6 @@ import com.github.libretube.extensions.formatShort import com.github.libretube.extensions.hideKeyboard import com.github.libretube.extensions.query import com.github.libretube.extensions.toID -import com.github.libretube.extensions.toStreamItem import com.github.libretube.extensions.updateParameters import com.github.libretube.helpers.BackgroundHelper import com.github.libretube.helpers.DashHelper diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt index 980f525fd..7df798399 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt @@ -25,12 +25,11 @@ import com.github.libretube.extensions.awaitQuery import com.github.libretube.extensions.dpToPx import com.github.libretube.extensions.query import com.github.libretube.extensions.toID -import com.github.libretube.extensions.toPlaylistBookmark import com.github.libretube.helpers.ImageHelper import com.github.libretube.helpers.NavigationHelper import com.github.libretube.ui.adapters.PlaylistAdapter import com.github.libretube.ui.base.BaseFragment -import com.github.libretube.ui.extensions.serializable +import com.github.libretube.extensions.serializable import com.github.libretube.ui.models.PlayerViewModel import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet import com.github.libretube.util.PlayingQueue diff --git a/app/src/main/java/com/github/libretube/ui/sheets/PlaylistOptionsBottomSheet.kt b/app/src/main/java/com/github/libretube/ui/sheets/PlaylistOptionsBottomSheet.kt index 835445bcd..c67c09dea 100644 --- a/app/src/main/java/com/github/libretube/ui/sheets/PlaylistOptionsBottomSheet.kt +++ b/app/src/main/java/com/github/libretube/ui/sheets/PlaylistOptionsBottomSheet.kt @@ -10,7 +10,6 @@ import com.github.libretube.enums.ShareObjectType import com.github.libretube.extensions.awaitQuery import com.github.libretube.extensions.query import com.github.libretube.extensions.toID -import com.github.libretube.extensions.toPlaylistBookmark import com.github.libretube.extensions.toastFromMainThread import com.github.libretube.helpers.BackgroundHelper import com.github.libretube.obj.ShareData diff --git a/app/src/main/java/com/github/libretube/ui/sheets/VideoOptionsBottomSheet.kt b/app/src/main/java/com/github/libretube/ui/sheets/VideoOptionsBottomSheet.kt index 3c0b7a0ee..b58c81bbe 100644 --- a/app/src/main/java/com/github/libretube/ui/sheets/VideoOptionsBottomSheet.kt +++ b/app/src/main/java/com/github/libretube/ui/sheets/VideoOptionsBottomSheet.kt @@ -10,7 +10,6 @@ import com.github.libretube.db.DatabaseHolder import com.github.libretube.db.obj.WatchPosition import com.github.libretube.enums.ShareObjectType import com.github.libretube.extensions.awaitQuery -import com.github.libretube.extensions.toStreamItem import com.github.libretube.helpers.BackgroundHelper import com.github.libretube.helpers.PlayerHelper import com.github.libretube.helpers.PreferenceHelper diff --git a/app/src/main/java/com/github/libretube/util/PlayingQueue.kt b/app/src/main/java/com/github/libretube/util/PlayingQueue.kt index 99981aeda..6856ef7d0 100644 --- a/app/src/main/java/com/github/libretube/util/PlayingQueue.kt +++ b/app/src/main/java/com/github/libretube/util/PlayingQueue.kt @@ -6,7 +6,6 @@ import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.obj.StreamItem import com.github.libretube.extensions.move import com.github.libretube.extensions.toID -import com.github.libretube.extensions.toStreamItem import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch