Browse Source

Allow deleting files in TV

Fixes #2398
merge-requests/2174/head
Nicolas Pomepuy 1 year ago
parent
commit
7cf3cec3dc
  1. 23
      application/television/src/main/java/org/videolan/television/ui/MediaItemDetailsFragment.kt

23
application/television/src/main/java/org/videolan/television/ui/MediaItemDetailsFragment.kt

@ -41,6 +41,7 @@ import kotlinx.coroutines.channels.actor
import org.videolan.libvlc.util.AndroidUtil
import org.videolan.medialibrary.MLServiceLocator
import org.videolan.medialibrary.interfaces.media.MediaWrapper
import org.videolan.medialibrary.media.MediaLibraryItem
import org.videolan.moviepedia.database.models.MediaImage
import org.videolan.moviepedia.database.models.MediaImageType
import org.videolan.moviepedia.database.models.MediaMetadata
@ -61,6 +62,7 @@ import org.videolan.vlc.BuildConfig
import org.videolan.vlc.R
import org.videolan.vlc.gui.DialogActivity
import org.videolan.vlc.gui.DialogActivity.Companion.EXTRA_MEDIA
import org.videolan.vlc.gui.dialogs.ConfirmDeleteDialog
import org.videolan.vlc.gui.helpers.AudioUtil
import org.videolan.vlc.gui.helpers.UiTools
import org.videolan.vlc.gui.helpers.UiTools.addToPlaylist
@ -70,6 +72,7 @@ import org.videolan.vlc.repository.BrowserFavRepository
import org.videolan.vlc.util.FileUtils
import org.videolan.vlc.util.convertFavorites
import org.videolan.vlc.util.getScreenWidth
import org.videolan.vlc.util.isSchemeFile
import org.videolan.vlc.util.isSchemeNetwork
private const val TAG = "MediaItemDetailsFragment"
@ -87,6 +90,7 @@ private const val ID_FAVORITE = 11
private const val ID_REMOVE_FROM_HISTORY = 12
private const val ID_NAVIGATE_PARENT = 13
private const val ID_FAVORITE_EDIT = 14
private const val ID_DELETE = 15
const val EXTRA_FROM_HISTORY = "from_history"
const val EXTRA_ITEM = "item"
const val EXTRA_MEDIA = "media"
@ -181,6 +185,10 @@ class MediaItemDetailsFragment : DetailsSupportFragment(), CoroutineScope by Mai
}
}
private fun onDeleteFailed(item: MediaLibraryItem) {
if (isAdded) UiTools.snacker(requireActivity(), getString(R.string.msg_delete_failed, item.title))
}
override fun onSaveInstanceState(outState: Bundle) {
outState.putParcelable(EXTRA_ITEM, viewModel.mediaItemDetails)
outState.putParcelable(org.videolan.television.ui.EXTRA_MEDIA, viewModel.media)
@ -342,6 +350,19 @@ class MediaItemDetailsFragment : DetailsSupportFragment(), CoroutineScope by Mai
activity.startActivity(intent)
}
}
ID_DELETE -> {
val dialog = ConfirmDeleteDialog.newInstance(arrayListOf(viewModel.media))
dialog.show(requireActivity().supportFragmentManager, ConfirmDeleteDialog::class.simpleName)
dialog.setListener {
dialog.dismiss()
var preventFinish = false
MediaUtils.deleteItem(requireActivity(), viewModel.media) {
onDeleteFailed(it)
preventFinish = true
}
if (!preventFinish) requireActivity().finish()
}
}
ID_PLAYLIST -> requireActivity().addToPlaylist(arrayListOf(viewModel.media))
ID_FAVORITE_ADD -> {
val uri = viewModel.mediaItemDetails.location!!.toUri()
@ -424,6 +445,7 @@ class MediaItemDetailsFragment : DetailsSupportFragment(), CoroutineScope by Mai
actionsAdapter.set(ID_PLAY, Action(ID_PLAY.toLong(), res.getString(R.string.play)))
actionsAdapter.set(ID_LISTEN, Action(ID_LISTEN.toLong(), res.getString(R.string.listen)))
actionsAdapter.set(ID_PLAYLIST, Action(ID_PLAYLIST.toLong(), res.getString(R.string.add_to_playlist)))
if (viewModel.media.uri.scheme.isSchemeFile()) actionsAdapter.set(ID_DELETE, Action(ID_DELETE.toLong(), res.getString(R.string.delete)))
} else if (viewModel.media.type == MediaWrapper.TYPE_VIDEO) {
// Add images and action buttons to the details view
if (cover == null) {
@ -442,6 +464,7 @@ class MediaItemDetailsFragment : DetailsSupportFragment(), CoroutineScope by Mai
actionsAdapter.set(ID_PLAYLIST, Action(ID_PLAYLIST.toLong(), res.getString(R.string.add_to_playlist)))
//todo reenable entry point when ready
if (BuildConfig.DEBUG) actionsAdapter.set(ID_GET_INFO, Action(ID_GET_INFO.toLong(), res.getString(R.string.find_metadata)))
if (viewModel.media.uri.scheme.isSchemeFile()) actionsAdapter.set(ID_DELETE, Action(ID_DELETE.toLong(), res.getString(R.string.delete)))
} else if (viewModel.media.type == MediaWrapper.TYPE_ALL) {
if (cover == null) {
detailsOverview.imageDrawable = ContextCompat.getDrawable(activity, R.drawable.ic_default_cone)

Loading…
Cancel
Save