feat: show movie size in extra info and improve size formatting (#367)
This commit is contained in:
parent
815e338ddc
commit
7d86f46fa3
10 changed files with 49 additions and 13 deletions
|
@ -4,6 +4,7 @@ import android.app.DownloadManager
|
|||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.text.format.Formatter
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
|
@ -267,6 +268,9 @@ class MovieFragment : Fragment() {
|
|||
|
||||
private fun bindUiStateNormal(uiState: MovieViewModel.UiState.Normal) {
|
||||
uiState.apply {
|
||||
val size = item.sources.getOrNull(0)?.size?.let {
|
||||
Formatter.formatFileSize(requireContext(), it)
|
||||
}
|
||||
val canDownload =
|
||||
item.canDownload && item.sources.any { it.type == FindroidSourceType.REMOTE }
|
||||
val canDelete = item.sources.any { it.type == FindroidSourceType.LOCAL }
|
||||
|
@ -371,6 +375,8 @@ class MovieFragment : Fragment() {
|
|||
binding.info.audioGroup.isVisible = audioString.isNotEmpty()
|
||||
binding.info.subtitles.text = subtitleString
|
||||
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
|
||||
|
|
|
@ -8,6 +8,28 @@
|
|||
android:layout_marginHorizontal="24dp"
|
||||
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
|
||||
android:id="@+id/video_title"
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -17,7 +39,7 @@
|
|||
android:textAppearance="@style/TextAppearance.Material3.BodyMedium"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
app:layout_constraintTop_toBottomOf="@id/size" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/video"
|
||||
|
@ -123,7 +145,6 @@
|
|||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/genres" />
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/director"
|
||||
android:layout_width="0dp"
|
||||
|
@ -162,6 +183,14 @@
|
|||
app:barrierMargin="8dp"
|
||||
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
|
||||
android:id="@+id/video_group"
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -207,5 +236,4 @@
|
|||
android:visibility="visible"
|
||||
app:constraint_referenced_ids="writers_title, writers" />
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
|
|
@ -5,6 +5,7 @@ import android.content.Context
|
|||
import android.net.Uri
|
||||
import android.os.Environment
|
||||
import android.os.StatFs
|
||||
import android.text.format.Formatter
|
||||
import androidx.core.net.toUri
|
||||
import dev.jdtech.jellyfin.AppPreferences
|
||||
import dev.jdtech.jellyfin.core.R as CoreR
|
||||
|
@ -66,8 +67,8 @@ class DownloaderImpl(
|
|||
-1,
|
||||
UiText.StringResource(
|
||||
CoreR.string.not_enough_storage,
|
||||
source.size.div(1000000),
|
||||
stats.availableBytes.div(1000000)
|
||||
Formatter.formatFileSize(context, source.size),
|
||||
Formatter.formatFileSize(context, stats.availableBytes)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
|
@ -165,7 +165,7 @@
|
|||
<string name="storage_unavailable">La ubicación de almacenamiento no está disponible</string>
|
||||
<string name="internal">Interno</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="audio">Audio</string>
|
||||
<string name="subtitle">Subtítulos</string>
|
||||
|
|
|
@ -170,7 +170,7 @@
|
|||
<string name="offline_mode_go_online">Conectarse</string>
|
||||
<string name="mega_byte_suffix">%d MB</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="select_storage_location">Seleccionar ubicación de almacenamiento</string>
|
||||
<string name="storage_unavailable">La ubicación de almacenamiento no está disponible</string>
|
||||
|
|
|
@ -173,7 +173,7 @@
|
|||
<string name="offline_mode_go_online">Przejdź online</string>
|
||||
<string name="mega_byte_suffix">%d MB</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="select_storage_location">Wybierz miejsce przechowywania</string>
|
||||
<string name="storage_unavailable">Lokalizacja przechowywania jest niedostępna</string>
|
||||
|
@ -184,4 +184,4 @@
|
|||
<string name="cancel_download">Anuluj pobieranie</string>
|
||||
<string name="cancel_download_message">Czy na pewno chcesz anulować pobieranie\?</string>
|
||||
<string name="stop_download">Zatrzymaj pobieranie</string>
|
||||
</resources>
|
||||
</resources>
|
||||
|
|
|
@ -166,7 +166,7 @@
|
|||
<string name="pref_player_trick_play">Miniatura de pré-visualização</string>
|
||||
<string name="title_storage">Armazenamento</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="downloaded_indicator">Indicador de download</string>
|
||||
<string name="offline_mode">Modo offline</string>
|
||||
|
|
|
@ -165,7 +165,7 @@
|
|||
<string name="amoled_theme">Тёмная тема AMOLED</string>
|
||||
<string name="amoled_theme_summary">Использовать тему AMOLED с чистым чёрным фоном</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="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>
|
||||
|
|
|
@ -179,7 +179,7 @@
|
|||
<string name="offline_mode_go_online">Prejsť do online režimu</string>
|
||||
<string name="mega_byte_suffix">%d MB</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="no_server_connection">Nepodarilo sa spojiť s Jellyfin serverom, pre sledovanie offline povoľte Offline Režim</string>
|
||||
<string name="title_storage">Pamäť</string>
|
||||
|
|
|
@ -162,6 +162,7 @@
|
|||
<string name="add_server_address">Add server address</string>
|
||||
<string name="add">Add</string>
|
||||
<string name="quick_connect">Quick Connect</string>
|
||||
<string name="size">Size</string>
|
||||
<string name="video">Video</string>
|
||||
<string name="audio">Audio</string>
|
||||
<string name="subtitle">Subtitles</string>
|
||||
|
@ -175,7 +176,7 @@
|
|||
<string name="offline_mode_go_online">Go online</string>
|
||||
<string name="mega_byte_suffix">%d MB</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="select_storage_location">Select storage location</string>
|
||||
<string name="storage_unavailable">Storage location is unavailable</string>
|
||||
|
|
Loading…
Reference in a new issue