Merge branch 'develop' into dependabot/gradle/versions.kotlin-1.6.10

Added temporary fix for Koin bug
This commit is contained in:
Nite 2022-02-08 18:18:58 +01:00
commit 5962cc2add
No known key found for this signature in database
GPG Key ID: 1D1AD59B1C6386C1
47 changed files with 835 additions and 897 deletions

View File

@ -93,14 +93,15 @@ jobs:
- run:
name: sign release apk
command: |
export PATH="${JAVA_HOME}/bin:${PATH}"
mkdir -p /tmp/ultrasonic-release
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/ultrasonic/ultrasonic-keystore -storepass ${ULTRASONIC_KEYSTORE_STOREPASS} -keypass ${ULTRASONIC_KEYSTORE_KEYPASS} ultrasonic/build/outputs/apk/release/ultrasonic-release-unsigned.apk ultrasonic
jarsigner -verify ultrasonic/build/outputs/apk/release/ultrasonic-release-unsigned.apk
${ANDROID_HOME}/build-tools/27.0.0/zipalign -v 4 ultrasonic/build/outputs/apk/release/ultrasonic-release-unsigned.apk /tmp/ultrasonic-release/ultrasonic-${CIRCLE_TAG}.apk
${ANDROID_HOME}/build-tools/30.0.0/zipalign -v 4 ultrasonic/build/outputs/apk/release/ultrasonic-release-unsigned.apk /tmp/ultrasonic-release/ultrasonic-${CIRCLE_TAG}.apk
${ANDROID_HOME}/build-tools/30.0.0/apksigner sign --verbose --ks ~/ultrasonic/ultrasonic-keystore --ks-pass pass:${ULTRASONIC_KEYSTORE_STOREPASS} --key-pass pass:${ULTRASONIC_KEYSTORE_KEYPASS} /tmp/ultrasonic-release/ultrasonic-${CIRCLE_TAG}.apk
${ANDROID_HOME}/build-tools/30.0.0/apksigner verify --verbose /tmp/ultrasonic-release/ultrasonic-${CIRCLE_TAG}.apk
- persist_to_workspace:
root: /tmp/ultrasonic-release
paths:
- ultrasonic-*.apk
- ultrasonic-*.apk*
publish_github_signed_apk:
docker:
- image: circleci/golang
@ -125,7 +126,6 @@ workflows:
branches:
only:
- develop
- master
- generate_signed_apk:
filters:
tags:

View File

