Skip to content
This repository has been archived by the owner on Feb 8, 2022. It is now read-only.

Commit

Permalink
fix logic to improve stability
Browse files Browse the repository at this point in the history
  • Loading branch information
delletenebre committed Jan 19, 2020
1 parent 08166b4 commit 0ce68f7
Show file tree
Hide file tree
Showing 12 changed files with 147 additions and 72 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
20.01.19
========
* Добавлена опция в настройках для интерфейса Android Auto: автоматический запуск или отображение треков при выборе плейлиста
* Заменена иконка для действия "Трек не нравится"
* Немного изменена логика работы, которая в теории увеличит стабильность работы

20.01.17
========
* Исправлена "двойная обработка" при нажатии на медиа кнопки
Expand Down
6 changes: 3 additions & 3 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ android {
defaultConfig {
multiDexEnabled true
applicationId "kg.delletenebre.yamus"
versionCode 32
versionName "20.01.17"
versionCode 33
versionName "20.01.19"

minSdkVersion rootProject.minSdkVersion
targetSdkVersion rootProject.targetSdkVersion
Expand Down Expand Up @@ -61,7 +61,7 @@ dependencies {
implementation 'androidx.navigation:navigation-ui-ktx:2.1.0'
implementation 'androidx.gridlayout:gridlayout:1.0.0'
implementation 'androidx.preference:preference:1.1.0'
implementation 'androidx.fragment:fragment-ktx:1.2.0-rc05'
implementation 'androidx.fragment:fragment-ktx:1.2.0-rc04'

// Lifecycle
def lifecycle_version = '2.2.0-rc03'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package kg.delletenebre.yamus.ui.home

import android.os.Bundle
import android.support.v4.media.MediaBrowserCompat
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
Expand Down Expand Up @@ -38,12 +37,11 @@ class HomeFragment : Fragment() {

viewModel.itemClickListenerOfFragment = object : OnMediaItemClickListener {
override fun onClick(item: MediaBrowserCompat.MediaItem) {
Log.d("ahohas", "clicked item id: ${item.description.mediaId}")
val path = item.mediaId
if (path != null) {
val bundle = bundleOf(
"title" to item.description.title,
"path" to item.mediaId
"title" to item.description.title,
"path" to item.mediaId
)
when {
path.startsWith(MediaLibrary.PATH_PLAYLIST) ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ class HomeViewModel : ViewModel(), OnMediaItemClickListener {

init {
viewModelScope.launch {
blockPersonalPlaylists.postValue(MediaLibrary.getPersonalPlaylists())
blockMixes.postValue(MediaLibrary.getMixes())
blockPersonalPlaylists.value = MediaLibrary.getPersonalPlaylists()
blockMixes.value = MediaLibrary.getMixes()
}
}
}
3 changes: 3 additions & 0 deletions app/src/main/res/values-ru/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,9 @@

<!-- Preference Android Auto Interface -->
<string name="pref_header_aa_interface">Интерфейс Android Auto</string>
<string name="pref_title_show_playlist_items">Показывать треки в плейлистах</string>
<string name="pref_summary_on_show_playlist_items">При выборе плейлиста будут показаны треки</string>
<string name="pref_summary_off_show_playlist_items">При выборе плейлиста воспроизведение начнётся автоматически</string>
<string name="pref_title_like_alter_position">Отображать &quot;Нравится&quot; на главном экране</string>
<string name="pref_summary_on_like_alter_position">Кнопка &quot;Нравится&quot; будет расположена вместо вместо &quot;Предыдущий трек&quot;</string>
<string name="pref_summary_off_like_alter_position">Кнопка &quot;Нравится&quot; будет расположена по умолчанию</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values/bools.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@
<bool name="pref_default_show_repeat">true</bool>
<bool name="pref_default_like_alter_position">false</bool>
<bool name="pref_default_dislike_alter_position">false</bool>
<bool name="pref_default_show_playlist_items">false</bool>
</resources>
3 changes: 3 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,9 @@

<!-- Preference Android Auto Interface -->
<string name="pref_header_aa_interface">Android Auto interface</string>
<string name="pref_title_show_playlist_items">Display playlist tracks</string>
<string name="pref_summary_on_show_playlist_items">Selecting a playlist will show the tracks</string>
<string name="pref_summary_off_show_playlist_items">When you select a playlist, playback will start automatically</string>
<string name="pref_title_like_alter_position">Show &quot;Like&quot; on main screen</string>
<string name="pref_summary_on_like_alter_position">&quot;Like&quot; button will be located instead of &quot;Previous track&quot;</string>
<string name="pref_summary_off_like_alter_position">&quot;Like&quot; button will be located by default</string>
Expand Down
7 changes: 7 additions & 0 deletions app/src/main/res/xml/root_preferences.xml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,13 @@

<PreferenceCategory app:title="@string/pref_header_aa_interface">

<SwitchPreferenceCompat
app:key="show_playlist_items"
app:defaultValue="@bool/pref_default_show_playlist_items"
app:title="@string/pref_title_show_playlist_items"
app:summaryOn="@string/pref_summary_on_show_playlist_items"
app:summaryOff="@string/pref_summary_off_show_playlist_items" />

<SwitchPreferenceCompat
app:key="like_alter_position"
app:defaultValue="@bool/pref_default_like_alter_position"
Expand Down
31 changes: 25 additions & 6 deletions common/src/main/java/kg/delletenebre/yamus/api/YaApi.kt
Original file line number Diff line number Diff line change
Expand Up @@ -321,6 +321,7 @@ object YaApi {
}
}

var getStationTracksRepeats = 0
suspend fun getStationTracks(stationId: String, queue: String = ""): Pair<String, List<MediaMetadataCompat>> {
val params: MutableList<Pair<String, String>> = mutableListOf("settings2" to "true")
if (queue.isNotEmpty()) {
Expand All @@ -330,6 +331,7 @@ object YaApi {
val (_, _, result) = "/rotor$stationId/tracks".httpGet(params).awaitStringResponseResult()
result.fold(
{ data ->
getStationTracksRepeats = 0
return try {
val json = JSONObject(data).getJSONObject("result")
val sequence = json.getJSONArray("sequence")
Expand All @@ -345,12 +347,20 @@ object YaApi {
(batchId to tracks)
} catch (e: Exception) {
Log.e(TAG, "getStationTracks() exception: ${e.message}")
return ("" to listOf())
("" to listOf())
}
},
{ error ->
Log.w(TAG, "getStationTracks() server error: ${error.response}")
return ("" to listOf())
return if (getStationTracksRepeats < 3) {
Log.e(TAG, "getStationTracks() repeat count: $getStationTracksRepeats")
getStationTracksRepeats++
getStationTracks(stationId, queue)
} else {
Log.e(TAG, "getStationTracks() error: ${error.message}")
getStationTracksRepeats = 0
error.printStackTrace()
("" to listOf())
}
}
)
}
Expand Down Expand Up @@ -784,6 +794,7 @@ object YaApi {
return "$url+${body.hashCode()}"
}

var makeRequestRepeats = 0
private suspend fun makeRequest(
url: String,
body: List<Pair<String, String>> = listOf(),
Expand All @@ -803,15 +814,23 @@ object YaApi {
.awaitStringResponseResult()
result.fold(
{ data ->
makeRequestRepeats = 0
database.httpCache().insert(
HttpCacheEntity(urlHash, data, System.currentTimeMillis())
)
data
},
{ error ->
Log.w(TAG, "makeRequest() server error: $url")
error.printStackTrace()
""
if (makeRequestRepeats < 3) {
Log.w(TAG, "makeRequest() server error repeating: $makeRequestRepeats")
makeRequestRepeats++
makeRequest(url, body, forceOnline)
} else {
Log.w(TAG, "makeRequest() server error: $url")
makeRequestRepeats = 0
error.printStackTrace()
""
}
}
)
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ class YamusPlaybackPreparer(private val exoPlayer: ExoPlayer)
* [MediaSessionCompat.Callback.onPrepareFromMediaId].
*/
override fun onPrepareFromMediaId(mediaId: String, playWhenReady: Boolean, extras: Bundle?) {
Log.d("ahoha", "mediaId: $mediaId")
exoPlayer.playWhenReady = false
runBlocking {
when {
Expand Down
Loading

0 comments on commit 0ce68f7

Please sign in to comment.