mirror of
https://github.com/apognu/otter
synced 2025-02-18 19:50:35 +01:00
Allow track downloading from the search results.
This commit is contained in:
parent
e4da4af3f3
commit
7d95618ff5
@ -10,10 +10,13 @@ import com.github.apognu.otter.adapters.SearchAdapter
|
|||||||
import com.github.apognu.otter.fragments.AlbumsFragment
|
import com.github.apognu.otter.fragments.AlbumsFragment
|
||||||
import com.github.apognu.otter.fragments.ArtistsFragment
|
import com.github.apognu.otter.fragments.ArtistsFragment
|
||||||
import com.github.apognu.otter.repositories.*
|
import com.github.apognu.otter.repositories.*
|
||||||
import com.github.apognu.otter.utils.Album
|
import com.github.apognu.otter.utils.*
|
||||||
import com.github.apognu.otter.utils.Artist
|
import com.google.android.exoplayer2.offline.Download
|
||||||
import com.github.apognu.otter.utils.untilNetwork
|
|
||||||
import kotlinx.android.synthetic.main.activity_search.*
|
import kotlinx.android.synthetic.main.activity_search.*
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.flow.collect
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import java.net.URLEncoder
|
import java.net.URLEncoder
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@ -44,6 +47,14 @@ class SearchActivity : AppCompatActivity() {
|
|||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
|
|
||||||
|
lifecycleScope.launch(Dispatchers.IO) {
|
||||||
|
EventBus.get().collect { message ->
|
||||||
|
when (message) {
|
||||||
|
is Event.DownloadChanged -> refreshDownloadedTrack(message.download)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
artistsRepository = ArtistsSearchRepository(this@SearchActivity, "")
|
artistsRepository = ArtistsSearchRepository(this@SearchActivity, "")
|
||||||
albumsRepository = AlbumsSearchRepository(this@SearchActivity, "")
|
albumsRepository = AlbumsSearchRepository(this@SearchActivity, "")
|
||||||
tracksRepository = TracksSearchRepository(this@SearchActivity, "")
|
tracksRepository = TracksSearchRepository(this@SearchActivity, "")
|
||||||
@ -114,6 +125,20 @@ class SearchActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private suspend fun refreshDownloadedTrack(download: Download) {
|
||||||
|
if (download.state == Download.STATE_COMPLETED) {
|
||||||
|
download.getMetadata()?.let { info ->
|
||||||
|
adapter.tracks.withIndex().associate { it.value to it.index }.filter { it.key.id == info.id }.toList().getOrNull(0)?.let { match ->
|
||||||
|
log(match)
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
adapter.tracks[match.second].downloaded = true
|
||||||
|
adapter.notifyItemChanged(adapter.getPositionOf(SearchAdapter.ResultType.Track, match.second))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
inner class SearchResultClickListener : SearchAdapter.OnSearchResultClickListener {
|
inner class SearchResultClickListener : SearchAdapter.OnSearchResultClickListener {
|
||||||
override fun onArtistClick(holder: View?, artist: Artist) {
|
override fun onArtistClick(holder: View?, artist: Artist) {
|
||||||
ArtistsFragment.openAlbums(this@SearchActivity, artist)
|
ArtistsFragment.openAlbums(this@SearchActivity, artist)
|
||||||
|
@ -214,6 +214,7 @@ class SearchAdapter(private val context: Context?, private val listener: OnSearc
|
|||||||
when (it.itemId) {
|
when (it.itemId) {
|
||||||
R.id.track_add_to_queue -> CommandBus.send(Command.AddToQueue(listOf(track)))
|
R.id.track_add_to_queue -> CommandBus.send(Command.AddToQueue(listOf(track)))
|
||||||
R.id.track_play_next -> CommandBus.send(Command.PlayNext(track))
|
R.id.track_play_next -> CommandBus.send(Command.PlayNext(track))
|
||||||
|
R.id.track_pin -> CommandBus.send(Command.PinTrack(track))
|
||||||
R.id.queue_remove -> CommandBus.send(Command.RemoveFromQueue(track))
|
R.id.queue_remove -> CommandBus.send(Command.RemoveFromQueue(track))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -228,6 +229,15 @@ class SearchAdapter(private val context: Context?, private val listener: OnSearc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getPositionOf(type: ResultType, position: Int): Int {
|
||||||
|
return when (type) {
|
||||||
|
ResultType.Artist -> position + 1
|
||||||
|
ResultType.Album -> position + artists.size + 2
|
||||||
|
ResultType.Track -> artists.size + albums.size + SECTION_COUNT + position
|
||||||
|
else -> 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
inner class ViewHolder(view: View, val context: Context?) : RecyclerView.ViewHolder(view), View.OnClickListener {
|
inner class ViewHolder(view: View, val context: Context?) : RecyclerView.ViewHolder(view), View.OnClickListener {
|
||||||
val handle = view.handle
|
val handle = view.handle
|
||||||
val cover = view.cover
|
val cover = view.cover
|
||||||
|
Loading…
x
Reference in New Issue
Block a user