diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/models/AutomateItem.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/models/AutomateItem.kt new file mode 100644 index 00000000..80c8db6c --- /dev/null +++ b/app/src/main/java/com/deniscerri/ytdlnis/database/models/AutomateItem.kt @@ -0,0 +1,19 @@ +package com.deniscerri.ytdlnis.database.models + +import androidx.room.PrimaryKey +import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel.Type + +data class AutomateItem( + @PrimaryKey(autoGenerate = true) + var id: Long, + var title: String, + var url: String, + var intervalNr: Long, + var intervalCategory: String, + var format: Format, + var type: Type, + var downloadPath: String, + var runOnLowBattery: Boolean, + var runOnMobileData: Boolean, + var replaceFiles: Boolean, +) \ No newline at end of file diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/CutVideoBottomSheetDialog.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/CutVideoBottomSheetDialog.kt index eea38ff6..4a105e57 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/CutVideoBottomSheetDialog.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/CutVideoBottomSheetDialog.kt @@ -5,8 +5,6 @@ import android.app.Dialog import android.content.DialogInterface import android.net.Uri import android.os.Bundle -import android.text.Editable -import android.text.TextWatcher import android.util.DisplayMetrics import android.util.Log import android.view.KeyEvent @@ -20,11 +18,19 @@ import com.deniscerri.ytdlnis.util.FileUtil import com.deniscerri.ytdlnis.util.InfoUtil import com.deniscerri.ytdlnis.util.UiUtil import com.google.android.exoplayer2.ExoPlayer -import com.google.android.exoplayer2.MediaItem +import com.google.android.exoplayer2.MediaItem.fromUri import com.google.android.exoplayer2.Player +import com.google.android.exoplayer2.source.DefaultMediaSourceFactory +import com.google.android.exoplayer2.source.MediaSource +import com.google.android.exoplayer2.source.MergingMediaSource +import com.google.android.exoplayer2.source.ProgressiveMediaSource +import com.google.android.exoplayer2.source.dash.DashMediaSource +import com.google.android.exoplayer2.source.hls.HlsMediaSource import com.google.android.exoplayer2.ui.PlayerView +import com.google.android.exoplayer2.upstream.FileDataSource import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialogFragment +import com.google.android.material.card.MaterialCardView import com.google.android.material.slider.RangeSlider import com.google.android.material.textfield.TextInputLayout import kotlinx.coroutines.Dispatchers @@ -66,6 +72,7 @@ class CutVideoBottomSheetDialog(private val item: DownloadItem, private val list } player = ExoPlayer.Builder(requireContext()).build() + val frame = view.findViewById(R.id.frame_layout) val videoView = view.findViewById(R.id.video_view) videoView.player = player @@ -98,21 +105,39 @@ class CutVideoBottomSheetDialog(private val item: DownloadItem, private val list val url = withContext(Dispatchers.IO){ infoUtil.getStreamingUrl(item.url) } + + if (url.isBlank()) throw Exception("No Streaming URL found!") + Log.e("aa", url.split("\n")[0]) + Log.e("aa", url.split("\n")[1]) + + val urls = url.split("\n") + if (urls.size == 2){ + val audioSource: MediaSource = + DefaultMediaSourceFactory(requireContext()) + .createMediaSource(fromUri(Uri.parse(urls[0]))) + val videoSource: MediaSource = + DefaultMediaSourceFactory(requireContext()) + .createMediaSource(fromUri(Uri.parse(urls[1]))) + (player as ExoPlayer).setMediaSource(MergingMediaSource(videoSource, audioSource)) + }else{ + player.addMediaItem(fromUri(Uri.parse(urls[0]))) + } + progress.visibility = View.GONE - player.addMediaItem(MediaItem.fromUri(Uri.parse(url))) + player.prepare() player.seekTo((((rangeSlider.values[0].toInt() * timeSeconds) / 100) * 1000).toLong()) player.play() }catch (e: Exception){ progress.visibility = View.GONE - videoView.visibility = View.GONE + frame.visibility = View.GONE e.printStackTrace() } } //poll video progress lifecycleScope.launch { - audioProgress(player).collect { + videoProgress(player).collect { val startTimestamp = (rangeSlider.values[0].toInt() * timeSeconds) / 100 val endTimestamp = (rangeSlider.values[1].toInt() * timeSeconds) / 100 if (it >= endTimestamp){ @@ -219,7 +244,7 @@ class CutVideoBottomSheetDialog(private val item: DownloadItem, private val list } } - private fun audioProgress(player: Player?) = flow { + private fun videoProgress(player: Player?) = flow { while (true) { emit((player!!.currentPosition / 1000).toInt()) delay(1000) diff --git a/app/src/main/java/com/deniscerri/ytdlnis/util/InfoUtil.kt b/app/src/main/java/com/deniscerri/ytdlnis/util/InfoUtil.kt index 6d2d966c..19bf05d3 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/util/InfoUtil.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/util/InfoUtil.kt @@ -644,8 +644,7 @@ class InfoUtil(context: Context) { arrayOf(youtubeDLResponse.out) } val jsonObject = JSONObject(results[0]!!) - val streamURL = jsonObject.getString("urls") - return streamURL.split("\n")[0] + return jsonObject.getString("urls") } catch (e: Exception) { return "" }