diff --git a/.github/actions/native-build/action.yml b/.github/actions/native-build/action.yml index 309c6b59..770e552a 100644 --- a/.github/actions/native-build/action.yml +++ b/.github/actions/native-build/action.yml @@ -10,7 +10,7 @@ runs: - name: Load ffmpeg module cache id: cache_ffmpeg_module if: ${{ inputs.cache }} - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 with: path: | app/libs @@ -18,7 +18,7 @@ runs: - name: Load libmpv module cache id: cache_libmpv_module if: ${{ inputs.cache }} - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 with: path: | app/src/main/libs @@ -43,7 +43,7 @@ runs: ./build_ffmpeg_decoder.sh "${{ env.ANDROID_SDK_ROOT }}/ndk/${{ env.NDK_VERSION }}" - name: Save ffmpeg module cache id: cache_ffmpeg_module_save - uses: actions/cache/save@v4 + uses: actions/cache/save@v5 with: path: | app/libs @@ -75,7 +75,7 @@ runs: #ln -s libs jniLibs - name: Save libmpv module cache id: cache_libmpv_module_save - uses: actions/cache/save@v4 + uses: actions/cache/save@v5 with: path: | app/src/main/libs diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index 1153cc97..774dae38 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -6,9 +6,9 @@ runs: steps: # Setup the SDKs - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: - python-version: '3.12' + python-version: '3.14' - name: Setup JDK uses: actions/setup-java@v5 with: diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 539f0572..9583525d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -25,7 +25,7 @@ jobs: contents: write steps: - name: Checkout the code - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: fetch-depth: 0 # Need the tags to build - name: Setup diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 56513c4b..db31b32e 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -16,13 +16,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout the code - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: fetch-depth: 0 # Need the tags to build - name: Setup Python uses: actions/setup-python@v6 with: - python-version: '3.12' + python-version: '3.14' - name: Run pre-commit uses: pre-commit/action@v3.0.1 @@ -31,7 +31,7 @@ jobs: needs: pre-commit steps: - name: Checkout the code - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: fetch-depth: 0 # Need the tags to build - name: Setup @@ -49,13 +49,13 @@ jobs: - name: Tar build dirs run: | tar -czf build.tgz ./app/. - - uses: actions/upload-artifact@v5 + - uses: actions/upload-artifact@v6 id: upload-build-dirs with: name: "${{ env.BUILD_DIRS_ARTIFACT }}" path: build.tgz if-no-files-found: error - - uses: actions/upload-artifact@v5 + - uses: actions/upload-artifact@v6 with: name: APKs path: "${{ steps.buildapp.outputs.apks }}" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7c5c45f9..b63017b5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,7 +21,7 @@ jobs: contents: write steps: - name: Checkout the code - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: fetch-depth: 0 # Need the tags to build - name: Setup diff --git a/app/src/main/java/com/github/damontecres/wholphin/data/model/BaseItem.kt b/app/src/main/java/com/github/damontecres/wholphin/data/model/BaseItem.kt index 5703b682..3030b7d0 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/data/model/BaseItem.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/data/model/BaseItem.kt @@ -92,12 +92,16 @@ data class BaseItem( episodeCornerText = data.indexNumber?.let { "E$it" } ?: data.premiereDate?.let(::formatDateTime), - episdodeUnplayedCornerText = - data.indexNumber?.let { "E$it" } - ?: data.userData - ?.unplayedItemCount - ?.takeIf { it > 0 } - ?.let { abbreviateNumber(it) }, + episodeUnplayedCornerText = + if (type == BaseItemKind.SERIES || type == BaseItemKind.SEASON || type == BaseItemKind.BOX_SET) { + data.indexNumber?.let { "E$it" } + ?: data.userData + ?.unplayedItemCount + ?.takeIf { it > 0 } + ?.let { abbreviateNumber(it) } + } else { + null + }, quickDetails = buildAnnotatedString { val details = @@ -208,6 +212,6 @@ val BaseItemDto.aspectRatioFloat: Float? get() = width?.let { w -> height?.let { @Immutable data class BaseItemUi( val episodeCornerText: String?, - val episdodeUnplayedCornerText: String?, + val episodeUnplayedCornerText: String?, val quickDetails: AnnotatedString, ) diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/Formatting.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/Formatting.kt index e4f107b4..1842620a 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/Formatting.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/Formatting.kt @@ -167,19 +167,19 @@ fun listToDotString( strings.forEachIndexed { index, string -> append(string) if (index != strings.lastIndex) dot() - communityRating?.let { - dot() - append(String.format(Locale.getDefault(), "%.1f", it)) - appendInlineContent(id = "star") - } - criticRating?.let { - dot() - append("${it.toInt()}%") - if (it >= 60f) { - appendInlineContent(id = "fresh") - } else { - appendInlineContent(id = "rotten") - } + } + communityRating?.let { + dot() + append(String.format(Locale.getDefault(), "%.1f", it)) + appendInlineContent(id = "star") + } + criticRating?.let { + dot() + append("${it.toInt()}%") + if (it >= 60f) { + appendInlineContent(id = "fresh") + } else { + appendInlineContent(id = "rotten") } } } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverMovieDetailsHeader.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverMovieDetailsHeader.kt index 79ccb8dd..d8647132 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverMovieDetailsHeader.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverMovieDetailsHeader.kt @@ -65,7 +65,7 @@ fun DiscoverMovieDetailsHeader( ) { val padding = 4.dp val details = - remember(movie) { + remember(movie, rating) { buildList { movie.releaseDate?.let(::add) movie.runtime @@ -89,6 +89,7 @@ fun DiscoverMovieDetailsHeader( ?.releaseDates ?.firstOrNull() ?.certification + ?.takeIf { it.isNotNullOrBlank() } ?.let(::add) }.let { listToDotString( diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverSeriesDetails.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverSeriesDetails.kt index dcaed1c5..64748bd0 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverSeriesDetails.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/discover/DiscoverSeriesDetails.kt @@ -463,7 +463,7 @@ fun DiscoverSeriesDetailsHeader( ) { val padding = 4.dp val details = - remember(series) { + remember(series, rating) { buildList { series.firstAirDate?.let(::add) series.episodeRunTime diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetailsHeader.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetailsHeader.kt index 4d5f72d7..45e3ee54 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetailsHeader.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetailsHeader.kt @@ -113,6 +113,7 @@ fun MovieDetailsHeader( movie.data.people ?.filter { it.type == PersonKind.DIRECTOR && it.name.isNotNullOrBlank() } ?.joinToString(", ") { it.name!! } + ?.takeIf { it.isNotNullOrBlank() } } directorName diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/main/HomePage.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/main/HomePage.kt index c7c345c1..7b964fc7 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/main/HomePage.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/main/HomePage.kt @@ -494,7 +494,7 @@ fun HomePageCardContent( aspectRatio = ratio, imageType = imageType, imageContentScale = scale, - cornerText = item?.ui?.episdodeUnplayedCornerText, + cornerText = item?.ui?.episodeUnplayedCornerText, played = item?.data?.userData?.played ?: false, favorite = item?.favorite ?: false, playPercent = @@ -512,7 +512,7 @@ fun HomePageCardContent( aspectRatio = ratio, imageType = imageType, imageContentScale = scale, - cornerText = item?.ui?.episdodeUnplayedCornerText, + cornerText = item?.ui?.episodeUnplayedCornerText, played = item?.data?.userData?.played ?: false, favorite = item?.favorite ?: false, playPercent = diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 4ed1e15c..1a328c33 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -22,7 +22,7 @@ Potvrdit Pokračovat ve sledování Hodnocení kritiků - %.1f sekund + %.2f sekund Výchozí Smazat Zemřel @@ -453,4 +453,26 @@ Prokládané Color code programs MPV je nyní výchozím přehrávačem mimo HDR.\nToto můžete změnit v nastavení. + Styl HDR titulků + Průhlednost obrázku titulků + Jas + Kontrast + Sytost + Odstín + Červená + Zelená + Modrá + Rozostření + Uložit do alba + Přehrát prezentaci + Zastavit prezentaci + Na začátek + Žádné další fotky + Otočit vlevo + Otočit vpravo + Přiblížit + Oddálit + Trvání prezentace + Přehrávat videa během prezentace + Odesílat protokol informací o médiích serveru diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 03038fc8..eddd471d 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -371,7 +371,7 @@ Im Trend Starten der Spracherkennung fehlgeschlagen Zurück wählen um abzubrechen - MPV ist jetzt der Standard-Player, außer für HDR.\nDas kannst du in den Einstellungen ändern. + MPV ist jetzt der Standard-Player, außer für HDR.\nDu kannst das in den Einstellungen ändern. Sprachsuche Sprechen, um zu suchen Ignoriert geräte kompatibilität @@ -384,4 +384,37 @@ Hintergrundstil Bildwiederholraten-Anpassung Keine Spracheingabe erkannt + Spracherkennungsfehler + Aufnahme-Fehler + Keine Spracherkennung + Spracherkennung beschäftigt + Spracherkennung ist abgelaufen + Videobereich + Video-Bereichstyp + Farbkorrektur-Software + Spur-Auswahl löschen + Seerr-Server entfernen + AV1 Software-Dekodierung + anamorph + Farbraum + Farbübertragung + Primärfarben + Pixelformat + Referenzbilder + Randgröße + Auflösungswechsel + Gaststars + Ab Anfang + keine Fotos + Links Rotieren + Rechts Rotieren + Rot + Grün + Blau + Verschwommen + Speichern für Album + Diashow abspielen + Diashow anhalten + Helligkeit + Kontrast diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 4d7b297d..6159ff33 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -171,35 +171,35 @@ Επιπρόσθετα Άλλο - + Παρασκήνια - + Αποσπάσματα - + Διαγραμμένες σκηνές - + Συνεντεύξεις - + Σκηνές - + Δείγματα - + Χαρακτηριστικά - + Αυτόματος έλεγχος για ενημερώσεις Καθυστέρηση πριν την έναρξη του επόμενου diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 35d7e885..31445b5a 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -24,11 +24,11 @@ Favoritos Tamaño Géneros - Página de inicio + Inicio Inmediato Intro #ABCDEFGHIJKLMNOPQRSTUVWXYZ - Catálogo + Biblioteca Información de licencia Tasa de bits máxima Más @@ -46,14 +46,14 @@ Agregado recientemente en %1$s Agregado recientemente Recomendado - Reiniciarlo + Reiniciar Reanudar Guardar Buscar Buscando… Seleccionar servidor - Seleccionar usuario + Seleccionar Usuario Nombre Aleatorio Estudios @@ -65,15 +65,15 @@ Cambiar Tráiler - Tráilers - + Tráiler + Tráilers Series Interfaz Versión - Video - Videos + Vídeo + Vídeos %1$d años Reproducir con transcodificación Mostrar reloj @@ -85,8 +85,8 @@ Duración Extras - Otros - + Otro + Otros Configuración avanzada @@ -97,19 +97,19 @@ Configuración Calificación de la crítica Resumen - Grabar programa + Grabar Programa Grabar serie Quitar de favoritos Mostrar información de depuración Mostrar Aleatorio Saltar - Ordenar por fecha de añadido del episodio + Ordenar por fecha de inclusión del episodio Acerca de Grabaciones activas Cancelar grabación Cancelar grabación de la serie - Borrar la caché de imágenes + Borrar caché de imágenes Valoración de la comunidad ¡Se ha producido un error! Pulsa el botón para enviar los registros a tu servidor. Predeterminado @@ -119,41 +119,41 @@ Servidores detectados Descargando… - Introduce la IP o la URL del servidor - Error al cargar la colección %1$s - Pista forzada + Introduce la IP o URL del servidor, incluido el puerto + Error cargando la colección %1$s + Forzado Ir a la serie Ir a - Ocultar los controles de reproducción + Ocultar controles de reproducción Ocultar información de depuración Ocultar - Televisión en directo + TV en vivo Cargando… - ¿Marcar toda la serie como vista? - ¿Marcar toda la serie como no reproducida? + ¿Marcar la serie completa como vista? + ¿Marcar la serie completa como no vista? Marcar como no visto Marcar como visto Más como esto Películas - A continuación + Siguiente Sin datos - No hay grabaciones programadas - No hay ninguna actualización disponible + Sin grabaciones programadas + No hay actualizaciones disponibles Ruta - Recuento de reproducciones + Reproducciones Reproducir desde aquí Mostrar información de depuración de reproducción Velocidad de reproducción Configuración del perfil de usuario Grabado recientemente Lanzado recientemente - Mostrar \"A continuación\" - Fecha de añadido - Ordenar por fecha de reproducción - Ordenar por fecha de lanzamiento - La descarga está tardando demasiado; puede que necesites reiniciar la reproducción - Mejor valoradas sin ver - Programación del DVR + Mostrar “Siguiente” + Fecha de inclusión + Fecha de reproducción + Fecha de lanzamiento + La descarga está tardando demasiado, es posible que debas reiniciar la reproducción + Mejor calificados no vistos + Programación DVR Guía Temporada Temporadas @@ -162,15 +162,15 @@ Escala de vídeo Ver en directo Orden de emisión - Poner la fuente en cursiva + Cursiva - Detrás de las cámaras + Detrás de cámaras - Canciones principales - + Canción principal + Canciones principales @@ -181,26 +181,26 @@ Clip Clips - + - Escenas eliminadas - + Escena eliminada + Escenas eliminadas - Entrevistas - + Entrevista + Entrevistas - Escenas - + Escena + Escenas - Fragmentos - + Muestra + Muestras @@ -209,7 +209,7 @@ - Cortos + CortoCortos @@ -233,32 +233,32 @@ %d segundos - El dispositivo es compatible con AC3/Dolby Digital - Comprobar actualizaciones automáticamente - Retraso antes de reproducir lo siguiente - Reproducir automáticamente lo siguiente - Comprobar si hay actualizaciones - Se aplica solo a series de televisión - + El dispositivo soporta AC3/Dolby Digital + Buscar actualizaciones automáticamente + Retraso antes de reproducir el siguiente + Reproducción automática del siguiente + Buscar actualizaciones + Aplica solo a series + Reproducción directa de subtítulos ASS Reproducción directa de subtítulos PGS Convertir siempre a estéreo - Usar módulo de decodificación FFmpeg - Escala predeterminada del contenido + Usar módulo decodificador FFmpeg + Escala de contenido predeterminada Instalar actualización - Máximo de elementos por fila en inicio + Elementos máximos en filas de inicio Elige los elementos predeterminados que se mostrarán; los demás permanecerán ocultos - Personalizar los elementos del panel de navegación + Personalizar elementos del panel de navegación Clic para cambiar de página - Cambiar las páginas del menú lateral al recibir el foco + Cambiar páginas del menú al enfocar Protección contra inactividad Anulaciones de reproducción - Recordar las pestañas seleccionadas - Permitir volver a ver en “A continuación” + Recordar pestañas seleccionadas + Permitir volver a ver en “Siguiente” Pasos de la barra de búsqueda Útil para depuración - Enviar los registros de la app al servidor actual - Intentará enviarlos al último servidor conectado + Enviar registros de la app al servidor actual + Intentará enviarse al último servidor conectado Enviar informes de fallos Retroceder al reanudar la reproducción Retroceder @@ -266,22 +266,22 @@ Avanzar Comportamiento al saltar la intro Comportamiento al saltar el outro - Comportamiento al saltar los avances - Comportamiento al saltar el resumen + Comportamiento al saltar avances + Comportamiento al saltar resumen Actualización disponible - URL para comprobar actualizaciones de la aplicación + URL usada para comprobar actualizaciones URL de actualización Tamaño de fuente - Color de la fuente - Opacidad de la fuente + Color de fuente + Opacidad de fuente Estilo del borde Color del borde Opacidad del fondo Estilo del fondo - Estilo de los subtítulos + Estilo de subtítulos Color del fondo Restablecer - Fuente en negrita + Negrita Motor de reproducción MPV: Usar decodificación por hardware Desactívalo si experimentas fallos @@ -303,7 +303,7 @@ Fuente Fondo Clasificación parental - Termina en %1$s + Termina a las %1$s Introduzca la dirección del servidor No se encontraron servidores Información multimedia @@ -385,13 +385,13 @@ Error de reconocimiento de voz Se requiere permiso para el micrófono Error de red - Tiempo de espera agotado de red + Tiempo de espera de red agotado No se reconoce el habla Reconocimiento de voz ocupado Error de servidor No se detecta voz Error desconocido - No se pudo iniciar el reconocimiento de voz + Error al iniciar el reconocimiento de voz Se agotó el tiempo de espera para el reconocimiento de voz Reintentar Cambio de resolución @@ -421,4 +421,5 @@ Próximos programas de televisión Solicitar en 4K Decodificación por software AV1 + MPV es ahora el reproductor por defecto para HDR.\nPuedes cambiar esto en los ajustes. diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 765c5fe2..482554a0 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -22,7 +22,7 @@ Kinnita Jätka vaatamist Kriitikute hinnang - %.1f sekundit + %.2f sekundit Vaikimisi Kustuta Surmaaeg @@ -406,4 +406,25 @@ Proovi uuesti AV1 tarkvaraline dekodeerimine MPV on nüüd vaikimisi meediaesitaja kõige v.a. HDR-i jaoks.\nSeda saad muuta seadistustest. + HDR-i tiitrite stiil + Pildiliste tiitrite läbipaistvus + Eredus + Kontrastsus + Küllastus + Värvitoon + Punane + Roheline + Sinine + Hägustamine + Salvesta albumi jaoks + Näita slaidiesitlust + Peata slaidiesitlus + Alguses + Rohkem fotosid pole + Pööra vasakule + Pööra paremale + Suumi sisse + Suumi välja + Slaidiesitluse kestus + Slaidiesitluse ajal esita videoid diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index a53c580f..c131a379 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -422,4 +422,25 @@ Demande en 4K Décodage logiciel AV1 MPV est désormais le lecteur par défaut, sauf pour HDR.\nVous pouvez modifier cela dans les paramètres. + Style de sous-titres HDR + opacité du sous-titre de l\'image + Luminosité + Contraste + Saturation + Teinte + Rouge + Vert + Bleu + Flou + Enregistrer pour l\'album + Lire le diaporama + Arrêter le diaporama + Au début + Plus de photos + Faire pivoter à gauche + Faire pivoter à droite + Zoomer + Dézoomer + Durée du diaporama + Diffuser des vidéos pendant le diaporama diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index c1bf5242..03fd5a93 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -23,7 +23,7 @@ Konfirmasi Lanjutkan menonton Penilaian Kritis - %.1f detik + %.2f detik Bawaan Hapus Meninggal @@ -389,4 +389,27 @@ Minta Tertunda Dekode perangkat lunak AV1 + MPV sekarang adalah pemutar bawaan kecuali konten HDR.\nPerubahan dapat dilakukan di menu pengaturan. + Gaya subtitel HDR + Opasitas subtitel gambar + Kecerahan + Kontras + Saturasi + Hue + Merah + Hijau + Biru + Kabur + Simpan ke album + Putar tayangan slide + Hentikan tayangan slide + Di awal + Tidak ada foto lagi + Putar kiri + Putar kanan + Perbesar + Perkecil + Durasi tayangan slide + Putar video selama tayangan slide + Kirim log info media ke server diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 15a70f3d..e5aa51b4 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -104,7 +104,7 @@ Guida TV Mostra Ricerca in corso… - %.1f secondi + %.2f secondi Commerciale Valutazione community Valutazione della critica @@ -422,4 +422,26 @@ Riconoscimento vocale scaduto Decodifica software AV1 MPV è ora il lettore predefinito, eccetto per i contenuti HDR.\nPuoi modificarlo nelle impostazioni. + Stile sottotitoli HDR + Opacità sottotitoli immagine + Luminosità + Contrasto + Saturazione + Tinta + Rosso + Verde + Blu + Sfocatura + Salva per l\'album + Riproduci slideshow + Ferma slideshow + Dall\'inizio + Nessun\'altra foto + Ruota a sinistra + Ruota a destra + Ingrandisci + Rimpicciolisci + Durata slideshow + Riproduci video durante lo slideshow + Invia log informazioni media al server diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 5b39797f..d892ebf3 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -122,7 +122,7 @@ Trailer Trailere - + DVR-plan Programoversikt @@ -155,47 +155,47 @@ Ekstramateriale Annet - + Bak kulissene - + Temasanger - + Temavideoer - + Klipp - + Slettede scener - + Intervjuer - + Scener - + Smakebiter - + Bakomfilmer - + Kortfilmer - + %s nedlasting diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 69a8f90a..53cd49fc 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -45,9 +45,9 @@ Zwiastun Zwiastuny - - - + + + Potwierdź Data Wydania @@ -122,21 +122,21 @@ Wciśnij środek by pauzować/wznowić Wywiady - - - + + + Sceny - - - + + + Czołówki - - - + + + Utwórz nową playliste Dodaj do playlisty @@ -182,9 +182,9 @@ Czcionka kursywy Za kulisami - - - + + + Ustawienia zaawansowane Sprawdź dostępność aktualizacji @@ -270,15 +270,15 @@ Dodatki Inne - - - + + + Usunięte sceny - - - + + + Naciśnij by zmienić stronę Przydatne do debugowania diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 3205d05d..c2ee4aec 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -13,7 +13,7 @@ Colecção Colecções Confirmar - %.1f segundos + %.2f segundos Padrão Eliminar Realizado por %1$s @@ -422,4 +422,33 @@ Tentar novamente Decodificação de AV1 por software O MPV é agora o reprodutor padrão, exceto para HDR.\nPode alterar esta configuração nas definições. + + %s Dia + %s Dias + %s Dias + + Estilo de legenda HDR + Transparência da legenda da imagem + Brilho + Contraste + Saturação + Matiz + Vermelho + Verde + Azul + Desfoque + Guardar para o álbum + Reproduzir slides + Parar slides + No início + Não há mais fotos + Rodar para a esquerda + Rodar para a direita + Ampliar + Diminuir + Duração dos slides + Reproduzir vídeos durante a apresentação de slides + Enviar registo de informações de mídia para o servidor + Sem limite + Dias máximos em \'A Seguir\' diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml new file mode 100644 index 00000000..745da44f --- /dev/null +++ b/app/src/main/res/values-tr/strings.xml @@ -0,0 +1,439 @@ + + + Hakkında + Etkin kayıtlar + Favori + Sunucu Ekle + Kullanıcı Ekle + Ses + Doğum yeri + Bit hızı + Doğum Tarihi + Kaydı iptal et + Dizi kaydını iptal et + İptal + Bölümler + Seç: %1$s + Resim önbelleğini temizle + Koleksiyon + Koleksiyonlar + Reklam + Topluluk puanı + Bir hata oluştu! Günlükleri sunucunuza göndermek için düğmeye basın. + Onayla + İzlemeye devam et + Eleştirmen puanı + %.2f saniye + Varsayılan + Sil + Ölüm Tarihi + Yönetmen %1$s + Yönetmen + Devre dışı + Keşfedilen sunucular + + İndiriliyor… + Etkin + Bitiş saati %1$s + Sunucu IP adresini veya URL\'sini girin + Sunucu adresini girin + Bölümler + %1$s koleksiyonu yüklenirken bir hata oluştu + Harici + Favoriler + Boyut + Zorunlu + Türler + Dizilere git + Git + Oynatma kontrollerini gizle + Hata ayıklama bilgilerini gizle + Gizle + Ana Ekran + Hemen + İntro + #ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ + Kütüphane + Lisans bilgileri + Canlı TV + Yükleniyor… + Tüm diziyi izlendi olarak işaretle? + Tüm diziyi izlenmedi olarak işaretle? + İzlenmedi olarak işaretle + İzlendi olarak işaretle + Maksimum bit hızı + Benzerleri + Diğer + + Filmler + + + Ad + Sıradaki bölümler + Veri yok + Sonuç bulunamadı + Sunucu bulunamadı + Planlanmış kayıt yok + Güncelleme mevcut değil + Hiçbiri + Sadece zorunlu altyazılar + Kapanış jeneriği + Yol + + Kişiler + + + Oynatma Sayısı + Buradan oynat + Oynat + Oynatma hata ayıklama bilgilerini göster + Oynatma hızı + Oynatma + Oynatma Listesi + Oynatma Listeleri + Önizleme + Kullanıcı Profili Ayarları + Kuyruk + Özet + %1$s kütüphanesine son eklenenler + Son eklenen + Son Kaydedilenler + Son Çıkanlar + Önerilenler + Programı Kaydet + Diziyi Kaydet + Favorilerden kaldır + Yeniden Başlat + Sürdür + Kaydet + + Ara + Aranıyor… + Sesli arama + Başlatılıyor + Aramak için konuşun + İşleniyor + İptal etmek için geri tuşuna basın + Ses kayıt hatası + Ses tanıma hatası + Mikrofon izni gerekiyor + Ağ hatası + Ağ zaman aşımı + Ses tanınmadı + Ses tanıma meşgul + Sunucu hatası + Ses algılanamadı + Bilinmeyen hata + Ses tanıma başlatılamadı + Ses tanıma zaman aşımına uğradı + Yeniden deneyin + Sunucu Seç + Kullanıcı Seç + Hata ayıklama bilgisini göster + Sıradakini göster + Göster + Karıştır + Atla + Eklenme tarihi + Bölüm Eklenme Tarihi + Oynatma Tarihi + Yayınlanma Tarihi + Ad + Rastgele + Yapım Stüdyoları + Gönder + İndirme işlemi uzun sürüyor, oynatmayı yeniden başlatmanız gerekebilir + Altyazı + Altyazılar + Öneriler + Sunucu değiştir + Değiştir + İzlenmemiş En İyiler + Fragman + + Fragmanlar + + + Kayıt Takvimi + Rehber + Sezon + Sezonlar + + Diziler + + + Arayüz + Bilinmiyor + Güncellemeler + Sürüm + Video Ölçeği + Video + Videolar + Canlı izle + %1$d yaşında + Kod dönüştürerek oynat + Medya Bilgisi + Saati göster + Yayınlanma Sırası + Yeni oynatma listesi oluştur + Oynatma listesine ekle + Tek tıkla duraklat + Durdur/Oynat için orta tuşa basın + Metni italik yap + Font + Arka plan + Başarılı + Yaş Derecelendirmesi + Süre + Ekstralar + + Diğer Ekstralar + + + + Sahne Arkası + + + + Tema şarkıları + + + + Tema Videoları + + + + Klipler + + + + Silinmiş Sahneler + + + + Röportajlar + + + + Sahneler + + + + Örnekler + + + + Tanıtımlar + + + + Kısa Videolar + + + + %s indirme + %s indirilenler + + + %d saat + %d saat + + + %d öğe + %d öğe + + + %d saniye + %d saniye + + AC3/Dolby Digital desteği + Gelişmiş Ayarlar + Gelişmiş Arayüz + Uygulama teması + Güncellemeleri otomatik denetle + Sıradakini oynatma gecikmesi + Sıradakini otomatik oynat + Güncellemeleri kontrol et + Yalnızca diziler için geçerlidir + + ASS altyazıları doğrudan oynat + PGS altyazıları doğrudan oynat + Her zaman Stereo\'ya dönüştür + FFmpeg kod çözücü kullan + Varsayılan içerik ölçeği + Güncellemeyi yükle + Yüklü sürüm + Ana sayfa satırlarında maksimum öge sayısı + Gösterilecek varsayılan ögeleri seçin, diğerleri gizlenecektir + Yan Menü Ögelerini Düzenle + Sayfalar arası geçiş için tıklayın + Odaklanınca yan menü sayfalarını değiştir + Uyuyakalma Koruması + Tema müziğini oynat + Oynatmayı geçersiz kılanlar + Seçili sekmeleri hatırla + Sıradaki bölümlerde tekrar izlemeyi etkinleştir + İlerleme çubuğu adımları + Hata ayıklama için yararlıdır + Uygulama günlüklerini mevcut sunucuya gönder + Son bağlanan sunucuya gönderilmeye çalışılacak + Hata raporlarını gönder + Ayarlar + Devam ederken videoyu geri sar + Geri atla + Reklam geçme davranışı + İleri atla + İntro atlama davranışı + Kapanış jeneriği atlama davranışı + Önizlemeyi atlama davranışı + Özet atlama davranışı + Güncelleme mevcut + Uygulama güncellemelerini kontrol etmek için kullanılan URL + Güncelleme URL\'si + Yazı tipi boyutu + Yazı tipi rengi + Yazı tipi opaklığı + Kenar stili + Kenar rengi + Arka plan opaklığı + Arka plan stili + Altyazı stili + Arka plan rengi + Sıfırla + Kalın yazı tipi + Oynatıcı motoru + MPV: Donanım kod çözmeyi kullan + Çökme sorunu yaşıyorsanız devre dışı bırakın + MPV Ayarları + ExoPlayer Ayarları + Bölümü atla + Reklamları atla + Önizlemeyi atla + Özeti atla + Kapanış jeneriğini atla + İntroyu atla + Oynatıldı + Filtre + Yıl + Dönem + Sil + MPV: gpu-next kullan + mpv.conf dosyasını düzenle + Değişiklikleri iptal et? + Kenar boşluğu + Ayrıntılı günlükleme + PIN girin + Otomatik oturum aç + Sunucu üzerinden giriş yap + Onaylamak için orta tuşa basın + Profil için PIN iste + PIN\'i onayla + Hatalı + PIN en az 4 haneli olmalıdır + PIN kaldırılacak + Görüntü disk önbellek boyutu (MB) + Görünüm seçenekleri + Sütun sayısı + Öğe aralığı + En Boy Oranı + Detayları göster + Görsel türü + Dolby Vision + Dolby Atmos + + Konuk oyuncular + Kenar boyutu + Yenileme hızı değiştirme + Otomatik + Kullanıcı adı/şifre kullan + Oturum aç + Genel + Kapsayıcı + Başlık + Codec + Profil + Düzey + Çözünürlük + Anamorfik + Geçmeli + Kare hızı + Bit derinliği + Video aralığı + Video aralık türü + Renk alanı + Renk aktarımı + Renk ön seçimleri + Piksel biçimi + Referans kareler + NAL + Dil + Düzen + Kanallar + Örnekleme hızı + AVC + Evet + Hayır + SDR + HDR + HDR10 + HDR10+ + HLG + bit + Hz + Başlıkları göster + Tekrarla + Favori kanalları en başta göster + Kanalları son izlenene göre sırala + Programları türüne göre renklendir + Altyazı gecikmesi + Görsel arka plan stili + Çözünürlük değiştirme + Lokal + Fragmanı oynat + Fragman yok + Parça seçimlerini temizle + DTS:X + DTS:HD + TrueHD + DD + DD+ + DTS + Dolby Vision Profil 7\'yi doğrudan oynat + Cihaz uyumluluk kontrollerini yoksay + Keşfet + İstek + Beklemede + Seerr entegrasyonu + Seerr Sunucusunu Kaldır + Seerr sunucusu eklendi + Şifre + Kullanıcı adı + URL + Popüler + Yaklaşan Filmler + Yaklaşan Diziler + 4K olarak iste + AV1 yazılımsal kod çözme + HDR içerikler hariç varsayılan oynatıcı artık MPV. \nBu ayarı ayarlar bölümünden değiştirebilirsiniz. + HDR Altyazı Stili + Altyazı Arka Plan Matlığı + Parlaklık + Kontrast + Doygunluk + Ton + Kırmızı + Yeşil + Mavi + Bulanıklık + Albüme Kaydet + Slayt Gösterisini Oynat + Slayt Gösterisini Durdur + En baştan + Daha fazla fotoğraf yok + Sola döndür + Sağa döndür + Yakınlaştır + Uzaklaştır + Slayt Gösterisi Süresi + Slayt gösterisi sırasında videoları oynat + diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index dce8332a..ea7e0323 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -23,7 +23,7 @@ Підтвердити Продовжити перегляд Оцінка критиків - %.1fсекунд + %.1f секунд За замовчуванням Видалити Помер @@ -453,4 +453,25 @@ Запит в 4К Програмне декодування AV1 MPV тепер є плеєром за замовчуванням, за винятком для HDR.\nВи можете змінити це в налаштуваннях. + HDR субтитри + Прозорість зображення заголовку + Яскравість + Контрастність + Насичення + Відтінок + Червоний + Зелений + Синій + Розмиття + Зберегти до альбому + Відтворити слайд-шоу + Зупинити слайд-шоу + На початок + Фото більше немає + Повернути ліворуч + Повернути праворуч + Збільшити + Зменшити + Тривалість слайд-шоу + Відтворення відео під час слайд-шоу diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 10a25eac..b08bfeb5 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -23,7 +23,7 @@ 确认 继续观看 影评人评分 - %.1f 秒 + %.2f 秒 默认 删除 去世 @@ -231,10 +231,10 @@ 将尝试发送到最后连接的服务器 发送崩溃报告 设置 - 恢复播放时快退 - 快退 + 恢复播放时自动向后跳过 + 向后跳过 跳过广告方式 - 快进 + 向前跳过 跳过片头方式 跳过片尾方式 跳过预览方式 @@ -390,4 +390,31 @@ 重试 AV1 软件解码 除 HDR 视频外,mpv 现在是默认播放器。\n您可以在设置中更改此设置。 + HDR 字幕样式 + 图像字幕不透明度 + 亮度 + 对比度 + 饱和度 + 色调 + 红色 + 绿色 + 蓝色 + 模糊 + 保存到相册 + 播放幻灯片 + 停止幻灯片 + 回到开头 + 没有更多照片 + 向左旋转 + 向右旋转 + 放大 + 缩小 + 幻灯片时长 + 幻灯片播放期间播放视频 + 将媒体信息日志发送到服务器 + + %s 天 + + 无限制 + 即将播放中的最大天数 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index fd54746c..330f5dd0 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -119,10 +119,10 @@ 更新的 URL 字體大小 字體顏色 - 字體透明度 + 字體不透明度 邊框樣式 邊框顏色 - 背景透明度 + 背景不透明度 背景樣式 字幕樣式 背景顏色 @@ -160,7 +160,7 @@ 確認 繼續觀看 影評人評分 - %.1f 秒 + %.2f 秒 預設 刪除 去世 @@ -389,4 +389,26 @@ 語音辨識逾時 重試 AV1 軟體解碼 + 除了 HDR 影片外,MPV 已成為預設播放器。 \n您可以在設定中變更此設定。 + HDR 字幕樣式 + 對比 + 飽和度 + 色調 + 紅色 + 綠色 + 藍色 + 模糊 + 存為相簿 + 播放幻燈片 + 停播幻燈片 + 從頭開始 + 已無更多照片 + 向左旋轉 + 向右旋轉 + 放大 + 縮小 + 幻燈片播放時間 + 幻燈片播放時播放影片 + 圖形字幕不透明度 + 亮度 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 32a80878..92c7835c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,9 +15,9 @@ ksp = "2.3.5" coreKtx = "1.17.0" appcompat = "1.7.1" composeBom = "2026.01.01" -mockk = "1.14.7" +mockk = "1.14.9" robolectric = "4.16.1" -multiplatformMarkdownRenderer = "0.39.1" +multiplatformMarkdownRenderer = "0.39.2" okhttpBom = "5.3.2" programguide = "1.6.0" slf4j2Timber = "1.2" @@ -35,14 +35,14 @@ material3AdaptiveNav3 = "1.0.0-alpha03" protobuf = "0.9.6" datastore = "1.2.0" kotlinx-serialization = "1.10.0" -protobuf-javalite = "4.33.4" +protobuf-javalite = "4.33.5" hilt = "2.58" room = "2.8.4" preferenceKtx = "1.2.1" tvprovider = "1.1.0" workRuntimeKtx = "2.11.1" paletteKtx = "1.0.0" -kotlinxCoroutinesTest = "1.7.3" +kotlinxCoroutinesTest = "1.10.2" coreTesting = "2.2.0" openapi-generator = "7.19.0" diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e708b1c0..1b33c55b 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fbff848d..aaaabb3c 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ -#Sat Sep 20 16:26:22 EDT 2025 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.4-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 4f906e0c..23d15a93 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -15,81 +15,115 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar +CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -98,88 +132,120 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index ac1b06f9..5eed7ee8 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,8 +13,10 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +27,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,13 +43,13 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -56,32 +59,34 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar +set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/renovate.json b/renovate.json index dc6fbf78..03e6a404 100644 --- a/renovate.json +++ b/renovate.json @@ -28,7 +28,7 @@ { "groupName": "AGP", "matchPackageNames": [ - "com.android.application:**" + "com.android.application**" ] }, {