diff --git a/app/src/main/java/com/github/apognu/otter/adapters/PlaylistTracksAdapter.kt b/app/src/main/java/com/github/apognu/otter/adapters/PlaylistTracksAdapter.kt index 4fd9b65..aa0531c 100644 --- a/app/src/main/java/com/github/apognu/otter/adapters/PlaylistTracksAdapter.kt +++ b/app/src/main/java/com/github/apognu/otter/adapters/PlaylistTracksAdapter.kt @@ -3,9 +3,7 @@ package com.github.apognu.otter.adapters import android.annotation.SuppressLint import android.content.Context import android.graphics.Color -import android.graphics.Typeface import android.graphics.drawable.ColorDrawable -import android.os.Build import android.view.* import androidx.appcompat.widget.PopupMenu import androidx.recyclerview.widget.ItemTouchHelper @@ -18,11 +16,15 @@ import jp.wasabeef.picasso.transformations.RoundedCornersTransformation import kotlinx.android.synthetic.main.row_track.view.* import java.util.* -class PlaylistTracksAdapter(private val context: Context?, private val favoriteListener: OnFavoriteListener? = null, val fromQueue: Boolean = false) : OtterAdapter() { +class PlaylistTracksAdapter(private val context: Context?, private val favoriteListener: OnFavoriteListener? = null, private val playlistListener: OnPlaylistListener? = null, val fromQueue: Boolean = false) : OtterAdapter() { interface OnFavoriteListener { fun onToggleFavorite(id: Int, state: Boolean) } + interface OnPlaylistListener { + fun onRemoveTrackFromPlaylist(track: Track, index: Int) + } + private lateinit var touchHelper: ItemTouchHelper var currentTrack: Track? = null @@ -96,11 +98,14 @@ class PlaylistTracksAdapter(private val context: Context?, private val favoriteL PopupMenu(context, holder.actions, Gravity.START, R.attr.actionOverflowMenuStyle, 0).apply { inflate(if (fromQueue) R.menu.row_queue else R.menu.row_track) + menu.findItem(R.id.track_remove_from_playlist).isVisible = true + setOnMenuItemClickListener { when (it.itemId) { R.id.track_add_to_queue -> CommandBus.send(Command.AddToQueue(listOf(track.track))) R.id.track_play_next -> CommandBus.send(Command.PlayNext(track.track)) R.id.queue_remove -> CommandBus.send(Command.RemoveFromQueue(track.track)) + R.id.track_remove_from_playlist -> playlistListener?.onRemoveTrackFromPlaylist(track.track, position) } true diff --git a/app/src/main/java/com/github/apognu/otter/fragments/OtterFragment.kt b/app/src/main/java/com/github/apognu/otter/fragments/OtterFragment.kt index 288cbd3..8385b1b 100644 --- a/app/src/main/java/com/github/apognu/otter/fragments/OtterFragment.kt +++ b/app/src/main/java/com/github/apognu/otter/fragments/OtterFragment.kt @@ -100,6 +100,11 @@ abstract class OtterFragment> : Fragment() { } } + fun update() { + swiper?.isRefreshing = true + fetch(Repository.Origin.Network.origin) + } + open fun onDataFetched(data: List) {} private fun fetch(upstreams: Int = Repository.Origin.Network.origin, size: Int = 0) { diff --git a/app/src/main/java/com/github/apognu/otter/fragments/PlaylistTracksFragment.kt b/app/src/main/java/com/github/apognu/otter/fragments/PlaylistTracksFragment.kt index 1c73e22..c004623 100644 --- a/app/src/main/java/com/github/apognu/otter/fragments/PlaylistTracksFragment.kt +++ b/app/src/main/java/com/github/apognu/otter/fragments/PlaylistTracksFragment.kt @@ -10,7 +10,9 @@ import androidx.recyclerview.widget.RecyclerView import com.github.apognu.otter.R import com.github.apognu.otter.adapters.PlaylistTracksAdapter import com.github.apognu.otter.repositories.FavoritesRepository +import com.github.apognu.otter.repositories.ManagementPlaylistsRepository import com.github.apognu.otter.repositories.PlaylistTracksRepository +import com.github.apognu.otter.repositories.Repository import com.github.apognu.otter.utils.* import com.squareup.picasso.Picasso import jp.wasabeef.picasso.transformations.RoundedCornersTransformation @@ -24,6 +26,7 @@ class PlaylistTracksFragment : OtterFragment() { override val cacheId = "tracks-playlists-management" - override val upstream = HttpUpstream>(HttpUpstream.Behavior.AtOnce, "/api/v1/playlists/?ordering=name", object : TypeToken() {}.type) + override val upstream = HttpUpstream>(HttpUpstream.Behavior.AtOnce, "/api/v1/playlists/?scope=me&ordering=name", object : TypeToken() {}.type) override fun cache(data: List) = PlaylistsCache(data) override fun uncache(reader: BufferedReader) = gsonDeserializerOf(PlaylistsCache::class.java).deserialize(reader) @@ -64,4 +64,19 @@ class ManagementPlaylistsRepository(override val context: Context?) : Repository .awaitByteArrayResponseResult() } } + + suspend fun remove(id: Int, track: Track, index: Int) { + val body = mapOf("index" to index) + + val request = Fuel.post(mustNormalizeUrl("/api/v1/playlists/${id}/remove/")).apply { + if (!Settings.isAnonymous()) { + header("Authorization", "Bearer ${Settings.getAccessToken()}") + } + } + + request + .header("Content-Type", "application/json") + .body(Gson().toJson(body)) + .awaitByteArrayResponseResult() + } } \ No newline at end of file diff --git a/app/src/main/res/menu/row_track.xml b/app/src/main/res/menu/row_track.xml index 7866c59..efb52c4 100644 --- a/app/src/main/res/menu/row_track.xml +++ b/app/src/main/res/menu/row_track.xml @@ -17,4 +17,9 @@ android:id="@+id/track_pin" android:title="@string/playback_queue_download" /> + + \ No newline at end of file