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.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

View file

@ -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>

View file

@ -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)
)
)
}

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>