From d124b8fb5fe7e53dc3e4a4e07646a1d285bccb5e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Denis=20=C3=87erri?=
<64997243+deniscerri@users.noreply.github.com>
Date: Fri, 20 Jan 2023 23:09:20 +0100
Subject: [PATCH] added invidious formats and unified download card for a
single item
---
.idea/assetWizardSettings.xml | 4 +-
.../ytdlnis/database/models/DownloadItem.kt | 3 +
.../ytdlnis/database/models/Format.kt | 6 +
.../database/repository/ResultRepository.kt | 6 +-
.../service/{ => api}/InvidiousService.kt | 2 +-
.../service/{ => api}/YoutubeAPIService.kt | 2 +-
.../com/deniscerri/ytdlnis/util/InfoUtil.kt | 14 +-
app/src/main/res/drawable/ic_check.xml | 5 +
app/src/main/res/drawable/ic_clock.xml | 6 +
app/src/main/res/drawable/ic_edit.xml | 5 +
app/src/main/res/drawable/ic_plus.xml | 5 +
.../home_download_audio_bottom_sheet.xml | 52 ---
.../home_download_single_bottom_sheet.xml | 373 +++++++++++++-----
.../res/layout/search_suggestion_item.xml | 8 +-
app/src/main/res/values/strings.xml | 7 +
app/src/main/res/values/styles.xml | 2 +-
16 files changed, 326 insertions(+), 174 deletions(-)
rename app/src/main/java/com/deniscerri/ytdlnis/service/{ => api}/InvidiousService.kt (96%)
rename app/src/main/java/com/deniscerri/ytdlnis/service/{ => api}/YoutubeAPIService.kt (98%)
create mode 100644 app/src/main/res/drawable/ic_check.xml
create mode 100644 app/src/main/res/drawable/ic_clock.xml
create mode 100644 app/src/main/res/drawable/ic_edit.xml
create mode 100644 app/src/main/res/drawable/ic_plus.xml
diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml
index 617fae3e..a53c62e8 100644
--- a/.idea/assetWizardSettings.xml
+++ b/.idea/assetWizardSettings.xml
@@ -320,7 +320,7 @@
@@ -331,7 +331,7 @@
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/models/DownloadItem.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/models/DownloadItem.kt
index 4764ecdb..073609b2 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/models/DownloadItem.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/models/DownloadItem.kt
@@ -24,6 +24,9 @@ data class DownloadItem(
val website: String,
val downloadSize: String,
val playlistTitle: String,
+ val embedSubs: Boolean,
+ val addChapters: Boolean,
+ val SaveThumb: Boolean,
@ColumnInfo(defaultValue = "Queued")
val status: String,
val workID: Int
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/models/Format.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/models/Format.kt
index 2fecfc5c..5f53824d 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/models/Format.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/models/Format.kt
@@ -2,14 +2,20 @@ package com.deniscerri.ytdlnis.database.models
import androidx.room.Entity
import androidx.room.PrimaryKey
+import com.google.gson.annotations.SerializedName
@Entity(tableName = "formats")
data class Format(
var itemId: Int,
+ @SerializedName(value = "format", alternate = ["type"])
val format: String,
+ @SerializedName(value = "format_id", alternate = ["itag"])
val format_id: String,
+ @SerializedName(value = "ext", alternate = ["container", ""])
val ext: String,
+ @SerializedName(value = "filesize", alternate = ["clen"])
val filesize: Long,
+ @SerializedName(value = "format_note", alternate = ["resolution", "audioQuality"])
val format_note: String
){
@PrimaryKey(autoGenerate = true)
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/repository/ResultRepository.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/repository/ResultRepository.kt
index 8ae0a35e..90229802 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/repository/ResultRepository.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/repository/ResultRepository.kt
@@ -79,7 +79,7 @@ class ResultRepository(private val resultDao: ResultDao, private val formatDao:
val tmpVids = tmp.videos
val tmpToken = tmp.nextPageToken
tmpVids.forEach {
- val id = resultDao.insert(it!!.resultItem);
+ val id = resultDao.insert(it!!.resultItem)
addFormats(it.formats,id)
}
if (tmpToken.isEmpty()) break
@@ -94,7 +94,7 @@ class ResultRepository(private val resultDao: ResultDao, private val formatDao:
if (resetResults) deleteAll()
val items = infoUtil.getFromYTDL(inputQuery)
items.forEach {
- val id = resultDao.insert(it!!.resultItem);
+ val id = resultDao.insert(it!!.resultItem)
addFormats(it.formats,id)
}
} catch (e: Exception) {
@@ -104,7 +104,7 @@ class ResultRepository(private val resultDao: ResultDao, private val formatDao:
private suspend fun addFormats(formats : ArrayList, id: Long){
formats.forEach { f ->
- if (f.filesize == 0.toLong()) return@forEach
+ if (f.filesize == 0L) return@forEach
f.itemId = id.toInt()
formatDao.insert(f)
}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/service/InvidiousService.kt b/app/src/main/java/com/deniscerri/ytdlnis/service/api/InvidiousService.kt
similarity index 96%
rename from app/src/main/java/com/deniscerri/ytdlnis/service/InvidiousService.kt
rename to app/src/main/java/com/deniscerri/ytdlnis/service/api/InvidiousService.kt
index e8e82f32..bee05569 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/service/InvidiousService.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/service/api/InvidiousService.kt
@@ -1,4 +1,4 @@
-package com.deniscerri.ytdlnis.service
+package com.deniscerri.ytdlnis.service.api
import com.deniscerri.ytdlnis.database.models.ResultItem
import com.google.gson.JsonArray
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/service/YoutubeAPIService.kt b/app/src/main/java/com/deniscerri/ytdlnis/service/api/YoutubeAPIService.kt
similarity index 98%
rename from app/src/main/java/com/deniscerri/ytdlnis/service/YoutubeAPIService.kt
rename to app/src/main/java/com/deniscerri/ytdlnis/service/api/YoutubeAPIService.kt
index 1e05e0a4..ace5b13f 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/service/YoutubeAPIService.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/service/api/YoutubeAPIService.kt
@@ -1,4 +1,4 @@
-package com.deniscerri.ytdlnis.service
+package com.deniscerri.ytdlnis.service.api
import com.google.gson.JsonArray
import com.google.gson.JsonObject
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 d425b32d..d5a93c4d 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/util/InfoUtil.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/util/InfoUtil.kt
@@ -288,6 +288,16 @@ class InfoUtil(context: Context) {
val duration = formatIntegerDuration(obj.getInt("lengthSeconds"))
val thumb = "https://i.ytimg.com/vi/$id/hqdefault.jpg"
val url = "https://www.youtube.com/watch?v=$id"
+ val formats : ArrayList = ArrayList()
+ if (obj.has("adaptiveFormats")){
+ val formatsInJSON = obj.getJSONArray("adaptiveFormats");
+ for (f in 0 until formatsInJSON.length()){
+ val format = formatsInJSON.getJSONObject(f)
+ if(!format.has("container")) continue
+ formats.add(Gson().fromJson(format.toString(), Format::class.java))
+ }
+ }
+
video = ResultItemWithFormats(
ResultItem(
url,
@@ -298,7 +308,7 @@ class InfoUtil(context: Context) {
"youtube",
"",
),
- ArrayList()
+ formats
)
} catch (e: Exception) {
Log.e(TAG, e.toString())
@@ -606,7 +616,7 @@ class InfoUtil(context: Context) {
companion object {
private const val TAG = "API MANAGER"
- private const val invidousURL = "https://invidious.baczek.me/api/vvvvvv/"
+ private const val invidousURL = "https://invidious.nerdvpn.de/api/v1/"
private var countryCODE: String? = null
}
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_check.xml b/app/src/main/res/drawable/ic_check.xml
new file mode 100644
index 00000000..8c2e797e
--- /dev/null
+++ b/app/src/main/res/drawable/ic_check.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_clock.xml b/app/src/main/res/drawable/ic_clock.xml
new file mode 100644
index 00000000..8bbe4160
--- /dev/null
+++ b/app/src/main/res/drawable/ic_clock.xml
@@ -0,0 +1,6 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_edit.xml b/app/src/main/res/drawable/ic_edit.xml
new file mode 100644
index 00000000..d52f8edc
--- /dev/null
+++ b/app/src/main/res/drawable/ic_edit.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_plus.xml b/app/src/main/res/drawable/ic_plus.xml
new file mode 100644
index 00000000..c5720a0e
--- /dev/null
+++ b/app/src/main/res/drawable/ic_plus.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/layout/home_download_audio_bottom_sheet.xml b/app/src/main/res/layout/home_download_audio_bottom_sheet.xml
index aa4c1211..0547e925 100644
--- a/app/src/main/res/layout/home_download_audio_bottom_sheet.xml
+++ b/app/src/main/res/layout/home_download_audio_bottom_sheet.xml
@@ -14,30 +14,6 @@
android:orientation="vertical"
>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/home_download_single_bottom_sheet.xml b/app/src/main/res/layout/home_download_single_bottom_sheet.xml
index 3730fcb7..6ee9fb59 100644
--- a/app/src/main/res/layout/home_download_single_bottom_sheet.xml
+++ b/app/src/main/res/layout/home_download_single_bottom_sheet.xml
@@ -11,134 +11,291 @@
-
+
+
-
+
-
+
+
-
-
+ android:inputType="text"
+ android:layout_height="wrap_content"
+ />
+
+
-
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+ app:errorEnabled="true"
+ android:hint="@string/save_dir"
+ style="@style/Widget.Material3.TextInputLayout.FilledBox">
-
+ />
-
+
+
+
+
+
+
+ android:text="@string/video"
+ android:checkable="true"
+ app:checkedIcon="@drawable/ic_check"
+ app:chipIcon="@drawable/ic_video" />
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ android:text="@string/adjust_video" />
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+ android:layout_height="wrap_content"
+ android:layout_gravity="bottom"
+ android:gravity="end"
+ android:orientation="horizontal">
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/search_suggestion_item.xml b/app/src/main/res/layout/search_suggestion_item.xml
index c21cae19..062e83f0 100644
--- a/app/src/main/res/layout/search_suggestion_item.xml
+++ b/app/src/main/res/layout/search_suggestion_item.xml
@@ -30,8 +30,8 @@
android:layout_height="wrap_content"
android:orientation="horizontal">
-
- /404.404
File Transfers
Notification showing the progress of moving files from the temporary folder to set destination
+ Save dir
+ New template
+ Adjust templates
+ Edit selected
+ Adjust video
+ Remove Audio
+ Schedule
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 993ab2c6..6e88a960 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -25,7 +25,7 @@