feat: show movie size in extra info and improve size formatting (#367)

This commit is contained in:
Yash Garg 2023-05-14 19:59:40 +05:30 committed by GitHub
parent 815e338ddc
commit 7d86f46fa3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 49 additions and 13 deletions

View file

@ -4,6 +4,7 @@ import android.app.DownloadManager
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.text.format.Formatter
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
@ -267,6 +268,9 @@ class MovieFragment : Fragment() {
private fun bindUiStateNormal(uiState: MovieViewModel.UiState.Normal) { private fun bindUiStateNormal(uiState: MovieViewModel.UiState.Normal) {
uiState.apply { uiState.apply {
val size = item.sources.getOrNull(0)?.size?.let {
Formatter.formatFileSize(requireContext(), it)
}
val canDownload = val canDownload =
item.canDownload && item.sources.any { it.type == FindroidSourceType.REMOTE } item.canDownload && item.sources.any { it.type == FindroidSourceType.REMOTE }
val canDelete = item.sources.any { it.type == FindroidSourceType.LOCAL } val canDelete = item.sources.any { it.type == FindroidSourceType.LOCAL }
@ -371,6 +375,8 @@ class MovieFragment : Fragment() {
binding.info.audioGroup.isVisible = audioString.isNotEmpty() binding.info.audioGroup.isVisible = audioString.isNotEmpty()
binding.info.subtitles.text = subtitleString binding.info.subtitles.text = subtitleString
binding.info.subtitlesGroup.isVisible = subtitleString.isNotEmpty() binding.info.subtitlesGroup.isVisible = subtitleString.isNotEmpty()
size?.let { binding.info.size.text = it }
binding.info.sizeGroup.isVisible = size != null
} }
binding.info.description.text = item.overview binding.info.description.text = item.overview

View file

@ -8,6 +8,28 @@
android:layout_marginHorizontal="24dp" android:layout_marginHorizontal="24dp"
android:layout_marginBottom="12dp"> android:layout_marginBottom="12dp">
<TextView
android:id="@+id/size_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="@string/size"
android:textAppearance="@style/TextAppearance.Material3.BodyMedium"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/size"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.Material3.BodyMedium"
android:visibility="gone"
app:layout_constraintBaseline_toBaselineOf="@id/size_title"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@id/titles_barrier"
tools:text="42.42 TB" />
<TextView <TextView
android:id="@+id/video_title" android:id="@+id/video_title"
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -17,7 +39,7 @@
android:textAppearance="@style/TextAppearance.Material3.BodyMedium" android:textAppearance="@style/TextAppearance.Material3.BodyMedium"
android:visibility="gone" android:visibility="gone"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toBottomOf="@id/size" />
<TextView <TextView
android:id="@+id/video" android:id="@+id/video"
@ -123,7 +145,6 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/genres" /> app:layout_constraintTop_toBottomOf="@id/genres" />
<TextView <TextView
android:id="@+id/director" android:id="@+id/director"
android:layout_width="0dp" android:layout_width="0dp"
@ -162,6 +183,14 @@
app:barrierMargin="8dp" app:barrierMargin="8dp"
app:constraint_referenced_ids="video_title,audio_title,subtitles_title,genres_title,director_title,writers_title" /> app:constraint_referenced_ids="video_title,audio_title,subtitles_title,genres_title,director_title,writers_title" />
<androidx.constraintlayout.widget.Group
android:id="@+id/size_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:constraint_referenced_ids="size_title, size"
tools:visibility="visible" />
<androidx.constraintlayout.widget.Group <androidx.constraintlayout.widget.Group
android:id="@+id/video_group" android:id="@+id/video_group"
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -207,5 +236,4 @@
android:visibility="visible" android:visibility="visible"
app:constraint_referenced_ids="writers_title, writers" /> app:constraint_referenced_ids="writers_title, writers" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -5,6 +5,7 @@ import android.content.Context
import android.net.Uri import android.net.Uri
import android.os.Environment import android.os.Environment
import android.os.StatFs import android.os.StatFs
import android.text.format.Formatter
import androidx.core.net.toUri import androidx.core.net.toUri
import dev.jdtech.jellyfin.AppPreferences import dev.jdtech.jellyfin.AppPreferences
import dev.jdtech.jellyfin.core.R as CoreR import dev.jdtech.jellyfin.core.R as CoreR
@ -66,8 +67,8 @@ class DownloaderImpl(
-1, -1,
UiText.StringResource( UiText.StringResource(
CoreR.string.not_enough_storage, CoreR.string.not_enough_storage,
source.size.div(1000000), Formatter.formatFileSize(context, source.size),
stats.availableBytes.div(1000000) Formatter.formatFileSize(context, stats.availableBytes)
) )
) )
} }

View file

@ -165,7 +165,7 @@
<string name="storage_unavailable">La ubicación de almacenamiento no está disponible</string> <string name="storage_unavailable">La ubicación de almacenamiento no está disponible</string>
<string name="internal">Interno</string> <string name="internal">Interno</string>
<string name="external">Externo</string> <string name="external">Externo</string>
<string name="not_enough_storage">Éste elemento requiere %d MBs de almacenamiento pero solo hay disponible %d MBs</string> <string name="not_enough_storage">Éste elemento requiere %s de almacenamiento pero solo hay disponible %s</string>
<string name="video">Video</string> <string name="video">Video</string>
<string name="audio">Audio</string> <string name="audio">Audio</string>
<string name="subtitle">Subtítulos</string> <string name="subtitle">Subtítulos</string>

View file

@ -170,7 +170,7 @@
<string name="offline_mode_go_online">Conectarse</string> <string name="offline_mode_go_online">Conectarse</string>
<string name="mega_byte_suffix">%d MB</string> <string name="mega_byte_suffix">%d MB</string>
<string name="downloading_error">Error al descargar</string> <string name="downloading_error">Error al descargar</string>
<string name="not_enough_storage">Este elemento requiere %d MB libres en el almacenamiento pero solo hay disponibles %d MB</string> <string name="not_enough_storage">Este elemento requiere %s libres en el almacenamiento pero solo hay disponibles %s</string>
<string name="no_server_connection">No se puede conectar con el servidor de Jellyfin, para ver sin conexión, activa el Modo sin conexión</string> <string name="no_server_connection">No se puede conectar con el servidor de Jellyfin, para ver sin conexión, activa el Modo sin conexión</string>
<string name="select_storage_location">Seleccionar ubicación de almacenamiento</string> <string name="select_storage_location">Seleccionar ubicación de almacenamiento</string>
<string name="storage_unavailable">La ubicación de almacenamiento no está disponible</string> <string name="storage_unavailable">La ubicación de almacenamiento no está disponible</string>

View file

@ -173,7 +173,7 @@
<string name="offline_mode_go_online">Przejdź online</string> <string name="offline_mode_go_online">Przejdź online</string>
<string name="mega_byte_suffix">%d MB</string> <string name="mega_byte_suffix">%d MB</string>
<string name="downloading_error">Błąd podczas pobierania</string> <string name="downloading_error">Błąd podczas pobierania</string>
<string name="not_enough_storage">Ten element wymaga %d MB wolnego miejsca, ale dostępne jest tylko %d MB</string> <string name="not_enough_storage">Ten element wymaga %s wolnego miejsca, ale dostępne jest tylko %s</string>
<string name="no_server_connection">Brak połączenia z serwerem Jellyfin, aby oglądać offline, włącz tryb offline</string> <string name="no_server_connection">Brak połączenia z serwerem Jellyfin, aby oglądać offline, włącz tryb offline</string>
<string name="select_storage_location">Wybierz miejsce przechowywania</string> <string name="select_storage_location">Wybierz miejsce przechowywania</string>
<string name="storage_unavailable">Lokalizacja przechowywania jest niedostępna</string> <string name="storage_unavailable">Lokalizacja przechowywania jest niedostępna</string>

View file

@ -166,7 +166,7 @@
<string name="pref_player_trick_play">Miniatura de pré-visualização</string> <string name="pref_player_trick_play">Miniatura de pré-visualização</string>
<string name="title_storage">Armazenamento</string> <string name="title_storage">Armazenamento</string>
<string name="offline_mode_icon">Ícone do modo offline</string> <string name="offline_mode_icon">Ícone do modo offline</string>
<string name="not_enough_storage">Este item requer %d MB de armazenamento livre, mas apenas %d MB está disponível</string> <string name="not_enough_storage">Este item requer %s de armazenamento livre, mas apenas %s está disponível</string>
<string name="cancel_download_message">Tem certeza de que deseja cancelar o download\?</string> <string name="cancel_download_message">Tem certeza de que deseja cancelar o download\?</string>
<string name="downloaded_indicator">Indicador de download</string> <string name="downloaded_indicator">Indicador de download</string>
<string name="offline_mode">Modo offline</string> <string name="offline_mode">Modo offline</string>

View file

@ -165,7 +165,7 @@
<string name="amoled_theme">Тёмная тема AMOLED</string> <string name="amoled_theme">Тёмная тема AMOLED</string>
<string name="amoled_theme_summary">Использовать тему AMOLED с чистым чёрным фоном</string> <string name="amoled_theme_summary">Использовать тему AMOLED с чистым чёрным фоном</string>
<string name="downloading_error">Ошибка во время скачивания</string> <string name="downloading_error">Ошибка во время скачивания</string>
<string name="not_enough_storage">Для этого элемента требуется %dМБ свободного места, но доступно только %dМБ</string> <string name="not_enough_storage">Для этого элемента требуется %s свободного места, но доступно только %s</string>
<string name="no_server_connection">Нет соединения с сервером Jellyfin, для просмотра в автономном режиме включите Офлайн-Режим</string> <string name="no_server_connection">Нет соединения с сервером Jellyfin, для просмотра в автономном режиме включите Офлайн-Режим</string>
<string name="episode_name_extended_with_end">С%1$d:Э%2$d-%3$d - %4$s</string> <string name="episode_name_extended_with_end">С%1$d:Э%2$d-%3$d - %4$s</string>
<string name="episode_name_with_end">%1$d:%2$d. %3$s</string> <string name="episode_name_with_end">%1$d:%2$d. %3$s</string>

View file

@ -179,7 +179,7 @@
<string name="offline_mode_go_online">Prejsť do online režimu</string> <string name="offline_mode_go_online">Prejsť do online režimu</string>
<string name="mega_byte_suffix">%d MB</string> <string name="mega_byte_suffix">%d MB</string>
<string name="downloading_error">Chyba pri sťahovaní</string> <string name="downloading_error">Chyba pri sťahovaní</string>
<string name="not_enough_storage">Táto položka potrebuje %d MB voľného miesta, dostupných je iba %d MB</string> <string name="not_enough_storage">Táto položka potrebuje %s voľného miesta, dostupných je iba %s</string>
<string name="select_storage_location">Vybrať úložisko</string> <string name="select_storage_location">Vybrať úložisko</string>
<string name="no_server_connection">Nepodarilo sa spojiť s Jellyfin serverom, pre sledovanie offline povoľte Offline Režim</string> <string name="no_server_connection">Nepodarilo sa spojiť s Jellyfin serverom, pre sledovanie offline povoľte Offline Režim</string>
<string name="title_storage">Pamäť</string> <string name="title_storage">Pamäť</string>

View file

@ -162,6 +162,7 @@
<string name="add_server_address">Add server address</string> <string name="add_server_address">Add server address</string>
<string name="add">Add</string> <string name="add">Add</string>
<string name="quick_connect">Quick Connect</string> <string name="quick_connect">Quick Connect</string>
<string name="size">Size</string>
<string name="video">Video</string> <string name="video">Video</string>
<string name="audio">Audio</string> <string name="audio">Audio</string>
<string name="subtitle">Subtitles</string> <string name="subtitle">Subtitles</string>
@ -175,7 +176,7 @@
<string name="offline_mode_go_online">Go online</string> <string name="offline_mode_go_online">Go online</string>
<string name="mega_byte_suffix">%d MB</string> <string name="mega_byte_suffix">%d MB</string>
<string name="downloading_error">Error while downloading</string> <string name="downloading_error">Error while downloading</string>
<string name="not_enough_storage">This item requires %d MB of free storage but only %d MB is available</string> <string name="not_enough_storage">This item requires %s of free storage but only %s is available</string>
<string name="no_server_connection">No connection to the Jellyfin server, to watch offline enable Offline Mode</string> <string name="no_server_connection">No connection to the Jellyfin server, to watch offline enable Offline Mode</string>
<string name="select_storage_location">Select storage location</string> <string name="select_storage_location">Select storage location</string>
<string name="storage_unavailable">Storage location is unavailable</string> <string name="storage_unavailable">Storage location is unavailable</string>