diff --git a/app/client/src/App.vue b/app/client/src/App.vue index 3ec7107..35d5724 100644 --- a/app/client/src/App.vue +++ b/app/client/src/App.vue @@ -252,6 +252,16 @@ + + + {{this.$root.globalSnackbar}} + + + @@ -287,7 +297,10 @@ export default { searchLoading: false, searchInput: null, suggestions: [], - preventDoubleEnter: false + preventDoubleEnter: false, + cancelSuggestions: false, + + globalSnackbar: false } }, methods: { @@ -355,6 +368,8 @@ export default { this.searchLoading = false; } else { //Normal search + this.cancelSuggestions = true; + this.suggestions = []; this.$router.push({path: '/search', query: {q: query}}); } }, @@ -417,6 +432,14 @@ export default { '$root.position'() { this.position = (this.$root.position / this.$root.duration()) * 100; }, + //Global snackbar + '$root.globalSnackbar'() { + if (!this.$root.globalSnackbar) return; + this.globalSnackbar = true; + setTimeout(() => { + this.$root.globalSnackbar = null; + }, 2000); + }, //Autofill searchInput(query) { //Filters @@ -437,6 +460,12 @@ export default { if (query != this.searchInput) return; this.$axios.get('/suggestions/' + encodeURIComponent(query)).then((res) => { if (query != this.searchInput) return; + //Cancel suggestions to prevent autocompletion when already searched + if (this.cancelSuggestions) { + this.cancelSuggestions = false; + this.searchLoading = false; + return; + } this.suggestions = res.data; this.searchLoading = false; }); diff --git a/app/client/src/components/AlbumTile.vue b/app/client/src/components/AlbumTile.vue index 105e19f..91c5997 100644 --- a/app/client/src/components/AlbumTile.vue +++ b/app/client/src/components/AlbumTile.vue @@ -134,8 +134,9 @@ export default { }); this.$emit('clicked') }, - addLibrary() { - this.$axios.put(`/library/album?id=${this.album.id}`); + async addLibrary() { + await this.$axios.put(`/library/album?id=${this.album.id}`); + this.$root.globalSnackbar = this.$t('Added to library!'); }, //Add to downloads async download() { diff --git a/app/client/src/components/ArtistTile.vue b/app/client/src/components/ArtistTile.vue index bf816c7..6a4e0bd 100644 --- a/app/client/src/components/ArtistTile.vue +++ b/app/client/src/components/ArtistTile.vue @@ -67,8 +67,9 @@ export default { } }, methods: { - addLibrary() { - this.$axios.put(`/library/artist&id=${this.artist.id}`); + async addLibrary() { + await this.$axios.put(`/library/artist&id=${this.artist.id}`); + this.$root.globalSnackbar = this.$t('Added to library!'); }, click() { //Navigate to details diff --git a/app/client/src/components/Lyrics.vue b/app/client/src/components/Lyrics.vue index 7081645..14786a4 100644 --- a/app/client/src/components/Lyrics.vue +++ b/app/client/src/components/Lyrics.vue @@ -96,12 +96,9 @@ export default { if (this.currentLyricIndex == this.currentLyric()) return; this.currentLyricIndex = this.currentLyric(); - //Roughly middle - let offset = window.innerHeight / 2 - 500; - if (!this.$refs["l"+this.currentLyricIndex]) return; this.$refs.content.scrollTo({ - top: this.$refs["l"+this.currentLyricIndex][0].offsetTop + offset, + top: this.$refs["l"+this.currentLyricIndex][0].offsetTop - (window.innerHeight / 2.42), behavior: 'smooth' }); }, diff --git a/app/client/src/components/PlaylistPopup.vue b/app/client/src/components/PlaylistPopup.vue index 88096a3..a760df9 100644 --- a/app/client/src/components/PlaylistPopup.vue +++ b/app/client/src/components/PlaylistPopup.vue @@ -42,6 +42,7 @@ + @@ -58,7 +59,7 @@ export default { type: 'Private', types: ['Private', 'Public'], createLoading: false, - + loading: false, playlists: [] } @@ -84,11 +85,13 @@ export default { this.createLoading = false; this.$emit('created'); this.$emit('close'); + this.$root.globalSnackbar = this.$t('Added to playlist!'); }, //Add track to playlist async addTrack(playlist) { await this.$axios.post(`/playlist/${playlist.id}/tracks`, {track: this.track.id}); this.$emit('close'); + this.$root.globalSnackbar = this.$t('Added to playlist!'); } }, async mounted() { diff --git a/app/client/src/components/PlaylistTile.vue b/app/client/src/components/PlaylistTile.vue index db5d924..95ead7c 100644 --- a/app/client/src/components/PlaylistTile.vue +++ b/app/client/src/components/PlaylistTile.vue @@ -140,11 +140,13 @@ export default { //Delete own playlist if (this.playlist.user.id == this.$root.profile.id) { await this.$axios.delete(`/playlist/${this.playlist.id}`); + this.$root.globalSnackbar = this.$t('Playlist deleted!'); } else { //Remove from library await this.$axios.get('/library/playlist&id=' + this.playlist.id); + this.$root.globalSnackbar = this.$t('Removed from library!'); } - + this.$emit('remove'); }, async download() { diff --git a/app/client/src/components/TrackTile.vue b/app/client/src/components/TrackTile.vue index 41c537e..4daa1bb 100644 --- a/app/client/src/components/TrackTile.vue +++ b/app/client/src/components/TrackTile.vue @@ -187,6 +187,7 @@ export default { this.isLibrary = true; this.$root.libraryTracks.push(this.track.id); this.$axios.put(`/library/track?id=${this.track.id}`); + this.$root.globalSnackbar = this.$t('Added to library!'); }, goAlbum() { this.$emit('redirect') @@ -206,6 +207,7 @@ export default { this.isLibrary = false; this.$root.libraryTracks.splice(this.$root.libraryTracks.indexOf(this.track.id), 1); await this.$axios.delete(`/library/track?id=${this.track.id}`); + this.$root.globalSnackbar = this.$t('Removed from library!'); this.$emit('remove'); }, //Remove from playlist @@ -213,6 +215,7 @@ export default { await this.$axios.delete(`/playlist/${this.playlistId}/tracks`, { data: {track: this.track.id} }); + this.$root.globalSnackbar = this.$t('Removed from playlist!'); this.$emit('remove'); }, //Download track diff --git a/app/client/src/locales/ar.json b/app/client/src/locales/ar.json index 14a209f..184eef9 100644 --- a/app/client/src/locales/ar.json +++ b/app/client/src/locales/ar.json @@ -120,5 +120,11 @@ "Discord": "دسكورد", "Telegram Android Group": "مجموعة تيليجرام (أندرويد)", "Credits:": "المساهمون:", - "Agree": "قبول" + "Agree": "قبول", + "Dismiss": "تجاهل", + "Added to playlist!": "تمت الإضافة إلى قائمة التشغيل!", + "Added to library!": "تمت الاضافة الى المكتبة!", + "Removed from library!": "الإزالة من المكتبة!", + "Removed from playlist!": "تمت الإزالة من قائمة التشغيل!", + "Playlist deleted!": "تم حذف قائمة التشغيل!" } \ No newline at end of file diff --git a/app/client/src/locales/de.json b/app/client/src/locales/de.json index ffd3fc8..84b4579 100644 --- a/app/client/src/locales/de.json +++ b/app/client/src/locales/de.json @@ -120,5 +120,11 @@ "Discord": "Discord", "Telegram Android Group": "Telegram Android-Gruppe", "Credits:": "Credits:", - "Agree": "Einverstanden" + "Agree": "Einverstanden", + "Dismiss": "Verwerfen", + "Added to playlist!": "Zur Wiedergabeliste hinzugefügt!", + "Added to library!": "Zur Mediathek hinzufügen!", + "Removed from library!": "Aus der Mediathek entfernen!", + "Removed from playlist!": "Aus der Wiedergabeliste entfernt!", + "Playlist deleted!": "Wiedergabeliste gelöscht!" } \ No newline at end of file diff --git a/app/client/src/locales/el.json b/app/client/src/locales/el.json index 5c15eb6..c7215d9 100644 --- a/app/client/src/locales/el.json +++ b/app/client/src/locales/el.json @@ -109,16 +109,22 @@ "Close on exit": "Κλείσιμο κατά την έξοδο", "Settings saved!": "Οι ρυθμίσεις αποθηκεύτηκαν!", "Available only in Electron version!": "Διαθέσιμο μόνο στην έκδοση Electron!", - "Crossfade (ms)": "Crossfade (ms)", - "Select primary color": "Select primary color", - "Light theme": "Light theme", - "Create folders for playlists": "Create folders for playlists", - "About": "About", - "Links:": "Links:", - "Telegram Releases": "Telegram Releases", - "Telegram Group": "Telegram Group", + "Crossfade (ms)": "Μίξη ομαλής μετάβασης (ms)", + "Select primary color": "Επιλογή κύριου χρώματος", + "Light theme": "Φωτεινό θέμα", + "Create folders for playlists": "Δημιουργία φακέλων για λίστες αναπαραγωγής", + "About": "Σχετικά", + "Links:": "Σύνδεσμοι:", + "Telegram Releases": "Κυκλοφορίες Telegram", + "Telegram Group": "Ομάδα Telegram", "Discord": "Discord", - "Telegram Android Group": "Telegram Android Group", - "Credits:": "Credits:", - "Agree": "Agree" + "Telegram Android Group": "Ομάδα Android Telegram", + "Credits:": "Συντελεστές:", + "Agree": "Αποδοχή", + "Dismiss": "Απόρριψη", + "Added to playlist!": "Προστέθηκε σε λίστα αναπαραγωγής!", + "Added to library!": "Προστέθηκε στη βιβλιοθήκη!", + "Removed from library!": "Καταργήθηκε από τη βιβλιοθήκη!", + "Removed from playlist!": "Καταργήθηκε από τη λίστα αναπαραγωγής!", + "Playlist deleted!": "Η λίστα αναπαραγωγής διαγράφηκε!" } \ No newline at end of file diff --git a/app/client/src/locales/en.json b/app/client/src/locales/en.json index 3711408..d3cf79e 100644 --- a/app/client/src/locales/en.json +++ b/app/client/src/locales/en.json @@ -120,6 +120,11 @@ "Discord": "Discord", "Telegram Android Group": "Telegram Android Group", "Credits:": "Credits:", - "Agree": "Agree" - + "Agree": "Agree", + "Dismiss": "Dismiss", + "Added to playlist!": "Added to playlist!", + "Added to library!": "Added to library!", + "Removed from library!": "Removed from library!", + "Removed from playlist!": "Removed from playlist!", + "Playlist deleted!": "Playlist deleted!" } \ No newline at end of file diff --git a/app/client/src/locales/es.json b/app/client/src/locales/es.json index e78cd97..c2512b1 100644 --- a/app/client/src/locales/es.json +++ b/app/client/src/locales/es.json @@ -1,44 +1,44 @@ { "Home": "Inicio", - "Browse": "Browse", + "Browse": "Explorar", "Library": "Biblioteca", - "Tracks": "Canciones", + "Tracks": "Pistas", "Playlists": "Listas de reproducción", "Albums": "Álbumes", "Artists": "Artistas", "More": "Más", - "Settings": "Configuración", + "Settings": "Ajustes", "Downloads": "Descargas", - "Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.", + "Search or paste Deezer URL. Use / to quickly focus.": "Busca o pega la URL de Deezer. Usa \"/\" para empezar a buscar.", "Play": "Reproducir", - "Add to library": "Add to library", + "Add to library": "Añadir a la biblioteca", "Download": "Descargar", "fans": "seguidores", - "tracks": "canciones", + "tracks": "pistas", "Quality": "Calidad", "Estimated size:": "Tamaño estimado:", - "Start downloading": "Start downloading", + "Start downloading": "Comenzar descarga", "Cancel": "Cancelar", - "Stream logging is disabled!": "Stream logging is disabled!", - "Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.", + "Stream logging is disabled!": "¡El registro de reproducción está deshabilitado!", + "Enable it in settings for history to work properly.": "Habilítalo en los ajustes para que el historial funcione correctamente.", "History": "Historial", - "Create new playlist": "Create new playlist", - "TRACKS": "CANCIONES", + "Create new playlist": "Crear nueva lista de reproducción", + "TRACKS": "PISTAS", "Sort by": "Ordenar por", "Date Added": "Fecha de adición", "Name (A-Z)": "Nombre (A-Z)", "Artist (A-Z)": "Artista (A-Z)", "Album (A-Z)": "Álbum (A-Z)", - "Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!", + "Error loading lyrics or lyrics not found!": "¡Error al cargar letras o no encontradas!", "Create playlist": "Crear lista de reproducción", "Create": "Crear", "Add to playlist": "Agregar a la lista de reproducción", "Create new": "Crear nuevo", "Remove": "Quitar", "Play next": "Reproducir siguiente", - "Add to queue": "Add to queue", - "Remove from library": "Remove from library", - "Remove from playlist": "Remove from playlist", + "Add to queue": "Añadir a la cola de reproducción", + "Remove from library": "Eliminar de la biblioteca", + "Remove from playlist": "Quitar de la lista de reproducción", "Play track mix": "Reproducir mezcla de canciones", "Go to": "Ir a", "Track Mix": "Mezcla de canciones", @@ -49,7 +49,7 @@ "Play top": "Reproducir top", "Radio": "Radio", "Show all albums": "Mostrar todos los álbumes", - "Show all singles": "Show all singles", + "Show all singles": "Mostrar todos los singles", "Show more": "Mostrar más", "Downloaded": "Descargadas", "Queue": "Cola", @@ -57,59 +57,59 @@ "Stop": "Parar", "Start": "Iniciar", "Show folder": "Mostrar carpeta", - "Clear queue": "Limpiar cola", - "Playing from": "Playing from", - "Info": "Información", + "Clear queue": "Limpiar lista", + "Playing from": "Reproduciendo desde", + "Info": "Info", "Lyrics": "Letras", "Track number": "Número de la canción", "Disk number": "Número del disco", "Explicit": "Explícito", "Source": "Fuente", "ID": "ID", - "Error logging in!": "Error logging in!", - "Please try again later, or try another account.": "Please try again later, or try another account.", + "Error logging in!": "¡Error al iniciar sesión!", + "Please try again later, or try another account.": "Por favor, inténtalo de nuevo más tarde, o prueba con otra cuenta.", "Logout": "Cerrar sesión", - "Login using browser": "Login using browser", - "Please login using your Deezer account:": "Please login using your Deezer account:", - "...or paste your ARL/Token below:": "...or paste your ARL/Token below:", + "Login using browser": "Iniciar sesión con navegador", + "Please login using your Deezer account:": "Por favor, inicia sesión con tu cuenta de Deezer:", + "...or paste your ARL/Token below:": "...o pega tu ARL/Token a continuación:", "ARL/Token": "ARL/Token", - "Login": "Ingresar", - "By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", - "Only in Electron version!": "Only in Electron version!", - "Search results for:": "Search results for:", - "Error loading data!": "Error loading data!", - "Try again later!": "Try again later!", + "Login": "Iniciar sesión", + "By using this program, you disagree with Deezer's ToS.": "Al usar este programa, usted no está de acuerdo con los Términos de Servicio de Deezer.", + "Only in Electron version!": "¡Sólo en la versión Electron!", + "Search results for:": "Resultados de la búsqueda para:", + "Error loading data!": "¡Error al cargar datos!", + "Try again later!": "¡Inténtalo más tarde!", "Search": "Buscar", - "Streaming Quality": "Streaming Quality", - "Download Quality": "Download Quality", - "Downloads Directory": "Downloads Directory", - "Simultaneous downloads": "Simultaneous downloads", - "Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", - "Show download dialog": "Show download dialog", - "Create folders for artists": "Create folders for artists", - "Create folders for albums": "Create folders for albums", + "Streaming Quality": "Calidad de reproducción", + "Download Quality": "Calidad de descarga", + "Downloads Directory": "Carpeta de descargas", + "Simultaneous downloads": "Descargas simultaneas máximas", + "Always show download confirm dialog before downloading.": "Mostrar siempre una confirmación de descarga antes de descargar.", + "Show download dialog": "Mostrar diálogo de descargas", + "Create folders for artists": "Crear carpetas por artistas", + "Create folders for albums": "Crear carpetas por álbumes", "Download lyrics": "Descargar letras", "Variables": "Variables", - "UI": "IU", - "Show autocomplete in search": "Show autocomplete in search", - "Integrations": "Integrations", - "This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", - "Log track listens to Deezer": "Registrar la canción que escucha a Deezer", - "Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", + "UI": "Interfaz de Usuario", + "Show autocomplete in search": "Mostrar autocompletado al buscar", + "Integrations": "Integraciones", + "This allows listening history, flow and recommendations to work properly.": "Esto permite registrar el historial, para que flow y las recomendaciones funcionen correctamente.", + "Log track listens to Deezer": "Enviar registro de reproducción a Deezer", + "Connect your LastFM account to allow scrobbling.": "Conecta tu cuenta de LastFM para permitir sincronizar tus canciones.", "Login with LastFM": "Iniciar sesión con LastFM", - "Disconnect LastFM": "Disconnect LastFM", - "Requires restart to apply!": "Requires restart to apply!", - "Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", - "Discord Rich Presence": "Discord Rich Presence", + "Disconnect LastFM": "Desconectar LastFM", + "Requires restart to apply!": "¡Requiere reiniciar para aplicar!", + "Enable Discord Rich Presence, requires restart to toggle!": "¡Activar Rich Presence de Discord requiere reiniciar para cambiar!", + "Discord Rich Presence": "Rich Presence de Discord", "Enable Discord join button for syncing tracks, requires restart to toggle!": "Activar el botón de unión de Discord para sincronizar las canciones, ¡requiere reiniciar para cambiarlo!", - "Discord Join Button": "Discord Join Button", + "Discord Join Button": "Botón Unirse en Discord", "Other": "Otro", - "Minimize to tray": "Minimize to tray", - "Don't minimize to tray": "Don't minimize to tray", - "Close on exit": "Close on exit", + "Minimize to tray": "Minimizar a la bandeja del sistema", + "Don't minimize to tray": "No minimizar a la bandeja del sistema", + "Close on exit": "Cerrar al salir", "Settings saved!": "¡Configuraciones guardadas!", - "Available only in Electron version!": "Available only in Electron version!", - "Crossfade (ms)": "Desvanecimiento (ms)", + "Available only in Electron version!": "¡Disponible sólo en la versión Electron!", + "Crossfade (ms)": "Transición (ms)", "Select primary color": "Seleccionar color primario", "Light theme": "Tema claro", "Create folders for playlists": "Crear carpetas para listas de reproducción", @@ -120,5 +120,11 @@ "Discord": "Discord", "Telegram Android Group": "Grupo de Android en Telegram", "Credits:": "Créditos:", - "Agree": "Acepto" + "Agree": "Acepto", + "Dismiss": "Dismiss", + "Added to playlist!": "Added to playlist!", + "Added to library!": "Added to library!", + "Removed from library!": "Removed from library!", + "Removed from playlist!": "Removed from playlist!", + "Playlist deleted!": "Playlist deleted!" } \ No newline at end of file diff --git a/app/client/src/locales/fa.json b/app/client/src/locales/fa.json index afc8482..d3cf79e 100644 --- a/app/client/src/locales/fa.json +++ b/app/client/src/locales/fa.json @@ -120,5 +120,11 @@ "Discord": "Discord", "Telegram Android Group": "Telegram Android Group", "Credits:": "Credits:", - "Agree": "Agree" + "Agree": "Agree", + "Dismiss": "Dismiss", + "Added to playlist!": "Added to playlist!", + "Added to library!": "Added to library!", + "Removed from library!": "Removed from library!", + "Removed from playlist!": "Removed from playlist!", + "Playlist deleted!": "Playlist deleted!" } \ No newline at end of file diff --git a/app/client/src/locales/fil.json b/app/client/src/locales/fil.json index f327637..50fcf15 100644 --- a/app/client/src/locales/fil.json +++ b/app/client/src/locales/fil.json @@ -120,5 +120,11 @@ "Discord": "Discord", "Telegram Android Group": "Telegram Android Group", "Credits:": "Credits:", - "Agree": "Agree" + "Agree": "Agree", + "Dismiss": "Dismiss", + "Added to playlist!": "Added to playlist!", + "Added to library!": "Added to library!", + "Removed from library!": "Removed from library!", + "Removed from playlist!": "Removed from playlist!", + "Playlist deleted!": "Playlist deleted!" } \ No newline at end of file diff --git a/app/client/src/locales/fr.json b/app/client/src/locales/fr.json index bc34f7e..8794adb 100644 --- a/app/client/src/locales/fr.json +++ b/app/client/src/locales/fr.json @@ -120,5 +120,11 @@ "Discord": "Discord", "Telegram Android Group": "Telegram Android Group", "Credits:": "Credits:", - "Agree": "Agree" + "Agree": "Agree", + "Dismiss": "Dismiss", + "Added to playlist!": "Added to playlist!", + "Added to library!": "Added to library!", + "Removed from library!": "Removed from library!", + "Removed from playlist!": "Removed from playlist!", + "Playlist deleted!": "Playlist deleted!" } \ No newline at end of file diff --git a/app/client/src/locales/he.json b/app/client/src/locales/he.json index afc8482..d3cf79e 100644 --- a/app/client/src/locales/he.json +++ b/app/client/src/locales/he.json @@ -120,5 +120,11 @@ "Discord": "Discord", "Telegram Android Group": "Telegram Android Group", "Credits:": "Credits:", - "Agree": "Agree" + "Agree": "Agree", + "Dismiss": "Dismiss", + "Added to playlist!": "Added to playlist!", + "Added to library!": "Added to library!", + "Removed from library!": "Removed from library!", + "Removed from playlist!": "Removed from playlist!", + "Playlist deleted!": "Playlist deleted!" } \ No newline at end of file diff --git a/app/client/src/locales/hi.json b/app/client/src/locales/hi.json index afc8482..d3cf79e 100644 --- a/app/client/src/locales/hi.json +++ b/app/client/src/locales/hi.json @@ -120,5 +120,11 @@ "Discord": "Discord", "Telegram Android Group": "Telegram Android Group", "Credits:": "Credits:", - "Agree": "Agree" + "Agree": "Agree", + "Dismiss": "Dismiss", + "Added to playlist!": "Added to playlist!", + "Added to library!": "Added to library!", + "Removed from library!": "Removed from library!", + "Removed from playlist!": "Removed from playlist!", + "Playlist deleted!": "Playlist deleted!" } \ No newline at end of file diff --git a/app/client/src/locales/hr.json b/app/client/src/locales/hr.json index afc8482..d3cf79e 100644 --- a/app/client/src/locales/hr.json +++ b/app/client/src/locales/hr.json @@ -120,5 +120,11 @@ "Discord": "Discord", "Telegram Android Group": "Telegram Android Group", "Credits:": "Credits:", - "Agree": "Agree" + "Agree": "Agree", + "Dismiss": "Dismiss", + "Added to playlist!": "Added to playlist!", + "Added to library!": "Added to library!", + "Removed from library!": "Removed from library!", + "Removed from playlist!": "Removed from playlist!", + "Playlist deleted!": "Playlist deleted!" } \ No newline at end of file diff --git a/app/client/src/locales/hu.json b/app/client/src/locales/hu.json index efa789b..0e94fee 100644 --- a/app/client/src/locales/hu.json +++ b/app/client/src/locales/hu.json @@ -120,5 +120,11 @@ "Discord": "Discord", "Telegram Android Group": "Telegram Android Group", "Credits:": "Credits:", - "Agree": "Agree" + "Agree": "Agree", + "Dismiss": "Dismiss", + "Added to playlist!": "Added to playlist!", + "Added to library!": "Added to library!", + "Removed from library!": "Removed from library!", + "Removed from playlist!": "Removed from playlist!", + "Playlist deleted!": "Playlist deleted!" } \ No newline at end of file diff --git a/app/client/src/locales/id.json b/app/client/src/locales/id.json index 648a1b4..4cbeb7e 100644 --- a/app/client/src/locales/id.json +++ b/app/client/src/locales/id.json @@ -110,15 +110,21 @@ "Settings saved!": "Pengaturan tersimpan!", "Available only in Electron version!": "Hanya tersedia di versi Electron!", "Crossfade (ms)": "Crossfade (ms)", - "Select primary color": "Select primary color", - "Light theme": "Light theme", - "Create folders for playlists": "Create folders for playlists", - "About": "About", - "Links:": "Links:", - "Telegram Releases": "Telegram Releases", - "Telegram Group": "Telegram Group", + "Select primary color": "Pilih warna utama", + "Light theme": "Tema cerah", + "Create folders for playlists": "Buat folder untuk daftar putar", + "About": "Tentang", + "Links:": "Tautan:", + "Telegram Releases": "Telegram Rilis", + "Telegram Group": "Telegram Grub", "Discord": "Discord", - "Telegram Android Group": "Telegram Android Group", - "Credits:": "Credits:", - "Agree": "Agree" + "Telegram Android Group": "Telegram Grub Android", + "Credits:": "Kredit:", + "Agree": "Setuju", + "Dismiss": "Dismiss", + "Added to playlist!": "Added to playlist!", + "Added to library!": "Added to library!", + "Removed from library!": "Removed from library!", + "Removed from playlist!": "Removed from playlist!", + "Playlist deleted!": "Playlist deleted!" } \ No newline at end of file diff --git a/app/client/src/locales/it.json b/app/client/src/locales/it.json index 3656ac4..921e82d 100644 --- a/app/client/src/locales/it.json +++ b/app/client/src/locales/it.json @@ -120,5 +120,11 @@ "Discord": "Discord", "Telegram Android Group": "Telegram Android Group", "Credits:": "Credits:", - "Agree": "Agree" + "Agree": "Agree", + "Dismiss": "Dismiss", + "Added to playlist!": "Added to playlist!", + "Added to library!": "Added to library!", + "Removed from library!": "Removed from library!", + "Removed from playlist!": "Removed from playlist!", + "Playlist deleted!": "Playlist deleted!" } \ No newline at end of file diff --git a/app/client/src/locales/ko.json b/app/client/src/locales/ko.json index afc8482..d3cf79e 100644 --- a/app/client/src/locales/ko.json +++ b/app/client/src/locales/ko.json @@ -120,5 +120,11 @@ "Discord": "Discord", "Telegram Android Group": "Telegram Android Group", "Credits:": "Credits:", - "Agree": "Agree" + "Agree": "Agree", + "Dismiss": "Dismiss", + "Added to playlist!": "Added to playlist!", + "Added to library!": "Added to library!", + "Removed from library!": "Removed from library!", + "Removed from playlist!": "Removed from playlist!", + "Playlist deleted!": "Playlist deleted!" } \ No newline at end of file diff --git a/app/client/src/locales/pl.json b/app/client/src/locales/pl.json index 7493eee..45cb7f5 100644 --- a/app/client/src/locales/pl.json +++ b/app/client/src/locales/pl.json @@ -39,7 +39,7 @@ "Add to queue": "Dodaj do kolejki", "Remove from library": "Usuń z biblioteki", "Remove from playlist": "Usuń z playlisty", - "Play track mix": "Odtwórz mieszane utwory", + "Play track mix": "Odtwarzaj losowo", "Go to": "Przejdź do", "Track Mix": "Mieszaj utwory", "Duration": "Czas trwania", @@ -102,7 +102,7 @@ "Enable Discord Rich Presence, requires restart to toggle!": "Włącz Szczegółowy Widok Discord, wymaga ponownego uruchomienia!", "Discord Rich Presence": "Discord Rich Presence", "Enable Discord join button for syncing tracks, requires restart to toggle!": "Włącz w Discordzie przycisk dołączenia, aby synchronizować utwory, wymaga ponownego uruchomienia!", - "Discord Join Button": "Przycisk dołączenia Discord", + "Discord Join Button": "Pokaż przycisk dołączenia do Discord", "Other": "Inne", "Minimize to tray": "Minimalizuj do zasobnika", "Don't minimize to tray": "Nie minimalizuj do zasobnika", @@ -110,15 +110,21 @@ "Settings saved!": "Ustawienia zapisane!", "Available only in Electron version!": "Dostępne tylko w wersji Electron!", "Crossfade (ms)": "Przejście (ms)", - "Select primary color": "Select primary color", - "Light theme": "Light theme", - "Create folders for playlists": "Create folders for playlists", - "About": "About", - "Links:": "Links:", - "Telegram Releases": "Telegram Releases", - "Telegram Group": "Telegram Group", + "Select primary color": "Wybierz podstawowy kolor", + "Light theme": "Wybierz jasny motyw", + "Create folders for playlists": "Utwórz folder dla playlist", + "About": "O programie", + "Links:": "Adresy:", + "Telegram Releases": "Nowe wydania w Telegram", + "Telegram Group": "Grupa w Telegramie", "Discord": "Discord", - "Telegram Android Group": "Telegram Android Group", - "Credits:": "Credits:", - "Agree": "Agree" + "Telegram Android Group": "Grupa Telegram dla wydań na Android", + "Credits:": "Twórcy:", + "Agree": "Akceptuję", + "Dismiss": "Dismiss", + "Added to playlist!": "Added to playlist!", + "Added to library!": "Added to library!", + "Removed from library!": "Removed from library!", + "Removed from playlist!": "Removed from playlist!", + "Playlist deleted!": "Playlist deleted!" } \ No newline at end of file diff --git a/app/client/src/locales/pt.json b/app/client/src/locales/pt.json index 6e54402..ffa97b1 100644 --- a/app/client/src/locales/pt.json +++ b/app/client/src/locales/pt.json @@ -49,34 +49,34 @@ "Play top": "Reproduzir no topo", "Radio": "Rádio", "Show all albums": "Mostrar todos os álbuns", - "Show all singles": "Show all singles", - "Show more": "Show more", - "Downloaded": "Downloaded", - "Queue": "Queue", + "Show all singles": "Mostrar todas as músicas", + "Show more": "Mostrar mais", + "Downloaded": "Baixados", + "Queue": "Fila de Reprodução", "Total": "Total", - "Stop": "Stop", - "Start": "Start", - "Show folder": "Show folder", - "Clear queue": "Clear queue", - "Playing from": "Playing from", - "Info": "Info", - "Lyrics": "Lyrics", - "Track number": "Track number", - "Disk number": "Disk number", - "Explicit": "Explicit", - "Source": "Source", - "ID": "ID", - "Error logging in!": "Error logging in!", - "Please try again later, or try another account.": "Please try again later, or try another account.", - "Logout": "Logout", - "Login using browser": "Login using browser", - "Please login using your Deezer account:": "Please login using your Deezer account:", - "...or paste your ARL/Token below:": "...or paste your ARL/Token below:", + "Stop": "Parar", + "Start": "Começar", + "Show folder": "Mostrar pastas", + "Clear queue": "Limpar lista", + "Playing from": "Reproduzindo de", + "Info": "Informações", + "Lyrics": "Letras", + "Track number": "Número de faixa", + "Disk number": "Numero de disco", + "Explicit": "Explicito", + "Source": "Fonte", + "ID": "Identificação", + "Error logging in!": "Erro de login!", + "Please try again later, or try another account.": "Por favor, tente novamente mais tarde ou tente outra conta.", + "Logout": "Encerrar sessão", + "Login using browser": "Login usando o navegador", + "Please login using your Deezer account:": "Faça login usando sua conta do Deezer:", + "...or paste your ARL/Token below:": "...ou cole seu ARL/Token abaixo:", "ARL/Token": "ARL/Token", "Login": "Login", - "By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", - "Only in Electron version!": "Only in Electron version!", - "Search results for:": "Search results for:", + "By using this program, you disagree with Deezer's ToS.": "Ao usar este programa, você discorda do Acordo de Assinatura do Deezer.", + "Only in Electron version!": "Apenas na versão do Electron!", + "Search results for:": "Buscar resultados para:", "Error loading data!": "Error loading data!", "Try again later!": "Try again later!", "Search": "Search", @@ -98,7 +98,7 @@ "Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", "Login with LastFM": "Login with LastFM", "Disconnect LastFM": "Disconnect LastFM", - "Requires restart to apply!": "Requires restart to apply!", + "Requires restart to apply!": "Requer reinicialização do aplicativo para aplicar!", "Enable Discord Rich Presence, requires restart to toggle!": "Ativar o Rich Presence do Discord, requer reiniciar para alternar!", "Discord Rich Presence": "Habilitar o Discord", "Enable Discord join button for syncing tracks, requires restart to toggle!": "Ativar o botão de adesão do Discord para sincronizar faixas requer reinicialização para alternar!", @@ -120,5 +120,11 @@ "Discord": "Discord", "Telegram Android Group": "Grupo Android do Telegram", "Credits:": "Créditos:", - "Agree": "Concordo" + "Agree": "Concordo", + "Dismiss": "Dismiss", + "Added to playlist!": "Added to playlist!", + "Added to library!": "Added to library!", + "Removed from library!": "Removed from library!", + "Removed from playlist!": "Removed from playlist!", + "Playlist deleted!": "Playlist deleted!" } \ No newline at end of file diff --git a/app/client/src/locales/ro.json b/app/client/src/locales/ro.json index f3443c4..c4e8a58 100644 --- a/app/client/src/locales/ro.json +++ b/app/client/src/locales/ro.json @@ -120,5 +120,11 @@ "Discord": "Discord", "Telegram Android Group": "Telegram Android Group", "Credits:": "Credits:", - "Agree": "Agree" + "Agree": "Agree", + "Dismiss": "Dismiss", + "Added to playlist!": "Added to playlist!", + "Added to library!": "Added to library!", + "Removed from library!": "Removed from library!", + "Removed from playlist!": "Removed from playlist!", + "Playlist deleted!": "Playlist deleted!" } \ No newline at end of file diff --git a/app/client/src/locales/ru.json b/app/client/src/locales/ru.json index 3104233..fee73a9 100644 --- a/app/client/src/locales/ru.json +++ b/app/client/src/locales/ru.json @@ -120,5 +120,11 @@ "Discord": "Discord", "Telegram Android Group": "Telegram Android Group", "Credits:": "Credits:", - "Agree": "Agree" + "Agree": "Agree", + "Dismiss": "Dismiss", + "Added to playlist!": "Added to playlist!", + "Added to library!": "Added to library!", + "Removed from library!": "Removed from library!", + "Removed from playlist!": "Removed from playlist!", + "Playlist deleted!": "Playlist deleted!" } \ No newline at end of file diff --git a/app/client/src/locales/tr.json b/app/client/src/locales/tr.json index 6de61f3..d0260fa 100644 --- a/app/client/src/locales/tr.json +++ b/app/client/src/locales/tr.json @@ -120,5 +120,11 @@ "Discord": "Discord", "Telegram Android Group": "Telegram Android Group", "Credits:": "Credits:", - "Agree": "Agree" + "Agree": "Agree", + "Dismiss": "Dismiss", + "Added to playlist!": "Added to playlist!", + "Added to library!": "Added to library!", + "Removed from library!": "Removed from library!", + "Removed from playlist!": "Removed from playlist!", + "Playlist deleted!": "Playlist deleted!" } \ No newline at end of file diff --git a/app/client/src/locales/uk.json b/app/client/src/locales/uk.json index 0fd97cc..c1918a6 100644 --- a/app/client/src/locales/uk.json +++ b/app/client/src/locales/uk.json @@ -63,7 +63,7 @@ "Lyrics": "Текст", "Track number": "Номер треку", "Disk number": "Номер диску", - "Explicit": "Явний", + "Explicit": "Докладно", "Source": "Джерело", "ID": "ID", "Error logging in!": "Помилка входу!", @@ -75,7 +75,7 @@ "ARL/Token": "ARL/токен", "Login": "Увійти", "By using this program, you disagree with Deezer's ToS.": "Використовуючи цю програму, ви не погоджуєтесь із умовами використання Deezer.", - "Only in Electron version!": "Тільки в Electron версії!", + "Only in Electron version!": "Тільки в версії Electron!", "Search results for:": "Результати пошуку для:", "Error loading data!": "Помилка завантаження даних!", "Try again later!": "Повторіть спробу пізніше!", @@ -90,18 +90,18 @@ "Create folders for albums": "Створити теки для альбомів", "Download lyrics": "Завантажити тексти пісень", "Variables": "Змінні", - "UI": "UI", - "Show autocomplete in search": "Показувати автозаповнення при пошуку", + "UI": "Інтерфейс користувача", + "Show autocomplete in search": "Автозаповнення при пошуку", "Integrations": "Інтеграція", - "This allows listening history, flow and recommendations to work properly.": "Це дозволяє слухати історію, потік та рекомендації для правильної роботи.", - "Log track listens to Deezer": "Реєстр треків Deezer", - "Connect your LastFM account to allow scrobbling.": "Підключіть обліковий запис LastFM, щоб дозволити скроблінг.", + "This allows listening history, flow and recommendations to work properly.": "Для правильної роботи Flow, рекомендацій та історії.", + "Log track listens to Deezer": "Відправляти статистику", + "Connect your LastFM account to allow scrobbling.": "Підключити обліковий запис LastFM, щоб дозволити scrobbling.", "Login with LastFM": "Увійти через LastFM", "Disconnect LastFM": "Від'єднати LastFM", "Requires restart to apply!": "Необхідно перезапустити для застосування!", - "Enable Discord Rich Presence, requires restart to toggle!": "Увімкнути Discord Rich Presence, для використання необхідний перезапуск!", + "Enable Discord Rich Presence, requires restart to toggle!": "Увімкнути Discord Rich Presence, для застосування потрібен перезапуск!", "Discord Rich Presence": "Discord Rich Presence", - "Enable Discord join button for syncing tracks, requires restart to toggle!": "Увімкніть кнопку приєднання Discord для синхронізації треків, для застосування потрібен перезапуск!", + "Enable Discord join button for syncing tracks, requires restart to toggle!": "Увімкнути приєднання до Discord для синхронізації треків, для застосування потрібен перезапуск!", "Discord Join Button": "Кнопка приєднання до Discord", "Other": "Інше", "Minimize to tray": "Згорнути в трей", @@ -110,15 +110,21 @@ "Settings saved!": "Налаштування збережено!", "Available only in Electron version!": "Доступно лише в Electron версії!", "Crossfade (ms)": "Перехресне затухання (мс)", - "Select primary color": "Виберіть основний колір", + "Select primary color": "Вибрати основний колір", "Light theme": "Світла тема", "Create folders for playlists": "Створити теки для плейлистів", "About": "Про додаток", - "Links:": "Посилання:", + "Links:": "Лінки:", "Telegram Releases": "Telegram релізи", "Telegram Group": "Група в Telegram", "Discord": "Discord", - "Telegram Android Group": "Група Андроїд Telegram", + "Telegram Android Group": "Група Android в Telegram", "Credits:": "Автори:", - "Agree": "Погоджуюсь" + "Agree": "Погоджуюсь", + "Dismiss": "Dismiss", + "Added to playlist!": "Added to playlist!", + "Added to library!": "Added to library!", + "Removed from library!": "Removed from library!", + "Removed from playlist!": "Removed from playlist!", + "Playlist deleted!": "Playlist deleted!" } \ No newline at end of file diff --git a/app/client/src/locales/ur.json b/app/client/src/locales/ur.json index afc8482..d3cf79e 100644 --- a/app/client/src/locales/ur.json +++ b/app/client/src/locales/ur.json @@ -120,5 +120,11 @@ "Discord": "Discord", "Telegram Android Group": "Telegram Android Group", "Credits:": "Credits:", - "Agree": "Agree" + "Agree": "Agree", + "Dismiss": "Dismiss", + "Added to playlist!": "Added to playlist!", + "Added to library!": "Added to library!", + "Removed from library!": "Removed from library!", + "Removed from playlist!": "Removed from playlist!", + "Playlist deleted!": "Playlist deleted!" } \ No newline at end of file diff --git a/app/client/src/main.js b/app/client/src/main.js index ba5a1e7..f221415 100644 --- a/app/client/src/main.js +++ b/app/client/src/main.js @@ -108,7 +108,9 @@ new Vue({ }, //Used to prevent double listen logging - logListenId: null + logListenId: null, + + globalSnackbar: null }, methods: { @@ -241,25 +243,30 @@ new Vue({ if (this.settings.crossfadeDuration > 0 && this.position >= (this.duration() - this.settings.crossfadeDuration) && this.state == 2 && this.gapless.audio && !this.gapless.crossfade) { this.gapless.crossfade = true; let currentVolume = this.audio.volume; - this.gapless.audio.play(); - - let volumeStep = currentVolume / (this.settings.crossfadeDuration / 50); - for (let i=0; i<(this.settings.crossfadeDuration / 50); i++) { - if ((this.audio.volume - volumeStep) > 0) - this.audio.volume -= volumeStep; - this.gapless.audio.volume += volumeStep; - await new Promise((res) => setTimeout(() => res(), 50)); - } - this.audio.pause(); - - //Update audio + let oldAudio = this.audio; this.audio = this.gapless.audio; + this.audio.play(); + + //Update meta this.playbackInfo = this.gapless.info; this.track = this.gapless.track; this.queue.index = this.gapless.index; - this.resetGapless(); + this.configureAudio(); this.updateMediaSession(); + + let volumeStep = currentVolume / (this.settings.crossfadeDuration / 50); + for (let i=0; i<(this.settings.crossfadeDuration / 50); i++) { + if ((oldAudio.volume - volumeStep) > 0) + oldAudio.volume -= volumeStep; + this.audio.volume += volumeStep; + await new Promise((res) => setTimeout(() => res(), 50)); + } + oldAudio.pause(); + + this.resetGapless(); + + //Save await this.savePlaybackInfo(); } diff --git a/app/client/src/views/AlbumPage.vue b/app/client/src/views/AlbumPage.vue index 03bb0a1..7bc8eea 100644 --- a/app/client/src/views/AlbumPage.vue +++ b/app/client/src/views/AlbumPage.vue @@ -105,6 +105,7 @@ export default { this.libraryLoading = true; await this.$axios.put(`/library/album?id=${this.album.id}`); this.libraryLoading = false; + this.$root.globalSnackbar = this.$t('Added to library!'); }, async download() { this.downloadDialog = true; diff --git a/app/client/src/views/ArtistPage.vue b/app/client/src/views/ArtistPage.vue index 7cb5b23..194eff3 100644 --- a/app/client/src/views/ArtistPage.vue +++ b/app/client/src/views/ArtistPage.vue @@ -151,6 +151,7 @@ export default { async library() { this.libraryLoading = true; await this.$axios.put(`/library/artist?id=${this.artist.id}`); + this.$root.globalSnackbar = this.$t('Added to library!'); this.libraryLoading = false; }, async load() { diff --git a/app/client/src/views/FullscreenPlayer.vue b/app/client/src/views/FullscreenPlayer.vue index 04ea0fd..c397c26 100644 --- a/app/client/src/views/FullscreenPlayer.vue +++ b/app/client/src/views/FullscreenPlayer.vue @@ -270,11 +270,13 @@ export default { this.inLibrary = false; //Remove from cache this.$root.libraryTracks.splice(this.$root.libraryTracks.indexOf(this.$root.track.id), 1); + this.$root.globalSnackbar = this.$t('Removed from library!'); return; } await this.$axios.put('/library/track?id=' + this.$root.track.id); this.$root.libraryTracks.push(this.$root.track.id); this.inLibrary = true; + this.$root.globalSnackbar = this.$t('Added to library!'); }, //Download current track async download() { diff --git a/app/client/src/views/PlaylistPage.vue b/app/client/src/views/PlaylistPage.vue index 162565c..d25efb2 100644 --- a/app/client/src/views/PlaylistPage.vue +++ b/app/client/src/views/PlaylistPage.vue @@ -141,6 +141,7 @@ export default { this.libraryLoading = true; await this.$axios.put(`/library/playlist?id=${this.playlist.id}`); this.libraryLoading = false; + this.$root.globalSnackbar = this.$t('Added to library!'); }, async initialLoad() { diff --git a/app/client/src/views/Settings.vue b/app/client/src/views/Settings.vue index ea8fa05..4ce85e0 100644 --- a/app/client/src/views/Settings.vue +++ b/app/client/src/views/Settings.vue @@ -292,13 +292,16 @@ export default { languages: [ {code: 'en', name: 'English'}, {code: 'ar', name: 'Arabic'}, + {code: 'fr', name: 'French'}, {code: 'de', name: 'German'}, {code: 'el', name: 'Greek'}, {code: 'id', name: 'Indonesian'}, {code: 'it', name: 'Italian'}, {code: 'pl', name: 'Polish'}, + {code: 'pt', name: 'Portuguese'}, {code: 'ro', name: 'Romanian'}, {code: 'ru', name: 'Russian'}, + {code: 'es', name: 'Spanish'}, {code: 'tr', name: 'Turkish'}, {code: 'uk', name: 'Ukrainian'} ], diff --git a/app/package.json b/app/package.json index 1d659ff..37148d6 100644 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "freezer", "private": true, - "version": "1.1.2", + "version": "1.1.3", "description": "", "main": "background.js", "scripts": { diff --git a/package.json b/package.json index 8be4bbe..a87912c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "freezer", "private": true, - "version": "1.1.2", + "version": "1.1.3", "description": "", "scripts": { "pack": "electron-builder --dir",