From 029dd032288faa2412fdbefb379c10e751cea4d6 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Tue, 18 Oct 2022 17:42:22 +0200 Subject: [PATCH] add to playlist in the background --- .../ui/dialogs/AddToPlaylistDialog.kt | 66 +++++++++++-------- .../ui/sheets/PlaylistOptionsBottomSheet.kt | 7 +- app/src/main/res/values/strings.xml | 1 + 3 files changed, 44 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/com/github/libretube/ui/dialogs/AddToPlaylistDialog.kt b/app/src/main/java/com/github/libretube/ui/dialogs/AddToPlaylistDialog.kt index 8dc58d1f2..38d7269c4 100644 --- a/app/src/main/java/com/github/libretube/ui/dialogs/AddToPlaylistDialog.kt +++ b/app/src/main/java/com/github/libretube/ui/dialogs/AddToPlaylistDialog.kt @@ -1,7 +1,10 @@ package com.github.libretube.ui.dialogs import android.app.Dialog +import android.content.Context import android.os.Bundle +import android.os.Handler +import android.os.Looper import android.util.Log import android.widget.ArrayAdapter import android.widget.Toast @@ -11,6 +14,7 @@ import androidx.fragment.app.activityViewModels import androidx.lifecycle.lifecycleScope import com.github.libretube.R import com.github.libretube.api.RetrofitInstance +import com.github.libretube.api.obj.PlaylistId import com.github.libretube.constants.IntentData import com.github.libretube.databinding.DialogAddtoplaylistBinding import com.github.libretube.extensions.TAG @@ -18,6 +22,9 @@ import com.github.libretube.models.PlaylistViewModel import com.github.libretube.util.PreferenceHelper import com.github.libretube.util.ThemeHelper import com.google.android.material.dialog.MaterialAlertDialogBuilder +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch import retrofit2.HttpException import java.io.IOException @@ -78,9 +85,8 @@ class AddToPlaylistDialog : DialogFragment() { binding.addToPlaylist.setOnClickListener { val index = binding.playlistsSpinner.selectedItemPosition viewModel.lastSelectedPlaylistId = response[index].id!! - addToPlaylist( - response[index].id!! - ) + addToPlaylist(response[index].id!!) + dialog?.dismiss() } } } @@ -88,32 +94,38 @@ class AddToPlaylistDialog : DialogFragment() { } private fun addToPlaylist(playlistId: String) { - fun run() { - lifecycleScope.launchWhenCreated { - val response = try { - RetrofitInstance.authApi.addToPlaylist( - token, - com.github.libretube.api.obj.PlaylistId(playlistId, videoId) - ) - } catch (e: IOException) { - println(e) - Log.e(TAG(), "IOException, you might not have internet connection") - Toast.makeText(context, R.string.unknown_error, Toast.LENGTH_SHORT).show() - return@launchWhenCreated - } catch (e: HttpException) { - Log.e(TAG(), "HttpException, unexpected response") - Toast.makeText(context, R.string.server_error, Toast.LENGTH_SHORT).show() - return@launchWhenCreated - } - if (response.message == "ok") { - Toast.makeText(context, R.string.success, Toast.LENGTH_SHORT).show() - dialog?.dismiss() - } else { - Toast.makeText(context, R.string.fail, Toast.LENGTH_SHORT).show() - } + val appContext = context?.applicationContext ?: return + CoroutineScope(Dispatchers.IO).launch { + val response = try { + RetrofitInstance.authApi.addToPlaylist( + token, + PlaylistId(playlistId, videoId) + ) + } catch (e: IOException) { + println(e) + Log.e(TAG(), "IOException, you might not have internet connection") + toastFromMainThread(appContext, R.string.unknown_error) + return@launch + } catch (e: HttpException) { + Log.e(TAG(), "HttpException, unexpected response") + toastFromMainThread(appContext, R.string.server_error) + return@launch } + toastFromMainThread( + appContext, + if (response.message == "ok") R.string.added_to_playlist else R.string.fail + ) + } + } + + private fun toastFromMainThread(context: Context, stringId: Int) { + Handler(Looper.getMainLooper()).post { + Toast.makeText( + context, + stringId, + Toast.LENGTH_SHORT + ).show() } - run() } private fun Fragment?.runOnUiThread(action: () -> Unit) { diff --git a/app/src/main/java/com/github/libretube/ui/sheets/PlaylistOptionsBottomSheet.kt b/app/src/main/java/com/github/libretube/ui/sheets/PlaylistOptionsBottomSheet.kt index 8c50750c1..a5d81f435 100644 --- a/app/src/main/java/com/github/libretube/ui/sheets/PlaylistOptionsBottomSheet.kt +++ b/app/src/main/java/com/github/libretube/ui/sheets/PlaylistOptionsBottomSheet.kt @@ -6,6 +6,7 @@ import android.util.Log import android.widget.Toast import com.github.libretube.R import com.github.libretube.api.RetrofitInstance +import com.github.libretube.api.obj.PlaylistId import com.github.libretube.constants.ShareObjectType import com.github.libretube.databinding.DialogTextPreferenceBinding import com.github.libretube.extensions.TAG @@ -116,7 +117,7 @@ class PlaylistOptionsBottomSheet( val response = try { RetrofitInstance.authApi.importPlaylist( token, - com.github.libretube.api.obj.PlaylistId(playlistId) + PlaylistId(playlistId) ) } catch (e: IOException) { println(e) @@ -133,7 +134,7 @@ class PlaylistOptionsBottomSheet( try { RetrofitInstance.authApi.renamePlaylist( PreferenceHelper.getToken(), - com.github.libretube.api.obj.PlaylistId( + PlaylistId( playlistId = id, newName = newName ) @@ -149,7 +150,7 @@ class PlaylistOptionsBottomSheet( try { RetrofitInstance.authApi.deletePlaylist( PreferenceHelper.getToken(), - com.github.libretube.api.obj.PlaylistId(id) + PlaylistId(id) ) } catch (e: Exception) { return@launch diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0645c336d..ece153900 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -347,6 +347,7 @@ Recently updated (reversed) Show more Time code + Added to playlist Download Service