Various bug fixes (#2010)
## Description Collecting minor bug fixes in one PR: - If error occurs fetching a series, show the error on the UI instead of loading forever - Use song's artists on Now Playing page - Fixes settings wrap around scrolling when an update is available - Fix backdrop not clearing for items without backdrop - Fix not picking an ABI-specific APK when updating a regular release (maybe related to #1966) - Add "Go To" for album context menus - Fix handling of next/previous media remote button presses during video playback ### Related issues Fixes #1990 Fixes #1965 ### Testing Emulator mostly ## Screenshots N/A ## AI or LLM usage None
This commit is contained in:
parent
a38eb3e3d8
commit
b99f21efa8
14 changed files with 453 additions and 27 deletions
|
|
@ -42,7 +42,7 @@ data class AudioItem(
|
||||||
?.id,
|
?.id,
|
||||||
title = item.title,
|
title = item.title,
|
||||||
albumTitle = item.data.album,
|
albumTitle = item.data.album,
|
||||||
artistNames = item.data.albumArtist,
|
artistNames = item.data.artists?.joinToString(", "),
|
||||||
runtime = item.data.runTimeTicks?.ticks,
|
runtime = item.data.runTimeTicks?.ticks,
|
||||||
imageUrl = imageUrl,
|
imageUrl = imageUrl,
|
||||||
hasLyrics = item.data.hasLyrics == true,
|
hasLyrics = item.data.hasLyrics == true,
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ class BackdropService
|
||||||
itemId: String,
|
itemId: String,
|
||||||
imageUrl: String?,
|
imageUrl: String?,
|
||||||
) = withContext(WholphinDispatchers.IO) {
|
) = withContext(WholphinDispatchers.IO) {
|
||||||
if (backdropFlow.firstOrNull()?.imageUrl != imageUrl) {
|
if (backdropFlow.firstOrNull()?.imageUrl != imageUrl || imageUrl == null) {
|
||||||
_backdropFlow.update {
|
_backdropFlow.update {
|
||||||
it.copy(
|
it.copy(
|
||||||
itemId = itemId,
|
itemId = itemId,
|
||||||
|
|
@ -110,7 +110,7 @@ class BackdropService
|
||||||
val dynamicEnabled =
|
val dynamicEnabled =
|
||||||
backdropStyle == BackdropStyle.BACKDROP_DYNAMIC_COLOR ||
|
backdropStyle == BackdropStyle.BACKDROP_DYNAMIC_COLOR ||
|
||||||
backdropStyle == BackdropStyle.UNRECOGNIZED
|
backdropStyle == BackdropStyle.UNRECOGNIZED
|
||||||
val (primaryColor, secondaryColor, tertiaryColor) =
|
val colors =
|
||||||
if (dynamicEnabled) {
|
if (dynamicEnabled) {
|
||||||
extractColorsFromBackdrop(imageUrl)
|
extractColorsFromBackdrop(imageUrl)
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -121,9 +121,9 @@ class BackdropService
|
||||||
BackdropResult(
|
BackdropResult(
|
||||||
itemId = itemId,
|
itemId = itemId,
|
||||||
imageUrl = imageUrl,
|
imageUrl = imageUrl,
|
||||||
primaryColor = primaryColor,
|
primaryColor = colors?.primary ?: it.primaryColor,
|
||||||
secondaryColor = secondaryColor,
|
secondaryColor = colors?.secondary ?: it.secondaryColor,
|
||||||
tertiaryColor = tertiaryColor,
|
tertiaryColor = colors?.tertiary ?: it.tertiaryColor,
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
it
|
it
|
||||||
|
|
@ -131,10 +131,10 @@ class BackdropService
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun extractColorsFromBackdrop(imageUrl: String?): ExtractedColors =
|
suspend fun extractColorsFromBackdrop(imageUrl: String?): ExtractedColors? =
|
||||||
withContext(WholphinDispatchers.IO) {
|
withContext(WholphinDispatchers.IO) {
|
||||||
if (imageUrl.isNullOrBlank()) {
|
if (imageUrl.isNullOrBlank()) {
|
||||||
return@withContext ExtractedColors.DEFAULT
|
return@withContext null
|
||||||
}
|
}
|
||||||
extractedColorCache.get(imageUrl)?.let {
|
extractedColorCache.get(imageUrl)?.let {
|
||||||
return@withContext it
|
return@withContext it
|
||||||
|
|
|
||||||
|
|
@ -210,9 +210,7 @@ class UpdateChecker
|
||||||
okHttpClient.newCall(request).execute().use {
|
okHttpClient.newCall(request).execute().use {
|
||||||
if (it.isSuccessful) {
|
if (it.isSuccessful) {
|
||||||
Timber.v("Request successful for ${release.downloadUrl}")
|
Timber.v("Request successful for ${release.downloadUrl}")
|
||||||
withContext(WholphinDispatchers.Main) {
|
callback.contentLength(it.body.contentLength())
|
||||||
callback.contentLength(it.body.contentLength())
|
|
||||||
}
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||||
val contentValues =
|
val contentValues =
|
||||||
ContentValues().apply {
|
ContentValues().apply {
|
||||||
|
|
@ -397,9 +395,7 @@ suspend fun copyTo(
|
||||||
while (bytes >= 0) {
|
while (bytes >= 0) {
|
||||||
out.write(buffer, 0, bytes)
|
out.write(buffer, 0, bytes)
|
||||||
bytesCopied += bytes
|
bytesCopied += bytes
|
||||||
withContext(WholphinDispatchers.Main) {
|
callback.bytesDownloaded(bytesCopied)
|
||||||
callback.bytesDownloaded(bytesCopied)
|
|
||||||
}
|
|
||||||
bytes = input.read(buffer)
|
bytes = input.read(buffer)
|
||||||
}
|
}
|
||||||
return@withContext bytesCopied
|
return@withContext bytesCopied
|
||||||
|
|
@ -416,7 +412,12 @@ fun getDownloadUrl(
|
||||||
buildList {
|
buildList {
|
||||||
add("$ASSET_NAME${releaseSuffix}$abiSuffix.apk")
|
add("$ASSET_NAME${releaseSuffix}$abiSuffix.apk")
|
||||||
add("$ASSET_NAME$releaseSuffix.apk")
|
add("$ASSET_NAME$releaseSuffix.apk")
|
||||||
if (!debug) add("$ASSET_NAME.apk")
|
if (!debug) {
|
||||||
|
if (abiSuffix.isNotNullOrBlank()) {
|
||||||
|
add("$ASSET_NAME$abiSuffix.apk")
|
||||||
|
}
|
||||||
|
add("$ASSET_NAME.apk")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
var preferredAsset: JsonObject? = null
|
var preferredAsset: JsonObject? = null
|
||||||
outer@ for (name in preferredNames) {
|
outer@ for (name in preferredNames) {
|
||||||
|
|
|
||||||
|
|
@ -66,6 +66,7 @@ sealed interface ContextMenu {
|
||||||
val canRemoveFromQueue: Boolean,
|
val canRemoveFromQueue: Boolean,
|
||||||
val actions: MusicContextActions,
|
val actions: MusicContextActions,
|
||||||
val showRemoveFromPlaylist: Boolean = false,
|
val showRemoveFromPlaylist: Boolean = false,
|
||||||
|
val showGoTo: Boolean = false,
|
||||||
) : ContextMenu
|
) : ContextMenu
|
||||||
|
|
||||||
data class ForQueue(
|
data class ForQueue(
|
||||||
|
|
@ -758,6 +759,18 @@ fun buildContextForMusic(
|
||||||
buildList {
|
buildList {
|
||||||
val item = music.item
|
val item = music.item
|
||||||
val index = music.index
|
val index = music.index
|
||||||
|
// Songs should not show Go to
|
||||||
|
if (music.showGoTo && item.type != BaseItemKind.AUDIO) {
|
||||||
|
add(
|
||||||
|
DialogItem(
|
||||||
|
resources.getString(R.string.go_to),
|
||||||
|
Icons.Default.ArrowForward,
|
||||||
|
dismissOnClick = true,
|
||||||
|
) {
|
||||||
|
actions.navigateTo(item.destination())
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
add(
|
add(
|
||||||
DialogItem(
|
DialogItem(
|
||||||
resources.getString(R.string.play),
|
resources.getString(R.string.play),
|
||||||
|
|
|
||||||
|
|
@ -609,6 +609,7 @@ fun AlbumDetailsPage(
|
||||||
),
|
),
|
||||||
canRemoveFromQueue = false,
|
canRemoveFromQueue = false,
|
||||||
actions = moreDialogActions,
|
actions = moreDialogActions,
|
||||||
|
showGoTo = true,
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
cardContent = { index: Int, item: BaseItem?, mod: Modifier, onClick: () -> Unit, onLongClick: () -> Unit ->
|
cardContent = { index: Int, item: BaseItem?, mod: Modifier, onClick: () -> Unit, onLongClick: () -> Unit ->
|
||||||
|
|
|
||||||
|
|
@ -568,6 +568,7 @@ fun ArtistDetailsPage(
|
||||||
),
|
),
|
||||||
canRemoveFromQueue = false,
|
canRemoveFromQueue = false,
|
||||||
actions = moreDialogActions,
|
actions = moreDialogActions,
|
||||||
|
showGoTo = true,
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
cardContent = { index: Int, album: BaseItem?, mod: Modifier, onClick: () -> Unit, onLongClick: () -> Unit ->
|
cardContent = { index: Int, album: BaseItem?, mod: Modifier, onClick: () -> Unit, onLongClick: () -> Unit ->
|
||||||
|
|
@ -606,6 +607,7 @@ fun ArtistDetailsPage(
|
||||||
),
|
),
|
||||||
canRemoveFromQueue = false,
|
canRemoveFromQueue = false,
|
||||||
actions = moreDialogActions,
|
actions = moreDialogActions,
|
||||||
|
showGoTo = true,
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
cardContent = { index: Int, album: BaseItem?, mod: Modifier, onClick: () -> Unit, onLongClick: () -> Unit ->
|
cardContent = { index: Int, album: BaseItem?, mod: Modifier, onClick: () -> Unit, onLongClick: () -> Unit ->
|
||||||
|
|
@ -704,6 +706,7 @@ fun ArtistDetailsPage(
|
||||||
),
|
),
|
||||||
canRemoveFromQueue = false,
|
canRemoveFromQueue = false,
|
||||||
actions = moreDialogActions,
|
actions = moreDialogActions,
|
||||||
|
showGoTo = true,
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
cardContent = { index: Int, item: BaseItem?, mod: Modifier, onClick: () -> Unit, onLongClick: () -> Unit ->
|
cardContent = { index: Int, item: BaseItem?, mod: Modifier, onClick: () -> Unit, onLongClick: () -> Unit ->
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@ import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
||||||
|
import androidx.media3.common.Player
|
||||||
import androidx.media3.common.util.UnstableApi
|
import androidx.media3.common.util.UnstableApi
|
||||||
import androidx.media3.ui.compose.state.rememberCurrentMediaItemState
|
import androidx.media3.ui.compose.state.rememberCurrentMediaItemState
|
||||||
import androidx.tv.material3.Button
|
import androidx.tv.material3.Button
|
||||||
|
|
@ -127,6 +128,12 @@ fun NowPlayingPage(
|
||||||
onPlaybackDialogTypeClick = { },
|
onPlaybackDialogTypeClick = { },
|
||||||
getDurationMs = { player.duration },
|
getDurationMs = { player.duration },
|
||||||
dpadSeekMode = preferences.playbackPreferences.dpadSeekMode,
|
dpadSeekMode = preferences.playbackPreferences.dpadSeekMode,
|
||||||
|
onSeekToNext = {
|
||||||
|
if (player.isCommandAvailable(Player.COMMAND_SEEK_TO_NEXT)) player.seekToNext()
|
||||||
|
},
|
||||||
|
onPSeekToPrevious = {
|
||||||
|
if (player.isCommandAvailable(Player.COMMAND_SEEK_TO_PREVIOUS)) player.seekToPrevious()
|
||||||
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ import com.github.damontecres.wholphin.preferences.AppPreferences
|
||||||
import com.github.damontecres.wholphin.preferences.updateMusicPreferences
|
import com.github.damontecres.wholphin.preferences.updateMusicPreferences
|
||||||
import com.github.damontecres.wholphin.services.BackdropResult
|
import com.github.damontecres.wholphin.services.BackdropResult
|
||||||
import com.github.damontecres.wholphin.services.BackdropService
|
import com.github.damontecres.wholphin.services.BackdropService
|
||||||
|
import com.github.damontecres.wholphin.services.ExtractedColors
|
||||||
import com.github.damontecres.wholphin.services.ImageUrlService
|
import com.github.damontecres.wholphin.services.ImageUrlService
|
||||||
import com.github.damontecres.wholphin.services.MusicService
|
import com.github.damontecres.wholphin.services.MusicService
|
||||||
import com.github.damontecres.wholphin.services.NavigationManager
|
import com.github.damontecres.wholphin.services.NavigationManager
|
||||||
|
|
@ -278,7 +279,7 @@ class NowPlayingViewModel
|
||||||
val (primaryColor, secondaryColor, tertiaryColor) =
|
val (primaryColor, secondaryColor, tertiaryColor) =
|
||||||
backdropService.extractColorsFromBackdrop(
|
backdropService.extractColorsFromBackdrop(
|
||||||
imageUrl,
|
imageUrl,
|
||||||
)
|
) ?: ExtractedColors.DEFAULT
|
||||||
val backdropResult =
|
val backdropResult =
|
||||||
BackdropResult(
|
BackdropResult(
|
||||||
itemId = itemId.toString(),
|
itemId = itemId.toString(),
|
||||||
|
|
|
||||||
|
|
@ -124,10 +124,18 @@ class SeriesViewModel
|
||||||
Timber.v("Start")
|
Timber.v("Start")
|
||||||
addCloseable { themeSongPlayer.stop() }
|
addCloseable { themeSongPlayer.stop() }
|
||||||
val series =
|
val series =
|
||||||
api.userLibraryApi
|
try {
|
||||||
.getItem(seriesId)
|
api.userLibraryApi
|
||||||
.content
|
.getItem(seriesId)
|
||||||
.let { BaseItem(it) }
|
.content
|
||||||
|
.let { BaseItem(it) }
|
||||||
|
} catch (ex: CancellationException) {
|
||||||
|
throw ex
|
||||||
|
} catch (ex: Exception) {
|
||||||
|
Timber.e(ex, "Error fetching series %s", seriesId)
|
||||||
|
_state.update { it.copy(series = DataLoadingState.Error(ex)) }
|
||||||
|
return@launchIO
|
||||||
|
}
|
||||||
viewModelScope.launchDefault {
|
viewModelScope.launchDefault {
|
||||||
mediaManagementService.collectCanDelete(flowOf(series)) { canDelete ->
|
mediaManagementService.collectCanDelete(flowOf(series)) { canDelete ->
|
||||||
_state.update { it.copy(canDeleteSeries = canDelete) }
|
_state.update { it.copy(canDeleteSeries = canDelete) }
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,8 @@ class PlaybackKeyHandler(
|
||||||
private val isDpadSeekVisible: () -> Boolean = { false },
|
private val isDpadSeekVisible: () -> Boolean = { false },
|
||||||
private val onDpadSeek: (Long) -> Unit = { },
|
private val onDpadSeek: (Long) -> Unit = { },
|
||||||
private val dpadSeekMode: DpadSeekMode,
|
private val dpadSeekMode: DpadSeekMode,
|
||||||
|
private val onSeekToNext: () -> Unit,
|
||||||
|
private val onPSeekToPrevious: () -> Unit,
|
||||||
) {
|
) {
|
||||||
private var leftHandledByRepeat = false
|
private var leftHandledByRepeat = false
|
||||||
private var rightHandledByRepeat = false
|
private var rightHandledByRepeat = false
|
||||||
|
|
@ -89,11 +91,11 @@ class PlaybackKeyHandler(
|
||||||
}
|
}
|
||||||
|
|
||||||
Key.MediaNext -> {
|
Key.MediaNext -> {
|
||||||
if (player.isCommandAvailable(Player.COMMAND_SEEK_TO_NEXT)) player.seekToNext()
|
onSeekToNext.invoke()
|
||||||
}
|
}
|
||||||
|
|
||||||
Key.MediaPrevious -> {
|
Key.MediaPrevious -> {
|
||||||
if (player.isCommandAvailable(Player.COMMAND_SEEK_TO_PREVIOUS)) player.seekToPrevious()
|
onPSeekToPrevious.invoke()
|
||||||
}
|
}
|
||||||
|
|
||||||
Key.Captions -> {
|
Key.Captions -> {
|
||||||
|
|
|
||||||
|
|
@ -269,6 +269,8 @@ fun PlaybackPageContent(
|
||||||
},
|
},
|
||||||
onDpadSeek = onDpadSeek,
|
onDpadSeek = onDpadSeek,
|
||||||
dpadSeekMode = prefs.dpadSeekMode,
|
dpadSeekMode = prefs.dpadSeekMode,
|
||||||
|
onSeekToNext = viewModel::playNextUp,
|
||||||
|
onPSeekToPrevious = viewModel::playPrevious,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -226,6 +226,8 @@ fun PreferencesContent(
|
||||||
) {
|
) {
|
||||||
if (showUpdate) {
|
if (showUpdate) {
|
||||||
item {
|
item {
|
||||||
|
val interactionSource = remember { MutableInteractionSource() }
|
||||||
|
val focused = interactionSource.collectIsFocusedAsState().value
|
||||||
val updateFocusRequester = remember { FocusRequester() }
|
val updateFocusRequester = remember { FocusRequester() }
|
||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
if (focusedIndex.first == 0 && focusedIndex.second == 0) {
|
if (focusedIndex.first == 0 && focusedIndex.second == 0) {
|
||||||
|
|
@ -240,11 +242,20 @@ fun PreferencesContent(
|
||||||
viewModel.navigationManager.navigateTo(Destination.UpdateApp)
|
viewModel.navigationManager.navigateTo(Destination.UpdateApp)
|
||||||
},
|
},
|
||||||
summary = release?.version?.toString(),
|
summary = release?.version?.toString(),
|
||||||
|
interactionSource = interactionSource,
|
||||||
modifier =
|
modifier =
|
||||||
Modifier
|
Modifier
|
||||||
.focusRequester(updateFocusRequester)
|
.focusRequester(updateFocusRequester)
|
||||||
.focusRequester(firstFocusRequester)
|
.focusRequester(firstFocusRequester)
|
||||||
.playSoundOnFocus(movementSounds),
|
.playSoundOnFocus(movementSounds)
|
||||||
|
.lazyListWrapScrolling(
|
||||||
|
state = state,
|
||||||
|
focused = focused,
|
||||||
|
isFirst = true,
|
||||||
|
isLast = false,
|
||||||
|
firstFocusRequester = firstFocusRequester,
|
||||||
|
lastFocusRequester = lastFocusRequester,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,12 +16,19 @@ class TestUpdateChecker {
|
||||||
lateinit var releaseJson: JsonObject
|
lateinit var releaseJson: JsonObject
|
||||||
val assetsJson: JsonArray by lazy { releaseJson["assets"]!!.jsonArray }
|
val assetsJson: JsonArray by lazy { releaseJson["assets"]!!.jsonArray }
|
||||||
|
|
||||||
@Before
|
lateinit var releaseV108Json: JsonObject
|
||||||
fun setup() {
|
val assetsV108Json: JsonArray by lazy { releaseV108Json["assets"]!!.jsonArray }
|
||||||
val resource = javaClass.classLoader?.getResource("release_develop.json")
|
|
||||||
|
private fun read(filename: String): JsonObject {
|
||||||
|
val resource = javaClass.classLoader?.getResource(filename)
|
||||||
Assert.assertNotNull(resource)
|
Assert.assertNotNull(resource)
|
||||||
val fileContents = Paths.get(resource!!.toURI()).readText()
|
val fileContents = Paths.get(resource!!.toURI()).readText()
|
||||||
releaseJson = Json.parseToJsonElement(fileContents).jsonObject
|
return Json.parseToJsonElement(fileContents).jsonObject
|
||||||
|
}
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun setup() {
|
||||||
|
releaseJson = read("release_develop.json")
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -53,4 +60,30 @@ class TestUpdateChecker {
|
||||||
val url = getDownloadUrl(assetsJson, true, listOf("arm64-v8a"))
|
val url = getDownloadUrl(assetsJson, true, listOf("arm64-v8a"))
|
||||||
Assert.assertEquals("https://github.com/damontecres/Wholphin/releases/download/develop/Wholphin-debug-arm64-v8a.apk", url)
|
Assert.assertEquals("https://github.com/damontecres/Wholphin/releases/download/develop/Wholphin-debug-arm64-v8a.apk", url)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `Test regular release`() {
|
||||||
|
releaseV108Json = read("release_v108.json")
|
||||||
|
getDownloadUrl(assetsV108Json, false, listOf("arm64-v8a")).let { url ->
|
||||||
|
Assert.assertEquals(
|
||||||
|
"https://github.com/damontecres/Wholphin/releases/download/v1.0.8/Wholphin-arm64-v8a.apk",
|
||||||
|
url,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
getDownloadUrl(assetsV108Json, false, listOf("armeabi-v7a")).let { url ->
|
||||||
|
Assert.assertEquals(
|
||||||
|
"https://github.com/damontecres/Wholphin/releases/download/v1.0.8/Wholphin-armeabi-v7a.apk",
|
||||||
|
url,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
getDownloadUrl(assetsV108Json, false, emptyList()).let { url ->
|
||||||
|
Assert.assertEquals(
|
||||||
|
"https://github.com/damontecres/Wholphin/releases/download/v1.0.8/Wholphin.apk",
|
||||||
|
url,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
getDownloadUrl(assetsV108Json, true, listOf("arm64-v8a")).let { url ->
|
||||||
|
Assert.assertNull(url)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
344
app/src/test/resources/release_v108.json
Normal file
344
app/src/test/resources/release_v108.json
Normal file
|
|
@ -0,0 +1,344 @@
|
||||||
|
{
|
||||||
|
"url": "https://api.github.com/repos/damontecres/Wholphin/releases/388459926",
|
||||||
|
"assets_url": "https://api.github.com/repos/damontecres/Wholphin/releases/388459926/assets",
|
||||||
|
"upload_url": "https://uploads.github.com/repos/damontecres/Wholphin/releases/388459926/assets{?name,label}",
|
||||||
|
"html_url": "https://github.com/damontecres/Wholphin/releases/tag/v1.0.8",
|
||||||
|
"id": 388459926,
|
||||||
|
"author": {
|
||||||
|
"login": "github-actions[bot]",
|
||||||
|
"id": 41898282,
|
||||||
|
"node_id": "MDM6Qm90NDE4OTgyODI=",
|
||||||
|
"avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
|
||||||
|
"gravatar_id": "",
|
||||||
|
"url": "https://api.github.com/users/github-actions%5Bbot%5D",
|
||||||
|
"html_url": "https://github.com/apps/github-actions",
|
||||||
|
"followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
|
||||||
|
"following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
|
||||||
|
"gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
|
||||||
|
"starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
|
||||||
|
"subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
|
||||||
|
"organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
|
||||||
|
"repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
|
||||||
|
"events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
|
||||||
|
"received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
|
||||||
|
"type": "Bot",
|
||||||
|
"user_view_type": "public",
|
||||||
|
"site_admin": false
|
||||||
|
},
|
||||||
|
"node_id": "RE_kwDOPzwRps4XJ22W",
|
||||||
|
"tag_name": "v1.0.8",
|
||||||
|
"target_commitish": "main",
|
||||||
|
"name": "v1.0.8",
|
||||||
|
"draft": false,
|
||||||
|
"immutable": false,
|
||||||
|
"prerelease": false,
|
||||||
|
"created_at": "2026-09-14T14:04:10Z",
|
||||||
|
"updated_at": "2026-09-14T14:28:03Z",
|
||||||
|
"published_at": "2026-09-14T14:28:03Z",
|
||||||
|
"assets": [
|
||||||
|
{
|
||||||
|
"url": "https://api.github.com/repos/damontecres/Wholphin/releases/assets/563552435",
|
||||||
|
"id": 563552435,
|
||||||
|
"node_id": "RA_kwDOPzwRps4hlyCz",
|
||||||
|
"name": "Wholphin-arm64-v8a.apk",
|
||||||
|
"label": "",
|
||||||
|
"uploader": {
|
||||||
|
"login": "github-actions[bot]",
|
||||||
|
"id": 41898282,
|
||||||
|
"node_id": "MDM6Qm90NDE4OTgyODI=",
|
||||||
|
"avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
|
||||||
|
"gravatar_id": "",
|
||||||
|
"url": "https://api.github.com/users/github-actions%5Bbot%5D",
|
||||||
|
"html_url": "https://github.com/apps/github-actions",
|
||||||
|
"followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
|
||||||
|
"following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
|
||||||
|
"gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
|
||||||
|
"starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
|
||||||
|
"subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
|
||||||
|
"organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
|
||||||
|
"repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
|
||||||
|
"events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
|
||||||
|
"received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
|
||||||
|
"type": "Bot",
|
||||||
|
"user_view_type": "public",
|
||||||
|
"site_admin": false
|
||||||
|
},
|
||||||
|
"content_type": "application/vnd.android.package-archive",
|
||||||
|
"state": "uploaded",
|
||||||
|
"size": 46041302,
|
||||||
|
"digest": "sha256:77504857a15050beed9a8e589b70c29773b5e6a3c6ae76deec79c10702129755",
|
||||||
|
"download_count": 485,
|
||||||
|
"created_at": "2026-09-14T14:23:34Z",
|
||||||
|
"updated_at": "2026-09-14T14:23:39Z",
|
||||||
|
"browser_download_url": "https://github.com/damontecres/Wholphin/releases/download/v1.0.8/Wholphin-arm64-v8a.apk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://api.github.com/repos/damontecres/Wholphin/releases/assets/563552436",
|
||||||
|
"id": 563552436,
|
||||||
|
"node_id": "RA_kwDOPzwRps4hlyC0",
|
||||||
|
"name": "Wholphin-armeabi-v7a.apk",
|
||||||
|
"label": "",
|
||||||
|
"uploader": {
|
||||||
|
"login": "github-actions[bot]",
|
||||||
|
"id": 41898282,
|
||||||
|
"node_id": "MDM6Qm90NDE4OTgyODI=",
|
||||||
|
"avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
|
||||||
|
"gravatar_id": "",
|
||||||
|
"url": "https://api.github.com/users/github-actions%5Bbot%5D",
|
||||||
|
"html_url": "https://github.com/apps/github-actions",
|
||||||
|
"followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
|
||||||
|
"following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
|
||||||
|
"gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
|
||||||
|
"starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
|
||||||
|
"subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
|
||||||
|
"organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
|
||||||
|
"repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
|
||||||
|
"events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
|
||||||
|
"received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
|
||||||
|
"type": "Bot",
|
||||||
|
"user_view_type": "public",
|
||||||
|
"site_admin": false
|
||||||
|
},
|
||||||
|
"content_type": "application/vnd.android.package-archive",
|
||||||
|
"state": "uploaded",
|
||||||
|
"size": 41771730,
|
||||||
|
"digest": "sha256:7a7a031104f42a8314e3deed4febb670b515687ac500026f59a997dae772d950",
|
||||||
|
"download_count": 502,
|
||||||
|
"created_at": "2026-09-14T14:23:34Z",
|
||||||
|
"updated_at": "2026-09-14T14:23:39Z",
|
||||||
|
"browser_download_url": "https://github.com/damontecres/Wholphin/releases/download/v1.0.8/Wholphin-armeabi-v7a.apk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://api.github.com/repos/damontecres/Wholphin/releases/assets/563552433",
|
||||||
|
"id": 563552433,
|
||||||
|
"node_id": "RA_kwDOPzwRps4hlyCx",
|
||||||
|
"name": "Wholphin-default-release-1.0.8-0-g7af7bc0a-59-arm64-v8a.apk",
|
||||||
|
"label": "",
|
||||||
|
"uploader": {
|
||||||
|
"login": "github-actions[bot]",
|
||||||
|
"id": 41898282,
|
||||||
|
"node_id": "MDM6Qm90NDE4OTgyODI=",
|
||||||
|
"avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
|
||||||
|
"gravatar_id": "",
|
||||||
|
"url": "https://api.github.com/users/github-actions%5Bbot%5D",
|
||||||
|
"html_url": "https://github.com/apps/github-actions",
|
||||||
|
"followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
|
||||||
|
"following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
|
||||||
|
"gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
|
||||||
|
"starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
|
||||||
|
"subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
|
||||||
|
"organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
|
||||||
|
"repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
|
||||||
|
"events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
|
||||||
|
"received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
|
||||||
|
"type": "Bot",
|
||||||
|
"user_view_type": "public",
|
||||||
|
"site_admin": false
|
||||||
|
},
|
||||||
|
"content_type": "application/vnd.android.package-archive",
|
||||||
|
"state": "uploaded",
|
||||||
|
"size": 46041302,
|
||||||
|
"digest": "sha256:77504857a15050beed9a8e589b70c29773b5e6a3c6ae76deec79c10702129755",
|
||||||
|
"download_count": 170,
|
||||||
|
"created_at": "2026-09-14T14:23:34Z",
|
||||||
|
"updated_at": "2026-09-14T14:23:39Z",
|
||||||
|
"browser_download_url": "https://github.com/damontecres/Wholphin/releases/download/v1.0.8/Wholphin-default-release-1.0.8-0-g7af7bc0a-59-arm64-v8a.apk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://api.github.com/repos/damontecres/Wholphin/releases/assets/563552428",
|
||||||
|
"id": 563552428,
|
||||||
|
"node_id": "RA_kwDOPzwRps4hlyCs",
|
||||||
|
"name": "Wholphin-default-release-1.0.8-0-g7af7bc0a-59-armeabi-v7a.apk",
|
||||||
|
"label": "",
|
||||||
|
"uploader": {
|
||||||
|
"login": "github-actions[bot]",
|
||||||
|
"id": 41898282,
|
||||||
|
"node_id": "MDM6Qm90NDE4OTgyODI=",
|
||||||
|
"avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
|
||||||
|
"gravatar_id": "",
|
||||||
|
"url": "https://api.github.com/users/github-actions%5Bbot%5D",
|
||||||
|
"html_url": "https://github.com/apps/github-actions",
|
||||||
|
"followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
|
||||||
|
"following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
|
||||||
|
"gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
|
||||||
|
"starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
|
||||||
|
"subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
|
||||||
|
"organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
|
||||||
|
"repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
|
||||||
|
"events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
|
||||||
|
"received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
|
||||||
|
"type": "Bot",
|
||||||
|
"user_view_type": "public",
|
||||||
|
"site_admin": false
|
||||||
|
},
|
||||||
|
"content_type": "application/vnd.android.package-archive",
|
||||||
|
"state": "uploaded",
|
||||||
|
"size": 41771730,
|
||||||
|
"digest": "sha256:7a7a031104f42a8314e3deed4febb670b515687ac500026f59a997dae772d950",
|
||||||
|
"download_count": 143,
|
||||||
|
"created_at": "2026-09-14T14:23:34Z",
|
||||||
|
"updated_at": "2026-09-14T14:23:39Z",
|
||||||
|
"browser_download_url": "https://github.com/damontecres/Wholphin/releases/download/v1.0.8/Wholphin-default-release-1.0.8-0-g7af7bc0a-59-armeabi-v7a.apk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://api.github.com/repos/damontecres/Wholphin/releases/assets/563552432",
|
||||||
|
"id": 563552432,
|
||||||
|
"node_id": "RA_kwDOPzwRps4hlyCw",
|
||||||
|
"name": "Wholphin-default-release-1.0.8-0-g7af7bc0a-59-x86_64.apk",
|
||||||
|
"label": "",
|
||||||
|
"uploader": {
|
||||||
|
"login": "github-actions[bot]",
|
||||||
|
"id": 41898282,
|
||||||
|
"node_id": "MDM6Qm90NDE4OTgyODI=",
|
||||||
|
"avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
|
||||||
|
"gravatar_id": "",
|
||||||
|
"url": "https://api.github.com/users/github-actions%5Bbot%5D",
|
||||||
|
"html_url": "https://github.com/apps/github-actions",
|
||||||
|
"followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
|
||||||
|
"following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
|
||||||
|
"gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
|
||||||
|
"starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
|
||||||
|
"subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
|
||||||
|
"organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
|
||||||
|
"repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
|
||||||
|
"events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
|
||||||
|
"received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
|
||||||
|
"type": "Bot",
|
||||||
|
"user_view_type": "public",
|
||||||
|
"site_admin": false
|
||||||
|
},
|
||||||
|
"content_type": "application/vnd.android.package-archive",
|
||||||
|
"state": "uploaded",
|
||||||
|
"size": 53184555,
|
||||||
|
"digest": "sha256:74ba578c1059968c10c0884cc290d74a84793d9b78713beb0805baef7fb0a53f",
|
||||||
|
"download_count": 29,
|
||||||
|
"created_at": "2026-09-14T14:23:34Z",
|
||||||
|
"updated_at": "2026-09-14T14:23:42Z",
|
||||||
|
"browser_download_url": "https://github.com/damontecres/Wholphin/releases/download/v1.0.8/Wholphin-default-release-1.0.8-0-g7af7bc0a-59-x86_64.apk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://api.github.com/repos/damontecres/Wholphin/releases/assets/563552634",
|
||||||
|
"id": 563552634,
|
||||||
|
"node_id": "RA_kwDOPzwRps4hlyF6",
|
||||||
|
"name": "Wholphin-default-release-1.0.8-0-g7af7bc0a-59.apk",
|
||||||
|
"label": "",
|
||||||
|
"uploader": {
|
||||||
|
"login": "github-actions[bot]",
|
||||||
|
"id": 41898282,
|
||||||
|
"node_id": "MDM6Qm90NDE4OTgyODI=",
|
||||||
|
"avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
|
||||||
|
"gravatar_id": "",
|
||||||
|
"url": "https://api.github.com/users/github-actions%5Bbot%5D",
|
||||||
|
"html_url": "https://github.com/apps/github-actions",
|
||||||
|
"followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
|
||||||
|
"following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
|
||||||
|
"gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
|
||||||
|
"starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
|
||||||
|
"subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
|
||||||
|
"organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
|
||||||
|
"repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
|
||||||
|
"events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
|
||||||
|
"received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
|
||||||
|
"type": "Bot",
|
||||||
|
"user_view_type": "public",
|
||||||
|
"site_admin": false
|
||||||
|
},
|
||||||
|
"content_type": "application/vnd.android.package-archive",
|
||||||
|
"state": "uploaded",
|
||||||
|
"size": 124985861,
|
||||||
|
"digest": "sha256:9e569dcc4207a7817b777ffa1885cc42d22a85b5a96824a56b8ddc0f34cccd69",
|
||||||
|
"download_count": 78,
|
||||||
|
"created_at": "2026-09-14T14:23:39Z",
|
||||||
|
"updated_at": "2026-09-14T14:23:49Z",
|
||||||
|
"browser_download_url": "https://github.com/damontecres/Wholphin/releases/download/v1.0.8/Wholphin-default-release-1.0.8-0-g7af7bc0a-59.apk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://api.github.com/repos/damontecres/Wholphin/releases/assets/563552644",
|
||||||
|
"id": 563552644,
|
||||||
|
"node_id": "RA_kwDOPzwRps4hlyGE",
|
||||||
|
"name": "Wholphin-x86_64.apk",
|
||||||
|
"label": "",
|
||||||
|
"uploader": {
|
||||||
|
"login": "github-actions[bot]",
|
||||||
|
"id": 41898282,
|
||||||
|
"node_id": "MDM6Qm90NDE4OTgyODI=",
|
||||||
|
"avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
|
||||||
|
"gravatar_id": "",
|
||||||
|
"url": "https://api.github.com/users/github-actions%5Bbot%5D",
|
||||||
|
"html_url": "https://github.com/apps/github-actions",
|
||||||
|
"followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
|
||||||
|
"following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
|
||||||
|
"gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
|
||||||
|
"starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
|
||||||
|
"subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
|
||||||
|
"organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
|
||||||
|
"repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
|
||||||
|
"events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
|
||||||
|
"received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
|
||||||
|
"type": "Bot",
|
||||||
|
"user_view_type": "public",
|
||||||
|
"site_admin": false
|
||||||
|
},
|
||||||
|
"content_type": "application/vnd.android.package-archive",
|
||||||
|
"state": "uploaded",
|
||||||
|
"size": 53184555,
|
||||||
|
"digest": "sha256:74ba578c1059968c10c0884cc290d74a84793d9b78713beb0805baef7fb0a53f",
|
||||||
|
"download_count": 58,
|
||||||
|
"created_at": "2026-09-14T14:23:39Z",
|
||||||
|
"updated_at": "2026-09-14T14:23:44Z",
|
||||||
|
"browser_download_url": "https://github.com/damontecres/Wholphin/releases/download/v1.0.8/Wholphin-x86_64.apk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://api.github.com/repos/damontecres/Wholphin/releases/assets/563552645",
|
||||||
|
"id": 563552645,
|
||||||
|
"node_id": "RA_kwDOPzwRps4hlyGF",
|
||||||
|
"name": "Wholphin.apk",
|
||||||
|
"label": "",
|
||||||
|
"uploader": {
|
||||||
|
"login": "github-actions[bot]",
|
||||||
|
"id": 41898282,
|
||||||
|
"node_id": "MDM6Qm90NDE4OTgyODI=",
|
||||||
|
"avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
|
||||||
|
"gravatar_id": "",
|
||||||
|
"url": "https://api.github.com/users/github-actions%5Bbot%5D",
|
||||||
|
"html_url": "https://github.com/apps/github-actions",
|
||||||
|
"followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
|
||||||
|
"following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
|
||||||
|
"gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
|
||||||
|
"starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
|
||||||
|
"subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
|
||||||
|
"organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
|
||||||
|
"repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
|
||||||
|
"events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
|
||||||
|
"received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
|
||||||
|
"type": "Bot",
|
||||||
|
"user_view_type": "public",
|
||||||
|
"site_admin": false
|
||||||
|
},
|
||||||
|
"content_type": "application/vnd.android.package-archive",
|
||||||
|
"state": "uploaded",
|
||||||
|
"size": 124985861,
|
||||||
|
"digest": "sha256:9e569dcc4207a7817b777ffa1885cc42d22a85b5a96824a56b8ddc0f34cccd69",
|
||||||
|
"download_count": 3215,
|
||||||
|
"created_at": "2026-09-14T14:23:39Z",
|
||||||
|
"updated_at": "2026-09-14T14:23:47Z",
|
||||||
|
"browser_download_url": "https://github.com/damontecres/Wholphin/releases/download/v1.0.8/Wholphin.apk"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tarball_url": "https://api.github.com/repos/damontecres/Wholphin/tarball/v1.0.8",
|
||||||
|
"zipball_url": "https://api.github.com/repos/damontecres/Wholphin/zipball/v1.0.8",
|
||||||
|
"body": "<!-- Release notes generated using configuration in .github/release.yml at v1.0.8 -->\r\n\r\n## What's Changed\r\n\r\nThis release adds more media types to the favorites and search pages! There are also many bug fixes.\r\n\r\n### New Features & Enhancements\r\n* Add more searchable types & choose what to search in https://github.com/damontecres/Wholphin/pull/1857\r\n* Update favorites page with more types in https://github.com/damontecres/Wholphin/pull/1864\r\n* Add controls to edit playlists in https://github.com/damontecres/Wholphin/pull/1927\r\n### UI/UX Improvements\r\n* Add button to navigate to random item in https://github.com/damontecres/Wholphin/pull/1916\r\n* Add wrap around scrolling to settings pages in https://github.com/damontecres/Wholphin/pull/1937\r\n### Bug Fixes\r\n* Fix white flash on app start in https://github.com/damontecres/Wholphin/pull/1909\r\n* Fix image loading issues related to VPN and/or Fire OS 6 in https://github.com/damontecres/Wholphin/pull/1910\r\n* Fixes to default home view options for music & videos in https://github.com/damontecres/Wholphin/pull/1926\r\n* Fixes to Now Playing page in https://github.com/damontecres/Wholphin/pull/1915\r\n* Fixes to season/episode search with duplicates in https://github.com/damontecres/Wholphin/pull/1946\r\n* Configure playback controls for RTL in https://github.com/damontecres/Wholphin/pull/1945\r\n* Fix person credits: movie release dates, full filmography, sorted order by @SergeiAK in https://github.com/damontecres/Wholphin/pull/1950\r\n* Fixes to `v1.0.7` in https://github.com/damontecres/Wholphin/pull/1953\r\n* Fix OS screensaver starting during playback with dim enabled in https://github.com/damontecres/Wholphin/pull/1956\r\n* Fix favorites not querying for people & fix restoring focus on search page for discover items in https://github.com/damontecres/Wholphin/pull/1961\r\n### Other changes\r\n* Update API level to Android 17 in https://github.com/damontecres/Wholphin/pull/1908\r\n* Localized formatting for season and episode display by @tal-sarid in https://github.com/damontecres/Wholphin/pull/1884\r\n* Consolidate sending media reports & app logs in https://github.com/damontecres/Wholphin/pull/1936\r\n* Update dependencies in https://github.com/damontecres/Wholphin/pull/1952\r\n* Increase memory for CI builds in https://github.com/damontecres/Wholphin/pull/1954\r\n* Translations 2026-09-12 in https://github.com/damontecres/Wholphin/pull/1957\r\n\r\n## New Contributors\r\n* @SergeiAK made their first contribution in https://github.com/damontecres/Wholphin/pull/1950\r\n\r\n**Full Changelog**: https://github.com/damontecres/Wholphin/compare/v1.0.7...v1.0.8",
|
||||||
|
"reactions": {
|
||||||
|
"url": "https://api.github.com/repos/damontecres/Wholphin/releases/388459926/reactions",
|
||||||
|
"total_count": 34,
|
||||||
|
"+1": 10,
|
||||||
|
"-1": 0,
|
||||||
|
"laugh": 0,
|
||||||
|
"hooray": 6,
|
||||||
|
"confused": 0,
|
||||||
|
"heart": 10,
|
||||||
|
"rocket": 8,
|
||||||
|
"eyes": 0
|
||||||
|
},
|
||||||
|
"mentions_count": 2
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue