mirror of
https://github.com/ultrasonic/ultrasonic
synced 2025-02-28 01:17:44 +01:00
commit
4d481707df
@ -38,4 +38,90 @@ jobs:
|
|||||||
destination: reports
|
destination: reports
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
path: build/reports/jacoco/jacocoFullReport/
|
path: build/reports/jacoco/jacocoFullReport/
|
||||||
|
push_translations:
|
||||||
|
docker:
|
||||||
|
- image: circleci/python:3.6
|
||||||
|
working_directory: ~/ultrasonic
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- run:
|
||||||
|
name: install transifex client
|
||||||
|
command: |
|
||||||
|
python -m venv ~/venv
|
||||||
|
. ~/venv/bin/activate
|
||||||
|
pip install transifex-client
|
||||||
|
- run:
|
||||||
|
name: configure transifex client
|
||||||
|
command: echo $'[https://www.transifex.com]\nhostname = https://www.transifex.com\nusername = api\npassword = '"${TRANSIFEX_PASSWORD}"$'\n' > ~/.transifexrc
|
||||||
|
- run:
|
||||||
|
name: push changes in translation files
|
||||||
|
command: |
|
||||||
|
. ~/venv/bin/activate
|
||||||
|
tx push -st
|
||||||
|
generate_signed_apk:
|
||||||
|
docker:
|
||||||
|
- image: circleci/android:api-27-alpha
|
||||||
|
working_directory: ~/ultrasonic
|
||||||
|
envoronment:
|
||||||
|
JAVA_TOOL_OPTIONS: "-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap"
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- restore_cache:
|
||||||
|
key: gradle-cache-{{ checksum "dependencies.gradle" }}
|
||||||
|
- run:
|
||||||
|
name: decrypt ultrasonic-keystore
|
||||||
|
command: openssl aes-256-cbc -K ${ULTRASONIC_KEYSTORE_KEY} -iv ${ULTRASONIC_KEYSTORE_IV} -in ultrasonic-keystore.enc -out ultrasonic-keystore -d
|
||||||
|
- run:
|
||||||
|
name: build release apk
|
||||||
|
command: ./gradlew build assembleRelease
|
||||||
|
- run:
|
||||||
|
name: sign release apk
|
||||||
|
command: |
|
||||||
|
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
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: /tmp/ultrasonic-release
|
||||||
|
paths:
|
||||||
|
- ultrasonic-*.apk
|
||||||
|
publish_github_signed_apk:
|
||||||
|
docker:
|
||||||
|
- image: circleci/golang
|
||||||
|
steps:
|
||||||
|
- attach_workspace:
|
||||||
|
at: /tmp/ultrasonic-release
|
||||||
|
- run:
|
||||||
|
name: install ghr
|
||||||
|
command: go get -v github.com/tcnksm/ghr
|
||||||
|
- run:
|
||||||
|
name: publish release on github tag
|
||||||
|
command: ghr -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} ${CIRCLE_TAG} /tmp/ultrasonic-release
|
||||||
|
workflows:
|
||||||
|
version: 2
|
||||||
|
build_and_push_translations:
|
||||||
|
jobs:
|
||||||
|
- build
|
||||||
|
- push_translations:
|
||||||
|
requires:
|
||||||
|
- build
|
||||||
|
filters:
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- develop
|
||||||
|
- master
|
||||||
|
- generate_signed_apk:
|
||||||
|
filters:
|
||||||
|
tags:
|
||||||
|
only: /^[0-9]+(\.[0-9]+)*/
|
||||||
|
branches:
|
||||||
|
ignore: /.*/
|
||||||
|
- publish_github_signed_apk:
|
||||||
|
requires:
|
||||||
|
- generate_signed_apk
|
||||||
|
filters:
|
||||||
|
tags:
|
||||||
|
only: /^[0-9]+(\.[0-9]+)*/
|
||||||
|
branches:
|
||||||
|
ignore: /.*/
|
||||||
|
|
||||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,3 +1,6 @@
|
|||||||
|
# Release folder
|
||||||
|
ultrasonic/release/
|
||||||
|
|
||||||
# Built application files
|
# Built application files
|
||||||
*.apk
|
*.apk
|
||||||
*.ap_
|
*.ap_
|
||||||
|
10
.tx/config
Normal file
10
.tx/config
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[main]
|
||||||
|
host = https://www.transifex.com
|
||||||
|
lang_map = fr_CA:fr-rCA,pt_BR:pt-rBR,pt_PT:pt,zh_CN:zh-rCN,zh_HK:zh-rHK,zh_TW:zh-rTW,da_DK:da-rDK,de_DE:de,tr_TR:tr,fr_FR:fr,es_ES:es,hu_HU:hu,sv_SE:sv-rSE,bg_BG:bg,el_GR:el,kn_IN:kn-rIN,cs_CZ:cs,sr:sr,he:iw,id:in,lt_LT:lt,km_KH:km-rKH,th_TH:th
|
||||||
|
|
||||||
|
[ultrasonic.app]
|
||||||
|
file_filter = ultrasonic/src/main/res/values-<lang>/strings.xml
|
||||||
|
source_file = ultrasonic/src/main/res/values/strings.xml
|
||||||
|
source_lang = en
|
||||||
|
type = ANDROID
|
||||||
|
|
@ -13,7 +13,6 @@ buildscript {
|
|||||||
classpath gradlePlugins.ktlintGradle
|
classpath gradlePlugins.ktlintGradle
|
||||||
classpath gradlePlugins.detekt
|
classpath gradlePlugins.detekt
|
||||||
classpath gradlePlugins.jacocoAndroid
|
classpath gradlePlugins.jacocoAndroid
|
||||||
classpath gradlePlugins.buildVersioning
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
ext.versions = [
|
ext.versions = [
|
||||||
|
versionCode : 63,
|
||||||
|
versionName : "2.2.2",
|
||||||
|
|
||||||
minSdk : 14,
|
minSdk : 14,
|
||||||
targetSdk : 22,
|
targetSdk : 22,
|
||||||
compileSdk : 27,
|
compileSdk : 27,
|
||||||
@ -10,7 +13,6 @@ ext.versions = [
|
|||||||
detekt : "1.0.0.RC6",
|
detekt : "1.0.0.RC6",
|
||||||
jacoco : "0.7.9",
|
jacoco : "0.7.9",
|
||||||
jacocoAndroid : "0.1.2",
|
jacocoAndroid : "0.1.2",
|
||||||
buildVersioning : "1.6.0",
|
|
||||||
|
|
||||||
androidSupport : "22.2.1",
|
androidSupport : "22.2.1",
|
||||||
|
|
||||||
@ -28,12 +30,11 @@ ext.versions = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
ext.gradlePlugins = [
|
ext.gradlePlugins = [
|
||||||
androidTools : "com.android.tools.build:gradle:$versions.androidTools",
|
androidTools : "com.android.tools.build:gradle:$versions.androidTools",
|
||||||
kotlin : "org.jetbrains.kotlin:kotlin-gradle-plugin:$versions.kotlin",
|
kotlin : "org.jetbrains.kotlin:kotlin-gradle-plugin:$versions.kotlin",
|
||||||
ktlintGradle : "gradle.plugin.org.jlleitschuh.gradle:ktlint-gradle:$versions.ktlintGradle",
|
ktlintGradle : "gradle.plugin.org.jlleitschuh.gradle:ktlint-gradle:$versions.ktlintGradle",
|
||||||
detekt : "gradle.plugin.io.gitlab.arturbosch.detekt:detekt-gradle-plugin:$versions.detekt",
|
detekt : "gradle.plugin.io.gitlab.arturbosch.detekt:detekt-gradle-plugin:$versions.detekt",
|
||||||
jacocoAndroid : "com.dicedmelon.gradle:jacoco-android:$versions.jacocoAndroid",
|
jacocoAndroid : "com.dicedmelon.gradle:jacoco-android:$versions.jacocoAndroid"
|
||||||
buildVersioning : "org.moallemi.gradle.advanced-build-version:gradle-plugin:$versions.buildVersioning",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
ext.androidSupport = [
|
ext.androidSupport = [
|
||||||
|
BIN
ultrasonic-keystore.enc
Normal file
BIN
ultrasonic-keystore.enc
Normal file
Binary file not shown.
@ -1,30 +1,15 @@
|
|||||||
apply plugin: 'com.android.application'
|
apply plugin: 'com.android.application'
|
||||||
apply plugin: 'kotlin-android'
|
apply plugin: 'kotlin-android'
|
||||||
apply plugin: 'jacoco-android'
|
apply plugin: 'jacoco-android'
|
||||||
apply plugin: 'org.moallemi.advanced-build-version'
|
|
||||||
apply from: "../gradle_scripts/code_quality.gradle"
|
apply from: "../gradle_scripts/code_quality.gradle"
|
||||||
|
|
||||||
advancedVersioning {
|
|
||||||
nameOptions {
|
|
||||||
versionMajor 2
|
|
||||||
versionMinor 2
|
|
||||||
versionPatch 1
|
|
||||||
}
|
|
||||||
codeOptions {
|
|
||||||
versionCodeType org.moallemi.gradle.internal.VersionCodeType.AUTO_INCREMENT_ONE_STEP
|
|
||||||
}
|
|
||||||
outputOptions {
|
|
||||||
renameOutput true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion versions.compileSdk
|
compileSdkVersion versions.compileSdk
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "org.moire.ultrasonic"
|
applicationId "org.moire.ultrasonic"
|
||||||
versionCode advancedVersioning.versionCode
|
versionCode versions.versionCode
|
||||||
versionName advancedVersioning.versionName
|
versionName versions.versionName
|
||||||
|
|
||||||
minSdkVersion versions.minSdk
|
minSdkVersion versions.minSdk
|
||||||
targetSdkVersion versions.targetSdk
|
targetSdkVersion versions.targetSdk
|
||||||
|
@ -202,4 +202,4 @@
|
|||||||
</receiver>
|
</receiver>
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
*/
|
*/
|
||||||
package org.moire.ultrasonic.domain;
|
package org.moire.ultrasonic.domain;
|
||||||
|
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
@ -352,6 +354,7 @@ public class MusicDirectory
|
|||||||
this.bitRate = bitRate;
|
this.bitRate = bitRate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
public String getCoverArt()
|
public String getCoverArt()
|
||||||
{
|
{
|
||||||
return coverArt;
|
return coverArt;
|
||||||
|
@ -21,6 +21,7 @@ package org.moire.ultrasonic.service;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
import android.os.PowerManager;
|
import android.os.PowerManager;
|
||||||
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import org.moire.ultrasonic.domain.MusicDirectory;
|
import org.moire.ultrasonic.domain.MusicDirectory;
|
||||||
@ -457,8 +458,7 @@ public class DownloadFile
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (song.getCoverArt() != null)
|
if (!TextUtils.isEmpty(song.getCoverArt())) {
|
||||||
{
|
|
||||||
int size = Util.getMinDisplayMetric(context);
|
int size = Util.getMinDisplayMetric(context);
|
||||||
musicService.getCoverArt(context, song, size, true, true, null);
|
musicService.getCoverArt(context, song, size, true, true, null);
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,7 @@ import android.graphics.Bitmap;
|
|||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.annotation.StringRes;
|
import android.support.annotation.StringRes;
|
||||||
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import org.moire.ultrasonic.R;
|
import org.moire.ultrasonic.R;
|
||||||
@ -654,7 +655,7 @@ public class RESTMusicService implements MusicService {
|
|||||||
Log.d(TAG, "Loading cover art for: " + entry);
|
Log.d(TAG, "Loading cover art for: " + entry);
|
||||||
|
|
||||||
final String id = entry.getCoverArt();
|
final String id = entry.getCoverArt();
|
||||||
if (id == null || id.isEmpty()) {
|
if (TextUtils.isEmpty(id)) {
|
||||||
return null; // Can't load
|
return null; // Can't load
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ import android.content.Context;
|
|||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.BitmapFactory;
|
import android.graphics.BitmapFactory;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import org.moire.ultrasonic.activity.SubsonicTabActivity;
|
import org.moire.ultrasonic.activity.SubsonicTabActivity;
|
||||||
@ -74,12 +75,9 @@ public class FileUtil
|
|||||||
}
|
}
|
||||||
fileName.append(fileSystemSafe(song.getTitle())).append('.');
|
fileName.append(fileSystemSafe(song.getTitle())).append('.');
|
||||||
|
|
||||||
if (song.getTranscodedSuffix() != null)
|
if (!TextUtils.isEmpty(song.getTranscodedSuffix())) {
|
||||||
{
|
|
||||||
fileName.append(song.getTranscodedSuffix());
|
fileName.append(song.getTranscodedSuffix());
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
fileName.append(song.getSuffix());
|
fileName.append(song.getSuffix());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -324,13 +322,10 @@ public class FileUtil
|
|||||||
|
|
||||||
File dir;
|
File dir;
|
||||||
|
|
||||||
if (entry.getPath() != null)
|
if (!TextUtils.isEmpty(entry.getPath())) {
|
||||||
{
|
|
||||||
File f = new File(fileSystemSafeDir(entry.getPath()));
|
File f = new File(fileSystemSafeDir(entry.getPath()));
|
||||||
dir = new File(String.format("%s/%s", getMusicDirectory(context).getPath(), entry.isDirectory() ? f.getPath() : f.getParent()));
|
dir = new File(String.format("%s/%s", getMusicDirectory(context).getPath(), entry.isDirectory() ? f.getPath() : f.getParent()));
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
String artist = fileSystemSafe(entry.getArtist());
|
String artist = fileSystemSafe(entry.getArtist());
|
||||||
String album = fileSystemSafe(entry.getAlbum());
|
String album = fileSystemSafe(entry.getAlbum());
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@ import android.graphics.drawable.BitmapDrawable;
|
|||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.graphics.drawable.TransitionDrawable;
|
import android.graphics.drawable.TransitionDrawable;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
@ -179,8 +180,7 @@ public class ImageLoader implements Runnable
|
|||||||
|
|
||||||
String coverArt = entry.getCoverArt();
|
String coverArt = entry.getCoverArt();
|
||||||
|
|
||||||
if (coverArt == null)
|
if (TextUtils.isEmpty(coverArt)) {
|
||||||
{
|
|
||||||
setUnknownImage(view, large);
|
setUnknownImage(view, large);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -230,8 +230,7 @@ public class ImageLoader implements Runnable
|
|||||||
|
|
||||||
String coverArt = entry.getCoverArt();
|
String coverArt = entry.getCoverArt();
|
||||||
|
|
||||||
if (coverArt == null)
|
if (TextUtils.isEmpty(coverArt)) {
|
||||||
{
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@ package org.moire.ultrasonic.view;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.drawable.AnimationDrawable;
|
import android.graphics.drawable.AnimationDrawable;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@ -168,7 +169,10 @@ public class SongView extends UpdateView implements Checkable
|
|||||||
String suffix = song.getSuffix();
|
String suffix = song.getSuffix();
|
||||||
String transcodedSuffix = song.getTranscodedSuffix();
|
String transcodedSuffix = song.getTranscodedSuffix();
|
||||||
|
|
||||||
fileFormat = transcodedSuffix == null || transcodedSuffix.equals(suffix) || (song.isVideo() && Util.getVideoPlayerType(this.context) != VideoPlayerType.FLASH) ? suffix : String.format("%s > %s", suffix, transcodedSuffix);
|
fileFormat = TextUtils.isEmpty(transcodedSuffix) ||
|
||||||
|
transcodedSuffix.equals(suffix) ||
|
||||||
|
(song.isVideo() && Util.getVideoPlayerType(this.context) != VideoPlayerType.FLASH) ?
|
||||||
|
suffix : String.format("%s > %s", suffix, transcodedSuffix);
|
||||||
|
|
||||||
String artistName = song.getArtist();
|
String artistName = song.getArtist();
|
||||||
|
|
||||||
|
@ -14,6 +14,9 @@
|
|||||||
<string name="button_bar.chat">Chat</string>
|
<string name="button_bar.chat">Chat</string>
|
||||||
<string name="button_bar.home">Inicio de UltraSonic</string>
|
<string name="button_bar.home">Inicio de UltraSonic</string>
|
||||||
<string name="button_bar.now_playing">Reproduciendo ahora</string>
|
<string name="button_bar.now_playing">Reproduciendo ahora</string>
|
||||||
|
<string name="podcasts.label">Podcast</string>
|
||||||
|
<string name="podcasts_channels.empty">No hay canales de Podcasts registrados</string>
|
||||||
|
<string name="button_bar.podcasts">Podcast</string>
|
||||||
<string name="button_bar.playlists">Listas de reproducción</string>
|
<string name="button_bar.playlists">Listas de reproducción</string>
|
||||||
<string name="button_bar.search">Buscar</string>
|
<string name="button_bar.search">Buscar</string>
|
||||||
<string name="chat.send_a_message">Enviar un mensaje</string>
|
<string name="chat.send_a_message">Enviar un mensaje</string>
|
||||||
@ -393,9 +396,7 @@
|
|||||||
<string name="settings.image_loader_concurrency_12">12</string>
|
<string name="settings.image_loader_concurrency_12">12</string>
|
||||||
<string name="albumArt">Caratula del Álbum</string>
|
<string name="albumArt">Caratula del Álbum</string>
|
||||||
<string name="common_multiple_years">Múltiples años</string>
|
<string name="common_multiple_years">Múltiples años</string>
|
||||||
|
|
||||||
<plurals name="select_album_n_songs">
|
<plurals name="select_album_n_songs">
|
||||||
<item quantity="zero">Ninguna canción</item>
|
|
||||||
<item quantity="one">1 canción</item>
|
<item quantity="one">1 canción</item>
|
||||||
<item quantity="other">%d canciones</item>
|
<item quantity="other">%d canciones</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
@ -423,9 +424,6 @@
|
|||||||
<item quantity="one">Queda un día de periodo de prueba</item>
|
<item quantity="one">Queda un día de periodo de prueba</item>
|
||||||
<item quantity="other">Quedan %d días de periodo de prueba</item>
|
<item quantity="other">Quedan %d días de periodo de prueba</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="button_bar.podcasts">Podcast</string>
|
|
||||||
<string name="podcasts.label">Podcast</string>
|
|
||||||
<string name="podcasts_channels.empty">No hay canales de Podcasts registrados</string>
|
|
||||||
|
|
||||||
<!-- Subsonic api errors -->
|
<!-- Subsonic api errors -->
|
||||||
<string name="api.subsonic.generic">Error genérico de api: %1$s</string>
|
<string name="api.subsonic.generic">Error genérico de api: %1$s</string>
|
||||||
@ -439,4 +437,4 @@
|
|||||||
<string name="api.subsonic.upgrade_client">Versiones incompatibles. Por favor actualiza la aplicación de Android UltraSonic.</string>
|
<string name="api.subsonic.upgrade_client">Versiones incompatibles. Por favor actualiza la aplicación de Android UltraSonic.</string>
|
||||||
<string name="api.subsonic.upgrade_server">Versiones incompatibles. Por favor actualiza el servidor de Subsonic.</string>
|
<string name="api.subsonic.upgrade_server">Versiones incompatibles. Por favor actualiza el servidor de Subsonic.</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -14,6 +14,9 @@
|
|||||||
<string name="button_bar.chat">Salon de discussion</string>
|
<string name="button_bar.chat">Salon de discussion</string>
|
||||||
<string name="button_bar.home">Accueil Ultrasonic</string>
|
<string name="button_bar.home">Accueil Ultrasonic</string>
|
||||||
<string name="button_bar.now_playing">Lecture en cours</string>
|
<string name="button_bar.now_playing">Lecture en cours</string>
|
||||||
|
<string name="podcasts.label">Podcast</string>
|
||||||
|
<string name="podcasts_channels.empty">No podcasts channels registered</string>
|
||||||
|
<string name="button_bar.podcasts">Podcast</string>
|
||||||
<string name="button_bar.playlists">Playlists</string>
|
<string name="button_bar.playlists">Playlists</string>
|
||||||
<string name="button_bar.search">Recherche</string>
|
<string name="button_bar.search">Recherche</string>
|
||||||
<string name="chat.send_a_message">Envoyer un message</string>
|
<string name="chat.send_a_message">Envoyer un message</string>
|
||||||
@ -236,8 +239,8 @@
|
|||||||
<string name="settings.network_timeout_60000">60 secondes</string>
|
<string name="settings.network_timeout_60000">60 secondes</string>
|
||||||
<string name="settings.network_timeout_75000">75 secondes</string>
|
<string name="settings.network_timeout_75000">75 secondes</string>
|
||||||
<string name="settings.network_timeout_90000">90 secondes</string>
|
<string name="settings.network_timeout_90000">90 secondes</string>
|
||||||
<string name="settings.network_title">Réseau</string>
|
|
||||||
<string name="settings.notifications_title">Notifications</string>
|
<string name="settings.notifications_title">Notifications</string>
|
||||||
|
<string name="settings.network_title">Réseau</string>
|
||||||
<string name="settings.other_title">Autres paramètres</string>
|
<string name="settings.other_title">Autres paramètres</string>
|
||||||
<string name="settings.playback_control_title">Paramètres de contrôle de lecture</string>
|
<string name="settings.playback_control_title">Paramètres de contrôle de lecture</string>
|
||||||
<string name="settings.preload">Titres à pré-charger</string>
|
<string name="settings.preload">Titres à pré-charger</string>
|
||||||
@ -393,9 +396,7 @@
|
|||||||
<string name="settings.image_loader_concurrency_12">12</string>
|
<string name="settings.image_loader_concurrency_12">12</string>
|
||||||
<string name="albumArt">albumArt</string>
|
<string name="albumArt">albumArt</string>
|
||||||
<string name="common_multiple_years">Multiple Years</string>
|
<string name="common_multiple_years">Multiple Years</string>
|
||||||
|
|
||||||
<plurals name="select_album_n_songs">
|
<plurals name="select_album_n_songs">
|
||||||
<item quantity="zero">Aucun titre</item>
|
|
||||||
<item quantity="one">Un titre</item>
|
<item quantity="one">Un titre</item>
|
||||||
<item quantity="other">%d titres</item>
|
<item quantity="other">%d titres</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
@ -423,9 +424,6 @@
|
|||||||
<item quantity="one">Un jour restant à la période d\'essai</item>
|
<item quantity="one">Un jour restant à la période d\'essai</item>
|
||||||
<item quantity="other">%d jours restant à la période d\'essai</item>
|
<item quantity="other">%d jours restant à la période d\'essai</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="button_bar.podcasts">Podcast</string>
|
|
||||||
<string name="podcasts.label">Podcast</string>
|
|
||||||
<string name="podcasts_channels.empty">No podcasts channels registered</string>
|
|
||||||
|
|
||||||
<!-- Subsonic api errors -->
|
<!-- Subsonic api errors -->
|
||||||
<string name="api.subsonic.generic">Erreur api générique: %1$s</string>
|
<string name="api.subsonic.generic">Erreur api générique: %1$s</string>
|
||||||
@ -439,4 +437,4 @@
|
|||||||
<string name="api.subsonic.upgrade_client">Versions incompatible. Veuillez mette à jour l\'application Android UltraSonic.</string>
|
<string name="api.subsonic.upgrade_client">Versions incompatible. Veuillez mette à jour l\'application Android UltraSonic.</string>
|
||||||
<string name="api.subsonic.upgrade_server">Versions incompatible. Veuillez mette à jour le serveur Subsonic.</string>
|
<string name="api.subsonic.upgrade_server">Versions incompatible. Veuillez mette à jour le serveur Subsonic.</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -14,6 +14,9 @@
|
|||||||
<string name="button_bar.chat">Csevegés (Chat)</string>
|
<string name="button_bar.chat">Csevegés (Chat)</string>
|
||||||
<string name="button_bar.home">UltraSonic főoldal</string>
|
<string name="button_bar.home">UltraSonic főoldal</string>
|
||||||
<string name="button_bar.now_playing">Lejátszó</string>
|
<string name="button_bar.now_playing">Lejátszó</string>
|
||||||
|
<string name="podcasts.label">Podcast</string>
|
||||||
|
<string name="podcasts_channels.empty">No podcasts channels registered</string>
|
||||||
|
<string name="button_bar.podcasts">Podcast</string>
|
||||||
<string name="button_bar.playlists">Lejátszási listák</string>
|
<string name="button_bar.playlists">Lejátszási listák</string>
|
||||||
<string name="button_bar.search">Keresés</string>
|
<string name="button_bar.search">Keresés</string>
|
||||||
<string name="chat.send_a_message">Üzenet küldése</string>
|
<string name="chat.send_a_message">Üzenet küldése</string>
|
||||||
@ -393,9 +396,7 @@
|
|||||||
<string name="settings.image_loader_concurrency_12">12</string>
|
<string name="settings.image_loader_concurrency_12">12</string>
|
||||||
<string name="albumArt">albumArt</string>
|
<string name="albumArt">albumArt</string>
|
||||||
<string name="common_multiple_years">Multiple Years</string>
|
<string name="common_multiple_years">Multiple Years</string>
|
||||||
|
|
||||||
<plurals name="select_album_n_songs">
|
<plurals name="select_album_n_songs">
|
||||||
<item quantity="zero">Nincsenek dalok</item>
|
|
||||||
<item quantity="one">1 dal</item>
|
<item quantity="one">1 dal</item>
|
||||||
<item quantity="other">%d dal</item>
|
<item quantity="other">%d dal</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
@ -423,9 +424,6 @@
|
|||||||
<item quantity="one">1 nap van hátra a próba időszakból.</item>
|
<item quantity="one">1 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>
|
<item quantity="other">%d nap van hátra a próba időszakból.</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="button_bar.podcasts">Podcast</string>
|
|
||||||
<string name="podcasts.label">Podcast</string>
|
|
||||||
<string name="podcasts_channels.empty">No podcasts channels registered</string>
|
|
||||||
|
|
||||||
<!-- Subsonic api errors -->
|
<!-- Subsonic api errors -->
|
||||||
<string name="api.subsonic.generic">Általános api hiba: %1$s</string>
|
<string name="api.subsonic.generic">Általános api hiba: %1$s</string>
|
||||||
@ -439,4 +437,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_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>
|
<string name="api.subsonic.upgrade_server">Nem kompatibilis verzió. Kérjük, frissítse a Subsonic kiszolgálót!</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -396,9 +396,7 @@
|
|||||||
<string name="settings.image_loader_concurrency_12">12</string>
|
<string name="settings.image_loader_concurrency_12">12</string>
|
||||||
<string name="albumArt">albumArt</string>
|
<string name="albumArt">albumArt</string>
|
||||||
<string name="common_multiple_years">Múltiplos Anos</string>
|
<string name="common_multiple_years">Múltiplos Anos</string>
|
||||||
|
|
||||||
<plurals name="select_album_n_songs">
|
<plurals name="select_album_n_songs">
|
||||||
<item quantity="zero">Nenhuma música</item>
|
|
||||||
<item quantity="one">1 música</item>
|
<item quantity="one">1 música</item>
|
||||||
<item quantity="other">%d músicas</item>
|
<item quantity="other">%d músicas</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
<resources>
|
||||||
|
|
||||||
<string name="background_task.loading">Carregando…</string>
|
<string name="background_task.loading">Carregando…</string>
|
||||||
<string name="background_task.network_error">Ocorreu um erro de rede. Verifique o endereço do servidor ou tente mais tarde.</string>
|
<string name="background_task.network_error">Ocorreu um erro de rede. Verifique o endereço do servidor ou tente mais tarde.</string>
|
||||||
@ -396,9 +396,7 @@
|
|||||||
<string name="settings.image_loader_concurrency_12">12</string>
|
<string name="settings.image_loader_concurrency_12">12</string>
|
||||||
<string name="albumArt">albumArt</string>
|
<string name="albumArt">albumArt</string>
|
||||||
<string name="common_multiple_years">Múltiplos Anos</string>
|
<string name="common_multiple_years">Múltiplos Anos</string>
|
||||||
|
<plurals name="select_album_n_songs">
|
||||||
<plurals name="select_album_n_songs" tools:ignore="UnusedQuantity">
|
|
||||||
<item quantity="zero">Nenhuma música</item>
|
|
||||||
<item quantity="one">%d música</item>
|
<item quantity="one">%d música</item>
|
||||||
<item quantity="other">%d músicas</item>
|
<item quantity="other">%d músicas</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
@ -401,7 +401,6 @@
|
|||||||
<string name="settings.server_address_unset" translatable="false">http://example.com</string>
|
<string name="settings.server_address_unset" translatable="false">http://example.com</string>
|
||||||
|
|
||||||
<plurals name="select_album_n_songs">
|
<plurals name="select_album_n_songs">
|
||||||
<item quantity="zero">No songs</item>
|
|
||||||
<item quantity="one">1 song</item>
|
<item quantity="one">1 song</item>
|
||||||
<item quantity="other">%d songs</item>
|
<item quantity="other">%d songs</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
@ -442,4 +441,4 @@
|
|||||||
<string name="api.subsonic.upgrade_client">Incompatible versions. Please upgrade UltraSonic Android app.</string>
|
<string name="api.subsonic.upgrade_client">Incompatible versions. Please upgrade UltraSonic Android app.</string>
|
||||||
<string name="api.subsonic.upgrade_server">Incompatible versions. Please upgrade Subsonic server.</string>
|
<string name="api.subsonic.upgrade_server">Incompatible versions. Please upgrade Subsonic server.</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
#Tue Jan 23 22:14:32 CET 2018
|
|
||||||
AI_VERSION_CODE=62
|
|
Loading…
x
Reference in New Issue
Block a user