diff --git a/org.kde.elisa.appdata.xml b/org.kde.elisa.appdata.xml index 3c40f1a1..f459f749 100644 --- a/org.kde.elisa.appdata.xml +++ b/org.kde.elisa.appdata.xml @@ -1,163 +1,163 @@ org.kde.elisa.desktop CC0-1.0 LGPL-3.0 Elisa إليسّا Elisa Elisa Elisa Elisa Elisa Elisa Elisa Elisa Elisa Elisa Elisa Elisa Elisa Elisa Elisa Elisa Elisa Elisa Elisa Elisa Elisa Elisa Elisa Elisa Elisa Elisa Elisa Elisa Elisa xxElisaxx Elisa Elisa Simple Music Player مشغّل موسيقى بسيط Reproductor de música senzill Reproductor de música senzill Jednoduchý přehrávač hudby Simpel musikafspiller Einfache Medienwiedergabe Απλή συσκευή αναπαραγωγής μουσικής Simple Music Player Reproductor de música sencillo Lihtne muusikamängija Musika jotzaile erraza Yksinkertainen musiikkisoitin Lecteur de musique simple Reprodutor de música simple Egyszerű zenelejátszó Simple Reproductor de musica Pemutar Musik yang Sederhana Semplice lettore musicale 간편한 음악 재생기 Paprastas muzikos grotuvas Eenvoudige muziekspeler Enkel musikkspelar Prosty odtwarzacz multimediów Leitor de Música Simples Reprodutor de músicas simples Простой музыкальный проигрыватель Jednoduchý hudobný prehliadač Enkel musikspelare Basit Müzik Çalar Простий музичний програвач xxSimple Music Playerxx 简单的音乐播放器 簡易音樂播放器

A simple music player that should be easy to use. It does not require any configuration before one can use it.

مشغّل موسيقى بسيط سهل الاستخدام. لا يحتاج منك ضبطه قبل أن تستخدمه.

Un reproductor de música senzill que hauria de ser fàcil d'utilitzar. No requereix cap configuració abans de poder utilitzar-lo.

Un reproductor de música senzill que hauria de ser fàcil d'utilitzar. No requereix cap configuració abans de poder utilitzar-lo.

Jednoduchý snadno použitelný přehrávač hudby, Před použitím nevyžaduje jakékoliv nastavovaní.

En simpel musikafspiller der burde være let af bruge. Den kræver ikke nogen konfiguration inden den kan bruges.

Ein einfacher Medienspieler, der leicht zu benutzen sein sollte. Er kann ganz ohne vorherige Konfiguration verwendet werden.

Μια απλή συσκευή αναπαραγωγής μουσικής, ευκολης στη χρήση. Δεν απαιτεί κάποια διαμόρφωση πριν τη χρήση της.

A simple music player that should be easy to use. It does not require any configuration before one can use it.

Un sencillo reproductor de música que debería ser fácil de usar. No necesita ninguna configuración antes de poder usarlo.

Lihtne, hõlpsasti kasutatav muusikamängija. See ei nõua enne kasutamist mingit erilisemat seadistamist.

Erabiltzeko erraza izan beharko litzatekeen musika jotzaile bat. Ez du konfiguraziorik behar erabiltzen hasi aurretik.

Yksinkertainen musiikkisoitin, jota tulisi olla helppo käyttää. Ei vaadi asettamista ennen käyttöä.

Un lecteur de musique simple qui se veut facile à utiliser. Il ne requiert aucune configuration pour pouvoir être utilisé.

Un reprodutor de música simple e fácil de usar. Non require ningún tipo de configuración inicial.

Egy egyszerű zenelejátszó, amely könnyen használható. Nem igényel semmilyen beállítást használat előtt.

Un simple reproductor de musica que deberea esser facile de usar. Illo non require ulle configuration ante que un pote usar lo.

Sebuah pemutar musik sederhana yang seharusnya mudah digunakan. Yang tidak memerlukan konfigurasi apa pun sebelum seseorang bisa menggunakannya.

Un semplice lettore musicale che dovrebbe essere semplice da usare. Non richiede alcuna configurazione per iniziare a usarlo.

사용하기 쉬운 간편한 음악 재생기. 먼저 설정하지 않아도 사용할 수 있습니다.

Paprastas muzikos grotuvas, kurį turėtų būti lengva naudoti. Prieš pradedant juo naudojantis, nereikalinga jokia konfigūracija.

Eenvoudige muziekspeler die gemakkelijk te gebruiken is. Het vereist geen enkele configuratie om te gebruiken.

Ein enkel og brukarvennleg musikkspelar. Kan takast i bruk med ein gong, utan noko oppsettprosedyre.

Prosty odtwarzacz multimedióm, który powinien być łatwy w obsłudze. Nie wymaga żadnych ustawień do jego używania.

Um leitor de música simples que deveria ser simples de usar. Não necessita de nenhuma configuração antes de poder ser usado.

Um reprodutor de músicas simples que deve ser fácil de usar. Não requer qualquer configuração antes de usá-lo.

Простой в использовании проигрыватель музыки. Для использования не требуется предварительной настройки.

Jednoduchý hudobný prehliadač, ktorý by malo byť jednoduché používať. Nevyžaduje žiadne nastavenie pred použitím.

En enkel musikspelare som ska vara lättanvänd. Den kräver inga inställningar innan man kan använda den.

Kullanımı kolay basit bir müzik çalar. Kullanmadan önce herhangi bir yapılandırma gerektirmez.

Простий у користуванні музичний програвач. Не потребує налаштовування перед користуванням.

xxA simple music player that should be easy to use. It does not require any configuration before one can use it.xx

一个简单易用的音乐播放器,不需要任何配置就能够使用。

一款或許易用的簡易音樂播放器,使用前不須任何設定。

https://community.kde.org/Elisa https://bugs.kde.org/enter_bug.cgi?product=elisa https://www.kde.org/community/donations https://docs.kde.org/?application=elisa The Elisa music player مشغّل الموسيقى إليسّا El reproductor de música Elisa El reproductor de música Elisa Přehrávač hudby Elisa Elisa-musikafspilleren Elisa-Musikwiedergabe Η συσκευή αναπαραγωγής μoυσικής Elisa The Elisa music player El reproductor de música Elisa Muusikamängija Elisa Elisa musika jotzailea Elisa-musiikkisoitin Le lecteur de musique Elisa O reprodutor de música Elisa. Elisa zenelejátszó Le reproductor de music Elisa Elisa si pemutar musik Il lettore musicale Elisa Elisa 음악 재생기 Elisa muzikos grotuvas De muziekspeler Elisa Musikkspelaren Elisa Odtwarzacz muzyki Elisa O leitor de música Elisa O reprodutor de músicas Elisa Музыкальный проигрыватель Elisa Hudobný prehrávač Elisa Elisa musikspelare Музичний програвач Elisa xxThe Elisa music playerxx Elisa 音乐播放器 Elisa 音樂播放器 https://cdn.kde.org/screenshots/elisa/elisa.png elisa KDE + -
diff --git a/src/qml/MediaPlayListView.qml b/src/qml/MediaPlayListView.qml index bc0b850b..61d223cf 100644 --- a/src/qml/MediaPlayListView.qml +++ b/src/qml/MediaPlayListView.qml @@ -1,319 +1,319 @@ /* * Copyright 2016-2017 Matthieu Gallien * Copyright 2019 Nate Graham * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . */ import QtQuick 2.5 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.1 import QtQuick.Window 2.2 import Qt.labs.platform 1.0 as PlatformDialog import org.kde.kirigami 2.5 as Kirigami import org.kde.elisa 1.0 FocusScope { property StackView parentStackView property int placeholderHeight: elisaTheme.dragDropPlaceholderHeight signal startPlayback() signal pausePlayback() function showPlayListNotification(message, type, action) { if (!message) { return; } if (type) { playListNotification.type = type; } else { playListNotification.type = Kirigami.MessageType.Information; } if (action) { playListNotification.actions = action; } else { playListNotification.actions = []; } playListNotification.text = message ? message : ""; playListNotification.visible = true; } function hideNotification() { playListNotification.visible = false; } Kirigami.Action { id: undoAction text: i18nc("Undo", "Undo") icon.name: "dialog-cancel" onTriggered: elisa.mediaPlayListProxyModel.undoClearPlayList() } Kirigami.Action { id: retryLoadAction text: i18nc("Retry", "Retry") icon.name: "edit-redo" onTriggered: loadPlaylistButton.clicked() } Kirigami.Action { id: retrySaveAction text: i18nc("Retry", "Retry") icon.name: "edit-redo" onTriggered: savePlaylistButton.clicked() } Connections { target: elisa.mediaPlayListProxyModel onPlayListLoadFailed: { showPlayListNotification(i18nc("Message when playlist load failed", "Loading failed"), Kirigami.MessageType.Error, retryLoadAction) } } Connections { target: elisa.mediaPlayListProxyModel onDisplayUndoNotification: { showPlayListNotification(i18nc("Playlist cleared", "Playlist cleared"), Kirigami.MessageType.Information, undoAction) } } Connections { target: elisa.mediaPlayListProxyModel onHideUndoNotification: hideNotification() } id: topItem Accessible.role: Accessible.Pane Accessible.name: viewTitle.text PlatformDialog.FileDialog { id: fileDialog defaultSuffix: 'm3u' folder: PlatformDialog.StandardPaths.writableLocation(PlatformDialog.StandardPaths.MusicLocation) nameFilters: [i18nc("file type (mime type) for m3u playlist", "Playlist (*.m3u)")] onAccepted: { if (fileMode === PlatformDialog.FileDialog.SaveFile) { if (!elisa.mediaPlayListProxyModel.savePlayList(fileDialog.file)) { showPlayListNotification(i18nc("Message when saving a playlist failed", "Saving failed"), Kirigami.MessageType.Error, retrySaveAction) } } else { elisa.mediaPlayListProxyModel.loadPlayList(fileDialog.file) } } } ColumnLayout { anchors.fill: parent spacing: 0 // Header with title and toolbar buttons HeaderFooterToolbar { type: "header" contentItems: [ // Header title LabelWithToolTip { id: viewTitle Layout.fillWidth: true text: i18nc("Title of the view of the playlist", "Playlist") level: 1 Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter }, // Toolbar buttons FlatButtonWithToolTip { text: i18nc("Show currently played track inside playlist", "Show Current Track") icon.name: 'media-show-active-track-amarok' enabled: elisa.mediaPlayListProxyModel ? elisa.mediaPlayListProxyModel.tracksCount > 0 : false onClicked: { playListView.positionViewAtIndex(elisa.mediaPlayListProxyModel.currentTrackRow, ListView.Contain) playListView.currentIndex = elisa.mediaPlayListProxyModel.currentTrackRow playListView.currentItem.forceActiveFocus() } }, FlatButtonWithToolTip { id: savePlaylistButton text: i18nc("Save a playlist file", "Save Playlist...") icon.name: 'document-save' enabled: elisa.mediaPlayListProxyModel ? elisa.mediaPlayListProxyModel.tracksCount > 0 : false onClicked: { fileDialog.fileMode = PlatformDialog.FileDialog.SaveFile fileDialog.file = '' fileDialog.open() } }, FlatButtonWithToolTip { id: loadPlaylistButton text: i18nc("Load a playlist file", "Load Playlist...") icon.name: 'document-open' onClicked: { fileDialog.fileMode = PlatformDialog.FileDialog.OpenFile fileDialog.file = '' fileDialog.open() } }, FlatButtonWithToolTip { text: i18nc("Remove all tracks from play list", "Clear Playlist") icon.name: 'edit-clear-all' enabled: elisa.mediaPlayListProxyModel ? elisa.mediaPlayListProxyModel.tracksCount > 0 : false onClicked: elisa.mediaPlayListProxyModel.clearPlayList() } ] } ColumnLayout { id: emptyPlaylistText spacing: 0 visible: true Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter Layout.fillHeight: true Layout.fillWidth: true Item { id: emptyVisible visible: elisa.mediaPlayListProxyModel ? elisa.mediaPlayListProxyModel.tracksCount === 0 : true - Layout.preferredHeight: (emptyPlaylistText.height-emptyImage.height-emptyLabel0.height-emptyLabel1.height)/2 + Layout.fillHeight: true } Image { id: emptyImage visible: emptyVisible.visible Layout.alignment: Qt.AlignHCenter width: elisaTheme.gridDelegateSize height: elisaTheme.gridDelegateSize source: elisaTheme.playlistIcon opacity: 0.25 sourceSize { width: elisaTheme.gridDelegateSize height: elisaTheme.gridDelegateSize } } LabelWithToolTip { id: emptyLabel0 visible: emptyVisible.visible Layout.fillWidth: true Layout.alignment: Qt.AlignHCenter Layout.rightMargin: Kirigami.Units.largeSpacing Layout.leftMargin: Kirigami.Units.largeSpacing level: 1 wrapMode: Text.WordWrap horizontalAlignment: Text.AlignHCenter text: i18nc("Your playlist is empty", "Your playlist is empty") } Label { id: emptyLabel1 visible: emptyVisible.visible Layout.topMargin: Kirigami.Units.largeSpacing Layout.fillWidth: true Layout.alignment: Qt.AlignHCenter Layout.rightMargin: Kirigami.Units.largeSpacing Layout.leftMargin: Kirigami.Units.largeSpacing wrapMode: Text.WordWrap horizontalAlignment: Text.AlignHCenter text: i18nc("Text shown when play list is empty", "Add some songs to get started. You can browse your music using the views on the left.") } Item { visible: emptyVisible.visible Layout.fillHeight: true } PlayListBasicView { id: playListView visible: !emptyVisible.visible Layout.fillWidth: true Layout.fillHeight: true title: viewTitle.text playListModel: elisa.mediaPlayListProxyModel focus: true onStartPlayback: topItem.startPlayback() onPausePlayback: topItem.pausePlayback() onDisplayError: showPlayListNotification(errorText, Kirigami.MessageType.Error) } Kirigami.InlineMessage { id: playListNotification Timer { id: autoHideNotificationTimer interval: 7000 onTriggered: playListNotification.visible = false } type: Kirigami.MessageType.Information showCloseButton: true Layout.topMargin: Kirigami.Units.largeSpacing Layout.fillWidth: true Layout.rightMargin: Kirigami.Units.largeSpacing Layout.leftMargin: Kirigami.Units.largeSpacing onVisibleChanged: { if (visible) { autoHideNotificationTimer.start() } else { autoHideNotificationTimer.stop() } } } } // Footer with number of tracks label HeaderFooterToolbar { type: "footer" contentItems: [ LabelWithToolTip { id: trackCountLabel Layout.fillWidth: true text: i18np("1 track", "%1 tracks", (elisa.mediaPlayListProxyModel ? elisa.mediaPlayListProxyModel.tracksCount : 0)) elide: Text.ElideLeft } ] } } }