@ -39,15 +39,15 @@ class MusicDirectory : ArrayList<MusicDirectory.Child>() {
abstract var album: String?
abstract var title: String?
abstract override val name: String?
abstract val discNumber: Int?
abstract var discNumber: Int?
abstract var coverArt: String?
abstract val songCount: Long?
abstract val created: Date?
abstract var songCount: Long?
abstract var created: Date?
abstract var artist: String?
abstract val artistId: String?
abstract val duration: Int?
abstract val year: Int?
abstract val genre: String?
abstract var artistId: String?
abstract var duration: Int?
abstract var year: Int?
abstract var genre: String?
abstract var starred: Boolean
abstract var path: String?
abstract var closeness: Int
@ -120,15 +120,15 @@ class MusicDirectory : ArrayList<MusicDirectory.Child>() {
override var album: String? = null,
override var title: String? = null,
override val name: String? = null,
override val discNumber: Int = 0,
override var discNumber: Int? = 0,
override var coverArt: String? = null,
override val songCount: Long? = null,
override val created: Date? = null,
override var songCount: Long? = null,
override var created: Date? = null,
override var artist: String? = null,
override val artistId: String? = null,
override val duration: Int = 0,
override val year: Int = 0,
override val genre: String? = null,
override var artistId: String? = null,
override var duration: Int? = 0,
override var year: Int? = 0,
override var genre: String? = null,
override var starred: Boolean = false,
override var path: String? = null,
override var closeness: Int = 0,

View File

@ -0,0 +1,4 @@
Others
- #671: Bump versions.mockito from 4.1.0 to 4.3.1.
- Update translations.

View File

@ -0,0 +1,14 @@
Bug fixes
- #609: Weird scrobbling behaviour (offset).
Enhancements
- #599: Moved server selector and settings to the Navigation menu.
- #600: Migrate Permission utitlity to Kotlin, increase min SDK to 17.
- #604: Implement a Download view.
- #613: targetSdkVersion must be 30 or higher.
- #622: Refactor events.
- #641: Remove feature storage.
- #642: Remove MergeAdapter and SackOfViewsAdapter.
- #649: Unify error dialog handling.
- #652: Updated custom cache location handling to remove isUri.
- #662: Improve database migrations.

View File

@ -0,0 +1,4 @@
Otros
- #671: Actualizado versions.mockito de 4.1.0 a 4.3.1.
- Traducciones actualizadas.

View File

@ -0,0 +1,17 @@
Corrección de errores
- #609: Comportamiento extraño de scrobbling (offset).
Mejoras
- #599: Se ha movido el selector de servidor y la configuración al menú de
navegación.
- #600: Migración de la utilidad de permisos a Kotlin, aumento del SDK
mínimo a 17.
- #604: Implementar una vista de Descarga.
- #613: targetSdkVersion debe ser 30 o superior.
- #622: Refactorización de eventos.
- #641: Eliminar el almacenamiento de funciones.
- #642: Eliminar MergeAdapter y SackOfViewsAdapter.
- #649: Unificar el manejo del diálogo de error.
- #652: Manejo de ubicación de caché personalizado actualizado para eliminar
isUri.
- #662: Mejorar las migraciones de bases de datos.

View File

@ -30,7 +30,7 @@ picasso = "2.71828"
junit4 = "4.13.2"
junit5 = "5.8.1"
mockito = "4.1.0"
mockito = "4.3.1"
mockitoKotlin = "4.0.0"
kluent = "1.68"
apacheCodecs = "1.15"

View File

@ -40,6 +40,8 @@ android {
buildFeatures {
buildConfig = false
viewBinding true
dataBinding true
}
}

View File

@ -9,8 +9,8 @@ android {
defaultConfig {
applicationId "org.moire.ultrasonic"
versionCode 98
versionName "2.24.0"
versionCode 100
versionName "3.0.1"
minSdkVersion versions.minSdk
targetSdkVersion versions.targetSdk
@ -48,6 +48,7 @@ android {
lintOptions {
baselineFile file("lint-baseline.xml")
ignore 'MissingTranslation'
ignore 'UnusedQuantity'
warning 'ImpliedQuantity'
disable 'IconMissingDensityFolder', "VectorPath"
abortOnError true
@ -57,6 +58,12 @@ android {
kotlinOptions {
jvmTarget = "1.8"
}
buildFeatures {
viewBinding true
dataBinding true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8

View File

@ -1,117 +0,0 @@
/*
This file is part of Subsonic.
Subsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Subsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Subsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2009 (C) Sindre Mehus
*/
package org.moire.ultrasonic.util;
import java.lang.ref.SoftReference;
import java.util.HashMap;
import java.util.Map;
/**
* @author Sindre Mehus
*/
public class LRUCache<K, V>
{
private final int capacity;
private final Map<K, TimestampedValue> map;
public LRUCache(int capacity)
{
map = new HashMap<K, TimestampedValue>(capacity);
this.capacity = capacity;
}
public synchronized V get(K key)
{
TimestampedValue value = map.get(key);
V result = null;
if (value != null)
{
value.updateTimestamp();
result = value.getValue();
}
return result;
}
public synchronized void put(K key, V value)
{
if (map.size() >= capacity)
{
removeOldest();
}
map.put(key, new TimestampedValue(value));
}
public void clear()
{
map.clear();
}
private void removeOldest()
{
K oldestKey = null;
long oldestTimestamp = Long.MAX_VALUE;
for (Map.Entry<K, TimestampedValue> entry : map.entrySet())
{
K key = entry.getKey();
TimestampedValue value = entry.getValue();
if (value.getTimestamp() < oldestTimestamp)
{
oldestTimestamp = value.getTimestamp();
oldestKey = key;
}
}
if (oldestKey != null)
{
map.remove(oldestKey);
}
}
private final class TimestampedValue
{
private final SoftReference<V> value;
private long timestamp;
public TimestampedValue(V value)
{
this.value = new SoftReference<V>(value);
updateTimestamp();
}
public V getValue()
{
return value.get();
}
public long getTimestamp()
{
return timestamp;
}
public void updateTimestamp()
{
timestamp = System.currentTimeMillis();
}
}
}

View File

@ -38,7 +38,10 @@ class UApp : MultiDexApplication() {
}
startKoin {
logger(TimberKoinLogger(Level.INFO))
// TODO Currently there is a bug in Koin which makes necessary to set the loglevel to ERROR
logger(TimberKoinLogger(Level.ERROR))
// logger(TimberKoinLogger(Level.INFO))
// declare Android context
androidContext(this@UApp)
// declare modules to use

View File

@ -26,6 +26,45 @@ val MIGRATION_1_2: Migration = object : Migration(1, 2) {
}
}
val MIGRATION_2_1: Migration = object : Migration(2, 1) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL(
"""
CREATE TABLE IF NOT EXISTS ServerSettingMigration (
id INTEGER NOT NULL PRIMARY KEY,
[index] INTEGER NOT NULL,
name TEXT NOT NULL,
url TEXT NOT NULL,
userName TEXT NOT NULL,
password TEXT NOT NULL,
jukeboxByDefault INTEGER NOT NULL,
allowSelfSignedCertificate INTEGER NOT NULL,
ldapSupport INTEGER NOT NULL,
musicFolderId TEXT
)
""".trimIndent()
)
database.execSQL(
"""
INSERT INTO ServerSettingMigration (
id, [index], name, url, userName, password, jukeboxByDefault,
allowSelfSignedCertificate, ldapSupport, musicFolderId
)
SELECT
id, [index], name, url, userName, password, jukeboxByDefault,
allowSelfSignedCertificate, ldapSupport, musicFolderId
FROM ServerSetting
""".trimIndent()
)
database.execSQL(
"DROP TABLE ServerSetting"
)
database.execSQL(
"ALTER TABLE ServerSettingMigration RENAME TO ServerSetting"
)
}
}
val MIGRATION_2_3: Migration = object : Migration(2, 3) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL(
@ -43,6 +82,46 @@ val MIGRATION_2_3: Migration = object : Migration(2, 3) {
}
}
val MIGRATION_3_2: Migration = object : Migration(3, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL(
"""
CREATE TABLE IF NOT EXISTS ServerSettingMigration (
id INTEGER NOT NULL PRIMARY KEY,
[index] INTEGER NOT NULL,
name TEXT NOT NULL,
url TEXT NOT NULL,
userName TEXT NOT NULL,
password TEXT NOT NULL,
jukeboxByDefault INTEGER NOT NULL,
allowSelfSignedCertificate INTEGER NOT NULL,
ldapSupport INTEGER NOT NULL,
musicFolderId TEXT,
minimumApiVersion TEXT
)
""".trimIndent()
)
database.execSQL(
"""
INSERT INTO ServerSettingMigration (
id, [index], name, url, userName, password, jukeboxByDefault,
allowSelfSignedCertificate, ldapSupport, musicFolderId, minimumApiVersion
)
SELECT
id, [index], name, url, userName, password, jukeboxByDefault,
allowSelfSignedCertificate, ldapSupport, musicFolderId, minimumApiVersion
FROM ServerSetting
""".trimIndent()
)
database.execSQL(
"DROP TABLE ServerSetting"
)
database.execSQL(
"ALTER TABLE ServerSettingMigration RENAME TO ServerSetting"
)
}
}
val MIGRATION_3_4: Migration = object : Migration(3, 4) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL(
@ -50,3 +129,49 @@ val MIGRATION_3_4: Migration = object : Migration(3, 4) {
)
}
}
val MIGRATION_4_3: Migration = object : Migration(4, 3) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL(
"""
CREATE TABLE IF NOT EXISTS ServerSettingMigration (
id INTEGER NOT NULL PRIMARY KEY,
[index] INTEGER NOT NULL,
name TEXT NOT NULL,
url TEXT NOT NULL,
userName TEXT NOT NULL,
password TEXT NOT NULL,
jukeboxByDefault INTEGER NOT NULL,
allowSelfSignedCertificate INTEGER NOT NULL,
ldapSupport INTEGER NOT NULL,
musicFolderId TEXT,
minimumApiVersion TEXT,
chatSupport INTEGER,
bookmarkSupport INTEGER,
shareSupport INTEGER,
podcastSupport INTEGER
)
""".trimIndent()
)
database.execSQL(
"""
INSERT INTO ServerSettingMigration (
id, [index], name, url, userName, password, jukeboxByDefault,
allowSelfSignedCertificate, ldapSupport, musicFolderId, minimumApiVersion,
chatSupport, bookmarkSupport, shareSupport, podcastSupport
)
SELECT
id, [index], name, url, userName, password, jukeboxByDefault,
allowSelfSignedCertificate, ldapSupport, musicFolderId, minimumApiVersion,
chatSupport, bookmarkSupport, shareSupport, podcastSupport
FROM ServerSetting
""".trimIndent()
)
database.execSQL(
"DROP TABLE ServerSetting"
)
database.execSQL(
"ALTER TABLE ServerSettingMigration RENAME TO ServerSetting"
)
}
}

View File

@ -7,8 +7,11 @@ import org.koin.core.qualifier.named
import org.koin.dsl.module
import org.moire.ultrasonic.data.AppDatabase
import org.moire.ultrasonic.data.MIGRATION_1_2
import org.moire.ultrasonic.data.MIGRATION_2_1
import org.moire.ultrasonic.data.MIGRATION_2_3
import org.moire.ultrasonic.data.MIGRATION_3_2
import org.moire.ultrasonic.data.MIGRATION_3_4
import org.moire.ultrasonic.data.MIGRATION_4_3
import org.moire.ultrasonic.model.ServerSettingsModel
import org.moire.ultrasonic.util.Settings
@ -28,8 +31,11 @@ val appPermanentStorage = module {
DB_FILENAME
)
.addMigrations(MIGRATION_1_2)
.addMigrations(MIGRATION_2_1)
.addMigrations(MIGRATION_2_3)
.addMigrations(MIGRATION_3_2)
.addMigrations(MIGRATION_3_4)
.addMigrations(MIGRATION_4_3)
.build()
}

View File

@ -21,7 +21,7 @@ fun Album.toDomainEntity(): MusicDirectory.Album = MusicDirectory.Album(
)
fun Album.toMusicDirectoryDomainEntity(): MusicDirectory = MusicDirectory().apply {
addAll(this@toMusicDirectoryDomainEntity.songList.map { it.toDomainEntity() })
addAll(this@toMusicDirectoryDomainEntity.songList.map { it.toTrackEntity() })
}
fun List<Album>.toDomainEntityList(): List<MusicDirectory.Album> = this.map { it.toDomainEntity() }

View File

@ -10,7 +10,7 @@ fun ApiBookmark.toDomainEntity(): Bookmark = Bookmark(
comment = this@toDomainEntity.comment,
created = this@toDomainEntity.created?.time,
changed = this@toDomainEntity.changed?.time,
entry = this@toDomainEntity.entry.toDomainEntity()
entry = this@toDomainEntity.entry.toTrackEntity()
)
fun List<ApiBookmark>.toDomainEntitiesList(): List<Bookmark> = map { it.toDomainEntity() }

View File

@ -1,5 +1,10 @@
// Converts MusicDirectory entity from [org.moire.ultrasonic.api.subsonic.SubsonicAPIClient]
// to app domain entities.
/*
* APIMusicDirectoryConverter.kt
* Copyright (C) 2009-2021 Ultrasonic developers
*
* Distributed under terms of the GNU GPLv3 license.
*/
@file:JvmName("APIMusicDirectoryConverter")
package org.moire.ultrasonic.domain
@ -9,48 +14,90 @@ import java.util.Locale
import org.moire.ultrasonic.api.subsonic.models.MusicDirectory as APIMusicDirectory
import org.moire.ultrasonic.api.subsonic.models.MusicDirectoryChild
/*
* Converts MusicDirectory entity from [org.moire.ultrasonic.api.subsonic.SubsonicAPIClient]
* to app domain entities.
*
* Unlike other API endpoints getMusicDirectory doesn't return instances of Albums or Songs,
* but just children, which can be albums or songs.
*/
internal val dateFormat: DateFormat by lazy {
SimpleDateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.getDefault())
}
fun MusicDirectoryChild.toDomainEntity(): MusicDirectory.Entry = MusicDirectory.Entry(id).apply {
parent = this@toDomainEntity.parent
isDirectory = this@toDomainEntity.isDir
title = this@toDomainEntity.title
album = this@toDomainEntity.album
albumId = this@toDomainEntity.albumId
artist = this@toDomainEntity.artist
artistId = this@toDomainEntity.artistId
track = this@toDomainEntity.track
year = this@toDomainEntity.year
genre = this@toDomainEntity.genre
contentType = this@toDomainEntity.contentType
suffix = this@toDomainEntity.suffix
transcodedContentType = this@toDomainEntity.transcodedContentType
transcodedSuffix = this@toDomainEntity.transcodedSuffix
coverArt = this@toDomainEntity.coverArt
size = this@toDomainEntity.size
duration = this@toDomainEntity.duration
bitRate = this@toDomainEntity.bitRate
path = this@toDomainEntity.path
isVideo = this@toDomainEntity.isVideo
created = this@toDomainEntity.created?.time
starred = this@toDomainEntity.starred != null
discNumber = this@toDomainEntity.discNumber
type = this@toDomainEntity.type
if (this@toDomainEntity.streamId.isNotBlank()) {
id = this@toDomainEntity.streamId
}
if (this@toDomainEntity.publishDate != null) {
artist = dateFormat.format(this@toDomainEntity.publishDate!!.time)
}
userRating = this@toDomainEntity.userRating
averageRating = this@toDomainEntity.averageRating
fun MusicDirectoryChild.toTrackEntity(): MusicDirectory.Entry = MusicDirectory.Entry(id).apply {
populateCommonProps(this, this@toTrackEntity)
populateTrackProps(this, this@toTrackEntity)
}
fun List<MusicDirectoryChild>.toDomainEntityList() = this.map { it.toDomainEntity() }
fun MusicDirectoryChild.toAlbumEntity(): MusicDirectory.Album = MusicDirectory.Album(id).apply {
populateCommonProps(this, this@toAlbumEntity)
}
private fun populateCommonProps(
entry: MusicDirectory.Child,
source: MusicDirectoryChild
) {
entry.parent = source.parent
entry.isDirectory = source.isDir
entry.title = source.title
entry.album = source.album
entry.artist = source.artist
entry.artistId = source.artistId
entry.year = source.year
entry.genre = source.genre
entry.coverArt = source.coverArt
entry.duration = source.duration
entry.path = source.path
entry.isVideo = source.isVideo
entry.created = source.created?.time
entry.starred = source.starred != null
entry.discNumber = source.discNumber
if (source.streamId.isNotBlank()) {
entry.id = source.streamId
}
if (source.publishDate != null) {
entry.artist = dateFormat.format(source.publishDate!!.time)
}
}
private fun populateTrackProps(
entry: MusicDirectory.Entry,
source: MusicDirectoryChild
) {
entry.size = source.size
entry.contentType = source.contentType
entry.suffix = source.suffix
entry.transcodedContentType = source.transcodedContentType
entry.transcodedSuffix = source.transcodedSuffix
entry.track = source.track
entry.albumId = source.albumId
entry.bitRate = source.bitRate
entry.type = source.type
entry.userRating = source.userRating
entry.averageRating = source.averageRating
}
fun List<MusicDirectoryChild>.toDomainEntityList(): List<MusicDirectory.Child> {
val newList: MutableList<MusicDirectory.Child> = mutableListOf()
forEach {
if (it.isDir)
newList.add(it.toAlbumEntity())
else
newList.add(it.toTrackEntity())
}
return newList
}
fun List<MusicDirectoryChild>.toTrackList(): List<MusicDirectory.Entry> = this.map {
it.toTrackEntity()
}
fun APIMusicDirectory.toDomainEntity(): MusicDirectory = MusicDirectory().apply {
name = this@toDomainEntity.name
addAll(this@toDomainEntity.childList.map { it.toDomainEntity() })
addAll(this@toDomainEntity.childList.toDomainEntityList())
}

View File

@ -12,7 +12,7 @@ internal val playlistDateFormat by lazy(NONE) { SimpleDateFormat.getInstance() }
fun APIPlaylist.toMusicDirectoryDomainEntity(): MusicDirectory = MusicDirectory().apply {
name = this@toMusicDirectoryDomainEntity.name
addAll(this@toMusicDirectoryDomainEntity.entriesList.map { it.toDomainEntity() })
addAll(this@toMusicDirectoryDomainEntity.entriesList.map { it.toTrackEntity() })
}
fun APIPlaylist.toDomainEntity(): Playlist = Playlist(

View File

@ -9,17 +9,17 @@ import org.moire.ultrasonic.api.subsonic.models.SearchTwoResult
fun APISearchResult.toDomainEntity(): SearchResult = SearchResult(
emptyList(), emptyList(),
this.matchList.map { it.toDomainEntity() }
this.matchList.map { it.toTrackEntity() }
)
fun SearchTwoResult.toDomainEntity(): SearchResult = SearchResult(
this.artistList.map { it.toDomainEntity() },
this.albumList.map { it.toDomainEntity() },
this.songList.map { it.toDomainEntity() }
this.songList.map { it.toTrackEntity() }
)
fun SearchThreeResult.toDomainEntity(): SearchResult = SearchResult(
this.artistList.map { it.toDomainEntity() },
this.albumList.map { it.toDomainEntity() },
this.songList.map { it.toDomainEntity() }
this.songList.map { it.toTrackEntity() }
)

View File

@ -22,5 +22,5 @@ fun APIShare.toDomainEntity(): Share = Share(
url = this@toDomainEntity.url,
username = this@toDomainEntity.username,
visitCount = this@toDomainEntity.visitCount.toLong(),
entries = this@toDomainEntity.items.toDomainEntityList().toMutableList()
entries = this@toDomainEntity.items.toTrackList().toMutableList()
)

View File

@ -4,7 +4,6 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.TextView
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
@ -12,6 +11,7 @@ import androidx.navigation.Navigation
import org.koin.core.component.KoinComponent
import org.moire.ultrasonic.R
import org.moire.ultrasonic.data.ActiveServerProvider.Companion.isOffline
import org.moire.ultrasonic.databinding.MainBinding
import org.moire.ultrasonic.util.Constants
import org.moire.ultrasonic.util.Settings
import org.moire.ultrasonic.util.Util
@ -21,7 +21,6 @@ import org.moire.ultrasonic.util.Util
*/
class MainFragment : Fragment(), KoinComponent {
private lateinit var list: LinearLayout
private lateinit var musicTitle: TextView
private lateinit var artistsButton: TextView
private lateinit var albumsButton: TextView
@ -41,6 +40,8 @@ class MainFragment : Fragment(), KoinComponent {
private lateinit var albumsAlphaByArtistButton: TextView
private lateinit var videosButton: TextView
private var binding: MainBinding? = null
override fun onCreate(savedInstanceState: Bundle?) {
Util.applyTheme(this.context)
super.onCreate(savedInstanceState)
@ -50,13 +51,12 @@ class MainFragment : Fragment(), KoinComponent {
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.main, container, false)
): View {
binding = MainBinding.inflate(inflater, container, false)
return binding!!.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
list = view.findViewById(R.id.main_list)
setupButtons()
setupClickListener()
setupItemVisibility()
@ -81,25 +81,30 @@ class MainFragment : Fragment(), KoinComponent {
}
}
override fun onDestroyView() {
super.onDestroyView()
binding = null
}
private fun setupButtons() {
musicTitle = list.findViewById(R.id.main_music)
artistsButton = list.findViewById(R.id.main_artists_button)
albumsButton = list.findViewById(R.id.main_albums_button)
genresButton = list.findViewById(R.id.main_genres_button)
videosTitle = list.findViewById(R.id.main_videos_title)
songsTitle = list.findViewById(R.id.main_songs)
randomSongsButton = list.findViewById(R.id.main_songs_button)
songsStarredButton = list.findViewById(R.id.main_songs_starred)
albumsTitle = list.findViewById(R.id.main_albums)
albumsNewestButton = list.findViewById(R.id.main_albums_newest)
albumsRandomButton = list.findViewById(R.id.main_albums_random)
albumsHighestButton = list.findViewById(R.id.main_albums_highest)
albumsStarredButton = list.findViewById(R.id.main_albums_starred)
albumsRecentButton = list.findViewById(R.id.main_albums_recent)
albumsFrequentButton = list.findViewById(R.id.main_albums_frequent)
albumsAlphaByNameButton = list.findViewById(R.id.main_albums_alphaByName)
albumsAlphaByArtistButton = list.findViewById(R.id.main_albums_alphaByArtist)
videosButton = list.findViewById(R.id.main_videos)
musicTitle = binding!!.mainMusic
artistsButton = binding!!.mainArtistsButton
albumsButton = binding!!.mainAlbumsButton
genresButton = binding!!.mainGenresButton
videosTitle = binding!!.mainVideosTitle
songsTitle = binding!!.mainSongs
randomSongsButton = binding!!.mainSongsButton
songsStarredButton = binding!!.mainSongsStarred
albumsTitle = binding!!.mainAlbums
albumsNewestButton = binding!!.mainAlbumsNewest
albumsRandomButton = binding!!.mainAlbumsRandom
albumsHighestButton = binding!!.mainAlbumsHighest
albumsStarredButton = binding!!.mainAlbumsStarred
albumsRecentButton = binding!!.mainAlbumsRecent
albumsFrequentButton = binding!!.mainAlbumsFrequent
albumsAlphaByNameButton = binding!!.mainAlbumsAlphaByName
albumsAlphaByArtistButton = binding!!.mainAlbumsAlphaByArtist
videosButton = binding!!.mainVideos
}
private fun setupItemVisibility() {

View File

@ -38,7 +38,6 @@ import org.moire.ultrasonic.service.MediaPlayerController
import org.moire.ultrasonic.service.RxBus
import org.moire.ultrasonic.util.Constants
import org.moire.ultrasonic.util.ErrorDialog
import org.moire.ultrasonic.util.FileUtil.defaultMusicDirectory
import org.moire.ultrasonic.util.FileUtil.ultrasonicDirectory
import org.moire.ultrasonic.util.InfoDialog
import org.moire.ultrasonic.util.MediaSessionHandler
@ -50,7 +49,6 @@ import org.moire.ultrasonic.util.Storage
import org.moire.ultrasonic.util.TimeSpanPreference
import org.moire.ultrasonic.util.TimeSpanPreferenceDialogFragmentCompat
import org.moire.ultrasonic.util.Util.toast
import org.moire.ultrasonic.util.isUri
import timber.log.Timber
/**
@ -171,31 +169,36 @@ class SettingsFragment :
*/
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
if (
requestCode != SELECT_CACHE_ACTIVITY ||
resultCode != Activity.RESULT_OK ||
resultData == null
) return
requestCode == SELECT_CACHE_ACTIVITY &&
resultCode == Activity.RESULT_OK &&
resultData != null
) {
val read = (resultData.flags and Intent.FLAG_GRANT_READ_URI_PERMISSION) != 0
val write = (resultData.flags and Intent.FLAG_GRANT_WRITE_URI_PERMISSION) != 0
val persist = (resultData.flags and Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION) != 0
val read = (resultData.flags and Intent.FLAG_GRANT_READ_URI_PERMISSION) != 0
val write = (resultData.flags and Intent.FLAG_GRANT_WRITE_URI_PERMISSION) != 0
val persist = (resultData.flags and Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION) != 0
if (read && write && persist) {
if (resultData.data != null) {
// The result data contains a URI for the document or directory that
// the user selected.
val uri = resultData.data!!
val contentResolver = UApp.applicationContext().contentResolver
if (!read || !write || !persist) {
contentResolver.takePersistableUriPermission(uri, RW_FLAG)
setCacheLocation(uri.toString())
setupCacheLocationPreference()
return
}
}
ErrorDialog.Builder(context)
.setMessage(R.string.settings_cache_location_error)
.show()
return
}
// The result data contains a URI for the document or directory that
// the user selected.
resultData.data?.also { uri ->
// Perform operations on the document using its URI.
val contentResolver = UApp.applicationContext().contentResolver
contentResolver.takePersistableUriPermission(uri, RW_FLAG)
setCacheLocation(uri.toString())
if (Settings.cacheLocationUri == "") {
Settings.customCacheLocation = false
customCacheLocation?.isChecked = false
setupCacheLocationPreference()
}
}
@ -234,7 +237,12 @@ class SettingsFragment :
RxBus.themeChangedEventPublisher.onNext(Unit)
}
Constants.PREFERENCES_KEY_CUSTOM_CACHE_LOCATION -> {
setupCacheLocationPreference()
if (Settings.customCacheLocation) {
selectCacheLocation()
} else {
if (Settings.cacheLocationUri != "") setCacheLocation("")
setupCacheLocationPreference()
}
}
}
}
@ -259,34 +267,32 @@ class SettingsFragment :
}
private fun setupCacheLocationPreference() {
val isDefault = Settings.cacheLocation == defaultMusicDirectory.path
if (!Settings.customCacheLocation) {
cacheLocation?.isVisible = false
if (!isDefault) setCacheLocation(defaultMusicDirectory.path)
return
}
cacheLocation?.isVisible = true
val uri = Uri.parse(Settings.cacheLocation)
val uri = Uri.parse(Settings.cacheLocationUri)
cacheLocation!!.summary = uri.path
cacheLocation!!.onPreferenceClickListener =
Preference.OnPreferenceClickListener {
cacheLocation!!.onPreferenceClickListener = Preference.OnPreferenceClickListener {
selectCacheLocation()
true
}
}
// Choose a directory using the system's file picker.
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
private fun selectCacheLocation() {
// Choose a directory using the system's file picker.
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
if (!isDefault && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, defaultMusicDirectory.path)
}
if (Settings.cacheLocationUri != "" && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, Settings.cacheLocationUri)
}
intent.addFlags(RW_FLAG)
intent.addFlags(PERSISTABLE_FLAG)
intent.addFlags(RW_FLAG)
intent.addFlags(PERSISTABLE_FLAG)
startActivityForResult(intent, SELECT_CACHE_ACTIVITY)
true
}
startActivityForResult(intent, SELECT_CACHE_ACTIVITY)
}
private fun setupBluetoothDevicePreferences() {
@ -393,7 +399,6 @@ class SettingsFragment :
sharingDefaultExpiration!!.summary = sharingDefaultExpiration!!.text
sharingDefaultDescription!!.summary = sharingDefaultDescription!!.text
sharingDefaultGreeting!!.summary = sharingDefaultGreeting!!.text
cacheLocation!!.summary = Settings.cacheLocation
if (!mediaButtonsEnabled!!.isChecked) {
lockScreenEnabled!!.isChecked = false
lockScreenEnabled!!.isEnabled = false
@ -438,15 +443,16 @@ class SettingsFragment :
}
private fun setCacheLocation(path: String) {
if (path.isUri()) {
if (path != "") {
val uri = Uri.parse(path)
cacheLocation!!.summary = uri.path ?: ""
}
Settings.cacheLocation = path
Settings.cacheLocationUri = path
// Clear download queue.
mediaPlayerControllerLazy.value.clear()
mediaPlayerControllerLazy.value.clearCaches()
Storage.reset()
}

View File

@ -65,7 +65,7 @@ class AlbumListModel(application: Application) : GenericListModel(application) {
// If we are refreshing the random list, we want to avoid items moving across the screen,
// by clearing the list first
if (refresh && albumListType == "random") {
if (refresh && !append && albumListType == "random") {
list.postValue(listOf())
}

View File

@ -44,6 +44,7 @@ class Downloader(
private val jukeboxMediaPlayer: JukeboxMediaPlayer by inject()
// This cache helps us to avoid creating duplicate DownloadFile instances when showing Entries
private val downloadFileCache = LRUCache<MusicDirectory.Entry, DownloadFile>(100)
private var executorService: ScheduledExecutorService? = null
@ -281,6 +282,11 @@ class Downloader(
@Synchronized
fun getPlaylist(): List<DownloadFile> = playlist
@Synchronized
fun clearDownloadFileCache() {
downloadFileCache.clear()
}
@Synchronized
fun clearPlaylist() {
playlist.clear()

View File

@ -280,6 +280,11 @@ class MediaPlayerController(
jukeboxMediaPlayer.updatePlaylist()
}
@Synchronized
fun clearCaches() {
downloader.clearDownloadFileCache()
}
@Synchronized
fun clearIncomplete() {
reset()

View File

@ -41,6 +41,7 @@ import org.moire.ultrasonic.domain.toDomainEntity
import org.moire.ultrasonic.domain.toDomainEntityList
import org.moire.ultrasonic.domain.toIndexList
import org.moire.ultrasonic.domain.toMusicDirectoryDomainEntity
import org.moire.ultrasonic.domain.toTrackEntity
import org.moire.ultrasonic.util.FileUtil
import org.moire.ultrasonic.util.Settings
import timber.log.Timber
@ -317,7 +318,7 @@ open class RESTMusicService(
"skipped" != podcastEntry.status &&
"error" != podcastEntry.status
) {
val entry = podcastEntry.toDomainEntity()
val entry = podcastEntry.toTrackEntity()
entry.track = null
musicDirectory.add(entry)
}

View File

@ -0,0 +1,79 @@
/*
* LRUCache.kt
* Copyright (C) 2009-2021 Ultrasonic developers
*
* Distributed under terms of the GNU GPLv3 license.
*/
package org.moire.ultrasonic.util
import java.lang.ref.SoftReference
import java.util.HashMap
/**
* A cache that deletes the least-recently-used items.
*/
class LRUCache<K, V>(capacity: Int) {
private val capacity: Int
private val map: MutableMap<K, TimestampedValue>
@Synchronized
operator fun get(key: K): V? {
val value = map[key]
var result: V? = null
if (value != null) {
value.updateTimestamp()
result = value.getValue()
}
return result
}
@Synchronized
fun put(key: K, value: V) {
if (map.size >= capacity) {
removeOldest()
}
map[key] = TimestampedValue(value)
}
fun clear() {
map.clear()
}
private fun removeOldest() {
var oldestKey: K? = null
var oldestTimestamp = Long.MAX_VALUE
for ((key, value) in map) {
if (value.timestamp < oldestTimestamp) {
oldestTimestamp = value.timestamp
oldestKey = key
}
}
if (oldestKey != null) {
map.remove(oldestKey)
}
}
private inner class TimestampedValue(value: V) {
private val value: SoftReference<V> = SoftReference(value)
var timestamp: Long = 0
private set
fun getValue(): V? {
return value.get()
}
fun updateTimestamp() {
timestamp = System.currentTimeMillis()
}
init {
updateTimestamp()
}
}
init {
map = HashMap(capacity)
this.capacity = capacity
}
}

View File

@ -112,9 +112,8 @@ object Settings {
)
@JvmStatic
var cacheLocation by StringSetting(
Constants.PREFERENCES_KEY_CACHE_LOCATION,
FileUtil.defaultMusicDirectory.path
var cacheLocationUri by StringSetting(
Constants.PREFERENCES_KEY_CACHE_LOCATION, ""
)
@JvmStatic

View File

@ -31,7 +31,8 @@ object Storage {
Timber.i("StorageFile caches were reset")
val root = getRoot()
if (root == null) {
Settings.cacheLocation = FileUtil.defaultMusicDirectory.path
Settings.customCacheLocation = false
Settings.cacheLocationUri = ""
Util.toast(UApp.applicationContext(), R.string.settings_cache_location_error)
}
}
@ -70,22 +71,16 @@ object Storage {
}
private fun getRoot(): AbstractFile? {
return if (Settings.cacheLocation.isUri()) {
return if (Settings.customCacheLocation) {
val documentFile = DocumentFile.fromTreeUri(
UApp.applicationContext(),
Uri.parse(Settings.cacheLocation)
Uri.parse(Settings.cacheLocationUri)
) ?: return null
if (!documentFile.exists()) return null
StorageFile(null, documentFile.uri, documentFile.name!!, documentFile.isDirectory)
} else {
val file = File(Settings.cacheLocation)
if (!file.exists()) return null
val file = File(FileUtil.defaultMusicDirectory.path)
JavaFile(null, file)
}
}
}
fun String.isUri(): Boolean {
// TODO is there a better way to tell apart a path and an URI?
return this.contains(':')
}

View File

@ -1,91 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="100"
android:viewportHeight="100"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="#000000"
android:pathData="M90.365,48.085l-3.83,0l-3.859,0l-3.83,0l-3.86,0l-3.83,0l-3.86,0l0,3.86l3.86,0l3.83,0l3.86,0l3.83,0l3.859,0l3.83,0l3.861,0l0,-3.86z" />
<path
android:fillColor="#000000"
android:pathData="M82.676,82.705h3.859v3.83h-3.859z" />
<path
android:fillColor="#000000"
android:pathData="M82.676,13.465h3.859v3.86h-3.859z" />
<path
android:fillColor="#000000"
android:pathData="M78.846,78.846h3.83v3.859h-3.83z" />
<path
android:fillColor="#000000"
android:pathData="M78.846,17.325h3.83v3.83h-3.83z" />
<path
android:fillColor="#000000"
android:pathData="M74.986,75.016h3.859v3.83h-3.859z" />
<path
android:fillColor="#000000"
android:pathData="M74.986,21.155h3.859v3.86h-3.859z" />
<path
android:fillColor="#000000"
android:pathData="M71.156,71.154h3.83v3.861h-3.83z" />
<path
android:fillColor="#000000"
android:pathData="M71.156,25.015h3.83v3.83h-3.83z" />
<path
android:fillColor="#000000"
android:pathData="M67.296,67.324h3.86v3.83h-3.86z" />
<path
android:fillColor="#000000"
android:pathData="M67.296,28.845h3.86v3.86h-3.86z" />
<path
android:fillColor="#000000"
android:pathData="M63.466,63.465h3.83v3.859h-3.83z" />
<path
android:fillColor="#000000"
android:pathData="M63.466,32.705h3.83v3.83h-3.83z" />
<path
android:fillColor="#000000"
android:pathData="M48.056,71.154l0,3.862l0,3.83l0,3.859l0,3.83l0,3.86l0,3.83l3.86,0l0,-3.83l0,-3.86l0,-3.83l0,-3.859l0,-3.83l0,-3.862l0,-3.83l-3.86,0z" />
<path
android:fillColor="#000000"
android:pathData="M48.056,9.635l0,3.83l0,3.86l0,3.83l0,3.86l0,3.83l0,3.86l3.86,0l0,-3.86l0,-3.83l0,-3.86l0,-3.83l0,-3.86l0,-3.83l0,-3.86l-3.86,0z" />
<path
android:fillColor="#000000"
android:pathData="M32.676,63.465h3.859v3.859h-3.859z" />
<path
android:fillColor="#000000"
android:pathData="M32.676,32.705h3.859v3.83h-3.859z" />
<path
android:fillColor="#000000"
android:pathData="M28.846,67.324h3.83v3.83h-3.83z" />
<path
android:fillColor="#000000"
android:pathData="M28.846,28.845h3.83v3.86h-3.83z" />
<path
android:fillColor="#000000"
android:pathData="M24.986,71.154h3.859v3.861h-3.859z" />
<path
android:fillColor="#000000"
android:pathData="M24.986,25.015h3.859v3.83h-3.859z" />
<path
android:fillColor="#000000"
android:pathData="M21.156,75.016h3.83v3.83h-3.83z" />
<path
android:fillColor="#000000"
android:pathData="M21.156,21.155h3.83v3.86h-3.83z" />
<path
android:fillColor="#000000"
android:pathData="M17.296,78.846h3.86v3.859h-3.86z" />
<path
android:fillColor="#000000"
android:pathData="M17.296,17.325h3.86v3.83h-3.86z" />
<path
android:fillColor="#000000"
android:pathData="M13.466,82.705h3.83v3.83h-3.83z" />
<path
android:fillColor="#000000"
android:pathData="M17.296,51.945l3.86,0l3.83,0l3.86,0l3.83,0l0,-3.86l-3.83,0l-3.86,0l-3.83,0l-3.86,0l-3.83,0l-3.861,0l-3.83,0l0,3.86l3.83,0l3.861,0z" />
<path
android:fillColor="#000000"
android:pathData="M13.466,13.465h3.83v3.86h-3.83z" />
<path
android:fillColor="@android:color/white"
android:pathData="M7,11L1,11v2h6v-2zM9.17,7.76L7.05,5.64 5.64,7.05l2.12,2.12 1.41,-1.41zM13,1h-2v6h2L13,1zM18.36,7.05l-1.41,-1.41 -2.12,2.12 1.41,1.41 2.12,-2.12zM17,11v2h6v-2h-6zM14.83,16.24l2.12,2.12 1.41,-1.41 -2.12,-2.12 -1.41,1.41zM5.64,16.95l1.41,1.41 2.12,-2.12 -1.41,-1.41 -2.12,2.12zM11,23h2v-6h-2v6z"/>
</vector>

View File

@ -1,211 +1,216 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:a="http://schemas.android.com/apk/res/android"
a:id="@+id/main_list"
a:layout_width="fill_parent"
a:layout_height="fill_parent"
a:orientation="vertical">
<layout>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/main_list">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
a:id="@+id/main_music"
a:layout_width="fill_parent"
a:layout_height="wrap_content"
a:gravity="center_vertical"
a:paddingStart="6dp"
a:text="@string/main.music"
a:textAllCaps="true"
a:textAppearance="?android:attr/textAppearanceSmall"
a:textColor="@color/cyan"
a:textStyle="bold" />
<TextView
android:id="@+id/main_music"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:paddingStart="6dp"
android:text="@string/main.music"
android:textAllCaps="true"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/cyan"
android:textStyle="bold" />
<TextView
a:id="@+id/main_artists_button"
a:layout_width="fill_parent"
a:layout_height="wrap_content"
a:gravity="center_vertical"
a:minHeight="40dip"
a:paddingStart="6dip"
a:paddingEnd="6dip"
a:text="@string/main.artists_title"
a:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/main_artists_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="40dip"
android:paddingStart="6dip"
android:paddingEnd="6dip"
android:text="@string/main.artists_title"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
a:id="@+id/main_albums_button"
a:layout_width="fill_parent"
a:layout_height="wrap_content"
a:gravity="center_vertical"
a:minHeight="40dip"
a:paddingStart="6dip"
a:paddingEnd="6dip"
a:text="@string/main.albums_title"
a:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/main_albums_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="40dip"
android:paddingStart="6dip"
android:paddingEnd="6dip"
android:text="@string/main.albums_title"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
a:id="@+id/main_genres_button"
a:layout_width="fill_parent"
a:layout_height="wrap_content"
a:gravity="center_vertical"
a:minHeight="40dip"
a:paddingStart="6dip"
a:paddingEnd="6dip"
a:text="@string/main.genres_title"
a:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/main_genres_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="40dip"
android:paddingStart="6dip"
android:paddingEnd="6dip"
android:text="@string/main.genres_title"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
a:id="@+id/main_songs"
a:layout_width="fill_parent"
a:layout_height="wrap_content"
a:gravity="center_vertical"
a:paddingStart="6dp"
a:text="@string/main.songs_title"
a:textAllCaps="true"
a:textAppearance="?android:attr/textAppearanceSmall"
a:textColor="@color/cyan"
a:textStyle="bold" />
<TextView
android:id="@+id/main_songs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:paddingStart="6dp"
android:text="@string/main.songs_title"
android:textAllCaps="true"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/cyan"
android:textStyle="bold" />
<TextView
a:id="@+id/main_songs_button"
a:layout_width="fill_parent"
a:layout_height="wrap_content"
a:gravity="center_vertical"
a:minHeight="40dip"
a:paddingStart="6dip"
a:paddingEnd="6dip"
a:text="@string/main.songs_random"
a:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/main_songs_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="40dip"
android:paddingStart="6dip"
android:paddingEnd="6dip"
android:text="@string/main.songs_random"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
a:id="@+id/main_songs_starred"
a:layout_width="fill_parent"
a:layout_height="wrap_content"
a:gravity="center_vertical"
a:minHeight="40dip"
a:paddingStart="6dip"
a:paddingEnd="6dip"
a:text="@string/main.songs_starred"
a:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/main_songs_starred"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="40dip"
android:paddingStart="6dip"
android:paddingEnd="6dip"
android:text="@string/main.songs_starred"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
a:id="@+id/main_albums"
a:layout_width="fill_parent"
a:layout_height="wrap_content"
a:gravity="center_vertical"
a:paddingStart="6dp"
a:text="@string/main.albums_title"
a:textAllCaps="true"
a:textAppearance="?android:attr/textAppearanceSmall"
a:textColor="@color/cyan"
a:textStyle="bold" />
<TextView
android:id="@+id/main_albums"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:paddingStart="6dp"
android:text="@string/main.albums_title"
android:textAllCaps="true"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/cyan"
android:textStyle="bold" />
<TextView
a:id="@+id/main_albums_newest"
a:layout_width="fill_parent"
a:layout_height="wrap_content"
a:gravity="center_vertical"
a:minHeight="40dip"
a:paddingStart="6dip"
a:paddingEnd="6dip"
a:text="@string/main.albums_newest"
a:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/main_albums_newest"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="40dip"
android:paddingStart="6dip"
android:paddingEnd="6dip"
android:text="@string/main.albums_newest"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
a:id="@+id/main_albums_recent"
a:layout_width="fill_parent"
a:layout_height="wrap_content"
a:gravity="center_vertical"
a:minHeight="40dip"
a:paddingStart="6dip"
a:paddingEnd="6dip"
a:text="@string/main.albums_recent"
a:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/main_albums_recent"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="40dip"
android:paddingStart="6dip"
android:paddingEnd="6dip"
android:text="@string/main.albums_recent"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
a:id="@+id/main_albums_frequent"
a:layout_width="fill_parent"
a:layout_height="wrap_content"
a:gravity="center_vertical"
a:minHeight="40dip"
a:paddingStart="6dip"
a:paddingEnd="6dip"
a:text="@string/main.albums_frequent"
a:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/main_albums_frequent"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="40dip"
android:paddingStart="6dip"
android:paddingEnd="6dip"
android:text="@string/main.albums_frequent"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
a:id="@+id/main_albums_highest"
a:layout_width="fill_parent"
a:layout_height="wrap_content"
a:gravity="center_vertical"
a:minHeight="40dip"
a:paddingStart="6dip"
a:paddingEnd="6dip"
a:text="@string/main.albums_highest"
a:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/main_albums_highest"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="40dip"
android:paddingStart="6dip"
android:paddingEnd="6dip"
android:text="@string/main.albums_highest"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
a:id="@+id/main_albums_random"
a:layout_width="fill_parent"
a:layout_height="wrap_content"
a:gravity="center_vertical"
a:minHeight="40dip"
a:paddingStart="6dip"
a:paddingEnd="6dip"
a:text="@string/main.albums_random"
a:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/main_albums_random"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="40dip"
android:paddingStart="6dip"
android:paddingEnd="6dip"
android:text="@string/main.albums_random"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
a:id="@+id/main_albums_starred"
a:layout_width="fill_parent"
a:layout_height="wrap_content"
a:gravity="center_vertical"
a:minHeight="40dip"
a:paddingStart="6dip"
a:paddingEnd="6dip"
a:text="@string/main.albums_starred"
a:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/main_albums_starred"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="40dip"
android:paddingStart="6dip"
android:paddingEnd="6dip"
android:text="@string/main.albums_starred"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
a:id="@+id/main_albums_alphaByName"
a:layout_width="fill_parent"
a:layout_height="wrap_content"
a:gravity="center_vertical"
a:minHeight="40dip"
a:paddingStart="6dip"
a:paddingEnd="6dip"
a:text="@string/main.albums_alphaByName"
a:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/main_albums_alphaByName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="40dip"
android:paddingStart="6dip"
android:paddingEnd="6dip"
android:text="@string/main.albums_alphaByName"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
a:id="@+id/main_albums_alphaByArtist"
a:layout_width="fill_parent"
a:layout_height="wrap_content"
a:gravity="center_vertical"
a:minHeight="40dip"
a:paddingStart="6dip"
a:paddingEnd="6dip"
a:text="@string/main.albums_alphaByArtist"
a:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/main_albums_alphaByArtist"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="40dip"
android:paddingStart="6dip"
android:paddingEnd="6dip"
android:text="@string/main.albums_alphaByArtist"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
a:id="@+id/main_videos_title"
a:layout_width="fill_parent"
a:layout_height="wrap_content"
a:gravity="center_vertical"
a:paddingStart="6dp"
a:text="@string/main.videos"
a:textAllCaps="true"
a:textAppearance="?android:attr/textAppearanceSmall"
a:textColor="@color/cyan"
a:textStyle="bold" />
<TextView
android:id="@+id/main_videos_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:paddingStart="6dp"
android:text="@string/main.videos"
android:textAllCaps="true"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/cyan"
android:textStyle="bold" />
<TextView
a:id="@+id/main_videos"
a:layout_width="fill_parent"
a:layout_height="wrap_content"
a:gravity="center_vertical"
a:minHeight="40dip"
a:paddingStart="6dip"
a:paddingEnd="6dip"
a:text="@string/main.videos"
a:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
<TextView
android:id="@+id/main_videos"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="40dip"
android:paddingStart="6dip"
android:paddingEnd="6dip"
android:text="@string/main.videos"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
</ScrollView>
</layout>

View File

@ -43,7 +43,6 @@
<string name="delete_playlist">Opravdu smazat %1$s</string>
<string name="download.bookmark_removed" formatted="false">Záložka odstraněna.</string>
<string name="download.bookmark_set_at_position" formatted="false">Záložka vytvořena na %s.</string>
<string name="playlist.empty">Playlist je prázdný</string>
<string name="download.jukebox_not_authorized">Vzdálené ovládání není povoleno. Povolte jukebox mód v <b>Uživatelském &gt; Nastavení</b> na Subsonic serveru.</string>
<string name="download.jukebox_off">Vzdálené ovládání vypnuto. Hudba je přehrávána na telefonu.</string>
<string name="download.jukebox_offline">Vzdálené ovládání není dostupné v offline módu.</string>
@ -129,7 +128,6 @@
<string name="search.songs">Skladby</string>
<string name="search.title">Hledat</string>
<string name="select_album.empty">Média nenalezena</string>
<string name="select_album.n_selected">%d skladeb označeno.</string>
<string name="select_album.no_network">Varování: Připojení nedostupné.</string>
<string name="select_album.no_sdcard">Chyba: SD karta nedostupná.</string>
<string name="select_album.play_all">Přehrát vše</string>
@ -194,9 +192,7 @@
<string name="settings.directory_cache_time_60">1 hodina</string>
<string name="settings.disc_sort">Řadit skladby podle čísla CD</string>
<string name="settings.disc_sort_summary">Řadit seznam skladeb dle čísla CD a čísla skladby</string>
<string name="settings.display_bitrate">Zobrazovat bitrate a příponu souboru</string>
<string name="settings.display_bitrate_summary">Připojovat jméno umělce, bitrate a příponu souboru</string>
<string name="settings.download_transition">Zobrazit stahování při přehrávání</string>
<string name="settings.download_transition_summary">Při spuštění přehrávání přepnout na aktivitu stahování</string>
<string name="settings.gapless_playback">Přehrávání bez pauz</string>
<string name="settings.gapless_playback_summary">Zapnout přehrávání bez pauz</string>
@ -303,8 +299,6 @@
<string name="settings.show_artist_picture">Obrázek umělce v seznamu umělců</string>
<string name="settings.show_artist_picture_summary">Zobrazí obrázek umělce v náhledu umělců pokud je dostupný</string>
<string name="main.video" tools:ignore="UnusedResources">Video</string>
<string name="settings.wifi_required_summary">Streamovat media pouze přes Wi-Fi připojení</string>
<string name="settings.wifi_required_title">Streamovat pouze přes Wi-Fi</string>
<string name="song_details.all">%1$s%2$s</string>
<string name="song_details.kbps">%d kbps</string>
<string name="util.bytes_format.byte">0 B</string>
@ -358,7 +352,6 @@
<string name="settings.playback.bluetooth_all">Všechny bluetooth přístroje</string>
<string name="settings.playback.bluetooth_a2dp">Pouze audio (A2DP) přístroje</string>
<string name="settings.playback.bluetooth_disabled">Vypnuto</string>
<string name="settings.playback.single_button_bluetooth_device">Jedno tlačítko přehráváná/pauza na bluetooth přístroji</string>
<string name="settings.playback.single_button_bluetooth_device_summary">Povolení tohoto nastavení může pomoci zlepšit funkci spuštění/pozastavení přehrávání na starších bluetooth přístrojích</string>
<string name="settings.debug.title">Možnosti ladění aplikace</string>
<string name="settings.debug.log_to_file">Zapisovat logy ladění do souboru</string>
@ -367,7 +360,6 @@
<string name="settings.debug.log_keep">Zachovat soubory</string>
<string name="settings.debug.log_delete">Smazat soubory</string>
<string name="settings.debug.log_deleted">Smazat soubory logů.</string>
<string name="server_selector.label">Nakonfigurované servery</string>
<string name="server_selector.delete_confirmation">Opravdu chcete odebrat server?</string>
<string name="server_editor.label">Úprava serveru</string>
@ -383,36 +375,13 @@
<plurals name="select_album_n_songs">
<item quantity="one">%d skladba</item>
<item quantity="few">%d skladby</item>
<item quantity="many">%d skladeb</item>
<item quantity="other">%d skladeb</item>
</plurals>
<plurals name="select_album_n_songs_pinned">
<item quantity="one">%d skladba vybrána pro připnutí.</item>
<item quantity="few">%d skladby vybrány pro připnutí.</item>
<item quantity="other">%d skladeb vybráno pro připnutí.</item>
</plurals>
<plurals name="select_album_n_songs_downloaded">
<item quantity="one">%d skladba vybrána pro stažení.</item>
<item quantity="few">%d skladby vybrány pro stažení.</item>
<item quantity="other">%d skladeb vybráno pro stažení.</item>
</plurals>
<plurals name="select_album_n_songs_unpinned">
<item quantity="one">%d skladba vybrána pro odepnutí.</item>
<item quantity="few">%d skladby vybrány pro odepnutí.</item>
<item quantity="other">%d skladeb vybráno pro odepnutí.</item>
</plurals>
<plurals name="select_album_n_songs_added">
<item quantity="one">%d skladba přidána na konec fronty přehrávání.</item>
<item quantity="few">%d skladyb přidány na konec fronty přehrávání.</item>
<item quantity="other">%d skladeb přidáno na konec fronty přehrávání.</item>
</plurals>
<plurals name="select_album_n_songs_play_next">
<item quantity="one">%d skladba přidána za aktuální skladbu.</item>
<item quantity="few">%d skladby přidány za aktuální skladbu.</item>
<item quantity="other">%d skladeb přidáno za aktuální skladbu.</item>
</plurals>
<plurals name="select_album_donate_dialog_n_trial_days_left">
<item quantity="one">Zbývá %d den zkušební doby</item>
<item quantity="few">Zbývají %d dny zkušební doby</item>
<item quantity="many">Zbývá %d dní zkušební doby</item>
<item quantity="other">Zbývá %d dní zkušební doby</item>
</plurals>
@ -428,11 +397,4 @@
<string name="api.subsonic.upgrade_client">Nekompatibilní verze. Aktualizujte prosím Ultrasonic Android aplikaci.</string>
<string name="api.subsonic.upgrade_server">Nekompatibilní verze. Aktualizujte prosím Subsonic server.</string>
<!-- Subsonic features -->
<string name="settings.features_title">Příznaky funkcí</string>
<string name="settings.five_star_rating_title">Používat pět hvězdiček pro hodnocení skladeb</string>
<string name="settings.five_star_rating_description">Používat pět hvězdiček pro hodnocení skladeb
namísto jednoduchého jednohvězdičkového hodnocení.
</string>
</resources>
</resources>

View File

@ -14,35 +14,47 @@
<string name="button_bar.chat">Chat</string>
<string name="button_bar.home">Ultrasonic Hauptseite</string>
<string name="button_bar.now_playing">Aktuelle Wiedergabe</string>
<string name="buttons.play">Abspielen</string>
<string name="buttons.pause">Pause</string>
<string name="buttons.repeat">Wiederholen</string>
<string name="buttons.shuffle">Zufall</string>
<string name="buttons.stop">Stop</string>
<string name="buttons.next">Nächstes</string>
<string name="buttons.previous">Vorheriges</string>
<string name="podcasts.label">Podcast</string>
<string name="podcasts_channels.empty">Keine Podcast Kanäle registriert</string>
<string name="button_bar.podcasts">Podcast</string>
<string name="button_bar.playlists">Wiedergabeliste</string>
<string name="button_bar.search">Suche</string>
<string name="chat.send_a_message">Nachricht senden</string>
<string name="common.album">Album</string>
<string name="common.appname">Ultrasonic</string>
<string name="common.artist">Künstler</string>
<string name="common.cancel">Abbrechen</string>
<string name="common.comment">Kommentar</string>
<string name="common.confirm">Bestätigen</string>
<string name="common.delete">Löschen</string>
<string name="common.download">Herunterladen</string>
<string name="common.info">Details</string>
<string name="common.multiple_genres">Mehrere Genre</string>
<string name="common.multiple_genres">Mehrere Genres</string>
<string name="common.name">Name</string>
<string name="common.ok">OK</string>
<string name="common.pin">Anheften</string>
<string name="common.pause">Pause</string>
<string name="common.play">Abspielen</string>
<string name="common.play_last">Zuletzt spielen</string>
<string name="common.play_next">Als nächstes spielen</string>
<string name="common.play_previous">Vorheriges abspielen</string>
<string name="common.play_now">Jetzt spielen</string>
<string name="common.play_shuffled">Zufällig spielen</string>
<string name="common.public">Öffentlich</string>
<string name="common.save">Speichern</string>
<string name="common.title">Titel</string>
<string name="common.unpin">Lösen</string>
<string name="common.various_artists">Verschiedene Künstler</string>
<string name="delete_playlist">Möchtest du %1$s löschen</string>
<string name="download.bookmark_removed" formatted="false">Lesezeichen entfernt</string>
<string name="download.bookmark_set_at_position" formatted="false">Lesezeichen gesetzt als %s.</string>
<string name="playlist.empty">Wiedergabeliste ist leer</string>
<string name="download.jukebox_not_authorized">Fernbedienung ist nicht erlaubt. Bitte Jukebox Modus auf dem Subsonic Server in <b>Benutzer > Einstellungen</b> aktivieren.</string>
<string name="download.jukebox_off">Fernbedienung ausgeschaltet. Musik wird auf dem Telefon wiedergegeben.</string>
<string name="download.jukebox_offline">Fernbedienungs-Modus is Offline nicht verfügbar.</string>
@ -94,6 +106,7 @@
<string name="main.genres_title">Genres</string>
<string name="main.music">Musik</string>
<string name="main.offline">Offline</string>
<string name="main.setup_server">%s - Server einrichten</string>
<string name="main.shuffle">Gemischte Wiedergabe</string>
<string name="main.songs_random">Zufällig</string>
<string name="main.songs_starred">Mit Stern</string>
@ -104,6 +117,7 @@
<string name="menu.common">Allgemein</string>
<string name="menu.deleted_playlist">Wiedergabeliste %s gelöscht</string>
<string name="menu.deleted_playlist_error">Löschen der Wiedergabeliste %s ist fehlgeschlagen</string>
<string name="menu.downloads">Downloads</string>
<string name="menu.exit">Ende</string>
<string name="menu.navigation">Navigation</string>
<string name="menu.settings">Einstellungen</string>
@ -111,7 +125,7 @@
<string name="music_library.label">Medienbibliothek</string>
<string name="music_library.label_offline">Offline Medien</string>
<string name="music_service.retry">Netzwerkfehler. Neuer Versuch %1$d von %2$d.</string>
<string name="parser.artist_count">Habe %d Künstler.</string>
<string name="parser.artist_count">%d Künstler gefunden</string>
<string name="parser.reading">Lese vom Server.</string>
<string name="parser.reading_done">Lese vom Server. Fertig!</string>
<string name="playlist.label">Wiedergabelisten</string>
@ -128,7 +142,6 @@
<string name="search.songs">Titel</string>
<string name="search.title">Suche</string>
<string name="select_album.empty">Keine Medien gefunden</string>
<string name="select_album.n_selected">%d Titel ausgewählt</string>
<string name="select_album.no_network">Warnung: kein Netz.</string>
<string name="select_album.no_sdcard">Fehler: Keine SD Karte verfügbar.</string>
<string name="select_album.play_all">Alles wiedergeben</string>
@ -136,7 +149,7 @@
<string name="select_artist.folder">Ordner wählen</string>
<string name="select_genre.empty">Keine Genres gefunden</string>
<string name="select_playlist.empty">Keine Wiedergabelisten auf dem Server</string>
<string name="service.connecting">Kontaktierse Server, bitte warten.</string>
<string name="service.connecting">Kontaktiere Server, bitte warten.</string>
<string name="settings.appearance_title">Aussehen</string>
<string name="settings.buffer_length">Puffer-Länge</string>
<string name="settings.buffer_length_0">Deaktiviert</string>
@ -183,7 +196,7 @@
<string name="settings.default_albums">Standard Alben</string>
<string name="settings.default_artists">Standard Künstler</string>
<string name="settings.default_songs">Standard Titel</string>
<string name="settings.directory_cache_time">Verzeichnis Chache-Zeit</string>
<string name="settings.directory_cache_time">Cache-Zeit für Verzeichnisse</string>
<string name="settings.directory_cache_time_0">Deaktiviert</string>
<string name="settings.directory_cache_time_1">1 Minute</string>
<string name="settings.directory_cache_time_10">10 Minuten</string>
@ -193,9 +206,8 @@
<string name="settings.directory_cache_time_60">1 hour</string>
<string name="settings.disc_sort">Sortiere Titel nach CD</string>
<string name="settings.disc_sort_summary">Sortierung der Titelliste nach CD-Nummer und Titelnummer</string>
<string name="settings.display_bitrate">Bitrate und Dateiendung zeigen</string>
<string name="settings.display_bitrate_summary">Bitrate und Dateityp hinter dem Künstler anzeigen</string>
<string name="settings.download_transition">Herunterladen bei Wiedergabe</string>
<string name="settings.display_bitrate">Bitrate und Dateiendung anzeigen</string>
<string name="settings.display_bitrate_summary">Bitrate und Dateityp hinter der Künstler*in anzeigen</string>
<string name="settings.download_transition_summary">Herunterladen zusammen mit der Wiedergabe starten.</string>
<string name="settings.gapless_playback">Lückenlose Wiedergabe</string>
<string name="settings.gapless_playback_summary">Lückenlose Wiedergabe aktivieren</string>
@ -206,7 +218,7 @@
<string name="settings.invalid_url">Bitte eine gültige URL angeben.</string>
<string name="settings.invalid_username">Bitte einen gültigen Benutzernamen eingeben (ohne führende Leerzeichen).</string>
<string name="settings.max_albums">Maximale Alben</string>
<string name="settings.max_artists">Maximale Künstler</string>
<string name="settings.max_artists">Max Künstler</string>
<string name="settings.max_bitrate_112">112 Kbps</string>
<string name="settings.max_bitrate_128">128 Kbps</string>
<string name="settings.max_bitrate_160">160 Kbps</string>
@ -217,12 +229,12 @@
<string name="settings.max_bitrate_64">64 Kbps</string>
<string name="settings.max_bitrate_80">80 Kbps</string>
<string name="settings.max_bitrate_96">96 Kbps</string>
<string name="settings.max_bitrate_mobile">Maximale Bitragte - Mobil</string>
<string name="settings.max_bitrate_mobile">Max Bitrate - Mobil</string>
<string name="settings.max_bitrate_unlimited">Unbegrenzt</string>
<string name="settings.max_bitrate_wifi">Maximale Bitrate - WLAN</string>
<string name="settings.max_bitrate_wifi">Max Bitrate - WLAN</string>
<string name="settings.max_songs">Maximale Titel</string>
<string name="settings.media_button_summary">Auf Telefon, Headset und Bluetooth-Media-Tasten reagieren</string>
<string name="settings.media_button_title">Media Tasten</string>
<string name="settings.media_button_title">Medien Tasten</string>
<string name="settings.network_timeout">Netzwerk Zeitüberschreitung</string>
<string name="settings.network_timeout_105000">105 Sekunden</string>
<string name="settings.network_timeout_120000">120 Sekunden</string>
@ -245,6 +257,7 @@
<string name="settings.preload_unlimited">Unbegrenzt</string>
<string name="settings.playback.resume_play_on_headphones_plug.title">Fortsetzen mit Kopfhörer</string>
<string name="settings.playback.resume_play_on_headphones_plug.summary">Die App setzt eine pausierte Wiedergabe beim Anschließen der Kopfhörer fort.</string>
<string name="settings.scrobble_title">Gespielte Musik scrobbeln</string>
<string name="settings.search_1">1</string>
<string name="settings.search_10">10</string>
<string name="settings.search_100">100</string>
@ -289,6 +302,7 @@
<string name="settings.testing_unlicensed">Verbindung OK, Server nicht lizensiert.</string>
<string name="settings.theme_light">Hell</string>
<string name="settings.theme_dark">Dunkel</string>
<string name="settings.theme_black">Schwarz</string>
<string name="settings.theme_title">Thema</string>
<string name="settings.title.allow_self_signed_certificate">Selbst-signierte HTTPS Zertifikate erlauben</string>
<string name="settings.title.enable_ldap_users_support">LDAP Benutzeranmeldung aktivieren</string>
@ -298,8 +312,8 @@
<string name="settings.use_id3">Durchsuchen von ID3-Tags</string>
<string name="settings.use_id3_summary">Nutze ID3 Tag Methode anstatt Dateisystem-Methode</string>
<string name="main.video" tools:ignore="UnusedResources">Film</string>
<string name="settings.wifi_required_summary">Nur bei WLAN verbindung streamen</string>
<string name="settings.wifi_required_title">Nur über WLAN streamen</string>
<string name="settings.wifi_required_summary">Medien nur über gebührenfreie Verbindungen herunterladen</string>
<string name="settings.wifi_required_title">Nur über WLAN herunterladen</string>
<string name="song_details.all">%1$s%2$s</string>
<string name="song_details.kbps">%d kbps</string>
<string name="util.bytes_format.byte">0 B</string>
@ -312,11 +326,13 @@
<string name="widget.sdcard_busy">SD Karte nicht verfügbar</string>
<string name="widget.sdcard_missing">Keine SD Karte</string>
<string name="settings.share_description_default">Standard Beschreibung einer Freigabe</string>
<string name="settings.sharing_title">Teilen</string>
<string name="settings.sharing_title">Freigaben</string>
<string name="settings.sharing_always_ask_for_details">Immer nach Details fragen</string>
<string name="settings.share_expiration_default">Standard Ablaufzeit</string>
<string name="do_not_show_dialog_again">Dialog nicht wieder anzeigen</string>
<string name="share_set_share_options">Ferigabeoptionen</string>
<string name="share_set_share_options">Freigabeoptionen</string>
<string name="share_on_server">Freigabe auf Server erstellen</string>
<string name="settings.share_on_server_summary">Teilen erzeugt eine Freigabe auf dem Server und sendet die URL. Wenn ausgeschaltet, werden nur die Lied-Details geteilt.</string>
<string name="no_expiration">Kein Ablaufdatum</string>
<string name="download.toggle_playlist">Wiedergabeliste umschalten</string>
<string name="download.bookmark_set">Lesezeichen setzen</string>
@ -339,7 +355,8 @@
<string name="settings.share_expiration">Ablaufzeit</string>
<string name="download_song_removed">%s wurde von der Wiedergabeliste entfernt</string>
<string name="download.share_playlist">Wiedergabeliste teilen</string>
<string name="settings.share_greeting_default">Standard Begrüßung beim Teilen</string>
<string name="download.share_song">Aktuelles Lied teilen</string>
<string name="settings.share_greeting_default">Standard Freigabe-Begrüßung</string>
<string name="share_default_greeting">Hör dir mal die Musik an, die ich mit dir über %s geteilt habe.</string>
<string name="share_via">Titel teilen über</string>
<string name="menu.share">Freigabe</string>
@ -347,11 +364,19 @@
<string name="settings.show_all_songs_by_artist_summary">Einen neuen Eintrag in der Künstleransicht hinzufügen, um auf alle Lieder eines Künstlers zuzugreifen</string>
<string name="download.menu_show_artist">Künstler zeigen</string>
<string name="common_multiple_years">Mehrere Jahre</string>
<string name="settings.playback.resume_on_bluetooth_device">Wiedergabe fortsetzen, wenn ein Bluetooth Gerät verbunden wurde</string>
<string name="settings.playback.pause_on_bluetooth_device">Wiedergabe pausieren, wenn ein Bluetooth Gerät getrennt wurde</string>
<string name="settings.playback.bluetooth_all">Alle Bluetooth Geräte</string>
<string name="settings.playback.bluetooth_a2dp">Nur Audio (A2DP) Geräte</string>
<string name="settings.playback.bluetooth_disabled">Deaktiviert</string>
<string name="settings.debug.log_keep">Dateien behalten</string>
<string name="settings.debug.log_delete">Dateien löschen</string>
<string name="settings.debug.log_deleted">Logeinträge gelöscht</string>
<string name="server_editor.new_label">Server hinzufügen</string>
<!-- Subsonic api errors -->
<string name="api.subsonic.generic">Allgemeiner API Fehler: %1$s</string>
<string name="api.subsonic.generic.no.message">Keine Nachricht vom Server erhalten</string>
<string name="api.subsonic.token_auth_not_supported_for_ldap">Autorisirung mit Token ist für LDAP Benutzer nicht möglich.</string>
<string name="api.subsonic.token_auth_not_supported_for_ldap">Autorisierung mit Token ist für LDAP Benutzer nicht möglich.</string>
<string name="api.subsonic.not_authenticated">Falscher Benutzername oder Kennwort.</string>
<string name="api.subsonic.not_authorized">Nicht autorisiert. Bitte die Rechte auf dem Subsonic Server überprüfen.</string>
<string name="api.subsonic.param_missing">Erforderlicher Parameter fehlt.</string>
@ -361,10 +386,8 @@
<string name="api.subsonic.upgrade_server">Inkompatible Versionen. Bitte den subsonic Server aktualisieren.</string>
<!-- Subsonic features -->
<string name="settings.features_title">Funktionseinstellungem</string>
<string name="settings.five_star_rating_title">Verwenden Sie Fünf-Sterne-Bewertung für Songs</string>
<string name="settings.five_star_rating_description">Verwenden Sie Fünf-Sterne-Bewertungssystem für Songs
         anstatt einfach Elemente zu markieren / zu entfernen.
</string>
<string name="settings.features_title">Besonderheiten</string>
<string name="settings.five_star_rating_title">Fünf-Stern Bewertung</string>
<string name="settings.five_star_rating_description">Benutze Bewertungssystem mit fünf Sternen anstatt Lieder mit bloß einem Stern zu markieren.</string>
</resources>

View File

@ -50,12 +50,14 @@
<string name="common.play_shuffled">Reproducción aleatoria</string>
<string name="common.public">Public</string>
<string name="common.save">Guardar</string>
<string name="common.select_all">Seleccionar todo</string>
<string name="common.title">Título</string>
<string name="common.unpin">Desanclar</string>
<string name="common.various_artists">Varios artistas</string>
<string name="delete_playlist">Quieres eliminar %1$s</string>
<string name="download.bookmark_removed" formatted="false">Marcador eliminado.</string>
<string name="download.bookmark_set_at_position" formatted="false">Marcador añadido a %s.</string>
<string name="download.empty">Nada se esta descargando</string>
<string name="playlist.empty">La lista de reproducción esta vacía</string>
<string name="download.jukebox_not_authorized">El control remoto no esta habilitado. Por favor habilita el modo jukebox en <b>Configuración &gt; Usuarios</b> en tu servidor de Subsonic.</string>
<string name="download.jukebox_off">Control remoto apagado. La música se reproduce en tu dispositivo.</string>
@ -108,6 +110,7 @@
<string name="main.genres_title">Géneros</string>
<string name="main.music">Música</string>
<string name="main.offline">Sin conexión</string>
<string name="main.setup_server">%s - Configurar servidor</string>
<string name="main.shuffle">Reproducción aleatoria</string>
<string name="main.songs_random">Aleatorio</string>
<string name="main.songs_starred">Me gusta</string>
@ -120,6 +123,7 @@
<string name="menu.common">Común</string>
<string name="menu.deleted_playlist">Eliminada lista de reproducción %s</string>
<string name="menu.deleted_playlist_error">Fallo al eliminar la lista de reproducción %s</string>
<string name="menu.downloads">Descargas</string>
<string name="menu.exit">Salir</string>
<string name="menu.navigation">Navegación</string>
<string name="menu.settings">Configuración</string>
@ -167,6 +171,7 @@
<string name="settings.buffer_length_5">5 segundos</string>
<string name="settings.buffer_length_60">1 minuto</string>
<string name="settings.buffer_length_8">8 segundos</string>
<string name="settings.custom_cache_location">Usar ubicación de caché personalizada</string>
<string name="settings.cache_location">Ubicación de la Caché</string>
<string name="settings.cache_location_error">Ubicación de la caché no válida. Usando la localización predeterminada.</string>
<string name="settings.cache_size">Tamaño de la caché</string>
@ -209,8 +214,8 @@
<string name="settings.directory_cache_time_60">1 hora</string>
<string name="settings.disc_sort">Ordenar canciones por disco</string>
<string name="settings.disc_sort_summary">Ordena las canciones por el número de disco y el número de pista</string>
<string name="settings.display_bitrate">Mostrar bitrate y extensión</string>
<string name="settings.display_bitrate_summary">Añadir al nombre del artista el bitrate la extensión del fichero</string>
<string name="settings.display_bitrate">Mostrar tasa de bits y la extensión del archivo</string>
<string name="settings.display_bitrate_summary">Añadir el nombre del artista con la tasa de bits y la extensión del archivo</string>
<string name="settings.download_transition">Mostrar descargas en reproducción</string>
<string name="settings.download_transition_summary">Mostrar la actividad de descarga cuando comienza la reproducción</string>
<string name="settings.gapless_playback">Reproducción sin pausas</string>
@ -294,6 +299,7 @@
<string name="settings.server_scaling_title">Escalado de caratulas en el servidor</string>
<string name="settings.server_unused">Sin usar</string>
<string name="settings.server_username">Nombre de usuario</string>
<string name="settings.server_color">Color del servidor</string>
<string name="settings.show_lockscreen_controls">Mostrar controles en la pantalla de bloqueo</string>
<string name="settings.show_lockscreen_controls_summary">Mostrar controles de reproducción en la pantalla de bloqueo</string>
<string name="settings.show_notification">Mostrar notificación</string>
@ -322,8 +328,8 @@
<string name="settings.show_artist_picture">Mostrar la imagen del artista en la lista de artistas</string>
<string name="settings.show_artist_picture_summary">Muestra la imagen del artista en la lista de artistas si está disponible</string>
<string name="main.video" tools:ignore="UnusedResources">Vídeo</string>
<string name="settings.wifi_required_summary">Solo trasmitir medios si esta conectado a la Wi-Fi</string>
<string name="settings.wifi_required_title">Trasmitir solo por Wi-Fi</string>
<string name="settings.wifi_required_summary">Solo descargar medios en conexiones sin medir</string>
<string name="settings.wifi_required_title">Descargar solo por Wi-Fi</string>
<string name="song_details.all">%1$s%2$s</string>
<string name="song_details.kbps">%d kbps</string>
<string name="util.bytes_format.byte">0 B</string>
@ -381,7 +387,7 @@
<string name="settings.playback.bluetooth_all">Todos los dispositivos Bluetooth</string>
<string name="settings.playback.bluetooth_a2dp">Solo dispositivos de audio (A2DP)</string>
<string name="settings.playback.bluetooth_disabled">Deshabilitado</string>
<string name="settings.playback.single_button_bluetooth_device">Reproducir / Pausar con un solo botón en el dispositivo Bluetooth</string>
<string name="settings.playback.single_button_bluetooth_device">Dispositivo Bluetooth con solo un único botón Reproducir / Pausa</string>
<string name="settings.playback.single_button_bluetooth_device_summary">Habilitar esto puede ayudar con los dispositivos Bluetooth más antiguos cuando la reproducción / pausa no funciona correctamente</string>
<string name="settings.debug.title">Opciones de depuración</string>
<string name="settings.debug.log_to_file">Escribir registro de depuración en un archivo</string>
@ -392,8 +398,6 @@
<string name="settings.debug.log_deleted">Archivos de registro eliminados.</string>
<string name="notification.downloading_title">Descargando medios en segundo plano…</string>
<string name="server_selector.label">Servidores configurados</string>
<string name="server_selector.delete_confirmation">¿Seguro que deseas borrar el servidor?</string>
<string name="server_editor.label">Editando servidor</string>
@ -414,23 +418,27 @@
<item quantity="other">%d canciones</item>
</plurals>
<plurals name="select_album_n_songs_pinned">
<item quantity="one">%d canción seleccionada para ser anclada.</item>
<item quantity="other">%d canciones seleccionadas para ser ancladas.</item>
<item quantity="one">%d canción seleccionada para ser anclada</item>
<item quantity="other">%d canciones seleccionadas para ser ancladas</item>
</plurals>
<plurals name="select_album_n_songs_downloaded">
<item quantity="one">%d canción seleccionada para ser descargada.</item>
<item quantity="other">%d canciones seleccionadas para ser descargadas.</item>
<item quantity="one">%d canción seleccionada para ser descargada</item>
<item quantity="other">%d canciones seleccionadas para ser descargadas</item>
</plurals>
<plurals name="select_album_n_songs_unpinned">
<item quantity="one">%d canción seleccionada para ser desanclada.</item>
<item quantity="other">%d canciones seleccionadas para ser desancladas.</item>
<item quantity="one">%d canción desanclada</item>
<item quantity="other">%d canciones desancladas</item>
</plurals>
<plurals name="select_album_n_songs_deleted">
<item quantity="one">%d canción eliminada</item>
<item quantity="other">%d canciones eliminadas</item>
</plurals>
<plurals name="select_album_n_songs_added">
<item quantity="one">%d canción añadida al final de la cola de reproducción.</item>
<item quantity="other">%d canciones añadidas al final de la cola de reproducción.</item>
<item quantity="one">%d canción añadida al final de la cola de reproducción</item>
<item quantity="other">%d canciones añadidas al final de la cola de reproducción</item>
</plurals>
<plurals name="select_album_n_songs_play_next">
<item quantity="one">%d canción insertada después de la canción actual.</item>
<item quantity="one">%d canción insertada después de la canción actual</item>
<item quantity="other">%d canciones insertadas después de la canción actual.</item>
</plurals>
<plurals name="select_album_donate_dialog_n_trial_days_left">
@ -451,10 +459,10 @@
<string name="api.subsonic.upgrade_server">Versiones incompatibles. Por favor actualiza el servidor de Subsonic.</string>
<!-- Subsonic features -->
<string name="settings.features_title">Funciones experimentales</string>
<string name="settings.features_title">Características</string>
<string name="settings.five_star_rating_title">Use cinco estrellas para las canciones</string>
<string name="settings.five_star_rating_description">Utilice el sistema de calificación de cinco estrellas para canciones
en lugar de simplemente destacar / desestimar elementos.
en lugar de simplemente marcar / desmarcar elementos.
</string>
</resources>

View File

@ -28,7 +28,9 @@
<string name="button_bar.playlists">Playlists</string>
<string name="button_bar.search">Recherche</string>
<string name="chat.send_a_message">Envoyer un message</string>
<string name="common.album">Album</string>
<string name="common.appname">Ultrasonic</string>
<string name="common.artist">Artiste</string>
<string name="common.cancel">Annuler</string>
<string name="common.comment">Commenter</string>
<string name="common.confirm">Confirmer</string>
@ -48,12 +50,12 @@
<string name="common.play_shuffled">Jouer aléatoirement</string>
<string name="common.public">Public</string>
<string name="common.save">Enregistrer</string>
<string name="common.title">Titre</string>
<string name="common.unpin">Détacher</string>
<string name="common.various_artists">Artistes divers</string>
<string name="delete_playlist">Voulez-vous supprimer %1$s</string>
<string name="download.bookmark_removed" formatted="false">Signet supprimé.</string>
<string name="download.bookmark_set_at_position" formatted="false">Signet ajouté à %s.</string>
<string name="playlist.empty">La playlist est vide</string>
<string name="download.jukebox_not_authorized">La télécommande n\'est pas autorisée. Veuillez activer le mode jukebox dans <b>Utilisateurs &gt; Paramètres</b> à partir de votre serveur Subsonic.</string>
<string name="download.jukebox_off">Mode jukebox désactivé. La musique est jouée sur l\'appareil.</string>
<string name="download.jukebox_offline">Le mode jukebox n\'est pas disponible en mode déconnecté.</string>
@ -117,6 +119,7 @@
<string name="menu.common">Général</string>
<string name="menu.deleted_playlist">Playlist %s supprimée</string>
<string name="menu.deleted_playlist_error">Échec de suppression de la playlist %s</string>
<string name="menu.downloads">Téléchargements</string>
<string name="menu.exit">Quitter</string>
<string name="menu.navigation">Navigation</string>
<string name="menu.settings">Paramètres</string>
@ -141,7 +144,6 @@
<string name="search.songs">Titres</string>
<string name="search.title">Recherche</string>
<string name="select_album.empty">Aucun titre trouvé</string>
<string name="select_album.n_selected">%d pistes sélectionnées.</string>
<string name="select_album.no_network">Avertissement : Aucun réseau disponible.</string>
<string name="select_album.no_sdcard">Erreur : Aucune carte SD disponible.</string>
<string name="select_album.play_all">Tout jouer</string>
@ -206,7 +208,7 @@
<string name="settings.directory_cache_time_60">1 hour</string>
<string name="settings.disc_sort">Trier les titres par disque</string>
<string name="settings.disc_sort_summary">Trier la liste des titres par numéro de disques/pistes</string>
<string name="settings.display_bitrate">Afficher bitrate et suffixe du fichier</string>
<string name="settings.display_bitrate">Afficher le Bitrate et lextension de fichier</string>
<string name="settings.display_bitrate_summary">Ajouter le nom d\'artiste, bitrate et suffixe du fichier</string>
<string name="settings.download_transition">Afficher le téléchargement lors de la lecture</string>
<string name="settings.download_transition_summary">Aller vers les téléchargements lorsque qu\'un titre est écouté</string>
@ -278,6 +280,8 @@
<string name="settings.search_title">Paramètres de recherche</string>
<string name="settings.send_bluetooth_album_art_summary">Envoyer la pochette de l\'album via Bluetooth (peut causer l\'échec des notifications Bluetooth)</string>
<string name="settings.send_bluetooth_album_art">Pochette de l\'album via Bluetooth</string>
<string name="settings.disable_send_now_playing_list_summary">La liste de lecture ne sera pas envoyée aux appareils connectés. Cela peut restaurer la compatibilité avec les appareils AVRCP 1.3 lorsque laffichage de la piste actuelle nest pas mise à jour.</string>
<string name="settings.disable_send_now_playing_list">Désactiver lenvoi de la liste de lecture</string>
<string name="settings.send_bluetooth_notification_summary">Envoyer des notifications de lecture via Bluetooth</string>
<string name="settings.send_bluetooth_notification">Envoyer une notification Bluetooth</string>
<string name="settings.server_manage_servers">Gérer les serveurs</string>
@ -289,6 +293,7 @@
<string name="settings.server_scaling_title">Mise à l\'échelle des pochettes d\'album sur le serveur</string>
<string name="settings.server_unused">Inutilisé</string>
<string name="settings.server_username">Nom d\'utilisateur</string>
<string name="settings.server_color">Couleur du serveur</string>
<string name="settings.show_lockscreen_controls">Boutons de contrôle sur l\'écran de verrouillage</string>
<string name="settings.show_lockscreen_controls_summary">Afficher les contrôles de lecture sur l\'écran de verrouillage</string>
<string name="settings.show_notification">Notifications</string>
@ -317,8 +322,6 @@
<string name="settings.show_artist_picture">Afficher limage de lartiste dans la liste</string>
<string name="settings.show_artist_picture_summary">Affiche limage de lartiste dans la liste des artistes si celle-ci est disponible</string>
<string name="main.video" tools:ignore="UnusedResources">Vidéo</string>
<string name="settings.wifi_required_summary">Lire en streaming seulement si connecté en Wi-Fi</string>
<string name="settings.wifi_required_title">Streaming en Wi-Fi uniquement</string>
<string name="song_details.all">%1$s%2$s</string>
<string name="song_details.kbps">%d Kb/s</string>
<string name="util.bytes_format.byte">0 o</string>
@ -332,10 +335,13 @@
<string name="widget.sdcard_missing">Aucune carte SD</string>
<string name="settings.share_description_default">Description par défaut de la collection partagée</string>
<string name="settings.sharing_title">Répartition</string>
<string name="settings.sharing_always_ask_for_details_summary">Toujours demander une description et une date dexpiration lors de la création dun partage sur le serveur</string>
<string name="settings.sharing_always_ask_for_details">Toujours demander pour plus de détails</string>
<string name="settings.share_expiration_default">Temps d\'expiration par défaut</string>
<string name="do_not_show_dialog_again">Ne montre pas de dialogue à nouveau</string>
<string name="share_set_share_options">Définir les options de partage</string>
<string name="share_on_server">Créer un partage sur le serveur</string>
<string name="settings.share_on_server_summary">Partager créera un partage sur le serveur et donnera son URL. Si désactivé, seuls les détails de la piste seront partagées.</string>
<string name="no_expiration">Aucune date d\'expiration</string>
<string name="download.toggle_playlist">Changer de vue playlist</string>
<string name="download.bookmark_set">Mettre en signet</string>
@ -358,6 +364,7 @@
<string name="settings.share_expiration">Temps d\'expiration</string>
<string name="download_song_removed">\"%s\" retiré de la playlist</string>
<string name="download.share_playlist">Partager playlist</string>
<string name="download.share_song">Partager la piste actuelle</string>
<string name="settings.share_greeting_default">Texte par défaut lors d\'un partage</string>
<string name="share_default_greeting">Regardez cette musique que j\'ai partagée depuis %s</string>
<string name="share_via">Partager des titres via</string>
@ -372,7 +379,7 @@
<string name="settings.playback.bluetooth_all">Tous les appareils Bluetooth</string>
<string name="settings.playback.bluetooth_a2dp">Seulement les appareils audio (A2DP)</string>
<string name="settings.playback.bluetooth_disabled">Désactivé</string>
<string name="settings.playback.single_button_bluetooth_device">Bouton unique Lecture/Pause en Bluetooth</string>
<string name="settings.playback.single_button_bluetooth_device">Appareil Bluetooth avec un seul bouton Lecture/Pause</string>
<string name="settings.playback.single_button_bluetooth_device_summary">Activer cela peut aider sur les anciens appareils Bluetooth lorsque Lecture/Pause ne fonctionne pas correctement</string>
<string name="settings.debug.title">Paramètres de debug</string>
<string name="settings.debug.log_to_file">Enregistrer les logs de debug dans des fichiers</string>
@ -381,7 +388,7 @@
<string name="settings.debug.log_keep">Conserver les fichiers</string>
<string name="settings.debug.log_delete">Supprimer les fichiers</string>
<string name="settings.debug.log_deleted">Fichiers de log supprimés</string>
<string name="notification.downloading_title">Téléchargement des fichiers en arrière-plan…</string>
<string name="server_selector.label">Serveurs configurés</string>
<string name="server_selector.delete_confirmation">Êtes-vous sûr de vouloir supprimer ce serveur?</string>
@ -402,26 +409,6 @@
<item quantity="one">%d titre</item>
<item quantity="other">%d titres</item>
</plurals>
<plurals name="select_album_n_songs_pinned">
<item quantity="one">%d titre sélectionné pour être épinglé.</item>
<item quantity="other">%d titres sélectionnés pour être épinglés.</item>
</plurals>
<plurals name="select_album_n_songs_downloaded">
<item quantity="one">%d titre sélectionné pour être téléchargé.</item>
<item quantity="other">%d titres sélectionnés pour être téléchargés.</item>
</plurals>
<plurals name="select_album_n_songs_unpinned">
<item quantity="one">%d titre sélectionné pour être désépinglé.</item>
<item quantity="other">%d titres sélectionnés pour être désépinglés.</item>
</plurals>
<plurals name="select_album_n_songs_added">
<item quantity="one">%d titre ajouté à la fin de la file d\'attente de lecture.</item>
<item quantity="other">%d titres ajoutés à la fin de la file d\'attente de lecture.</item>
</plurals>
<plurals name="select_album_n_songs_play_next">
<item quantity="one">%d titre inséré après le titre actuel.</item>
<item quantity="other">%d titres insérés après le titre actuel.</item>
</plurals>
<plurals name="select_album_donate_dialog_n_trial_days_left">
<item quantity="one">%d jour restant à la période d\'essai</item>
<item quantity="other">%d jours restant à la période d\'essai</item>
@ -439,11 +426,4 @@
<string name="api.subsonic.upgrade_client">Versions incompatibles. Veuillez mette à jour l\'application Android Ultrasonic.</string>
<string name="api.subsonic.upgrade_server">Versions incompatibles. Veuillez mette à jour le serveur Subsonic.</string>
<!-- Subsonic features -->
<string name="settings.features_title">Drapeaux des fonctionnalités</string>
<string name="settings.five_star_rating_title">Utiliser les étoiles pour noter les morceaux</string>
<string name="settings.five_star_rating_description">Utiliser un système de notation à base d\'étoiles pour les morceaux
au lieu de simplement mettre en avant les morceaux.
</string>
</resources>
</resources>

View File

@ -53,7 +53,6 @@
<string name="delete_playlist">Biztos, hogy törölni akarja? %1$s</string>
<string name="download.bookmark_removed" formatted="false">Könyvjelző eltávolítva.</string>
<string name="download.bookmark_set_at_position" formatted="false">Könyvjelző beállítva %s.</string>
<string name="playlist.empty">A várólista üres!</string>
<string name="download.jukebox_not_authorized">A távvezérlés nem áll rendelkezésre. Kérjük, engedélyezze a Jukebox módot a <b>Felhasználók &gt; Beállítások</b> menüpontban, az Ön Subsonic kiszolgálóján!</string>
<string name="download.jukebox_off">Távvezérlés kikapcsolása. A zenelejátszás a telefonon történik.</string>
<string name="download.jukebox_offline">A távvezérlés nem lehetséges kapcsolat nélküli módban!</string>
@ -139,7 +138,6 @@
<string name="search.songs">Dalok</string>
<string name="search.title">Keresés</string>
<string name="select_album.empty">Nem található média!</string>
<string name="select_album.n_selected">%d dal kijelölve.</string>
<string name="select_album.no_network">Figyelem: Hálózat nem áll rendelkezésre!</string>
<string name="select_album.no_sdcard">Hiba: SD kártya nem áll rendelkezésre!</string>
<string name="select_album.play_all">Összes lejátszása</string>
@ -204,9 +202,7 @@
<string name="settings.directory_cache_time_60">1 óra</string>
<string name="settings.disc_sort">Dalok rendezése albumok szerint</string>
<string name="settings.disc_sort_summary">Dalok rendezése albumsorszám és dalsorszám szerint.</string>
<string name="settings.display_bitrate">Bitráta és fájlkiterjesztés megjelenítése</string>
<string name="settings.display_bitrate_summary">Bitráta és fájlkiterjesztés megjelenítése az előadónév mellett.</string>
<string name="settings.download_transition">Letöltés megjelenítése</string>
<string name="settings.download_transition_summary">Letöltési aktivitás megjelenítése a lejátszás indításakor.</string>
<string name="settings.gapless_playback">Egybefüggő lejátszás</string>
<string name="settings.gapless_playback_summary">Kihagyás (dalszünet) nélküli egybefüggő lejátszás (Gapless).</string>
@ -315,8 +311,6 @@
<string name="settings.show_artist_picture">Előadó képének megjelenítése</string>
<string name="settings.show_artist_picture_summary">Az előadó listában megjeleníti a képeket, amennyiben elérhetőek</string>
<string name="main.video" tools:ignore="UnusedResources">Videó</string>
<string name="settings.wifi_required_summary">Streaming csak Wi-Fi hálózaton keresztül.</string>
<string name="settings.wifi_required_title">Streaming csak Wi-Fivel</string>
<string name="song_details.all">%1$s%2$s</string>
<string name="song_details.kbps">%d kbps</string>
<string name="util.bytes_format.byte">0 B</string>
@ -370,7 +364,6 @@
<string name="settings.playback.bluetooth_all">Minden Bluetooth eszköz</string>
<string name="settings.playback.bluetooth_a2dp">Csak audio (A2DP) eszközök</string>
<string name="settings.playback.bluetooth_disabled">Kikapcsolva</string>
<string name="settings.playback.single_button_bluetooth_device">Egy gombos Lejátszás/Szünet a Bluetooth eszközökön</string>
<string name="settings.playback.single_button_bluetooth_device_summary">Régebbi Bluetooth eszközök esetén segíthet, ha a Lejátszás/Szünet nem működik megfelelően</string>
<string name="settings.debug.title">Hibakeresési lehetőségek</string>
<string name="settings.debug.log_to_file">Hibakeresési napló írása fájlba</string>
@ -379,8 +372,6 @@
<string name="settings.debug.log_keep">Fájlok megtartása</string>
<string name="settings.debug.log_delete">Fájlok törlése</string>
<string name="settings.debug.log_deleted">Naplófájlok törölve.</string>
<string name="server_selector.label">Beállított szerverek</string>
<string name="server_selector.delete_confirmation">Biztosan törölni szeretnéd a szervert?</string>
<string name="server_editor.label">Szerver szerkesztése</string>
@ -397,26 +388,6 @@
<item quantity="one">%d dal</item>
<item quantity="other">%d dal</item>
</plurals>
<plurals name="select_album_n_songs_pinned">
<item quantity="one">%d dal kijelölve tárolásra.</item>
<item quantity="other">%d dal kijelölve tárolásra.</item>
</plurals>
<plurals name="select_album_n_songs_downloaded">
<item quantity="one">%d dal kijelölve letöltésre.</item>
<item quantity="other">%d dal kijelölve letöltésre.</item>
</plurals>
<plurals name="select_album_n_songs_unpinned">
<item quantity="one">%d dal tárolása visszavonva.</item>
<item quantity="other">%d dal tárolása visszavonva.</item>
</plurals>
<plurals name="select_album_n_songs_added">
<item quantity="one">%d dal hozzáadva a várólistához utolsóként.</item>
<item quantity="other">%d dal hozzáadva a várólistához utolsóként.</item>
</plurals>
<plurals name="select_album_n_songs_play_next">
<item quantity="one">%d dal hozzáadva a várólistához következőként.</item>
<item quantity="other">%d dal hozzáadva a várólistához következőként.</item>
</plurals>
<plurals name="select_album_donate_dialog_n_trial_days_left">
<item quantity="one">%d nap van hátra a próba időszakból.</item>
<item quantity="other">%d nap van hátra a próba időszakból.</item>
@ -434,11 +405,4 @@
<string name="api.subsonic.upgrade_client">Nem kompatibilis verzió. Kérjük, frissítse az Ultrasonic Android alkalmazást!</string>
<string name="api.subsonic.upgrade_server">Nem kompatibilis verzió. Kérjük, frissítse a Subsonic kiszolgálót!</string>
<!-- Subsonic features -->
<string name="settings.features_title">Jellemzők Zászlók</string>
<string name="settings.five_star_rating_title">Öt csillagos értékelés használata a dalokhoz</string>
<string name="settings.five_star_rating_description">Öt csillag használata az értékeléshez az egyszerű
csillaggal jelölés helyett.
</string>
</resources>
</resources>

View File

@ -40,7 +40,6 @@
<string name="delete_playlist">Vuoi eliminare %1$s</string>
<string name="download.bookmark_removed" formatted="false">Segnalibro rimosso.</string>
<string name="download.bookmark_set_at_position" formatted="false">Segnalibro impostato su %s.</string>
<string name="playlist.empty">Playlist vuota</string>
<string name="download.jukebox_not_authorized">Il controllo remoto non è consentito. Per favore abilita la modalità jukebox nelle <b> Impostazioni &gt; Utente </b> nel server Airsonic.</string>
<string name="download.jukebox_off">Controllo remoto disattivato. La musica verrà riprodotta sullo smartphone.</string>
<string name="download.jukebox_offline">Il controllo remoto non è disponibile nella modalità offline. </string>
@ -125,7 +124,6 @@
<string name="search.songs">Canzoni</string>
<string name="search.title">Cerca</string>
<string name="select_album.empty">Nessun media trovato</string>
<string name="select_album.n_selected">%dtracce selezionate.</string>
<string name="select_album.no_network">Attenzione: nessuna rete disponibile.</string>
<string name="select_album.no_sdcard">Errore: Nessuna memoria SD disponibile.</string>
<string name="select_album.play_all">Riproduci tutto</string>
@ -190,9 +188,7 @@
<string name="settings.directory_cache_time_60">1 ora</string>
<string name="settings.disc_sort">Ordina Canzoni secondo Disco</string>
<string name="settings.disc_sort_summary">Ordina lista canzoni secondo il numero disco e traccia</string>
<string name="settings.display_bitrate">Visualizza Bitrate Ed Estensione File</string>
<string name="settings.display_bitrate_summary">Aggiungi nome artista con bitrare ed estensione file</string>
<string name="settings.download_transition">Visualizza Download Durante Riproduzione</string>
<string name="settings.download_transition_summary">Passa al download quando inizia riproduzione</string>
<string name="settings.gapless_playback">Riproduzione Ininterrotta</string>
<string name="settings.gapless_playback_summary">Abilita riproduzione ininterrotta</string>

View File

@ -50,12 +50,14 @@
<string name="common.play_shuffled">Willekeurig afspelen</string>
<string name="common.public">Openbaar</string>
<string name="common.save">Opslaan</string>
<string name="common.select_all">Alles selecteren</string>
<string name="common.title">Titel</string>
<string name="common.unpin">Losmaken</string>
<string name="common.various_artists">Verschillende artiesten</string>
<string name="delete_playlist">Wil je %1$s verwijderen?</string>
<string name="download.bookmark_removed" formatted="false">Bladwijzer verwijderd.</string>
<string name="download.bookmark_set_at_position" formatted="false">Bladwijzer ingesteld op %s.</string>
<string name="download.empty">Er wordt niks gedownload</string>
<string name="playlist.empty">Lege afspeellijst</string>
<string name="download.jukebox_not_authorized">Afstandsbediening wordt niet ondersteund. Schakel jukebox-modus in op je Subsonic-server via <b>Gebruikers &gt; Instellingen</b>.</string>
<string name="download.jukebox_off">Afstandsbediening uitgeschakeld; muziek wordt afgespeeld op de telefoon.</string>
@ -108,6 +110,7 @@
<string name="main.genres_title">Genres</string>
<string name="main.music">Muziek</string>
<string name="main.offline">Offline</string>
<string name="main.setup_server">%s - Server instellen</string>
<string name="main.shuffle">Willekeurig afspelen</string>
<string name="main.songs_random">Willekeurig</string>
<string name="main.songs_starred">Favorieten</string>
@ -120,6 +123,7 @@
<string name="menu.common">Algemeen</string>
<string name="menu.deleted_playlist">Afspeellijst %s verwijderd</string>
<string name="menu.deleted_playlist_error">Afspeellijst %s kan niet worden verwijderd</string>
<string name="menu.downloads">Downloads</string>
<string name="menu.exit">Afsluiten</string>
<string name="menu.navigation">Navigatie</string>
<string name="menu.settings">Instellingen</string>
@ -144,7 +148,7 @@
<string name="search.songs">Nummers</string>
<string name="search.title">Zoeken</string>
<string name="select_album.empty">Geen media gevonden</string>
<string name="select_album.n_selected">%d nummers geselecteerd.</string>
<string name="select_album.n_selected">%d nummers geselecteerd</string>
<string name="select_album.no_network">Waarschuwing: geen internetverbinding.</string>
<string name="select_album.no_sdcard">Fout: geen SD-kaart beschikbaar.</string>
<string name="select_album.play_all">Alles afspelen</string>
@ -167,6 +171,7 @@
<string name="settings.buffer_length_5">5 seconden</string>
<string name="settings.buffer_length_60">1 minuut</string>
<string name="settings.buffer_length_8">8 seconden</string>
<string name="settings.custom_cache_location">Aangepaste cachelocatie gebruiken</string>
<string name="settings.cache_location">Cachelocatie</string>
<string name="settings.cache_location_error">Ongeldige cachelocatie; de standaardlocatie wordt gebruikt.</string>
<string name="settings.cache_size">Cachegrootte</string>
@ -294,6 +299,7 @@
<string name="settings.server_scaling_title">Verkleinde afbeeldingen ophalen van server</string>
<string name="settings.server_unused">Ongebruikt</string>
<string name="settings.server_username">Gebruikersnaam</string>
<string name="settings.server_color">Serverkleur</string>
<string name="settings.show_lockscreen_controls">Vergrendelschermbediening tonen</string>
<string name="settings.show_lockscreen_controls_summary">Toont afspeelbediening op het vergrendelscherm</string>
<string name="settings.show_notification">Melding tonen</string>
@ -322,8 +328,8 @@
<string name="settings.show_artist_picture">Artiestfoto tonen op artiestenlijst</string>
<string name="settings.show_artist_picture_summary">Toont de artiestfoto op de artiestenlijst (indien beschikbaar)</string>
<string name="main.video" tools:ignore="UnusedResources">Video</string>
<string name="settings.wifi_required_summary">Alleen streamen via wifi-verbindingen</string>
<string name="settings.wifi_required_title">Alleen streamen via wifi</string>
<string name="settings.wifi_required_summary">Haal media alleen op bij gebruik van onbeperkte dataverbindingen</string>
<string name="settings.wifi_required_title">Alleen ophalen via wifi</string>
<string name="song_details.all">%1$s%2$s</string>
<string name="song_details.kbps">%d kbps</string>
<string name="util.bytes_format.byte">0 B</string>
@ -381,7 +387,7 @@
<string name="settings.playback.bluetooth_all">Alle bluetoothapparaten</string>
<string name="settings.playback.bluetooth_a2dp">Alleen audio-apparaten (AD2P)</string>
<string name="settings.playback.bluetooth_disabled">Uitgeschakeld</string>
<string name="settings.playback.single_button_bluetooth_device">Eén afspeel-/pauzeerknop op bluetoothapparaat</string>
<string name="settings.playback.single_button_bluetooth_device">Bluetoothapparaat met één afspeel- en pauzeknop</string>
<string name="settings.playback.single_button_bluetooth_device_summary">Schakel dit in bij gebruik van oudere bluetoothapparaten om de afspeel- en pauzeerknop goed te laten werken</string>
<string name="settings.debug.title">Foutopsporingsopties</string>
<string name="settings.debug.log_to_file">Foutopsporingslogboek bijhouden</string>
@ -392,8 +398,6 @@
<string name="settings.debug.log_deleted">De logboeken zijn verwijderd.</string>
<string name="notification.downloading_title">Bezig met downloaden van media op de achtergrond…</string>
<string name="server_selector.label">Ingestelde servers:</string>
<string name="server_selector.delete_confirmation">Weet je zeker dat je deze server wilt verwijderen?</string>
<string name="server_editor.label">Server bewerken</string>
@ -414,24 +418,28 @@
<item quantity="other">%d nummers</item>
</plurals>
<plurals name="select_album_n_songs_pinned">
<item quantity="one">%d vast te maken nummer geselecteerd.</item>
<item quantity="other">%d vast te maken nummers geselecteerd.</item>
<item quantity="one">%d vast te maken nummer geselecteerd</item>
<item quantity="other">%d vast te maken nummers geselecteerd</item>
</plurals>
<plurals name="select_album_n_songs_downloaded">
<item quantity="one">%d te downloaden nummer geselecteerd.</item>
<item quantity="other">%d te downloaden nummers geselecteerd.</item>
<item quantity="one">%d te downloaden nummer geselecteerd</item>
<item quantity="other">%d te downloaden nummers geselecteerd</item>
</plurals>
<plurals name="select_album_n_songs_unpinned">
<item quantity="one">%d los te maken nummer geselecteerd.</item>
<item quantity="other">%d los te maken nummers geselecteerd.</item>
<item quantity="one">%d nummer losgemaakt</item>
<item quantity="other">%d nummers losgemaakt</item>
</plurals>
<plurals name="select_album_n_songs_deleted">
<item quantity="one">%d nummer verwijderd</item>
<item quantity="other">%d nummers verwijderd</item>
</plurals>
<plurals name="select_album_n_songs_added">
<item quantity="one">%d nummer toegevoegd aan het einde van afspeelwachtrij.</item>
<item quantity="other">%d nummers toegevoegd aan het einde van afspeelwachtrij.</item>
<item quantity="one">%d nummer toegevoegd aan het einde van afspeelwachtrij</item>
<item quantity="other">%d nummers toegevoegd aan het einde van afspeelwachtrij</item>
</plurals>
<plurals name="select_album_n_songs_play_next">
<item quantity="one">%d nummer ingevoegd na het huidige nummer.</item>
<item quantity="other">%d nummers ingevoegd na het huidige nummer.</item>
<item quantity="one">%d nummer ingevoegd na het huidige nummer</item>
<item quantity="other">%d nummers ingevoegd na het huidige nummer</item>
</plurals>
<plurals name="select_album_donate_dialog_n_trial_days_left">
<item quantity="one">Nog %d dag over van de proefperiode</item>
@ -451,10 +459,10 @@
<string name="api.subsonic.upgrade_server">Incompatibele versies. Werk je Subsonic-server bij.</string>
<!-- Subsonic features -->
<string name="settings.features_title">Experimentele functies</string>
<string name="settings.five_star_rating_title">Gebruik vijf sterren voor nummers</string>
<string name="settings.five_star_rating_description">Gebruik vijf sterren ratingsysteem voor liedjes
in plaats van items simpelweg in de hoofdrol te zetten / niet te verwijderen.
<string name="settings.features_title">Functies</string>
<string name="settings.five_star_rating_title">Vijf sterren gebruiken voor nummers</string>
<string name="settings.five_star_rating_description">Toon vijf sterren om nummers te beoordelen
in plaats van items toe te voegen aan of te verwijderen uit de favorieten.
</string>
</resources>

View File

@ -42,7 +42,6 @@
<string name="delete_playlist">Czy chcesz usunąć %1$s?</string>
<string name="download.bookmark_removed" formatted="false">Zakładka usunięta.</string>
<string name="download.bookmark_set_at_position" formatted="false">Zakładka ustawiona na %s.</string>
<string name="playlist.empty">Playlista jest pusta</string>
<string name="download.jukebox_not_authorized">Kontrola pilotem jest niedostępna. Proszę uruchomić tryb jukebox w <b>Użytkownicy &gt; Ustawienia</b> na serwerze Subsonic.</string>
<string name="download.jukebox_off">Tryb pilota jest wyłączony. Muzyka jest odtwarzana w telefonie.</string>
<string name="download.jukebox_offline">Pilot jest niedostępny w trybie offline.</string>
@ -127,7 +126,6 @@
<string name="search.songs">Utwory</string>
<string name="search.title">Wyszukiwanie</string>
<string name="select_album.empty">Brak mediów</string>
<string name="select_album.n_selected">Zaznaczono %d utworów.</string>
<string name="select_album.no_network">Uwaga: sieć niedostępna.</string>
<string name="select_album.no_sdcard">Błąd: Niedostępna karta SD.</string>
<string name="select_album.play_all">Odtwórz wszystkie</string>
@ -192,9 +190,7 @@
<string name="settings.directory_cache_time_60">1 godzina</string>
<string name="settings.disc_sort">Sortuj utwory wg dysku</string>
<string name="settings.disc_sort_summary">Sortuje listę utworów wg numeru dysku i numeru utworu</string>
<string name="settings.display_bitrate">Wyświetlaj bitrate i typ pliku</string>
<string name="settings.display_bitrate_summary">Dołącza bitrate i typ pliku do nazwy artysty</string>
<string name="settings.download_transition">Wyświetlaj postęp pobierania</string>
<string name="settings.download_transition_summary">Wyświetla postęp pobierania podczas odtwarzania</string>
<string name="settings.gapless_playback">Odtwarzanie bez przerw</string>
<string name="settings.gapless_playback_summary">Włącz odtwarzanie bez przerw między utworami</string>
@ -298,8 +294,6 @@ ponieważ api Subsonic nie wspiera nowego sposobu autoryzacji dla użytkowników
<string name="settings.use_id3">Przeglądaj używając tagów ID3</string>
<string name="settings.use_id3_summary">Używa metod z tagów ID3 zamiast metod opartych na systemie plików</string>
<string name="main.video" tools:ignore="UnusedResources">Wideo</string>
<string name="settings.wifi_required_summary">Przesyłanie mediów tylko gdy Wi-fi jest włączone</string>
<string name="settings.wifi_required_title">Przesyłanie tylko przez Wi-fi</string>
<string name="song_details.all">%1$s%2$s</string>
<string name="song_details.kbps">%d kbps</string>
<string name="util.bytes_format.byte">0 B</string>
@ -355,36 +349,6 @@ ponieważ api Subsonic nie wspiera nowego sposobu autoryzacji dla użytkowników
<item quantity="many">%d utworów</item>
<item quantity="other">%d utworów</item>
</plurals>
<plurals name="select_album_n_songs_pinned">
<item quantity="one">%d utwór zaznaczony do przypięcia.</item>
<item quantity="few">%d utwory zaznaczone do przypięcia.</item>
<item quantity="many">%d utworów zaznaczonych do przypięcia.</item>
<item quantity="other">%d utworów zaznaczonych do przypięcia.</item>
</plurals>
<plurals name="select_album_n_songs_downloaded">
<item quantity="one">%d utwór zaznaczony do pobrania.</item>
<item quantity="few">%d utwory zaznaczone do pobrania.</item>
<item quantity="many">%d utworów zaznaczonych do pobrania.</item>
<item quantity="other">%d utworów zaznaczonych do pobrania.</item>
</plurals>
<plurals name="select_album_n_songs_unpinned">
<item quantity="one">%d utwór zaznaczony do odpięcia.</item>
<item quantity="few">%d utwory zaznaczone do odpięcia.</item>
<item quantity="many">%d utworów zaznaczonych do odpięcia.</item>
<item quantity="other">%d utworów zaznaczonych do odpięcia.</item>
</plurals>
<plurals name="select_album_n_songs_added">
<item quantity="one">%d utwór dodany na koniec kolejki odtwarzania.</item>
<item quantity="few">%d utwory dodane na koniec kolejki odtwarzania.</item>
<item quantity="many">%d utworów dodanych na koniec kolejki odtwarzania.</item>
<item quantity="other">%d utworów dodanych na koniec kolejki odtwarzania.</item>
</plurals>
<plurals name="select_album_n_songs_play_next">
<item quantity="one">%d utwór wstawiony po bieżącym utworze.</item>
<item quantity="few">%d utwory wstawione po bieżącym utworze.</item>
<item quantity="many">%d utworów wstawionych po bieżącym utworze.</item>
<item quantity="other">%d utworów wstawionych po bieżącym utworze.</item>
</plurals>
<plurals name="select_album_donate_dialog_n_trial_days_left">
<item quantity="one">%d dzień pozostał do zakończenia okresu próbnego</item>
<item quantity="few">%d dni pozostały do zakończenia okresu próbnego</item>
@ -404,11 +368,4 @@ ponieważ api Subsonic nie wspiera nowego sposobu autoryzacji dla użytkowników
<string name="api.subsonic.upgrade_client">Brak zgodności wersji. Uaktualnij aplikację Ultrasonic na Androida.</string>
<string name="api.subsonic.upgrade_server">Brak zgodności wersji. Uaktualnij serwer Subsonic.</string>
<!-- Subsonic features -->
<string name="settings.features_title">Flagi funkcji</string>
<string name="settings.five_star_rating_title">Użyj pięciu gwiazdek dla utworów</string>
<string name="settings.five_star_rating_description">W przypadku utworów użyj systemu pięciu gwiazdek
zamiast po prostu grać gwiazdkami / bez gwiazd.
</string>
</resources>
</resources>

View File

@ -28,7 +28,9 @@
<string name="button_bar.playlists">Playlists</string>
<string name="button_bar.search">Pesquisa</string>
<string name="chat.send_a_message">Enviar uma mensagem</string>
<string name="common.album">Álbum</string>
<string name="common.appname">Ultrasonic</string>
<string name="common.artist">Artista</string>
<string name="common.cancel">Cancelar</string>
<string name="common.comment">Comentar</string>
<string name="common.confirm">Confirmar</string>
@ -48,12 +50,12 @@
<string name="common.play_shuffled">Tocar Aleatoriamente</string>
<string name="common.public">Público</string>
<string name="common.save">Salvar</string>
<string name="common.title">Título</string>
<string name="common.unpin">Desafixar</string>
<string name="common.various_artists">Vários Artistas</string>
<string name="delete_playlist">Você quer excluir %1$s</string>
<string name="download.bookmark_removed" formatted="false">Favorito removido.</string>
<string name="download.bookmark_set_at_position" formatted="false">Favorito marcado em %s.</string>
<string name="playlist.empty">Playlist está vazia</string>
<string name="download.jukebox_not_authorized">Controle remoto não está permitido. Habilite o modo jukebox em <b>Usuário &gt; Configurações</b> no seu servidor Subsonic.</string>
<string name="download.jukebox_off">Controle remoto desligado. Música tocada no celular.</string>
<string name="download.jukebox_offline">Controle remoto não está disponível no modo offline.</string>
@ -117,6 +119,7 @@
<string name="menu.common">Comum</string>
<string name="menu.deleted_playlist">Playlist excluída %s</string>
<string name="menu.deleted_playlist_error">Falha ao excluir a playlist %s</string>
<string name="menu.downloads">Downloads</string>
<string name="menu.exit">Sair</string>
<string name="menu.navigation">Navegação</string>
<string name="menu.settings">Configurações</string>
@ -141,7 +144,6 @@
<string name="search.songs">Músicas</string>
<string name="search.title">Pesquisar</string>
<string name="select_album.empty">Nenhuma mídia encontrada</string>
<string name="select_album.n_selected">%d faixas selecionadas.</string>
<string name="select_album.no_network">Aviso: Nenhuma rede disponível.</string>
<string name="select_album.no_sdcard">Erro: Nenhum cartão SD disponível.</string>
<string name="select_album.play_all">Tocar Tudo</string>
@ -206,7 +208,7 @@
<string name="settings.directory_cache_time_60">1 hora</string>
<string name="settings.disc_sort">Classificar Músicas por Álbum</string>
<string name="settings.disc_sort_summary">Classificar músicas pelo número do álbum e faixas</string>
<string name="settings.display_bitrate">Mostrar Taxa de Bits e Sufixo de Arquivo</string>
<string name="settings.display_bitrate">Mostrar Bitrate se Sufixo do Arquivo</string>
<string name="settings.display_bitrate_summary">Adicionar o nome do artista com a taxa de bits e sufixo do arquivo</string>
<string name="settings.download_transition">Mostrar Downloads na Reprodução</string>
<string name="settings.download_transition_summary">Transição para atividade de download quando iniciar reprodução</string>
@ -319,8 +321,6 @@
<string name="settings.show_artist_picture">Mostrar Foto do Artista na Lista</string>
<string name="settings.show_artist_picture_summary">Mostrar a imagem do artista na lista de artistas, se disponível</string>
<string name="main.video" tools:ignore="UnusedResources">Vídeo</string>
<string name="settings.wifi_required_summary">Somente fazer stream de mídia se conectado por Wi-Fi</string>
<string name="settings.wifi_required_title">Streaming Somente por Wi-Fi</string>
<string name="song_details.all">%1$s%2$s</string>
<string name="song_details.kbps">%d kbps</string>
<string name="util.bytes_format.byte">0 B</string>
@ -334,10 +334,13 @@
<string name="widget.sdcard_missing">Sem cartão SD</string>
<string name="settings.share_description_default">Descrição Padrão do Compartilhamento</string>
<string name="settings.sharing_title">Compartilhamento</string>
<string name="settings.sharing_always_ask_for_details_summary">Sempre pedir descrição e expiração ao criar um compartilhamento no servidor</string>
<string name="settings.sharing_always_ask_for_details">Sempre Perguntar por Detalhes</string>
<string name="settings.share_expiration_default">Tempo Padrão para Expirar</string>
<string name="do_not_show_dialog_again">Não mostrar este diálogo novamente</string>
<string name="share_set_share_options">Configurações de Compartilhamento</string>
<string name="share_on_server">Criar Compartilhamento no Servidor</string>
<string name="settings.share_on_server_summary">Compartilhar cria o compartilhamento no servidor e compartilha sua URL. Se desativado, somente os detalhes da música são compartilhados</string>
<string name="no_expiration">Não Expira</string>
<string name="download.toggle_playlist">Alternar Playlist</string>
<string name="download.bookmark_set">Definir como Favorito</string>
@ -360,6 +363,7 @@
<string name="settings.share_expiration">Tempo até expirar</string>
<string name="download_song_removed">\"%s\" foi removido da playlist</string>
<string name="download.share_playlist">Compartilhar Playlist</string>
<string name="download.share_song">Compartilhar a Música Atual</string>
<string name="settings.share_greeting_default">Saudação Padrão do Compartilhamento</string>
<string name="share_default_greeting">Confira esta música que compartilhei do %s</string>
<string name="share_via">Compartilhar músicas via</string>
@ -374,7 +378,6 @@
<string name="settings.playback.bluetooth_all">Todos os dispositivos Bluetooth</string>
<string name="settings.playback.bluetooth_a2dp">Somente dispositivos de áudio (A2DP)</string>
<string name="settings.playback.bluetooth_disabled">Desativado</string>
<string name="settings.playback.single_button_bluetooth_device">Botão Único para Reproduzir/Pausar</string>
<string name="settings.playback.single_button_bluetooth_device_summary">Ativar isso pode ajudar com dispositivos Bluetooth mais antigos quando Reproduzir/Pausar não funciona corretamente</string>
<string name="settings.debug.title">Opções de Depuração</string>
<string name="settings.debug.log_to_file">Log de Depuração em Arquivo</string>
@ -385,8 +388,6 @@
<string name="settings.debug.log_deleted">Arquivos de log excluídos.</string>
<string name="notification.downloading_title">Baixado mídia em segundo plano…</string>
<string name="server_selector.label">Servidores Configurados</string>
<string name="server_selector.delete_confirmation">Quer realmente excluir o servidor?</string>
<string name="server_editor.label">Gerenciar Servidor</string>
@ -406,26 +407,6 @@
<item quantity="one">%d música</item>
<item quantity="other">%d músicas</item>
</plurals>
<plurals name="select_album_n_songs_pinned">
<item quantity="one">%d música selecionada para ser fixada.</item>
<item quantity="other">%d músicas selecionadas para serem fixadas.</item>
</plurals>
<plurals name="select_album_n_songs_downloaded">
<item quantity="one">%d música selecionada para ser baixada.</item>
<item quantity="other">%d músicas selecionadas para serem baixadas.</item>
</plurals>
<plurals name="select_album_n_songs_unpinned">
<item quantity="one">%d música selecionada para ser desfixada.</item>
<item quantity="other">%d músicas selecionadas para serem desfixadas.</item>
</plurals>
<plurals name="select_album_n_songs_added">
<item quantity="one">%d música adicionada ao final da playlist.</item>
<item quantity="other">%d músicas adicionadas ao final da playlist.</item>
</plurals>
<plurals name="select_album_n_songs_play_next">
<item quantity="one">%d música adicionada após a atual.</item>
<item quantity="other">%d músicas adicionadas após a atual.</item>
</plurals>
<plurals name="select_album_donate_dialog_n_trial_days_left">
<item quantity="one">%d dia restante do período de teste</item>
<item quantity="other">%d dias restantes do período de teste</item>
@ -443,11 +424,4 @@
<string name="api.subsonic.upgrade_client">Versões incompativeis. Atualize o aplicativo Ultrasonic para Android.</string>
<string name="api.subsonic.upgrade_server">Versões incompativeis. Atualize o servidor Ultrasonic.</string>
<!-- Subsonic features -->
<string name="settings.features_title">Sinalização de Recursos</string>
<string name="settings.five_star_rating_title">Usar Classif. 5 Estrelas para Músicas</string>
<string name="settings.five_star_rating_description">Usar o sistema de classificação de 5 estrelas para músicas
em vez de simplesmente estrelar/não estrelar itens
</string>
</resources>
</resources>

View File

@ -42,7 +42,6 @@
<string name="delete_playlist">Você quer apagar %1$s</string>
<string name="download.bookmark_removed" formatted="false">Favorito removido.</string>
<string name="download.bookmark_set_at_position" formatted="false">Favorito marcado em %s.</string>
<string name="playlist.empty">Playlist está vazia</string>
<string name="download.jukebox_not_authorized">Controle remoto não está permitido. Habilite o modo jukebox em <b>Usuário &gt; Configurações</b> no seu servidor Subsonic.</string>
<string name="download.jukebox_off">Controle remoto desligado. Música tocada no celular.</string>
<string name="download.jukebox_offline">Controle remoto não está disponível no modo offline.</string>
@ -127,7 +126,6 @@
<string name="search.songs">Músicas</string>
<string name="search.title">Pesquisar</string>
<string name="select_album.empty">Nenhuma mídia encontrada</string>
<string name="select_album.n_selected">%d faixas selecionadas.</string>
<string name="select_album.no_network">Aviso: Nenhuma rede disponível.</string>
<string name="select_album.no_sdcard">Erro: Nenhum cartão SD disponível.</string>
<string name="select_album.play_all">Tocar Tudo</string>
@ -192,9 +190,7 @@
<string name="settings.directory_cache_time_60">1 hora</string>
<string name="settings.disc_sort">Classificar Músicas por Álbum</string>
<string name="settings.disc_sort_summary">Classificar músicas pelo número do álbum e faixas.</string>
<string name="settings.display_bitrate">Taxa de Bits e Sufixo</string>
<string name="settings.display_bitrate_summary">Adiciona o nome do artista com a taxa de bits e sufixo do ficheiro</string>
<string name="settings.download_transition">Downloads na Reprodução</string>
<string name="settings.download_transition_summary">Transição para atividade de download quando iniciar reprodução</string>
<string name="settings.gapless_playback">Reprodução sem Interrupção</string>
<string name="settings.gapless_playback_summary">Habilita reprodução sem interrupção</string>
@ -298,8 +294,6 @@
<string name="settings.use_id3">Navegar Usando Etiquetas ID3</string>
<string name="settings.use_id3_summary">Usa as etiquetas ID3 ao invés do sistema de ficheiros</string>
<string name="main.video" tools:ignore="UnusedResources">Vídeo</string>
<string name="settings.wifi_required_summary">Somente fazer stream de mídia se conectado por Wi-Fi</string>
<string name="settings.wifi_required_title">Streaming Somente por Wi-Fi</string>
<string name="song_details.all">%1$s%2$s</string>
<string name="song_details.kbps">%d kbps</string>
<string name="util.bytes_format.byte">0 B</string>
@ -352,26 +346,6 @@
<item quantity="one">%d música</item>
<item quantity="other">%d músicas</item>
</plurals>
<plurals name="select_album_n_songs_pinned">
<item quantity="one">%d música selecionada para ser fixada.</item>
<item quantity="other">%d músicas selecionadas para serem fixadas.</item>
</plurals>
<plurals name="select_album_n_songs_downloaded">
<item quantity="one">%d música selecionada para ser baixada.</item>
<item quantity="other">%d músicas selecionadas para serem baixadas.</item>
</plurals>
<plurals name="select_album_n_songs_unpinned">
<item quantity="one">%d música selecionada para ser desfixada.</item>
<item quantity="other">%d músicas selecionadas para serem desfixadas.</item>
</plurals>
<plurals name="select_album_n_songs_added">
<item quantity="one">%d música adicionada ao final da playlist.</item>
<item quantity="other">%d músicas adicionadas ao final da playlist.</item>
</plurals>
<plurals name="select_album_n_songs_play_next">
<item quantity="one">%d música adicionada após a atual.</item>
<item quantity="other">%d músicas adicionadas após a atual.</item>
</plurals>
<plurals name="select_album_donate_dialog_n_trial_days_left">
<item quantity="one">%d dia restante do período de teste</item>
<item quantity="other">%d dias restantes do período de teste</item>
@ -389,11 +363,4 @@
<string name="api.subsonic.upgrade_client">Versões incompativeis. Atualize o aplicativo Ultrasonic para Android.</string>
<string name="api.subsonic.upgrade_server">Versões incompativeis. Atualize o servidor Ultrasonic.</string>
<!-- Subsonic features -->
<string name="settings.features_title">Bandeiras de recursos</string>
<string name="settings.five_star_rating_title">Use classificação de cinco estrelas para músicas</string>
<string name="settings.five_star_rating_description">Use o sistema de classificação de cinco estrelas para músicas
em vez de simplesmente estrelar / não estrelar itens.
</string>
</resources>
</resources>

View File

@ -53,7 +53,6 @@
<string name="delete_playlist">Вы хотите удалить %1$s</string>
<string name="download.bookmark_removed" formatted="false">Закладка удалена</string>
<string name="download.bookmark_set_at_position" formatted="false">Закладка установлена ​​на %s</string>
<string name="playlist.empty">Плейлист пустой</string>
<string name="download.jukebox_not_authorized">Пульт дистанционного управления не допускается. Пожалуйста, включите режим музыкального автомата в <b> Пользователи &gt; Настройки </b>на вашем Subsonic сервере.</string>
<string name="download.jukebox_off">Пульт управления выключен. Музыка играет на телефоне</string>
<string name="download.jukebox_offline">Пульт дистанционного управления недоступен в автономном режиме.</string>
@ -141,7 +140,6 @@
<string name="search.songs">Песни</string>
<string name="search.title">Поиск</string>
<string name="select_album.empty">Медиа не найдена</string>
<string name="select_album.n_selected">%d треки выбраны.</string>
<string name="select_album.no_network">Предупреждение: сеть недоступна.</string>
<string name="select_album.no_sdcard">Ошибка: нет SD-карты</string>
<string name="select_album.play_all">Воспроизвести все</string>
@ -206,9 +204,7 @@
<string name="settings.directory_cache_time_60">1 час</string>
<string name="settings.disc_sort">Время кэша каталогов</string>
<string name="settings.disc_sort_summary">Сортировать список песен по номеру диска и треку</string>
<string name="settings.display_bitrate">Отображать битрейт и суффикс файла</string>
<string name="settings.display_bitrate_summary">Добавить имя исполнителя с битрейтом и суффиксом файла</string>
<string name="settings.download_transition">Показать загрузки при воспроизведении</string>
<string name="settings.download_transition_summary">Переход к загрузке активности при запуске воспроизведения</string>
<string name="settings.gapless_playback">Воспроизведение без промежутка</string>
<string name="settings.gapless_playback_summary">Включить воспроизведение без паузы</string>
@ -317,8 +313,6 @@
<string name="settings.show_artist_picture">Показать изображение исполнителя в списке исполнителей</string>
<string name="settings.show_artist_picture_summary">Отображает изображение исполнителя в списке исполнителей, если доступно</string>
<string name="main.video" tools:ignore="UnusedResources">Видео</string>
<string name="settings.wifi_required_summary">Потоковое мультимедиа только при подключении к Wi-Fi</string>
<string name="settings.wifi_required_title">Только потоковая передача по Wi-Fi</string>
<string name="song_details.all">%1$s%2$s</string>
<string name="song_details.kbps">%d kbps</string>
<string name="util.bytes_format.byte">0 B</string>
@ -372,7 +366,6 @@
<string name="settings.playback.bluetooth_all">Все устройства Bluetooth</string>
<string name="settings.playback.bluetooth_a2dp">Только аудио (A2DP) устройства</string>
<string name="settings.playback.bluetooth_disabled">Отключено</string>
<string name="settings.playback.single_button_bluetooth_device">Одна кнопка Воспроизведение/Пауза на устройстве Bluetooth</string>
<string name="settings.playback.single_button_bluetooth_device_summary">Включение этого может помочь со старыми устройствами Bluetooth, когда Воспроизведение/Пауза работает некорректно.</string>
<string name="settings.debug.title">Настройки отладки</string>
<string name="settings.debug.log_to_file">Записать журнал отладки в файл</string>
@ -381,8 +374,6 @@
<string name="settings.debug.log_keep">Сохранить файлы</string>
<string name="settings.debug.log_delete">Удалить файлы</string>
<string name="settings.debug.log_deleted">Удаленные файлы журналов.</string>
<string name="server_selector.label">Настроенные серверы</string>
<string name="server_selector.delete_confirmation">Вы уверены, что хотите удалить сервер?</string>
<string name="server_editor.label">Редактирование сервера</string>
@ -404,36 +395,6 @@
<item quantity="many">%d песен</item>
<item quantity="other">%d песен</item>
</plurals>
<plurals name="select_album_n_songs_pinned">
<item quantity="one">%d песня выбрана для закрепления.</item>
<item quantity="few">%d песни выбрано для закрепления.</item>
<item quantity="many">%d песен выбрано для закрепления.</item>
<item quantity="other">%d песен выбрано для закрепления.</item>
</plurals>
<plurals name="select_album_n_songs_downloaded">
<item quantity="one">%d песня выбрана для загрузки.</item>
<item quantity="few">%d песни выбрано для загрузки.</item>
<item quantity="many">%d песен выбрано для загрузки.</item>
<item quantity="other">%d песен выбрано для загрузки.</item>
</plurals>
<plurals name="select_album_n_songs_unpinned">
<item quantity="one">%d песня выбрана для открепления.</item>
<item quantity="few">%d песни выбрано для открепления.</item>
<item quantity="many">%d песен выбрано для открепления.</item>
<item quantity="other">%d песен выбрано для открепления.</item>
</plurals>
<plurals name="select_album_n_songs_added">
<item quantity="one">%d песня добавлена в конец очереди воспроизведения.</item>
<item quantity="few">%d песни добавлено в конец очереди воспроизведения.</item>
<item quantity="many">%d песен добавлено в конец очереди воспроизведения.</item>
<item quantity="other">%d песен добавлено в конец очереди воспроизведения.</item>
</plurals>
<plurals name="select_album_n_songs_play_next">
<item quantity="one">%d песня вставлена после текущей песни.</item>
<item quantity="few">%d песни вставлено после текущей песни.</item>
<item quantity="many">%d песен вставлено после текущей песни.</item>
<item quantity="other">%d песен вставлено после текущей песни.</item>
</plurals>
<plurals name="select_album_donate_dialog_n_trial_days_left">
<item quantity="one">Остался %d день пробного периода</item>
<item quantity="few">Осталось %d дня пробного периода</item>
@ -453,10 +414,4 @@
<string name="api.subsonic.upgrade_client">Несовместимые версии. Пожалуйста, обновите приложение Ultrasonic для Android.</string>
<string name="api.subsonic.upgrade_server">Несовместимые версии. Пожалуйста, обновите Subsonic сервер.</string>
<!-- Subsonic features -->
<string name="settings.features_title">Флаги</string>
<string name="settings.five_star_rating_title">Использовать пятизвездочный рейтинг для песен</string>
<string name="settings.five_star_rating_description">Использовать пятизвездочную систему рейтинга для песен
вместо того, чтобы просто ставить/не ставить звезды.</string>
</resources>
</resources>

View File

@ -28,7 +28,9 @@
<string name="button_bar.playlists">播放列表</string>
<string name="button_bar.search">搜索</string>
<string name="chat.send_a_message">发送消息</string>
<string name="common.album">专辑</string>
<string name="common.appname">Ultrasonic</string>
<string name="common.artist">艺术家</string>
<string name="common.cancel">取消</string>
<string name="common.comment">评论</string>
<string name="common.confirm">确认</string>
@ -48,11 +50,14 @@
<string name="common.play_shuffled">随机播放</string>
<string name="common.public">公开</string>
<string name="common.save">保存</string>
<string name="common.select_all">选择所有</string>
<string name="common.title">标题</string>
<string name="common.unpin">取消固定</string>
<string name="common.various_artists">群星</string>
<string name="delete_playlist">确定要删除 %1$s吗</string>
<string name="download.bookmark_removed" formatted="false">书签已删除。</string>
<string name="download.bookmark_set_at_position" formatted="false">书签设置为 %s。</string>
<string name="download.empty">未下载任何内容</string>
<string name="playlist.empty">空的播放列表</string>
<string name="download.jukebox_not_authorized">不允许远程控制. 请在您的服务器上的 <b>Users &gt; Settings</b> 打开点唱机模式。</string>
<string name="download.jukebox_off">关闭远程控制,音乐将在手机上播放</string>
@ -116,6 +121,7 @@
<string name="menu.common">公共</string>
<string name="menu.deleted_playlist">已删除播放列表 %s</string>
<string name="menu.deleted_playlist_error">播放列表删除失败%s</string>
<string name="menu.downloads">下载</string>
<string name="menu.exit">退出</string>
<string name="menu.navigation">导航</string>
<string name="menu.settings">设置</string>
@ -140,7 +146,6 @@
<string name="search.songs">歌曲</string>
<string name="search.title">搜索</string>
<string name="select_album.empty">找不到歌曲</string>
<string name="select_album.n_selected">已选择 %d 首曲目。</string>
<string name="select_album.no_network">警告:网络不可用</string>
<string name="select_album.no_sdcard">错误没有SD卡</string>
<string name="select_album.play_all">播放所有</string>
@ -163,6 +168,7 @@
<string name="settings.buffer_length_5">5 秒</string>
<string name="settings.buffer_length_60">1 分钟</string>
<string name="settings.buffer_length_8">8 秒</string>
<string name="settings.custom_cache_location">使用自定义的缓存路径</string>
<string name="settings.cache_location">缓存路径</string>
<string name="settings.cache_location_error">缓存路径错误,正在使用默认路径。</string>
<string name="settings.cache_size">缓存大小</string>
@ -287,6 +293,7 @@
<string name="settings.server_scaling_title">服务器端专辑图片缩放</string>
<string name="settings.server_unused">未启用</string>
<string name="settings.server_username">用户名</string>
<string name="settings.server_color">服务器颜色</string>
<string name="settings.show_lockscreen_controls">锁屏显示控制器</string>
<string name="settings.show_lockscreen_controls_summary">在锁定屏幕上显示播放控件</string>
<string name="settings.show_notification">显示通知</string>
@ -315,8 +322,8 @@
<string name="settings.show_artist_picture">在艺术家列表中显示艺术家图片</string>
<string name="settings.show_artist_picture_summary">如果可用,在艺术家列表中显示艺术家图片</string>
<string name="main.video" tools:ignore="UnusedResources">视频</string>
<string name="settings.wifi_required_summary">在连接到 WIFI 时使用流媒体</string>
<string name="settings.wifi_required_title">仅使用 WIFI</string>
<string name="settings.wifi_required_summary">未计量的网络用于下载媒体</string>
<string name="settings.wifi_required_title">仅使用Wi-Fi进行下载</string>
<string name="song_details.all">%1$s%2$s</string>
<string name="song_details.kbps">%d kbps</string>
<string name="util.bytes_format.byte">0 B</string>
@ -330,10 +337,13 @@
<string name="widget.sdcard_missing">没有 SD 卡</string>
<string name="settings.share_description_default">默认分享说明</string>
<string name="settings.sharing_title">分享</string>
<string name="settings.sharing_always_ask_for_details_summary">在服务端创建分享时始终要求提供说明和到期时间</string>
<string name="settings.sharing_always_ask_for_details">始终询问详细信息</string>
<string name="settings.share_expiration_default">默认有效期</string>
<string name="do_not_show_dialog_again">不再显示此对话框</string>
<string name="share_set_share_options">设置分享选项</string>
<string name="share_on_server">在服务端创建分享链接</string>
<string name="settings.share_on_server_summary">分享将在服务端创建一个链接,如果不能创建,那么只会分享歌曲的信息</string>
<string name="no_expiration">无期限</string>
<string name="download.toggle_playlist">切换播放列表</string>
<string name="download.bookmark_set">设为书签</string>
@ -356,6 +366,7 @@
<string name="settings.share_expiration">有效期</string>
<string name="download_song_removed">%s已从播放列表中移除</string>
<string name="download.share_playlist">分享播放列表</string>
<string name="download.share_song">分享当前曲目</string>
<string name="settings.share_greeting_default">默认分享问候语</string>
<string name="share_default_greeting">看看我从 %s 分享的这首音乐</string>
<string name="share_via">分享歌曲通过</string>
@ -381,8 +392,6 @@
<string name="settings.debug.log_deleted">删除日志文件</string>
<string name="notification.downloading_title">在后台下载媒体…</string>
<string name="server_selector.label">配置服务器</string>
<string name="server_selector.delete_confirmation">您确定要删除此服务器吗?</string>
<string name="server_editor.label">编辑服务器</string>
@ -410,6 +419,9 @@
<plurals name="select_album_n_songs_unpinned">
<item quantity="other">已选择 %d 首歌曲取消固定。</item>
</plurals>
<plurals name="select_album_n_songs_deleted">
<item quantity="other">%d 首歌曲被删除</item>
</plurals>
<plurals name="select_album_n_songs_added">
<item quantity="other">已将 %d 首歌曲添加到播放队列的末尾。</item>
</plurals>
@ -433,7 +445,7 @@
<string name="api.subsonic.upgrade_server">不兼容的版本。请升级Subsonic 服务。</string>
<!-- Subsonic features -->
<string name="settings.features_title">特性标志</string>
<string name="settings.features_title">特性</string>
<string name="settings.five_star_rating_title">为歌曲使用五星评分</string>
<string name="settings.five_star_rating_description">对歌曲使用五星级评级系统
而不是简单地为项目加星标/取消星标。</string>

View File

@ -51,7 +51,7 @@ class APIAlbumConverterTest {
with(convertedEntity) {
name `should be equal to` null
size `should be equal to` entity.songList.size
this[0] `should be equal to` entity.songList[0].toDomainEntity()
this[0] `should be equal to` entity.songList[0].toTrackEntity()
}
}

View File

@ -27,7 +27,7 @@ class APIBookmarkConverterTest {
comment `should be equal to` entity.comment
created `should be equal to` entity.created?.time
changed `should be equal to` entity.changed?.time
entry `should be equal to` entity.entry.toDomainEntity()
entry `should be equal to` entity.entry.toTrackEntity()
}
}

View File

@ -26,7 +26,7 @@ class APIMusicDirectoryConverterTest {
name `should be equal to` entity.name
size `should be equal to` entity.childList.size
getChildren() `should be equal to` entity.childList
.map { it.toDomainEntity() }.toMutableList()
.map { it.toTrackEntity() }.toMutableList()
}
}
@ -44,7 +44,7 @@ class APIMusicDirectoryConverterTest {
starred = Calendar.getInstance(), userRating = 3, averageRating = 2.99F
)
val convertedEntity = entity.toDomainEntity()
val convertedEntity = entity.toTrackEntity()
with(convertedEntity) {
id `should be equal to` entity.id
@ -84,7 +84,7 @@ class APIMusicDirectoryConverterTest {
artist = "some-artist", publishDate = Calendar.getInstance()
)
val convertedEntity = entity.toDomainEntity()
val convertedEntity = entity.toTrackEntity()
with(convertedEntity) {
id `should be equal to` entity.streamId
@ -100,7 +100,7 @@ class APIMusicDirectoryConverterTest {
domainList.size `should be equal to` entitiesList.size
domainList.forEachIndexed { index, entry ->
entry `should be equal to` entitiesList[index].toDomainEntity()
entry `should be equal to` entitiesList[index].toTrackEntity()
}
}
}

View File

@ -27,8 +27,8 @@ class APIPlaylistConverterTest {
with(convertedEntity) {
name `should be equal to` entity.name
size `should be equal to` entity.entriesList.size
this[0] `should be equal to` entity.entriesList[0].toDomainEntity()
this[1] `should be equal to` entity.entriesList[1].toDomainEntity()
this[0] `should be equal to` entity.entriesList[0].toTrackEntity()
this[1] `should be equal to` entity.entriesList[1].toTrackEntity()
}
}

View File

@ -34,7 +34,7 @@ class APISearchConverterTest {
artists `should not be equal to` null
artists.size `should be equal to` 0
songs.size `should be equal to` entity.matchList.size
songs[0] `should be equal to` entity.matchList[0].toDomainEntity()
songs[0] `should be equal to` entity.matchList[0].toTrackEntity()
}
}
@ -54,7 +54,7 @@ class APISearchConverterTest {
albums.size `should be equal to` entity.albumList.size
albums[0] `should be equal to` entity.albumList[0].toDomainEntity()
songs.size `should be equal to` entity.songList.size
songs[0] `should be equal to` entity.songList[0].toDomainEntity()
songs[0] `should be equal to` entity.songList[0].toTrackEntity()
}
}
@ -74,7 +74,7 @@ class APISearchConverterTest {
albums.size `should be equal to` entity.albumList.size
albums[0] `should be equal to` entity.albumList[0].toDomainEntity()
songs.size `should be equal to` entity.songList.size
songs[0] `should be equal to` entity.songList[0].toDomainEntity()
songs[0] `should be equal to` entity.songList[0].toTrackEntity()
}
}
}