Skip to content
Snippets Groups Projects
Commit 981f3230 authored by Nicolas Pomepuy's avatar Nicolas Pomepuy
Browse files

Allow deleting an album

parent 9a01aa28
No related branches found
No related tags found
1 merge request!572Allow deleting an album
Pipeline #16515 passed with stage
in 5 minutes and 14 seconds
......@@ -190,7 +190,7 @@ const val CTX_GROUP_SIMILAR = 1L shl 35
const val CTX_VIDEO_FLAGS = CTX_APPEND or CTX_PLAY_NEXT or CTX_DELETE or CTX_DOWNLOAD_SUBTITLES or CTX_INFORMATION or CTX_PLAY_ALL or CTX_PLAY_AS_AUDIO or CTX_ADD_TO_PLAYLIST or CTX_SHARE
const val CTX_TRACK_FLAGS = CTX_APPEND or CTX_PLAY_NEXT or CTX_DELETE or CTX_INFORMATION or CTX_PLAY_ALL or CTX_ADD_TO_PLAYLIST or CTX_SET_RINGTONE or CTX_SHARE
const val CTX_AUDIO_FLAGS = CTX_PLAY or CTX_APPEND or CTX_PLAY_NEXT or CTX_ADD_TO_PLAYLIST or CTX_INFORMATION
const val CTX_PLAYLIST_FLAGS = CTX_AUDIO_FLAGS or CTX_DELETE
const val CTX_PLAYLIST_ALBUM_FLAGS = CTX_AUDIO_FLAGS or CTX_DELETE
const val CTX_PLAYLIST_ITEM_FLAGS = CTX_APPEND or CTX_PLAY_NEXT or CTX_ADD_TO_PLAYLIST or CTX_INFORMATION or CTX_DELETE or CTX_SET_RINGTONE or CTX_SHARE
const val CTX_VIDEO_GROUP_FLAGS = CTX_APPEND or CTX_PLAY_GROUP
const val CTX_FOLDER_FLAGS = CTX_PLAY or CTX_APPEND or CTX_ADD_TO_PLAYLIST
......
......@@ -55,6 +55,7 @@
<string name="set_song_question">Set \'%1$s\' as ringtone?</string>
<string name="info">Information</string>
<string name="confirm_delete">Delete the file \'%1$s\'?</string>
<string name="confirm_delete_album">Delete the album \'%1$s\'?</string>
<string name="confirm_delete_several_media">Delete these %1$d media?</string>
<string name="confirm_delete_folder">Delete the folder \'%1$s\' and all its contents?</string>
<string name="confirm_delete_playlist">Delete playlist \'%1$s\'?</string>
......
......@@ -320,7 +320,7 @@ abstract class BaseAudioBrowser<T : MedialibraryViewModel> : MediaBrowserFragmen
override fun onCtxClick(v: View, position: Int, item: MediaLibraryItem) {
val flags: Long = when (item.itemType) {
MediaLibraryItem.TYPE_MEDIA -> CTX_TRACK_FLAGS
MediaLibraryItem.TYPE_PLAYLIST -> CTX_PLAYLIST_FLAGS
MediaLibraryItem.TYPE_PLAYLIST, MediaLibraryItem.TYPE_ALBUM -> CTX_PLAYLIST_ALBUM_FLAGS
else -> CTX_AUDIO_FLAGS
}
if (actionMode == null) showContext(requireActivity(), this, position, item.title, flags)
......
......@@ -36,6 +36,7 @@ import androidx.transition.ChangeBounds
import androidx.transition.TransitionManager
import kotlinx.coroutines.*
import org.videolan.medialibrary.interfaces.Medialibrary
import org.videolan.medialibrary.interfaces.media.Album
import org.videolan.medialibrary.interfaces.media.MediaWrapper
import org.videolan.medialibrary.interfaces.media.Playlist
import org.videolan.medialibrary.media.MediaLibraryItem
......@@ -137,7 +138,7 @@ abstract class MediaBrowserFragment<T : SortableModel> : BaseFragment(), Filtera
val view = view ?: return false
when (item) {
is Playlist -> lifecycleScope.snackerConfirm(view, getString(R.string.confirm_delete_playlist, item.title)) { MediaUtils.deletePlaylist(item) }
is MediaWrapper -> {
is MediaWrapper-> {
val deleteAction = Runnable {
if (isStarted()) lifecycleScope.launch {
if (!MediaUtils.deleteMedia(item, null)) onDeleteFailed(item)
......@@ -146,6 +147,15 @@ abstract class MediaBrowserFragment<T : SortableModel> : BaseFragment(), Filtera
val resid = if (item.type == MediaWrapper.TYPE_DIR) R.string.confirm_delete_folder else R.string.confirm_delete
lifecycleScope.snackerConfirm(view, getString(resid, item.getTitle())) { if (Permissions.checkWritePermission(requireActivity(), item, deleteAction)) deleteAction.run() }
}
is Album -> {
val deleteAction = Runnable {
if (isStarted()) lifecycleScope.launch {
if (!MediaUtils.deleteMedia(item, null)) onDeleteFailed(item)
}
}
val resid = R.string.confirm_delete_album
lifecycleScope.snackerConfirm(view, getString(resid, item.getTitle())) { if (item.tracks.any { Permissions.checkWritePermission(requireActivity(), it, deleteAction) }) deleteAction.run() }
}
else -> return false
}
return true
......
......@@ -35,13 +35,13 @@ import org.videolan.tools.safeOffer
import org.videolan.vlc.PlaybackService
import org.videolan.vlc.R
import org.videolan.vlc.gui.DialogActivity
import org.videolan.vlc.gui.InfoActivity
import org.videolan.vlc.gui.dialogs.SubtitleDownloaderDialogFragment
import org.videolan.vlc.providers.medialibrary.FoldersProvider
import org.videolan.vlc.providers.medialibrary.MedialibraryProvider
import org.videolan.vlc.providers.medialibrary.VideoGroupsProvider
import org.videolan.vlc.util.FileUtils
import org.videolan.vlc.util.Permissions
import java.io.File
import java.util.*
import kotlin.collections.ArrayList
import kotlin.math.min
......@@ -89,6 +89,13 @@ object MediaUtils {
}
val mediaLibrary = Medialibrary.getInstance()
for (folder in foldersToReload) mediaLibrary.reload(folder)
if (mw is Album) {
foldersToReload.forEach {
if (File(it).list().isNullOrEmpty()) {
FileUtils.deleteFile(it)
}
}
}
if (mediaPaths.isEmpty()) {
failCB?.run()
false
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment