Merge branch 'develop' into ready/LRUCache
This commit is contained in:
commit
2ff944d77d
|
@ -75,7 +75,7 @@ jobs:
|
|||
tx push -s
|
||||
generate_signed_apk:
|
||||
docker:
|
||||
- image: circleci/android:api-28
|
||||
- image: circleci/android:api-30
|
||||
working_directory: ~/ultrasonic
|
||||
steps:
|
||||
- checkout
|
||||
|
@ -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:
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -33,7 +33,7 @@ ext.versions = [
|
|||
|
||||
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",
|
||||
|
|
|
@ -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.
|
|
@ -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.
|
|
@ -40,6 +40,8 @@ android {
|
|||
|
||||
buildFeatures {
|
||||
buildConfig = false
|
||||
viewBinding true
|
||||
dataBinding true
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -9,8 +9,8 @@ android {
|
|||
|
||||
defaultConfig {
|
||||
applicationId "org.moire.ultrasonic"
|
||||
versionCode 98
|
||||
versionName "2.24.0"
|
||||
versionCode 99
|
||||
versionName "3.0.0"
|
||||
|
||||
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
|
||||
|
|
|
@ -208,8 +208,8 @@ class NavigationActivity : AppCompatActivity() {
|
|||
selectServerButton?.text = getString(R.string.main_setup_server, activeServer.name)
|
||||
else selectServerButton?.text = activeServer.name
|
||||
|
||||
val foregroundColor = ServerColor.getForegroundColor(this, activeServer.color)
|
||||
val backgroundColor = ServerColor.getBackgroundColor(this, activeServer.color)
|
||||
val foregroundColor = ServerColor.getForegroundColor(this, null)
|
||||
val backgroundColor = ServerColor.getBackgroundColor(this, null)
|
||||
|
||||
if (activeServer.index == 0)
|
||||
selectServerButton?.icon =
|
||||
|
|
|
@ -108,8 +108,8 @@ internal class ServerRowAdapter(
|
|||
}
|
||||
|
||||
// Set colors
|
||||
icon?.setTint(ServerColor.getForegroundColor(context, setting?.color))
|
||||
background?.setTint(ServerColor.getBackgroundColor(context, setting?.color))
|
||||
icon?.setTint(ServerColor.getForegroundColor(context, null))
|
||||
background?.setTint(ServerColor.getBackgroundColor(context, null))
|
||||
|
||||
// Set the final drawables
|
||||
image?.setImageDrawable(icon)
|
||||
|
|
|
@ -9,7 +9,7 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||
* Room Database to be used to store global data for the whole app.
|
||||
* This could be settings or data that are not specific to any remote music database
|
||||
*/
|
||||
@Database(entities = [ServerSetting::class], version = 4)
|
||||
@Database(entities = [ServerSetting::class], version = 3)
|
||||
abstract class AppDatabase : RoomDatabase() {
|
||||
|
||||
/**
|
||||
|
@ -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"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,7 +23,6 @@ data class ServerSetting(
|
|||
@ColumnInfo(name = "index") var index: Int,
|
||||
@ColumnInfo(name = "name") var name: String,
|
||||
@ColumnInfo(name = "url") var url: String,
|
||||
@ColumnInfo(name = "color") var color: Int? = null,
|
||||
@ColumnInfo(name = "userName") var userName: String,
|
||||
@ColumnInfo(name = "password") var password: String,
|
||||
@ColumnInfo(name = "jukeboxByDefault") var jukeboxByDefault: Boolean,
|
||||
|
@ -37,9 +36,9 @@ data class ServerSetting(
|
|||
@ColumnInfo(name = "podcastSupport") var podcastSupport: Boolean? = null
|
||||
) {
|
||||
constructor() : this (
|
||||
-1, 0, "", "", null, "", "", false, false, false, null, null
|
||||
-1, 0, "", "", "", "", false, false, false, null, null
|
||||
)
|
||||
constructor(name: String, url: String) : this(
|
||||
-1, 0, name, url, null, "", "", false, false, false, null, null
|
||||
-1, 0, name, url, "", "", false, false, false, null, null
|
||||
)
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
||||
|
|
|
@ -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() }
|
||||
|
|
|
@ -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() }
|
||||
|
|
|
@ -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())
|
||||
}
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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() }
|
||||
)
|
||||
|
|
|
@ -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()
|
||||
)
|
||||
|
|
|
@ -6,15 +6,13 @@ import android.view.View
|
|||
import android.view.ViewGroup
|
||||
import android.widget.Button
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import com.google.android.material.switchmaterial.SwitchMaterial
|
||||
import com.google.android.material.textfield.TextInputLayout
|
||||
import com.skydoves.colorpickerview.ColorPickerDialog
|
||||
import com.skydoves.colorpickerview.flag.BubbleFlag
|
||||
import com.skydoves.colorpickerview.flag.FlagMode
|
||||
import com.skydoves.colorpickerview.listeners.ColorEnvelopeListener
|
||||
import java.io.IOException
|
||||
import java.net.MalformedURLException
|
||||
import java.net.URL
|
||||
|
@ -43,8 +41,6 @@ import org.moire.ultrasonic.util.Util
|
|||
import retrofit2.Response
|
||||
import timber.log.Timber
|
||||
|
||||
private const val DIALOG_PADDING = 12
|
||||
|
||||
/**
|
||||
* Displays a form where server settings can be created / edited
|
||||
*/
|
||||
|
@ -72,6 +68,8 @@ class EditServerFragment : Fragment(), OnBackPressedHandler {
|
|||
private var currentColor: Int = 0
|
||||
private var selectedColor: Int? = null
|
||||
|
||||
private var editServerColorText: TextView? = null
|
||||
|
||||
@Override
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
Util.applyTheme(this.context)
|
||||
|
@ -99,6 +97,7 @@ class EditServerFragment : Fragment(), OnBackPressedHandler {
|
|||
jukeboxSwitch = view.findViewById(R.id.edit_jukebox)
|
||||
saveButton = view.findViewById(R.id.edit_save)
|
||||
testButton = view.findViewById(R.id.edit_test)
|
||||
editServerColorText = view.findViewById(R.id.edit_server_color_text)
|
||||
|
||||
val index = arguments?.getInt(
|
||||
EDIT_SERVER_INTENT_INDEX,
|
||||
|
@ -147,7 +146,7 @@ class EditServerFragment : Fragment(), OnBackPressedHandler {
|
|||
} else {
|
||||
// Creating a new server
|
||||
FragmentTitle.setTitle(this, R.string.server_editor_new_label)
|
||||
updateColor(null)
|
||||
// updateColor(null)
|
||||
currentServerSetting = ServerSetting()
|
||||
saveButton!!.setOnClickListener {
|
||||
if (getFields()) {
|
||||
|
@ -163,33 +162,37 @@ class EditServerFragment : Fragment(), OnBackPressedHandler {
|
|||
}
|
||||
}
|
||||
|
||||
serverColorImageView!!.setOnClickListener {
|
||||
val bubbleFlag = BubbleFlag(context)
|
||||
bubbleFlag.flagMode = FlagMode.LAST
|
||||
ColorPickerDialog.Builder(context).apply {
|
||||
this.colorPickerView.setInitialColor(currentColor)
|
||||
this.colorPickerView.flagView = bubbleFlag
|
||||
}
|
||||
.attachAlphaSlideBar(false)
|
||||
.setPositiveButton(
|
||||
getString(R.string.common_ok),
|
||||
ColorEnvelopeListener { envelope, _ ->
|
||||
selectedColor = envelope.color
|
||||
updateColor(envelope.color)
|
||||
}
|
||||
)
|
||||
.setNegativeButton(getString(R.string.common_cancel)) {
|
||||
dialogInterface, _ ->
|
||||
dialogInterface.dismiss()
|
||||
}
|
||||
.setBottomSpace(DIALOG_PADDING)
|
||||
.show()
|
||||
}
|
||||
// serverColorImageView!!.setOnClickListener {
|
||||
// val bubbleFlag = BubbleFlag(context)
|
||||
// bubbleFlag.flagMode = FlagMode.LAST
|
||||
// ColorPickerDialog.Builder(context).apply {
|
||||
// this.colorPickerView.setInitialColor(currentColor)
|
||||
// this.colorPickerView.flagView = bubbleFlag
|
||||
// }
|
||||
// .attachAlphaSlideBar(false)
|
||||
// .setPositiveButton(
|
||||
// getString(R.string.common_ok),
|
||||
// ColorEnvelopeListener { envelope, _ ->
|
||||
// selectedColor = envelope.color
|
||||
// updateColor(envelope.color)
|
||||
// }
|
||||
// )
|
||||
// .setNegativeButton(getString(R.string.common_cancel)) {
|
||||
// dialogInterface, _ ->
|
||||
// dialogInterface.dismiss()
|
||||
// }
|
||||
// .setBottomSpace(DIALOG_PADDING)
|
||||
// .show()
|
||||
// }
|
||||
|
||||
serverColorImageView?.isVisible = false
|
||||
editServerColorText?.isVisible = false
|
||||
}
|
||||
|
||||
private fun updateColor(color: Int?) {
|
||||
@Suppress("unused")
|
||||
private fun updateColor() {
|
||||
val image = ContextCompat.getDrawable(requireContext(), R.drawable.thumb_drawable)
|
||||
currentColor = ServerColor.getBackgroundColor(requireContext(), color)
|
||||
currentColor = ServerColor.getBackgroundColor(requireContext(), null)
|
||||
image?.setTint(currentColor)
|
||||
serverColorImageView?.background = image
|
||||
}
|
||||
|
@ -254,7 +257,7 @@ class EditServerFragment : Fragment(), OnBackPressedHandler {
|
|||
selfSignedSwitch!!.isChecked = savedInstanceState.getBoolean(::selfSignedSwitch.name)
|
||||
ldapSwitch!!.isChecked = savedInstanceState.getBoolean(::ldapSwitch.name)
|
||||
jukeboxSwitch!!.isChecked = savedInstanceState.getBoolean(::jukeboxSwitch.name)
|
||||
updateColor(savedInstanceState.getInt(::serverColorImageView.name))
|
||||
// updateColor(savedInstanceState.getInt(::serverColorImageView.name))
|
||||
if (savedInstanceState.containsKey(::selectedColor.name))
|
||||
selectedColor = savedInstanceState.getInt(::selectedColor.name)
|
||||
isInstanceStateSaved = savedInstanceState.getBoolean(::isInstanceStateSaved.name)
|
||||
|
@ -273,7 +276,7 @@ class EditServerFragment : Fragment(), OnBackPressedHandler {
|
|||
selfSignedSwitch!!.isChecked = currentServerSetting!!.allowSelfSignedCertificate
|
||||
ldapSwitch!!.isChecked = currentServerSetting!!.ldapSupport
|
||||
jukeboxSwitch!!.isChecked = currentServerSetting!!.jukeboxByDefault
|
||||
updateColor(currentServerSetting!!.color)
|
||||
// updateColor(currentServerSetting!!.color)
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -322,7 +325,7 @@ class EditServerFragment : Fragment(), OnBackPressedHandler {
|
|||
if (isValid) {
|
||||
currentServerSetting!!.name = serverNameEditText!!.editText?.text.toString()
|
||||
currentServerSetting!!.url = serverAddressEditText!!.editText?.text.toString()
|
||||
currentServerSetting!!.color = selectedColor
|
||||
// currentServerSetting!!.color = selectedColor
|
||||
currentServerSetting!!.userName = userNameEditText!!.editText?.text.toString()
|
||||
currentServerSetting!!.password = passwordEditText!!.editText?.text.toString()
|
||||
currentServerSetting!!.allowSelfSignedCertificate = selfSignedSwitch!!.isChecked
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
||||
|
|
|
@ -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())
|
||||
}
|
||||
|
||||
|
|
|
@ -212,7 +212,6 @@ class ServerSettingsModel(
|
|||
serverId,
|
||||
settings.getString(PREFERENCES_KEY_SERVER_NAME + preferenceId, "")!!,
|
||||
url,
|
||||
null,
|
||||
userName,
|
||||
settings.getString(PREFERENCES_KEY_PASSWORD + preferenceId, "")!!,
|
||||
settings.getBoolean(PREFERENCES_KEY_JUKEBOX_BY_DEFAULT + preferenceId, false),
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -280,6 +280,11 @@ class MediaPlayerController(
|
|||
jukeboxMediaPlayer.updatePlaylist()
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
fun clearCaches() {
|
||||
downloader.clearDownloadFileCache()
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
fun clearIncomplete() {
|
||||
reset()
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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(':')
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
|
@ -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 > 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>
|
||||
|
|
|
@ -14,13 +14,22 @@
|
|||
<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*in</string>
|
||||
<string name="common.cancel">Abbrechen</string>
|
||||
<string name="common.comment">Kommentar</string>
|
||||
<string name="common.confirm">Bestätigen</string>
|
||||
|
@ -31,18 +40,22 @@
|
|||
<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="common.various_artists">Verschiedene Künstler*innen</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>
|
||||
|
@ -81,7 +94,7 @@
|
|||
<string name="help.url">file:///android_asset/html/de/index.html</string>
|
||||
<string name="jukebox.is_default">Jukebox als Standard</string>
|
||||
<string name="lyrics.nomatch">Keine Liedtexte gefunden</string>
|
||||
<string name="main.albums_alphaByArtist">Nach Künstler</string>
|
||||
<string name="main.albums_alphaByArtist">Nach Künstler*innen</string>
|
||||
<string name="main.albums_alphaByName">Nach Namen</string>
|
||||
<string name="main.albums_frequent">Am häufigsten gespielt</string>
|
||||
<string name="main.albums_highest">Am besten bewertet</string>
|
||||
|
@ -90,7 +103,7 @@
|
|||
<string name="main.albums_recent">Kürzlich gespielt</string>
|
||||
<string name="main.albums_starred">Mit Stern</string>
|
||||
<string name="main.albums_title">Alben</string>
|
||||
<string name="main.artists_title">Künstler</string>
|
||||
<string name="main.artists_title">Künstler*innen</string>
|
||||
<string name="main.genres_title">Genres</string>
|
||||
<string name="main.music">Musik</string>
|
||||
<string name="main.offline">Offline</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*in 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>
|
||||
|
@ -120,7 +134,7 @@
|
|||
<string name="playlist.updated_info_error">Aktualisierung der Wiedergabeliste %s ist fehlgeschlagen</string>
|
||||
<string name="progress.wait">Bitte warten…</string>
|
||||
<string name="search.albums">Alben</string>
|
||||
<string name="search.artists">Künstler</string>
|
||||
<string name="search.artists">Künstler*innen</string>
|
||||
<string name="search.label">Suche</string>
|
||||
<string name="search.more">Zeige mehr</string>
|
||||
<string name="search.no_match">Keine Treffer, bitte erneut versuchen</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>
|
||||
|
@ -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">Maximale Künstler*innen</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>
|
||||
|
@ -298,8 +310,6 @@
|
|||
<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="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>
|
||||
|
@ -339,19 +349,28 @@
|
|||
<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="download.share_song">Aktuelles Lied teilen</string>
|
||||
<string name="settings.share_greeting_default">Standard Begrüßung beim Teilen</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>
|
||||
<string name="settings.show_all_songs_by_artist">Alle Titel nach Künstler sortieren</string>
|
||||
<string name="settings.show_all_songs_by_artist">Alle Titel nach Künstler*innen sortieren</string>
|
||||
<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="download.menu_show_artist">Künstler*in 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>
|
||||
|
@ -360,11 +379,4 @@
|
|||
<string name="api.subsonic.upgrade_client">Inkompatible Versionen. Bitte die Ultrasonic App aktualisieren.</string>
|
||||
<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>
|
||||
|
||||
</resources>
|
||||
</resources>
|
||||
|
|
|
@ -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 > 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>
|
||||
|
|
|
@ -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 > 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 l’extension 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 l’affichage de la piste actuelle n’est pas mise à jour.</string>
|
||||
<string name="settings.disable_send_now_playing_list">Désactiver l’envoi 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 l’image de l’artiste dans la liste</string>
|
||||
<string name="settings.show_artist_picture_summary">Affiche l’image de l’artiste 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 d’expiration lors de la création d’un 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>
|
||||
|
|
|
@ -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 > 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>
|
||||
|
|
|
@ -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 > 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>
|
||||
|
|
|
@ -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 > 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>
|
||||
|
|
|
@ -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 > 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>
|
||||
|
|
|
@ -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 > 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>
|
||||
|
|
|
@ -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 > 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>
|
||||
|
|
|
@ -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> Пользователи > Настройки </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>
|
||||
|
|
|
@ -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 > 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>
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue