diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ca37a6eb..c4795898 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,17 @@
+
+
+
+
+
-
-
-
+ v.setPadding(0, 0, 0, 0)
+ insets
+ }
+ window.run {
+ setBackgroundDrawable(ColorDrawable(0))
+ setLayout(
+ WindowManager.LayoutParams.MATCH_PARENT,
+ WindowManager.LayoutParams.MATCH_PARENT
+ )
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
+ } else {
+ setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)
+ }
+ }
+
+ val paths = intent.getStringArrayExtra("path")
+ val notificationId = intent.getIntExtra("notificationID", 0)
+ NotificationUtil(this).cancelDownloadNotification(notificationId)
+ UiUtil.shareFileIntent(this, paths!!.toList())
+ finishAffinity()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/receiver/ShareFileService.kt b/app/src/main/java/com/deniscerri/ytdlnis/receiver/ShareFileService.kt
deleted file mode 100644
index e0d04391..00000000
--- a/app/src/main/java/com/deniscerri/ytdlnis/receiver/ShareFileService.kt
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.deniscerri.ytdlnis.receiver
-
-import android.app.Service
-import android.content.Intent
-import android.os.IBinder
-import com.deniscerri.ytdlnis.util.NotificationUtil
-import com.deniscerri.ytdlnis.util.UiUtil
-
-class ShareFileService : Service() {
- override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
- val paths = intent.getStringArrayExtra("path")
- val notificationId = intent.getIntExtra("notificationID", 0)
- NotificationUtil(this).cancelDownloadNotification(notificationId)
- UiUtil.shareFileIntent(this, paths!!.toList())
- return START_NOT_STICKY
- }
-
- override fun onBind(intent: Intent): IBinder? {
- return null
- }
-
- override fun onDestroy() {
- super.onDestroy()
- stopForeground(true)
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt
index b03489c3..c9a8ca9d 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt
@@ -658,6 +658,7 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, OnClickListene
selectedObjects?.clear()
selectedObjects?.addAll(invertedList)
actionMode!!.title = "${selectedObjects!!.size} ${getString(R.string.selected)}"
+ if (invertedList.isEmpty()) actionMode?.finish()
true
}
else -> false
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/FormatSelectionBottomSheetDialog.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/FormatSelectionBottomSheetDialog.kt
index 84f14b10..b6c19f64 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/FormatSelectionBottomSheetDialog.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/FormatSelectionBottomSheetDialog.kt
@@ -268,8 +268,20 @@ class FormatSelectionBottomSheetDialog(private val items: List, p
(it as MaterialCardView).isChecked = selectedAudios.map { a -> "${a.format_id}${a.format_note}" }.contains(it.tag)
}
}else{
- //if its a simple audio format selection
- listener.onFormatClick(List(items.size){chosenFormats}, listOf(FormatTuple(format, null)))
+ if (items.size == 1){
+ listener.onFormatClick(List(items.size){chosenFormats}, listOf(FormatTuple(format, null)))
+ }else{
+ val selectedFormats = mutableListOf()
+ formatCollection.forEach {
+ selectedFormats.add(it.first{ f -> f.format_id == format.format_id})
+ }
+ if (selectedFormats.isEmpty()) {
+ items.forEach {
+ selectedFormats.add(format)
+ }
+ }
+ listener.onFormatClick(formatCollection, selectedFormats.map { FormatTuple(it, null) })
+ }
dismiss()
}
}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/CancelledDownloadsFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/CancelledDownloadsFragment.kt
index 03d68442..c13849d5 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/CancelledDownloadsFragment.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/CancelledDownloadsFragment.kt
@@ -299,6 +299,7 @@ class CancelledDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClic
selectedObjects?.clear()
selectedObjects?.addAll(invertedList)
actionMode!!.title = "${selectedObjects!!.size} ${getString(R.string.selected)}"
+ if (invertedList.isEmpty()) actionMode?.finish()
true
}
else -> false
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/ErroredDownloadsFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/ErroredDownloadsFragment.kt
index 3a236a87..51f0b306 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/ErroredDownloadsFragment.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/ErroredDownloadsFragment.kt
@@ -306,6 +306,7 @@ class ErroredDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClickL
selectedObjects?.clear()
selectedObjects?.addAll(invertedList)
actionMode!!.title = "${selectedObjects!!.size} ${getString(R.string.selected)}"
+ if (invertedList.isEmpty()) actionMode?.finish()
true
}
else -> false
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/HistoryFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/HistoryFragment.kt
index 73cb11a9..f9116b62 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/HistoryFragment.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/HistoryFragment.kt
@@ -606,6 +606,7 @@ class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener{
selectedObjects?.clear()
selectedObjects?.addAll(invertedList)
actionMode!!.title = "${selectedObjects!!.size} ${getString(R.string.selected)}"
+ if (invertedList.isEmpty()) actionMode?.finish()
true
}
else -> false
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/QueuedDownloadsFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/QueuedDownloadsFragment.kt
index 5358d280..e766e095 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/QueuedDownloadsFragment.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/QueuedDownloadsFragment.kt
@@ -329,6 +329,7 @@ class QueuedDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClickLi
selectedObjects?.clear()
selectedObjects?.addAll(invertedList)
actionMode!!.title = "${selectedObjects!!.size} ${getString(R.string.selected)}"
+ if (invertedList.isEmpty()) actionMode?.finish()
true
}
else -> false
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/more/downloadLogs/DownloadLogFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/more/downloadLogs/DownloadLogFragment.kt
index 6eae2635..33167ace 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/more/downloadLogs/DownloadLogFragment.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/more/downloadLogs/DownloadLogFragment.kt
@@ -2,6 +2,7 @@ package com.deniscerri.ytdlnis.ui.more.downloadLogs
import android.content.ClipboardManager
import android.content.Context.CLIPBOARD_SERVICE
+import android.graphics.Color
import android.os.Build
import android.os.Bundle
import android.os.FileObserver
@@ -15,7 +16,11 @@ import com.deniscerri.ytdlnis.MainActivity
import com.deniscerri.ytdlnis.R
import com.google.android.material.appbar.MaterialToolbar
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
+import com.neo.highlight.core.Highlight
+import com.neo.highlight.util.listener.HighlightTextWatcher
+import com.neo.highlight.util.scheme.ColorScheme
import java.io.File
+import java.util.regex.Pattern
class DownloadLogFragment : Fragment() {
@@ -92,6 +97,26 @@ class DownloadLogFragment : Fragment() {
}
observer.startWatching();
}
+
+ //init syntax highlighter
+ val highlight = Highlight()
+ val highlightWatcher = HighlightTextWatcher()
+
+ val schemes = listOf(
+ ColorScheme(Pattern.compile("([\"'])(?:\\\\1|.)*?\\1"), Color.parseColor("#FC8500")),
+ ColorScheme(Pattern.compile("yt-dlp"), Color.parseColor("#00FF00")),
+ ColorScheme(Pattern.compile("(https?://(?:www\\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\\.[^\\s]{2,}|www\\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\\.[^\\s]{2,}|https?://(?:www\\.|(?!www))[a-zA-Z0-9]+\\.[^\\s]{2,}|www\\.[a-zA-Z0-9]+\\.[^\\s]{2,})"), Color.parseColor("#b5942f")),
+ ColorScheme(Pattern.compile("\\d+(\\.\\d)?%"), Color.parseColor("#43a564"))
+ )
+
+ highlight.addScheme(
+ *schemes.map { it }.toTypedArray()
+ )
+ highlightWatcher.addScheme(
+ *schemes.map { it }.toTypedArray()
+ )
+ highlight.setSpan(content)
+ content.addTextChangedListener(highlightWatcher)
}
override fun onDestroy() {
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 dbebf68e..2e9f5fcb 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/util/InfoUtil.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/util/InfoUtil.kt
@@ -822,6 +822,9 @@ class InfoUtil(private val context: Context) {
chapters = Gson().fromJson(chaptersInJSON.toString(), listType)
}
+ var urls = "";
+ if(jsonObject.has("urls")) urls = jsonObject.getString("urls");
+
Log.e("aa", formats.toString())
items.add(ResultItem(0,
url,
@@ -832,7 +835,7 @@ class InfoUtil(private val context: Context) {
website,
playlistTitle!!,
formats,
- jsonObject.getString("urls") ?: "",
+ urls,
chapters
)
)
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/util/NotificationUtil.kt b/app/src/main/java/com/deniscerri/ytdlnis/util/NotificationUtil.kt
index 6ce8ce97..030ef3c7 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/util/NotificationUtil.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/util/NotificationUtil.kt
@@ -13,12 +13,11 @@ import android.os.Bundle
import androidx.core.app.NotificationCompat
import androidx.core.content.FileProvider
import androidx.navigation.NavDeepLinkBuilder
-import com.deniscerri.ytdlnis.MainActivity
import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.receiver.CancelDownloadNotificationReceiver
import com.deniscerri.ytdlnis.receiver.PauseDownloadNotificationReceiver
import com.deniscerri.ytdlnis.receiver.ResumeActivity
-import com.deniscerri.ytdlnis.receiver.ShareFileService
+import com.deniscerri.ytdlnis.receiver.ShareFileActivity
import java.io.File
@@ -213,10 +212,10 @@ class NotificationUtil(var context: Context) {
}
//share intent
- val shareIntent = Intent(context, ShareFileService::class.java)
+ val shareIntent = Intent(context, ShareFileActivity::class.java)
shareIntent.putExtra("path", filepath.toTypedArray())
shareIntent.putExtra("notificationID", DOWNLOAD_FINISHED_NOTIFICATION_ID)
- val shareNotificationPendingIntent: PendingIntent = PendingIntent.getService(
+ val shareNotificationPendingIntent: PendingIntent = PendingIntent.getActivity(
context,
0,
shareIntent,
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt b/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt
index 4be7c929..1bd303a9 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt
@@ -132,7 +132,7 @@ class DownloadWorker(
if (downloadItem.author.isNotBlank()){
request.addCommands(listOf("--replace-in-metadata","uploader",".*.",downloadItem.author.take(25)))
}
- request.addCommands(listOf("--replace-in-metadata","uploader"," - Topic",""))
+ request.addCommands(listOf("--replace-in-metadata","uploader"," - Topic$",""))
if (downloadItem.customFileNameTemplate.isBlank()) downloadItem.customFileNameTemplate = "%(uploader)s - %(title)s"
if (downloadItem.downloadSections.isNotBlank()){
diff --git a/app/src/main/res/layout/fragment_download_audio.xml b/app/src/main/res/layout/fragment_download_audio.xml
index 7401324f..35a1fee4 100644
--- a/app/src/main/res/layout/fragment_download_audio.xml
+++ b/app/src/main/res/layout/fragment_download_audio.xml
@@ -4,8 +4,7 @@
android:scrollbars="none"
xmlns:android="http://schemas.android.com/apk/res/android">
-