package code.name.monkey.retromusic.dialogs import android.app.Dialog import android.os.Bundle import android.text.TextUtils import android.view.LayoutInflater import android.widget.Toast import androidx.core.os.bundleOf import androidx.fragment.app.DialogFragment import androidx.lifecycle.lifecycleScope 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.toSongEntity import code.name.monkey.retromusic.extensions.colorButtons import code.name.monkey.retromusic.extensions.extra 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.textfield.TextInputEditText import com.google.android.material.textfield.TextInputLayout import kotlinx.android.synthetic.main.dialog_playlist.view.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import org.koin.androidx.viewmodel.ext.android.sharedViewModel class CreatePlaylistDialog : DialogFragment() { private val libraryViewModel by sharedViewModel() companion object { fun create(song: Song): CreatePlaylistDialog { val list = mutableListOf() list.add(song) return create(list) } fun create(songs: List): CreatePlaylistDialog { return CreatePlaylistDialog().apply { arguments = bundleOf(EXTRA_SONG to songs) } } } override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val view = LayoutInflater.from(requireActivity()).inflate(R.layout.dialog_playlist, null) val songs: List = extra>(EXTRA_SONG).value ?: emptyList() val playlistView: TextInputEditText = view.actionNewPlaylist val playlistContainer: TextInputLayout = view.actionNewPlaylistContainer return materialDialog(R.string.new_playlist_title) .setView(view) .setPositiveButton( R.string.create_action ) { _, _ -> val playlistName = playlistView.text.toString() if (!TextUtils.isEmpty(playlistName)) { lifecycleScope.launch(Dispatchers.IO) { if (libraryViewModel.checkPlaylistExists(playlistName).isEmpty()) { val playlistId: Long = libraryViewModel.createPlaylist(PlaylistEntity(playlistName = playlistName)) libraryViewModel.insertSongs(songs.map { it.toSongEntity(playlistId) }) libraryViewModel.forceReload(Playlists) } else { Toast.makeText(requireContext(), "Playlist exists", Toast.LENGTH_SHORT) .show() } } } else { playlistContainer.error = "Playlist is can't be empty" } } .create() .colorButtons() } }