|
|
|
@ -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) |
|
|
|
|