diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt index 160677b1..4cadda0d 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt @@ -488,8 +488,7 @@ class NavigationActivity : AppCompatActivity() { val downloadHandler: DownloadHandler by inject() downloadHandler.addTracksToMediaController( songs = musicDirectory.getTracks(), - append = false, - playNext = false, + insertionMode = MediaPlayerManager.InsertionMode.CLEAR, autoPlay = true, shuffle = false, fragment = currentFragment, diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/HeaderViewBinder.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/HeaderViewBinder.kt index c2d25b0c..48e89673 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/HeaderViewBinder.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/HeaderViewBinder.kt @@ -98,7 +98,7 @@ class HeaderViewBinder( holder.yearView.text = year val songs = resources.getQuantityString( - R.plurals.select_album_n_songs, item.childCount, + R.plurals.n_songs, item.childCount, item.childCount ) holder.songCountView.text = songs diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/BookmarksFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/BookmarksFragment.kt index 5f0ef215..b959742e 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/BookmarksFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/BookmarksFragment.kt @@ -56,7 +56,7 @@ class BookmarksFragment : TrackCollectionFragment() { super.setupButtons(view) playNowButton!!.setOnClickListener { - playNow(getSelectedSongs()) + playNow(getSelectedTracks()) } } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EntryListFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EntryListFragment.kt index 48815367..075b3e31 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EntryListFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EntryListFragment.kt @@ -20,6 +20,7 @@ import org.moire.ultrasonic.data.ActiveServerProvider import org.moire.ultrasonic.domain.Artist import org.moire.ultrasonic.domain.GenericEntry import org.moire.ultrasonic.domain.Identifiable +import org.moire.ultrasonic.service.MediaPlayerManager import org.moire.ultrasonic.service.RxBus import org.moire.ultrasonic.service.plusAssign import org.moire.ultrasonic.subsonic.DownloadAction @@ -133,27 +134,24 @@ abstract class EntryListFragment : MultiListFragment() { downloadHandler.fetchTracksAndAddToController( fragment, item.id, - append = false, + insertionMode = MediaPlayerManager.InsertionMode.CLEAR, autoPlay = true, - playNext = false, isArtist = isArtist ) R.id.menu_play_next -> downloadHandler.fetchTracksAndAddToController( fragment, item.id, - append = false, + insertionMode = MediaPlayerManager.InsertionMode.AFTER_CURRENT, autoPlay = true, - playNext = true, isArtist = isArtist ) R.id.menu_play_last -> downloadHandler.fetchTracksAndAddToController( fragment, item.id, - append = true, + insertionMode = MediaPlayerManager.InsertionMode.APPEND, autoPlay = false, - playNext = false, isArtist = isArtist ) R.id.menu_pin -> diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SearchFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SearchFragment.kt index 4d2ffe2f..40d71cf3 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SearchFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SearchFragment.kt @@ -253,7 +253,7 @@ class SearchFragment : MultiListFragment(), KoinComponent { insertionMode = MediaPlayerManager.InsertionMode.APPEND ) mediaPlayerManager.play(mediaPlayerManager.mediaItemCount - 1) - toast(context, resources.getQuantityString(R.plurals.select_album_n_songs_added, 1, 1)) + toast(context, resources.getQuantityString(R.plurals.n_songs_added_to_end, 1, 1)) } private fun onVideoSelected(track: Track) { @@ -307,8 +307,7 @@ class SearchFragment : MultiListFragment(), KoinComponent { songs.add(item) downloadHandler.addTracksToMediaController( songs = songs, - append = false, - playNext = false, + insertionMode = MediaPlayerManager.InsertionMode.CLEAR, autoPlay = true, shuffle = false, fragment = this, @@ -319,8 +318,7 @@ class SearchFragment : MultiListFragment(), KoinComponent { songs.add(item) downloadHandler.addTracksToMediaController( songs = songs, - append = true, - playNext = true, + insertionMode = MediaPlayerManager.InsertionMode.AFTER_CURRENT, autoPlay = false, shuffle = false, fragment = this, @@ -331,8 +329,7 @@ class SearchFragment : MultiListFragment(), KoinComponent { songs.add(item) downloadHandler.addTracksToMediaController( songs = songs, - append = true, - playNext = false, + insertionMode = MediaPlayerManager.InsertionMode.APPEND, autoPlay = false, shuffle = false, fragment = this, @@ -344,7 +341,7 @@ class SearchFragment : MultiListFragment(), KoinComponent { toast( context, resources.getQuantityString( - R.plurals.select_album_n_songs_pinned, + R.plurals.n_songs_pinned, songs.size, songs.size ) @@ -356,7 +353,7 @@ class SearchFragment : MultiListFragment(), KoinComponent { toast( context, resources.getQuantityString( - R.plurals.select_album_n_songs_downloaded, + R.plurals.n_songs_to_be_downloaded, songs.size, songs.size ) @@ -368,7 +365,7 @@ class SearchFragment : MultiListFragment(), KoinComponent { toast( context, resources.getQuantityString( - R.plurals.select_album_n_songs_unpinned, + R.plurals.n_songs_unpinned, songs.size, songs.size ) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt index b16fe044..7d076d83 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt @@ -159,7 +159,7 @@ open class TrackCollectionFragment( // Change the buttons if the status of any selected track changes rxBusSubscription += RxBus.trackDownloadStateObservable.subscribe { if (it.progress != null) return@subscribe - val selectedSongs = getSelectedSongs() + val selectedSongs = getSelectedTracks() if (!selectedSongs.any { song -> song.id == it.id }) return@subscribe triggerButtonUpdate(selectedSongs) } @@ -211,23 +211,15 @@ open class TrackCollectionFragment( } playNowButton?.setOnClickListener { - playNow(false) + playNow(MediaPlayerManager.InsertionMode.CLEAR, toast = true) } playNextButton?.setOnClickListener { - downloadHandler.addTracksToMediaController( - songs = getSelectedSongs(), - append = true, - playNext = true, - autoPlay = false, - shuffle = false, - playlistName = navArgs.playlistName, - this@TrackCollectionFragment - ) + playNow(MediaPlayerManager.InsertionMode.AFTER_CURRENT, toast = true) } playLastButton!!.setOnClickListener { - playNow(true) + playNow(MediaPlayerManager.InsertionMode.APPEND, toast = true) } pinButton?.setOnClickListener { @@ -291,7 +283,7 @@ open class TrackCollectionFragment( return true } else if (item.itemId == R.id.menu_item_share) { shareHandler.createShare( - this@TrackCollectionFragment, getSelectedSongs(), + this@TrackCollectionFragment, getSelectedTracks(), refreshListView, cancellationToken!!, navArgs.id ) @@ -308,20 +300,37 @@ open class TrackCollectionFragment( } private fun playNow( - append: Boolean, - selectedSongs: List = getSelectedSongs() + insertionMode: MediaPlayerManager.InsertionMode, + selectedTracks: List = getSelectedTracks(), + toast: Boolean = false ) { - if (selectedSongs.isNotEmpty()) { + if (selectedTracks.isNotEmpty()) { downloadHandler.addTracksToMediaController( - songs = selectedSongs, - append = append, - playNext = false, - autoPlay = !append, + songs = selectedTracks, + insertionMode = insertionMode, + autoPlay = (insertionMode == MediaPlayerManager.InsertionMode.CLEAR), playlistName = null, fragment = this ) } else { - playAll(false, append) + playAll(false, insertionMode) + } + + if (toast) { + val stringInt = when (insertionMode) { + MediaPlayerManager.InsertionMode.CLEAR -> + R.plurals.n_songs_added_play_now + MediaPlayerManager.InsertionMode.AFTER_CURRENT -> + R.plurals.n_songs_added_after_current + MediaPlayerManager.InsertionMode.APPEND -> + R.plurals.n_songs_added_to_end + } + val msg = resources.getQuantityString( + stringInt, + selectedTracks.size, + selectedTracks.size + ) + Util.toast(requireContext(), msg) } } @@ -338,7 +347,10 @@ open class TrackCollectionFragment( } } - private fun playAll(shuffle: Boolean = false, append: Boolean = false) { + private fun playAll( + shuffle: Boolean = false, + insertionMode: MediaPlayerManager.InsertionMode = MediaPlayerManager.InsertionMode.CLEAR + ) { var hasSubFolders = false for (item in viewAdapter.getCurrentList()) { @@ -355,18 +367,16 @@ open class TrackCollectionFragment( downloadHandler.fetchTracksAndAddToController( fragment = this, id = navArgs.id!!, - append = append, - autoPlay = !append, + insertionMode = insertionMode, + autoPlay = (insertionMode != MediaPlayerManager.InsertionMode.APPEND), shuffle = shuffle, - playNext = false, isArtist = isArtist ) } else { downloadHandler.addTracksToMediaController( songs = getAllSongs(), - append = append, - playNext = false, - autoPlay = !append, + insertionMode = insertionMode, + autoPlay = (insertionMode != MediaPlayerManager.InsertionMode.APPEND), shuffle = shuffle, playlistName = navArgs.playlistName, fragment = this @@ -397,7 +407,7 @@ open class TrackCollectionFragment( } @Synchronized - fun triggerButtonUpdate(selection: List = getSelectedSongs()) { + fun triggerButtonUpdate(selection: List = getSelectedTracks()) { listModel.calculateButtonState(selection, ::updateButtonState) } @@ -421,7 +431,7 @@ open class TrackCollectionFragment( } } - private fun downloadBackground(save: Boolean, tracks: List = getSelectedSongs()) { + private fun downloadBackground(save: Boolean, tracks: List = getSelectedTracks()) { var songs = tracks if (songs.isEmpty()) { @@ -436,7 +446,7 @@ open class TrackCollectionFragment( ) } - internal fun delete(songs: List = getSelectedSongs()) { + internal fun delete(songs: List = getSelectedTracks()) { downloadHandler.justDownload( action = DownloadAction.DELETE, fragment = this, @@ -444,7 +454,7 @@ open class TrackCollectionFragment( ) } - internal fun unpin(songs: List = getSelectedSongs()) { + internal fun unpin(songs: List = getSelectedTracks()) { downloadHandler.justDownload( action = DownloadAction.UNPIN, fragment = this, @@ -502,10 +512,7 @@ open class TrackCollectionFragment( val playAll = navArgs.autoPlay if (playAll && songCount > 0) { - playAll( - navArgs.shuffle, - false - ) + playAll(navArgs.shuffle, MediaPlayerManager.InsertionMode.CLEAR) } listModel.currentListIsSortable = true @@ -513,7 +520,7 @@ open class TrackCollectionFragment( Timber.i("Processed list") } - internal fun getSelectedSongs(): List { + internal fun getSelectedTracks(): List { // Walk through selected set and get the Entries based on the saved ids. return viewAdapter.getCurrentList().mapNotNull { if (it is Track && viewAdapter.isSelected(it.longId)) @@ -608,20 +615,13 @@ open class TrackCollectionFragment( when (menuItem.itemId) { R.id.song_menu_play_now -> { - playNow(false, songs) + playNow(MediaPlayerManager.InsertionMode.CLEAR, songs, true) } R.id.song_menu_play_next -> { - downloadHandler.addTracksToMediaController( - songs = songs, - append = true, - playNext = true, - autoPlay = false, - playlistName = navArgs.playlistName, - fragment = this@TrackCollectionFragment - ) + playNow(MediaPlayerManager.InsertionMode.AFTER_CURRENT, songs, true) } R.id.song_menu_play_last -> { - playNow(true, songs) + playNow(MediaPlayerManager.InsertionMode.APPEND, songs, true) } R.id.song_menu_pin -> { downloadBackground(true, songs) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/legacy/SharesFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/legacy/SharesFragment.kt index 49c33749..31fa05bd 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/legacy/SharesFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/legacy/SharesFragment.kt @@ -35,6 +35,7 @@ import org.moire.ultrasonic.R import org.moire.ultrasonic.api.subsonic.ApiNotSupportedException import org.moire.ultrasonic.domain.Share import org.moire.ultrasonic.fragment.FragmentTitle +import org.moire.ultrasonic.service.MediaPlayerManager import org.moire.ultrasonic.service.MusicServiceFactory import org.moire.ultrasonic.service.OfflineException import org.moire.ultrasonic.subsonic.DownloadAction @@ -165,10 +166,9 @@ class SharesFragment : Fragment(), KoinComponent { this, share.id, share.name, - append = false, + insertionMode = MediaPlayerManager.InsertionMode.CLEAR, autoPlay = true, - shuffle = false, - playNext = false, + shuffle = false ) } R.id.share_menu_play_shuffled -> { @@ -176,10 +176,9 @@ class SharesFragment : Fragment(), KoinComponent { this, share.id, share.name, - append = false, + insertionMode = MediaPlayerManager.InsertionMode.CLEAR, autoPlay = true, shuffle = true, - playNext = false, ) } R.id.share_menu_delete -> { diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/DownloadHandler.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/DownloadHandler.kt index 2bae06e8..207c9141 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/DownloadHandler.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/DownloadHandler.kt @@ -68,27 +68,27 @@ class DownloadHandler( } successString = when (action) { DownloadAction.DOWNLOAD -> fragment.resources.getQuantityString( - R.plurals.select_album_n_songs_downloaded, + R.plurals.n_songs_to_be_downloaded, tracksToDownload.size, tracksToDownload.size ) DownloadAction.UNPIN -> { fragment.resources.getQuantityString( - R.plurals.select_album_n_songs_unpinned, + R.plurals.n_songs_unpinned, tracksToDownload.size, tracksToDownload.size ) } DownloadAction.PIN -> { fragment.resources.getQuantityString( - R.plurals.select_album_n_songs_pinned, + R.plurals.n_songs_pinned, tracksToDownload.size, tracksToDownload.size ) } DownloadAction.DELETE -> { fragment.resources.getQuantityString( - R.plurals.select_album_n_songs_deleted, + R.plurals.n_songs_deleted, tracksToDownload.size, tracksToDownload.size ) @@ -104,10 +104,9 @@ class DownloadHandler( name: String? = "", isShare: Boolean = false, isDirectory: Boolean = true, - append: Boolean, + insertionMode: MediaPlayerManager.InsertionMode, autoPlay: Boolean, shuffle: Boolean = false, - playNext: Boolean, isArtist: Boolean = false ) { var successString: String? = null @@ -119,26 +118,28 @@ class DownloadHandler( withContext(Dispatchers.Main) { addTracksToMediaController( songs = songs, - append = append, - playNext = playNext, + insertionMode = insertionMode, autoPlay = autoPlay, shuffle = shuffle, playlistName = null, fragment = fragment ) + // Play Now doesn't get a Toast :) - if (playNext) { - successString = fragment.resources.getQuantityString( - R.plurals.select_album_n_songs_play_next, - songs.size, - songs.size - ) - } else if (append) { - successString = fragment.resources.getQuantityString( - R.plurals.select_album_n_songs_added, - songs.size, - songs.size - ) + successString = when (insertionMode) { + MediaPlayerManager.InsertionMode.AFTER_CURRENT -> + fragment.resources.getQuantityString( + R.plurals.n_songs_added_after_current, + songs.size, + songs.size + ) + MediaPlayerManager.InsertionMode.APPEND -> + fragment.resources.getQuantityString( + R.plurals.n_songs_added_to_end, + songs.size, + songs.size + ) + else -> null } } }) { successString } @@ -146,8 +147,7 @@ class DownloadHandler( fun addTracksToMediaController( songs: List, - append: Boolean, - playNext: Boolean, + insertionMode: MediaPlayerManager.InsertionMode, autoPlay: Boolean, shuffle: Boolean = false, playlistName: String? = null, @@ -157,12 +157,6 @@ class DownloadHandler( networkAndStorageChecker.warnIfNetworkOrStorageUnavailable() - val insertionMode = when { - append -> MediaPlayerManager.InsertionMode.APPEND - playNext -> MediaPlayerManager.InsertionMode.AFTER_CURRENT - else -> MediaPlayerManager.InsertionMode.CLEAR - } - if (playlistName != null) { mediaPlayerManager.suggestedPlaylistName = playlistName } @@ -173,7 +167,10 @@ class DownloadHandler( shuffle, insertionMode ) - if (Settings.shouldTransitionOnPlayback && (!append || autoPlay)) { + + if (Settings.shouldTransitionOnPlayback && + (insertionMode == MediaPlayerManager.InsertionMode.CLEAR || autoPlay) + ) { fragment.findNavController().popBackStack(R.id.playerFragment, true) fragment.findNavController().navigate(R.id.playerFragment) } diff --git a/ultrasonic/src/main/res/values-cs/strings.xml b/ultrasonic/src/main/res/values-cs/strings.xml index 2bcf7604..140946b6 100644 --- a/ultrasonic/src/main/res/values-cs/strings.xml +++ b/ultrasonic/src/main/res/values-cs/strings.xml @@ -318,7 +318,7 @@ Posunout níž Ověření Rozšířené možnosti - + %d skladba %d skladby %d skladeb diff --git a/ultrasonic/src/main/res/values-de/strings.xml b/ultrasonic/src/main/res/values-de/strings.xml index b60c265f..c73cc34b 100644 --- a/ultrasonic/src/main/res/values-de/strings.xml +++ b/ultrasonic/src/main/res/values-de/strings.xml @@ -383,31 +383,31 @@ Demo Server Website besuchen Einen Fehler melden - + %d Titel %d Titel - + %d Titel zum Anheften ausgewählt %d Titel zum Anheften ausgewählt - + %d Titel zum herunterladen ausgewählt %d Titel zum herunterladen ausgewählt - + %d Titel losgelöst %d Titel losgelöst - + %d Titel gelöscht %d Titel gelöscht - + %d Titel am Ende hinzugefügt %d Titel am Ende hinzugefügt - + %d Titel nach aktuellen Titel hinzugefügt %d Titel nach aktuellen Titel hinzugefügt diff --git a/ultrasonic/src/main/res/values-es/strings.xml b/ultrasonic/src/main/res/values-es/strings.xml index 9d4d3466..6584faf7 100644 --- a/ultrasonic/src/main/res/values-es/strings.xml +++ b/ultrasonic/src/main/res/values-es/strings.xml @@ -390,37 +390,37 @@ Visitar la página web Informar de un error Ultrasonic es un cliente Android de streaming de música gratuito y de código abierto para servidores compatibles con la API de Subsonic (versión 1.7.0 o superior).\n\nCon Ultrasonic puede transmitir o descargar fácilmente música desde su ordenador de casa a su teléfono Android utilizando su servidor multimedia compatible con Subsonic. El software del servidor Subsonic requiere una configuración adicional aparte de Ultrasonic.\n\nPor defecto, Ultrasonic no está configurado. Una vez que hayas configurado tu propio servidor, cambia la configuración del servidor para que se conecte a tu propio ordenador. - + %d canción %d canciones %d canciones - + %d canción seleccionada para ser anclada %d canciones seleccionadas para ser ancladas %d canciones seleccionadas para ser ancladas - + %d canción seleccionada para ser descargada %d canciones seleccionadas para ser descargadas %d canciones seleccionadas para ser descargadas - + %d canción desanclada %d canciones desancladas %d canciones desancladas - + %d canción eliminada %d canciones eliminadas %d canciones eliminadas - + %d canción añadida al final de la cola de reproducción %d canciones añadidas al final de la cola de reproducción %d canciones añadidas al final de la cola de reproducción - + %d canción insertada después de la canción actual %d canciones insertadas después de la canción actual %d canciones insertadas después de la canción actual diff --git a/ultrasonic/src/main/res/values-fr/strings.xml b/ultrasonic/src/main/res/values-fr/strings.xml index 73226555..0f2f8e74 100644 --- a/ultrasonic/src/main/res/values-fr/strings.xml +++ b/ultrasonic/src/main/res/values-fr/strings.xml @@ -372,7 +372,7 @@ Visiter la page web Signaler un bug Ultrasonic est un client Android de streaming musical gratuit et open-source pour les serveurs compatibles avec l\'API Subsonic (version 1.7.0 ou supérieure). Avec Ultrasonic, vous pouvez facilement diffuser ou télécharger de la musique depuis votre ordinateur personnel vers votre téléphone Android en utilisant votre serveur multimédia compatible Subsonic. Le logiciel du serveur Subsonic nécessite une configuration supplémentaire distincte d\'Ultrasonic. Par défaut, Ultrasonic n\'est pas configuré. Une fois que vous avez mis en place votre propre serveur, veuillez modifier la configuration du serveur afin qu\'il se connecte à votre ordinateur. - + %d titre %d titres %d titres @@ -400,12 +400,12 @@ 50 morceaux Image d\'avatar Jour et nuit - + %d morceau ajouté à la file d\'attente de fin de lecture "%d morceaux ajoutés à la file d\'attente de fin de lecture" %d morceaux ajoutés à la file d\'attente de fin de lecture - + %d morceau supprimé %d morceaux supprimés %d morceaux supprimés @@ -429,22 +429,22 @@ Combien de chansons peuvent être téléchargées en parallèle Afficher plus de détails sur la chanson dans la lecture en cours (genre, année, débit) Liste - + %d chanson sélectionnée pour téléchargement %d chansons sélectionnées pour téléchargement %d chansons sélectionnées pour téléchargement - + %d chanson désépinglée %d chansons désépinglées %d chansons désépinglées - + %d chanson insérée après la chanson en cours %d chansons insérées après la chanson en cours %d chansons insérées après la chanson en cours - + %d chanson sélectionnée à épingler %d chansons sélectionnées à épingler %d chansons sélectionnées à épingler diff --git a/ultrasonic/src/main/res/values-gl/strings.xml b/ultrasonic/src/main/res/values-gl/strings.xml index 36cb490a..54b09230 100644 --- a/ultrasonic/src/main/res/values-gl/strings.xml +++ b/ultrasonic/src/main/res/values-gl/strings.xml @@ -51,12 +51,12 @@ Reproducir última Ancorar Mostra un cadro de diálogo de confirmación antes de eliminar ou desancorar as cancións - + %d canción seleccionada para ser ancorada %d cancións seleccionadas para ser ancoradas Tasa de bits máxima: ao fixar unha canción de forma permanente - + %d canción desancorada %d cancións desancoradas diff --git a/ultrasonic/src/main/res/values-hu/strings.xml b/ultrasonic/src/main/res/values-hu/strings.xml index 853d1e7f..cca3e6db 100644 --- a/ultrasonic/src/main/res/values-hu/strings.xml +++ b/ultrasonic/src/main/res/values-hu/strings.xml @@ -326,7 +326,7 @@ Lejjebb mozgat Bejelentkezés Haladó beállítások - + %d dal %d dal diff --git a/ultrasonic/src/main/res/values-ja/strings.xml b/ultrasonic/src/main/res/values-ja/strings.xml index d09880f5..51274e09 100644 --- a/ultrasonic/src/main/res/values-ja/strings.xml +++ b/ultrasonic/src/main/res/values-ja/strings.xml @@ -302,25 +302,25 @@ デモサーバー Webページにアクセス バグを報告 - + %d 曲 - + %d 曲がダウンロード選択されました - + %d 曲が固定解除されました - + %d 曲が固定されるよう選択されました - + %d 曲が削除されました - + %d 曲が再生キューの末尾に追加されました - + %d 曲が現在再生中の曲の次に追加されました 一般APIエラー: %1$s diff --git a/ultrasonic/src/main/res/values-nb-rNO/strings.xml b/ultrasonic/src/main/res/values-nb-rNO/strings.xml index 86e58df5..7a2c4406 100644 --- a/ultrasonic/src/main/res/values-nb-rNO/strings.xml +++ b/ultrasonic/src/main/res/values-nb-rNO/strings.xml @@ -123,11 +123,11 @@ Sett delingsinnstillinger Delinger Veksle spilleliste - + %d spor lagt til etter nåværende spor %d spor lagt til etter nåværende spor - + %d spor lagt til på slutten av spillekøen %d spor lagt til på slutten av spillekøen @@ -290,19 +290,19 @@ Skriv avlusningslogg til fil Rapporter en feil Generisk API-feil: %1$s - + %d spor %d spor - + %d spor å feste %d spor å feste - + %d spor løsnet %d spor løsnet - + %d spor slettet %d spor løsnet @@ -446,7 +446,7 @@ Omslag Støttede funksjoner Jukebox - + %d spor valgt for nedlasting %d spor valgt for nedlasting diff --git a/ultrasonic/src/main/res/values-nl/strings.xml b/ultrasonic/src/main/res/values-nl/strings.xml index 2fea5e44..af539bfd 100644 --- a/ultrasonic/src/main/res/values-nl/strings.xml +++ b/ultrasonic/src/main/res/values-nl/strings.xml @@ -391,31 +391,31 @@ Website openen Bug melden Ultrasonic is een gratis, open source muziekstreamingclient voor Android, die gebruikmaakt van servers die compatibel zijn met de Subsonic-api (versie 1.7.0 of hoger).\n\nMet Ultrasonic kun je eenvoudig muziek streamen of downloaden van je computer naar je Android-telefoon met behulp van een met Subsonic compatibele mediaserver. Let op: de Subsonic-serversoftware vereist aanvullende configuratie.\n\nStandaard is Ultrasonic niet ingesteld. Zet je eigen server op en wijzig de serverconfiguratie in die van je eigen. - + %d nummer %d nummers - + %d vast te maken nummer geselecteerd %d vast te maken nummers geselecteerd - + %d te downloaden nummer geselecteerd %d te downloaden nummers geselecteerd - + %d nummer losgemaakt %d nummers losgemaakt - + %d nummer verwijderd %d nummers verwijderd - + %d nummer toegevoegd aan het einde van afspeelwachtrij %d nummers toegevoegd aan het einde van afspeelwachtrij - + %d nummer ingevoegd na het huidige nummer %d nummers ingevoegd na het huidige nummer diff --git a/ultrasonic/src/main/res/values-pl/strings.xml b/ultrasonic/src/main/res/values-pl/strings.xml index 2e87a7ad..f62deae6 100644 --- a/ultrasonic/src/main/res/values-pl/strings.xml +++ b/ultrasonic/src/main/res/values-pl/strings.xml @@ -307,7 +307,7 @@ Przesuń się w dół Authentication Ustawienia zaawansowane - + %d utwór %d utwory %d utworów @@ -356,7 +356,7 @@ Węgierski Zapisanych jest %1$s plików z logami, które zajmują ~%2$s MB miejsca w katalogu %3$s. Czy chcesz je zachować\? Poprzednie - + Usunięto %d utwór Usunięto %d utwory Usunięto %d utworów @@ -403,20 +403,20 @@ Pobieraj tylko przez Wi-Fi Zawsze pytaj o opis i czas wygaśnięcia podczas tworzenia udostępnienia na serwerze Usuń pliki - + %d utwór zaznaczony do przypięcia %d utwory zaznaczone do przypięcia %d utworów zaznaczonych do przypięcia %d utworów zaznaczonych do przypięcia - + %d utworów zaznaczonych do pobrania %d utwory zaznaczone do pobrania %d utworów zaznaczonych do pobrania %d utworów zaznaczonych do pobrania Odwiedź stronę internetową - + Odpięto %d utwór Odpięto %d utwory Odpięto %d utworów @@ -446,13 +446,13 @@ Lista Okładka Spróbuj odtworzyć pliki multimedialne za pomocą układu dekodującego w telefonie. Może to zmniejszyć zużycie baterii! - + Dodano %d utwór na koniec kolejki odtwarzania Dodano %d utwory na koniec kolejki odtwarzania Dodano %d utworów na koniec kolejki odtwarzania Dodano %d utworów na koniec kolejki odtwarzania - + Wstawiono %d utwór po bieżącym utworze Wstawiono %d utwory po bieżącym utworze Wstawiono %d utworów po bieżącym utworze diff --git a/ultrasonic/src/main/res/values-pt-rBR/strings.xml b/ultrasonic/src/main/res/values-pt-rBR/strings.xml index 96691401..70a42293 100644 --- a/ultrasonic/src/main/res/values-pt-rBR/strings.xml +++ b/ultrasonic/src/main/res/values-pt-rBR/strings.xml @@ -388,37 +388,37 @@ Visitar a página web Reportar um erro Ultrasonic é um cliente gratuito e open-source para Android de streaming de música para API de servidores compatíveis com Subsonic (version 1.7.0 ou maior).\n\nCom Ultrasonic você pode facilmente reproduzir online ou baixar música de seu computador doméstico para seu telefone Android usando um servidor de mídia compatível com Subsonic. O software do servidor Subsonic necessita uma configuração independente do Ultrasonic.\n\nPor padrão, o servidor Ultrasonic não é configurado. Uma vez que você configurou seu próprio servidor, altere a configuração no Ultrasonic para poder conectá-lo. - + %d música %d músicas %d músicas - + %d música selecionada para ser fixada %d músicas selecionadas para serem fixadas %d músicas selecionadas para serem fixadas - + %d música selecionada para ser baixada %d músicas selecionadas para serem baixadas %d músicas selecionadas para serem baixadas - + %d música desfixada %d músicas desfixadas %d músicas desfixadas - + %d música excluída %d músicas excluídas %d músicas excluídas - + %d música adicionada ao final da playlist %d músicas adicionadas ao final da playlist %d músicas adicionadas ao final da playlist - + %d música adicionada após a atual %d músicas adicionadas após a atual %d músicas adicionadas após a atual diff --git a/ultrasonic/src/main/res/values-pt/strings.xml b/ultrasonic/src/main/res/values-pt/strings.xml index e0cf7285..834ea509 100644 --- a/ultrasonic/src/main/res/values-pt/strings.xml +++ b/ultrasonic/src/main/res/values-pt/strings.xml @@ -307,7 +307,7 @@ Move down Authentication Configurações avançadas - + %d música %d músicas %d músicas @@ -330,22 +330,22 @@ Servidor Demonstração Visitar a página web Reportar um erro - + %d música selecionada para ser fixada %d músicas selecionadas para serem fixadas %d músicas selecionadas para serem fixadas - + %d música desfixada %d músicas desfixadas %d músicas desfixadas - + %d música excluída %d músicas excluídas %d músicas excluídas - + %d música adicionada ao final da playlist %d músicas adicionadas ao final da playlist %d músicas adicionadas ao final da playlist @@ -447,12 +447,12 @@ \nCom Ultrasonic, pode facilmente reproduzir online ou descarregar música do seu computador doméstico para o seu telefone Android usando um servidor de mídia compatível com Subsonic. O software do servidor Subsonic necessita uma configuração independente do Ultrasonic. \n \nPor padrão, o servidor Ultrasonic não é configurado. Uma vez que configurou o seu próprio servidor, altere a configuração no Ultrasonic para poder conectá-lo. - + %d música selecionada a ser descarregada %d músicas selecionadas para serem baixadas %d músicas selecionadas para serem baixadas - + %d música adicionada após a atual %d músicas adicionadas após a atual %d músicas adicionadas após a atual diff --git a/ultrasonic/src/main/res/values-ru/strings.xml b/ultrasonic/src/main/res/values-ru/strings.xml index 0d9e5ff4..0c750c2f 100644 --- a/ultrasonic/src/main/res/values-ru/strings.xml +++ b/ultrasonic/src/main/res/values-ru/strings.xml @@ -347,7 +347,7 @@ Одна или несколько функций были отключены, потому что сервер их не поддерживает.\nВы можете запустить этот тест снова в любое время. Демо-сервер - + %d песня %d песни %d песен diff --git a/ultrasonic/src/main/res/values-zh-rCN/strings.xml b/ultrasonic/src/main/res/values-zh-rCN/strings.xml index f704d2a1..2410948c 100644 --- a/ultrasonic/src/main/res/values-zh-rCN/strings.xml +++ b/ultrasonic/src/main/res/values-zh-rCN/strings.xml @@ -368,25 +368,25 @@ \n通过使用 Ultrasonic 你可以轻松的从你的电脑上的 Subsonic 兼容服务端流式传输或者下载音乐。 Subsonic 服务端与 Ultrasonic 都需要额外的配置才可使用。 \n \n默认情况下,Ultrasonic 并未进行配置,当服务端配置完成后,请确保配置允许客户端连接到你的计算机。 - + %d 首曲目 - + 已选择 %d 首歌曲进行固定 - + 已选择要下载 %d 首歌曲 - + 已选择 %d 首歌曲取消固定 - + %d 首歌曲被删除 - + 已将 %d 首歌曲添加到播放队列的末尾 - + 在当前歌曲之后插入了 %d 首歌曲 diff --git a/ultrasonic/src/main/res/values/strings.xml b/ultrasonic/src/main/res/values/strings.xml index 08db0901..04488224 100644 --- a/ultrasonic/src/main/res/values/strings.xml +++ b/ultrasonic/src/main/res/values/strings.xml @@ -402,31 +402,35 @@ https://ultrasonic.gitlab.io/ https://gitlab.com/ultrasonic/ultrasonic/issues - + %d song %d songs - + %d song selected to be pinned %d songs selected to be pinned - + %d song selected to be downloaded %d songs selected to be downloaded - + %d song unpinned %d songs unpinned - + %d song deleted %d songs deleted - + + %d song added to the play queue + %d songs added to the play queue + + %d song added to the end of play queue %d songs added to the end of play queue - + %d song inserted after current song %d songs inserted after current song