Compare commits

..

No commits in common. "develop" and "0.3.0" have entirely different histories.

21 changed files with 59 additions and 233 deletions

View File

@ -39,7 +39,7 @@ cache: &global_cache
before_script:
- git fetch --unshallow --tags
after_script:
- export versionCode=`$ANDROID_HOME/build-tools/30.0.3/aapt dump badging $apk_file | grep versionCode | awk '{print $3}' | sed s/versionCode=//g | sed s/\'//g`
- export versionCode=`$ANDROID_HOME/build-tools/30.0.2/aapt dump badging $apk_file | grep versionCode | awk '{print $3}' | sed s/versionCode=//g | sed s/\'//g`
- apt update && apt install gettext-base
- cat $metadata_template | envsubst > $metadata_file
extends: .gradle-default

View File

@ -36,8 +36,8 @@ androidGitVersion {
android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
namespace = "audio.funkwhale.ffa"
@ -47,7 +47,7 @@ android {
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_17.toString()
jvmTarget = JavaVersion.VERSION_11.toString()
}
buildFeatures {
@ -177,7 +177,7 @@ dependencies {
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycleVersion")
implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycleVersion")
implementation("androidx.coordinatorlayout:coordinatorlayout:1.2.0")
implementation("androidx.preference:preference-ktx:1.2.1")
implementation("androidx.preference:preference-ktx:1.2.0")
implementation("androidx.recyclerview:recyclerview:1.2.1")
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")
implementation("com.google.android.material:material:1.9.0") {
@ -189,9 +189,9 @@ dependencies {
implementation("com.google.android.exoplayer:exoplayer-ui:2.18.1")
implementation("com.google.android.exoplayer:extension-mediasession:2.18.1")
implementation("io.insert-koin:koin-core:3.5.3")
implementation("io.insert-koin:koin-android:3.5.3")
testImplementation("io.insert-koin:koin-test:3.5.3")
implementation("io.insert-koin:koin-core:3.5.0")
implementation("io.insert-koin:koin-android:3.5.0")
testImplementation("io.insert-koin:koin-test:3.5.0")
implementation("com.github.PaulWoitaschek.ExoPlayer-Extensions:extension-opus:789a4f83169cff5c7a91655bb828fde2cfde671a") {
isTransitive = false

View File

@ -1,11 +1,9 @@
package audio.funkwhale.ffa.activities
import android.content.Context
import android.content.Intent
import android.content.res.Configuration
import android.net.Uri
import android.os.Bundle
import android.text.Editable
import android.view.ViewGroup
import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult
import androidx.appcompat.app.AppCompatActivity
@ -66,13 +64,6 @@ class LoginActivity : AppCompatActivity() {
override fun onResume() {
super.onResume()
with(binding) {
val preferences = getPreferences(Context.MODE_PRIVATE)
val hn = preferences?.getString("hostname", "")
if (hn != null && !hn.isEmpty()) {
hostname.text = Editable.Factory.getInstance().newEditable(hn)
}
cleartext.setChecked(preferences?.getBoolean("cleartext", false) ?: false)
anonymous.setChecked(preferences?.getBoolean("anonymous", false) ?: false)
login.setOnClickListener {
var hostname = hostname.text.toString().trim().trim('/')
@ -105,12 +96,6 @@ class LoginActivity : AppCompatActivity() {
hostnameField.error = message
}
if (hostnameField.error == null) {
val preferences = getPreferences(Context.MODE_PRIVATE)
preferences?.edit()?.putString("hostname", hostname)?.commit()
preferences?.edit()?.putBoolean("cleartext", cleartext.isChecked)?.commit()
preferences?.edit()?.putBoolean("anonymous", anonymous.isChecked)?.commit()
}
}
}
}

View File

@ -53,6 +53,9 @@ fun Request.authorize(context: Context, oAuth: OAuth): Request {
this@authorize.apply {
if (!Settings.isAnonymous()) {
oAuth.state().let { state ->
state.accessTokenExpirationTime?.let {
Log.i("Request.authorize()", "Accesstoken expiration: ${Date(it).format()}")
}
val old = state.accessToken
val auth = ClientSecretPost(oAuth.state().clientSecret)
val done = CompletableDeferred<Boolean>()
@ -61,10 +64,10 @@ fun Request.authorize(context: Context, oAuth: OAuth): Request {
state.performActionWithFreshTokens(tokenService, auth) { token, _, e ->
if (e != null) {
Log.e("Request.authorize()", "performActionWithFreshToken failed: $e")
if (e.type != 2 || e.code != 2002) {
Log.e("Request.authorize()", Log.getStackTraceString(e))
EventBus.send(Event.LogOut)
}
Log.e("Request.authorize()", Log.getStackTraceString(e))
}
if (token == old) {
Log.i("Request.authorize()", "Accesstoken not renewed")
}
if (token != old && token != null) {
state.save()
@ -147,4 +150,4 @@ inline fun <T, U, V, W, R> LiveData<T>.mergeWith(
}
}
public fun String?.toIntOrElse(default: Int): Int = this?.toIntOrNull(radix = 10) ?: default
public fun String?.toIntOrElse(default: Int): Int = this?.toIntOrNull(radix = 10) ?: default

View File

@ -83,7 +83,7 @@ class OAuth(private val authorizationServiceFactory: AuthorizationServiceFactory
refreshAccessToken(state, context)
} else {
state.isAuthorized
}
}.also { it.logInfo("tryRefreshAccessToken()") }
}
return false
}
@ -103,7 +103,6 @@ class OAuth(private val authorizationServiceFactory: AuthorizationServiceFactory
if (e != null) {
Log.e("OAuth", "performTokenRequest failed: $e")
Log.e("OAuth", Log.getStackTraceString(e))
EventBus.send(Event.LogOut)
} else {
state.apply {
Log.i("OAuth", "applying new authState")

View File

@ -74,9 +74,7 @@ class NowPlayingBottomSheet @JvmOverloads constructor(
override fun show() {
behavior.isHideable = false
if (behavior.state == BottomSheetBehavior.STATE_HIDDEN) {
close()
}
close()
}
override fun hide() {

View File

@ -65,7 +65,7 @@
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_margin="8dp"
android:contentDescription="@string/control_add_to_favorites"
android:contentDescription="@string/control_add_to_favorties"
android:src="@drawable/favorite"
app:layout_constraintBottom_toBottomOf="@+id/current_playing_details_artist"
app:layout_constraintEnd_toEndOf="parent"
@ -158,4 +158,4 @@
app:layout_constraintTop_toBottomOf="@+id/now_playing_details_progress"
app:tint="@color/controlForeground" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
</layout>

View File

@ -81,7 +81,7 @@
<string name="radio_random_title">Ausazkoa</string>
<string name="radio_random_description">Ausaz hautatutakoak, agian zerbait berria aurkituko duzu!</string>
<string name="radio_less_listened_title">Gutxien entzundakoak</string>
<string name="control_add_to_favorites">Gehitu gogokoenetara</string>
<string name="control_add_to_favorties">Gehitu gogokoenetara</string>
<string name="playlist_added_to">%s zerrendan gehitu da</string>
<string name="filters">Iragazkiak</string>
<string name="fiters_all">Musika guztia</string>
@ -135,4 +135,4 @@
<string name="track_info_details_track_title">Pistaren izenburua</string>
<string name="control_toggle">Aldatu erreproduzitzea</string>
<string name="radio_favorites_description">Erreproduzitu abesti gogokoenak amaierarik gabeko begizta alai batean.</string>
</resources>
</resources>

View File

@ -136,6 +136,6 @@
<string name="settings_auto_skip_backwards_on_pause_summary">Nombre de secondes à revenir en arrière lorsque la lecture est en pause</string>
<string name="playlist">Liste de lecture</string>
<string name="hello_blank_fragment">Bonjour, fragment vide</string>
<string name="control_add_to_favorites">Ajouter aux favoris</string>
<string name="control_add_to_favorties">Ajouter aux favoris</string>
<string name="control_repeat_mode">Mode répétition</string>
</resources>
</resources>

View File

@ -133,6 +133,5 @@
<string name="settings_auto_skip_backwards_on_pause_summary">Número de segundos a rebobinar cando se pausou a reprodución</string>
<string name="playlist">Lista de reprodución</string>
<string name="control_repeat_mode">Modo repetición</string>
<string name="control_add_to_favorites">Engadir a favoritos</string>
<string name="hello_blank_fragment">Borrar esta cadea</string>
<string name="control_add_to_favorties">Engadir a favoritos</string>
</resources>

View File

@ -133,7 +133,4 @@
</plurals>
<string name="login_cleartext">Sta cleartext verkeer toe (HTTP)</string>
<string name="settings_media_quality_summary_size">Lichtst beschikbaar nummer zal worden afgespeeld</string>
<string name="control_repeat_mode">Herhalingsmodus</string>
<string name="control_add_to_favorties">Toevoegen aan favorieten</string>
<string name="control_add_to_favorites">Toevoegen aan favorieten</string>
</resources>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="login_error_hostname">Это не может быть воспринято как действительный URL</string>
<string name="login_error_hostname">Это не может быть понято как действительный URL</string>
<plurals name="downloads_description">
<item quantity="one">Загрузка %1$d трека</item>
<item quantity="few">Загрузка %1$d треков</item>
@ -11,19 +11,19 @@
<item quantity="few">%1$d трека • %2$s</item>
<item quantity="many">%1$d треков • %2$s</item>
</plurals>
<string name="logout_content">Вы действительно хотите выйти из этого экземпляра Funkwhale\?</string>
<string name="logout_content">Вы действительно хотите выйти из этого инстанса Funkwhale\?</string>
<string name="logout_title">Выйти</string>
<string name="radio_less_listened_description">Проигрывает треки которые вы обычно не слушаете. Пришло время восстановить баланс.</string>
<string name="radio_less_listened_title">Малопрослушиваемые</string>
<string name="radio_random_description">Совершенно случайные подборки, может быть, вы откроете для себя что-то новое\?</string>
<string name="radio_random_description">Полностью случайный выбор, может вы обнаружите для себя новые треки\?</string>
<string name="radio_random_title">Случайный порядок</string>
<string name="radio_favorites_description">Воспроизвести любимые мелодии в бесконечном цикле счастья.</string>
<string name="radio_your_content_description">Подборки из ваших собственных библиотек</string>
<string name="radio_favorites_description">Проигрывает ваши любимые мелодии по кругу и никогда не заканчивается.</string>
<string name="radio_your_content_description">Подобрано из вашей библиотеки</string>
<string name="radio_your_content_title">Ваш контент</string>
<string name="radio_user_radios">Пользовательское радио</string>
<string name="radio_instance_radios">Радио экземпляра</string>
<string name="radio_playback_error">При попытке воспроизвести это радио произошла ошибка</string>
<string name="track_info_details_track_instance">Экземпляр Funkwhale</string>
<string name="radio_instance_radios">Радио инстанса</string>
<string name="radio_playback_error">Произошла ошибка при попытке воспроизвести радио</string>
<string name="track_info_details_track_instance">Инстанс Funkwhale</string>
<string name="track_info_details_track_bitrate">Битрейт</string>
<string name="track_info_details_track_position">Позиция в альбоме</string>
<string name="track_info_details_track_duration">Продолжительность</string>
@ -39,14 +39,14 @@
<string name="alt_track_info">Информация о треке</string>
<string name="alt_more_options">Больше параметров</string>
<string name="alt_album_cover">Обложка альбома</string>
<string name="alt_artist_art">Рисунок исполнителя</string>
<string name="alt_app_logo">Логотип приложения</string>
<string name="alt_artist_art">Изображение исполнителя</string>
<string name="alt_app_logo">Иконка приложения</string>
<plurals name="album_count">
<item quantity="one">%d альбом</item>
<item quantity="few">%d альбома</item>
<item quantity="many">%d альбомов</item>
</plurals>
<string name="error_playback">Этот трек не может быть воспроизведен</string>
<string name="error_playback">Этот трек не будет проигран</string>
<string name="control_next">Следующий трек</string>
<string name="control_previous">Прошлый трек</string>
<string name="control_toggle">Переключить воспроизведение</string>
@ -60,7 +60,7 @@
<string name="playback_shuffle">Перемешать</string>
<string name="playback_media_controls_description">Управление воспроизведением медиа</string>
<string name="playback_media_controls">Управление медиа</string>
<string name="favorites">Избранное</string>
<string name="favorites">Любимые</string>
<string name="radios">Радио</string>
<string name="playlists">Плейлисты</string>
<string name="tracks">Треки</string>
@ -76,7 +76,7 @@
<string name="settings_information_repository_description">Funkwhale для Android™</string>
<string name="settings_information_repository_title">Репозиторий</string>
<string name="settings_information">Информация</string>
<string name="settings_night_mode_system_summary">Ночной режим будет соответствовать системным настройкам</string>
<string name="settings_night_mode_system_summary">Тёмный режим будет следовать настройкам системы</string>
<string name="settings_night_mode_system">Как указано в настройках системы</string>
<string name="settings_night_mode_off_summary">Светлый режим всегда будет включен</string>
<string name="settings_night_mode_off">Всегда выключен (светлый режим)</string>
@ -98,7 +98,7 @@
<string name="settings_media_quality">Качество медиа</string>
<string name="settings_general">Основные</string>
<string name="search_no_results">По вашему запросу ничего не найдено</string>
<string name="search_welcome">Введите условия поиска выше и нажмите клавишу Enter, чтобы найти коллекцию</string>
<string name="search_welcome">Введите ваш поисковый запрос и нажмите Enter для поиска вашей коллекции</string>
<string name="search_placeholder">Поиск исполнителей, альбомов и треков</string>
<string name="title_oss_licences">Лицензии открытого исходного кода</string>
<string name="title_settings">Настройки</string>
@ -106,14 +106,14 @@
<string name="toolbar_search">Поиск</string>
<string name="login_error_userinfo">Мы не смогли получить информацию о вашем аккаунте</string>
<string name="login_error_hostname_https">Имя хоста Funkwhale должно быть защищено с помощью HTTPS</string>
<string name="login_logging_in">Входим</string>
<string name="login_logging_in">Происходит вход</string>
<string name="login_submit">Войти</string>
<string name="login_password">Пароль</string>
<string name="login_username">Имя пользователя</string>
<string name="login_anonymous">Анонимная аутентификация</string>
<string name="login_cleartext">Разрешить незашифрованный трафик (HTTP)</string>
<string name="login_hostname">Имя домена</string>
<string name="login_welcome">Пожалуйста, введите данные вашего экземпляра Funkwhale, чтобы получить доступ к его содержимому</string>
<string name="login_hostname">Доменное имя</string>
<string name="login_welcome">Введите данные вашего инстанса Funkwhale для доступа к контенту</string>
<string name="playlist_add_to_new">Новый плейлист…</string>
<string name="filters_followed">Подписки на контент</string>
<string name="filters_my_music">Моя музыка</string>
@ -125,17 +125,11 @@
<string name="playback_queue_save">Сохранить</string>
<string name="playback_queue_clear">Очистить</string>
<string name="playback_play">Играть</string>
<string name="settings_play_order_in_order_summary">Вы предпочитаете слушать альбомы в порядке</string>
<string name="settings_play_order_in_order_summary">Предпочитаемый порядок проигрывания альбомов</string>
<string name="settings_play_order_in_order">Проигрывать альбомы в порядке</string>
<string name="settings_play_order_shuffle_summary">Вы предпочитаете перетасовывать дорожки альбомов</string>
<string name="settings_play_order_shuffle_summary">Перемешивать трэки в альбомах</string>
<string name="settings_play_order_shuffle">Перемешать альбомы</string>
<string name="settings_play_order">Предпочитаемый порядок</string>
<string name="login_error">Ошибка входа: %s</string>
<string name="login_error_funkwhale_not_found">Сервер Funkwhale не найден</string>
<string name="control_add_to_favorties">Добавить в избранное</string>
<string name="hello_blank_fragment">Привет пустой фрагмент</string>
<string name="playlist">Плейлист</string>
<string name="control_repeat_mode">Режим повтора</string>
<string name="settings_auto_skip_backwards_on_pause">Откатиться назад при паузе</string>
<string name="settings_auto_skip_backwards_on_pause_summary">Количество секунд для отката назад, когда воспроизведение приостановлено</string>
</resources>

View File

@ -1,138 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="login_hostname">Sunucu adı</string>
<string name="login_cleartext">ık metin trafiğine izin ver (HTTP)</string>
<string name="login_username">Kullanıcı Adı</string>
<string name="login_password">Parola</string>
<string name="login_submit">Giriş</string>
<string name="login_logging_in">Oturum aç</string>
<string name="login_error">Giriş başarısız oldu: %s</string>
<string name="login_error_hostname">Bu geçerli bir Bağlantı olarak anlaşılamaz</string>
<string name="login_error_hostname_https">Funkwhale ana sunucu adı HTTPS aracılığıyla güvenli olmalıdır</string>
<string name="toolbar_search">Ara</string>
<string name="title_downloads">İndirilenler</string>
<string name="title_settings">Ayarlar</string>
<string name="title_oss_licences">ık kaynak lisansları</string>
<string name="search_placeholder">Sanatçıları, albümleri ve parçaları arayın</string>
<string name="search_no_results">Sorgunuz için sonuç bulunamadı</string>
<string name="settings_general">Genel</string>
<string name="settings_media_quality">Ortam kalitesi</string>
<string name="settings_media_quality_quality">En iyi kalite</string>
<string name="settings_media_quality_size">En küçük boyut</string>
<string name="settings_media_quality_summary_quality">Mevcut en iyi sürüm oynatılacaktır</string>
<string name="settings_media_quality_summary_size">Mevcut en küçük parça çalınacaktır</string>
<string name="settings_bandwidth_limitation">Bant genişliği sınırlaması</string>
<string name="settings_bandwidth_limitation_unlimited">Sınırsız</string>
<string name="settings_bandwidth_limitation_limited">Sınırlı</string>
<string name="settings_bandwidth_limitation_summary_limited">Uç nokta 320kbps maksimum bit hızına uygun içerik sunacaktır</string>
<string name="settings_media_cache_size">Medya önbellek boyutu</string>
<string name="settings_media_cache_size_summary">Çevrimdışı oynatma için parçaları depolamak üzere %d GB kullanılacaktır</string>
<string name="settings_play_order">Tercih edilen oynatma sırası</string>
<string name="settings_play_order_in_order">Albümleri sırayla çalın</string>
<string name="settings_play_order_in_order_summary">Albümleri sırayla çalmayı tercih ediyorsunuz</string>
<string name="settings_auto_skip_backwards_on_pause">Duraklatırken geriye doğru atlama</string>
<string name="settings_other">Diğer</string>
<string name="settings_night_mode">Karanlık</string>
<string name="settings_night_mode_on">Her zaman açık (karanlık)</string>
<string name="settings_night_mode_on_summary">Karanlık tema her zaman açık olacak</string>
<string name="settings_night_mode_off">Her zaman kapalı (açık)</string>
<string name="settings_night_mode_off_summary">ık tema her zaman açık olacak</string>
<string name="settings_night_mode_system">Sistem ayarlarını takip edin</string>
<string name="settings_play_order_shuffle">Karıştır albümleri</string>
<string name="settings_information">Bilgi</string>
<string name="settings_information_repository_title">Depo</string>
<string name="settings_version_title">Sürüm</string>
<string name="settings_information_license_title">Lisans</string>
<string name="settings_information_license_description">MIT lisans</string>
<string name="settings_crash_report_title">Kilitlenme günlüklerini kopyalama</string>
<string name="settings_crash_report_copied">Son çökme raporu panonuza kopyalandı</string>
<string name="settings_logout">Çıkış yapınız</string>
<string name="artists">Sanatçılar</string>
<string name="albums">Albümler</string>
<string name="tracks">Parçalar</string>
<string name="playlists">Çalma Listeleri</string>
<string name="radios">Radyolar</string>
<string name="favorites">Gözdeler</string>
<string name="playback_media_controls">Ortam kontrolleri</string>
<string name="playback_media_controls_description">Ortam oynatmayı kontrol etme</string>
<string name="playback_play">Oynat</string>
<string name="playback_shuffle">Karıştır</string>
<string name="playback_queue">Kuyruk</string>
<string name="playback_queue_empty">Kuyruk boş</string>
<string name="playback_queue_remove_item">Kaldır</string>
<string name="playback_queue_add_item">Kuyruğa ekle</string>
<string name="playback_queue_download">İndir</string>
<string name="playback_queue_clear">Temizle</string>
<string name="playback_queue_save">Kaydet</string>
<string name="manage_add_to_favorites">Gözdelerine ekle</string>
<string name="control_toggle">Oynatmayı aç kapat</string>
<string name="control_previous">Önceki parça</string>
<string name="control_next">Sonraki parça</string>
<string name="control_repeat_mode">Tekrar modu</string>
<string name="control_add_to_favorites">Gözdelere ekle</string>
<plurals name="album_count">
<item quantity="one">%d albüm</item>
<item quantity="other">%d albümler</item>
</plurals>
<string name="alt_app_logo">Uygulama logosu</string>
<string name="alt_artist_art">Sanatçı sanatı</string>
<string name="alt_album_cover">Albüm kapağı</string>
<string name="alt_more_options">Daha fazla seçenek</string>
<string name="alt_track_info">Parça hakkında bilgi</string>
<string name="track_info_artist">Sanatçıya git</string>
<string name="track_info_album">Albüme git</string>
<string name="track_info_details">Bilgi</string>
<string name="track_info_details_artist">Sanatçı</string>
<string name="track_info_details_album">Albüm</string>
<string name="track_info_details_track_title">Parça başlığı</string>
<string name="track_info_details_track_copyright">Telif Hakkı</string>
<string name="track_info_details_track_license">Lisans</string>
<string name="login_error_funkwhale_not_found">Funkwhale kapsülü bulunamadı</string>
<string name="track_info_details_track_duration">Süre</string>
<string name="track_info_details_track_position">Albüm konumu</string>
<string name="track_info_details_track_bitrate">BitHızı</string>
<string name="track_info_details_track_instance">Funkwhale örneği</string>
<string name="radio_playback_error">Bu radyoyu oynatmaya çalışırken bir hata oluştu</string>
<string name="radio_instance_radios">Örnek radyolar</string>
<string name="radio_user_radios">Kullanıcı radyoları</string>
<string name="radio_your_content_title">İçeriğiniz</string>
<string name="radio_your_content_description">Kendi kütüphanelerinizden seçtikleriniz</string>
<string name="radio_random_title">Rastgele</string>
<string name="radio_random_description">Tamamen rastgele seçimler, belki yeni şeyler keşfedersiniz\?</string>
<string name="radio_less_listened_title">Daha az dinlendi</string>
<string name="radio_less_listened_description">Genelde dinlemediğiniz parçaları dinleyin. Biraz denge sağlamanın zamanı geldi.</string>
<string name="logout_title">Çıkış yapınız</string>
<plurals name="playlist_description">
<item quantity="one">%1$d parça • %2$s</item>
<item quantity="other">%1$d parçalar • %2$s</item>
</plurals>
<string name="playlist_add_to">Oynatma listesine ekle</string>
<string name="playlist_add_to_new">Yeni oynatma listesi…</string>
<string name="playlist_add_to_create">Oynatma listesi oluştur</string>
<string name="playlist_added_to">Oynatma listesi %s eklendi</string>
<string name="filters">Süzgeçler</string>
<string name="fiters_all">Tüm müzikler</string>
<string name="filters_my_music">Benim müzikler</string>
<string name="filters_followed">Takip edilen içerik</string>
<string name="login_welcome">İçeriğine erişmek için lütfen Funkwhale örneğinizin ayrıntılarını girin</string>
<string name="login_anonymous">Anonim kimlik doğrulama</string>
<string name="logout_content">Bu Funkwhale örneğinden çıkmak istediğinizden emin misiniz\?</string>
<plurals name="downloads_description">
<item quantity="one">Parça %1$d indiriliyor</item>
<item quantity="other">Parçalar %1$d indiriliyor</item>
</plurals>
<string name="login_error_userinfo">Kullanıcınız hakkında bilgi alamadık</string>
<string name="settings_play_order_shuffle_summary">Albüm parçalarını karıştırmayı tercih ediyorsunuz</string>
<string name="hello_blank_fragment">Merhaba boş parça</string>
<string name="settings_auto_skip_backwards_on_pause_summary">Oynatma duraklatıldığında geriye doğru atlanacak saniye sayısı</string>
<string name="settings_information_repository_description">Android™ için Funkwhale</string>
<string name="settings_crash_report_description">Yalnızca çökmeden önceki son 5 dakikaya ait günlükler toplanacaktır</string>
<string name="track_info_details_title">Parça detayları</string>
<string name="search_welcome">Arama kelimerinizi yukarıya yazın ve koleksiyonunuzda arama yapmak için enter tuşuna basın</string>
<string name="settings_bandwidth_limitation_summary_unlimited">Özgün içerik kod dönüştürme olmadan getirilecektir</string>
<string name="settings_night_mode_system_summary">Gece teması sistem ayarlarını takip edecek</string>
<string name="playback_queue_play_next">Sonrakini oynat</string>
<string name="error_playback">Bu parça çalınamadı</string>
<string name="radio_favorites_description">Hiç bitmeyen bir mutluluk döngüsünde en sevdiğiniz şarkıları çalın.</string>
<string name="playlist">Oynatma listesi</string>
</resources>

View File

@ -82,7 +82,7 @@
<string name="control_previous">Previous track</string>
<string name="control_next">Next track</string>
<string name="control_repeat_mode">Repeat mode</string>
<string name="control_add_to_favorites">Add to favorites</string>
<string name="control_add_to_favorties">Add to favorties</string>
<string name="error_playback">This track could not be played</string>
<plurals name="album_count">
<item quantity="one">%d album</item>

View File

@ -13,7 +13,7 @@ buildscript {
val navVersion: String by extra
dependencies {
classpath("com.android.tools.build:gradle:8.1.2")
classpath("com.android.tools.build:gradle:7.4.2")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.20")
classpath("com.github.bjoernq:unmockplugin:0.7.9")
classpath("com.github.ben-manes:gradle-versions-plugin:0.46.0")

View File

@ -1 +0,0 @@
Log user out when authorization token expires (#154)

View File

@ -1 +0,0 @@
Remember server settings in login dialog (#154)

View File

@ -4,6 +4,3 @@ kotlin.code.style=official
android.useAndroidX=true
android.enableJetifier=true
android.defaults.buildfeatures.buildconfig=true
android.nonTransitiveRClass=false
android.nonFinalResIds=false

Binary file not shown.

View File

@ -1,7 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

29
gradlew vendored
View File

@ -83,8 +83,10 @@ done
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@ -131,13 +133,10 @@ location of your Java installation."
fi
else
JAVACMD=java
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
@ -145,7 +144,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
# shellcheck disable=SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
@ -153,7 +152,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
# shellcheck disable=SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
@ -198,15 +197,11 @@ if "$cygwin" || "$msys" ; then
done
fi
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \