diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 63d789e1..ac481139 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -172,14 +172,17 @@ + + - + diff --git a/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.kt b/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.kt index 875ab79d..95465689 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.kt @@ -8,7 +8,6 @@ import android.content.Intent import android.content.SharedPreferences import android.content.pm.PackageManager import android.content.res.Configuration -import android.graphics.Color import android.graphics.drawable.ColorDrawable import android.net.Uri import android.os.Build @@ -17,7 +16,6 @@ import android.provider.Settings import android.util.Log import android.view.View import android.view.WindowInsets -import android.view.WindowManager import android.widget.CheckBox import android.widget.TextView import androidx.core.app.ActivityCompat @@ -37,7 +35,6 @@ import com.deniscerri.ytdlnis.ui.downloads.DownloadQueueActivity import com.deniscerri.ytdlnis.ui.more.settings.SettingsActivity import com.deniscerri.ytdlnis.util.ThemeUtil import com.deniscerri.ytdlnis.util.UpdateUtil -import com.google.android.exoplayer2.offline.Download import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.elevation.SurfaceColors import com.google.android.material.navigation.NavigationBarView diff --git a/app/src/main/java/com/deniscerri/ytdlnis/receiver/BlankActivity.kt b/app/src/main/java/com/deniscerri/ytdlnis/receiver/BlankActivity.kt deleted file mode 100644 index 7235a476..00000000 --- a/app/src/main/java/com/deniscerri/ytdlnis/receiver/BlankActivity.kt +++ /dev/null @@ -1,83 +0,0 @@ -package com.deniscerri.ytdlnis.receiver - -import android.Manifest -import android.app.Activity -import android.content.Context -import android.content.DialogInterface -import android.content.Intent -import android.content.SharedPreferences -import android.content.pm.PackageManager -import android.content.res.Configuration -import android.graphics.drawable.ColorDrawable -import android.net.Uri -import android.os.Build -import android.os.Bundle -import android.provider.Settings -import android.util.Log -import android.view.Window -import android.view.WindowManager -import android.widget.FrameLayout -import android.widget.TextView -import android.widget.Toast -import androidx.appcompat.app.AppCompatActivity -import androidx.core.app.ActivityCompat -import androidx.core.view.ViewCompat -import androidx.core.view.WindowCompat -import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.lifecycleScope -import com.deniscerri.ytdlnis.MainActivity -import com.deniscerri.ytdlnis.R -import com.deniscerri.ytdlnis.database.models.DownloadItem -import com.deniscerri.ytdlnis.database.models.ResultItem -import com.deniscerri.ytdlnis.database.viewmodel.CookieViewModel -import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel -import com.deniscerri.ytdlnis.database.viewmodel.ResultViewModel -import com.deniscerri.ytdlnis.ui.BaseActivity -import com.deniscerri.ytdlnis.ui.downloadcard.DownloadBottomSheetDialog -import com.deniscerri.ytdlnis.ui.downloadcard.SelectPlaylistItemsBottomSheetDialog -import com.deniscerri.ytdlnis.util.FileUtil -import com.deniscerri.ytdlnis.util.NotificationUtil -import com.deniscerri.ytdlnis.util.ThemeUtil -import com.deniscerri.ytdlnis.util.UiUtil -import com.google.android.material.bottomsheet.BottomSheetDialog -import com.google.android.material.dialog.MaterialAlertDialogBuilder -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext -import java.io.File -import kotlin.properties.Delegates -import kotlin.system.exitProcess - -class BlankActivity : BaseActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.blank) - val intent = intent - handleIntents(intent) - } - - override fun onNewIntent(intent: Intent) { - super.onNewIntent(intent) - handleIntents(intent) - } - - private fun handleIntents(intent: Intent) { - val message = intent.getStringExtra("message") - val path = intent.getStringExtra("path") - val notificationId = intent.getIntExtra("notificationID", 0) - if (message != null && path != null) { - if (notificationId != 0) NotificationUtil(this).cancelDownloadNotification(notificationId) - val uiUtil = UiUtil(FileUtil()) - when(message) { - "share" -> { - uiUtil.shareFileIntent(this, listOf(path)) - } - "open" -> { - uiUtil.openFileIntent(this, path) - } - } - - } - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/deniscerri/ytdlnis/receiver/PauseDownloadNotificationReceiver.kt b/app/src/main/java/com/deniscerri/ytdlnis/receiver/PauseDownloadNotificationReceiver.kt new file mode 100644 index 00000000..3074d80c --- /dev/null +++ b/app/src/main/java/com/deniscerri/ytdlnis/receiver/PauseDownloadNotificationReceiver.kt @@ -0,0 +1,22 @@ +package com.deniscerri.ytdlnis.receiver + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import androidx.work.WorkManager +import com.deniscerri.ytdlnis.util.NotificationUtil +import com.yausername.youtubedl_android.YoutubeDL + +class PauseDownloadNotificationReceiver : BroadcastReceiver() { + override fun onReceive(c: Context, intent: Intent) { + val id = intent.getIntExtra("workID", 0) + if (id != 0) { + val title = intent.getStringExtra("title") + val notificationUtil = NotificationUtil(c) + YoutubeDL.getInstance().destroyProcessById(id.toString()) + + notificationUtil.cancelDownloadNotification(id) + notificationUtil.createResumeDownload(id, title, NotificationUtil.DOWNLOAD_SERVICE_CHANNEL_ID) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/deniscerri/ytdlnis/receiver/ResumeActivity.kt b/app/src/main/java/com/deniscerri/ytdlnis/receiver/ResumeActivity.kt new file mode 100644 index 00000000..7b127149 --- /dev/null +++ b/app/src/main/java/com/deniscerri/ytdlnis/receiver/ResumeActivity.kt @@ -0,0 +1,94 @@ +package com.deniscerri.ytdlnis.receiver + +import android.content.Context +import android.content.Intent +import android.graphics.drawable.ColorDrawable +import android.os.Build +import android.os.Bundle +import android.view.Window +import android.view.WindowManager +import android.widget.TextView +import android.widget.Toast +import androidx.core.view.ViewCompat +import androidx.core.view.WindowCompat +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.lifecycleScope +import com.deniscerri.ytdlnis.R +import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel +import com.deniscerri.ytdlnis.ui.BaseActivity +import com.deniscerri.ytdlnis.util.NotificationUtil +import com.deniscerri.ytdlnis.util.ThemeUtil +import com.google.android.material.bottomsheet.BottomSheetDialog +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import kotlin.system.exitProcess + +class ResumeActivity : BaseActivity() { + + lateinit var context: Context + private lateinit var downloadViewModel: DownloadViewModel + + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + ThemeUtil.updateTheme(this) + WindowCompat.setDecorFitsSystemWindows(window, false) + ViewCompat.setOnApplyWindowInsetsListener(window.decorView) { v, insets -> + 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) + } + } + + setContentView(R.layout.activity_share) + this.setFinishOnTouchOutside(false) + context = baseContext + downloadViewModel = ViewModelProvider(this)[DownloadViewModel::class.java] + val intent = intent + handleIntents(intent) + } + + override fun onNewIntent(intent: Intent) { + super.onNewIntent(intent) + handleIntents(intent) + } + + private fun handleIntents(intent: Intent) { + val id = intent.getIntExtra("workID", 0) + if (id != 0) { + try { + val loadingBottomSheet = BottomSheetDialog(this) + loadingBottomSheet.requestWindowFeature(Window.FEATURE_NO_TITLE) + loadingBottomSheet.setContentView(R.layout.please_wait_bottom_sheet) + + loadingBottomSheet.setOnShowListener { + NotificationUtil(this).cancelDownloadNotification(NotificationUtil.DOWNLOAD_RESUME_NOTIFICATION_ID) + lifecycleScope.launch { + val downloadViewModel = ViewModelProvider(this@ResumeActivity)[DownloadViewModel::class.java] + withContext(Dispatchers.IO){ + val downloadItem = downloadViewModel.getItemByID(id.toLong()) + downloadViewModel.queueDownloads(listOf(downloadItem)) + finishAffinity() + } + } + + } + loadingBottomSheet.show() + }catch (e: Exception){ + Toast.makeText(this, getString(R.string.error_restarting_download), Toast.LENGTH_SHORT).show() + } + finishAffinity() + } + } +} \ 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 e5b82be5..4c9eb5f8 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt @@ -48,6 +48,7 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton import com.google.android.material.search.SearchBar import com.google.android.material.search.SearchView +import com.google.android.material.search.SearchView.TransitionState import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -206,6 +207,7 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi inputQueries = null } } + } override fun onResume() { @@ -656,7 +658,6 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi } selectedObjects?.clear() } - override fun onStop() { actionMode?.finish() super.onStop() diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadAudioFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadAudioFragment.kt index a6d34823..dda86aff 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadAudioFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadAudioFragment.kt @@ -242,35 +242,40 @@ class DownloadAudioFragment(private var resultItem: ResultItem, private var curr } val cut = view.findViewById(R.id.cut) - if (downloadItem.downloadSections.isNotBlank()) cut.text = downloadItem.downloadSections - val cutVideoListener = object : VideoCutListener { - override fun onChangeCut(list: List) { - if (list.isEmpty()){ - downloadItem.downloadSections = "" - cut.text = getString(R.string.cut) - - splitByChapters.isEnabled = true - splitByChapters.isChecked = downloadItem.audioPreferences.splitByChapters - }else{ - var value = "" - list.forEach { - value += "$it;" + if (downloadItem.duration.isNotEmpty()){ + cut.isEnabled = true + if (downloadItem.downloadSections.isNotBlank()) cut.text = downloadItem.downloadSections + val cutVideoListener = object : VideoCutListener { + override fun onChangeCut(list: List) { + if (list.isEmpty()){ + downloadItem.downloadSections = "" + cut.text = getString(R.string.cut) + + splitByChapters.isEnabled = true + splitByChapters.isChecked = downloadItem.audioPreferences.splitByChapters + }else{ + var value = "" + list.forEach { + value += "$it;" + } + downloadItem.downloadSections = value + cut.text = value.dropLast(1) + + splitByChapters.isEnabled = false + splitByChapters.isChecked = false } - downloadItem.downloadSections = value - cut.text = value.dropLast(1) - - splitByChapters.isEnabled = false - splitByChapters.isChecked = false } } - } - cut.setOnClickListener { - if (parentFragmentManager.findFragmentByTag("cutVideoSheet") == null){ - val bottomSheet = CutVideoBottomSheetDialog(downloadItem, cutVideoListener) - bottomSheet.show(parentFragmentManager, "cutVideoSheet") + cut.setOnClickListener { + if (parentFragmentManager.findFragmentByTag("cutVideoSheet") == null){ + val bottomSheet = CutVideoBottomSheetDialog(downloadItem, cutVideoListener) + bottomSheet.show(parentFragmentManager, "cutVideoSheet") + } } - } + }else{ + cut.isEnabled = false + } }catch (e : Exception){ e.printStackTrace() } diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadVideoFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadVideoFragment.kt index 7f244cf3..3a59b503 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadVideoFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadVideoFragment.kt @@ -264,48 +264,52 @@ class DownloadVideoFragment(private val resultItem: ResultItem, private var curr getString(R.string.cancel) ) { _: DialogInterface?, _: Int -> } - val dialog = builder.create() dialog.show() } val cut = view.findViewById(R.id.cut) - if (downloadItem.downloadSections.isNotBlank()) cut.text = downloadItem.downloadSections - val cutVideoListener = object : VideoCutListener { - - override fun onChangeCut(list: List) { - if (list.isEmpty()){ - downloadItem.downloadSections = "" - cut.text = getString(R.string.cut) - - splitByChapters.isEnabled = true - splitByChapters.isChecked = downloadItem.videoPreferences.splitByChapters - if (splitByChapters.isChecked){ - addChapters.isEnabled = false - addChapters.isChecked = false + if(downloadItem.duration.isNotEmpty()){ + cut.isEnabled = true + if (downloadItem.downloadSections.isNotBlank()) cut.text = downloadItem.downloadSections + val cutVideoListener = object : VideoCutListener { + + override fun onChangeCut(list: List) { + if (list.isEmpty()){ + downloadItem.downloadSections = "" + cut.text = getString(R.string.cut) + + splitByChapters.isEnabled = true + splitByChapters.isChecked = downloadItem.videoPreferences.splitByChapters + if (splitByChapters.isChecked){ + addChapters.isEnabled = false + addChapters.isChecked = false + }else{ + addChapters.isEnabled = true + } }else{ + var value = "" + list.forEach { + value += "$it;" + } + downloadItem.downloadSections = value + cut.text = value.dropLast(1) + + splitByChapters.isEnabled = false + splitByChapters.isChecked = false addChapters.isEnabled = true } - }else{ - var value = "" - list.forEach { - value += "$it;" - } - downloadItem.downloadSections = value - cut.text = value.dropLast(1) - splitByChapters.isEnabled = false - splitByChapters.isChecked = false - addChapters.isEnabled = true } - } - } - cut.setOnClickListener { - if (parentFragmentManager.findFragmentByTag("cutVideoSheet") == null){ - val bottomSheet = CutVideoBottomSheetDialog(downloadItem, cutVideoListener) - bottomSheet.show(parentFragmentManager, "cutVideoSheet") + cut.setOnClickListener { + if (parentFragmentManager.findFragmentByTag("cutVideoSheet") == null){ + val bottomSheet = CutVideoBottomSheetDialog(downloadItem, cutVideoListener) + bottomSheet.show(parentFragmentManager, "cutVideoSheet") + } } + }else{ + cut.isEnabled = false } val saveSubtitles = view.findViewById(R.id.save_subtitles) 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 a55de492..1df92f41 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 @@ -108,11 +108,6 @@ class QueuedDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClickLi } override fun onActionButtonClick(itemID: Long) { - lifecycleScope.launch{ - withContext(Dispatchers.IO){ - downloadViewModel.deleteDownload(downloadViewModel.getItemByID(itemID)) - } - } removeItem(itemID) } 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 85ffcac7..5ba4c409 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/util/NotificationUtil.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/util/NotificationUtil.kt @@ -3,16 +3,14 @@ package com.deniscerri.ytdlnis.util import android.app.* import android.content.Context import android.content.Intent -import android.content.pm.PackageManager -import android.content.pm.ResolveInfo import android.graphics.BitmapFactory -import android.net.Uri import android.os.Build import androidx.core.app.NotificationCompat -import androidx.core.content.ContextCompat.startActivity import androidx.core.content.FileProvider 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.SharedDownloadNotificationReceiver import com.deniscerri.ytdlnis.ui.more.downloadLogs.DownloadLogActivity import java.io.File @@ -74,13 +72,23 @@ class NotificationUtil(var context: Context) { ): Notification { val notificationBuilder = getBuilder(channel) - val intent = Intent(context, CancelDownloadNotificationReceiver::class.java) - intent.putExtra("cancel", "") - intent.putExtra("workID", workID) + val pauseIntent = Intent(context, PauseDownloadNotificationReceiver::class.java) + pauseIntent.putExtra("workID", workID) + pauseIntent.putExtra("title", title) + val pauseNotificationPendingIntent = PendingIntent.getBroadcast( + context, + workID, + pauseIntent, + PendingIntent.FLAG_IMMUTABLE + ) + + val cancelIntent = Intent(context, CancelDownloadNotificationReceiver::class.java) + cancelIntent.putExtra("cancel", "") + cancelIntent.putExtra("workID", workID) val cancelNotificationPendingIntent = PendingIntent.getBroadcast( context, workID, - intent, + cancelIntent, PendingIntent.FLAG_IMMUTABLE ) return notificationBuilder @@ -101,10 +109,58 @@ class NotificationUtil(var context: Context) { .setContentIntent(pendingIntent) .setForegroundServiceBehavior(NotificationCompat.FOREGROUND_SERVICE_IMMEDIATE) .clearActions() + .addAction(0, context.getString(R.string.pause), pauseNotificationPendingIntent) .addAction(0, context.getString(R.string.cancel), cancelNotificationPendingIntent) .build() } + fun createResumeDownload(workID: Int, title: String?, channel: String){ + val notificationBuilder = getBuilder(channel) + + notificationBuilder + .setContentTitle(title) + .setSmallIcon(R.drawable.ic_launcher_foreground_large) + .setLargeIcon( + BitmapFactory.decodeResource( + context.resources, + R.drawable.ic_launcher_foreground_large + ) + ) + .setPriority(NotificationCompat.PRIORITY_DEFAULT) + .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) + .clearActions() + + val intent = Intent(context, ResumeActivity::class.java) + intent.putExtra("workID", workID) + val resumeNotificationPendingIntent = PendingIntent.getActivity( + context, + workID, + intent, + PendingIntent.FLAG_IMMUTABLE + ) + + notificationBuilder.addAction(0, context.getString(R.string.resume), resumeNotificationPendingIntent) + notificationManager.notify(DOWNLOAD_RESUME_NOTIFICATION_ID, notificationBuilder.build()) + } + + fun createUpdatingItemNotification(channel: String){ + val notificationBuilder = getBuilder(channel) + + notificationBuilder + .setContentTitle(context.getString(R.string.updating_download_data)) + .setSmallIcon(R.drawable.ic_launcher_foreground_large) + .setLargeIcon( + BitmapFactory.decodeResource( + context.resources, + R.drawable.ic_launcher_foreground_large + ) + ) + .setPriority(NotificationCompat.PRIORITY_DEFAULT) + .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) + .clearActions() + notificationManager.notify(DOWNLOAD_UPDATING_NOTIFICATION_ID, notificationBuilder.build()) + } + fun createDownloadFinished(title: String?, filepath: String?, channel: String @@ -228,7 +284,8 @@ class NotificationUtil(var context: Context) { const val COMMAND_DOWNLOAD_SERVICE_CHANNEL_ID = "2" const val DOWNLOAD_FINISHED_CHANNEL_ID = "3" const val DOWNLOAD_FINISHED_NOTIFICATION_ID = 3 - const val FILE_TRANSFER_CHANNEL_ID = "3" + const val DOWNLOAD_RESUME_NOTIFICATION_ID = 4 + const val DOWNLOAD_UPDATING_NOTIFICATION_ID = 5 private const val PROGRESS_MAX = 100 private const val PROGRESS_CURR = 0 } 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 2d13d9b2..855a4a6f 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt @@ -65,6 +65,28 @@ class DownloadWorker( runBlocking{ repository.setDownloadStatus(downloadItem, DownloadRepository.Status.Active) } + + var wasQuickDownloaded = false + //update item if its incomplete + if (downloadItem.title.isEmpty() || downloadItem.author.isEmpty() || downloadItem.thumb.isEmpty()){ + notificationUtil.createUpdatingItemNotification(NotificationUtil.DOWNLOAD_SERVICE_CHANNEL_ID); + + runCatching { + setProgressAsync(workDataOf("progress" to 0, "output" to context.getString(R.string.updating_download_data), "id" to downloadItem.id, "log" to false)) + val info = infoUtil.getMissingInfo(downloadItem.url) + if (downloadItem.title.isEmpty()) downloadItem.title = info?.title.toString() + if (downloadItem.author.isEmpty()) downloadItem.author = info?.author.toString() + downloadItem.duration = info?.duration.toString() + downloadItem.website = info?.website.toString() + if (downloadItem.thumb.isEmpty()) downloadItem.thumb = info?.thumb.toString() + runBlocking { + wasQuickDownloaded = resultDao.getCountInt() == 0 + dao.update(downloadItem) + } + } + notificationUtil.cancelDownloadNotification(NotificationUtil.DOWNLOAD_UPDATING_NOTIFICATION_ID) + } + val intent = Intent(context, MainActivity::class.java) val pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE) val notification = notificationUtil.createDownloadServiceNotification(pendingIntent, downloadItem.title, downloadItem.id.toInt(), NotificationUtil.DOWNLOAD_SERVICE_CHANNEL_ID) @@ -270,23 +292,6 @@ class DownloadWorker( } } - var wasQuickDownloaded = false - //update item if its incomplete - if (downloadItem.title.isEmpty() || downloadItem.author.isEmpty() || downloadItem.thumb.isEmpty()){ - runCatching { - setProgressAsync(workDataOf("progress" to 0, "output" to "Updating Download Item Data", "id" to downloadItem.id, "log" to false)) - val info = infoUtil.getMissingInfo(downloadItem.url) - if (downloadItem.title.isEmpty()) downloadItem.title = info?.title.toString() - if (downloadItem.author.isEmpty()) downloadItem.author = info?.author.toString() - downloadItem.duration = info?.duration.toString() - downloadItem.website = info?.website.toString() - if (downloadItem.thumb.isEmpty()) downloadItem.thumb = info?.thumb.toString() - runBlocking { - wasQuickDownloaded = resultDao.getCountInt() == 0 - dao.update(downloadItem) - } - } - } val logDownloads = sharedPreferences.getBoolean("log_downloads", false) && !sharedPreferences.getBoolean("incognito", false) val logFolder = File(context.filesDir.absolutePath + "/logs") @@ -299,7 +304,8 @@ class DownloadWorker( "Title: ${downloadItem.title}\n" + "URL: ${downloadItem.url}\n" + "Type: ${downloadItem.type}\n" + - "Format: ${downloadItem.format}\n\n") + "Format: ${downloadItem.format}\n\n" + + "Command: ${java.lang.String.join(" ", request.buildCommand())}\n\n") } runCatching { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cf8baed1..0c7d3653 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -248,4 +248,7 @@ Download Now Download already exists Preferred Locale + Pause\n + Resume + Updating Download Item Data \ No newline at end of file