Add save playlist 💾
This commit is contained in:
parent
41e8aa8a03
commit
6e8ff6ab71
7 changed files with 105 additions and 60 deletions
|
@ -3,29 +3,30 @@ package code.name.monkey.retromusic.dialogs
|
|||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import code.name.monkey.retromusic.EXTRA_PLAYLISTS
|
||||
import code.name.monkey.retromusic.EXTRA_SONG
|
||||
import code.name.monkey.retromusic.R
|
||||
import code.name.monkey.retromusic.db.PlaylistEntity
|
||||
import code.name.monkey.retromusic.db.SongEntity
|
||||
import code.name.monkey.retromusic.db.toSongsEntity
|
||||
import code.name.monkey.retromusic.extensions.colorButtons
|
||||
import code.name.monkey.retromusic.extensions.extraNotNull
|
||||
import code.name.monkey.retromusic.extensions.materialDialog
|
||||
import code.name.monkey.retromusic.fragments.LibraryViewModel
|
||||
import code.name.monkey.retromusic.fragments.ReloadType.Playlists
|
||||
import code.name.monkey.retromusic.model.Song
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import org.koin.androidx.viewmodel.ext.android.sharedViewModel
|
||||
|
||||
class AddToPlaylistDialog : BottomSheetDialogFragment() {
|
||||
class AddToPlaylistDialog : DialogFragment() {
|
||||
private val libraryViewModel by sharedViewModel<LibraryViewModel>()
|
||||
|
||||
companion object {
|
||||
fun create(playlistEntities: List<PlaylistEntity>, song: Song): AddToPlaylistDialog {
|
||||
val list = mutableListOf<Song>()
|
||||
val list: MutableList<Song> = mutableListOf()
|
||||
list.add(song)
|
||||
return create(playlistEntities, list)
|
||||
}
|
||||
|
@ -41,12 +42,13 @@ class AddToPlaylistDialog : BottomSheetDialogFragment() {
|
|||
}
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
val playlistEntities = extraNotNull<List<PlaylistEntity>>(EXTRA_PLAYLISTS).value
|
||||
val songs = extraNotNull<List<Song>>(EXTRA_SONG).value
|
||||
val playlistNames = mutableListOf<String>()
|
||||
val playlistEntities: List<PlaylistEntity> =
|
||||
extraNotNull<List<PlaylistEntity>>(EXTRA_PLAYLISTS).value
|
||||
val songs: List<Song> = extraNotNull<List<Song>>(EXTRA_SONG).value
|
||||
val playlistNames: MutableList<String> = mutableListOf()
|
||||
playlistNames.add(requireContext().resources.getString(R.string.action_new_playlist))
|
||||
for (p in playlistEntities) {
|
||||
playlistNames.add(p.playlistName)
|
||||
for (entity: PlaylistEntity in playlistEntities) {
|
||||
playlistNames.add(entity.playlistName)
|
||||
}
|
||||
return materialDialog(R.string.add_playlist_title)
|
||||
.setItems(playlistNames.toTypedArray()) { _, which ->
|
||||
|
@ -55,7 +57,8 @@ class AddToPlaylistDialog : BottomSheetDialogFragment() {
|
|||
.show(requireActivity().supportFragmentManager, "Dialog")
|
||||
} else {
|
||||
lifecycleScope.launch(Dispatchers.IO) {
|
||||
val songEntities = songs.toSongEntity(playlistEntities[which - 1])
|
||||
val songEntities: List<SongEntity> =
|
||||
songs.toSongsEntity(playlistEntities[which - 1])
|
||||
libraryViewModel.insertSongs(songEntities)
|
||||
libraryViewModel.forceReload(Playlists)
|
||||
}
|
||||
|
@ -64,10 +67,4 @@ class AddToPlaylistDialog : BottomSheetDialogFragment() {
|
|||
}
|
||||
.create().colorButtons()
|
||||
}
|
||||
}
|
||||
|
||||
private fun List<Song>.toSongEntity(playlistEntity: PlaylistEntity): List<SongEntity> {
|
||||
return map {
|
||||
it.toSongEntity(playlistEntity.playListId)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,4 +1,55 @@
|
|||
package code.name.monkey.retromusic.dialogs
|
||||
|
||||
class SavePlaylistDialog {
|
||||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import android.widget.Toast
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import code.name.monkey.retromusic.App
|
||||
import code.name.monkey.retromusic.EXTRA_PLAYLIST
|
||||
import code.name.monkey.retromusic.R
|
||||
import code.name.monkey.retromusic.db.PlaylistWithSongs
|
||||
import code.name.monkey.retromusic.extensions.colorButtons
|
||||
import code.name.monkey.retromusic.extensions.extraNotNull
|
||||
import code.name.monkey.retromusic.extensions.materialDialog
|
||||
import code.name.monkey.retromusic.util.PlaylistsUtil
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
|
||||
class SavePlaylistDialog : DialogFragment() {
|
||||
companion object {
|
||||
fun create(playlistWithSongs: PlaylistWithSongs): SavePlaylistDialog {
|
||||
return SavePlaylistDialog().apply {
|
||||
arguments = bundleOf(
|
||||
EXTRA_PLAYLIST to playlistWithSongs
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
lifecycleScope.launch(Dispatchers.IO) {
|
||||
val playlistWithSongs: PlaylistWithSongs =
|
||||
extraNotNull<PlaylistWithSongs>(EXTRA_PLAYLIST).value
|
||||
val file = PlaylistsUtil.savePlaylistWithSongs(requireContext(), playlistWithSongs)
|
||||
withContext(Dispatchers.Main) {
|
||||
Toast.makeText(
|
||||
requireContext(),
|
||||
String.format(App.getContext().getString(R.string.saved_playlist_to), file),
|
||||
Toast.LENGTH_LONG
|
||||
).show()
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
return materialDialog(R.string.save_playlist_title)
|
||||
.setView(R.layout.loading)
|
||||
.create().colorButtons()
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue