small changes
This commit is contained in:
parent
a032775f1b
commit
1b418d53ac
5 changed files with 55 additions and 30 deletions
|
|
@ -37,6 +37,7 @@ import org.json.JSONObject
|
|||
import java.io.File
|
||||
import java.lang.reflect.Type
|
||||
import java.net.URLEncoder
|
||||
import java.security.MessageDigest
|
||||
import java.util.ArrayList
|
||||
import java.util.Locale
|
||||
import java.util.UUID
|
||||
|
|
@ -138,7 +139,33 @@ class YTDLPUtil(private val context: Context) {
|
|||
val title = jsonObject.getStringByAny("alt_title", "title", "webpage_url_basename")
|
||||
if (title == "[Private video]" || title == "[Deleted video]") continue
|
||||
|
||||
var author = jsonObject.getStringByAny("artists", "artist", "uploader", "channel", "playlist_uploader", "uploader_id")
|
||||
|
||||
var playlistTitle = jsonObject.getStringByAny("playlist_title")
|
||||
var playlistURL: String? = ""
|
||||
var playlistIndex: Int? = null
|
||||
|
||||
if(playlistTitle.removeSurrounding("\"") == query) playlistTitle = ""
|
||||
|
||||
if (playlistTitle.isNotBlank()){
|
||||
playlistURL = jsonObject.getStringByAny("playlist_webpage_url").ifEmpty { query }
|
||||
kotlin.runCatching { playlistIndex = jsonObject.getInt("playlist_index") }
|
||||
}
|
||||
val url = if (jsonObject.has("url") && results.size > 1){
|
||||
jsonObject.getString("url")
|
||||
}else{
|
||||
if (Patterns.WEB_URL.matcher(query).matches() && playlistURL?.isEmpty() == true){
|
||||
query
|
||||
}else{
|
||||
jsonObject.getStringByAny("webpage_url", "original_url", "url", )
|
||||
jsonObject.getString("webpage_url")
|
||||
}
|
||||
}
|
||||
|
||||
val authorTags = mutableListOf("uploader", "channel", "playlist_uploader", "uploader_id")
|
||||
if (url.isYoutubeURL()) {
|
||||
authorTags.addAll(0, listOf("artists", "artist"))
|
||||
}
|
||||
var author = jsonObject.getStringByAny(*authorTags.map { it }.toTypedArray())
|
||||
var duration = jsonObject.getIntByAny("duration").toString()
|
||||
if (duration != "-1"){
|
||||
duration = jsonObject.getInt("duration").toStringDuration(Locale.US)
|
||||
|
|
@ -167,16 +194,7 @@ class YTDLPUtil(private val context: Context) {
|
|||
|
||||
var website = jsonObject.getStringByAny("extractor_key", "extractor","ie_key")
|
||||
if (website == "Generic" || website == "HTML5MediaEmbed") website = jsonObject.getStringByAny("webpage_url_domain")
|
||||
var playlistTitle = jsonObject.getStringByAny("playlist_title")
|
||||
var playlistURL: String? = ""
|
||||
var playlistIndex: Int? = null
|
||||
|
||||
if(playlistTitle.removeSurrounding("\"") == query) playlistTitle = ""
|
||||
|
||||
if (playlistTitle.isNotBlank()){
|
||||
playlistURL = jsonObject.getStringByAny("playlist_webpage_url").ifEmpty { query }
|
||||
kotlin.runCatching { playlistIndex = jsonObject.getInt("playlist_index") }
|
||||
}
|
||||
|
||||
val formatsInJSON = if (jsonObject.has("formats") && jsonObject.get("formats") is JSONArray) jsonObject.getJSONArray("formats") else null
|
||||
val formats : ArrayList<Format> = parseYTDLFormats(formatsInJSON)
|
||||
|
|
@ -201,16 +219,7 @@ class YTDLPUtil(private val context: Context) {
|
|||
urls = urlList.joinToString("\n")
|
||||
}
|
||||
|
||||
val url = if (jsonObject.has("url") && results.size > 1){
|
||||
jsonObject.getString("url")
|
||||
}else{
|
||||
if (Patterns.WEB_URL.matcher(query).matches() && playlistURL?.isEmpty() == true){
|
||||
query
|
||||
}else{
|
||||
jsonObject.getStringByAny("webpage_url", "original_url", "url", )
|
||||
jsonObject.getString("webpage_url")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
val type = jsonObject.getStringByAny("_type")
|
||||
if (type == "playlist" && playlistTitle.isEmpty()) {
|
||||
|
|
@ -536,6 +545,7 @@ class YTDLPUtil(private val context: Context) {
|
|||
this.add(it)
|
||||
}
|
||||
}
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
@SuppressLint("RestrictedApi")
|
||||
fun buildYoutubeDLRequest(downloadItem: DownloadItem) : YoutubeDLRequest {
|
||||
val useItemURL = sharedPreferences.getBoolean("use_itemurl_instead_playlisturl", false)
|
||||
|
|
@ -723,8 +733,8 @@ class YTDLPUtil(private val context: Context) {
|
|||
}
|
||||
|
||||
if (!sharedPreferences.getBoolean("disable_write_info_json", false)) {
|
||||
val cachePath = "${FileUtil.getCachePath(context)}/infojsons"
|
||||
val infoJsonName = downloadItem.url.replace("/", "")
|
||||
val cachePath = "${FileUtil.getCachePath(context)}infojsons"
|
||||
val infoJsonName = MessageDigest.getInstance("MD5").digest(downloadItem.url.toByteArray()).toHexString()
|
||||
|
||||
val infoJsonFile = File(cachePath).walkTopDown().firstOrNull { it.name == "${infoJsonName}.info.json" }
|
||||
//ignore info file if its older than 5 hours. puny measure to prevent expired formats in some cases
|
||||
|
|
@ -807,7 +817,10 @@ class YTDLPUtil(private val context: Context) {
|
|||
request.addOption("-P", downDir.absolutePath)
|
||||
request.addOption("-S", formatSorting.toString())
|
||||
|
||||
metadataCommands.addOption("--parse-metadata", """%(artists,artist,uploader,channel,creator|null)l:^(?P<uploader>.*?)(?:(?= - Topic)|$)""")
|
||||
val useArtistTags = if (downloadItem.url.isYoutubeURL()) "artists,artist," else ""
|
||||
if (downloadItem.author.isBlank()) {
|
||||
metadataCommands.addOption("--parse-metadata", """%(${useArtistTags}uploader,channel,creator|null)l:^(?P<uploader>.*?)(?:(?= - Topic)|$)""")
|
||||
}
|
||||
|
||||
if (downloadItem.audioPreferences.splitByChapters && downloadItem.downloadSections.isBlank()){
|
||||
request.addOption("--split-chapters")
|
||||
|
|
@ -835,9 +848,9 @@ class YTDLPUtil(private val context: Context) {
|
|||
}
|
||||
|
||||
|
||||
metadataCommands.addOption("--parse-metadata", "%(album_artist,first_artist|)s:%(album_artist)s")
|
||||
metadataCommands.addOption("--parse-metadata", "description:(?:Released on: )(?P<dscrptn_year>\\d{4})")
|
||||
metadataCommands.addOption("--parse-metadata", "%(dscrptn_year,release_year,release_date>%Y,upload_date>%Y)s:(?P<meta_date>\\d+)")
|
||||
metadataCommands.addOption("--parse-metadata", "%(album_artist,first_artist|)s:%(album_artist)s")
|
||||
|
||||
if (isPlaylistItem) {
|
||||
metadataCommands.addOption("--parse-metadata", "%(track_number,playlist_index)d:(?P<track_number>\\d+)")
|
||||
|
|
@ -877,7 +890,10 @@ class YTDLPUtil(private val context: Context) {
|
|||
|
||||
}
|
||||
DownloadViewModel.Type.video -> {
|
||||
metadataCommands.addOption("--parse-metadata", """%(uploader,channel,creator,artist|null)s:^(?P<uploader>.*?)(?:(?= - Topic)|$)""")
|
||||
val useArtistTags = if (downloadItem.url.isYoutubeURL()) "artists,artist," else ""
|
||||
if (downloadItem.author.isBlank()) {
|
||||
metadataCommands.addOption("--parse-metadata", """%(${useArtistTags}uploader,channel,creator|null)l:^(?P<uploader>.*?)(?:(?= - Topic)|$)""")
|
||||
}
|
||||
|
||||
val supportedContainers = context.resources.getStringArray(R.array.video_containers)
|
||||
|
||||
|
|
|
|||
7
app/src/main/res/drawable/divider_10dp.xml
Normal file
7
app/src/main/res/drawable/divider_10dp.xml
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<size
|
||||
android:height="10dp"
|
||||
android:width="10dp"/>
|
||||
</shape>
|
||||
|
|
@ -23,7 +23,7 @@
|
|||
android:id="@+id/sampleRadioBtn"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_marginStart="5dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
|
|
|||
|
|
@ -35,13 +35,15 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingHorizontal="10dp"
|
||||
android:divider="@drawable/divider_10dp"
|
||||
android:showDividers="middle"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/author_textinput"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="40"
|
||||
android:layout_weight="45"
|
||||
android:hint="@string/author"
|
||||
style="@style/Widget.Material3.TextInputLayout.FilledBox">
|
||||
|
||||
|
|
@ -59,7 +61,6 @@
|
|||
style="@style/Widget.Material3.TextInputLayout.FilledBox.ExposedDropdownMenu"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="45"
|
||||
android:paddingStart="10dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/container">
|
||||
|
||||
|
|
|
|||
|
|
@ -34,6 +34,8 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:paddingHorizontal="10dp"
|
||||
android:divider="@drawable/divider_10dp"
|
||||
android:showDividers="middle"
|
||||
android:baselineAligned="false">
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
|
|
@ -41,7 +43,7 @@
|
|||
style="@style/Widget.Material3.TextInputLayout.FilledBox"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="40"
|
||||
android:layout_weight="45"
|
||||
android:hint="@string/author">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
|
|
@ -60,7 +62,6 @@
|
|||
android:layout_weight="45"
|
||||
android:labelFor="@id/container_textview"
|
||||
android:hint="@string/container"
|
||||
android:paddingStart="10dp"
|
||||
android:paddingEnd="0dp">
|
||||
|
||||
<AutoCompleteTextView
|
||||
|
|
|
|||
Loading…
Reference in a new issue