diff -Nru deepin-music-5.0.1+ds/debian/changelog deepin-music-6.0.1.54+ds.1/debian/changelog --- deepin-music-5.0.1+ds/debian/changelog 2020-07-28 16:11:42.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/debian/changelog 2020-12-23 18:26:02.000000000 +0000 @@ -1,8 +1,37 @@ -deepin-music (5.0.1+ds-2build1) groovy; urgency=medium +deepin-music (6.0.1.54+ds.1-2) unstable; urgency=medium - * No-change rebuild against libicu67 + * debian/control: + + Drop gstreamer1.0-fluendo-mp3 from binary package dependency. + + -- Arun Kumar Pariyar Thu, 24 Dec 2020 00:11:02 +0545 + +deepin-music (6.0.1.54+ds.1-1) unstable; urgency=medium + + [ Debian Janitor ] + * Trim trailing whitespace. + * Set upstream metadata fields: Bug-Database, Bug-Submit, + Repository and Repository-Browse. + + [ Arun Kumar Pariyar ] + * New upstream release 6.0.1.54+ds.1. + * debian/control: + + Bump debhelper compat to v13. + + Bump Standards-Version to 4.5.1. + + Update build dependencies and set libdtkwidget-dev to (>= 5.2~). + + Replace gvfs-bin with libglib2.0-bin. + + Add Arun Kumar Pariyar to Uploaders. + * debian/patches: + + Update 0001-Use-system-library.patch. + + Add patch to fix build with Qt5.15+ (Closes: #975140). + + Add patch to switch from gvfs-trash to gio (Closes: #969771). + * debian/copyright: Update license information. + * debian/rules: + + Removed -Wl,--as-needed from DEB_LDFLAGS_MAINT_APPEND. + + Updated cleanup path for translations in override_dh_auto_clean. + * debian/lintian-overrides: Tag rename on-dev-pkg-with-shlib-symlink + to link-to-shared-library-in-wrong-package for deepin-music binary. - -- Steve Langasek Tue, 28 Jul 2020 16:11:42 +0000 + -- Arun Kumar Pariyar Sat, 05 Dec 2020 01:37:32 +0545 deepin-music (5.0.1+ds-2) unstable; urgency=high @@ -16,7 +45,7 @@ deepin-music (5.0.1+ds-1) unstable; urgency=medium * Team upload. - * New upstream release 5.0.1. + * New upstream release 5.0.1. * debian/control: + Bump debhelper compat to v12. + Bump Standards-Version to 4.4.1. diff -Nru deepin-music-5.0.1+ds/debian/control deepin-music-6.0.1.54+ds.1/debian/control --- deepin-music-5.0.1+ds/debian/control 2020-07-28 16:11:42.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/debian/control 2020-12-23 18:26:02.000000000 +0000 @@ -1,28 +1,32 @@ Source: deepin-music Section: sound Priority: optional -Maintainer: Ubuntu Developers -XSBC-Original-Maintainer: Debian Deepin Packaging Team +Maintainer: Debian Deepin Packaging Team Uploaders: Yanhao Mo , + Arun Kumar Pariyar , Build-Depends: - debhelper-compat (= 12), - git, + debhelper-compat (= 13), libavcodec-dev, libavformat-dev, libavutil-dev, libcue-dev, libdbusextended-qt5-dev, - libdtkwidget-dev (>= 2.0.9.10~), + libdtkgui-dev, + libdtkwidget-dev (>= 5.2~), libicu-dev, + libkf5codecs-dev, libmpris-qt5-dev, libqt5svg5-dev, libtag1-dev, + libvlc-dev, + libvlccore-dev, pkg-config, + python3, qtmultimedia5-dev, qttools5-dev-tools, Rules-Requires-Root: no -Standards-Version: 4.5.0 +Standards-Version: 4.5.1 Homepage: https://github.com/linuxdeepin/deepin-music Vcs-Git: https://salsa.debian.org/pkg-deepin-team/deepin-music.git Vcs-Browser: https://salsa.debian.org/pkg-deepin-team/deepin-music @@ -36,13 +40,15 @@ gstreamer1.0-plugins-good, gstreamer1.0-plugins-ugly, gstreamer1.0-pulseaudio, + libglib2.0-bin, libqt5multimedia5-plugins, libqt5sql5-sqlite, + vlc-plugin-base, ${misc:Depends}, ${shlibs:Depends}, Description: music player with brilliant and tweakful UI Deepin-UI based, GStreamer front-end, with features likes search music - by pinyin,quanpin, colorful lyrics supports, and more powerful + by pinyin, quanpin, colorful lyrics supports, and more powerful functions you will found. . This package is part of DDE (Deepin Desktop Environment). diff -Nru deepin-music-5.0.1+ds/debian/copyright deepin-music-6.0.1.54+ds.1/debian/copyright --- deepin-music-5.0.1+ds/debian/copyright 2020-01-17 19:42:21.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/debian/copyright 2020-12-23 18:26:02.000000000 +0000 @@ -1,15 +1,31 @@ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: deepin-music Source: https://github.com/linuxdeepin/deepin-music -Files-Excluded: vendor/* +Upstream-Contact: https://github.com/linuxdeepin/deepin-music/issues +Files-Excluded: src/vendor/* Files: * -Copyright: 2016-2017 Deepin Technology Co., Ltd. +Copyright: 2016-2018, Deepin Technology Co., Ltd. + 2016-2018, Wuhan Deepin Technology Co., Ltd. + 2020, chengdu Deepin Technology Co., Ltd. + 2011-2018, Wang Yong + 2011-2018, Deepin, Inc License: GPL-3+ +Files: src/music-player/core/vlc/Equalizer.cpp + src/music-player/core/vlc/Equalizer.h + src/music-player/core/vlc/SharedExportCore.h +Copyright: 2012, Tadej Novak +License: LGPL-3+ + +Files: src/music-player/view/widget/tooltips.cpp +Copyright: 2017, Deepin Technology Co., Ltd +License: GPL-3+ with OpenSSL exception + Files: debian/* -Copyright: 2016-2017 Deepin Technology Co., Ltd. - 2018 Yanhao Mo +Copyright: 2016-2017, Deepin Technology Co., Ltd. + 2018, Yanhao Mo + 2020, Arun Kumar Pariyar License: GPL-3+ License: GPL-3+ @@ -28,3 +44,48 @@ . On Debian systems, the complete text of the GNU General Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". + +License: LGPL-3+ + This package 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 package 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 package; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + . + On Debian systems, the complete text of the GNU Lesser General + Public License can be found in `/usr/share/common-licenses/LGPL-3'. + +License: GPL-3+ with OpenSSL exception + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + . + In addition, as a special exception, the author of this program gives + permission to link the code of its release with the OpenSSL project's + "OpenSSL" library (or with modified versions of it that use the same + license as the "OpenSSL" library), and distribute the linked executables. + You must obey the GNU General Public License in all respects for all + of the code used other than "OpenSSL". If you modify this file, you + may extend this exception to your version of the file, but you are + not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + . + This package 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 General Public License for more details. + . + You should have received a copy of the GNU General Public License + along with this program. If not, see . + . + On Debian systems, the complete text of the GNU General + Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". diff -Nru deepin-music-5.0.1+ds/debian/lintian-overrides deepin-music-6.0.1.54+ds.1/debian/lintian-overrides --- deepin-music-5.0.1+ds/debian/lintian-overrides 2020-01-17 19:42:21.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/debian/lintian-overrides 2020-12-23 18:26:02.000000000 +0000 @@ -2,4 +2,4 @@ # as it is only useful for deepin-music. deepin-music binary: package-name-doesnt-match-sonames libdmusic1 -deepin-music binary: non-dev-pkg-with-shlib-symlink usr/lib/libdmusic.so.1.0.0 usr/lib/libdmusic.so +deepin-music binary: link-to-shared-library-in-wrong-package usr/lib/libdmusic.so.1.0.0 usr/lib/libdmusic.so diff -Nru deepin-music-5.0.1+ds/debian/patches/0001-Use-system-library.patch deepin-music-6.0.1.54+ds.1/debian/patches/0001-Use-system-library.patch --- deepin-music-5.0.1+ds/debian/patches/0001-Use-system-library.patch 2020-01-17 19:42:38.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/debian/patches/0001-Use-system-library.patch 2020-12-23 18:26:02.000000000 +0000 @@ -1,6 +1,7 @@ From: Boyuan Yang Date: Mon, 10 Dec 2018 14:07:34 -0500 Subject: Use system library +Last-Update: 2020-07-02 --- src/music-player/build.pri | 8 ++++---- @@ -8,7 +9,7 @@ 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/music-player/build.pri b/src/music-player/build.pri -index 3ce532b..0fcfa4e 100644 +index 3ce532bf..0fcfa4e8 100644 --- a/src/music-player/build.pri +++ b/src/music-player/build.pri @@ -58,10 +58,10 @@ DEPENDPATH += $$PWD/../libdmusic @@ -27,12 +28,12 @@ +INCLUDEPATH += $$[QT_INSTALL_HEADERS]/MprisQt +DEPENDPATH += $$[QT_INSTALL_HEADERS]/MprisQt diff --git a/src/src.pro b/src/src.pro -index 0ca6556..9158660 100644 +index 8b988b20..ac06bfc2 100644 --- a/src/src.pro +++ b/src/src.pro -@@ -1,7 +1,7 @@ - TEMPLATE = subdirs - CONFIG = ordered +@@ -5,7 +5,7 @@ isEmpty(PREFIX){ + PREFIX = /usr + } -SUBDIRS += vendor +;SUBDIRS += vendor diff -Nru deepin-music-5.0.1+ds/debian/patches/0003-Fix-build-with-Qt5.15.patch deepin-music-6.0.1.54+ds.1/debian/patches/0003-Fix-build-with-Qt5.15.patch --- deepin-music-5.0.1+ds/debian/patches/0003-Fix-build-with-Qt5.15.patch 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/debian/patches/0003-Fix-build-with-Qt5.15.patch 2020-12-23 18:26:02.000000000 +0000 @@ -0,0 +1,156 @@ +From 6d360f713df58c4946142a425d8dc2ed760bd506 Mon Sep 17 00:00:00 2001 +From: Arun Kumar Pariyar +Date: Thu, 3 Dec 2020 02:28:43 +0545 +Subject: [PATCH] Fix build with Qt5.15+ + +--- + src/music-player/view/lyricwidget.cpp | 2 +- + src/music-player/view/widget/cover.cpp | 1 + + src/music-player/view/widget/delegate/musiclistdatadelegate.cpp | 1 + + .../view/widget/delegate/musicsearchlistdelegate.cpp | 1 + + src/music-player/view/widget/delegate/playitemdelegate.cpp | 1 + + src/music-player/view/widget/musicpixmapbutton.cpp | 1 + + src/music-player/view/widget/musictitleimage.cpp | 1 + + src/music-player/view/widget/soundvolume.cpp | 1 + + src/music-player/view/widget/tooltips.cpp | 1 + + src/music-player/view/widget/waveform.cpp | 1 + + src/music-player/view/widget/waveformscale.cpp | 2 +- + 11 files changed, 11 insertions(+), 2 deletions(-) + +diff --git a/src/music-player/view/lyricwidget.cpp b/src/music-player/view/lyricwidget.cpp +index 2d1093de..d99bc67f 100644 +--- a/src/music-player/view/lyricwidget.cpp ++++ b/src/music-player/view/lyricwidget.cpp +@@ -30,7 +30,7 @@ + #include + #include + #include +- ++#include + #include + #include + #include +diff --git a/src/music-player/view/widget/cover.cpp b/src/music-player/view/widget/cover.cpp +index 59d5497e..18634267 100644 +--- a/src/music-player/view/widget/cover.cpp ++++ b/src/music-player/view/widget/cover.cpp +@@ -24,6 +24,7 @@ + #include + #include + #include ++#include + + static auto borderPenWidth = 1.0; + +diff --git a/src/music-player/view/widget/delegate/musiclistdatadelegate.cpp b/src/music-player/view/widget/delegate/musiclistdatadelegate.cpp +index 24e666d8..f7bbc7be 100644 +--- a/src/music-player/view/widget/delegate/musiclistdatadelegate.cpp ++++ b/src/music-player/view/widget/delegate/musiclistdatadelegate.cpp +@@ -26,6 +26,7 @@ + #include + #include + #include ++#include + + #include + +diff --git a/src/music-player/view/widget/delegate/musicsearchlistdelegate.cpp b/src/music-player/view/widget/delegate/musicsearchlistdelegate.cpp +index f1a25495..8d4bf345 100755 +--- a/src/music-player/view/widget/delegate/musicsearchlistdelegate.cpp ++++ b/src/music-player/view/widget/delegate/musicsearchlistdelegate.cpp +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + #include + #include + #include +diff --git a/src/music-player/view/widget/delegate/playitemdelegate.cpp b/src/music-player/view/widget/delegate/playitemdelegate.cpp +index 01d00998..79d3a532 100644 +--- a/src/music-player/view/widget/delegate/playitemdelegate.cpp ++++ b/src/music-player/view/widget/delegate/playitemdelegate.cpp +@@ -26,6 +26,7 @@ + #include + #include + #include ++#include + + #include + +diff --git a/src/music-player/view/widget/musicpixmapbutton.cpp b/src/music-player/view/widget/musicpixmapbutton.cpp +index c591ce65..ef14b03d 100644 +--- a/src/music-player/view/widget/musicpixmapbutton.cpp ++++ b/src/music-player/view/widget/musicpixmapbutton.cpp +@@ -24,6 +24,7 @@ + #include + #include + #include ++#include + + MusicPixmapButton::MusicPixmapButton(QWidget *parent) + : DPushButton(parent) +diff --git a/src/music-player/view/widget/musictitleimage.cpp b/src/music-player/view/widget/musictitleimage.cpp +index 577484cd..16c2e051 100644 +--- a/src/music-player/view/widget/musictitleimage.cpp ++++ b/src/music-player/view/widget/musictitleimage.cpp +@@ -22,6 +22,7 @@ + #include "musictitleimage.h" + + #include ++#include + + MusicTitleImageWidget::MusicTitleImageWidget(QWidget *parent) + : DWidget( parent) +diff --git a/src/music-player/view/widget/soundvolume.cpp b/src/music-player/view/widget/soundvolume.cpp +index 79507306..4bd79e4e 100644 +--- a/src/music-player/view/widget/soundvolume.cpp ++++ b/src/music-player/view/widget/soundvolume.cpp +@@ -32,6 +32,7 @@ + #include + #include + #include ++#include + + #include "core/player.h" + +diff --git a/src/music-player/view/widget/tooltips.cpp b/src/music-player/view/widget/tooltips.cpp +index 02c6da8b..c30013a4 100644 +--- a/src/music-player/view/widget/tooltips.cpp ++++ b/src/music-player/view/widget/tooltips.cpp +@@ -36,6 +36,7 @@ + #include + #include + #include ++#include + + #include + #include +diff --git a/src/music-player/view/widget/waveform.cpp b/src/music-player/view/widget/waveform.cpp +index 2003bd73..cd0dab29 100644 +--- a/src/music-player/view/widget/waveform.cpp ++++ b/src/music-player/view/widget/waveform.cpp +@@ -29,6 +29,7 @@ + #include + #include + #include ++#include + + #include "waveform.h" + #include "waveformscale.h" +diff --git a/src/music-player/view/widget/waveformscale.cpp b/src/music-player/view/widget/waveformscale.cpp +index 93ab3004..22204263 100755 +--- a/src/music-player/view/widget/waveformscale.cpp ++++ b/src/music-player/view/widget/waveformscale.cpp +@@ -27,7 +27,7 @@ + #include + #include + #include +- ++#include + #include + + const int WaveformScale::WAVE_WIDTH = 2; +-- +2.27.0 + diff -Nru deepin-music-5.0.1+ds/debian/patches/0004-switch-from-gvfs-trash-to-gio.patch deepin-music-6.0.1.54+ds.1/debian/patches/0004-switch-from-gvfs-trash-to-gio.patch --- deepin-music-5.0.1+ds/debian/patches/0004-switch-from-gvfs-trash-to-gio.patch 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/debian/patches/0004-switch-from-gvfs-trash-to-gio.patch 2020-12-23 18:26:02.000000000 +0000 @@ -0,0 +1,23 @@ +From: Arun Kumar Pariyar +Date: Fri, 4 Dec 2020 21:01:23 +0545 +Subject: [PATCH] Switch from gvfs-trash to gio. + +--- + src/music-player/presenter/presenter.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: deepin-music/src/music-player/presenter/presenter.cpp +=================================================================== +--- deepin-music.orig/src/music-player/presenter/presenter.cpp ++++ deepin-music/src/music-player/presenter/presenter.cpp +@@ -1072,7 +1072,9 @@ void Presenter::onMusiclistDelete(Playli + if (!qEnvironmentVariableIsEmpty("FLATPAK_APPID")) { + Dtk::Widget::DDesktopServices::trash(trashFiles.keys()); + } else { +- QProcess::startDetached("gvfs-trash", trashFiles.keys()); ++ QStringList args; ++ args << QStringLiteral("trash") << trashFiles.keys(); ++ QProcess::startDetached("gio", args); + } + + d->library->removeMediaMetaList(metalist); diff -Nru deepin-music-5.0.1+ds/debian/patches/series deepin-music-6.0.1.54+ds.1/debian/patches/series --- deepin-music-5.0.1+ds/debian/patches/series 2020-01-17 19:42:38.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/debian/patches/series 2020-12-23 18:26:02.000000000 +0000 @@ -1,2 +1,4 @@ 0001-Use-system-library.patch 0002-prevent-usr-share-dman-from-being-installed.patch +0003-Fix-build-with-Qt5.15.patch +0004-switch-from-gvfs-trash-to-gio.patch diff -Nru deepin-music-5.0.1+ds/debian/rules deepin-music-6.0.1.54+ds.1/debian/rules --- deepin-music-5.0.1+ds/debian/rules 2020-01-17 19:42:21.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/debian/rules 2020-12-23 18:26:02.000000000 +0000 @@ -8,8 +8,6 @@ # see ENVIRONMENT in dpkg-buildflags(1) # package maintainers to append CFLAGS export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic -# package maintainers to append LDFLAGS -export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed export QT_SELECT := 5 @@ -19,11 +17,11 @@ dh $@ override_dh_auto_configure: - dh_auto_configure -- DEFINES+="VERSION=$(DEB_VERSION)" + dh_auto_configure -- DEFINES+="VERSION=$(DEB_VERSION_UPSTREAM)" override_dh_auto_clean: dh_auto_clean - rm -vf music-player/translations/*.qm + rm -vf src/music-player/translations/*.qm override_dh_missing: dh_missing --fail-missing diff -Nru deepin-music-5.0.1+ds/debian/upstream/metadata deepin-music-6.0.1.54+ds.1/debian/upstream/metadata --- deepin-music-5.0.1+ds/debian/upstream/metadata 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/debian/upstream/metadata 2020-12-23 18:26:02.000000000 +0000 @@ -0,0 +1,4 @@ +Bug-Database: https://github.com/linuxdeepin/deepin-music/issues +Bug-Submit: https://github.com/linuxdeepin/deepin-music/issues/new +Repository: https://github.com/linuxdeepin/deepin-music.git +Repository-Browse: https://github.com/linuxdeepin/deepin-music diff -Nru deepin-music-5.0.1+ds/deepin-music.pro deepin-music-6.0.1.54+ds.1/deepin-music.pro --- deepin-music-5.0.1+ds/deepin-music.pro 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/deepin-music.pro 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -TEMPLATE = subdirs -CONFIG = ordered -SUBDIRS += src diff -Nru deepin-music-5.0.1+ds/.gitignore deepin-music-6.0.1.54+ds.1/.gitignore --- deepin-music-5.0.1+ds/.gitignore 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/.gitignore 2020-07-14 12:05:00.000000000 +0000 @@ -7,7 +7,7 @@ *INFO# *.sw* *.user -build/ *.qm +build/ dist/ .vscode diff -Nru deepin-music-5.0.1+ds/music.pro deepin-music-6.0.1.54+ds.1/music.pro --- deepin-music-5.0.1+ds/music.pro 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/music.pro 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,3 @@ +TEMPLATE = subdirs +CONFIG = ordered +SUBDIRS += src diff -Nru deepin-music-5.0.1+ds/README.md deepin-music-6.0.1.54+ds.1/README.md --- deepin-music-5.0.1+ds/README.md 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/README.md 2020-07-14 12:05:00.000000000 +0000 @@ -1,4 +1,88 @@ -Deepin Music Player -============================= +### deepin-music -A simple player for you. +Deepin music is a local music player with beautiful design and simple functions developed by Deepin Technology. + +### Dependencies + +### Build dependencies + +_The **master** branch is current development branch, build dependencies may changes without update README.md, refer to `./debian/control` for a working build depends list_ + +* pkg-config +* libtag1-dev +* libicu-dev +* libcue-dev +* libtag1-dev +* libavutil-dev +* libavcodec-dev +* libavformat-dev +* libdtkcore-dev +* libdtkgui-dev +* Qt5(>= 5.6) with modules: + - qt5-qmake + - libqt5svg5-dev + - qttools5-dev-tools + - qtmultimedia5-dev + - libkf5codecs-dev +* Deepin-tool-kit(>=2.0) with modules: + - libdtkwidget-dev + +## Installation + +### Build from source code + +1. Make sure you have installed all dependencies. + +_Package name may be different between distros, if deepin-music is available from your distro, check the packaging script delivered from your distro is a better idea._ + +Assume you are using [Deepin](https://distrowatch.com/table.php?distribution=deepin) or other debian-based distro which got deepin-music delivered: + +``` shell +$ apt build-dep deepin-music +``` + +2. Build: + +``` +$ cd deepin-music +$ mkdir Build +$ cd Build +$ qmake .. +$ make +``` + +3. Install: + +``` +$ sudo make install +``` + +The executable binary file could be found at `/usr/bin/deepin-music` + +## Usage + +Execute `deepin-music` + +## Documentations + + - [Development Documentation](https://linuxdeepin.github.io/) + - [User Documentation](https://wikidev.uniontech.com/index.php?title=音乐) | [用户文档](https://wikidev.uniontech.com/index.php?title=音乐) + +## Getting help + + - [Official Forum](https://bbs.deepin.org/) + - [Developer Center](https://github.com/linuxdeepin/developer-center) + - [Gitter](https://gitter.im/orgs/linuxdeepin/rooms) + - [IRC Channel](https://webchat.freenode.net/?channels=deepin) + - [Wiki](https://wiki.deepin.org/) + +## Getting involved + +We encourage you to report issues and contribute changes + + - [Contribution guide for developers](https://github.com/linuxdeepin/developer-center/wiki/Contribution-Guidelines-for-Developers-en) (English) + - [开发者代码贡献指南](https://github.com/linuxdeepin/developer-center/wiki/Contribution-Guidelines-for-Developers) (中文) + +## License + +deepin-music is licensed under [GPLv3](LICENSE) \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/config.pri deepin-music-6.0.1.54+ds.1/src/config.pri --- deepin-music-5.0.1+ds/src/config.pri 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/config.pri 2020-07-14 12:05:00.000000000 +0000 @@ -1,5 +1,14 @@ DEFINES += QT_MESSAGELOGCONTEXT +ARCH = $$QMAKE_HOST.arch + +message("Build arch:" $$ARCH) + +#isEqual(ARCH, x86_64) | isEqual(ARCH, i686) { +# CONFIG += ENABLE_LIBAV +#} +CONFIG += ENABLE_LIBAV + PROJECT_ROOT = $$PWD BUILD_DIST = $$PROJECT_ROOT/dist APP_TARGET = deepin-music diff -Nru deepin-music-5.0.1+ds/src/libdmusic/libdmusic.pro deepin-music-6.0.1.54+ds.1/src/libdmusic/libdmusic.pro --- deepin-music-5.0.1+ds/src/libdmusic/libdmusic.pro 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/libdmusic/libdmusic.pro 2020-07-14 12:05:00.000000000 +0000 @@ -6,9 +6,8 @@ include($$PWD/../config.pri) -QT += network -QT -= gui -QT += dtkcore +QT += network KCodecs +#QT -= gui TARGET = dmusic TEMPLATE = lib @@ -16,10 +15,18 @@ DESTDIR = $$BUILD_DIST/lib -unix { -PKGCONFIG += icu-uc icu-i18n libavutil libavformat libavcodec taglib +#unix { +PKGCONFIG += icu-uc icu-i18n taglib +QT += dtkcore + +CONFIG(ENABLE_LIBAV) { + PKGCONFIG += libavutil libavformat libavcodec +} else { + DEFINES += DISABLE_LIBAV } +#} + DEFINES += LIBDMUSIC_LIBRARY # The following define makes your compiler emit warnings if you use @@ -39,7 +46,8 @@ util/cueparser.cpp \ util/pinyinsearch.cpp \ net/geese.cpp \ - util/encodingdetector.cpp + util/encodingdetector.cpp \ + util/basetool.cpp HEADERS +=\ libdmusic_global.h \ @@ -50,7 +58,8 @@ util/pinyinsearch.h \ net/geese.h \ util/encodingdetector.h \ - playlistmeta.h + playlistmeta.h \ + util/basetool.h unix { PKGCONFIG += libcue diff -Nru deepin-music-5.0.1+ds/src/libdmusic/mediameta.cpp deepin-music-6.0.1.54+ds.1/src/libdmusic/mediameta.cpp --- deepin-music-5.0.1+ds/src/libdmusic/mediameta.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/libdmusic/mediameta.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -56,6 +56,15 @@ } } +QByteArray MediaMeta::getCoverData(const QString &tmpPath) +{ + if (!loadCover) { + coverData = MetaDetector::getCoverData(localPath, tmpPath, hash); + } + loadCover = true; + return coverData; +} + MediaMeta MediaMeta::fromLocalFile(const QFileInfo &fileInfo) { MediaMeta meta; @@ -64,8 +73,7 @@ return meta; } -namespace DMusic -{ +namespace DMusic { QString filepathHash(const QString &filepath) { return QString(QCryptographicHash::hash(filepath.toUtf8(), QCryptographicHash::Md5).toHex()); @@ -75,12 +83,16 @@ { length = length / 1000; int hour = static_cast(length / 3600); - QTime t(0, length % 3600 / 60, length % 60); + + QString mmStr = QString("%1").arg(length % 3600 / 60, 2, 10, QLatin1Char('0')); + QString ssStr = QString("%1").arg(length % 60, 2, 10, QLatin1Char('0')); + if (hour > 0) { - return QString("%1:%2").arg(hour).arg(t.toString("mm:ss")); + return QString("%1:%2:%3").arg(hour).arg(mmStr).arg(ssStr); } else { - return t.toString("mm:ss"); + return QString("%1:%2").arg(mmStr).arg(ssStr); } + } QString sizeString(qint64 sizeByte) diff -Nru deepin-music-5.0.1+ds/src/libdmusic/mediameta.h deepin-music-6.0.1.54+ds.1/src/libdmusic/mediameta.h --- deepin-music-5.0.1+ds/src/libdmusic/mediameta.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/libdmusic/mediameta.h 2020-07-14 12:05:00.000000000 +0000 @@ -40,6 +40,7 @@ QString title; QString artist; QString album; + QString lyricPath; QString pinyinTitle; QString pinyinTitleShort; @@ -51,7 +52,6 @@ QString filetype; qint64 timestamp = 0; // addTime; - qint64 offset = 0; //msec qint64 length = 1; //msec qint64 track = 0; @@ -63,12 +63,19 @@ QString searchID; QUrl coverUrl; + QByteArray coverData; + bool favourite = false; bool invalid = false; + bool loadCover = false; + + QString codec; //save codec + public: void updateSearchIndex(); void updateCodec(const QByteArray &codec); + QByteArray getCoverData(const QString &tmpPath); static MediaMeta fromLocalFile(const QFileInfo &fileInfo); }; @@ -99,8 +106,7 @@ Q_DECLARE_METATYPE(MetaPtr) Q_DECLARE_METATYPE(MetaPtrList) -namespace DMusic -{ +namespace DMusic { QString LIBDMUSICSHARED_EXPORT filepathHash(const QString &filepath); QString LIBDMUSICSHARED_EXPORT sizeString(qint64 sizeByte); diff -Nru deepin-music-5.0.1+ds/src/libdmusic/metadetector.cpp deepin-music-6.0.1.54+ds.1/src/libdmusic/metadetector.cpp --- deepin-music-5.0.1+ds/src/libdmusic/metadetector.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/libdmusic/metadetector.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -28,15 +28,21 @@ #include #include #include +#include +#include +#include +#include +//#ifndef DISABLE_LIBAV #ifdef __cplusplus extern "C" { -#endif +#endif // __cplusplus #include #include #ifdef __cplusplus } -#endif +#endif // __cplusplus +//#endif // DISABLE_LIBAV #include #include @@ -47,12 +53,15 @@ #include "util/encodingdetector.h" #include "util/cueparser.h" +#include "util/pinyinsearch.h" static QMap localeCodes; void MetaDetector::init() { +//#ifndef DISABLE_LIBAV av_register_all(); +//#endif // DISABLE_LIBAV localeCodes.insert("zh_CN", "GB18030"); } @@ -65,15 +74,15 @@ QList MetaDetector::detectEncodings(const QByteArray &rawData) { auto icuCodes = DMusic::EncodingDetector::detectEncodings(rawData); - auto localeCode = localeCodes.value(QLocale::system().name()); - - if (icuCodes.contains(localeCode)) { - icuCodes.removeAll(localeCode); - } +// auto localeCode = localeCodes.value(QLocale::system().name()); - if (!localeCode.isEmpty()) { - icuCodes.push_front(localeCode); - } +// if (icuCodes.contains(localeCode)) { +// icuCodes.removeAll(localeCode); +// } + +// if (!localeCode.isEmpty()) { +// icuCodes.push_front(localeCode); +// } return icuCodes; } @@ -119,6 +128,11 @@ return; } + TagLib::AudioProperties *t_audioProperties = f.audioProperties(); + if (t_audioProperties == nullptr) + return ; + meta->length = t_audioProperties->length() * 1000; + bool encode = true; encode &= tag->title().isNull() ? true : tag->title().isLatin1(); encode &= tag->artist().isNull() ? true : tag->artist().isLatin1(); @@ -133,17 +147,54 @@ detectByte += tag->title().toCString(); detectByte += tag->artist().toCString(); detectByte += tag->album().toCString(); - detectCodec = detectEncodings(detectByte).value(0); -// qDebug() << "detect codec" << detectEncodings(detectByte); + auto allDetectCodecs = detectEncodings(detectByte); + auto localeCode = localeCodes.value(QLocale::system().name()); + + for (auto curDetext : allDetectCodecs) { + if (curDetext == "Big5" || curDetext == localeCode) { + detectCodec = curDetext; + break; + } + } + if (detectCodec.isEmpty()) + detectCodec = allDetectCodecs.value(0); + + QString curStr = QString::fromLocal8Bit(tag->title().toCString()); + if (curStr.isEmpty()) + curStr = QString::fromLocal8Bit(tag->artist().toCString()); + if (curStr.isEmpty()) + curStr = QString::fromLocal8Bit(tag->album().toCString()); + for (auto ch : curStr) { + if (DMusic::PinyinSearch::isChinese(ch)) { + detectCodec = "GB18030"; + break; + } + } } -// qDebug() << "convert to" << detectCodec; -// QTextCodec *codec = QTextCodec::codecForName(detectCodec); -// meta->album = codec->toUnicode(tag->album().to8Bit().c_str()); -// meta->artist = codec->toUnicode(tag->artist().to8Bit().c_str()); -// meta->title = codec->toUnicode(tag->title().to8Bit().c_str()); + QString detectCodecStr(detectCodec); + if (detectCodecStr.compare("utf-8", Qt::CaseInsensitive) == 0) { + meta->album = TStringToQString(tag->album()); + meta->artist = TStringToQString(tag->artist()); + meta->title = TStringToQString(tag->title()); + meta->codec = "UTF-8"; //info codec + + + } else { + QTextCodec *codec = QTextCodec::codecForName(detectCodec); + if (codec == nullptr) { + meta->album = TStringToQString(tag->album()); + meta->artist = TStringToQString(tag->artist()); + meta->title = TStringToQString(tag->title()); + } else { + meta->album = codec->toUnicode(tag->album().toCString()); + meta->artist = codec->toUnicode(tag->artist().toCString()); + meta->title = codec->toUnicode(tag->title().toCString()); + } + meta->codec = detectCodec; + } -//#ifndef true +#ifdef true // qDebug() << "convert to" << detectCodec << QTextCodec::availableCodecs(); const size_t buflen = 1024 * 10; char buf[buflen]; @@ -162,17 +213,23 @@ meta->album = QString::fromUtf8(buf); // qDebug() << len << QString::fromUtf8(buf) << buf << u_errorName(err); Q_UNUSED(len); -//#endif +#endif } else { meta->album = TStringToQString(tag->album()); meta->artist = TStringToQString(tag->artist()); meta->title = TStringToQString(tag->title()); + meta->codec = "UTF-8"; } if (meta->title.isEmpty()) { QFileInfo localFi(meta->localPath); meta->title = localFi.completeBaseName(); } + + //empty str + meta->album = meta->album.simplified(); + meta->artist = meta->artist.simplified(); + meta->title = meta->title.simplified(); } QList MetaDetector::detectEncodings(const MetaPtr meta) @@ -215,20 +272,25 @@ return ; } meta->length = 0; - AVFormatContext *pFormatCtx = avformat_alloc_context(); - avformat_open_input(&pFormatCtx, meta->localPath.toStdString().c_str(), NULL, NULL); - if (pFormatCtx) { - avformat_find_stream_info(pFormatCtx, NULL); - int64_t duration = pFormatCtx->duration / 1000; - if (duration > 0) { - meta->length = duration; - } - } - avformat_close_input(&pFormatCtx); - avformat_free_context(pFormatCtx); updateMediaFileTagCodec(meta, "", false); + if (meta->length == 0) { + //#ifndef DISABLE_LIBAV + AVFormatContext *pFormatCtx = avformat_alloc_context(); + avformat_open_input(&pFormatCtx, meta->localPath.toStdString().c_str(), nullptr, nullptr); + if (pFormatCtx) { + avformat_find_stream_info(pFormatCtx, nullptr); + int64_t duration = pFormatCtx->duration / 1000; + if (duration > 0) { + meta->length = duration; + } + } + avformat_close_input(&pFormatCtx); + avformat_free_context(pFormatCtx); + //#endif // DISABLE_LIBAV + } + meta->size = fileInfo.size(); auto current = QDateTime::currentDateTime(); @@ -242,3 +304,134 @@ meta->updateSearchIndex(); } + +QByteArray MetaDetector::getCoverData(const QString &path, const QString &tmpPath, const QString &hash) +{ + QString imagesDirPath = tmpPath + "/images"; + QString imageName = hash + ".jpg"; + QDir imageDir(imagesDirPath); + if (!imageDir.exists()) { + imageDir.cdUp(); + imageDir.mkdir("images"); + imageDir.cd("images"); + } + + QByteArray byteArray; + if (!tmpPath.isEmpty() && !hash.isEmpty()) { + if (imageDir.exists(imageName)) { + QImage image(imagesDirPath + "/" + imageName); + if (!image.isNull()) { + QBuffer buffer(&byteArray); + buffer.open(QIODevice::WriteOnly); + image.save(&buffer, "jpg"); + } + return byteArray; + } + } + +//#ifndef DISABLE_LIBAV + if (!path.isEmpty()) { + AVFormatContext *pFormatCtx = avformat_alloc_context(); + avformat_open_input(&pFormatCtx, path.toStdString().c_str(), nullptr, nullptr); + + QImage image; + if (pFormatCtx) { + if (pFormatCtx->iformat != nullptr && pFormatCtx->iformat->read_header(pFormatCtx) >= 0) { + for (unsigned int i = 0; i < pFormatCtx->nb_streams; i++) { + if (pFormatCtx->streams[i]->disposition & AV_DISPOSITION_ATTACHED_PIC) { + AVPacket pkt = pFormatCtx->streams[i]->attached_pic; + image = QImage::fromData(static_cast(pkt.data), pkt.size); + break; + } + } + } + } + if (!image.isNull()) { + QBuffer buffer(&byteArray); + buffer.open(QIODevice::WriteOnly); + image.save(&buffer, "jpg"); + image = image.scaled(QSize(160, 160)); + image.save(imagesDirPath + "/" + imageName); + } else { + image = QImage(":/common/image/cover_max.svg"); + image = image.scaled(QSize(160, 160)); + image.save(imagesDirPath + "/" + imageName); + } + + avformat_close_input(&pFormatCtx); + avformat_free_context(pFormatCtx); + } +//#endif // DISABLE_LIBAV + + return byteArray; +} + +QVector MetaDetector::getMetaData(const QString &path) +{ + QVector curData; + if (path.isEmpty()) + return curData; + + AVFormatContext *pFormatCtx = avformat_alloc_context(); + avformat_open_input(&pFormatCtx, path.toStdString().c_str(), nullptr, nullptr); + + if (pFormatCtx == nullptr) + return curData; + + avformat_find_stream_info(pFormatCtx, nullptr); + + int audio_stream_index = -1; + audio_stream_index = av_find_best_stream(pFormatCtx, AVMEDIA_TYPE_AUDIO, -1, -1, nullptr, 0); + if (audio_stream_index < 0) + return curData; + + AVStream *in_stream = pFormatCtx->streams[audio_stream_index]; + AVCodecParameters *in_codecpar = in_stream->codecpar; + + AVCodecContext *pCodecCtx = avcodec_alloc_context3(nullptr); + avcodec_parameters_to_context(pCodecCtx, in_codecpar); + + AVCodec *pCodec = avcodec_find_decoder(pCodecCtx->codec_id); + avcodec_open2(pCodecCtx, pCodec, nullptr); + + AVPacket *packet = av_packet_alloc(); + AVFrame *frame = av_frame_alloc(); + + while (av_read_frame(pFormatCtx, packet) >= 0) { + if (packet->stream_index == audio_stream_index) { + + int state; + state = avcodec_send_packet(pCodecCtx, packet); + av_packet_unref(packet); + if (state != 0) { + continue; + } + + state = avcodec_receive_frame(pCodecCtx, frame); + if (state == 0) { + + quint8 *ptr = frame->extended_data[0]; + if (path.endsWith(".ape") || path.endsWith(".APE")) { + for (int i = 0; i < frame->linesize[0]; i++) { + auto valDate = ((ptr[i]) << 16 | (ptr[i + 1])); + curData.append(valDate + qrand()); + } + } else { + for (int i = 0; i < frame->linesize[0]; i += 1024) { + auto valDate = ((ptr[i]) << 16 | (ptr[i + 1])); + curData.append(valDate); + } + } + } + } + av_packet_unref(packet); + } + + av_packet_unref(packet); + av_frame_free(&frame); + avcodec_close(pCodecCtx); + avformat_close_input(&pFormatCtx); + avformat_free_context(pFormatCtx); + + return curData; +} diff -Nru deepin-music-5.0.1+ds/src/libdmusic/metadetector.h deepin-music-6.0.1.54+ds.1/src/libdmusic/metadetector.h --- deepin-music-5.0.1+ds/src/libdmusic/metadetector.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/libdmusic/metadetector.h 2020-07-14 12:05:00.000000000 +0000 @@ -21,6 +21,8 @@ #pragma once +#include + #include "util/singleton.h" #include @@ -37,4 +39,6 @@ static void updateCueFileTagCodec(MediaMeta *meta, const QFileInfo &, const QByteArray &codec); static void updateMediaFileTagCodec(MediaMeta *meta, const QByteArray &codec, bool forceEncode); static void updateMetaFromLocalfile(MediaMeta *meta, const QFileInfo &fileInfo); + static QByteArray getCoverData(const QString &path, const QString &tmpPath, const QString &hash); + static QVector getMetaData(const QString &path); }; diff -Nru deepin-music-5.0.1+ds/src/libdmusic/net/geese.h deepin-music-6.0.1.54+ds.1/src/libdmusic/net/geese.h --- deepin-music-5.0.1+ds/src/libdmusic/net/geese.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/libdmusic/net/geese.h 2020-07-14 12:05:00.000000000 +0000 @@ -27,10 +27,8 @@ #include "libdmusic_global.h" -namespace DMusic -{ -namespace Net -{ +namespace DMusic { +namespace Net { class Geese; @@ -56,7 +54,7 @@ friend class Goose; public: - explicit Geese(QObject *parent = 0); + explicit Geese(QObject *parent = nullptr); ~Geese(); Goose *getGoose(QUrl url); diff -Nru deepin-music-5.0.1+ds/src/libdmusic/playlistmeta.h deepin-music-6.0.1.54+ds.1/src/libdmusic/playlistmeta.h --- deepin-music-5.0.1+ds/src/libdmusic/playlistmeta.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/libdmusic/playlistmeta.h 2020-07-14 12:05:00.000000000 +0000 @@ -46,6 +46,7 @@ bool readonly = false; bool hide = false; bool active = false; + bool playStatus = false; }; Q_DECLARE_METATYPE(PlaylistMeta) diff -Nru deepin-music-5.0.1+ds/src/libdmusic/util/basetool.cpp deepin-music-6.0.1.54+ds.1/src/libdmusic/util/basetool.cpp --- deepin-music-5.0.1+ds/src/libdmusic/util/basetool.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/libdmusic/util/basetool.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,262 @@ +#include "basetool.h" + +#include +#include +#include +#include +#include + +#include + +static float codecConfidenceForData(const QTextCodec *codec, const QByteArray &data, const QLocale::Country &country) +{ + qreal hep_count = 0; + int non_base_latin_count = 0; + qreal unidentification_count = 0; + int replacement_count = 0; + + QTextDecoder decoder(codec); + const QString &unicode_data = decoder.toUnicode(data); + + for (int i = 0; i < unicode_data.size(); ++i) { + const QChar &ch = unicode_data.at(i); + + if (ch.unicode() > 0x7f) + ++non_base_latin_count; + + switch (ch.script()) { + case QChar::Script_Hiragana: + case QChar::Script_Katakana: + hep_count += (country == QLocale::Japan) ? 1.2 : 0.5; + unidentification_count += (country == QLocale::Japan) ? 0 : 0.3; + break; + case QChar::Script_Han: + hep_count += (country == QLocale::China) ? 1.2 : 0.5; + unidentification_count += (country == QLocale::China) ? 0 : 0.3; + break; + case QChar::Script_Hangul: + hep_count += (country == QLocale::NorthKorea) || (country == QLocale::SouthKorea) ? 1.2 : 0.5; + unidentification_count += (country == QLocale::NorthKorea) || (country == QLocale::SouthKorea) ? 0 : 0.3; + break; + case QChar::Script_Cyrillic: + hep_count += (country == QLocale::Russia) ? 1.2 : 0.5; + unidentification_count += (country == QLocale::Russia) ? 0 : 0.3; + break; + case QChar::Script_Devanagari: + hep_count += (country == QLocale::Nepal || country == QLocale::India) ? 1.2 : 0.5; + unidentification_count += (country == QLocale::Nepal || country == QLocale::India) ? 0 : 0.3; + break; + default: + // full-width character, emoji, 常用标点, 拉丁文补充1,天城文补充,CJK符号和标点符号(如:【】) + if ((ch.unicode() >= 0xff00 && ch <= 0xffef) + || (ch.unicode() >= 0x2600 && ch.unicode() <= 0x27ff) + || (ch.unicode() >= 0x2000 && ch.unicode() <= 0x206f) + || (ch.unicode() >= 0x80 && ch.unicode() <= 0xff) + || (ch.unicode() >= 0xa8e0 && ch.unicode() <= 0xa8ff) + || (ch.unicode() >= 0x0900 && ch.unicode() <= 0x097f) + || (ch.unicode() >= 0x3000 && ch.unicode() <= 0x303f)) { + ++hep_count; + } else if (ch.isSurrogate() && ch.isHighSurrogate()) { + ++i; + + if (i < unicode_data.size()) { + const QChar &next_ch = unicode_data.at(i); + + if (!next_ch.isLowSurrogate()) { + --i; + break; + } + + uint unicode = QChar::surrogateToUcs4(ch, next_ch); + + // emoji + if (unicode >= 0x1f000 && unicode <= 0x1f6ff) { + hep_count += 2; + } + } + } else if (ch.unicode() == QChar::ReplacementCharacter) { + ++replacement_count; + } else if (ch.unicode() > 0x7f) { + // 因为UTF-8编码的容错性很低,所以未识别的编码只需要判断是否为 QChar::ReplacementCharacter 就能排除 + if (codec->name() != "UTF-8") + ++unidentification_count; + } + break; + } + } + + float c = static_cast(qreal(hep_count) / non_base_latin_count / 1.2); + + c -= static_cast(qreal(replacement_count) / non_base_latin_count); + c -= static_cast(qreal(unidentification_count) / non_base_latin_count); + + return qMax(0.0f, c); +} + +QByteArray BaseTool::detectEncode(const QByteArray &data, const QString &fileName) +{ + // Return local encoding if nothing in file. + if (data.isEmpty()) { + return QTextCodec::codecForLocale()->name(); + } + + if (QTextCodec *c = QTextCodec::codecForUtfText(data, nullptr)) { + return c->name(); + } + + QMimeDatabase mime_database; + const QMimeType &mime_type = fileName.isEmpty() ? mime_database.mimeTypeForData(data) : mime_database.mimeTypeForFileNameAndData(fileName, data); + const QString &mimetype_name = mime_type.name(); + KEncodingProber::ProberType proberType = KEncodingProber::Universal; + + if (mimetype_name == QStringLiteral("application/xml") + || mimetype_name == QStringLiteral("text/html") + || mimetype_name == QStringLiteral("application/xhtml+xml")) { + const QString &_data = QString::fromLatin1(data); + QRegularExpression pattern("<\\bmeta.+\\bcharset=(?'charset'\\S+?)\\s*['\"/>]"); + + pattern.setPatternOptions(QRegularExpression::DontCaptureOption | QRegularExpression::CaseInsensitiveOption); + const QString &charset = pattern.match(_data, 0, QRegularExpression::PartialPreferFirstMatch, + QRegularExpression::DontCheckSubjectStringMatchOption).captured("charset"); + + if (!charset.isEmpty()) { + return charset.toLatin1(); + } + + pattern.setPattern("<\\bmeta\\s+http-equiv=\"Content-Language\"\\s+content=\"(?'language'[a-zA-Z-]+)\""); + + const QString &language = pattern.match(_data, 0, QRegularExpression::PartialPreferFirstMatch, + QRegularExpression::DontCheckSubjectStringMatchOption).captured("language"); + + if (!language.isEmpty()) { + QLocale l(language); + + switch (l.script()) { + case QLocale::ArabicScript: + proberType = KEncodingProber::Arabic; + break; + case QLocale::SimplifiedChineseScript: + proberType = KEncodingProber::ChineseSimplified; + break; + case QLocale::TraditionalChineseScript: + proberType = KEncodingProber::ChineseTraditional; + break; + case QLocale::CyrillicScript: + proberType = KEncodingProber::Cyrillic; + break; + case QLocale::GreekScript: + proberType = KEncodingProber::Greek; + break; + case QLocale::HebrewScript: + proberType = KEncodingProber::Hebrew; + break; + case QLocale::JapaneseScript: + proberType = KEncodingProber::Japanese; + break; + case QLocale::KoreanScript: + proberType = KEncodingProber::Korean; + break; + case QLocale::ThaiScript: + proberType = KEncodingProber::Thai; + break; + default: + break; + } + } + } else if (mimetype_name == "text/x-python") { + QRegularExpression pattern("^#coding\\s*:\\s*(?'coding'\\S+)$"); + QTextStream stream(data); + + pattern.setPatternOptions(QRegularExpression::DontCaptureOption | QRegularExpression::CaseInsensitiveOption); + stream.setCodec("latin1"); + + while (!stream.atEnd()) { + const QString &_data = stream.readLine(); + const QString &coding = pattern.match(_data, 0).captured("coding"); + + if (!coding.isEmpty()) { + return coding.toLatin1(); + } + } + } + + // for CJK + const QList> fallback_list { + {KEncodingProber::ChineseSimplified, QLocale::China}, + {KEncodingProber::ChineseTraditional, QLocale::China}, + {KEncodingProber::Japanese, QLocale::Japan}, + {KEncodingProber::Korean, QLocale::NorthKorea}, + {KEncodingProber::Cyrillic, QLocale::Russia}, + {KEncodingProber::Greek, QLocale::Greece}, + {proberType, QLocale::system().country()} + }; + + KEncodingProber prober(proberType); + prober.feed(data); + float pre_confidence = prober.confidence(); + QByteArray pre_encoding = prober.encoding(); + + QTextCodec *def_codec = QTextCodec::codecForLocale(); + QByteArray encoding; + float confidence = 0; + + for (auto i : fallback_list) { + prober.setProberType(i.first); + prober.feed(data); + + float prober_confidence = prober.confidence(); + QByteArray prober_encoding = prober.encoding(); + + if (i.first != proberType && qFuzzyIsNull(prober_confidence)) { + prober_confidence = pre_confidence; + prober_encoding = pre_encoding; + } + +confidence: + if (QTextCodec *codec = QTextCodec::codecForName(prober_encoding)) { + if (def_codec == codec) + def_codec = nullptr; + + float c = codecConfidenceForData(codec, data, i.second); + + if (prober_confidence > 0.5f) { + c = c / 2 + prober_confidence / 2; + } else { + c = c / 3 * 2 + prober_confidence / 3; + } + + if (c > confidence) { + confidence = c; + encoding = prober_encoding; + } + + if (i.first == KEncodingProber::ChineseTraditional && c < 0.5f) { + // test Big5 + c = codecConfidenceForData(QTextCodec::codecForName("Big5"), data, i.second); + + if (c > 0.5f && c > confidence) { + confidence = c; + encoding = "Big5"; + } + } + } + + if (i.first != proberType) { + // 使用 proberType 类型探测出的结果结合此国家再次做编码检查 + i.first = proberType; + prober_confidence = pre_confidence; + prober_encoding = pre_encoding; + goto confidence; + } + } + + QString m_codecstr; + if (def_codec && codecConfidenceForData(def_codec, data, QLocale::system().country()) > confidence) { + m_codecstr = def_codec->name(); + return def_codec->name(); + } + + m_codecstr = encoding; + + return encoding; +} diff -Nru deepin-music-5.0.1+ds/src/libdmusic/util/basetool.h deepin-music-6.0.1.54+ds.1/src/libdmusic/util/basetool.h --- deepin-music-5.0.1+ds/src/libdmusic/util/basetool.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/libdmusic/util/basetool.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,14 @@ +#pragma once + +#include + +#include "libdmusic_global.h" + +class LIBDMUSICSHARED_EXPORT BaseTool +{ +public: + static QByteArray detectEncode(const QByteArray &data, const QString &fileName); + +private: + BaseTool() {} +}; diff -Nru deepin-music-5.0.1+ds/src/libdmusic/util/cueparser.cpp deepin-music-6.0.1.54+ds.1/src/libdmusic/util/cueparser.cpp --- deepin-music-5.0.1+ds/src/libdmusic/util/cueparser.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/libdmusic/util/cueparser.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -32,8 +32,7 @@ #include "encodingdetector.h" -namespace Libcue -{ +namespace Libcue { void time_frame_to_msf(long frame, int *m, int *s, int *f) { @@ -41,7 +40,7 @@ frame /= 75; *s = frame % 60; /* 0 <= seconds <= 59 */ frame /= 60; - *m = frame; /* 0 <= minutes */ + *m = static_cast(frame); /* 0 <= minutes */ } } @@ -62,8 +61,7 @@ }while(0) -namespace DMusic -{ +namespace DMusic { class CueParserPrivate { diff -Nru deepin-music-5.0.1+ds/src/libdmusic/util/encodingdetector.cpp deepin-music-6.0.1.54+ds.1/src/libdmusic/util/encodingdetector.cpp --- deepin-music-5.0.1+ds/src/libdmusic/util/encodingdetector.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/libdmusic/util/encodingdetector.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -67,7 +67,7 @@ const char *name = ucsdet_getName(csm[match], &status); const char *lang = ucsdet_getLanguage(csm[match], &status); // int32_t confidence = ucsdet_getConfidence(csm[match], &status); - if (lang == NULL || strlen(lang) == 0) { + if (lang == nullptr || strlen(lang) == 0) { lang = "**"; } // qDebug() << name << lang << confidence; diff -Nru deepin-music-5.0.1+ds/src/libdmusic/util/pinyinsearch.cpp deepin-music-6.0.1.54+ds.1/src/libdmusic/util/pinyinsearch.cpp --- deepin-music-5.0.1+ds/src/libdmusic/util/pinyinsearch.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/libdmusic/util/pinyinsearch.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -25,10 +25,8 @@ #include #include -namespace DMusic -{ -namespace PinyinSearch -{ +namespace DMusic { +namespace PinyinSearch { inline bool isAlphabeta(const QChar &c) { @@ -42,16 +40,16 @@ return re.exactMatch(c); } -inline bool isChinese(const QChar &c) +bool isChinese(const QChar &c) { - return c.unicode() < 0x9FBF && c.unicode() > 0x4E00; + return c.unicode() <= 0x9FBF && c.unicode() >= 0x4E00; } inline QString toChinese(const QString &c) { QString pinyin = Dtk::Core::Chinese2Pinyin(c); if (pinyin.length() >= 2 - && isNumber(pinyin.at(pinyin.length() - 1))) { + && isNumber(pinyin.at(pinyin.length() - 1))) { return pinyin.left(pinyin.length() - 1); } return pinyin; @@ -72,13 +70,18 @@ continue; } isLastAlphabeta = isCurAlphabeta; - if (isNumber(c)) { - wordList << c; - continue; - } +// if (isNumber(c)) { +// wordList << c; +// continue; +// } + + //除了中文外,其它字符不作特殊处理 if (isChinese(c)) { wordList << toChinese(c); continue; + } else { + wordList << c; + continue; } } return wordList; diff -Nru deepin-music-5.0.1+ds/src/libdmusic/util/pinyinsearch.h deepin-music-6.0.1.54+ds.1/src/libdmusic/util/pinyinsearch.h --- deepin-music-5.0.1+ds/src/libdmusic/util/pinyinsearch.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/libdmusic/util/pinyinsearch.h 2020-07-14 12:05:00.000000000 +0000 @@ -23,10 +23,9 @@ #include -namespace DMusic -{ -namespace PinyinSearch -{ +namespace DMusic { +namespace PinyinSearch { +bool isChinese(const QChar &c); QStringList simpleChineseSplit(QString &pinyin); } } diff -Nru deepin-music-5.0.1+ds/src/music-player/core/AudioBufferDevice.cpp deepin-music-6.0.1.54+ds.1/src/music-player/core/AudioBufferDevice.cpp --- deepin-music-5.0.1+ds/src/music-player/core/AudioBufferDevice.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/AudioBufferDevice.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,119 @@ +#include "AudioBufferDevice.h" +#include + +AudioBufferDevice::AudioBufferDevice(QAudioDecoder *decoder, QObject *parent): + QIODevice(parent), + _decoder(decoder), + _isFinished(false) +{ + connect(_decoder, SIGNAL(bufferReady()), this, SLOT(onBufferReady())); + connect(_decoder, SIGNAL(finished()), this, SLOT(onFinished())); + connect(_decoder, SIGNAL(error(QAudioDecoder::Error)), this, SLOT(onErroe(QAudioDecoder::Error))); +} + +bool AudioBufferDevice::atEnd() const +{ + return _isFinished && _queue.empty(); +} + +qint64 AudioBufferDevice::readData(char *data, qint64 size) +{ + if (position == _abuffer_queue.size() && position == 0 && _abuffer_queue.size() == 0) { + Q_EMIT againMedia(); + return 0; + } + + if (position == _abuffer_queue.size()) { + //qDebug() << "数据已播放完成"; + Q_EMIT endOfMedia(); + return 0; + } + + if (_queue.empty() && _abuffer_queue.empty()) { + return 0; + } + + if (_queue.empty()) { + //QAudioBuffer *buffer = _abuffer_queue.first(); + QAudioBuffer *buffer = _abuffer_queue.at(static_cast(position)); + + qint32 *data = static_cast(buffer->data()); + int len = buffer->sampleCount(); + QByteArray retpcm; + + for (int i = 0; i < len; i += 1) { + qint32 pcm = data[i]; + retpcm.append((char *)&pcm, sizeof(pcm)); + } + + auto qb = new QBuffer(); + qb->setData(retpcm); + + _queue.push_back(qb); + //_abuffer_queue.removeFirst(); + //delete buffer; + } + + QBuffer *buffer = _queue.first(); + if (!buffer->isOpen()) { + buffer->open(QIODevice::ReadOnly); + } + + //qDebug() << "音乐播放中....." << _abuffer_queue.size(); + qint64 n = buffer->read(data, size); + Q_EMIT positionChanged(position++); + + if (buffer->atEnd()) { + _queue.removeFirst(); + delete buffer; + } + + return n; +} + +qint64 AudioBufferDevice::writeData(const char *data, qint64 maxSize) +{ + Q_UNUSED(data) + Q_UNUSED(maxSize) + return 0; +} + +qint64 AudioBufferDevice::bytesAvailable() const +{ + if (_queue.empty()) { + return 0; + } else { + return _queue.first()->bytesAvailable(); + } +} + +void AudioBufferDevice::sliderReleased(qint64 value) +{ + position = value; + //qDebug() << value << "-" << _abuffer_queue.size(); +} + +void AudioBufferDevice::onBufferReady() +{ + QAudioBuffer buffer = _decoder->read(); + _abuffer_queue.push_back(new QAudioBuffer(buffer)); + Q_EMIT durationChanged(1); +} + +void AudioBufferDevice::onFinished() +{ + _isFinished = true; + //Q_EMIT durationChanged(_abuffer_queue.size()); +} + +void AudioBufferDevice::onErroe(QAudioDecoder::Error error) +{ + qDebug() << error; +} + +void AudioBufferDevice::clearQAbuffer() +{ + position = 0; + _queue.clear(); + _abuffer_queue.clear(); +} diff -Nru deepin-music-5.0.1+ds/src/music-player/core/AudioBufferDevice.h deepin-music-6.0.1.54+ds.1/src/music-player/core/AudioBufferDevice.h --- deepin-music-5.0.1+ds/src/music-player/core/AudioBufferDevice.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/AudioBufferDevice.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,45 @@ +#ifndef AUDIOBUFFERDEVICE_H +#define AUDIOBUFFERDEVICE_H + +#include +#include +#include +#include +#include +#include + +class AudioBufferDevice : public QIODevice +{ + Q_OBJECT +public: + explicit AudioBufferDevice(QAudioDecoder *decoder, QObject *parent = nullptr); + virtual bool atEnd() const override; + virtual qint64 bytesAvailable() const override; + +protected: + virtual qint64 readData(char *data, qint64 size) override; + virtual qint64 writeData(const char *data, qint64 maxSize) override; + +signals: + void positionChanged(qint64 value); + void durationChanged(qint64 value); + void endOfMedia(); + void againMedia(); + +public slots: + void sliderReleased(qint64 value); + void onBufferReady(); + void onFinished(); + void clearQAbuffer(); + + void onErroe(QAudioDecoder::Error error); + +private: + QAudioDecoder *_decoder; + QQueue _queue; + QQueue _abuffer_queue; + bool _isFinished; + qint64 position = 0; +}; + +#endif // AUDIOBUFFERDEVICE_H diff -Nru deepin-music-5.0.1+ds/src/music-player/core/AudioPlayer.cpp deepin-music-6.0.1.54+ds.1/src/music-player/core/AudioPlayer.cpp --- deepin-music-5.0.1+ds/src/music-player/core/AudioPlayer.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/AudioPlayer.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,49 @@ +#include "AudioPlayer.h" + +AudioPlayer::AudioPlayer( QObject *parent) +{ + Q_UNUSED(parent) + format = new QAudioFormat(); + format->setSampleRate(44100); + format->setChannelCount(2); + format->setCodec("audio/pcm"); + format->setSampleSize(32); + format->setByteOrder(QAudioFormat::LittleEndian); + format->setSampleType(QAudioFormat::SignedInt); + + decoder = new QAudioDecoder(this); + decoder->setAudioFormat(*format); + + qDebug() << "isvalide: " << format->isValid(); + + _output = new QAudioOutput(*format, this); + _buffer = new AudioBufferDevice(decoder, this); + _buffer->open(QIODevice::ReadOnly); +} + +void AudioPlayer::play() +{ + _output->start(_buffer); +} + +void AudioPlayer::suspend() +{ + // 暂停 + _output->suspend(); +} + +void AudioPlayer::reset() +{ + // 停止 + _output->reset(); +} + +void AudioPlayer::setSourceFilename(const QString &fileName) +{ + //qDebug() << "setSourceFilename" << fileName ; + + _buffer->clearQAbuffer(); + decoder->stop(); + decoder->setSourceFilename(fileName); + decoder->start(); +} diff -Nru deepin-music-5.0.1+ds/src/music-player/core/AudioPlayer.h deepin-music-6.0.1.54+ds.1/src/music-player/core/AudioPlayer.h --- deepin-music-5.0.1+ds/src/music-player/core/AudioPlayer.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/AudioPlayer.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,38 @@ +#ifndef AUDIOPLAYER_H +#define AUDIOPLAYER_H + +#include +#include +#include +#include +#include +#include +#include "AudioBufferDevice.h" +#include + +class AudioPlayer : public QObject +{ + Q_OBJECT + +public: + explicit AudioPlayer(QObject *parent = nullptr); + void setSourceFilename(const QString &fileName); + + void play(); + void suspend(); + void reset(); + +signals: + +public slots: + +public: + + QAudioFormat *format; + QAudioDecoder *decoder; + + QAudioOutput *_output; //音频播放 + AudioBufferDevice *_buffer; //音频解码 +}; + +#endif // AUDIOPLAYER_H diff -Nru deepin-music-5.0.1+ds/src/music-player/core/mediadatabase.cpp deepin-music-6.0.1.54+ds.1/src/music-player/core/mediadatabase.cpp --- deepin-music-5.0.1+ds/src/music-player/core/mediadatabase.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/mediadatabase.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -66,6 +67,26 @@ "cuepath VARCHAR(4096) )" ); + //Smooth transition + query.exec("CREATE TABLE IF NOT EXISTS musicNew (hash TEXT primary key not null, " + "timestamp INTEGER," + "title VARCHAR(256), artist VARCHAR(256), " + "py_title VARCHAR(256), py_title_short VARCHAR(256), " + "py_artist VARCHAR(256), py_artist_short VARCHAR(256), " + "py_album VARCHAR(256), py_album_short VARCHAR(256), " + "album VARCHAR(256), filetype VARCHAR(32), " + "size INTEGER, track INTEGER, " + "offset INTEGER, favourite INTEGER(32), " + "localpath VARCHAR(4096), length INTEGER, " + "search_id VARCHAR(256), " + "invalid INTEGER(32), " + "lyricPath VARCHAR(4096), " + "codec VARCHAR(35), " + "cuepath VARCHAR(4096) )" + ); + + + query.exec("CREATE TABLE IF NOT EXISTS ablum (id int primary key, " "name VARCHAR(20), localpath VARCHAR(4096), url VARCHAR(4096))"); @@ -230,22 +251,45 @@ void MediaDatabase::init() { createConnection(); + margeDatabase(); // sqlite must run in one thread!!! m_writer = new MediaDatabaseWriter; - + ThreadPool::instance()->moveToNewThread(m_writer);//将读写耗时操作放到子线程操作 + connect(this, &MediaDatabase::initWrter, + m_writer, &MediaDatabaseWriter::initDataBase); + Q_EMIT initWrter(); bind(); - margeDatabase(); QSqlDatabase::database().transaction(); PlaylistMeta playlistMeta; + playlistMeta.uuid = "album"; + playlistMeta.displayName = "Album"; + playlistMeta.icon = "album"; + playlistMeta.readonly = true; + playlistMeta.hide = false; + playlistMeta.sortID = 1; + if (!playlistExist("album")) { + addPlaylist(playlistMeta); + } + + playlistMeta.uuid = "artist"; + playlistMeta.displayName = "Artist"; + playlistMeta.icon = "artist"; + playlistMeta.readonly = true; + playlistMeta.hide = false; + playlistMeta.sortID = 2; + if (!playlistExist("artist")) { + addPlaylist(playlistMeta); + } + playlistMeta.uuid = "all"; playlistMeta.displayName = "All Music"; playlistMeta.icon = "all"; playlistMeta.readonly = true; playlistMeta.hide = false; - playlistMeta.sortID = 1; + playlistMeta.sortID = 3; if (!playlistExist("all")) { addPlaylist(playlistMeta); } @@ -255,11 +299,21 @@ playlistMeta.icon = "fav"; playlistMeta.readonly = true; playlistMeta.hide = false; - playlistMeta.sortID = 2; + playlistMeta.sortID = 4; if (!playlistExist("fav")) { addPlaylist(playlistMeta); } + playlistMeta.displayName = "Playlist"; + playlistMeta.uuid = "play"; + playlistMeta.icon = "play"; + playlistMeta.readonly = true; + playlistMeta.hide = true; + playlistMeta.sortID = 5; + if (!playlistExist("play")) { + addPlaylist(playlistMeta); + } + playlistMeta.displayName = "Search result"; playlistMeta.uuid = "search"; playlistMeta.icon = "search"; @@ -270,6 +324,66 @@ addPlaylist(playlistMeta); } + playlistMeta.displayName = "Music"; + playlistMeta.uuid = "musicCand"; + playlistMeta.icon = "musicCand"; + playlistMeta.readonly = true; + playlistMeta.hide = true; + playlistMeta.sortID = 0; + if (!playlistExist("musicCand")) { + addPlaylist(playlistMeta); + } + + playlistMeta.displayName = "Album"; + playlistMeta.uuid = "albumCand"; + playlistMeta.icon = "albumCand"; + playlistMeta.readonly = true; + playlistMeta.hide = true; + playlistMeta.sortID = 0; + if (!playlistExist("albumCand")) { + addPlaylist(playlistMeta); + } + + playlistMeta.displayName = "Artist"; + playlistMeta.uuid = "artistCand"; + playlistMeta.icon = "artistCand"; + playlistMeta.readonly = true; + playlistMeta.hide = true; + playlistMeta.sortID = 0; + if (!playlistExist("artistCand")) { + addPlaylist(playlistMeta); + } + + playlistMeta.displayName = "Music"; + playlistMeta.uuid = "musicResult"; + playlistMeta.icon = "musicResult"; + playlistMeta.readonly = true; + playlistMeta.hide = true; + playlistMeta.sortID = 0; + if (!playlistExist("musicResult")) { + addPlaylist(playlistMeta); + } + + playlistMeta.displayName = "Album"; + playlistMeta.uuid = "albumResult"; + playlistMeta.icon = "albumResult"; + playlistMeta.readonly = true; + playlistMeta.hide = true; + playlistMeta.sortID = 0; + if (!playlistExist("albumResult")) { + addPlaylist(playlistMeta); + } + + playlistMeta.displayName = "Artist"; + playlistMeta.uuid = "artistResult"; + playlistMeta.icon = "artistResult"; + playlistMeta.readonly = true; + playlistMeta.hide = true; + playlistMeta.sortID = 0; + if (!playlistExist("artistResult")) { + addPlaylist(playlistMeta); + } + QSqlDatabase::database().commit(); } @@ -510,6 +624,7 @@ QList MediaDatabase::allmetas() { QList metalist; + QString queryString = QString("SELECT hash, localpath, title, artist, album, " "filetype, track, offset, length, size, " "timestamp, invalid, search_id, cuepath " @@ -530,14 +645,134 @@ meta.artist = query.value(3).toString(); meta.album = query.value(4).toString(); meta.filetype = query.value(5).toString(); - meta.track = query.value(6).toInt(); - meta.offset = query.value(7).toInt(); - meta.length = query.value(8).toInt(); - meta.size = query.value(9).toInt(); - meta.timestamp = query.value(10).toInt(); + meta.track = query.value(6).toLongLong(); + meta.offset = query.value(7).toLongLong(); + meta.length = query.value(8).toLongLong(); + meta.size = query.value(9).toLongLong(); + meta.timestamp = query.value(10).toLongLong(); meta.invalid = query.value(11).toBool(); meta.searchID = query.value(12).toString(); meta.cuePath = query.value(13).toString(); + + /*----------INSERT INTO musicNew------------*/ + + QSqlQuery querys; + + querys.prepare("INSERT INTO musicNew (" + "hash, timestamp, title, artist, album, " + "filetype, size, track, offset, favourite, localpath, length, " + "py_title, py_title_short, py_artist, py_artist_short, " + "py_album, py_album_short, lyricPath, codec, cuepath " + ") " + "VALUES (" + ":hash, :timestamp, :title, :artist, :album, " + ":filetype, :size, :track, :offset, :favourite, :localpath, :length, " + ":py_title, :py_title_short, :py_artist, :py_artist_short, " + ":py_album, :py_album_short, :lyricPath, :codec, :cuepath " + ")"); + + QString uuid = QUuid::createUuid().toString().remove('{').remove('}').remove('-'); + qDebug() << "uuid : " << uuid << endl; + + querys.bindValue(":hash", meta.hash); + querys.bindValue(":timestamp", meta.timestamp); + querys.bindValue(":title", meta.title); + querys.bindValue(":artist", meta.artist); + querys.bindValue(":album", meta.album); + querys.bindValue(":filetype", meta.filetype); + querys.bindValue(":size", meta.size); + querys.bindValue(":track", meta.track); + querys.bindValue(":offset", meta.offset); + querys.bindValue(":favourite", meta.favourite); + querys.bindValue(":localpath", meta.localPath); + querys.bindValue(":length", meta.length); + querys.bindValue(":py_title", meta.pinyinTitle); + querys.bindValue(":py_title_short", meta.pinyinTitleShort); + querys.bindValue(":py_artist", meta.pinyinArtist); + querys.bindValue(":py_artist_short", meta.pinyinArtistShort); + querys.bindValue(":py_album", meta.pinyinAlbum); + querys.bindValue(":py_album_short", meta.pinyinAlbumShort); + querys.bindValue(":lyricPath", meta.lyricPath); + querys.bindValue(":codec", meta.codec); + querys.bindValue(":cuepath", meta.cuePath); + + + /*-------------querys.exec----------------*/ + + if (! querys.exec()) { + qCritical() << querys.lastError(); + + + QString queryStringNew = QString("SELECT hash, localpath, title, artist, album, " + "filetype, track, offset, length, size, " + "timestamp, invalid, search_id, cuepath, " + "lyricPath, codec " + "FROM musicNew"); + + QSqlQuery queryNew; + + queryNew.prepare(queryStringNew); + if (! queryNew.exec()) { + qCritical() << queryNew.lastError(); + return metalist; + } + + while (queryNew.next()) { + MediaMeta meta; + meta.hash = queryNew.value(0).toString(); + meta.localPath = queryNew.value(1).toString(); + meta.title = queryNew.value(2).toString(); + meta.artist = queryNew.value(3).toString(); + meta.album = queryNew.value(4).toString(); + meta.filetype = queryNew.value(5).toString(); + meta.track = queryNew.value(6).toLongLong(); + meta.offset = queryNew.value(7).toLongLong(); + meta.length = queryNew.value(8).toLongLong(); + meta.size = queryNew.value(9).toLongLong(); + meta.timestamp = queryNew.value(10).toLongLong(); + meta.invalid = queryNew.value(11).toBool(); + meta.searchID = queryNew.value(12).toString(); + meta.cuePath = queryNew.value(13).toString(); + meta.lyricPath = queryNew.value(14).toString(); + meta.codec = queryNew.value(15).toString(); + metalist << meta; + } + } + + } + + QString queryStringNew = QString("SELECT hash, localpath, title, artist, album, " + "filetype, track, offset, length, size, " + "timestamp, invalid, search_id, cuepath, " + "lyricPath, codec " + "FROM musicNew"); + + QSqlQuery queryNew; + + queryNew.prepare(queryStringNew); + if (! queryNew.exec()) { + qCritical() << queryNew.lastError(); + return metalist; + } + + while (queryNew.next()) { + MediaMeta meta; + meta.hash = queryNew.value(0).toString(); + meta.localPath = queryNew.value(1).toString(); + meta.title = queryNew.value(2).toString(); + meta.artist = queryNew.value(3).toString(); + meta.album = queryNew.value(4).toString(); + meta.filetype = queryNew.value(5).toString(); + meta.track = queryNew.value(6).toLongLong(); + meta.offset = queryNew.value(7).toLongLong(); + meta.length = queryNew.value(8).toLongLong(); + meta.size = queryNew.value(9).toLongLong(); + meta.timestamp = queryNew.value(10).toLongLong(); + meta.invalid = queryNew.value(11).toBool(); + meta.searchID = queryNew.value(12).toString(); + meta.cuePath = queryNew.value(13).toString(); + meta.lyricPath = queryNew.value(14).toString(); + meta.codec = queryNew.value(15).toString(); metalist << meta; } @@ -547,19 +782,19 @@ void MediaDatabase::bind() { connect(this, &MediaDatabase::addMediaMeta, - m_writer, &MediaDatabaseWriter::addMediaMeta); + m_writer, &MediaDatabaseWriter::addMediaMeta, Qt::UniqueConnection); connect(this, &MediaDatabase::addMediaMetaList, - m_writer, &MediaDatabaseWriter::addMediaMetaList); + m_writer, &MediaDatabaseWriter::addMediaMetaList, Qt::UniqueConnection); connect(this, &MediaDatabase::updateMediaMeta, - m_writer, &MediaDatabaseWriter::updateMediaMeta); + m_writer, &MediaDatabaseWriter::updateMediaMeta, Qt::UniqueConnection); connect(this, &MediaDatabase::updateMediaMetaList, - m_writer, &MediaDatabaseWriter::updateMediaMetaList); + m_writer, &MediaDatabaseWriter::updateMediaMetaList, Qt::UniqueConnection); connect(this, &MediaDatabase::insertMusic, - m_writer, &MediaDatabaseWriter::insertMusic); + m_writer, &MediaDatabaseWriter::insertMusic, Qt::UniqueConnection); connect(this, &MediaDatabase::insertMusicList, - m_writer, &MediaDatabaseWriter::insertMusicList); + m_writer, &MediaDatabaseWriter::insertMusicList, Qt::UniqueConnection); connect(this, &MediaDatabase::removeMediaMetaList, - m_writer, &MediaDatabaseWriter::removeMediaMetaList); + m_writer, &MediaDatabaseWriter::removeMediaMetaList, Qt::UniqueConnection); } diff -Nru deepin-music-5.0.1+ds/src/music-player/core/mediadatabase.h deepin-music-6.0.1.54+ds.1/src/music-player/core/mediadatabase.h --- deepin-music-5.0.1+ds/src/music-player/core/mediadatabase.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/mediadatabase.h 2020-07-14 12:05:00.000000000 +0000 @@ -32,7 +32,7 @@ { Q_OBJECT public: - explicit MediaDatabase(QObject *parent = 0); + explicit MediaDatabase(QObject *parent = nullptr); void init(); //! music meta query interface @@ -48,6 +48,7 @@ bool playlistExist(const QString &uuid); signals: + void initWrter(); void addMediaMeta(const MetaPtr meta); void addMediaMetaList(const MetaPtrList metalist); void updateMediaMeta(const MetaPtr meta); diff -Nru deepin-music-5.0.1+ds/src/music-player/core/mediadatabasewriter.cpp deepin-music-6.0.1.54+ds.1/src/music-player/core/mediadatabasewriter.cpp --- deepin-music-5.0.1+ds/src/music-player/core/mediadatabasewriter.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/mediadatabasewriter.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -21,41 +21,66 @@ #include "mediadatabasewriter.h" +#include #include #include #include #include #include #include - +#include "util/global.h" #include -MediaDatabaseWriter::MediaDatabaseWriter(QObject *parent) : QObject(parent) + +bool MediaDatabaseWriter::createConnection() +{ + QDir cacheDir(Global::cacheDir()); + if (!cacheDir.exists()) { + cacheDir.mkpath("."); + } + QString cachePath = Global::cacheDir() + "/mediameta.sqlite"; + db = QSqlDatabase::addDatabase("QSQLITE", "writer"); + db.setDatabaseName(cachePath); + + if (!db.open()) { + qCritical() << db.lastError() + << Global::cacheDir() + << cachePath; + return false; + } + return true; +} + +void MediaDatabaseWriter::initDataBase() { + createConnection(); +} +MediaDatabaseWriter::MediaDatabaseWriter(QObject *parent) : QObject(parent) +{ } void MediaDatabaseWriter::addMediaMetaList(const MetaPtrList metalist) { -// qDebug() << "addMediaMetaList begin"; QSqlDatabase::database().transaction(); for (auto &meta : metalist) { + QThread::msleep(1); addMediaMeta(meta); } - QSqlDatabase::database().commit(); - // qDebug() << "addMediaMetaList end"; + db.commit(); } void MediaDatabaseWriter::updateMediaMeta(const MetaPtr meta) { qDebug() << "updateMediaMeta begin"; - QSqlQuery query; + QSqlQuery query(QSqlDatabase::database("writer")); - query.prepare("UPDATE music set " + query.prepare("UPDATE musicNew set " "invalid=:invalid, length=:length, search_id=:search_id, " "title=:title, artist=:artist, album=:album, " "py_title=:py_title, py_title_short=:py_title_short, py_artist=:py_artist, " - "py_artist_short=:py_artist_short, py_album=:py_album, py_album_short=:py_album_short " + "py_artist_short=:py_artist_short, py_album=:py_album, py_album_short=:py_album_short, " + "lyricPath=:lyricPath, codec=:codec " "where hash=:hash"); query.bindValue(":search_id", meta->searchID); @@ -70,6 +95,8 @@ query.bindValue(":py_artist_short", meta->pinyinArtistShort); query.bindValue(":py_album", meta->pinyinAlbum); query.bindValue(":py_album_short", meta->pinyinAlbumShort); + query.bindValue(":lyricPath", meta->lyricPath); + query.bindValue(":codec", meta->codec); query.bindValue(":hash", meta->hash); if (! query.exec()) { @@ -77,12 +104,14 @@ return; } qDebug() << "updateMediaMeta end"; + } void MediaDatabaseWriter::updateMediaMetaList(const MetaPtrList metalist) { QSqlDatabase::database().transaction(); for (auto &meta : metalist) { + QThread::msleep(1); updateMediaMeta(meta); } QSqlDatabase::database().commit(); @@ -90,8 +119,10 @@ void MediaDatabaseWriter::removeMediaMeta(const MetaPtr meta) { - QSqlQuery query; - QString sqlstring = QString("DELETE FROM music WHERE hash = '%1'").arg(meta->hash); + QSqlQuery query(QSqlDatabase::database("writer")); + QString sqlstring; + + sqlstring = QString("DELETE FROM musicNew WHERE hash = '%1'").arg(meta->hash); if (! query.exec(sqlstring)) { qWarning() << query.lastError(); return; @@ -102,28 +133,30 @@ { QSqlDatabase::database().transaction(); for (auto &meta : metalist) { + QThread::msleep(1); removeMediaMeta(meta); } - QSqlDatabase::database().commit(); + db.commit(); } void MediaDatabaseWriter::addMediaMeta(const MetaPtr meta) { -// qDebug() << "addMediaMeta begin"; - QSqlQuery query; - query.prepare("INSERT INTO music (" + QSqlQuery query(QSqlDatabase::database("writer")); + + query.prepare("INSERT INTO musicNew (" "hash, timestamp, title, artist, album, " "filetype, size, track, offset, favourite, localpath, length, " "py_title, py_title_short, py_artist, py_artist_short, " - "py_album, py_album_short, cuepath " + "py_album, py_album_short, lyricPath, codec, cuepath " ") " "VALUES (" ":hash, :timestamp, :title, :artist, :album, " ":filetype, :size, :track, :offset, :favourite, :localpath, :length, " ":py_title, :py_title_short, :py_artist, :py_artist_short, " - ":py_album, :py_album_short, :cuepath " + ":py_album, :py_album_short, :lyricPath, :codec, :cuepath " ")"); + query.bindValue(":hash", meta->hash); query.bindValue(":timestamp", meta->timestamp); query.bindValue(":title", meta->title); @@ -142,21 +175,21 @@ query.bindValue(":py_artist_short", meta->pinyinArtistShort); query.bindValue(":py_album", meta->pinyinAlbum); query.bindValue(":py_album_short", meta->pinyinAlbumShort); + query.bindValue(":lyricPath", meta->lyricPath); + query.bindValue(":codec", meta->codec); query.bindValue(":cuepath", meta->cuePath); if (! query.exec()) { qCritical() << query.lastError(); return; } -// qDebug() << "addMediaMeta end"; } - void MediaDatabaseWriter::insertMusic(const MetaPtr meta, const PlaylistMeta &playlistMeta) { // qDebug() << "insertMusic begin"; - QSqlQuery query; + QSqlQuery query(QSqlDatabase::database("writer")); QString sqlstring = QString("INSERT INTO playlist_%1 " "(music_id, playlist_id, sort_id) " "SELECT :music_id, :playlist_id, :sort_id " @@ -180,9 +213,10 @@ // qDebug() << "insertMusicList begin"; QSqlDatabase::database().transaction(); for (auto &meta : metalist) { + QThread::msleep(1); insertMusic(meta, playlistMeta); } - QSqlDatabase::database().commit(); + db.commit(); // qDebug() << "insertMusicList end"; } diff -Nru deepin-music-5.0.1+ds/src/music-player/core/mediadatabasewriter.h deepin-music-6.0.1.54+ds.1/src/music-player/core/mediadatabasewriter.h --- deepin-music-5.0.1+ds/src/music-player/core/mediadatabasewriter.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/mediadatabasewriter.h 2020-07-14 12:05:00.000000000 +0000 @@ -25,14 +25,17 @@ #include #include - +#include class MediaDatabaseWriter : public QObject { Q_OBJECT public: - explicit MediaDatabaseWriter(QObject *parent = 0); - + explicit MediaDatabaseWriter(QObject *parent = nullptr); + QSqlDatabase db; +private: + bool createConnection(); public slots: + void initDataBase(); void addMediaMeta(const MetaPtr meta); void addMediaMetaList(const MetaPtrList metalist); void updateMediaMeta(const MetaPtr meta); diff -Nru deepin-music-5.0.1+ds/src/music-player/core/medialibrary.cpp deepin-music-6.0.1.54+ds.1/src/music-player/core/medialibrary.cpp --- deepin-music-5.0.1+ds/src/music-player/core/medialibrary.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/medialibrary.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -25,6 +25,16 @@ #include #include +//#ifndef DISABLE_LIBAV +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus +#include +#include +#ifdef __cplusplus +} +#endif // __cplusplus +//#endif // DISABLE_LIBAV #include #include @@ -37,7 +47,7 @@ #include "player.h" #include "mediadatabase.h" -const static int ScanCacheSize = 50; +const static int ScanCacheSize = 5000; class MediaLibraryPrivate { @@ -53,8 +63,6 @@ supportedSuffixs.insert(suffix, true); } -// qDebug() << supportedSuffixs; - #ifdef SUPPORT_INOTIFY watcher = new InotifyEngine; #endif @@ -80,9 +88,9 @@ watcher->addPaths(dirs.keys()); #endif -// for (auto meta : metas) { -// qDebug() << meta->title; -// } + // for (auto meta : metas) { + // qDebug() << meta->title; + // } } private: @@ -121,7 +129,17 @@ return MetaPtr(); } - if (fileInfo.suffix().toLower() == "cue") { + if ( fileInfo.suffix().toLower() != "wav" && + fileInfo.suffix().toLower() != "mp3" && + fileInfo.suffix().toLower() != "ogg" && + fileInfo.suffix().toLower() != "vorbis" && + fileInfo.suffix().toLower() != "flac" && + fileInfo.suffix().toLower() != "wma" && + fileInfo.suffix().toLower() != "m4a" && + fileInfo.suffix().toLower() != "aac" && + fileInfo.suffix().toLower() != "ape" && + fileInfo.suffix().toLower() != "amr" + ) { cuelist << DMusic::CueParserPtr(new DMusic::CueParser(filepath)); // TODO: check cue invalid #ifdef SUPPORT_INOTIFY @@ -131,6 +149,99 @@ return MetaPtr(); } + AVFormatContext *pFormatCtx = avformat_alloc_context(); + avformat_open_input(&pFormatCtx, filepath.toStdString().c_str(), nullptr, nullptr); + + if (pFormatCtx == nullptr) { + avformat_free_context(pFormatCtx); + return MetaPtr(); + } + + if (avformat_find_stream_info(pFormatCtx, nullptr) < 0) { + avformat_free_context(pFormatCtx); + return MetaPtr(); + } + + int audio_stream_index = -1; + audio_stream_index = av_find_best_stream(pFormatCtx, AVMEDIA_TYPE_AUDIO, -1, -1, nullptr, 0); + + if (audio_stream_index < 0) { + avformat_close_input(&pFormatCtx); + avformat_free_context(pFormatCtx); + return MetaPtr(); + } + + AVStream *in_stream = pFormatCtx->streams[audio_stream_index]; + AVCodecParameters *in_codecpar = in_stream->codecpar; + + AVCodecContext *pCodecCtx = avcodec_alloc_context3(nullptr); + avcodec_parameters_to_context(pCodecCtx, in_codecpar); + + AVCodec *pCodec = avcodec_find_decoder(pCodecCtx->codec_id); + avcodec_open2(pCodecCtx, pCodec, nullptr); + + AVPacket *packet = av_packet_alloc(); + AVFrame *frame = av_frame_alloc(); + + int readCount = 0; + int sendCount = 0; + int receiveCount = 0; + + while ( av_read_frame(pFormatCtx, packet) >= 0 ) { + if (packet->stream_index == audio_stream_index) { + int ret; + ret = avcodec_send_packet(pCodecCtx, packet); + av_packet_unref(packet); + if (ret != 0) { + sendCount++; + } + + ret = avcodec_receive_frame(pCodecCtx, frame); + if (ret != 0) { + receiveCount++; + } + } + av_packet_unref(packet); + + if (readCount++ > 300) { + break ; + } + } + + bool invalidFile = false; + + if (sendCount != 0 || receiveCount != 0) { + if (sendCount == receiveCount) { + invalidFile = true; + } + } + + if (readCount < 65) { + if (receiveCount > 2) { + invalidFile = true; + } + } + + if (readCount == 33 && sendCount == 1 && receiveCount == 2) { + invalidFile = true; + } + + if (invalidFile) { + av_packet_unref(packet); + av_frame_free(&frame); + avcodec_close(pCodecCtx); + avformat_close_input(&pFormatCtx); + avformat_free_context(pFormatCtx); + + return MetaPtr(); + } + + av_packet_unref(packet); + av_frame_free(&frame); + avcodec_close(pCodecCtx); + avformat_close_input(&pFormatCtx); + avformat_free_context(pFormatCtx); + auto hash = DMusic::filepathHash(filepath); if (MediaLibrary::instance()->contains(hash)) { // FIXME: insertToPlaylist; @@ -138,9 +249,11 @@ qDebug() << "exit" << hash << MediaLibrary::instance()->meta(hash); return MediaLibrary::instance()->meta(hash); } - auto meta = createMeta(fileInfo); + if (meta->length == 0) + return MetaPtr(); + //check is lossless file if (losslessSuffixs.contains(fileInfo.suffix())) { losslessMetaCache.insert(meta->localPath, meta); @@ -154,6 +267,7 @@ return meta; } + MediaLibrary::MediaLibrary(QObject *parent) : QObject(parent), d_ptr(new MediaLibraryPrivate(this)) { diff -Nru deepin-music-5.0.1+ds/src/music-player/core/medialibrary.h deepin-music-6.0.1.54+ds.1/src/music-player/core/medialibrary.h --- deepin-music-5.0.1+ds/src/music-player/core/medialibrary.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/medialibrary.h 2020-07-14 12:05:00.000000000 +0000 @@ -51,7 +51,7 @@ void importMedias(const QString &jobid, const QStringList &urllist); private: - explicit MediaLibrary(QObject *parent = 0); + explicit MediaLibrary(QObject *parent = nullptr); friend class DMusic::DSingleton; QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MediaLibrary) diff -Nru deepin-music-5.0.1+ds/src/music-player/core/metabufferdetector.cpp deepin-music-6.0.1.54+ds.1/src/music-player/core/metabufferdetector.cpp --- deepin-music-5.0.1+ds/src/music-player/core/metabufferdetector.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/metabufferdetector.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,236 @@ +/* + * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "metabufferdetector.h" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +//#ifndef DISABLE_LIBAV +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus +#include +#include +#ifdef __cplusplus +} +#endif // __cplusplus +//#endif // DISABLE_LIBAV + +#include "util/global.h" + +class MetaBufferDetectorPrivate +{ +public: + MetaBufferDetectorPrivate(MetaBufferDetector *parent) : q_ptr(parent) {} + QString curPath; + QString curHash; + QVector listData; + + bool stopFlag = false; + + MetaBufferDetector *q_ptr; + Q_DECLARE_PUBLIC(MetaBufferDetector) +}; + +MetaBufferDetector::MetaBufferDetector(QObject *parent) + : QThread(parent), d_ptr(new MetaBufferDetectorPrivate(this)) +{ + +} + +MetaBufferDetector::~MetaBufferDetector() +{ + Q_D(MetaBufferDetector); + d->stopFlag = true; + while (isRunning()) { + + } +} + +void MetaBufferDetector::run() +{ + Q_D(MetaBufferDetector); + QString path = d->curPath; + QString hash = d->curHash; + if (path.isEmpty()) + return; +#if 0 + QFileInfo fileInfo(path); + if (fileInfo.suffix() == "ape") { + QString curPath = Global::configPath(); + QString toPath = QString("%1/.tmp.ape.mp3").arg(curPath); + if (QFile::exists(toPath)) { + QFile::remove(toPath); + } + QString fromPath = QString("%1/.tmp.ape").arg(curPath); + QFile file(path); + file.link(fromPath); + QString program = QString("ffmpeg -i %1 -ac 1 -ab 32 -ar 24000 %2/.tmp.ape.mp3").arg(fromPath).arg(curPath); + QProcess::execute(program); + path = toPath; + } +#endif + AVFormatContext *pFormatCtx = avformat_alloc_context(); + avformat_open_input(&pFormatCtx, path.toStdString().c_str(), nullptr, nullptr); + + if (pFormatCtx == nullptr) { + avformat_free_context(pFormatCtx); + d->curPath.clear(); + d->curHash.clear(); + return; + } + + avformat_find_stream_info(pFormatCtx, nullptr); + + int audio_stream_index = -1; + audio_stream_index = av_find_best_stream(pFormatCtx, AVMEDIA_TYPE_AUDIO, -1, -1, nullptr, 0); + if (audio_stream_index < 0) { + avformat_close_input(&pFormatCtx); + avformat_free_context(pFormatCtx); + d->curPath.clear(); + d->curHash.clear(); + return; + } + + AVStream *in_stream = pFormatCtx->streams[audio_stream_index]; + AVCodecParameters *in_codecpar = in_stream->codecpar; + + AVCodecContext *pCodecCtx = avcodec_alloc_context3(nullptr); + avcodec_parameters_to_context(pCodecCtx, in_codecpar); + + AVCodec *pCodec = avcodec_find_decoder(pCodecCtx->codec_id); + avcodec_open2(pCodecCtx, pCodec, nullptr); + + AVPacket *packet = av_packet_alloc(); + AVFrame *frame = av_frame_alloc(); + + QVector curData; + bool flag = false; + while (av_read_frame(pFormatCtx, packet) >= 0 ) { + //stop detector + if (d->stopFlag && curData.size() > 100) { + av_packet_unref(packet); + av_frame_free(&frame); + avcodec_close(pCodecCtx); + avformat_close_input(&pFormatCtx); + avformat_free_context(pFormatCtx); + resample(curData, hash);//刷新波浪条 + d->stopFlag = false; + d->curPath.clear(); + d->curHash.clear(); + return; + } + + if (!flag && curData.size() > 100) { + resample(curData, hash); + flag = true; + } + + while ( av_read_frame(pFormatCtx, packet) >= 0 ) { + if (packet->stream_index == audio_stream_index) { + int state; + state = avcodec_send_packet(pCodecCtx, packet); + av_packet_unref(packet); + if (state != 0) { + continue; + } + + state = avcodec_receive_frame(pCodecCtx, frame); + if (state == 0) { + + quint8 *ptr = frame->extended_data[0]; + if (path.endsWith(".ape") || path.endsWith(".APE")) { + for (int i = 0; i < frame->linesize[0]; i++) { + auto valDate = ((ptr[i]) << 16 | (ptr[i + 1])); + curData.append(valDate + qrand()); + } + } else { + for (int i = 0; i < frame->linesize[0]; i += 1024) { + auto valDate = ((ptr[i]) << 16 | (ptr[i + 1])); + curData.append(valDate); + } + } + } + } + } + av_packet_unref(packet); + } + + av_packet_unref(packet); + av_frame_free(&frame); + avcodec_close(pCodecCtx); + avformat_close_input(&pFormatCtx); + avformat_free_context(pFormatCtx); + + resample(curData, hash); +} + +void MetaBufferDetector::onBufferDetector(const QString &path, const QString &hash) +{ + Q_D(MetaBufferDetector); + QString curHash = d->curHash; + if (hash == curHash/* || true*/) + return; + if (isRunning()) { + d->stopFlag = true; + } + d->curPath = path; + d->curHash = hash; + start(); +} + +void MetaBufferDetector::onClearBufferDetector() +{ + Q_D(MetaBufferDetector); + if (isRunning()) { + d->stopFlag = true; + } + d->curPath.clear(); + d->curHash.clear(); +} + +void MetaBufferDetector::resample(const QVector &buffer, const QString &hash) +{ + QVector t_buffer; + t_buffer.reserve(1001); + if (buffer.size() < 1000) { + t_buffer = buffer; + } else { + int num = buffer.size() / 1000; + float t_curValue = 0; + for (int i = 0; i < buffer.size(); i += num) { + if (i % num == 0) { + t_buffer.append(buffer[i]); + } + } + t_buffer.append(t_curValue); + } + Q_EMIT metaBuffer(t_buffer, hash); +} diff -Nru deepin-music-5.0.1+ds/src/music-player/core/metabufferdetector.h deepin-music-6.0.1.54+ds.1/src/music-player/core/metabufferdetector.h --- deepin-music-5.0.1+ds/src/music-player/core/metabufferdetector.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/metabufferdetector.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include + +#include "libdmusic_global.h" + +class MetaBufferDetectorPrivate; +class LIBDMUSICSHARED_EXPORT MetaBufferDetector : public QThread +{ + Q_OBJECT +public: + explicit MetaBufferDetector(QObject *parent = Q_NULLPTR); + ~MetaBufferDetector(); + + void run(); + +public slots: + void onBufferDetector(const QString &path, const QString &hash); + void onClearBufferDetector(); + +signals: + void metaBuffer(const QVector &buffer, const QString &hash); + +private: + void resample(const QVector &buffer, const QString &hash); + +private: + QScopedPointer d_ptr; + Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MetaBufferDetector) +}; diff -Nru deepin-music-5.0.1+ds/src/music-player/core/metasearchservice.cpp deepin-music-6.0.1.54+ds.1/src/music-player/core/metasearchservice.cpp --- deepin-music-5.0.1+ds/src/music-player/core/metasearchservice.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/metasearchservice.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -32,7 +32,7 @@ #include "util/global.h" #include "pluginmanager.h" - +#include static QString cacheLyricPath(const MetaPtr meta) { @@ -149,12 +149,16 @@ QByteArray MetaSearchService::coverData(const MetaPtr meta) { - Q_ASSERT(!meta.isNull()); - QFile coverFile(cacheCoverPath(meta)); - if (coverFile.open(QIODevice::ReadOnly)) { - return coverFile.readAll(); +// Q_ASSERT(!meta.isNull()); +// QFile coverFile(cacheCoverPath(meta)); +// if (coverFile.open(QIODevice::ReadOnly)) { +// return coverFile.readAll(); +// } + QByteArray byteArray; + if (meta) { + byteArray = meta->getCoverData(Global::cacheDir()); } - return QByteArray(); + return byteArray; } QByteArray MetaSearchService::lyricData(const MetaPtr meta) diff -Nru deepin-music-5.0.1+ds/src/music-player/core/metasearchservice.h deepin-music-6.0.1.54+ds.1/src/music-player/core/metasearchservice.h --- deepin-music-5.0.1+ds/src/music-player/core/metasearchservice.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/metasearchservice.h 2020-07-14 12:05:00.000000000 +0000 @@ -23,6 +23,7 @@ #include #include +#include #include #include @@ -43,8 +44,8 @@ static QByteArray lyricData(const MetaPtr meta); signals: - void lyricSearchFinished(const MetaPtr meta, const DMusic::SearchMeta & song, const QByteArray &lyricData); - void coverSearchFinished(const MetaPtr meta, const DMusic::SearchMeta & song, const QByteArray &coverData); + void lyricSearchFinished(const MetaPtr meta, const DMusic::SearchMeta &song, const QByteArray &lyricData); + void coverSearchFinished(const MetaPtr meta, const DMusic::SearchMeta &song, const QByteArray &coverData); void contextSearchFinished(const QString &context, const QList &metalist); public slots: @@ -53,7 +54,7 @@ void onChangeMetaCache(const MetaPtr meta, const DMusic::SearchMeta &search); private: - explicit MetaSearchService(QObject *parent = 0); + explicit MetaSearchService(QObject *parent = nullptr); friend class DMusic::DSingleton; diff -Nru deepin-music-5.0.1+ds/src/music-player/core/musicsettings.h deepin-music-6.0.1.54+ds.1/src/music-player/core/musicsettings.h --- deepin-music-5.0.1+ds/src/music-player/core/musicsettings.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/musicsettings.h 2020-07-14 12:05:00.000000000 +0000 @@ -28,7 +28,7 @@ { Q_OBJECT public: - explicit MusicSettings(QObject *parent = 0); + explicit MusicSettings(QObject *parent = nullptr); ~MusicSettings(); static void init(); diff -Nru deepin-music-5.0.1+ds/src/music-player/core/player.cpp deepin-music-6.0.1.54+ds.1/src/music-player/core/player.cpp --- deepin-music-5.0.1+ds/src/music-player/core/player.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/player.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -20,17 +20,43 @@ */ #include "player.h" +#include "AudioBufferDevice.h" +#include "AudioPlayer.h" #include #include #include #include #include -#include "metasearchservice.h" - +#include +#include #include +#include +#include +#include +#include +#include +#include + #include +#include "metasearchservice.h" +#include "util/dbusutils.h" +#include "util/global.h" +#include + +#include +#include "vlc/Audio.h" +#include "vlc/Error.h" +#include "vlc/Common.h" +#include "vlc/Enums.h" +#include "vlc/Instance.h" +#include "vlc/Media.h" +#include "vlc/MediaPlayer.h" +#include "vlc/Equalizer.h" + +#include "core/musicsettings.h" + DCORE_USE_NAMESPACE static QMap sSupportedSuffix; @@ -38,13 +64,24 @@ static QStringList sSupportedFiterList; static QStringList sSupportedMimeTypes; -static const int sFadeInOutAnimationDuration = 400; //ms +static const int sFadeInOutAnimationDuration = 900; //ms void initMiniTypes() { //black list QHash suffixBlacklist; suffixBlacklist.insert("m3u", true); + suffixBlacklist.insert("mid", true); + suffixBlacklist.insert("midi", true); + suffixBlacklist.insert("imy", true); + suffixBlacklist.insert("xmf", true); + suffixBlacklist.insert("mp4", true); + suffixBlacklist.insert("mkv", true); + suffixBlacklist.insert("avi", true); + suffixBlacklist.insert("mpeg4", true); + suffixBlacklist.insert("3gp", true); + suffixBlacklist.insert("flv", true); + suffixBlacklist.insert("ass", true); QHash suffixWhitelist; suffixWhitelist.insert("cue", true); @@ -54,7 +91,7 @@ QMimeDatabase mdb; for (auto &mt : mdb.allMimeTypes()) { - if (mt.name().startsWith("audio/") || mt.name().startsWith("video/")) { + if (mt.name().startsWith("audio/") /*|| mt.name().startsWith("video/")*/) { sSupportedFiterList << mt.filterString(); for (auto &suffix : mt.suffixes()) { if (suffixBlacklist.contains(suffix)) { @@ -103,7 +140,17 @@ public: PlayerPrivate(Player *parent) : q_ptr(parent) { - qplayer = new QMediaPlayer(); +// qplayer = new QMediaPlayer(); +// qplayer->setVolume(100); +// qProbe = new QAudioProbe(); + /*-------AudioPlayer-------*/ +// ioPlayer = new AudioPlayer(); + + qvinstance = new VlcInstance(VlcCommon::args(), nullptr); + qvplayer = new VlcMediaPlayer(qvinstance); + qvplayer->equalizer()->setPreamplification(12); + qvmedia = new VlcMedia(); +// qvplayer->audio()->setVolume(100); } void initConnection(); @@ -119,24 +166,40 @@ bool canSeek = false; bool shuffle = false; bool mute = false; // unused -// double volume = 0; + QString sinkInputPath; Player::PlaybackMode mode = Player::RepeatAll; Player::PlaybackStatus status = Player::InvalidPlaybackStatus; - QMediaPlayer *qplayer; +// QMediaPlayer *qplayer; +// QAudioProbe *qProbe; + /*-------ioPlayer----------*/ +// AudioPlayer *ioPlayer; +// qint64 ioDuration = 0; + + + VlcInstance *qvinstance; + VlcMedia *qvmedia; + VlcMediaPlayer *qvplayer; + bool isamr = false; + PlaylistPtr activePlaylist; + PlaylistPtr curPlaylist; MetaPtr activeMeta; - double volume = 50.0; + int volume = 50.0; bool playOnLoad = true; + bool firstPlayOnLoad = true; //外部双击打开处理一次 bool fadeInOut = true; double fadeInOutFactor = 1.0; + qlonglong m_position = 0;//判断音乐播放的位置 QPropertyAnimation *fadeInAnimation = nullptr; QPropertyAnimation *fadeOutAnimation = nullptr; +// QFileSystemWatcher fileSystemWatcher; + Player *q_ptr; Q_DECLARE_PUBLIC(Player) }; @@ -145,118 +208,213 @@ { Q_Q(Player); - qplayer->setAudioRole(QAudio::MusicRole); - initMiniTypes(); + /*----------ioPlayer connect-----------*/ +// q->connect(ioPlayer->_buffer, &AudioBufferDevice::positionChanged, q, +// [ = ](qint64 position) { + +// //qDebug() << position << "-" << ioDuration; +// Q_EMIT q->positionChanged(position, ioDuration, 20); +// }); + +// q->connect(ioPlayer->_buffer, &AudioBufferDevice::durationChanged, q, +// [ = ](qint64 position) { +// ioDuration++; +// }); + +// q->connect(ioPlayer->_buffer, &AudioBufferDevice::endOfMedia, q, +// [ = ]() { +// qDebug() << "AudioBufferDevice::endOfMedia"; + +// ioPlayer->reset(); +// selectNext(activeMeta, mode); +// }); + + +// q->connect(ioPlayer->_buffer, &AudioBufferDevice::againMedia, q, +// [ = ]() { +// //! 重新加载资源 +// if (playOnLoad && (!activeMeta.isNull()) && QFile::exists(activeMeta->localPath)) { + +// ioDuration = 0; + +// QString temp = activeMeta->localPath; +// if (temp.endsWith(".amr1")) { +//// qplayer->stop(); +// ioPlayer->play(); +// ioPlayer->setSourceFilename(activeMeta->localPath); +// } +// } +// }); + + +// q->connect(q, &Player::sliderReleased, ioPlayer->_buffer, &AudioBufferDevice::sliderReleased); - q->connect(qplayer, &QMediaPlayer::positionChanged, + /*--------------END ioPlayer------------*/ + + + //vlc timeChanged to show + q->connect(qvplayer, &VlcMediaPlayer::timeChanged, q, [ = ](qint64 position) { if (activeMeta.isNull()) { return; } - - auto duration = qplayer->duration(); -// qDebug() << DMusic::lengthString(duration) -// << DMusic::lengthString(position) -// << DMusic::lengthString(activeMeta->offset) -// << DMusic::lengthString(activeMeta->length) -// << activeMeta->title; +// auto duration = qvplayer->time(); + auto duration = position; if (position > 1 && activeMeta->invalid) { Q_EMIT q->mediaError(activePlaylist, activeMeta, Player::NoError); } - // fix len if (activeMeta->length == 0 && duration != 0 && duration > 0) { activeMeta->length = duration; - qDebug() << "update" << activeMeta->length; Q_EMIT q->mediaUpdate(activePlaylist, activeMeta); } - if (position >= activeMeta->offset + activeMeta->length + 1800 && qplayer->state() == QMediaPlayer::PlayingState) { + if (position >= activeMeta->offset + activeMeta->length + 1800 && qvplayer->state() == Vlc::Playing) { qDebug() << "WARN!!! change to next by position change"; QTimer::singleShot(10, [ = ]() { selectNext(activeMeta, mode); }); return; } + Q_EMIT q->positionChanged(position - activeMeta->offset, activeMeta->length, 1); + }); -// qDebug() << position << sFadeInOutAnimationDuration << activeMeta->offset << activeMeta->length; -// qDebug() << position/1000 << sFadeInOutAnimationDuration << activeMeta->offset/1000 << activeMeta->length/1000; -// if (position + (sFadeInOutAnimationDuration) >= activeMeta->offset + activeMeta->length) { -// qDebug() << "start fade out"; -// if (fadeInOut&& !fadeOutAnimation) { -// fadeOutAnimation = new QPropertyAnimation(q, "fadeInOutFactor"); -// fadeOutAnimation->setStartValue(1.0000); -// fadeOutAnimation->setKeyValueAt(0.9999, 0.1000); -// fadeOutAnimation->setEndValue(1.0000); -// fadeOutAnimation->setDuration(sFadeInOutAnimationDuration); -// q->connect(fadeOutAnimation, &QPropertyAnimation::finished, -// q, [ = ]() { -// fadeOutAnimation->deleteLater(); -// fadeOutAnimation = nullptr; -// }); -// fadeOutAnimation->start(); -// } -// } + //vlc stateChanged + q->connect(qvmedia, &VlcMedia::stateChanged, + q, [ = ](Vlc::State status) { + switch (status) { - Q_EMIT q->positionChanged(position - activeMeta->offset, activeMeta->length); - }); + case Vlc::Idle: { + /************************************** + * if settings is mute ,then setmute to dbus + * ************************************/ + if (MusicSettings::value("base.play.mute").toBool()) + q->setMusicMuted(true); + break; + } + case Vlc::Opening: { + break; + } + case Vlc::Buffering: { - q->connect(qplayer, &QMediaPlayer::stateChanged, - q, [ = ](QMediaPlayer::State newState) { - switch (newState) { - case QMediaPlayer::StoppedState: - Q_EMIT q->playbackStatusChanged(Player::Stopped); break; - case QMediaPlayer::PlayingState: + } + case Vlc::Playing: { Q_EMIT q->playbackStatusChanged(Player::Playing); break; - case QMediaPlayer::PausedState: + } + case Vlc::Paused: { Q_EMIT q->playbackStatusChanged(Player::Paused); break; } + case Vlc::Stopped: { + Q_EMIT q->playbackStatusChanged(Player::Stopped); + break; + } + case Vlc::Ended: { + if (qvplayer->time() != 0) { +// qDebug() << qvplayer->time() << qvplayer->length(); + selectNext(activeMeta, mode); + } + break; + } + case Vlc::Error: { + if (!activeMeta.isNull() /*&& !QFile::exists(activeMeta->localPath)*/) { + MetaPtrList removeMusicList; + removeMusicList.append(activeMeta); + curPlaylist->removeMusicList(removeMusicList); + Q_EMIT q->mediaError(activePlaylist, activeMeta, Player::ResourceError); + } + break; + } + + } }); - q->connect(qplayer, &QMediaPlayer::volumeChanged, + q->connect(qvplayer->audio(), &VlcAudio::volumeChanged, q, [ = ](int volume) { - Q_EMIT q->volumeChanged(volume / fadeInOutFactor); + if (fadeInOutFactor < 1.0) { + return; + } + if (volume >= 0) + Q_EMIT q->volumeChanged(volume); + }); + + + q->connect(qvplayer->audio(), &VlcAudio::muteChanged, + q, [ = ](bool mute) { + if (q->isDevValid()) { + Q_EMIT q->mutedChanged(mute); + } else { + qDebug() << "device does not start"; + } + }); + + q->connect(qvinstance, &VlcInstance::sendErrorOccour, + q, [ = ](int err) { + Q_UNUSED(err) + /***************************** + * force stop and play + * ***************************/ + PlaylistPtr pl = q->activePlaylist(); + MetaPtr meta = q->activeMeta(); + q->stop(); + //play + q->playMeta(pl, meta); }); - q->connect(qplayer, &QMediaPlayer::mutedChanged, - q, &Player::mutedChanged); - q->connect(qplayer, &QMediaPlayer::durationChanged, - q, &Player::durationChanged); +// q->connect(qvmedia, &VlcMedia::durationChanged, +// q, &Player::durationChanged); + + /* q->connect(qplayer, &QMediaPlayer::mediaStatusChanged, q, [ = ](QMediaPlayer::MediaStatus status) { -// qDebug() << "change " << status; switch (status) { case QMediaPlayer::LoadedMedia: { //wtf the QMediaPlayer can play image format, 233333333 + if (activeMeta.isNull()) { + qplayer->pause(); + qplayer->stop(); + return; + } QMimeDatabase db; QMimeType type = db.mimeTypeForFile(activeMeta->localPath, QMimeDatabase::MatchContent); if (!sSupportedMimeTypes.contains(type.name())) { qDebug() << "unsupported mime type" << type << activePlaylist << activeMeta; qplayer->pause(); qplayer->stop(); + qDebug() << "===========> QMediaPlayer::LoadedMedia"; Q_EMIT q->mediaError(activePlaylist, activeMeta, Player::FormatError); return; } - if (playOnLoad) { - qplayer->play(); + if (playOnLoad && QFile::exists(activeMeta->localPath)) { + + ioDuration = 0; + + QString temp = activeMeta->localPath; + if (temp.endsWith(".amr1")) { + // qplayer->stop(); + + ioPlayer->play(); + + ioPlayer->setSourceFilename(activeMeta->localPath); + + } else { + // qplayer->play(); + } } break; } case QMediaPlayer::EndOfMedia: { - // next - selectNext(activeMeta, mode); + if (!isamr) + selectNext(activeMeta, mode); break; } case QMediaPlayer::LoadingMedia: { - Q_ASSERT(!activeMeta.isNull()); - break; } case QMediaPlayer::UnknownMediaStatus: @@ -268,43 +426,103 @@ break; } }); - + */ + /* q->connect(qplayer, static_cast(&QMediaPlayer::error), q, [ = ](QMediaPlayer::Error error) { qWarning() << error << activePlaylist << activeMeta; - Q_EMIT q->mediaError(activePlaylist, activeMeta, static_cast(error)); - }); - - q->connect(qplayer, &QMediaPlayer::stateChanged, - q, [ = ](QMediaPlayer::State state) { -// qDebug() << "change " << state; - switch (state) { - case QMediaPlayer::StoppedState: - case QMediaPlayer::PlayingState: - case QMediaPlayer::PausedState: - break; + if (error == QMediaPlayer::ResourceError) { + if (!activeMeta.isNull() && !QFile::exists(activeMeta->localPath)) { + MetaPtrList removeMusicList; + removeMusicList.append(activeMeta); + curPlaylist->removeMusicList(removeMusicList); + Q_EMIT q->mediaError(activePlaylist, activeMeta, static_cast(error)); + } else { + QFileInfo fi("activeMeta->localPath"); + if (!fi.isReadable()) { + MetaPtrList removeMusicList; + removeMusicList.append(activeMeta); + curPlaylist->removeMusicList(removeMusicList); + Q_EMIT q->mediaError(activePlaylist, activeMeta, static_cast(error)); + } + } } }); + */ + + /* + q->connect(&fileSystemWatcher, &QFileSystemWatcher::fileChanged, + q, [ = ](const QString & path) { + if (!QFile::exists(activeMeta->localPath) && !activePlaylist->allmusic().isEmpty()) { + qDebug() << "change " << path; + qplayer->pause(); + qplayer->stop(); + Q_EMIT q->mediaError(activePlaylist, activeMeta, Player::ResourceError); + } + }); + */ } void PlayerPrivate::selectNext(const MetaPtr info, Player::PlaybackMode mode) { Q_Q(Player); - if (!activePlaylist || activePlaylist->isEmpty()) { + if (!curPlaylist || curPlaylist->isEmpty()) { return; } + MetaPtr cinfo = info; + if (cinfo == nullptr) { + for (int i = 0; i < curPlaylist->allmusic().size(); ++i) { + cinfo = curPlaylist->music(i); + if (cinfo != nullptr) + break; + } + } + bool invalidFlag = cinfo->invalid; + if (invalidFlag) { + for (auto curMeta : curPlaylist->allmusic()) { + if (!curMeta->invalid) { + invalidFlag = false; + break; + } + } + } + switch (mode) { case Player::RepeatAll: { - q->playMeta(activePlaylist, activePlaylist->next(info)); + auto curMeta = curPlaylist->next(cinfo); + if (QFile::exists(curMeta->localPath)) { + curMeta->invalid = false; + } + if (curMeta->invalid && !invalidFlag) { + int curNum = 0; + while (curNum < curPlaylist->allmusic().size()) { + curMeta = curPlaylist->next(curMeta); + if (!curMeta->invalid) + break; + } + } + q->playMeta(activePlaylist, curMeta); break; } case Player::RepeatSingle: { - q->playMeta(activePlaylist, info); + q->playMeta(activePlaylist, cinfo); break; } case Player::Shuffle: { - q->playMeta(activePlaylist, activePlaylist->shuffleNext(info)); + auto curMeta = curPlaylist->shuffleNext(cinfo); + if (QFile::exists(curMeta->localPath)) { + curMeta->invalid = false; + } + if (curMeta->invalid && !invalidFlag) { +// int curNum = 0; + while (true) { + curMeta = curPlaylist->shuffleNext(curMeta); + if (!curMeta->invalid || QFile::exists(curMeta->localPath)) + break; + } + } + q->playMeta(activePlaylist, curMeta); break; } } @@ -313,13 +531,35 @@ void PlayerPrivate::selectPrev(const MetaPtr info, Player::PlaybackMode mode) { Q_Q(Player); - if (!activePlaylist || activePlaylist->isEmpty()) { + if (!curPlaylist || curPlaylist->isEmpty()) { return; } + bool invalidFlag = info->invalid; + if (invalidFlag) { + for (auto curMeta : curPlaylist->allmusic()) { + if (!curMeta->invalid) { + invalidFlag = false; + break; + } + } + } + switch (mode) { case Player::RepeatAll: { - q->playMeta(activePlaylist, activePlaylist->prev(info)); + auto curMeta = curPlaylist->prev(info); + if (QFile::exists(curMeta->localPath)) { + curMeta->invalid = false; + } + if (curMeta->invalid && !invalidFlag) { + int curNum = 0; + while (curNum < curPlaylist->allmusic().size()) { + curMeta = curPlaylist->prev(curMeta); + if (!curMeta->invalid || QFile::exists(curMeta->localPath)) + break; + } + } + q->playMeta(activePlaylist, curMeta); break; } case Player::RepeatSingle: { @@ -327,7 +567,19 @@ break; } case Player::Shuffle: { - q->playMeta(activePlaylist, activePlaylist->shufflePrev(info)); + auto curMeta = curPlaylist->shufflePrev(info); + if (QFile::exists(curMeta->localPath)) { + curMeta->invalid = false; + } + if (curMeta->invalid && !invalidFlag) { + //int curNum = 0; + while (true) { + curMeta = curPlaylist->shufflePrev(curMeta); + if (!curMeta->invalid || QFile::exists(curMeta->localPath)) + break; + } + } + q->playMeta(activePlaylist, curMeta); break; } } @@ -335,6 +587,7 @@ Player::Player(QObject *parent) : QObject(parent), d_ptr(new PlayerPrivate(this)) { + initMiniTypes(); } void Player::init() @@ -346,14 +599,31 @@ d->initConnection(); } +void Player::setActivePlaylist(PlaylistPtr playlist) +{ + Q_D(Player); + d->activePlaylist = playlist; +} + +void Player::setCurPlaylist(PlaylistPtr curPlaylist) +{ + Q_D(Player); + d->curPlaylist = curPlaylist; +} + Player::~Player() { qDebug() << "destroy Player"; Q_D(Player); - d->qplayer->stop(); - d->qplayer->deleteLater(); +// d->qplayer->stop(); +// d->qplayer->deleteLater(); + +// delete d->qplayer; + + delete d->qvmedia; + delete d->qvplayer; + delete d->qvinstance; - delete d->qplayer; qDebug() << "Player destroyed"; } @@ -366,64 +636,169 @@ << DMusic::lengthString(meta->length); Q_D(Player); d->activeMeta = meta; - d->activePlaylist = playlist; + if (playlist->id() != PlayMusicListID) + d->activePlaylist = playlist; - d->qplayer->blockSignals(true); - d->qplayer->setMedia(QMediaContent(QUrl::fromLocalFile(meta->localPath))); - d->qplayer->blockSignals(false); - d->activePlaylist->play(meta); + //int volume = -1; + d->qvplayer->blockSignals(true); + d->isamr = true; + d->qvmedia->initMedia(meta->localPath, true, d->qvinstance); + d->qvplayer->open(d->qvmedia); + //volume = d->qvplayer->audio()->volume(); + d->qvplayer->play(); + d->qvplayer->audio()->setMute(true); + + + if (!d->activePlaylist.isNull()) + d->activePlaylist->play(meta); + QTimer::singleShot(100, this, [ = ]() {//为了记录进度条生效,在加载的时候让音乐播放100ms + d->qvplayer->pause(); + d->qvplayer->blockSignals(false); + if (!d->activePlaylist.isNull()) + d->activePlaylist->play(meta); + }); } -void Player::playMeta(PlaylistPtr playlist, const MetaPtr meta) +void Player::playMeta(PlaylistPtr playlist, const MetaPtr pmeta) { + Q_D(Player); + MetaPtr meta = pmeta; + if (meta == nullptr) { + if (playlist == nullptr || playlist->isEmpty()) + return; + meta = playlist->first(); + } + + if (QFileInfo(meta->localPath).dir().isEmpty() /*|| access(meta->localPath.toStdString().c_str(),F_OK) != 0*/) { + Q_EMIT mediaError(playlist, meta, Player::ResourceError); + return ; + } + + /************************* + * mute to dbus + * ***********************/ + setDbusMuted(); + + MetaPtr curMeta = meta; + if (curMeta == nullptr) + curMeta = d->curPlaylist->first(); qDebug() << "playMeta" - << meta->title - << DMusic::lengthString(meta->offset) << "/" - << DMusic::lengthString(meta->length); + << curMeta->title + << DMusic::lengthString(curMeta->offset) << "/" + << DMusic::lengthString(curMeta->length); - Q_D(Player); - d->activePlaylist = playlist; + if (curMeta.isNull()) + return; - d->activeMeta = meta; - d->qplayer->setMedia(QMediaContent(QUrl::fromLocalFile(meta->localPath))); - d->qplayer->setPosition(meta->offset); - d->activePlaylist->play(meta); + if (playlist->id() != PlayMusicListID) + d->activePlaylist = playlist; + +// if (d->activePlaylist.isNull()) +// return; + + d->activeMeta = curMeta; +// d->qplayer->setMedia(QMediaContent(QUrl::fromLocalFile(curMeta->localPath))); +// d->qplayer->setPosition(curMeta->offset); + + d->isamr = true; + d->qvmedia->initMedia(curMeta->localPath, true, d->qvinstance); + d->qvplayer->open(d->qvmedia); + d->qvplayer->setTime(curMeta->offset); + d->qvplayer->play(); + + if (!d->activePlaylist.isNull()) + d->activePlaylist->play(curMeta); + d->curPlaylist->play(curMeta); DRecentData data; - data.appName = "Deepin Music"; + data.appName = Global::getAppName(); data.appExec = "deepin-music"; - DRecentManager::addItem(meta->localPath, data); + DRecentManager::addItem(curMeta->localPath, data); - Q_EMIT mediaPlayed(d->activePlaylist, d->activeMeta); + if (!d->activePlaylist.isNull()) { + Q_EMIT mediaPlayed(d->activePlaylist, d->activeMeta); + } else { + Q_EMIT mediaPlayed(d->curPlaylist, d->activeMeta); + } - if (d->qplayer->mediaStatus() == QMediaPlayer::BufferedMedia) { - QTimer::singleShot(100, this, [ = ]() { - d->qplayer->play(); + if (d->firstPlayOnLoad == true) { + d->firstPlayOnLoad = false; + QTimer::singleShot(150, this, [ = ]() { + d->qvplayer->play(); }); } + + if (d->fadeOutAnimation) { + d->fadeOutAnimation->stop(); + d->fadeOutAnimation->deleteLater(); + d->fadeOutAnimation = nullptr; + } + if (d->fadeInOut && !d->fadeInAnimation) { + qDebug() << "start fade in"; + d->fadeInAnimation = new QPropertyAnimation(this, "fadeInOutFactor"); + d->fadeInAnimation->setEasingCurve(QEasingCurve::InCubic); + d->fadeInAnimation->setStartValue(0.10000); + d->fadeInAnimation->setEndValue(1.0000); + d->fadeInAnimation->setDuration(sFadeInOutAnimationDuration); + connect(d->fadeInAnimation, &QPropertyAnimation::finished, + this, [ = ]() { + d->fadeInAnimation->deleteLater(); + d->fadeInAnimation = nullptr; + }); + d->fadeInAnimation->start(); + } } -void Player::resume(PlaylistPtr playlist, const MetaPtr meta) +void Player::resume(PlaylistPtr playlist, const MetaPtr pmeta) { Q_D(Player); - qDebug() << "resume top"; - Q_ASSERT(playlist == d->activePlaylist); - Q_ASSERT(meta->hash == d->activeMeta->hash); - setPlayOnLoaded(true); - QTimer::singleShot(50, this, [ = ]() { - d->qplayer->play(); - }); + MetaPtr meta = pmeta; + if (meta == nullptr) { + if (playlist == nullptr || playlist->isEmpty()) + return; + meta = playlist->first(); + } + + if (QFileInfo(meta->localPath).dir().isEmpty() /*|| access(meta->localPath.toStdString().c_str(),F_OK) != 0*/) { + Q_EMIT mediaError(playlist, meta, Player::ResourceError); + return ; + } + + /***************************************************************************************** + * 1.audio service dbus not start + * 2.audio device not start + * ****************************************************************************************/ + if (d->qvplayer->state() == Vlc::Stopped || (!isDevValid() && d->qvplayer->time() == 0)) { + //reopen data + d->qvmedia->initMedia(meta->localPath, true, d->qvinstance); + d->qvplayer->open(d->qvmedia); + d->qvplayer->setTime(meta->offset); + } if (d->fadeOutAnimation) { + setFadeInOutFactor(1.0); d->fadeOutAnimation->stop(); - d->fadeOutAnimation->deleteLater(); d->fadeOutAnimation = nullptr; } + + qDebug() << "resume top"; + if (playlist == d->activePlaylist && d->qvplayer->state() == Vlc::Playing && meta->hash == d->activeMeta->hash) + return; + + d->activeMeta = meta; + if (d->curPlaylist != nullptr) + d->curPlaylist->play(meta); + setPlayOnLoaded(true); +//增大音乐自动开始播放时间,给setposition留足空间 + QTimer::singleShot(100, this, [ = ]() { + d->qvplayer->play(); + }); + if (d->fadeInOut && !d->fadeInAnimation) { - qDebug() << "start fade in"; d->fadeInAnimation = new QPropertyAnimation(this, "fadeInOutFactor"); - d->fadeInAnimation->setStartValue(0.10000); + d->fadeInAnimation->setEasingCurve(QEasingCurve::InCubic); + d->fadeInAnimation->setStartValue(0.1000); d->fadeInAnimation->setEndValue(1.0000); d->fadeInAnimation->setDuration(sFadeInOutAnimationDuration); connect(d->fadeInAnimation, &QPropertyAnimation::finished, @@ -433,12 +808,19 @@ }); d->fadeInAnimation->start(); } + + if (!d->activePlaylist.isNull() && d->activePlaylist->contains(d->activeMeta)) { + Q_EMIT mediaPlayed(d->activePlaylist, d->activeMeta); + } else { + Q_EMIT mediaPlayed(d->curPlaylist, d->activeMeta); + } } void Player::playNextMeta(PlaylistPtr playlist, const MetaPtr meta) { + Q_UNUSED(playlist) Q_D(Player); - Q_ASSERT(playlist == d->activePlaylist); +// Q_ASSERT(playlist == d->activePlaylist); setPlayOnLoaded(true); if (d->mode == RepeatSingle) { @@ -450,8 +832,9 @@ void Player::playPrevMusic(PlaylistPtr playlist, const MetaPtr meta) { + Q_UNUSED(playlist) Q_D(Player); - Q_ASSERT(playlist == d->activePlaylist); +// Q_ASSERT(playlist == d->activePlaylist); setPlayOnLoaded(true); if (d->mode == RepeatSingle) { @@ -465,45 +848,76 @@ { Q_D(Player); + /*--------suspend--------*/ +// d->ioPlayer->suspend(); + if (d->fadeInAnimation) { + d->fadeInAnimation->stop(); - d->fadeInAnimation->deleteLater(); +// d->fadeInAnimation->deleteLater(); d->fadeInAnimation = nullptr; } if (d->fadeInOut && !d->fadeOutAnimation) { + d->fadeOutAnimation = new QPropertyAnimation(this, "fadeInOutFactor"); + d->fadeOutAnimation->setEasingCurve(QEasingCurve::OutCubic); d->fadeOutAnimation->setStartValue(1.0000); - d->fadeOutAnimation->setKeyValueAt(0.9999, 0.1000); - d->fadeOutAnimation->setEndValue(1.0000); + d->fadeOutAnimation->setEndValue(0.1000); d->fadeOutAnimation->setDuration(sFadeInOutAnimationDuration); connect(d->fadeOutAnimation, &QPropertyAnimation::finished, this, [ = ]() { d->fadeOutAnimation->deleteLater(); d->fadeOutAnimation = nullptr; - d->qplayer->pause(); + d->qvplayer->pause(); + QTimer::singleShot(50, this, [ = ]() { + setFadeInOutFactor(1.0); + }); }); d->fadeOutAnimation->start(); } else { - d->qplayer->pause(); + d->qvplayer->pause(); setFadeInOutFactor(1.0); } } +void Player::pauseNow() +{ + Q_D(Player); + d->qvplayer->pause(); +} + void Player::stop() { Q_D(Player); -// d->qplayer->blockSignals(true); - d->qplayer->pause(); - d->qplayer->setMedia(QMediaContent()); - d->qplayer->stop(); - // d->qplayer->blockSignals(false); + + d->qvplayer->pause(); + d->activeMeta.clear(); //清除当前播放音乐; + d->qvplayer->stop(); + +} +VlcMediaPlayer *Player::core() +{ + Q_D(const Player); + return d->qvplayer; } + Player::PlaybackStatus Player::status() { Q_D(const Player); - return static_cast(d->qplayer->state()); + Vlc::State status = d->qvplayer->state(); + + if (status == Vlc::Playing) { + return PlaybackStatus::Playing; + } else if (status == Vlc::Paused) { + return PlaybackStatus::Paused; + } else if (status == Vlc::Stopped || status == Vlc::Idle) { + return PlaybackStatus::Stopped; + } else { + return PlaybackStatus::InvalidPlaybackStatus; + } + } bool Player::isActiveMeta(MetaPtr meta) const @@ -520,6 +934,12 @@ return d->activeMeta; } +PlaylistPtr Player::curPlaylist() const +{ + Q_D(const Player); + return d->curPlaylist; +} + PlaylistPtr Player::activePlaylist() const { Q_D(const Player); @@ -538,7 +958,7 @@ qlonglong Player::position() const { Q_D(const Player); - return d->qplayer->position(); + return d->qvplayer->time(); } int Player::volume() const @@ -553,10 +973,11 @@ return d->mode; } -bool Player::muted() const +bool Player::muted() { - Q_D(const Player); - return d->qplayer->isMuted(); + //Q_D(const Player); + //return d->qplayer->isMuted(); + return this->isMusicMuted(); } qint64 Player::duration() const @@ -565,12 +986,7 @@ if (d->activeMeta.isNull()) { return 0; } - - if (d->qplayer->duration() == d->activeMeta->length) { - return d->qplayer->duration(); - } else { - return d->activeMeta->length; - } + return d->qvplayer->length(); } double Player::fadeInOutFactor() const @@ -596,6 +1012,26 @@ qCritical() << "Never Changed this" << canControl; } + +//void Player::setIOPosition(qint64 value, qint64 range) +//{ +// Q_D(Player); + +// if (d->playOnLoad && d->activeMeta && QFile::exists(d->activeMeta->localPath)) { + +// QString temp = d->activeMeta->localPath; + +// if (temp.endsWith(".amr1")) { + +// if (value != 0 && d->ioDuration != 0) { +// // qint64 position = (value * d->ioDuration) / range; +// qint64 position = (value * d->ioDuration) / 1000; +// Q_EMIT this->sliderReleased(position); +// } +// } +// } +//} + void Player::setPosition(qlonglong position) { Q_D(const Player); @@ -604,10 +1040,10 @@ return; } - if (d->qplayer->duration() == d->activeMeta->length) { - return d->qplayer->setPosition(position); + if (d->qvplayer->length() == d->activeMeta->length) { + return d->qvplayer->setTime(position); } else { - d->qplayer->setPosition(position + d->activeMeta->offset); + d->qvplayer->setTime(position + d->activeMeta->offset); } } @@ -617,28 +1053,63 @@ d->mode = mode; } -void Player::setVolume(double volume) +void Player::setVolume(int volume) { Q_D(Player); if (volume > 100) { volume = 100; } - if (volume < 0) { volume = 0; } - d->volume = volume; - d->qplayer->blockSignals(true); - d->qplayer->setVolume(d->volume * d->fadeInOutFactor); - d->qplayer->blockSignals(false); +// d->qplayer->blockSignals(true); +// //d->qplayer->setVolume(d->volume * d->fadeInOutFactor); +// d->qplayer->blockSignals(false); + + setMusicVolume((volume + 0.1) / 100.0);//设置到dbus的音量必须大1,设置才会生效 } void Player::setMuted(bool mute) { + //Q_D(Player); + //d->qplayer->setMuted(mute); + setMusicMuted(mute); +} + +void Player::setLocalMuted(bool muted) +{ Q_D(Player); - d->qplayer->setMuted(mute); + d->qvplayer->audio()->setMute(muted); + if (isValidDbusMute()) { + QDBusInterface ainterface("com.deepin.daemon.Audio", d->sinkInputPath, + "com.deepin.daemon.Audio.SinkInput", + QDBusConnection::sessionBus()); + if (!ainterface.isValid()) { + return ; + } + + //调用设置音量 + ainterface.call(QLatin1String("SetMute"), muted); + } +} + +void Player::setDbusMuted(bool muted) +{ + Q_D(Player); + Q_UNUSED(muted) + if (isValidDbusMute()) { + QDBusInterface ainterface("com.deepin.daemon.Audio", d->sinkInputPath, + "com.deepin.daemon.Audio.SinkInput", + QDBusConnection::sessionBus()); + if (!ainterface.isValid()) { + return ; + } + //调用设置音量 + if (MusicSettings::value("base.play.mute").toBool() != d->qvplayer->audio()->getMute()) + ainterface.call(QLatin1String("SetMute"), MusicSettings::value("base.play.mute").toBool()); + } } void Player::setFadeInOutFactor(double fadeInOutFactor) @@ -646,11 +1117,21 @@ Q_D(Player); d->fadeInOutFactor = fadeInOutFactor; // qDebug() << "setFadeInOutFactor" << fadeInOutFactor -// << d->volume *d->fadeInOutFactor << d->volume; - d->qplayer->blockSignals(true); - d->qplayer->setVolume(d->volume * d->fadeInOutFactor); - d->qplayer->blockSignals(false); +// << d->volume *d->fadeInOutFactor << d->volume; +// d->qplayer->blockSignals(true); +// d->qplayer->setVolume(/*d->volume*/100 * d->fadeInOutFactor); +// d->qplayer->blockSignals(false); + +// d->qvplayer->audio()->blockSignals(true); +// d->qvplayer->audio()->setVolume(d->volume * d->fadeInOutFactor); +// d->qvplayer->audio()->blockSignals(false); + + d->qvplayer->equalizer()->blockSignals(true); + d->qvplayer->equalizer()->setPreamplification(12 * d->fadeInOutFactor); + d->qvplayer->equalizer()->blockSignals(false); + + //setMusicVolume(d->volume * d->fadeInOutFactor / 100.0); } void Player::setFadeInOut(bool fadeInOut) @@ -664,3 +1145,200 @@ Q_D(Player); d->playOnLoad = playOnLoaded; } + +void Player::musicFileMiss() +{ + Q_D(Player); + + /*--------Remove the usb flash drive, the music is invalid-------*/ + if (d->activeMeta != nullptr && access(d->activeMeta->localPath.toStdString().c_str(), F_OK) != 0 && (!d->activePlaylist->allmusic().isEmpty())) { + stop(); + + //Q_EMIT mediaError(d->activePlaylist, d->activeMeta, Player::ResourceError); + + d->activeMeta = nullptr; + d->activePlaylist->play(MetaPtr()); + } +} + +void Player::setEqualizer(bool enabled, int curIndex, QList indexbaud) +{ + Q_D(const Player); + if (enabled) { + //非自定义模式时 + if (curIndex > 0) { + d->qvplayer->equalizer()->loadFromPreset(uint(curIndex - 1)); + //设置放大值 + d->qvplayer->equalizer()->setPreamplification(d->qvplayer->equalizer()->preamplification()); + for (int i = 0 ; i < 10; i++) { + //设置频率值 + d->qvplayer->equalizer()->setAmplificationForBandAt(d->qvplayer->equalizer()->amplificationForBandAt(uint(i)), uint(i)); + } + } else { + if (indexbaud.size() == 0) { + return; + } else { + d->qvplayer->equalizer()->setPreamplification(indexbaud.at(0)); + for (int i = 1; i < 11; i++) { + d->qvplayer->equalizer()->setAmplificationForBandAt(indexbaud.at(i), uint(i - 1)); + } + } + } + } +} + +void Player::setEqualizerEnable(bool enable) +{ + Q_D(Player); + d->qvplayer->equalizer()->setEnabled(enable); +} + +void Player::setEqualizerpre(int val) +{ + Q_D(Player); +// qDebug() << "setEqualizerpre" << val ; + d->qvplayer->equalizer()->setPreamplification(val); +} + +void Player::setEqualizerbauds(int index, int val) +{ + Q_D(Player); +// qDebug() << "setEqualizerbauds" << index << val; + d->qvplayer->equalizer()->setAmplificationForBandAt(uint(val), uint(index)); +} + +void Player::setEqualizerCurMode(int curIndex) +{ + Q_D(Player); + //非自定义模式时 + if (curIndex != 0) { + d->qvplayer->equalizer()->loadFromPreset(uint(curIndex - 1)); + //设置放大值 + d->qvplayer->equalizer()->setPreamplification(d->qvplayer->equalizer()->preamplification()); + for (int i = 0 ; i < 10; i++) { + //设置频率值 + d->qvplayer->equalizer()->setAmplificationForBandAt(d->qvplayer->equalizer()->amplificationForBandAt(uint(i)), uint(i)); + } + } +} + +bool Player::isValidDbusMute() +{ + Q_D(Player); + readSinkInputPath(); + if (!d->sinkInputPath.isEmpty()) { + QVariant MuteV = DBusUtils::readDBusProperty("com.deepin.daemon.Audio", d->sinkInputPath, + "com.deepin.daemon.Audio.SinkInput", "Mute"); + + return MuteV.isValid(); + } + + return false; +} + +void Player::readSinkInputPath() +{ + Q_D(Player); +// if (!d->sinkInputPath.isEmpty()) +// return; + QVariant v = DBusUtils::readDBusProperty("com.deepin.daemon.Audio", "/com/deepin/daemon/Audio", + "com.deepin.daemon.Audio", "SinkInputs"); + + if (!v.isValid()) + return; + + QList allSinkInputsList = v.value >(); +// qDebug() << "allSinkInputsListSize: " << allSinkInputsList.size(); + + for (auto curPath : allSinkInputsList) { +// qDebug() << "path: " << curPath.path(); + + QVariant nameV = DBusUtils::readDBusProperty("com.deepin.daemon.Audio", curPath.path(), + "com.deepin.daemon.Audio.SinkInput", "Name"); + + if (!nameV.isValid() || nameV.toString() != Global::getAppName()) + continue; + + d->sinkInputPath = curPath.path(); + break; + } +} + +bool Player::setMusicVolume(double volume) +{ + if (volume > 1.0) { + volume = 1.000; + } + Q_D(Player); + readSinkInputPath(); + + if (!d->sinkInputPath.isEmpty()) { + QDBusInterface ainterface("com.deepin.daemon.Audio", d->sinkInputPath, + "com.deepin.daemon.Audio.SinkInput", + QDBusConnection::sessionBus()); + if (!ainterface.isValid()) { + return false; + } + + //调用设置音量 + ainterface.call(QLatin1String("SetVolume"), volume, false); + + if (qFuzzyCompare(volume, 0.0)) + ainterface.call(QLatin1String("SetMute"), true); + } + + return false; +} + +bool Player::setMusicMuted(bool muted) +{ + Q_D(Player); + readSinkInputPath(); + if (!d->sinkInputPath.isEmpty()) { + QDBusInterface ainterface("com.deepin.daemon.Audio", d->sinkInputPath, + "com.deepin.daemon.Audio.SinkInput", + QDBusConnection::sessionBus()); + if (!ainterface.isValid()) { + return false; + } + + //调用设置音量 + ainterface.call(QLatin1String("SetMute"), muted); + Q_EMIT mutedChanged(muted); + } + + return false; +} + +bool Player::isMusicMuted() +{ + Q_D(Player); + readSinkInputPath(); + + if (!d->sinkInputPath.isEmpty()) { + QVariant MuteV = DBusUtils::readDBusProperty("com.deepin.daemon.Audio", d->sinkInputPath, + "com.deepin.daemon.Audio.SinkInput", "Mute"); + + if (!MuteV.isValid()) { + return false; + } + + return MuteV.toBool(); + } + + return false; +} + +bool Player::isDevValid() +{ + Q_D(Player); + readSinkInputPath(); + + if (!d->sinkInputPath.isEmpty()) { + QVariant MuteV = DBusUtils::readDBusProperty("com.deepin.daemon.Audio", d->sinkInputPath, + "com.deepin.daemon.Audio.SinkInput", "Mute"); + return MuteV.isValid(); + } + + return false; +} diff -Nru deepin-music-5.0.1+ds/src/music-player/core/player.h deepin-music-6.0.1.54+ds.1/src/music-player/core/player.h --- deepin-music-5.0.1+ds/src/music-player/core/player.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/player.h 2020-07-14 12:05:00.000000000 +0000 @@ -30,7 +30,9 @@ #include #include "playlist.h" +#include "vlc/MediaPlayer.h" +class QAudioBuffer; class PlayerPrivate; class Player : public QObject, public DMusic::DSingleton { @@ -89,23 +91,29 @@ static const int VolumeStep = 10; - explicit Player(QObject *parent = 0); + explicit Player(QObject *parent = nullptr); ~Player(); public: void init(); + void setActivePlaylist(PlaylistPtr playlist); + void setCurPlaylist(PlaylistPtr curPlaylist); void loadMedia(PlaylistPtr playlist, const MetaPtr meta); void playMeta(PlaylistPtr playlist, const MetaPtr meta); void resume(PlaylistPtr playlist, const MetaPtr meta); void playNextMeta(PlaylistPtr playlist, const MetaPtr meta); void playPrevMusic(PlaylistPtr playlist, const MetaPtr meta); void pause(); + void pauseNow(); void stop(); + + VlcMediaPlayer *core(); PlaybackStatus status(); bool isActiveMeta(MetaPtr meta) const; MetaPtr activeMeta() const; + PlaylistPtr curPlaylist() const; PlaylistPtr activePlaylist() const; QStringList supportedFilterStringList()const; QStringList supportedSuffixList()const; @@ -133,7 +141,7 @@ // bool shuffle() const; int volume() const; PlaybackMode mode() const; - bool muted() const; + bool muted(); qint64 duration() const; double fadeInOutFactor() const; bool fadeInOut() const; @@ -151,16 +159,23 @@ // void metadataChanged(QVariantMap metadata); // void minimumRateChanged(double minimumRate); void playbackStatusChanged(Player::PlaybackStatus playbackStatus); - void positionChanged(qlonglong position, qlonglong length); + void positionChanged(qlonglong position, qlonglong length, qint64 coefficient); + void sliderReleased(qint64 value); + // void rateChanged(double rate); // void shuffleChanged(bool shuffle); - void volumeChanged(double volume); + void volumeChanged(int volume); void modeChanged(PlaybackMode mode); void mutedChanged(bool muted); + /************************************************ + * local mute operation + * *********************************************/ + void localMutedChanged(); void durationChanged(qint64 duration); void fadeInOutFactorChanged(double fadeInOutFactor); void fadeInOutChanged(bool fadeInOut); void playOnLoadedChanged(bool playOnLoaded); + void audioBufferProbed(const QAudioBuffer &buffer); public slots: void setCanControl(bool canControl); @@ -175,15 +190,42 @@ // void setMinimumRate(double minimumRate); // void setPlaybackStatus(PlaybackStatus playbackStatus); void setPosition(qlonglong position); +// void setIOPosition(qint64 value, qint64 range); + void setMode(PlaybackMode mode); // void setRate(double rate); // void setShuffle(bool shuffle); - void setVolume(double volume); + void setVolume(int volume); void setMuted(bool muted); + /********************* + * local mute + * *********************/ + void setLocalMuted(bool muted); + /********************* + * to dbus mute + * *********************/ + void setDbusMuted(bool muted = false); + void setFadeInOutFactor(double fadeInOutFactor); void setFadeInOut(bool fadeInOut); void setPlayOnLoaded(bool playOnLoaded); - + void musicFileMiss(); + void setEqualizer(bool enabled, int curIndex, QList indexbaud); + void setEqualizerEnable(bool enable); + void setEqualizerpre(int val); + void setEqualizerbauds(int index, int val); + void setEqualizerCurMode(int curIndex); + /*********************************************** + * if player stat is stop state or + * device does not start + * **********************************/ + bool isValidDbusMute(); +private: + void readSinkInputPath(); + bool setMusicVolume(double volume); + bool setMusicMuted(bool muted); + bool isMusicMuted(); + bool isDevValid(); private: friend class DMusic::DSingleton; QScopedPointer d_ptr; diff -Nru deepin-music-5.0.1+ds/src/music-player/core/playlist.cpp deepin-music-6.0.1.54+ds.1/src/music-player/core/playlist.cpp --- deepin-music-5.0.1+ds/src/music-player/core/playlist.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/playlist.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -28,6 +28,9 @@ #include #include +#include "../core/metasearchservice.h" +#include "util/pinyinsearch.h" + #include "medialibrary.h" #include "mediadatabase.h" @@ -152,6 +155,16 @@ return playlistMeta.playing; } +bool Playlist::playingStatus() const +{ + return playlistMeta.playStatus; +} + +void Playlist::setPlayingStatus(bool status) +{ + playlistMeta.playStatus = status; +} + int Playlist::index(const QString &hash) { // FIXME: improve performance @@ -161,12 +174,12 @@ bool Playlist::isLast(const MetaPtr meta) const { Q_ASSERT(!meta.isNull()); - return playlistMeta.sortMetas.last() == meta->hash; + return playlistMeta.sortMetas.isEmpty() ? false : playlistMeta.sortMetas.last() == meta->hash; } bool Playlist::contains(const MetaPtr meta) const { -// qDebug() << meta->hash << playlistMeta.metas; + // qDebug() << meta->hash << playlistMeta.metas; return !meta.isNull() && playlistMeta.metas.contains(meta->hash); } @@ -256,6 +269,15 @@ return mlist; } +PlayMusicTypePtrList Playlist::playMusicTypePtrList() const +{ + PlayMusicTypePtrList mlist; + for (auto id : playMusicTypePtrListData.sortMetas) { + mlist << playMusicTypePtrListData.metas.value(id); + } + return mlist; +} + void Playlist::reset(const MetaPtrList metalist) { playlistMeta.sortMetas.clear(); @@ -268,6 +290,46 @@ } } +void Playlist::changePlayMusicTypeOrderType() +{ + playMusicTypePtrListData.orderType = playMusicTypePtrListData.orderType == 0 ? 1 : 0; +} + +void Playlist::setSearchStr(const QString &str) +{ + searchData = str; +} + +QString Playlist::searchStr() const +{ + return searchData; +} + +void Playlist::setViewMode(const int &mode) +{ + viewModeFlag = mode; +} + +int Playlist::viewMode() const +{ + return viewModeFlag; +} + +void Playlist::clearTypePtr() +{ + if (playMusicTypePtrListData.sortMetas.size() > 0) { + playMusicTypePtrListData.sortMetas.clear(); + playMusicTypePtrListData.metas.clear(); + } +} + +void Playlist::appendMusicTypePtrListData(PlayMusicTypePtr musicTypePtr) +{ + playMusicTypePtrListData.sortMetas.append(musicTypePtr->name); + playMusicTypePtrListData.metas.insert(musicTypePtr->name, musicTypePtr); +} + + void Playlist::load() { QMap sortHashs; @@ -333,6 +395,7 @@ { playlistMeta.displayName = name; + QSqlDatabase::database().transaction(); QSqlQuery query; query.prepare("UPDATE playlist SET displayname = :displayname WHERE uuid= :uuid"); query.bindValue(":displayname", playlistMeta.displayName); @@ -342,6 +405,7 @@ qWarning() << query.lastError(); return; } + QSqlDatabase::database().commit(); } void Playlist::appendMusicList(const MetaPtrList metalist) @@ -367,7 +431,7 @@ { Q_ASSERT(!meta.isNull()); if (!playlistMeta.metas.contains(meta->hash)) { -// qWarning() << "no such id in playlist" << meta->hash << meta->localPath << listmeta->displayName; + // qWarning() << "no such id in playlist" << meta->hash << meta->localPath << listmeta->displayName; return; } @@ -394,13 +458,42 @@ MetaPtr Playlist::removeOneMusic(const MetaPtr meta) { - Q_ASSERT(!meta.isNull()); +// Q_ASSERT(!meta.isNull()); + if (meta.isNull()) + return MetaPtr(); if (meta->hash.isEmpty()) { qCritical() << "Cannot remove empty id" << meta->hash << meta->title; return MetaPtr(); } + if (id() == AlbumMusicListID) { + QString albumStr = meta->album; + if (albumStr.isEmpty()) { + albumStr = tr("Unknown album"); + } + if (playMusicTypePtrListData.metas.contains(albumStr)) { + playMusicTypePtrListData.metas[albumStr]->playlistMeta.sortMetas.removeOne(meta->hash); + playMusicTypePtrListData.metas[albumStr]->playlistMeta.metas.remove(meta->hash); + if (playMusicTypePtrListData.metas[albumStr]->playlistMeta.metas.isEmpty()) { + playMusicTypePtrListData.sortMetas.removeOne(albumStr); + playMusicTypePtrListData.metas.remove(albumStr); + } + } + } else if (id() == ArtistMusicListID) { + QString artistStr = meta->artist; + if (artistStr.isEmpty()) { + artistStr = tr("Unknown artist"); + } + if (playMusicTypePtrListData.metas.contains(artistStr)) { + playMusicTypePtrListData.metas[artistStr]->playlistMeta.sortMetas.removeOne(meta->hash); + playMusicTypePtrListData.metas[artistStr]->playlistMeta.metas.remove(meta->hash); + if (playMusicTypePtrListData.metas[artistStr]->playlistMeta.metas.isEmpty()) { + playMusicTypePtrListData.sortMetas.removeOne(artistStr); + playMusicTypePtrListData.metas.remove(artistStr); + } + } + } if (!playlistMeta.metas.contains(meta->hash)) { -// qWarning() << "no such id in playlist" << meta->hash << meta->localPath << listmeta->displayName; + // qWarning() << "no such id in playlist" << meta->hash << meta->localPath << listmeta->displayName; return MetaPtr(); } @@ -432,15 +525,20 @@ bool lessCompareByString(const QString &str1, const QString &str2) { - if (startWithHanzi(str1)) { - if (!startWithHanzi(str2)) { - return false; - } - } else if (startWithHanzi(str2)) { - return true; - } + // if (startWithHanzi(str1)) { + // if (!startWithHanzi(str2)) { + // return false; + // } + // } else if (startWithHanzi(str2)) { + // return true; + // } + + QString curStr1(str1), curStr2(str2); + QStringList strList1 = DMusic::PinyinSearch::simpleChineseSplit(curStr1); + QStringList strList2 = DMusic::PinyinSearch::simpleChineseSplit(curStr2); - return collator.compare(str1, str2) < 0; + QString endStr1 = strList1.join(""), enStr2 = strList2.join(""); + return collator.compare(endStr1, enStr2) < 0; } bool lessThanTimestamp(const MetaPtr v1, const MetaPtr v2) @@ -465,7 +563,7 @@ if (v2->title.isEmpty()) { return true; } -// qDebug() << v1->title << v2->title << collator.compare(v1->title , v2->title); + // qDebug() << v1->title << v2->title << collator.compare(v1->title , v2->title); return lessCompareByString(v1->title, v2->title); } @@ -549,12 +647,15 @@ void Playlist::sortBy(Playlist::SortType sortType) { - playlistMeta.sortType = sortType; - - if (playlistMeta.orderType == Playlist::Ascending) { - playlistMeta.orderType = Playlist::Descending ; + if (playlistMeta.sortType == sortType) { + if (playlistMeta.orderType == Playlist::Ascending) { + playlistMeta.orderType = Playlist::Descending ; + } else { + playlistMeta.orderType = Playlist::Ascending; + } } else { playlistMeta.orderType = Playlist::Ascending; + playlistMeta.sortType = sortType; } MediaDatabase::updatePlaylist(playlistMeta); @@ -562,30 +663,66 @@ resort(); } -void Playlist::resort() +void Playlist::sortPlayMusicTypePtrListData(int sortType) { - collator.setNumericMode(true); - collator.setCaseSensitivity(Qt::CaseInsensitive); - - auto sortType = static_cast(playlistMeta.sortType); - auto orderType = static_cast(playlistMeta.orderType); - if (sortType != Playlist::SortByCustom) { - QList sortList; - - for (auto id : playlistMeta.metas.keys()) { -// qDebug() << playlistMeta.metas.value(id) << id; - sortList << playlistMeta.metas.value(id); + QList sortList; + for (auto id : playMusicTypePtrListData.metas.keys()) { + sortList << playMusicTypePtrListData.metas.value(id); + } + if (playMusicTypePtrListData.orderType == 0) { + if (sortType == 0) { + qSort(sortList.begin(), sortList.end(), [ = ](PlayMusicTypePtr p1, PlayMusicTypePtr p2) { + return lessCompareByString(p1->name, p2->name); + }); + } else { + qSort(sortList.begin(), sortList.end(), [ = ](PlayMusicTypePtr p1, PlayMusicTypePtr p2) { + return p1->timestamp < p2->timestamp; + }); + } + } else { + if (sortType == 0) { + qSort(sortList.begin(), sortList.end(), [ = ](PlayMusicTypePtr p1, PlayMusicTypePtr p2) { + return !lessCompareByString(p1->name, p2->name); + }); + } else { + qSort(sortList.begin(), sortList.end(), [ = ](PlayMusicTypePtr p1, PlayMusicTypePtr p2) { + return p1->timestamp > p2->timestamp; + }); } + } - qSort(sortList.begin(), sortList.end(), - getSortFunction(sortType, orderType)); + playMusicTypePtrListData.sortMetas.clear(); + for (auto i = 0; i < sortList.size(); ++i) { + playMusicTypePtrListData.sortMetas << sortList[i]->name; + } +} - QMap hashIndexs; - for (auto i = 0; i < sortList.length(); ++i) { - hashIndexs.insert(sortList.value(i)->hash, i); - } +void Playlist::resort() +{ + if (playlistMeta.uuid != AlbumMusicListID || playlistMeta.uuid != ArtistMusicListID) { + collator.setNumericMode(true); + collator.setCaseSensitivity(Qt::CaseInsensitive); + + auto sortType = static_cast(playlistMeta.sortType); + auto orderType = static_cast(playlistMeta.orderType); + if (sortType != Playlist::SortByCustom) { + QList sortList; + + for (auto id : playlistMeta.metas.keys()) { + // qDebug() << playlistMeta.metas.value(id) << id; + sortList << playlistMeta.metas.value(id); + } + + qSort(sortList.begin(), sortList.end(), + getSortFunction(sortType, orderType)); + + QMap hashIndexs; + for (auto i = 0; i < sortList.length(); ++i) { + hashIndexs.insert(sortList.value(i)->hash, i); + } - saveSort(hashIndexs); + saveSort(hashIndexs); + } } } @@ -613,3 +750,119 @@ playlistMeta.sortMetas << sortHashs.value(i); } } + +void Playlist::metaListToPlayMusicTypePtrList(Playlist::SortType sortType, const MetaPtrList metalist) +{ + playMusicTypePtrListData.sortMetas.clear(); + playMusicTypePtrListData.metas.clear(); + if (sortType == SortByAblum) { + for (auto meta : metalist) { + QString albumStr = meta->album; + if (albumStr.isEmpty()) { + albumStr = tr("Unknown album"); + } + QString artistStr = meta->artist; + if (artistStr.isEmpty()) { + artistStr = tr("Unknown artist"); + } + if (playMusicTypePtrListData.metas.contains(albumStr)) { + if (playMusicTypePtrListData.metas[albumStr]->playlistMeta.metas.contains(meta->hash)) { + qDebug() << "skip dump music " << meta->hash << meta->localPath; + continue; + } + if (!playMusicTypePtrListData.metas[albumStr]->extraName.contains(artistStr, Qt::CaseInsensitive)) + playMusicTypePtrListData.metas[albumStr]->extraName += ("&" + artistStr); + if (playMusicTypePtrListData.metas[albumStr]->icon.isNull()) + playMusicTypePtrListData.metas[albumStr]->icon = MetaSearchService::coverData(meta); + if (playMusicTypePtrListData.metas[albumStr]->timestamp < meta->timestamp) + playMusicTypePtrListData.metas[albumStr]->timestamp = meta->timestamp; + playMusicTypePtrListData.metas[albumStr]->playlistMeta.sortMetas << meta->hash; + playMusicTypePtrListData.metas[albumStr]->playlistMeta.metas.insert(meta->hash, meta); + } else { + PlayMusicTypePtr t_playMusicTypePtr(new PlayMusicType); + t_playMusicTypePtr->name = albumStr; + t_playMusicTypePtr->extraName = artistStr; + t_playMusicTypePtr->icon = MetaSearchService::coverData(meta); + t_playMusicTypePtr->timestamp = meta->timestamp; + t_playMusicTypePtr->playlistMeta.sortMetas << meta->hash; + t_playMusicTypePtr->playlistMeta.metas.insert(meta->hash, meta); + playMusicTypePtrListData.sortMetas << albumStr; + playMusicTypePtrListData.metas.insert(albumStr, t_playMusicTypePtr); + } + } + } else if (sortType == SortByArtist) { + for (auto meta : metalist) { + QString artistStr = meta->artist; + if (artistStr.isEmpty()) { + artistStr = tr("Unknown artist"); + } + if (playMusicTypePtrListData.metas.contains(artistStr)) { + if (playMusicTypePtrListData.metas[artistStr]->playlistMeta.metas.contains(meta->hash)) { + qDebug() << "skip dump music " << meta->hash << meta->localPath; + continue; + } + if (playMusicTypePtrListData.metas[artistStr]->icon.isNull()) + playMusicTypePtrListData.metas[artistStr]->icon = MetaSearchService::coverData(meta); + if (playMusicTypePtrListData.metas[artistStr]->timestamp < meta->timestamp) + playMusicTypePtrListData.metas[artistStr]->timestamp = meta->timestamp; + playMusicTypePtrListData.metas[artistStr]->playlistMeta.sortMetas << meta->hash; + playMusicTypePtrListData.metas[artistStr]->playlistMeta.metas.insert(meta->hash, meta); + } else { + PlayMusicTypePtr t_playMusicTypePtr(new PlayMusicType); + t_playMusicTypePtr->name = artistStr; + t_playMusicTypePtr->icon = MetaSearchService::coverData(meta); + t_playMusicTypePtr->timestamp = meta->timestamp; + t_playMusicTypePtr->playlistMeta.sortMetas << meta->hash; + t_playMusicTypePtr->playlistMeta.metas.insert(meta->hash, meta); + playMusicTypePtrListData.sortMetas << artistStr; + + playMusicTypePtrListData.metas.insert(artistStr, t_playMusicTypePtr); + } + } + } + sortPlayMusicTypePtrListData(playMusicTypePtrListData.sortType); +} + +void Playlist::playMusicTypeToMeta(QString name, QStringList sortMetas) +{ + //removeMusicList(allmusic()); + playlistMeta.sortMetas.clear(); + playlistMeta.metas.clear(); + MetaPtrList mlist; + for (auto meta : playMusicTypePtrListData.metas) { + if (name.isEmpty() || name == meta->name) { + for (auto hashCode : meta->playlistMeta.sortMetas) { + if (meta->playlistMeta.metas[hashCode] != nullptr) { + mlist << meta->playlistMeta.metas[hashCode]; + } + } + } + } + // appendMusicList(mlist); + MetaPtrList newMetalist; + for (auto meta : mlist) { + // TODO: Get called multiple times, maybe because multi-thread. Should find out why. + if (playlistMeta.metas.contains(meta->hash)) { + qDebug() << "skip dump music " << meta->hash << meta->localPath; + continue; + } + + newMetalist << meta; + playlistMeta.sortMetas << meta->hash; + playlistMeta.metas.insert(meta->hash, meta); + } + if (!name.isEmpty() && sortMetas.size() == playlistMeta.sortMetas.size()) { + bool allFlag = true; + for (auto curStr : playlistMeta.sortMetas) { + if (!sortMetas.contains(curStr)) { + allFlag = false; + break; + } + } + if (allFlag) { + playlistMeta.sortMetas = sortMetas; + } + } + + Q_EMIT MediaDatabase::instance()->insertMusicList(newMetalist, this->playlistMeta); +} diff -Nru deepin-music-5.0.1+ds/src/music-player/core/playlist.h deepin-music-6.0.1.54+ds.1/src/music-player/core/playlist.h --- deepin-music-5.0.1+ds/src/music-player/core/playlist.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/playlist.h 2020-07-14 12:05:00.000000000 +0000 @@ -27,6 +27,34 @@ #include +class PlayMusicType +{ +public: + QString name; + QString extraName; + QByteArray icon; + qint64 timestamp = 0; // addTime; + PlaylistMeta playlistMeta; +}; +typedef QSharedPointer PlayMusicTypePtr; +typedef QList PlayMusicTypePtrList; + +class PlayMusicTypePtrListData +{ +public: + QStringList sortMetas; + + QMap metas; + + int sortType = 0; + int orderType = 0; +}; + +Q_DECLARE_METATYPE(PlayMusicType) +Q_DECLARE_METATYPE(PlayMusicTypePtr) +Q_DECLARE_METATYPE(PlayMusicTypePtrList) +Q_DECLARE_METATYPE(PlayMusicTypePtrListData) + class Playlist : public QObject { Q_OBJECT @@ -34,7 +62,7 @@ Q_PROPERTY(QString displayName READ displayName WRITE setDisplayName NOTIFY displayNameChanged) Q_PROPERTY(bool active READ active WRITE setActive) public: - explicit Playlist(const PlaylistMeta &musiclistinfo, QObject *parent = 0); + explicit Playlist(const PlaylistMeta &musiclistinfo, QObject *parent = nullptr); enum SortType { SortByAddTime = 0, @@ -76,15 +104,29 @@ const MetaPtr music(int index) const; const MetaPtr music(const QString &id) const; const MetaPtr playing() const; + bool playingStatus() const; + void setPlayingStatus(bool Status); int index(const QString &hash); bool isLast(const MetaPtr meta) const; bool contains(const MetaPtr meta) const; MetaPtrList allmusic() const; + PlayMusicTypePtrList playMusicTypePtrList() const; void play(const MetaPtr meta); void reset(const MetaPtrList); + void changePlayMusicTypeOrderType(); + + void setSearchStr(const QString &str); + QString searchStr() const; + + void setViewMode(const int &mode); + int viewMode() const; + + void clearTypePtr(); + void appendMusicTypePtrListData(PlayMusicTypePtr musicTypePtr); + public slots: void setDisplayName(const QString &name); void appendMusicList(const MetaPtrList metalist); @@ -95,6 +137,10 @@ void resort(); void saveSort(QMap hashIndexs); + void metaListToPlayMusicTypePtrList(Playlist::SortType sortType, const MetaPtrList metalist); + void playMusicTypeToMeta(QString name = "", QStringList sortMetas = QStringList()); + void sortPlayMusicTypePtrListData(int sortType); + public: void load(); @@ -114,10 +160,13 @@ }; PlaylistMeta playlistMeta; + PlayMusicTypePtrListData playMusicTypePtrListData; MetaPtrList shuffleList; MetaPtrList shuffleHistory; ShuffleHistoryState shuffleHistoryState = ShuffleHistoryState::Empty; int shuffleSeed; + QString searchData; + int viewModeFlag = 0; const MetaPtr shuffleTurn(bool forward); }; @@ -127,7 +176,17 @@ Q_DECLARE_METATYPE(PlaylistPtr) Q_DECLARE_METATYPE(QList) +extern const QString AlbumMusicListID; +extern const QString ArtistMusicListID; extern const QString AllMusicListID; extern const QString FavMusicListID; extern const QString SearchMusicListID; +extern const QString PlayMusicListID; +extern const QString AlbumCandListID; +extern const QString MusicCandListID; +extern const QString ArtistCandListID; +extern const QString AlbumResultListID; +extern const QString MusicResultListID; +extern const QString ArtistResultListID; + diff -Nru deepin-music-5.0.1+ds/src/music-player/core/playlistmanager.cpp deepin-music-6.0.1.54+ds.1/src/music-player/core/playlistmanager.cpp --- deepin-music-5.0.1+ds/src/music-player/core/playlistmanager.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/playlistmanager.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -29,10 +29,19 @@ #include "mediadatabase.h" -const QString AllMusicListID = "all"; -const QString FavMusicListID = "fav"; -const QString SearchMusicListID = "search"; -const QString NewMusicListID = "new"; +const QString AlbumMusicListID = "album"; +const QString ArtistMusicListID = "artist"; +const QString AllMusicListID = "all"; +const QString FavMusicListID = "fav"; +const QString PlayMusicListID = "play"; +const QString MusicCandListID = "musicCand"; +const QString AlbumCandListID = "albumCand"; +const QString ArtistCandListID = "artistCand"; +const QString MusicResultListID = "musicResult"; +const QString AlbumResultListID = "albumResult"; +const QString ArtistResultListID = "artistResult"; +const QString SearchMusicListID = "search"; +const QString NewMusicListID = "new"; static PlaylistMeta emptyInfo; @@ -43,7 +52,7 @@ inline uint indexUUID(const QString &uuid) { - return sortUUIDs.indexOf(uuid); + return static_cast(sortUUIDs.indexOf(uuid)); } QStringList sortUUIDs; @@ -108,19 +117,41 @@ QSqlDatabase::database().transaction(); - if (sortUUIDs.size() != d->playlists.size()) { + if (sortUUIDs.size() <= d->playlists.size()) { qWarning() << "playlist order crash, restrot"; d->sortUUIDs.clear(); - d->sortUUIDs << SearchMusicListID << AllMusicListID << FavMusicListID; + d->sortUUIDs << AlbumMusicListID + << ArtistMusicListID + << AllMusicListID + << FavMusicListID + << PlayMusicListID + << MusicCandListID + << AlbumCandListID + << ArtistCandListID + << MusicResultListID + << AlbumResultListID + << ArtistResultListID + << SearchMusicListID + << NewMusicListID; QStringList sortUUIDs; for (auto playlist : d->playlists.values()) { sortUUIDs << playlist->id(); } - sortUUIDs.removeAll(SearchMusicListID); + sortUUIDs.removeAll(AlbumMusicListID); + sortUUIDs.removeAll(ArtistMusicListID); sortUUIDs.removeAll(AllMusicListID); sortUUIDs.removeAll(FavMusicListID); + sortUUIDs.removeAll(PlayMusicListID); + sortUUIDs.removeAll(MusicCandListID); + sortUUIDs.removeAll(AlbumCandListID); + sortUUIDs.removeAll(ArtistCandListID); + sortUUIDs.removeAll(MusicResultListID); + sortUUIDs.removeAll(AlbumResultListID); + sortUUIDs.removeAll(ArtistResultListID); + sortUUIDs.removeAll(SearchMusicListID); + sortUUIDs.removeAll(NewMusicListID); d->sortUUIDs << sortUUIDs; @@ -131,6 +162,18 @@ } } + auto album = playlist(AlbumMusicListID); + auto trAlbumName = tr("Albums"); + if (!album.isNull() && album->displayName() != trAlbumName) { + album->setDisplayName(trAlbumName); + } + + auto artist = playlist(ArtistMusicListID); + auto trArtistName = tr("Artists"); + if (!artist.isNull() && artist->displayName() != trArtistName) { + artist->setDisplayName(trArtistName); + } + auto all = playlist(AllMusicListID); auto trAllName = tr("All Music"); if (!all.isNull() && all->displayName() != trAllName) { @@ -148,6 +191,49 @@ if (!search.isNull() && search->displayName() != searchName) { search->setDisplayName(searchName); } + + auto play = playlist(PlayMusicListID); + auto playName = tr("Play"); + if (!play.isNull() && play->displayName() != playName) { + play->setDisplayName(playName); + } + + auto musicCand = playlist(MusicCandListID); + auto strMusic = tr("All Music"); + if (!musicCand.isNull() && musicCand->displayName() != playName) { + musicCand->setDisplayName(strMusic); + } + + auto albumCand = playlist(AlbumCandListID); + auto strAlbum = tr("Albums"); + if (!albumCand.isNull() && albumCand->displayName() != playName) { + albumCand->setDisplayName(strAlbum); + } + + auto artistCand = playlist(ArtistCandListID); + auto strArtist = tr("Artists"); + if (!artistCand.isNull() && artistCand->displayName() != playName) { + artistCand->setDisplayName(strArtist); + } + + auto musicResult = playlist(MusicResultListID); + auto resMusic = tr("Music"); + if (!musicResult.isNull() && musicResult->displayName() != playName) { + musicResult->setDisplayName(resMusic); + } + + auto albumResult = playlist(AlbumResultListID); + auto resAlbum = tr("Albums"); + if (!albumResult.isNull() && albumResult->displayName() != playName) { + albumResult->setDisplayName(resAlbum); + } + + auto artistResult = playlist(ArtistResultListID); + auto resArtist = tr("Artists"); + if (!artistResult.isNull() && artistResult->displayName() != playName) { + artistResult->setDisplayName(resArtist); + } + QSqlDatabase::database().commit(); } @@ -175,7 +261,8 @@ QList list; for (auto &uuid : d->sortUUIDs) { - list << d->playlists.value(uuid); + if (d->playlists.value(uuid) != nullptr) + list << d->playlists.value(uuid); } return list; } @@ -184,7 +271,7 @@ { Q_D(PlaylistManager); PlaylistMeta saveInfo(listinfo); - saveInfo.sortID = d->sortUUIDs.length(); + saveInfo.sortID = static_cast( d->sortUUIDs.length()); d->sortUUIDs << saveInfo.uuid; insertPlaylist(listinfo.uuid, PlaylistPtr(new Playlist(saveInfo))); MediaDatabase::addPlaylist(saveInfo); @@ -235,6 +322,12 @@ saveSortOrder(); QSqlDatabase::database().commit(); }); + connect(playlist.data(), &Playlist::displayNameChanged, + this, [ = ] (QString displayName) { + QSqlDatabase::database().transaction(); + playlist.data()->setDisplayName(displayName); + QSqlDatabase::database().commit(); + }); connect(playlist.data(), &Playlist::musiclistAdded, this, [ = ](const MetaPtrList metalist) { diff -Nru deepin-music-5.0.1+ds/src/music-player/core/playlistmanager.h deepin-music-6.0.1.54+ds.1/src/music-player/core/playlistmanager.h --- deepin-music-5.0.1+ds/src/music-player/core/playlistmanager.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/playlistmanager.h 2020-07-14 12:05:00.000000000 +0000 @@ -31,7 +31,7 @@ { Q_OBJECT public: - explicit PlaylistManager(QObject *parent = 0); + explicit PlaylistManager(QObject *parent = nullptr); ~PlaylistManager(); QString newID(); diff -Nru deepin-music-5.0.1+ds/src/music-player/core/pluginmanager.h deepin-music-6.0.1.54+ds.1/src/music-player/core/pluginmanager.h --- deepin-music-5.0.1+ds/src/music-player/core/pluginmanager.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/pluginmanager.h 2020-07-14 12:05:00.000000000 +0000 @@ -26,10 +26,8 @@ #include "util/singleton.h" -namespace DMusic -{ -namespace Plugin -{ +namespace DMusic { +namespace Plugin { class PluginInterface; enum class PluginType; } @@ -41,7 +39,7 @@ friend class DMusic::DSingleton; public: - explicit PluginManager(QObject *parent = 0); + explicit PluginManager(QObject *parent = nullptr); void init() { diff -Nru deepin-music-5.0.1+ds/src/music-player/core/util/dbusutils.cpp deepin-music-6.0.1.54+ds.1/src/music-player/core/util/dbusutils.cpp --- deepin-music-5.0.1+ds/src/music-player/core/util/dbusutils.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/util/dbusutils.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,57 @@ +#include "dbusutils.h" +#include +#include +#include +#include +#include +#include +#include +#include + +static QMutex mutex; + +DBusUtils::DBusUtils() +{ + +} + +QVariant DBusUtils::readDBusProperty(const QString &service, const QString &path, const QString &interface, const char *propert) +{ + // 创建QDBusInterface接口 + mutex.lock(); + QDBusInterface ainterface(service, path, + interface, + QDBusConnection::sessionBus()); + if (!ainterface.isValid()) { + qDebug() << qPrintable(QDBusConnection::sessionBus().lastError().message()); + QVariant v(0) ; + return v; + } + //调用远程的value方法 + QVariant v = ainterface.property(propert); + mutex.unlock(); + return v; +} +QVariant DBusUtils::readDBusMethod(const QString &service, const QString &path, const QString &interface, const char *method) +{ + // 创建QDBusInterface接口 + QDBusInterface ainterface(service, path, + interface, + QDBusConnection::sessionBus()); + if (!ainterface.isValid()) { + qDebug() << "error:" << qPrintable(QDBusConnection::sessionBus().lastError().message()); + QVariant v(0) ; + return v; + } + //调用远程的value方法 + QDBusReply reply = ainterface.call(method); + if (reply.isValid()) { +// return reply.value(); + QVariant v(0) ; + return v; + } else { + qDebug() << "error1:" << qPrintable(QDBusConnection::sessionBus().lastError().message()); + QVariant v(0) ; + return v; + } +} diff -Nru deepin-music-5.0.1+ds/src/music-player/core/util/dbusutils.h deepin-music-6.0.1.54+ds.1/src/music-player/core/util/dbusutils.h --- deepin-music-5.0.1+ds/src/music-player/core/util/dbusutils.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/util/dbusutils.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,14 @@ +#ifndef DBUSUTILS_H +#define DBUSUTILS_H +#include + + +class DBusUtils +{ +public: + DBusUtils(); + static QVariant readDBusProperty(const QString &service, const QString &path, const QString &interface = QString(), const char *propert = ""); + static QVariant readDBusMethod(const QString &service, const QString &path, const QString &interface, const char *method); +}; + +#endif // DBUSUTILS_H diff -Nru deepin-music-5.0.1+ds/src/music-player/core/util/fft.cpp deepin-music-6.0.1.54+ds.1/src/music-player/core/util/fft.cpp --- deepin-music-5.0.1+ds/src/music-player/core/util/fft.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/util/fft.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,32 @@ +#include "fft.h" +#include + +static const double pi = 3.1415926535898; + +void CFFT::process(complex *Data, int Log2N, int sign) +{ + int i, j, step, length; + complex wn, temp, deltawn; + length = 1 << Log2N; + for (i = 0; i < length; i += 2) { + temp = Data[i]; + Data[i] = Data[i] + Data[i + 1]; + Data[i + 1] = temp - Data[i + 1]; + } + for (i = 2; i <= Log2N; i++) { + wn = 1; + step = 1 << i; + deltawn = complex(cos(2.0 * pi / step), sin(sign * 2.0 * pi / step)); + for (j = 0; j < step / 2; j++) { + for (i = 0; i < length / step; i++) { + temp = Data[i * step + step / 2 + j] * wn; + Data[i * step + step / 2 + j] = Data[i * step + j] - temp; + Data[i * step + j] = Data[i * step + j] + temp; + } + wn = wn * deltawn; + } + } + if (sign == 1) + for (i = 0; i < length; i++) + Data[i] /= length; +} diff -Nru deepin-music-5.0.1+ds/src/music-player/core/util/fft.h deepin-music-6.0.1.54+ds.1/src/music-player/core/util/fft.h --- deepin-music-5.0.1+ds/src/music-player/core/util/fft.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/util/fft.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ +#pragma once +#include +using namespace std; + +class CFFT +{ +public: + static void process(complex *Data, int Log2N, int sign); +private: + CFFT() {} +}; + + diff -Nru deepin-music-5.0.1+ds/src/music-player/core/util/global.cpp deepin-music-6.0.1.54+ds.1/src/music-player/core/util/global.cpp --- deepin-music-5.0.1+ds/src/music-player/core/util/global.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/util/global.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -25,7 +25,7 @@ #include DCORE_USE_NAMESPACE; - +QString appName; QString Global::configPath() { auto userConfigPath = DStandardPaths::standardLocations(QStandardPaths::AppConfigLocation).value(0); @@ -38,3 +38,13 @@ return userCachePath; } +void Global::setAppName(QString name) +{ + appName = name; +} + +QString Global::getAppName() +{ + return appName; +} + diff -Nru deepin-music-5.0.1+ds/src/music-player/core/util/global.h deepin-music-6.0.1.54+ds.1/src/music-player/core/util/global.h --- deepin-music-5.0.1+ds/src/music-player/core/util/global.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/util/global.h 2020-07-14 12:05:00.000000000 +0000 @@ -28,4 +28,7 @@ public: static QString configPath(); static QString cacheDir(); + static void setAppName(QString name); + static QString getAppName(); + }; diff -Nru deepin-music-5.0.1+ds/src/music-player/core/util/inotifyengine.cpp deepin-music-6.0.1.54+ds.1/src/music-player/core/util/inotifyengine.cpp --- deepin-music-5.0.1+ds/src/music-player/core/util/inotifyengine.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/util/inotifyengine.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -156,9 +156,9 @@ } if (event->mask & IN_MOVED_FROM - || event->mask & IN_DELETE) { + || event->mask & IN_DELETE) { // qDebug() << "fileRemoved" << filepath; - Q_EMIT fileRemoved(filepath); + //Q_EMIT fileRemoved(filepath); } } diff -Nru deepin-music-5.0.1+ds/src/music-player/core/util/inotifyfiles.cpp deepin-music-6.0.1.54+ds.1/src/music-player/core/util/inotifyfiles.cpp --- deepin-music-5.0.1+ds/src/music-player/core/util/inotifyfiles.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/util/inotifyfiles.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "inotifyfiles.h" + +#include +#include +#include +#include +#include +#include + +#include + +class InotifyFilesPrivate +{ +public: + QStringList paths; + + QTimer timer; +}; + + +InotifyFiles::InotifyFiles(QObject *parent) + : QObject(parent), d(new InotifyFilesPrivate) +{ + + connect(&d->timer, &QTimer::timeout, this, &InotifyFiles::scanFiles); +} + +InotifyFiles::~InotifyFiles() +{ + +} + +void InotifyFiles::start() +{ + d->timer.start(1000); +} + +void InotifyFiles::clear() +{ + m_mutex.lock(); + d->paths.clear(); + m_mutex.unlock(); +} + +void InotifyFiles::addPaths(const QStringList &paths) +{ + m_mutex.lock(); + d->paths.append(paths); + d->paths.removeDuplicates(); + m_mutex.unlock(); +} + +void InotifyFiles::scanFiles() +{ + QStringList allFiles; + for (int i = 0; i < d->paths.size();) { + if (i >= d->paths.size()) + break; + QStringList strlist; + m_mutex.lock(); + auto curtFile = d->paths[i]; + m_mutex.unlock(); + if (QFileInfo(curtFile).dir().isEmpty()) { + /**************************************************************** + * deal with cd ejecting while Optical drive is still connecting + * or directory did not exsit + * **************************************************************/ + m_mutex.lock(); + d->paths.removeAt(i); + m_mutex.unlock(); + allFiles.append(curtFile); + } else { + /************************************** + * to kown whether the file exists + * ************************************/ + if (access(curtFile.toStdString().c_str(), F_OK) != 0) { + m_mutex.lock(); + d->paths.removeAt(i); + m_mutex.unlock(); + allFiles.append(curtFile); + } else { + i++; + } + } + } + + if (!allFiles.isEmpty()) + emit fileChanged(allFiles); +} + +void InotifyFiles::addPath(const QString &path) +{ + addPaths(QStringList() << path); +} diff -Nru deepin-music-5.0.1+ds/src/music-player/core/util/inotifyfiles.h deepin-music-6.0.1.54+ds.1/src/music-player/core/util/inotifyfiles.h --- deepin-music-5.0.1+ds/src/music-player/core/util/inotifyfiles.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/util/inotifyfiles.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef INOTIFYENGINE_H +#define INOTIFYENGINE_H + +#include +#include +#include + +class QDir; +class InotifyFilesPrivate; +class InotifyFiles : public QObject +{ + Q_OBJECT +public: + explicit InotifyFiles(QObject *parent = 0); + ~InotifyFiles(); + + void start(); + +signals: + void fileChanged(const QStringList &files); + +public slots: + void clear(); + void addPath(const QString &path); + void addPaths(const QStringList &paths); + void scanFiles(); + +private: + QScopedPointer d; + QMutex m_mutex; +}; + +#endif // INOTIFYENGINE_H diff -Nru deepin-music-5.0.1+ds/src/music-player/core/util/musiclyric.cpp deepin-music-6.0.1.54+ds.1/src/music-player/core/util/musiclyric.cpp --- deepin-music-5.0.1+ds/src/music-player/core/util/musiclyric.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/util/musiclyric.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,238 @@ +#include "musiclyric.h" +#include +#include +#include +#include +#include + +#include "util/basetool.h" + +MusicLyric::MusicLyric() +{ + +} + +int MusicLyric::getIndex(qint64 pos) +{ + //采用二分查找 + //时间复杂度O(logn) + int lt, rt, mid; + lt = 0; + rt = postion.count(); + while (lt < rt - 1) { + mid = (lt + rt) >> 1; + if (postion[mid] > pos) rt = mid; + else lt = mid; + } + return lt; +} + +qint64 MusicLyric::getPostion(int index) +{ + if (index < postion.size()) + return postion[index]; + else + return 0; +} + +static QString getFileCodex(QString dir) +{ + QFile fin(dir); + QString code; + if (!fin.open(QIODevice::ReadOnly)) + return code; + +// unsigned char s2; +// fin.read((char *)&s2, sizeof(s2)); +// int p = s2 << 8; +// fin.read((char *)&s2, sizeof(s2)); +// p += s2; + +// switch (p) { +// case 0xfffe: //65534 +// code = "Unicode"; +// break; +// case 0xfeff://65279 +// code = "Unicode big endian"; +// break; +// case 0xefbb://61371 +// code = "UTF-8"; +// break; +// default: +// code = "GB18030"; +// } + + QByteArray data = fin.readAll(); + fin.close(); + code = BaseTool::detectEncode(data, dir); + + return code; +} + +void MusicLyric::getFromFile(QString dir) +{ + qDebug() << "Lyric dir:" << dir << endl; + this->filedir = dir; + //this->offset + this->line.clear(); + this->postion.clear(); + //先使用暴力的字符串匹配,还不会正则表达式 + //时间复杂度O(n) + QString codeStr = getFileCodex(dir); + QFile file(dir); + if (!file.exists()) return; + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) + return; + QTextStream read(&file); + if (!codeStr.isEmpty()) { + read.setCodec(QTextCodec::codecForName(codeStr.toStdString().c_str())); + } + qint64 mm; + double ss = 0.0; + QMap ans; + while (!read.atEnd()) { + QString lineStr = read.readLine(); + if (lineStr.isEmpty() || lineStr[0] != '[') + continue; + QStringList curLineList = lineStr.split('['); + for (auto curLineStr : curLineList) { + + QStringList lineList = curLineStr.split(']'); + if (lineList.isEmpty() || lineList[0].size() < 3) + continue; + + QString str; + if (lineList.size() == 2) + str = lineList[1]; + QString t_timeStr = lineList[0].remove(0, 1); + QStringList t_timelist = t_timeStr.split(':'); + if (t_timelist.size() != 2) + continue; + bool flag = false; + mm = t_timelist[0].toLongLong(&flag, 10); + if (flag) { + ss = t_timelist[1].toDouble(&flag); + if (flag) { + qint64 curtime = (qint64)(ss * 1000) + mm * 60 * 1000; + ans.insert(curtime, str); + } + } + } + + } + + QMap::iterator it; + for (it = ans.begin(); it != ans.end(); ++it) { + this->postion.push_back(it.key()); + this->line.push_back(it.value()); + } +} + +/* +#标识标签(ID-tags) +格式:"[标识名:值]"。大小写等价。 +[ar:艺人名] +[ti:曲名] +[al:专辑名] +[by:编者(指编辑LRC歌词的人)] +[offset:时间补偿值]其单位是秒,正值表示整体提前,负值相反。这是用于总体调整显示快慢的。 + +#时间标签(Time-tag) +格式:"[mm:ss]"或"[mm:ss.fff]"(分钟:秒)。数字必须为非负整数。 +时间标签需位于某行歌词中的句首部分,一行歌词可以包含多个时间标签。 +*/ +void MusicLyric::getFromFileOld(QString dir) +{ + qDebug() << "Lyric dir:" << dir << endl; + this->filedir = dir; + //this->offset + this->line.clear(); + this->postion.clear(); + //先使用暴力的字符串匹配,还不会正则表达式 + //时间复杂度O(n) + QFile file(dir); + if (!file.exists()) return; + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) + return; + QTextStream read(&file); + QChar ch; + bool flag; + qint64 mm; + double ss; + QVector muli; + QMap ans; + QMap::iterator it; + QString sign; + QString val; + QString str; + while (!read.atEnd()) { + for (;;) { + read >> ch; + if (ch == '[' || read.atEnd()) { + if (muli.count()) { + for (int i = 0; i < muli.count(); ++i) + ans.insert(muli[i], str); + } + str = ""; + muli.clear(); + break; + } + str = str + ch; + } + if (read.atEnd()) break; + for (;;) { + read >> ch; + if (ch == ':' || read.atEnd()) break; + sign = sign + ch; + } + if (read.atEnd()) break; + for (;;) { + read >> ch; + if (ch == ']' || read.atEnd()) { + mm = sign.toLongLong(&flag, 10); + //判断sign是否是整数 + if (flag) { + ss = val.toDouble(&flag); + if (flag) { + qint64 curtime = (qint64)(ss * 1000) + mm * 60 * 1000; + muli.push_back(curtime); + } + } + break; + } + val = val + ch; + } + sign = ""; + val = ""; + } + for (it = ans.begin(); it != ans.end(); ++it) { + this->postion.push_back(it.key()); + this->line.push_back(it.value()); + } +} + +bool MusicLyric::getHeadFromFile(QString dir) +{ + QString codeStr = getFileCodex(dir); + QFile file(dir); + if (!file.open(QIODevice::ReadOnly)) + return false; + QTextCodec *codec = QTextCodec::codecForName(codeStr.toStdString().c_str()); + while (!file.atEnd()) { + QByteArray arr = file.readLine(); + QString str = codec->toUnicode(arr); + this->line.push_back(str); + } + file.close(); + return true; +} + +QString MusicLyric::getLineAt(int index) +{ + return line[index]; +} + +int MusicLyric::getCount() +{ + return line.count(); +} diff -Nru deepin-music-5.0.1+ds/src/music-player/core/util/musiclyric.h deepin-music-6.0.1.54+ds.1/src/music-player/core/util/musiclyric.h --- deepin-music-5.0.1+ds/src/music-player/core/util/musiclyric.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/util/musiclyric.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,25 @@ +#ifndef MusicLyric_H +#define MusicLyric_H + +#include + +class MusicLyric +{ +public: + MusicLyric(); + void getFromFile(QString dir); + void getFromFileOld(QString dir); + QString getLineAt(int index); + int getCount(); + int getIndex(qint64 pos); + qint64 getPostion(int index); + bool getHeadFromFile(QString dir); + +private: + QString filedir; + double offset; + QVector postion; + QVector line; +}; + +#endif // LYRIC_H diff -Nru deepin-music-5.0.1+ds/src/music-player/core/vlc/Audio.cpp deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Audio.cpp --- deepin-music-5.0.1+ds/src/music-player/core/vlc/Audio.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Audio.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,233 @@ + + +#include +#include +#include +#include + +#include "Audio.h" +#include "Error.h" +#include "MediaPlayer.h" + +/*! + \private +*/ +class VlcAudioCallbackHelper +{ +public: + static int volumeCallback(vlc_object_t *obj, + const char *name, + vlc_value_t oldVal, + vlc_value_t newVal, + void *data) + { + Q_UNUSED(obj) + Q_UNUSED(name) + Q_UNUSED(oldVal) + + VlcAudio *core = static_cast(data); + emit core->volumeChangedF(newVal.f_float); + int vol = newVal.f_float < 0 ? -1 : qRound(newVal.f_float * 100.f); + emit core->volumeChanged(vol); + return VLC_SUCCESS; + } + + static int muteCallback(vlc_object_t *obj, + const char *name, + vlc_value_t oldVal, + vlc_value_t newVal, + void *data) + { + Q_UNUSED(obj); + Q_UNUSED(name); + Q_UNUSED(oldVal); + + VlcAudio *core = static_cast(data); + if(oldVal.b_bool != newVal.b_bool) + emit core->muteChanged(newVal.b_bool); + return VLC_SUCCESS; + } +}; + +VlcAudio::VlcAudio(VlcMediaPlayer *player) + : QObject(player), + _vlcMediaPlayer(player->core()) +{ + var_AddCallback((vlc_object_t *)_vlcMediaPlayer, "volume", VlcAudioCallbackHelper::volumeCallback, this); + var_AddCallback((vlc_object_t *)_vlcMediaPlayer, "mute", VlcAudioCallbackHelper::muteCallback, this); +} + +VlcAudio::~VlcAudio() +{ + var_DelCallback((vlc_object_t *)_vlcMediaPlayer, "volume", VlcAudioCallbackHelper::volumeCallback, this); + var_DelCallback((vlc_object_t *)_vlcMediaPlayer, "mute", VlcAudioCallbackHelper::muteCallback, this); +} + +bool VlcAudio::getMute() const +{ + bool mute = false; + if (_vlcMediaPlayer) { + mute = libvlc_audio_get_mute(_vlcMediaPlayer); + VlcError::showErrmsg(); + } + + return mute; +} + +void VlcAudio::setVolume(int volume) +{ + if (_vlcMediaPlayer) { + // Don't change if volume is the same + if (volume != VlcAudio::volume()) { + libvlc_audio_set_volume(_vlcMediaPlayer, volume); + VlcError::showErrmsg(); + } + } +} + +void VlcAudio::setTrack(int track) +{ + if (_vlcMediaPlayer) { + libvlc_audio_set_track(_vlcMediaPlayer, track); + VlcError::showErrmsg(); + } +} + +bool VlcAudio::toggleMute() const +{ + if (_vlcMediaPlayer) { + libvlc_audio_toggle_mute(_vlcMediaPlayer); + VlcError::showErrmsg(); + } + + return getMute(); +} + +void VlcAudio::setMute(bool mute) const +{ + if (_vlcMediaPlayer && mute != getMute()) { + libvlc_audio_set_mute(_vlcMediaPlayer, mute); + VlcError::showErrmsg(); + } +} + +int VlcAudio::track() const +{ + int track = -1; + if (_vlcMediaPlayer) { + track = libvlc_audio_get_track(_vlcMediaPlayer); + VlcError::showErrmsg(); + } + + return track; +} + +int VlcAudio::trackCount() const +{ + int count = -1; + if (_vlcMediaPlayer) { + count = libvlc_audio_get_track_count(_vlcMediaPlayer); + VlcError::showErrmsg(); + } + + return count; +} + +QStringList VlcAudio::trackDescription() const +{ + QStringList descriptions; + + if (_vlcMediaPlayer) { + libvlc_track_description_t *desc; + desc = libvlc_audio_get_track_description(_vlcMediaPlayer); + VlcError::showErrmsg(); + + descriptions << QString().fromUtf8(desc->psz_name); + if (trackCount() > 1) { + for (int i = 1; i < trackCount(); i++) { + desc = desc->p_next; + descriptions << QString().fromUtf8(desc->psz_name); + } + } + } + + return descriptions; +} + +QList VlcAudio::trackIds() const +{ + QList ids; + + if (_vlcMediaPlayer) { + libvlc_track_description_t *desc; + desc = libvlc_audio_get_track_description(_vlcMediaPlayer); + VlcError::showErrmsg(); + + ids << desc->i_id; + if (trackCount() > 1) { + for (int i = 1; i < trackCount(); i++) { + desc = desc->p_next; + ids << desc->i_id; + } + } + } + + return ids; +} + +QMap VlcAudio::tracks() const +{ + QMap tracks; + + if (_vlcMediaPlayer) { + libvlc_track_description_t *desc, *first; + first = desc = libvlc_audio_get_track_description(_vlcMediaPlayer); + VlcError::showErrmsg(); + + if (desc != nullptr) { + tracks.insert(desc->i_id, QString().fromUtf8(desc->psz_name)); + if (trackCount() > 1) { + for (int i = 1; i < trackCount(); i++) { + desc = desc->p_next; + tracks.insert(desc->i_id, QString().fromUtf8(desc->psz_name)); + } + } + libvlc_track_description_list_release(first); + } + } + + return tracks; +} + +int VlcAudio::volume() const +{ + int volume = -1; + if (_vlcMediaPlayer) { + volume = libvlc_audio_get_volume(_vlcMediaPlayer); + VlcError::showErrmsg(); + } + + return volume; +} + +Vlc::AudioChannel VlcAudio::channel() const +{ + Vlc::AudioChannel channel = Vlc::AudioChannelError; + if (_vlcMediaPlayer) { + channel = Vlc::AudioChannel(libvlc_audio_get_channel(_vlcMediaPlayer)); + VlcError::showErrmsg(); + } + + return channel; +} + +void VlcAudio::setChannel(Vlc::AudioChannel channel) +{ + if (_vlcMediaPlayer) { + // Don't change if channel is the same + if (channel != VlcAudio::channel()) { + libvlc_audio_set_channel(_vlcMediaPlayer, channel); + VlcError::showErrmsg(); + } + } +} diff -Nru deepin-music-5.0.1+ds/src/music-player/core/vlc/Audio.h deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Audio.h --- deepin-music-5.0.1+ds/src/music-player/core/vlc/Audio.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Audio.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,144 @@ + + +#ifndef VLCQT_AUDIO_H_ +#define VLCQT_AUDIO_H_ + +#include +#include +#include + +#include "Enums.h" + +#include "SharedExportCore.h" + +class VlcMediaPlayer; + +struct libvlc_media_player_t; + +/*! + A group of audio controls functions. +*/ +class VLCQT_CORE_EXPORT VlcAudio : public QObject +{ + Q_OBJECT + friend class VlcAudioCallbackHelper; + +public: + /*! + \brief VlcAudio constructor. + + This constructor creates a new audio manager. + + \param player media player (VlcMediaPlayer *) + */ + explicit VlcAudio(VlcMediaPlayer *player); + + /*! + \brief VlcAudio destructor + */ + ~VlcAudio(); + + /*! + \brief Get current mute state. + \return current mute state (const bool) + */ + bool getMute() const; + +public slots: + /*! + \brief Set current audio level. + \param volume new audio level (int) + */ + void setVolume(int volume); + + /*! + \brief Set current audio track. + \param track new audio track (int) + */ + void setTrack(int track); + + /*! + \brief Toggle mute state. + \return new mute state (const bool) + */ + bool toggleMute() const; + + /*! + \brief Set audio channel. + \param channel new audio channel + */ + void setChannel(Vlc::AudioChannel channel); + + /*! + \brief Set mute state. + \param mute mute state (bool) + */ + void setMute(bool mute) const; + +public: + /*! + \brief Get current audio track. + \return the number of current audio track, or -1 if none (const int) + */ + int track() const; + + /*! + \brief Get number of available audio tracks. + \return the number of available audio tracks, or -1 if unavailable (const int) + */ + int trackCount() const; + + /*! + \brief Get the description of available audio tracks. + \return list with description of available audio tracks (const QStringList) + */ + QStringList trackDescription() const; + + /*! + \brief Get the ids of available audio tracks. + \return list with ids of available audio tracks (const QList) + */ + QList trackIds() const; + + /*! + \brief Get available audio tracks. + \return dictionary with available audio tracks (const QMap) + */ + QMap tracks() const; + + /*! + \brief Get current audio level. + \return current audio level, -1 if media is not playing (const int) + */ + int volume() const; + + /*! + \brief Get audio channel. + \return current audio channel, -1 if error + */ + Vlc::AudioChannel channel() const; + +signals: + /*! + \brief Signal sent when volume has changed. + \param volume new volume (float) + */ + void volumeChangedF(float volume); + + /*! + \brief Signal sent when volume has changed. + \param volume new volume (int) + */ + void volumeChanged(int volume); + + /*! + \brief Signal sent when mute has changed. + \param mute new mute state (bool) + */ + void muteChanged(bool mute); + +private: + libvlc_media_player_t *_vlcMediaPlayer; +}; + +#endif // VLCQT_AUDIO_H_ diff -Nru deepin-music-5.0.1+ds/src/music-player/core/vlc/Common.cpp deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Common.cpp --- deepin-music-5.0.1+ds/src/music-player/core/vlc/Common.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Common.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,31 @@ + +#include "Common.h" + +QStringList VlcCommon::args() +{ + QStringList args_list; + + QString args = qgetenv("VLC_ARGS"); + if (!args.isEmpty()) + args_list << args.split(" ", QString::SkipEmptyParts); + else { + args_list << "--intf=dummy" + << "--no-media-library" + << "--no-stats" + << "--no-osd" + << "--no-loop" + << "--no-video-title-show" + << "--drop-late-frames"; + } + + return args_list; +} + +bool VlcCommon::setPluginPath(const QString &path) +{ + if (qgetenv("VLC_PLUGIN_PATH").isEmpty()) { + return qputenv("VLC_PLUGIN_PATH", path.toLocal8Bit()); + } + + return false; +} diff -Nru deepin-music-5.0.1+ds/src/music-player/core/vlc/Common.h deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Common.h --- deepin-music-5.0.1+ds/src/music-player/core/vlc/Common.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Common.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,27 @@ + + +#ifndef VLCQT_COMMON_H_ +#define VLCQT_COMMON_H_ + +#include +#include + +#include "SharedExportCore.h" + + +namespace VlcCommon { +/*! + \brief Common libvlc arguments + \return libvlc arguments (QStringList) +*/ +VLCQT_CORE_EXPORT QStringList args(); + +/*! + \brief Set plugin path + \param path plugin path (QString) + \return success status +*/ +VLCQT_CORE_EXPORT bool setPluginPath(const QString &path); +} + +#endif // VLCQT_COMMON_H_ diff -Nru deepin-music-5.0.1+ds/src/music-player/core/vlc/Enums.cpp deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Enums.cpp --- deepin-music-5.0.1+ds/src/music-player/core/vlc/Enums.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Enums.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,226 @@ + + +#include "Enums.h" + +Vlc::Vlc(QObject *parent) + : QObject(parent) {} + +QStringList Vlc::logLevel() +{ + QStringList list; + list << "debug" + << "debug" + << "notice" + << "warning" + << "error" + << "disabled"; + + return list; +} + +QStringList Vlc::audioCodec() +{ + QStringList list; + list << "none" + << "mpga" + << "mp3" + << "mp4a" + << "vorb" + << "flac"; + + return list; +} + +QStringList Vlc::audioOutput() +{ + QStringList list; + list << "default"; + + return list; +} + +QStringList Vlc::audioOutputHuman() +{ + QStringList list; + list << "default"; + + return list; +} + +QStringList Vlc::deinterlacing() +{ + QStringList list; + list << "" + << "discard" + << "blend" + << "man" + << "bob" + << "linear" + << "x" + << "yadif" + << "yadif2x" + << "phosphor" + << "ivtc"; + + return list; +} + +QStringList Vlc::mux() +{ + QStringList list; + list << "ts" + << "ps" + << "mp4" + << "ogg" + << "avi"; + + return list; +} + +QStringList Vlc::ratio() +{ + QStringList list; + list << "" + << "ignore" + << "16:9" + << "16:10" + << "185:100" + << "221:100" + << "235:100" + << "239:100" + << "4:3" + << "5:4" + << "5:3" + << "1:1"; + + return list; +} + +QStringList Vlc::ratioHuman() +{ + QStringList list; + list << "" + << "" + << "16:9" + << "16:10" + << "1.85:1" + << "2.21:1" + << "2.35:1" + << "2.39:1" + << "4:3" + << "5:4" + << "5:3" + << "1:1"; + + return list; +} + +QSizeF Vlc::ratioSize(const Vlc::Ratio &ratio) +{ + switch (ratio) { + case Vlc::R_16_9: + return QSizeF(16, 9); + break; + case Vlc::R_16_10: + return QSizeF(16, 10); + break; + case Vlc::R_185_100: + return QSizeF(185, 100); + break; + case Vlc::R_221_100: + return QSizeF(221, 100); + break; + case Vlc::R_235_100: + return QSizeF(235, 100); + break; + case Vlc::R_239_100: + return QSizeF(239, 100); + break; + case Vlc::R_4_3: + return QSizeF(4, 3); + break; + case Vlc::R_5_4: + return QSizeF(5, 4); + break; + case Vlc::R_5_3: + return QSizeF(5, 3); + break; + case Vlc::R_1_1: + return QSizeF(1, 1); + break; + case Vlc::Original: + case Vlc::Ignore: + default: + return QSizeF(0, 0); + break; + } + + return QSizeF(0, 0); +} + +QList Vlc::scale() +{ + QList list; + list << (float)0 + << (float)1.05 + << (float)1.1 + << (float)1.2 + << (float)1.3 + << (float)1.4 + << (float)1.5 + << (float)1.6 + << (float)1.7 + << (float)1.8 + << (float)1.9 + << (float)2.0; + + return list; +} + +QStringList Vlc::videoCodec() +{ + QStringList list; + list << "none" + << "mpgv" + << "mp4v" + << "h264" + << "theora"; + + return list; +} + +QStringList Vlc::videoOutput() +{ + QStringList list; + list << "default"; + +#if defined(Q_OS_LINUX) + list << "x11" + << "xvideo" + << "glx"; +#elif defined(Q_OS_WIN32) + list << "directx" + << "direct3d" + << "opengl"; +#endif + + return list; +} + +QStringList Vlc::videoOutputHuman() +{ + QStringList list; + list << "default"; + +#if defined(Q_OS_LINUX) + list << "X11" + << "XVideo" + << "OpenGL"; +#elif defined(Q_OS_WIN32) + list << "DirectX" + << "Direct3D" + << "OpenGL"; +#endif + + return list; +} diff -Nru deepin-music-5.0.1+ds/src/music-player/core/vlc/Enums.h deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Enums.h --- deepin-music-5.0.1+ds/src/music-player/core/vlc/Enums.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Enums.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,347 @@ + + +#ifndef VLCQT_ENUMS_H_ +#define VLCQT_ENUMS_H_ + +#include +#include +#include + +#include "SharedExportCore.h" + +/*! + \brief Common enumerations +*/ +class VLCQT_CORE_EXPORT Vlc : public QObject // LCOV_EXCL_LINE +{ + Q_OBJECT + + Q_ENUMS(LogLevel) + Q_ENUMS(ActionsType) + Q_ENUMS(AudioChannel) + Q_ENUMS(AudioCodec) + Q_ENUMS(AudioOutput) + Q_ENUMS(Deinterlacing) + Q_ENUMS(FillMode) + Q_ENUMS(Meta) + Q_ENUMS(Mux) + Q_ENUMS(PlaybackMode) + Q_ENUMS(Ratio) + Q_ENUMS(Scale) + Q_ENUMS(State) + Q_ENUMS(VideoCodec) + Q_ENUMS(VideoOutput) + +public: + /*! + \brief Dummy enums constructor. + + This constructor creates a new dummy enums object. + + \param parent object parent (QObject *) + */ + explicit Vlc(QObject *parent = 0); + + // Enums + /*! + \enum LogLevel + \brief libVLC log levels + */ + enum LogLevel { + DebugLevel = 0, + NoticeLevel = 2, + WarningLevel = 3, + ErrorLevel = 4, + DisabledLevel = 5 + }; + + /*! + \enum RenderFormat + \brief Frame format used for custom rendering + */ + enum RenderFormat { + YUVFormat + }; + + /*! + \enum ActionsType + \brief Actions types identifiers + */ + enum ActionsType { + AudioTrack, + Subtitles, + VideoTrack, + Other + }; + + /*! + \enum AudioChannel + \brief Audio channel options + */ + enum AudioChannel { + AudioChannelError = -1, + Stereo = 1, + RStereo = 2, + Left = 3, + Right = 4, + Dolbys = 5 + }; + + /*! + \enum AudioCodec + \brief Audio codecs list + */ + enum AudioCodec { + NoAudio, + MPEG2Audio, + MP3, + MPEG4Audio, + Vorbis, + Flac + }; + + /*! + \enum AudioOutput + \brief Audio outputs list + */ + enum AudioOutput { + DefaultAout + }; + + /*! + \enum Deinterlacing + \brief Supported deinterlacing modes + */ + enum Deinterlacing { + Disabled, + Discard, + Blend, + Mean, + Bob, + Linear, + X, + Yadif, + Yadif2x, + Phospor, + IVTC + }; + + /*! + \enum FillMode + \brief Supported fill modes (QML only) + */ + enum FillMode { + PreserveAspectFit = Qt::KeepAspectRatio, + PreserveAspectCrop = Qt::KeepAspectRatioByExpanding, + Stretch = Qt::IgnoreAspectRatio + }; + + /*! + \enum Meta + \brief Supported meta types + */ + enum Meta { + Title, + Artist, + Genre, + Copyright, + Album, + TrackNumber, + Description, + Rating, + Date, + Setting, + URL, + Language, + NowPlaying, + Publisher, + EncodedBy, + ArtworkURL, + TrackID + }; + + /*! + \enum Mux + \brief Recording output file mux + */ + enum Mux { + TS, + PS, + MP4, + OGG, + AVI + }; + + /*! + \enum PlaybackMode + \brief Playlist playback mode + */ + enum PlaybackMode { + DefaultPlayback, + Loop, + Repeat + }; + + /*! + \enum Ratio + \brief Supported aspect and crop ratios + */ + enum Ratio { + Original, + Ignore, /*!< QML aspect ratio only */ + R_16_9, + R_16_10, + R_185_100, + R_221_100, + R_235_100, + R_239_100, + R_4_3, + R_5_4, + R_5_3, + R_1_1 + }; + + /*! + \enum Scale + \brief Supported scales + */ + enum Scale { + NoScale, + S_1_05, + S_1_1, + S_1_2, + S_1_3, + S_1_4, + S_1_5, + S_1_6, + S_1_7, + S_1_8, + S_1_9, + S_2_0 + }; + + /*! + \enum State + */ + enum State { + Idle, + Opening, + Buffering, + Playing, + Paused, + Stopped, + Ended, + Error + }; + + /*! + \enum VideoCodec + \brief Video codecs list + */ + enum VideoCodec { + NoVideo, + MPEG2Video, + MPEG4Video, + H264, + Theora + }; + + /*! + \enum VideoOutput + \brief Video outputs list + */ + enum VideoOutput { +#if defined(Q_OS_LINUX) + X11, + XVideo, + GLX, +#elif defined(Q_OS_WIN32) + DirectX, + Direct3D, + OpenGL, +#endif + DefaultVout + }; + + // Functions + /*! + \brief Log level strings + \return log level strings (QStringList) + */ + static QStringList logLevel(); + + /*! + \brief Audio codecs strings + \return audio codecs strings (QStringList) + */ + static QStringList audioCodec(); + + /*! + \brief Audio outputs strings + \return audio outputs strings (QStringList) + */ + static QStringList audioOutput(); + + /*! + \brief Audio outputs strings in readable form + \return audio outputs strings (QStringList) + */ + static QStringList audioOutputHuman(); + + /*! + \brief Deinterlacing modes strings + \return deinterlacing strings (QStringList) + */ + static QStringList deinterlacing(); + + /*! + \brief Mux strings + \return mux strings (QStringList) + */ + static QStringList mux(); + + /*! + \brief Aspect and crop ratios strings + \return ratios strings (QStringList) + */ + static QStringList ratio(); + + /*! + \brief Aspect and crop ratios strings in readable form + \return ratios strings (QStringList) + */ + static QStringList ratioHuman(); + + /*! + \brief Aspect and crop ratios converter to QSizeF + \param ratio aspect or crop ratio (Vlc::Ratio) + \return two-dimensional object using floating point precision (QSizeF) + */ + static QSizeF ratioSize(const Vlc::Ratio &ratio); + + /*! + \brief Scale floats + \return scale floats (QList) + */ + static QList scale(); + + /*! + \brief Video codecs strings + \return video codecs strings (QStringList) + */ + static QStringList videoCodec(); + + /*! + \brief Video outputs strings + \return video outputs strings (QStringList) + */ + static QStringList videoOutput(); + + /*! + \brief Video outputs strings in readable form + \return video outputs strings (QStringList) + */ + static QStringList videoOutputHuman(); +}; + +#endif // VLCQT_ENUMS_H_ diff -Nru deepin-music-5.0.1+ds/src/music-player/core/vlc/Equalizer.cpp deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Equalizer.cpp --- deepin-music-5.0.1+ds/src/music-player/core/vlc/Equalizer.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Equalizer.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,119 @@ + +#include +#include + +#include "Equalizer.h" +#include "error.h" +#include "MediaPlayer.h" + +VlcEqualizer::VlcEqualizer(VlcMediaPlayer *vlcMediaPlayer) + : QObject(vlcMediaPlayer), + _vlcMediaPlayer(vlcMediaPlayer), + _vlcEqualizer(libvlc_audio_equalizer_new()) {} + +VlcEqualizer::~VlcEqualizer() +{ + if (_vlcEqualizer) { + libvlc_audio_equalizer_release(_vlcEqualizer); + } +} + +float VlcEqualizer::amplificationForBandAt(uint bandIndex) const +{ + if (_vlcEqualizer) { + float ret = libvlc_audio_equalizer_get_amp_at_index(_vlcEqualizer, bandIndex); + if (!std::isnan(ret)) { + return ret; + } + } + return -1.0; +} + +uint VlcEqualizer::bandCount() const +{ + if (_vlcEqualizer) { + return libvlc_audio_equalizer_get_band_count(); + } else { + return 0; + } +} + +float VlcEqualizer::bandFrequency(uint bandIndex) const +{ + if (_vlcEqualizer) { + return libvlc_audio_equalizer_get_band_frequency(bandIndex); + } else { + return -1.0; + } +} + +float VlcEqualizer::preamplification() const +{ + if (_vlcEqualizer) { + return libvlc_audio_equalizer_get_preamp(_vlcEqualizer); + } else { + return 0.0; + } +} + +uint VlcEqualizer::presetCount() const +{ + return libvlc_audio_equalizer_get_preset_count(); +} + +QString VlcEqualizer::presetNameAt(uint index) const +{ + const char *name = libvlc_audio_equalizer_get_preset_name(index); + if (name == NULL) { + return QString(); + } else { + return QString(name); + } +} + +void VlcEqualizer::loadFromPreset(uint index) +{ + if (_vlcEqualizer) { + libvlc_audio_equalizer_release(_vlcEqualizer); + } + //18:The custom mode + if (index < 18) { + _vlcEqualizer = libvlc_audio_equalizer_new_from_preset(index); + if (_vlcEqualizer) { + emit presetLoaded(); + } + } else { + _vlcEqualizer = libvlc_audio_equalizer_new(); + } +// VlcError::showErrmsg(); + +} + +void VlcEqualizer::setAmplificationForBandAt(float amp, uint bandIndex) +{ + if (!_vlcEqualizer) { + return; + } + libvlc_audio_equalizer_set_amp_at_index(_vlcEqualizer, amp, bandIndex); + libvlc_media_player_set_equalizer(_vlcMediaPlayer->core(), _vlcEqualizer); +// VlcError::showErrmsg(); +} + +void VlcEqualizer::setEnabled(bool enabled) +{ + if (enabled && _vlcEqualizer != NULL) { + libvlc_media_player_set_equalizer(_vlcMediaPlayer->core(), _vlcEqualizer); + } else { + libvlc_media_player_set_equalizer(_vlcMediaPlayer->core(), NULL); + } +} + +void VlcEqualizer::setPreamplification(float value) +{ + if (!_vlcEqualizer) { + return; + } + libvlc_audio_equalizer_set_preamp(_vlcEqualizer, value); + libvlc_media_player_set_equalizer(_vlcMediaPlayer->core(), _vlcEqualizer); +// VlcError::showErrmsg(); +} diff -Nru deepin-music-5.0.1+ds/src/music-player/core/vlc/Equalizer.h deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Equalizer.h --- deepin-music-5.0.1+ds/src/music-player/core/vlc/Equalizer.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Equalizer.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,125 @@ + + +#ifndef VLCQT_EQUALIZER_H_ +#define VLCQT_EQUALIZER_H_ + +#include + +#include "SharedExportCore.h" + +class VlcMediaPlayer; + +struct libvlc_equalizer_t; + +/*! + \class VlcEqualizer Equalizer.h VLCQtCore/Equalizer.h + \ingroup VLCQtCore + \brief Audio equalizer + + \since libVLC 2.2 +*/ +class VLCQT_CORE_EXPORT VlcEqualizer : public QObject +{ + Q_OBJECT +public: + /*! + \brief VlcEqualizer constructor + */ + explicit VlcEqualizer(VlcMediaPlayer *vlcMediaPlayer); + + /*! + \brief VlcEqualizer destructor + */ + ~VlcEqualizer(); + + /*! + \brief Get the amplification value for a particular equalizer frequency band. + \param bandIndex index, counting from zero, of the frequency band to get + \return amplification value (Hz); -1.0 if there is no such frequency band + */ + float amplificationForBandAt(uint bandIndex) const; + + /*! + \brief Get the number of distinct frequency bands for an equalizer. + \return number of frequency bands + */ + uint bandCount() const; + + /*! + \brief Get a particular equalizer band frequency. + + This value can be used, for example, to create a label for an equalizer band control in a user interface. + + \param bandIndex index of the band, counting from zero + \return equalizer band frequency (Hz), or -1 if there is no such band + */ + float bandFrequency(uint bandIndex) const; + + /*! + \brief Get the current pre-amplification value from an equalizer. + \return preamp value (Hz) + */ + float preamplification() const; + + /*! + \brief Get the number of equalizer presets. + \return number of presets + */ + uint presetCount() const; + + /*! + \brief Get the name of a particular equalizer preset. + + This name can be used, for example, to prepare a preset label or menu in a user interface. + + \param index index of the preset, counting from zero + \return preset name, or an empty string if there is no such preset + */ + QString presetNameAt(uint index) const; + +public slots: + /*! + \brief Load from preset + \param index index of the preset, counting from zero + */ + void loadFromPreset(uint index); + + /*! + \brief Set a new amplification value for a particular equalizer frequency band. + + The new equalizer settings are subsequently applied to a media player by invoking libvlc_media_player_set_equalizer(). + The supplied amplification value will be clamped to the -20.0 to +20.0 range. + + \param amp amplification value (-20.0 to 20.0 Hz) + \param bandIndex counting from zero, of the frequency band to set + */ + void setAmplificationForBandAt(float amp, uint bandIndex); + + /*! + \brief Enable or disable equalizer + \param enabled toggle flag + */ + void setEnabled(bool enabled); + + /*! + \brief Set a new pre-amplification value for an equalizer. + + The new equalizer settings are subsequently applied to a media player by invoking libvlc_media_player_set_equalizer(). + The supplied amplification value will be clamped to the -20.0 to +20.0 range. + + \param value preamp value in (-20.0 to 20.0 Hz) + */ + void setPreamplification(float value); + +signals: + /*! + \brief Emitted when preset is loaded + */ + void presetLoaded(); + +private: + VlcMediaPlayer *_vlcMediaPlayer; + libvlc_equalizer_t *_vlcEqualizer; +}; + +#endif // VLCQT_EQUALIZER_H_ diff -Nru deepin-music-5.0.1+ds/src/music-player/core/vlc/Error.cpp deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Error.cpp --- deepin-music-5.0.1+ds/src/music-player/core/vlc/Error.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Error.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,29 @@ + + +#include +#include + +#include "Error.h" + +QString VlcError::errmsg() +{ + QString error; + if (libvlc_errmsg()) { + error = QString::fromUtf8(libvlc_errmsg()); + libvlc_clearerr(); + } + + return error; +} + +void VlcError::showErrmsg() +{ + // Outputs libvlc error message if there is any + QString error = errmsg(); + if (!error.isEmpty()) { + qWarning() << "VlcError libvlc" + << "Error:" << error; + } +} + +void VlcError::clearerr() {} diff -Nru deepin-music-5.0.1+ds/src/music-player/core/vlc/Error.h deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Error.h --- deepin-music-5.0.1+ds/src/music-player/core/vlc/Error.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Error.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,38 @@ + + +#ifndef VLCQT_ERROR_H_ +#define VLCQT_ERROR_H_ + +#include "SharedExportCore.h" + + +class VLCQT_CORE_EXPORT VlcError +{ +public: + /*! + \brief A human-readable error message for the last libvlc error in the calling thread. + + The resulting string is valid until another error occurs. + \return error message (QString) + \warning There may be no output, if there is no error. + */ + static QString errmsg(); + + /*! + \brief A human-readable error message displayed into standard output for the last libvlc error in the calling thread. + + The resulting string is valid until another error occurs. + \warning There may be no output, if there is no error. + */ + static void showErrmsg(); + + /*! + \brief Clears the libvlc error status for the current thread. + + This does nothing. + + */ + Q_DECL_DEPRECATED static void clearerr(); +}; + +#endif // VLCQT_ERROR_H_ diff -Nru deepin-music-5.0.1+ds/src/music-player/core/vlc/Instance.cpp deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Instance.cpp --- deepin-music-5.0.1+ds/src/music-player/core/vlc/Instance.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Instance.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,238 @@ + + +#include +#include +#include "../util/global.h" +#include +#include "Enums.h" +#include "Error.h" +#include "Instance.h" + + + + +void logCallback(void *data, + int level, + const libvlc_log_t *ctx, + const char *fmt, + va_list args) +{ + Q_UNUSED(ctx) + + VlcInstance *instance = static_cast(data); + if (instance->logLevel() > level) { + return; + } + + char *result; + if (vasprintf(&result, fmt, args) < 0) { + return; // LCOV_EXCL_LINE + } + + QString message(result); + free(result); + + message.prepend("VlcInstance libvlc: "); + switch (level) { + case Vlc::ErrorLevel:{ + qCritical(message.toUtf8().data(), NULL); + if(message.contains("cannot write")) + { + /***************************************** + *vlc write error. we need to stop + * player then start it + * **************************************/ + instance->catchPulseError(0); + } + break; + } + case Vlc::WarningLevel: + qWarning(message.toUtf8().data(), NULL); + break; + case Vlc::NoticeLevel: + case Vlc::DebugLevel: + default: + qDebug(message.toUtf8().data(), NULL); + break; + } +} + +VlcInstance::VlcInstance(const QStringList &args, + QObject *parent) + : QObject(parent), + _vlcInstance(nullptr), + _status(false), + _logLevel(Vlc::ErrorLevel) +{ + Q_UNUSED(args) +// Convert arguments to required format + +// char *argv[args.count()]; +// for (int i = 0; i < args.count(); ++i) +// argv[i] = (char *)qstrdup(args.at(i).toUtf8().data()); + + // Create new libvlc instance +// _vlcInstance = libvlc_new(args.count(), argv); + _vlcInstance = libvlc_new(0, nullptr); + libvlc_set_user_agent(_vlcInstance, Global::getAppName().toStdString().c_str(), "");//name + libvlc_set_app_id(_vlcInstance, "", "", "deepin-music");//icon + + qRegisterMetaType("Vlc::Meta"); + qRegisterMetaType("Vlc::State"); + + VlcError::showErrmsg(); + + // Check if instance is running + if (_vlcInstance) { + libvlc_log_set(_vlcInstance, logCallback, this); + _status = true; + qDebug() << "Using libvlc version:" << version(); + } else { + qCritical() << "VLC Error: libvlc failed to load!"; + } +} + +VlcInstance::~VlcInstance() +{ + if (_status && _vlcInstance) { + libvlc_release(_vlcInstance); + } +} + +libvlc_instance_t *VlcInstance::core() +{ + return _vlcInstance; +} + +bool VlcInstance::status() const +{ + return _status; +} + +Vlc::LogLevel VlcInstance::logLevel() const +{ + return _logLevel; +} + +void VlcInstance::setLogLevel(Vlc::LogLevel level) +{ + _logLevel = level; +} + +//QString VlcInstance::libVersion() +//{ +// QString version; +//#if defined(LIBVLCQT_VERSION) +// version.append(QString(LIBVLCQT_VERSION)); +//#else +// version.append(QString("Unknown")); +//#endif //LIBVLCQT_VERSION + +//#if defined(LIBVLCQT_VERSION_VCS) +// if (QString(LIBVLCQT_VERSION_VCS) != "0" && QString(LIBVLCQT_VERSION_VCS) != "") { +// version.append("-" + QString(LIBVLCQT_VERSION_VCS)); +// } +//#endif //LIBVLCQT_VERSION + +// return version; +//} + +//int VlcInstance::libVersionMajor() +//{ +// int version = -1; +//#if defined(LIBVLCQT_VERSION_MAJOR) +// version = LIBVLCQT_VERSION_MAJOR; +//#endif //LIBVLCQT_VERSION + +// return version; +//} + +//int VlcInstance::libVersionMinor() +//{ +// int version = -1; +//#if defined(LIBVLCQT_VERSION_MINOR) +// version = LIBVLCQT_VERSION_MINOR; +//#endif //LIBVLCQT_VERSION + +// return version; +//} + +QString VlcInstance::changeset() +{ + // Returns libvlc changeset + return QString(libvlc_get_changeset()); +} + +void VlcInstance::catchPulseError(int err) +{ + Q_UNUSED(err) + emit sendErrorOccour(0); +} + +QString VlcInstance::compiler() +{ + // Returns libvlc compiler version + return QString(libvlc_get_compiler()); +} + +QString VlcInstance::version() +{ + // Returns libvlc version + return QString(libvlc_get_version()); +} + + +//void VlcInstance::setAppId(const QString &id, +// const QString &version, +// const QString &icon) +//{ +// libvlc_set_app_id(_vlcInstance, id.toUtf8().data(), version.toUtf8().data(), icon.toUtf8().data()); +//} + +//QList VlcInstance::audioFilterList() const +//{ +// libvlc_module_description_t *original = libvlc_audio_filter_list_get(_vlcInstance); +// if (original == NULL) { +// return QList(); // LCOV_EXCL_LINE +// } + +// libvlc_module_description_t *list = original; +// QList audioFilters; +// do { +// VlcModuleDescription *module = new VlcModuleDescription(VlcModuleDescription::AudioFilter, list->psz_name); +// module->setLongName(list->psz_longname); +// module->setShortName(list->psz_shortname); +// module->setHelp(list->psz_help); +// audioFilters << module; + +// list = list->p_next; +// } while (list->p_next); + +// libvlc_module_description_list_release(original); + +// return audioFilters; +//} + +//QList VlcInstance::videoFilterList() const +//{ +// libvlc_module_description_t *original = libvlc_video_filter_list_get(_vlcInstance); +// if (original == NULL) { +// return QList(); // LCOV_EXCL_LINE +// } + +// libvlc_module_description_t *list = original; +// QList videoFilters; +// do { +// VlcModuleDescription *module = new VlcModuleDescription(VlcModuleDescription::VideoFilter, list->psz_name); +// module->setLongName(list->psz_longname); +// module->setShortName(list->psz_shortname); +// module->setHelp(list->psz_help); +// videoFilters << module; + +// list = list->p_next; +// } while (list->p_next); + +// libvlc_module_description_list_release(original); + +// return videoFilters; +//} diff -Nru deepin-music-5.0.1+ds/src/music-player/core/vlc/Instance.h deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Instance.h --- deepin-music-5.0.1+ds/src/music-player/core/vlc/Instance.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Instance.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,135 @@ + + +#ifndef VLCQT_VLCINSTANCE_H_ +#define VLCQT_VLCINSTANCE_H_ + +#include + +#include "Enums.h" +//#include "SharedExportCore.h" + +//class VlcModuleDescription; + +struct libvlc_instance_t; + + +class VLCQT_CORE_EXPORT VlcInstance : public QObject +{ + Q_OBJECT +public: + /*! + \brief VlcInstance constructor. + + \param args libvlc arguments (QStringList) + \param parent Instance's parent object (QObject *) + */ + explicit VlcInstance(const QStringList &args, + QObject *parent = NULL); + + /*! + VlcInstance destructor + */ + ~VlcInstance(); + + /*! + \brief Returns libvlc instance object. + \return libvlc instance (libvlc_instance_t *) + */ + libvlc_instance_t *core(); + + /*! + \brief Returns libvlc initialisation status. + \return libvlc status (bool) + */ + bool status() const; + + /*! + \brief Returns current log level (default Vlc::ErrorLevel) + \return log level + */ + Vlc::LogLevel logLevel() const; + + /*! + \brief Set current log level + \param level desired log level + \see Vlc::LogLevel + */ + void setLogLevel(Vlc::LogLevel level); + +// static QString libVersion(); + + +// static int libVersionMajor(); + + + static int libVersionMinor(); + + /*! + \brief libvlc version info + \return a string containing the libvlc version (QString) + */ + static QString version(); + + /*! + \brief libvlc compiler info + \return a string containing the compiler version (QString) + */ + static QString compiler(); + + /*! + \brief libvlc changeset info + \return a string containing the changeset (QString) + */ + static QString changeset(); + + /*! + \brief Sets the application name. + + libvlc passes this as the user agent string when a protocol requires it. + + \param application Application name (QString) + \param version Application version (QString) + + \see setAppId + */ +// void setUserAgent(const QString &application, +// const QString &version); + + /*! + \brief Sets the application some meta-information. + + \param id Java-style application identifier, e.g. "com.acme.foobar" + \param version application version numbers, e.g. "1.2.3" + \param icon application icon name, e.g. "foobar" + + \see setUserAgent + */ +// void setAppId(const QString &id, +// const QString &version, +// const QString &icon); + + /*! + \brief List audio filter modules + \return audio filter module description list + */ +// QList audioFilterList() const; + + /*! + \brief List video filter modules + \return video filter module description list + */ +// QList videoFilterList() const; + /** + * @brief catchPulseError catch the exception of pulseaudio + * @param err error level + */ + void catchPulseError(int err); +signals: + void sendErrorOccour(int err); +private: + libvlc_instance_t *_vlcInstance; + bool _status; + Vlc::LogLevel _logLevel; +}; + +#endif // VLCQT_VLCINSTANCE_H_ diff -Nru deepin-music-5.0.1+ds/src/music-player/core/vlc/Media.cpp deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Media.cpp --- deepin-music-5.0.1+ds/src/music-player/core/vlc/Media.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Media.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,362 @@ + + +#include +#include + +#include + +#include "Error.h" +#include "Instance.h" +#include "Media.h" +//#include "Stats.h" + +VlcMedia::VlcMedia(const QString &location, + bool localFile, + VlcInstance *instance) + : QObject(instance) +{ + initMedia(location, localFile, instance); +} + +VlcMedia::VlcMedia(const QString &location, + VlcInstance *instance) + : QObject(instance) +{ + initMedia(location, false, instance); +} + +VlcMedia::VlcMedia(libvlc_media_t *media) +{ + // Create a new libvlc media descriptor from existing one + _vlcMedia = libvlc_media_duplicate(media); + + VlcError::showErrmsg(); +} +VlcMedia::VlcMedia() +{ + +} + +VlcMedia::~VlcMedia() +{ + removeCoreConnections(); + + libvlc_media_release(_vlcMedia); + + VlcError::showErrmsg(); +} + +libvlc_media_t *VlcMedia::core() +{ + return _vlcMedia; +} + +void VlcMedia::initMedia(const QString &location, + bool localFile, + VlcInstance *instance) +{ + _currentLocation = location; + QString l = location; + if (localFile) + l = QDir::toNativeSeparators(l); + + // Create a new libvlc media descriptor from location + if (localFile) + _vlcMedia = libvlc_media_new_path(instance->core(), l.toUtf8().data()); + else + _vlcMedia = libvlc_media_new_location(instance->core(), l.toUtf8().data()); + + _vlcEvents = libvlc_media_event_manager(_vlcMedia); + + createCoreConnections(); + + VlcError::showErrmsg(); +} + +void VlcMedia::createCoreConnections() +{ + QList list; + list << libvlc_MediaMetaChanged + << libvlc_MediaSubItemAdded + << libvlc_MediaDurationChanged + << libvlc_MediaParsedChanged + << libvlc_MediaFreed + << libvlc_MediaStateChanged; + + foreach (const libvlc_event_e &event, list) { + libvlc_event_attach(_vlcEvents, event, libvlc_callback, this); + } +} + +void VlcMedia::removeCoreConnections() +{ + QList list; + list << libvlc_MediaMetaChanged + << libvlc_MediaSubItemAdded + << libvlc_MediaDurationChanged + << libvlc_MediaParsedChanged + << libvlc_MediaFreed + << libvlc_MediaStateChanged; + + foreach (const libvlc_event_e &event, list) { + libvlc_event_detach(_vlcEvents, event, libvlc_callback, this); + } +} + +bool VlcMedia::parsed() const +{ + int parsed = libvlc_media_is_parsed(_vlcMedia); + + VlcError::showErrmsg(); + + return parsed; +} + +void VlcMedia::parse() +{ + libvlc_media_parse_async(_vlcMedia); + + VlcError::showErrmsg(); +} + +QString VlcMedia::currentLocation() const +{ + return _currentLocation; +} + +//VlcStats *VlcMedia::getStats() +//{ +// libvlc_media_stats_t *coreStats = new libvlc_media_stats_t; + +// VlcStats *stats = new VlcStats; +// stats->valid = libvlc_media_get_stats(_vlcMedia, coreStats); + +// stats->read_bytes = coreStats->i_read_bytes; +// stats->input_bitrate = coreStats->f_input_bitrate; +// stats->demux_read_bytes = coreStats->i_demux_read_bytes; +// stats->demux_bitrate = coreStats->f_demux_bitrate; +// stats->demux_corrupted = coreStats->i_demux_corrupted; +// stats->demux_discontinuity = coreStats->i_demux_discontinuity; +// stats->decoded_video = coreStats->i_decoded_video; +// stats->decoded_audio = coreStats->i_decoded_audio; +// stats->displayed_pictures = coreStats->i_displayed_pictures; +// stats->lost_pictures = coreStats->i_lost_pictures; +// stats->played_abuffers = coreStats->i_played_abuffers; +// stats->lost_abuffers = coreStats->i_lost_abuffers; +// stats->sent_packets = coreStats->i_sent_packets; +// stats->sent_bytes = coreStats->i_sent_bytes; +// stats->send_bitrate = coreStats->f_send_bitrate; + +// return stats; +//} + +Vlc::State VlcMedia::state() const +{ + libvlc_state_t state; + state = libvlc_media_get_state(_vlcMedia); + + VlcError::showErrmsg(); + + return Vlc::State(state); +} + +qint64 VlcMedia::duration() const +{ + libvlc_time_t duration = libvlc_media_get_duration(_vlcMedia); + + VlcError::showErrmsg(); + + return duration; +} + +QString VlcMedia::duplicate(const QString &name, + const QString &path, + const Vlc::Mux &mux) +{ + return record(name, path, mux, true); +} + +QString VlcMedia::duplicate(const QString &name, + const QString &path, + const Vlc::Mux &mux, + const Vlc::AudioCodec &audioCodec, + const Vlc::VideoCodec &videoCodec) +{ + return record(name, path, mux, audioCodec, videoCodec, true); +} + +QString VlcMedia::duplicate(const QString &name, + const QString &path, + const Vlc::Mux &mux, + const Vlc::AudioCodec &audioCodec, + const Vlc::VideoCodec &videoCodec, + int bitrate, + int fps, + int scale) +{ + return record(name, path, mux, audioCodec, videoCodec, bitrate, fps, scale, true); +} + +QString VlcMedia::merge(const QString &name, + const QString &path, + const Vlc::Mux &mux) +{ + QString option1, option2, parameters; + QString l = QDir::toNativeSeparators(path + "/" + name); + + parameters = "gather:std{access=file,mux=%1,dst='%2'}"; + parameters = parameters.arg(Vlc::mux()[mux], l + "." + Vlc::mux()[mux]); + + option1 = ":sout-keep"; + option2 = ":sout=#%1"; + option2 = option2.arg(parameters); + + setOption(option1); + setOption(option2); + + VlcError::showErrmsg(); + + return l + "." + Vlc::mux()[mux]; +} + +QString VlcMedia::record(const QString &name, + const QString &path, + const Vlc::Mux &mux, + bool duplicate) +{ + QString option1, option2, parameters; + QString l = QDir::toNativeSeparators(path + "/" + name); + + parameters = "std{access=file,mux=%1,dst='%2'}"; + parameters = parameters.arg(Vlc::mux()[mux], l + "." + Vlc::mux()[mux]); + + if (duplicate) { + option2 = ":sout=#duplicate{dst=display,dst=\"%1\"}"; + } else { + option2 = ":sout=#%1"; + } + + option1 = ":sout-all"; + option2 = option2.arg(parameters); + + setOption(option1); + setOption(option2); + + VlcError::showErrmsg(); + + return l + "." + Vlc::mux()[mux]; +} + +QString VlcMedia::record(const QString &name, + const QString &path, + const Vlc::Mux &mux, + const Vlc::AudioCodec &audioCodec, + const Vlc::VideoCodec &videoCodec, + bool duplicate) +{ + QString option1, option2, parameters; + QString l = QDir::toNativeSeparators(path + "/" + name); + + parameters = "transcode{vcodec=%1,acodec=%2}:std{access=file,mux=%3,dst='%4'}"; + parameters = parameters.arg(Vlc::videoCodec()[videoCodec], Vlc::audioCodec()[audioCodec], Vlc::mux()[mux], l + "." + Vlc::mux()[mux]); + + if (duplicate) { + option2 = ":sout=#duplicate{dst=display,dst=\"%1\"}"; + } else { + option2 = ":sout=#%1"; + } + + option1 = ":sout-all"; + option2 = option2.arg(parameters); + + setOption(option1); + setOption(option2); + + VlcError::showErrmsg(); + + return l + "." + Vlc::mux()[mux]; +} + +QString VlcMedia::record(const QString &name, + const QString &path, + const Vlc::Mux &mux, + const Vlc::AudioCodec &audioCodec, + const Vlc::VideoCodec &videoCodec, + int bitrate, + int fps, + int scale, + bool duplicate) +{ + QString option1, option2, parameters; + QString l = QDir::toNativeSeparators(path + "/" + name); + + parameters = "transcode{vcodec=%1,vb=%2,fps=%3,scale=%4,acodec=%5}:std{access=file,mux=%6,dst='%7'}"; + parameters = parameters.arg(Vlc::videoCodec()[videoCodec], QString::number(bitrate), QString::number(fps), QString::number(scale), Vlc::audioCodec()[audioCodec], Vlc::mux()[mux], l + "." + Vlc::mux()[mux]); + + if (duplicate) { + option2 = ":sout=#duplicate{dst=display,dst=\"%1\"}"; + } else { + option2 = ":sout=#%1"; + } + + option1 = ":sout-all"; + option2 = option2.arg(parameters); + + setOption(option1); + setOption(option2); + + VlcError::showErrmsg(); + + return l + "." + Vlc::mux()[mux]; +} + +void VlcMedia::setProgram(int program) +{ + QString option = "program=%1"; + setOption(option.arg(program)); +} + +void VlcMedia::setOption(const QString &option) +{ + libvlc_media_add_option(_vlcMedia, option.toUtf8().data()); + + VlcError::showErrmsg(); +} + +void VlcMedia::setOptions(const QStringList &options) +{ + foreach (const QString &option, options) { + libvlc_media_add_option(_vlcMedia, option.toUtf8().data()); + } + + VlcError::showErrmsg(); +} + +void VlcMedia::libvlc_callback(const libvlc_event_t *event, + void *data) +{ + VlcMedia *core = static_cast(data); + + switch (event->type) { + case libvlc_MediaMetaChanged: + emit core->metaChanged(Vlc::Meta(event->u.media_meta_changed.meta_type)); + break; + case libvlc_MediaSubItemAdded: + emit core->subitemAdded(event->u.media_subitem_added.new_child); + break; + case libvlc_MediaDurationChanged: + emit core->durationChanged(static_cast(event->u.media_duration_changed.new_duration)); + break; + case libvlc_MediaParsedChanged: + emit core->parsedChanged(static_cast(event->u.media_parsed_changed.new_status)); + break; + case libvlc_MediaFreed: + emit core->freed(event->u.media_freed.md); + break; + case libvlc_MediaStateChanged: + emit core->stateChanged(Vlc::State(event->u.media_state_changed.new_state)); + break; + default: + break; + } +} diff -Nru deepin-music-5.0.1+ds/src/music-player/core/vlc/Media.h deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Media.h --- deepin-music-5.0.1+ds/src/music-player/core/vlc/Media.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/Media.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,338 @@ + + +#ifndef VLCQT_MEDIA_H_ +#define VLCQT_MEDIA_H_ + +#include +#include +#include + +#include "Enums.h" +//#include "SharedExportCore.h" + +class VlcInstance; +struct VlcStats; + +struct libvlc_event_t; +struct libvlc_event_manager_t; +struct libvlc_media_t; + +/*! + + An abstract representation of a playable media. + It consists of a media location and various optional meta data. +*/ +class VLCQT_CORE_EXPORT VlcMedia : public QObject +{ + Q_OBJECT +public: + /*! + \brief VlcMedia constructor. + + This constructor creates a new media instance from a media location. + + \param location location of the media (QString) + \param localFile true, if media is local file (bool) + \param instance main libvlc instance (VlcInstance *) + */ + explicit VlcMedia(const QString &location, + bool localFile, + VlcInstance *instance); + + /*! + \brief VlcMedia constructor. + + This constructor creates a new media instance from a remote media location. + Provided for convenience. + + \param location remote location of the media (QString) + \param instance main libvlc instance (VlcInstance *) + */ + explicit VlcMedia(const QString &location, + VlcInstance *instance); + + explicit VlcMedia(); + + /*! + \brief VlcMedia constructor. + + This constructor creates a new media instance from an existing one. + + \param media libvlc media item (libvlc_media_t *) + */ + VlcMedia(libvlc_media_t *media); + + /*! + \brief VlcMedia destructor + */ + ~VlcMedia(); + + /*! + \brief libvlc media item + \return libvlc media item (libvlc_media_t *) + */ + libvlc_media_t *core(); + + /*! + \brief Get parsed status + + Know when it is OK to read metadata and track information + + \return parsed status (const bool) + */ + bool parsed() const; + + /*! + \brief Parse media information + + Parse media information: metadata and track information. + This call is async. + + \see parsedChanged + */ + void parse(); + + /*! + \brief Current media location + + \return QString media location + */ + QString currentLocation() const; + + /*! + \brief Get media stats + + \return VlcStats media stats object + */ +// VlcStats *getStats(); + + /*! + \brief Get media state + \return current media state + */ + Vlc::State state() const; + + /*! + \brief Get media duration + \return duration + */ + qint64 duration() const; + + /*! + \brief Duplicate (provided for convenience) + + Apply duplicate options with desired mux but without transcoding. + + \param name output file name (QString) + \param path output path (QString) + \param mux output mux (Vlc::Mux) + \return QString output file + \sa record() + */ + QString duplicate(const QString &name, + const QString &path, + const Vlc::Mux &mux); + + /*! + \brief Duplicate (provided for convenience) + + Apply duplicate options with desired mux and transcoding (experimental). + + \param name output file name (QString) + \param path output path (QString) + \param mux output mux (Vlc::Mux) + \param audioCodec audio codec (Vlc::AudioCodec) + \param videoCodec video codec (Vlc::VideoCodec) + \return QString output file + \sa record() + */ + QString duplicate(const QString &name, + const QString &path, + const Vlc::Mux &mux, + const Vlc::AudioCodec &audioCodec, + const Vlc::VideoCodec &videoCodec); + + /*! + \brief Duplicate (provided for convenience) + + Apply duplicate options with desired mux, transcoding + and some other options (experimental). + + \param name output file name (QString) + \param path output path (QString) + \param mux output mux (Vlc::Mux) + \param audioCodec audio codec (Vlc::AudioCodec) + \param videoCodec video codec (Vlc::VideoCodec) + \param bitrate video bitrate (int) + \param fps frames per second (int) + \param scale video scale (int) + \return QString output file + \sa record() + */ + QString duplicate(const QString &name, + const QString &path, + const Vlc::Mux &mux, + const Vlc::AudioCodec &audioCodec, + const Vlc::VideoCodec &videoCodec, + int bitrate, + int fps, + int scale); + + /*! + \brief Merge + + Apply merge options with desired mux but without transcoding. + + \param name output file name (QString) + \param path output path (QString) + \param mux output mux (Vlc::Mux) + \return QString output file + */ + QString merge(const QString &name, + const QString &path, + const Vlc::Mux &mux); + + /*! + \brief Record + + Apply recording options with desired mux but without transcoding. + + \param name output file name (QString) + \param path output path (QString) + \param mux output mux (Vlc::Mux) + \param duplicate also duplicate on screen (bool) + \return QString output file + */ + QString record(const QString &name, + const QString &path, + const Vlc::Mux &mux, + bool duplicate = false); + + /*! + \brief Record + + Apply recording options with desired mux and transcoding (experimental). + + \param name output file name (QString) + \param path output path (QString) + \param mux output mux (Vlc::Mux) + \param audioCodec audio codec (Vlc::AudioCodec) + \param videoCodec video codec (Vlc::VideoCodec) + \param duplicate also duplicate on screen (bool) + \return QString output file + */ + QString record(const QString &name, + const QString &path, + const Vlc::Mux &mux, + const Vlc::AudioCodec &audioCodec, + const Vlc::VideoCodec &videoCodec, + bool duplicate = false); + + /*! + \brief Record + + Apply recording options with desired mux, transcoding + and some other options (experimental). + + \param name output file name (QString) + \param path output path (QString) + \param mux output mux (Vlc::Mux) + \param audioCodec audio codec (Vlc::AudioCodec) + \param videoCodec video codec (Vlc::VideoCodec) + \param bitrate video bitrate (int) + \param fps frames per second (int) + \param scale video scale (int) + \param duplicate also duplicate on screen (bool) + \return QString output file + */ + QString record(const QString &name, + const QString &path, + const Vlc::Mux &mux, + const Vlc::AudioCodec &audioCodec, + const Vlc::VideoCodec &videoCodec, + int bitrate, + int fps, + int scale, + bool duplicate = false); + + /*! + \brief Set program + \param program program PID (int) + */ + void setProgram(int program); + + /*! + \brief Set media option + \param option media option (QString) + */ + void setOption(const QString &option); + + /*! + \brief Set media options + \param options media options (QStringList) + */ + void setOptions(const QStringList &options); + + void initMedia(const QString &location, + bool localFile, + VlcInstance *instance); + +signals: + /*! + \brief Signal sent on meta change + \param meta new meta + */ + void metaChanged(const Vlc::Meta &meta); + + /*! + \brief Signal sent on subitem added + \param subitem subitem that was added + */ + void subitemAdded(libvlc_media_t *subitem); + + /*! + \brief Signal sent on duration change + \param duration new duration + */ + void durationChanged(int duration); + + /*! + \brief Signal sent on parsed change + \param status new parsed status + */ + Q_DECL_DEPRECATED void parsedChanged(int status); + + /*! + \brief Signal sent on parsed change + \param status new parsed status + */ + void parsedChanged(bool status); + + /*! + \brief Signal sent on freed + \param media freed libvlc_media_t object + */ + void freed(libvlc_media_t *media); + + /*! + \brief Signal sent on state change + \param state new state + */ + void stateChanged(const Vlc::State &state); + +private: + + + static void libvlc_callback(const libvlc_event_t *event, + void *data); + + void createCoreConnections(); + void removeCoreConnections(); + + libvlc_media_t *_vlcMedia; + libvlc_event_manager_t *_vlcEvents; + + QString _currentLocation; +}; + +#endif // VLCQT_MEDIA_H_ diff -Nru deepin-music-5.0.1+ds/src/music-player/core/vlc/MediaPlayer.cpp deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/MediaPlayer.cpp --- deepin-music-5.0.1+ds/src/music-player/core/vlc/MediaPlayer.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/MediaPlayer.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,436 @@ + + +#include + +#include "Audio.h" +#include "Error.h" +#include "Instance.h" +#include "Media.h" +#include "MediaPlayer.h" +#include + + +#include "Equalizer.h" + + +VlcMediaPlayer::VlcMediaPlayer(VlcInstance *instance) + : QObject(instance) +{ + _vlcMediaPlayer = libvlc_media_player_new(instance->core()); + _vlcEvents = libvlc_media_player_event_manager(_vlcMediaPlayer); + + VlcError::showErrmsg(); + + _vlcAudio = new VlcAudio(this); + _vlcEqualizer = new VlcEqualizer(this); + + _media = 0; + +// connect(&timer, SIGNAL(timeout()), this, SLOT(timeoutSlot())); +// timer.start(1000); + + createCoreConnections(); + + VlcError::showErrmsg(); +} + +VlcMediaPlayer::~VlcMediaPlayer() +{ + removeCoreConnections(); + + delete _vlcAudio; + + libvlc_media_player_release(_vlcMediaPlayer); + + VlcError::showErrmsg(); +} + +libvlc_media_player_t *VlcMediaPlayer::core() const +{ + return _vlcMediaPlayer; +} + +VlcAudio *VlcMediaPlayer::audio() const +{ + return _vlcAudio; +} + +//VlcVideo *VlcMediaPlayer::video() const +//{ +//// return _vlcVideo; +//} + +VlcEqualizer *VlcMediaPlayer::equalizer() const +{ + return _vlcEqualizer; +} + + +void VlcMediaPlayer::createCoreConnections() +{ + QList list; + list << libvlc_MediaPlayerMediaChanged + << libvlc_MediaPlayerNothingSpecial + << libvlc_MediaPlayerOpening + << libvlc_MediaPlayerBuffering + << libvlc_MediaPlayerPlaying + << libvlc_MediaPlayerPaused + << libvlc_MediaPlayerStopped + << libvlc_MediaPlayerForward + << libvlc_MediaPlayerBackward + << libvlc_MediaPlayerEndReached + << libvlc_MediaPlayerEncounteredError + << libvlc_MediaPlayerTimeChanged + << libvlc_MediaPlayerPositionChanged + << libvlc_MediaPlayerSeekableChanged + << libvlc_MediaPlayerPausableChanged + << libvlc_MediaPlayerTitleChanged + << libvlc_MediaPlayerSnapshotTaken + << libvlc_MediaPlayerLengthChanged + << libvlc_MediaPlayerVout; + + foreach (const libvlc_event_e &event, list) { + libvlc_event_attach(_vlcEvents, event, libvlc_callback, this); + } +} + +void VlcMediaPlayer::removeCoreConnections() +{ + QList list; + list << libvlc_MediaPlayerMediaChanged + << libvlc_MediaPlayerNothingSpecial + << libvlc_MediaPlayerOpening + << libvlc_MediaPlayerBuffering + << libvlc_MediaPlayerPlaying + << libvlc_MediaPlayerPaused + << libvlc_MediaPlayerStopped + << libvlc_MediaPlayerForward + << libvlc_MediaPlayerBackward + << libvlc_MediaPlayerEndReached + << libvlc_MediaPlayerEncounteredError + << libvlc_MediaPlayerTimeChanged + << libvlc_MediaPlayerPositionChanged + << libvlc_MediaPlayerSeekableChanged + << libvlc_MediaPlayerPausableChanged + << libvlc_MediaPlayerTitleChanged + << libvlc_MediaPlayerSnapshotTaken + << libvlc_MediaPlayerLengthChanged + << libvlc_MediaPlayerVout; + + foreach (const libvlc_event_e &event, list) { + libvlc_event_detach(_vlcEvents, event, libvlc_callback, this); + } +} + +bool VlcMediaPlayer::hasVout() const +{ + bool status = false; + if (_vlcMediaPlayer) { + status = libvlc_media_player_has_vout(_vlcMediaPlayer); + } + + return status; +} + +int VlcMediaPlayer::length() const +{ + libvlc_time_t length = libvlc_media_player_get_length(_vlcMediaPlayer); + + VlcError::showErrmsg(); + + return length; +} + +VlcMedia *VlcMediaPlayer::currentMedia() const +{ + return _media; +} + +libvlc_media_t *VlcMediaPlayer::currentMediaCore() +{ + libvlc_media_t *media = libvlc_media_player_get_media(_vlcMediaPlayer); + + VlcError::showErrmsg(); + + return media; +} + +void VlcMediaPlayer::open(VlcMedia *media) +{ + _media = media; + libvlc_media_player_set_media(_vlcMediaPlayer, media->core()); + + VlcError::showErrmsg(); +} + +void VlcMediaPlayer::openOnly(VlcMedia *media) +{ + _media = media; + libvlc_media_player_set_media(_vlcMediaPlayer, media->core()); + + VlcError::showErrmsg(); +} + +void VlcMediaPlayer::play() +{ + if (!_vlcMediaPlayer) + return; + + libvlc_media_player_play(_vlcMediaPlayer); + + VlcError::showErrmsg(); +} + +void VlcMediaPlayer::pause() +{ + if (!_vlcMediaPlayer) + return; + + if (libvlc_media_player_can_pause(_vlcMediaPlayer)) + libvlc_media_player_set_pause(_vlcMediaPlayer, true); + + VlcError::showErrmsg(); +} + +void VlcMediaPlayer::togglePause() +{ + if (!_vlcMediaPlayer) + return; + + if (libvlc_media_player_can_pause(_vlcMediaPlayer)) + libvlc_media_player_pause(_vlcMediaPlayer); + + VlcError::showErrmsg(); +} + +void VlcMediaPlayer::resume() +{ + if (!_vlcMediaPlayer) + return; + + if (libvlc_media_player_can_pause(_vlcMediaPlayer)) + libvlc_media_player_set_pause(_vlcMediaPlayer, false); + + VlcError::showErrmsg(); +} + +void VlcMediaPlayer::setTime(qint64 time) +{ + /***************************************** + * add enum Opening to set progress value + * ***************************************/ +#ifdef QT_NO_DEBUG + if (!(state() == Vlc::Buffering + || state() == Vlc::Playing + || state() == Vlc::Paused + || state() == Vlc::Opening)) + return; +#else + if (!(state() == Vlc::Buffering + || state() == Vlc::Playing + || state() == Vlc::Paused + || state() == Vlc::Opening)) //because debug modle may be Opening state + return; +#endif + + libvlc_media_player_set_time(_vlcMediaPlayer, time); + + if (state() == Vlc::Paused) + emit timeChanged(time); + + VlcError::showErrmsg(); +} + +//void VlcMediaPlayer::setVideoWidget(VlcVideoDelegate *widget) +//{ +// _videoWidget = widget; +//} + +bool VlcMediaPlayer::seekable() const +{ + if (!libvlc_media_player_get_media(_vlcMediaPlayer)) + return false; + + bool seekable = libvlc_media_player_is_seekable(_vlcMediaPlayer); + + VlcError::showErrmsg(); + + return seekable; +} + +Vlc::State VlcMediaPlayer::state() const +{ + // It's possible that the vlc doesn't play anything + // so check before + if (!libvlc_media_player_get_media(_vlcMediaPlayer)) + return Vlc::Idle; + + libvlc_state_t state; + state = libvlc_media_player_get_state(_vlcMediaPlayer); + +// VlcError::showErrmsg(); + + return Vlc::State(state); +} +//void VlcMediaPlayer::timeoutSlot() +//{ +// if (!_vlcMediaPlayer) +// return; + +// emit timeChanged(libvlc_media_player_get_time(_vlcMediaPlayer)); +//} + +void VlcMediaPlayer::stop() +{ + if (!_vlcMediaPlayer) + return; + + libvlc_media_player_stop(_vlcMediaPlayer); + + VlcError::showErrmsg(); +} + +int VlcMediaPlayer::time() const +{ + libvlc_time_t time = libvlc_media_player_get_time(_vlcMediaPlayer); + + VlcError::showErrmsg(); + + return time; +} + +//VlcVideoDelegate *VlcMediaPlayer::videoWidget() const +//{ +// return _videoWidget; +//} + +void VlcMediaPlayer::libvlc_callback(const libvlc_event_t *event, + void *data) +{ + VlcMediaPlayer *core = static_cast(data); + switch (event->type) { + case libvlc_MediaPlayerMediaChanged: + emit core->mediaChanged(event->u.media_player_media_changed.new_media); + break; + case libvlc_MediaPlayerNothingSpecial: + emit core->nothingSpecial(); + break; + case libvlc_MediaPlayerOpening: + emit core->opening(); + break; + case libvlc_MediaPlayerBuffering: + emit core->buffering(event->u.media_player_buffering.new_cache); + emit core->buffering(qRound(event->u.media_player_buffering.new_cache)); + break; + case libvlc_MediaPlayerPlaying: + emit core->playing(); + break; + case libvlc_MediaPlayerPaused: + emit core->paused(); + break; + case libvlc_MediaPlayerStopped: + emit core->stopped(); + break; + case libvlc_MediaPlayerForward: + emit core->forward(); + break; + case libvlc_MediaPlayerBackward: + emit core->backward(); + break; + case libvlc_MediaPlayerEndReached: + emit core->end(); + break; + case libvlc_MediaPlayerEncounteredError: + emit core->error(); + break; + case libvlc_MediaPlayerTimeChanged: + emit core->timeChanged(event->u.media_player_time_changed.new_time); + break; + case libvlc_MediaPlayerPositionChanged: + emit core->positionChanged(event->u.media_player_position_changed.new_position); + break; + case libvlc_MediaPlayerSeekableChanged: + emit core->seekableChanged(event->u.media_player_seekable_changed.new_seekable); + break; + case libvlc_MediaPlayerPausableChanged: + emit core->pausableChanged(event->u.media_player_pausable_changed.new_pausable); + break; + case libvlc_MediaPlayerTitleChanged: + emit core->titleChanged(event->u.media_player_title_changed.new_title); + break; + case libvlc_MediaPlayerSnapshotTaken: + emit core->snapshotTaken(event->u.media_player_snapshot_taken.psz_filename); + break; + case libvlc_MediaPlayerLengthChanged: + emit core->lengthChanged(event->u.media_player_length_changed.new_length); + break; + case libvlc_MediaPlayerVout: + emit core->vout(event->u.media_player_vout.new_count); + break; + default: + break; + } + + if (event->type >= libvlc_MediaPlayerNothingSpecial + && event->type <= libvlc_MediaPlayerEncounteredError) { + emit core->stateChanged(); + } +} + +float VlcMediaPlayer::position() +{ + if (!_vlcMediaPlayer) + return -1; + + return libvlc_media_player_get_position(_vlcMediaPlayer); +} + +float VlcMediaPlayer::sampleAspectRatio() +{ + if (!_vlcMediaPlayer) + return 0.0; +#if LIBVLC_VERSION >= 0x020100 + float sar = 0.0; + + libvlc_media_track_t **tracks; + unsigned tracksCount; + tracksCount = libvlc_media_tracks_get(_media->core(), &tracks); + if (tracksCount > 0) { + for (unsigned i = 0; i < tracksCount; i++) { + libvlc_media_track_t *track = tracks[i]; + if (track->i_type == libvlc_track_video && track->i_id == 0) { + libvlc_video_track_t *videoTrack = track->video; + if (videoTrack->i_sar_num > 0) + sar = (float)videoTrack->i_sar_den / (float)videoTrack->i_sar_num; + } + } + libvlc_media_tracks_release(tracks, tracksCount); + } + + return sar; +#else + return 1.0; +#endif // LIBVLC_VERSION >= 0x020100 +} + +void VlcMediaPlayer::setPosition(float pos) +{ + libvlc_media_player_set_position(_vlcMediaPlayer, pos); + + VlcError::showErrmsg(); +} + +void VlcMediaPlayer::setPlaybackRate(float rate) +{ + libvlc_media_player_set_rate(_vlcMediaPlayer, rate); + + VlcError::showErrmsg(); +} + +float VlcMediaPlayer::playbackRate() +{ + if (!_vlcMediaPlayer) + return -1; + + return libvlc_media_player_get_rate(_vlcMediaPlayer); +} diff -Nru deepin-music-5.0.1+ds/src/music-player/core/vlc/MediaPlayer.h deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/MediaPlayer.h --- deepin-music-5.0.1+ds/src/music-player/core/vlc/MediaPlayer.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/MediaPlayer.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,350 @@ + + +#ifndef VLCQT_MEDIAPLAYER_H_ +#define VLCQT_MEDIAPLAYER_H_ + +#include +#include +#include + +#include + +#include "Enums.h" +//#include "SharedExportCore.h" + +#define LIBVLC_VERSION 0x020200 + +class VlcAudio; +class VlcEqualizer; +class VlcInstance; +class VlcMedia; +class VlcVideo; +class VlcVideoDelegate; + +struct libvlc_event_t; +struct libvlc_event_manager_t; +struct libvlc_media_t; +struct libvlc_media_player_t; + + +class VLCQT_CORE_EXPORT VlcMediaPlayer : public QObject +{ + Q_OBJECT +public: + /*! + \brief VlcMediaPlayer constructor. + + This is mandatory to use libvlc playback functions. + + \param instance instance object (VlcInstance *) + */ + explicit VlcMediaPlayer(VlcInstance *instance); + + /*! + VlcMediaPlayer destructor + */ + ~VlcMediaPlayer(); + + /*! + \brief Returns libvlc media player object. + \return libvlc media player (libvlc_media_player_t *) + */ + libvlc_media_player_t *core() const; + + /*! + \brief Returns audio manager object. + \return audio manager (VlcAudio *) + */ + VlcAudio *audio() const; + + /*! + \brief Returns video manager object. + \return video manager (VlcVideo *) + */ +// VlcVideo *video() const; + +#if LIBVLC_VERSION >= 0x020200 + /*! + \brief Returns equalizer object. + \return equalizer (VlcEqualizer *) + */ + VlcEqualizer *equalizer() const; +#endif + + /*! + \brief Get the current movie length (in ms). + \return the movie length (in ms), or -1 if there is no media (const int) + */ + int length() const; + + /*! + \brief Get current media object + \return media object (VlcMedia *) + */ + VlcMedia *currentMedia() const; + + /*! + \brief Get current media core object + \return media core object (libvlc_media_t *) + */ + libvlc_media_t *currentMediaCore(); + + /*! + \brief Open media file or stream. Any media should be playable and opened. + \param media object (VlcMedia *) + */ + void open(VlcMedia *media); + + /*! + \brief Just opens the media file or stream, do not starts playing the media. + \param media object (VlcMedia *) + */ + void openOnly(VlcMedia *media); + +public slots: + /*! \brief Set the movie time (in ms). + + This has no effect if no media is being played. Not all formats and protocols support this. + + \param time the movie time (in ms) (int) + */ + void setTime(qint64 time); + +public: + /*! + \brief Get the current movie time (in ms). + \return the movie time (in ms), or -1 if there is no media (const int) + */ + int time() const; + + /*! \brief Set video widget. + + Set video widget to be able to play video inside Qt interface. + + \param widget video widget (VlcVideoDelegate *) + */ +// void setVideoWidget(VlcVideoDelegate *widget); + + /*! + \brief Get video output status + \return video output status (const bool) + */ + bool hasVout() const; + + /*! + \brief Get seekable status + \return seekable status (const bool) + */ + bool seekable() const; + + /*! + \brief Get current player state. + \return current player state (const Vlc::State) + */ + Vlc::State state() const; + + /*! + \brief Get current video widget. + \return current video widget (VlcVideoWidget *) + */ +// VlcVideoDelegate *videoWidget() const; + + /*! + \brief Get media content position. + \return current media position (float) + */ + float position(); + + /*! + \brief Get sample aspect ratio for current video track( vlc >= 2.1.0 ). + \return sample aspect ratio (float) + */ + float sampleAspectRatio(); + + /*! + \brief Get current media playback rate. + \return current media playback rate (float) + */ + float playbackRate(); + +public slots: + /*! \brief Set the media position. + + This has no effect if no media is being played. Not all formats and protocols support this. + + \param pos the media position (float) + */ + void setPosition(float pos); + + /*! \brief Set the media playback rate. + + \param rate the media playback rate (float) + */ + void setPlaybackRate(float rate); + + /*! + \brief Starts playing current media if possible + */ + void play(); + + /*! + \brief Pauses the playback of current media if possible + */ + void pause(); + + /*! + \brief Toggles pause of the playback of current media if possible + */ + void togglePause(); + + /*! + \brief Resumes the playback of current media if possible + */ + void resume(); + + /*! + \brief Stops playing current media + */ + void stop(); + +// void timeoutSlot(); + +signals: + /*! + \brief Signal sent on backward + */ + void backward(); + + /*! + \brief Signal sent on buffering + \param buffer buffer status in percent + */ + void buffering(float buffer); + + /*! + \brief Signal sent on buffering + \param buffer buffer status in percent + */ + void buffering(int buffer); + + /*! + \brief Signal sent when end reached + */ + void end(); + + /*! + \brief Signal sent on error + */ + void error(); + + /*! + \brief Signal sent on forward + */ + void forward(); + + /*! + \brief Signal sent on length change + \param length new length + */ + void lengthChanged(int length); + + /*! + \brief Signal sent on media change + \param media new media object + */ + void mediaChanged(libvlc_media_t *media); + + /*! + \brief Signal sent nothing speciall happened + */ + void nothingSpecial(); + + /*! + \brief Signal sent when opening + */ + void opening(); + + /*! + \brief Signal sent on pausable change + \param pausable pausable status + */ + void pausableChanged(bool pausable); + + /*! + \brief Signal sent when paused + */ + void paused(); + + /*! + \brief Signal sent when playing + */ + void playing(); + + /*! + \brief Signal sent on position change + \param position new position + */ + void positionChanged(float position); + + /*! + \brief Signal sent on seekable change + \param seekable seekable status + */ + void seekableChanged(bool seekable); + + /*! + \brief Signal sent on snapshot taken + \param filename filename of the snapshot + */ + void snapshotTaken(const QString &filename); + + /*! + \brief Signal sent when stopped + */ + void stopped(); + + /*! + \brief Signal sent on time change + \param time new time + */ + void timeChanged(qint64 time); + + /*! + \brief Signal sent on title change + \param title new title + */ + void titleChanged(int title); + + /*! + \brief Signal sent when video output is available + \param count number of video outputs available + */ + void vout(int count); + + /*! + \brief Signal sent when state of the player changed + */ + void stateChanged(); + +private: + static void libvlc_callback(const libvlc_event_t *event, + void *data); + + void createCoreConnections(); + void removeCoreConnections(); + + libvlc_media_player_t *_vlcMediaPlayer; + libvlc_event_manager_t *_vlcEvents; + + VlcMedia *_media; + + VlcAudio *_vlcAudio; + VlcVideo *_vlcVideo; + VlcEqualizer *_vlcEqualizer; + + + QTimer timer; + +}; + +#endif // VLCQT_MEDIAPLAYER_H_ diff -Nru deepin-music-5.0.1+ds/src/music-player/core/vlc/SharedExportCore.h deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/SharedExportCore.h --- deepin-music-5.0.1+ds/src/music-player/core/vlc/SharedExportCore.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/vlc/SharedExportCore.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,30 @@ +/**************************************************************************** +* VLC-Qt - Qt and libvlc connector library +* Copyright (C) 2012 Tadej Novak +* +* This library 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 library 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 library. If not, see . +*****************************************************************************/ + +#ifndef VLCQT_SHARED_EXPORT_CORE_H +#define VLCQT_SHARED_EXPORT_CORE_H + +#include + +#if defined(VLCQT_CORE_LIBRARY) +#define VLCQT_CORE_EXPORT Q_DECL_EXPORT +#else +#define VLCQT_CORE_EXPORT Q_DECL_IMPORT +#endif + +#endif // SHARED_EXPORT_CORE_H diff -Nru deepin-music-5.0.1+ds/src/music-player/core/volumemonitoring.cpp deepin-music-6.0.1.54+ds.1/src/music-player/core/volumemonitoring.cpp --- deepin-music-5.0.1+ds/src/music-player/core/volumemonitoring.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/volumemonitoring.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,154 @@ +/* + * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "volumemonitoring.h" +#include +#include +#include +#include +#include +#include +#include +#include "util/dbusutils.h" +#include "util/global.h" +#include "musicsettings.h" + +class VolumeMonitoringPrivate +{ +public: + VolumeMonitoringPrivate(VolumeMonitoring *parent) : q_ptr(parent) {} + + QTimer timer; + int oldVolume = 0; + bool oldMute = false; + bool bUpdate = true; + VolumeMonitoring *q_ptr; + Q_DECLARE_PUBLIC(VolumeMonitoring) +}; + +VolumeMonitoring::VolumeMonitoring(QObject *parent) + : QObject(parent), d_ptr(new VolumeMonitoringPrivate(this)) +{ + Q_D(VolumeMonitoring); + d->oldMute = MusicSettings::value("base.play.mute").toBool(); + d->oldVolume = MusicSettings::value("base.play.volume").toInt(); + connect(&d->timer, SIGNAL(timeout()), this, SLOT(timeoutSlot())); +} + +VolumeMonitoring::~VolumeMonitoring() +{ + stop(); +} + +void VolumeMonitoring::start() +{ + Q_D(VolumeMonitoring); + d->timer.start(1000); +} + +void VolumeMonitoring::stop() +{ + Q_D(VolumeMonitoring); + d->timer.stop(); +} + +bool VolumeMonitoring::needSyncLocalFlag() +{ + Q_D(VolumeMonitoring); + return d->bUpdate; +} + +void VolumeMonitoring::syncLocalFlag() +{ + Q_D(VolumeMonitoring); + d->bUpdate = true; +} + +void VolumeMonitoring::timeoutSlot() +{ + Q_D(VolumeMonitoring); + QVariant v = DBusUtils::readDBusProperty("com.deepin.daemon.Audio", "/com/deepin/daemon/Audio", + "com.deepin.daemon.Audio", "SinkInputs"); + + if (!v.isValid()) + return; + + QList allSinkInputsList = v.value >(); + + QString sinkInputPath; + for (auto curPath : allSinkInputsList) { + QVariant nameV = DBusUtils::readDBusProperty("com.deepin.daemon.Audio", curPath.path(), + "com.deepin.daemon.Audio.SinkInput", "Name"); + + if (!nameV.isValid() || nameV != Global::getAppName()) + continue; + + sinkInputPath = curPath.path(); + break; + } + if (sinkInputPath.isEmpty()) + return; + + QDBusInterface ainterface("com.deepin.daemon.Audio", sinkInputPath, + "com.deepin.daemon.Audio.SinkInput", + QDBusConnection::sessionBus()); + if (!ainterface.isValid()) { + return ; + } + + if(d->bUpdate) + { + /************************************* + * sync local mute or volume to dbus + * ***********************************/ + //调用设置音量 + QVariant muteV = DBusUtils::readDBusProperty("com.deepin.daemon.Audio", sinkInputPath, + "com.deepin.daemon.Audio.SinkInput", "Mute"); + if(muteV.toBool() != MusicSettings::value("base.play.mute").toBool()) + ainterface.call(QLatin1String("SetMute"), MusicSettings::value("base.play.mute").toBool()); + //ainterface.call(QLatin1String("SetVolume"), MusicSettings::value("base.play.volume").toInt(), false); + if (qFuzzyCompare(MusicSettings::value("base.play.volume").toInt(), 0.0)) + ainterface.call(QLatin1String("SetMute"), true); + d->bUpdate = false; + } + + //获取音量 + QVariant volumeV = DBusUtils::readDBusProperty("com.deepin.daemon.Audio", sinkInputPath, + "com.deepin.daemon.Audio.SinkInput", "Volume"); + + //获取音量 + QVariant muteV = DBusUtils::readDBusProperty("com.deepin.daemon.Audio", sinkInputPath, + "com.deepin.daemon.Audio.SinkInput", "Mute"); + //取最小正整数 + int volume = qFloor(volumeV.toDouble() * 100); + + bool mute = muteV.toBool(); + + if (volume != d->oldVolume) { + d->oldVolume = volume; + Q_EMIT volumeChanged(volume); + + } + if (mute != d->oldMute) { + d->oldMute = mute; + Q_EMIT muteChanged(mute); + } +} diff -Nru deepin-music-5.0.1+ds/src/music-player/core/volumemonitoring.h deepin-music-6.0.1.54+ds.1/src/music-player/core/volumemonitoring.h --- deepin-music-5.0.1+ds/src/music-player/core/volumemonitoring.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/core/volumemonitoring.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include + +class VolumeMonitoringPrivate; +class VolumeMonitoring : public QObject +{ + Q_OBJECT +public: + explicit VolumeMonitoring(QObject *parent = Q_NULLPTR); + ~VolumeMonitoring(); + + void start(); + void stop(); + + bool needSyncLocalFlag(); +signals: + void volumeChanged(int volume); + void muteChanged(bool mute); + +public slots: + void timeoutSlot(); + void syncLocalFlag(); +private: + QScopedPointer d_ptr; + Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), VolumeMonitoring) +}; diff -Nru deepin-music-5.0.1+ds/src/music-player/data/deepin-music.desktop deepin-music-6.0.1.54+ds.1/src/music-player/data/deepin-music.desktop --- deepin-music-5.0.1+ds/src/music-player/data/deepin-music.desktop 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/data/deepin-music.desktop 2020-07-14 12:05:00.000000000 +0000 @@ -4,9 +4,10 @@ Exec=deepin-music %F GenericName=Music Icon=deepin-music -MimeType=audio/musepack;application/musepack;application/x-ape;audio/ape;audio/x-ape;audio/x-musepack;application/x-musepack;audio/x-mp3;application/x-id3;audio/mpeg;audio/x-mpeg;audio/x-mpeg-3;audio/mpeg3;audio/mp3;audio/x-m4a;audio/mpc;audio/x-mpc;audio/mp;audio/x-mp;application/ogg;application/x-ogg;audio/vorbis;audio/x-vorbis;audio/ogg;audio/x-ogg;audio/x-flac;application/x-flac;audio/flac; -Name=Deepin Music +MimeType=audio/musepack;application/musepack;application/x-ape;audio/ape;audio/x-ape;audio/x-musepack;application/x-musepack;audio/x-mp3;application/x-id3;audio/mpeg;audio/x-mpeg;audio/x-mpeg-3;audio/mpeg3;audio/mp3;audio/x-m4a;audio/mpc;audio/x-mpc;audio/mp;audio/x-mp;application/ogg;application/x-ogg;audio/vorbis;audio/x-vorbis;audio/ogg;audio/x-ogg;audio/x-flac;application/x-flac;audio/flac;audio/3gp;audio/imy;audio/midi;audio/xmf;audio/x-wav;application/x-wav;audio/x-ms-wma;application/x-ms-wma;audio/aac;application/aac;audio/ac3;audio/AMR; +Name=Music Type=Application +StartupNotify=false X-Deepin-ManualID=deepin-music X-Deepin-Vendor=deepin @@ -39,7 +40,7 @@ Comment[id]=Mainkan koleksi musik Comment[it]=Esegui la tua raccolta musicale Comment[ja]=音楽コレクションの再生 -Comment[ko]=당신의 음악 컬렉션을 재생하세요 +Comment[ko]=음악 컬렉션 재생 Comment[ku_IQ]=Li koleksiyona xwe ya mûzîkê bixe Comment[lt]=Groti savo muzikinę kolekciją Comment[mn]=Хөгжмийн цуглуулгаа тоглуул @@ -126,7 +127,7 @@ Name[cs]=Přehrávání hudby Name[da]=Deepin musik Name[de]=Deepin Musik -Name[el]=Deepin Mουσική +Name[el]=Μουσική Deepin Name[en_AU]=Deepin Music Name[eo]=Deepin Muziko Name[es]=Reproductor Deepin @@ -134,7 +135,7 @@ Name[fa]=دیپین موزیک Name[fi]=Deepin Musiikki Name[fil]=Deepin Music -Name[fr]=Deepin Lecteur de Musique +Name[fr]=Deepin Music Name[gl_ES]=Música Name[he]=נגן מוסיקה Deepin Name[hi_IN]=डीपइन संगीत @@ -144,7 +145,7 @@ Name[id]=Musik Deepin Name[it]=Deepin Music Name[ja]=Deepin音楽プレイヤー -Name[ko]=Deepin Music +Name[ko]=Deepin 음악 Name[ku_IQ]=Deepin Mûzîk Name[lt]=Deepin muzika Name[mn]=Дээпин Хѳгжи @@ -165,145 +166,154 @@ Name[ug]=Deepin ناخشى قويغۇچى Name[uk]=Deepin Музика Name[vi]=Trình nghe nhạc Deepin -Name[zh_CN]=深度音乐 -Name[zh_HK]=Deepin 音樂 -Name[zh_TW]=Deepin 音樂 +Name[zh_CN]=音乐 +Name[zh_HK]=音樂 +Name[zh_TW]=音樂 -[X-Next Shortcut Group] -Exec=dbus-send --print-reply --dest=org.mpris.MediaPlayer2.DeepinMusic /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Next -Name=Next track - -# Translations: -# Do not manually modify! -Name[am_ET]=የሚቀጥለው ተረኛ -Name[ar]=المسار التالي -Name[ast]=Pista siguiente -Name[bg]=Следваща песен -Name[ca]=Pista següent -Name[cs]=Další skladba -Name[da]=Næste spor -Name[de]=Nächster Titel -Name[es]=Siguiente pista -Name[es_419]=Pista siguiente -Name[fa]=قطعه بعدی -Name[fi]=Seuraava raita -Name[fr]=Piste Suivante -Name[gl_ES]=Seguinte pista -Name[he]=הקטע הבא -Name[hr]=Slijedeći zapis -Name[hu]=Következő szám -Name[hy]=Հաջորդը -Name[id]=Lajur selanjutnya -Name[it]=Traccia successiva -Name[ja]=次へ -Name[ku_IQ]=Strana pêşve -Name[lt]=Kitas takelis -Name[mn]=Дараагийн дуу -Name[ms]=trek seterusnya -Name[nl]=Volgende nummer -Name[pl]=Następna ścieżka -Name[pt]=Faixa seguinte -Name[pt_BR]=Próxima -Name[ro]=Melodia următoare -Name[ru]=Следующая дорожка -Name[sk]=Ďalšia stopa -Name[sl]=Naslednja skladba -Name[sr]=Следећа нумера -Name[tr]=Sonraki parça -Name[uk]=Наступний трек -Name[zh_CN]=下一首 -Name[zh_HK]=下一首歌曲 -Name[zh_TW]=下一曲 - -[X-PlayPause Shortcut Group] -Exec=dbus-send --print-reply --dest=org.mpris.MediaPlayer2.DeepinMusic /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause -Name=Play/Pause track - -# Translations: -# Do not manually modify! -Name[am_ET]=ተረኛ ማጫወቻ/ማስቆሚያ -Name[ar]=تشغيل / إيقاف المسار -Name[ast]=Reproducir/posar pista -Name[bg]=Изпълнение/Пауза на записа -Name[ca]=Reprodueix / pausa la pista -Name[cs]=Přehrát/Pozastavit skladbu -Name[da]=Afspil/pause spor -Name[de]=Titel abspielen/pausieren -Name[es]=Reproducir/Pausar pista -Name[es_419]=Reproducir/Pausar Pista -Name[fa]=پخش/توقف قطعه -Name[fi]=Toista/Pysäytä raita -Name[fr]=Lire/Pause le fichier -Name[gl_ES]=Reproducir/Pausar pista -Name[he]=נגן/הפסק קטע -Name[hr]=Izvodi/pauziraj zapis -Name[hu]=Szám lejátszása/Szüneteltetése -Name[hy]=Նվագել/կանգնեցնել -Name[id]=Mainkan/hentikan lajur -Name[it]=Play/Pausa -Name[ja]=再生/一時停止 -Name[ku_IQ]=Li stranê bixe/Stranê Bisekinîne -Name[lt]=Groti/Pristabdyti takelį -Name[mn]=Дуу Тоглуулах/Түр Зогсоох -Name[ms]=Main/Jeda trek -Name[nl]=Nummer afspelen/pauzeren -Name[pl]=Odtwórz/Wstrzymaj ścieżkę -Name[pt]=Reproduzir/Pausar faixa -Name[pt_BR]=Play/Pause -Name[ro]=Redare/Pauză melodia -Name[ru]=Воспроизведение/Пауза дорожки -Name[sk]=Prehrávať/Pozastaviť skladbu -Name[sl]=Predvajaj/Zaustavi skladbo -Name[sr]=Пусти/Паузирај нумеру -Name[tr]=Parçayı Oynat/Duraklat -Name[uk]=Відтворити/Призупинити трек -Name[zh_CN]=暂停/继续 -Name[zh_HK]=播放/暫停曲目 -Name[zh_TW]=播放/暫停 - -[X-Previous Shortcut Group] -Exec=dbus-send --print-reply --dest=org.mpris.MediaPlayer2.DeepinMusic /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Previous -Name=Previous track - -# Translations: -# Do not manually modify! -Name[am_ET]=ያለፈው ተረኛ -Name[ar]=المسار السابق -Name[ast]=Pista previa -Name[bg]=Предишна песен -Name[ca]=Pista anterior -Name[cs]=Předchozí skladba -Name[da]=Forrige spor -Name[de]=Vorheriger Titel -Name[es]=Pista anterior -Name[es_419]=Pista anterior -Name[fa]=قطعه قبلی -Name[fi]=Edellinen raita -Name[fr]=Piste précédente -Name[gl_ES]=Pista anterior -Name[he]=הקטע הקודם -Name[hr]=Prethodni zapis -Name[hu]=Előző szám -Name[hy]=Նախորդը -Name[id]=Lajur sebelumnya -Name[it]=Traccia precedente -Name[ja]=前へ -Name[ku_IQ]=Strana paşve -Name[lt]=Ankstesnis takelis -Name[mn]=Өмнөх дуу -Name[ms]=trek sebelumnya -Name[nl]=Vorig nummer -Name[pl]=Poprzednia ścieżka -Name[pt]=Faixa anterior -Name[pt_BR]=Anterior -Name[ro]=Melodia anterioară -Name[ru]=Предыдущая дорожка -Name[sk]=Predchádzajúca stopa -Name[sl]=Prejšnja skladba -Name[sr]=Претходна нумера -Name[tr]=Önceki parça -Name[uk]=Попередній трек -Name[zh_CN]=上一首 -Name[zh_HK]=上一首歌曲 -Name[zh_TW]=上一曲 +#[X-Next Shortcut Group] +#Exec=dbus-send --print-reply --dest=org.mpris.MediaPlayer2.DeepinMusic /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Next +#Name=Next track +# +## Translations: +## Do not manually modify! +#Name[am_ET]=የሚቀጥለው ተረኛ +#Name[ar]=المسار التالي +#Name[ast]=Pista siguiente +#Name[bg]=Следваща песен +#Name[ca]=Pista següent +#Name[cs]=Další skladba +#Name[da]=Næste spor +#Name[de]=Nächster Titel +#Name[el]=Επόμενο κομμάτι +#Name[es]=Siguiente pista +#Name[es_419]=Pista siguiente +#Name[fa]=قطعه بعدی +#Name[fi]=Seuraava raita +#Name[fr]=Piste suivante +#Name[gl_ES]=Seguinte pista +#Name[he]=הקטע הבא +#Name[hi_IN]=अगला गाना +#Name[hr]=Slijedeći zapis +#Name[hu]=Következő szám +#Name[hy]=Հաջորդը +#Name[id]=Lajur selanjutnya +#Name[it]=Traccia successiva +#Name[ja]=次へ +#Name[ko]=다음 트랙 +#Name[ku_IQ]=Strana pêşve +#Name[lt]=Kitas takelis +#Name[mn]=Дараагийн дуу +#Name[ms]=trek seterusnya +#Name[nl]=Volgende nummer +#Name[pl]=Następna ścieżka +#Name[pt]=Faixa seguinte +#Name[pt_BR]=Próxima +#Name[ro]=Melodia următoare +#Name[ru]=Следующая дорожка +#Name[sk]=Ďalšia stopa +#Name[sl]=Naslednja skladba +#Name[sr]=Следећа нумера +#Name[tr]=Sonraki parça +#Name[uk]=Наступний трек +#Name[zh_CN]=下一首 +#Name[zh_HK]=下一首歌曲 +#Name[zh_TW]=下一曲 +# +#[X-PlayPause Shortcut Group] +#Exec=dbus-send --print-reply --dest=org.mpris.MediaPlayer2.DeepinMusic /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause +#Name=Play/Pause track +# +## Translations: +## Do not manually modify! +#Name[am_ET]=ተረኛ ማጫወቻ/ማስቆሚያ +#Name[ar]=تشغيل / إيقاف المسار +#Name[ast]=Reproducir/posar pista +#Name[bg]=Изпълнение/Пауза на записа +#Name[ca]=Reprodueix / pausa la pista +#Name[cs]=Přehrát/Pozastavit skladbu +#Name[da]=Afspil/pause spor +#Name[de]=Titel abspielen/pausieren +#Name[el]=Αναπαραγωγή/Παύση κομματιού +#Name[es]=Reproducir/Pausar pista +#Name[es_419]=Reproducir/Pausar Pista +#Name[fa]=پخش/توقف قطعه +#Name[fi]=Toista/Pysäytä raita +#Name[fr]=Lire / Mettre en pause la piste +#Name[gl_ES]=Reproducir/Pausar pista +#Name[he]=נגן/הפסק קטע +#Name[hi_IN]=गाना प्ले/पौज़ करें +#Name[hr]=Izvodi/pauziraj zapis +#Name[hu]=Szám lejátszása/Szüneteltetése +#Name[hy]=Նվագել/կանգնեցնել +#Name[id]=Mainkan/hentikan lajur +#Name[it]=Play/Pausa +#Name[ja]=再生/一時停止 +#Name[ko]=트랙 재생/일시정지 +#Name[ku_IQ]=Li stranê bixe/Stranê Bisekinîne +#Name[lt]=Groti/Pristabdyti takelį +#Name[mn]=Дуу Тоглуулах/Түр Зогсоох +#Name[ms]=Main/Jeda trek +#Name[nl]=Nummer afspelen/pauzeren +#Name[pl]=Odtwórz/Wstrzymaj ścieżkę +#Name[pt]=Reproduzir/Pausar faixa +#Name[pt_BR]=Play/Pause +#Name[ro]=Redare/Pauză melodia +#Name[ru]=Воспроизведение/Пауза дорожки +#Name[sk]=Prehrávať/Pozastaviť skladbu +#Name[sl]=Predvajaj/Zaustavi skladbo +#Name[sr]=Пусти/Паузирај нумеру +#Name[tr]=Parçayı oynat/duraklat +#Name[uk]=Відтворити/Призупинити трек +#Name[zh_CN]=暂停/继续 +#Name[zh_HK]=播放/暫停曲目 +#Name[zh_TW]=播放/暫停 +# +#[X-Previous Shortcut Group] +#Exec=dbus-send --print-reply --dest=org.mpris.MediaPlayer2.DeepinMusic /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Previous +#Name=Previous track +# +## Translations: +## Do not manually modify! +#Name[am_ET]=ያለፈው ተረኛ +#Name[ar]=المسار السابق +#Name[ast]=Pista previa +#Name[bg]=Предишна песен +#Name[ca]=Pista anterior +#Name[cs]=Předchozí skladba +#Name[da]=Forrige spor +#Name[de]=Vorheriger Titel +#Name[el]=Προηγούμενο κομμάτι +#Name[es]=Pista anterior +#Name[es_419]=Pista anterior +#Name[fa]=قطعه قبلی +#Name[fi]=Edellinen raita +#Name[fr]=Piste précédente +#Name[gl_ES]=Pista anterior +#Name[he]=הקטע הקודם +#Name[hi_IN]=पिछला गाना +#Name[hr]=Prethodni zapis +#Name[hu]=Előző szám +#Name[hy]=Նախորդը +#Name[id]=Lajur sebelumnya +#Name[it]=Traccia precedente +#Name[ja]=前へ +#Name[ko]=이전 트랙 +#Name[ku_IQ]=Strana paşve +#Name[lt]=Ankstesnis takelis +#Name[mn]=Өмнөх дуу +#Name[ms]=trek sebelumnya +#Name[nl]=Vorig nummer +#Name[pl]=Poprzednia ścieżka +#Name[pt]=Faixa anterior +#Name[pt_BR]=Anterior +#Name[ro]=Melodia anterioară +#Name[ru]=Предыдущая дорожка +#Name[sk]=Predchádzajúca stopa +#Name[sl]=Prejšnja skladba +#Name[sr]=Претходна нумера +#Name[tr]=Önceki parça +#Name[uk]=Попередній трек +#Name[zh_CN]=上一首 +#Name[zh_HK]=上一首歌曲 +#Name[zh_TW]=上一曲 diff -Nru deepin-music-5.0.1+ds/src/music-player/data/deepin-music-settings.json deepin-music-6.0.1.54+ds.1/src/music-player/data/deepin-music-settings.json --- deepin-music-5.0.1+ds/src/music-player/data/deepin-music-settings.json 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/data/deepin-music-settings.json 2020-07-14 12:05:00.000000000 +0000 @@ -27,7 +27,7 @@ "name": " ", "type": "checkbox", "text": "Enable fade in/out", - "default": true + "default": false }, { "key": "sort_type", @@ -91,7 +91,7 @@ "key": "theme", "hide": true, "reset": false, - "default": "light" + "default": 1 }, { "key": "theme_prefix", @@ -125,6 +125,7 @@ { "key": "close", "name": "Close Main Window", + "hide": false, "options": [ { "key": "ask_close_action", @@ -137,7 +138,7 @@ "type": "radiogroup", "items": [ "Minimize to system tray", - "Exit Deepin Music" + "Exit Music" ], "default": 0 } @@ -157,46 +158,97 @@ "key": "play_pause", "name": "Play/Pause", "type": "shortcut", - "default": [ - 67108864, - 80 - ] + "default": "Space" }, { "key": "previous", "name": "Previous", "type": "shortcut", - "default": [ - "67108864", - "16777234" - ] + "default": "Ctrl+Left" }, { "key": "next", "name": "Next", "type": "shortcut", - "default": [ - "67108864", - "16777236" - ] + "default": "Ctrl+Right" }, { "key": "volume_up", "name": "Volume up", "type": "shortcut", - "default": [ - "67108864", - "16777235" - ] + "default": "Ctrl+Alt+Up" }, { "key": "volume_down", "name": "Volume down", "type": "shortcut", - "default": [ - "67108864", - "16777237" - ] + "default": "Ctrl+Alt+Down" + } + ] + } + ] + }, + { + "key": "equalizer", + "name": "Equalizer", + "reset": false, + "hide": true, + "groups": [ + { + "key": "all", + "name": "All", + "options": [ + { + "key": "switch", + "default": false + }, + { + "key": "curEffect", + "default": 0 + }, + { + "key": "baud_pre", + "default": 12 + }, + { + "key": "baud_60", + "default": 0 + }, + { + "key": "baud_170", + "default": 0 + }, + { + "key": "baud_310", + "default": 0 + }, + { + "key": "baud_600", + "default": 0 + }, + { + "key": "baud_1K", + "default": 0 + }, + { + "key": "baud_3K", + "default": 0 + }, + { + "key": "baud_6K", + "default": 0 + }, + { + "key": "baud_12K", + "default": 0 + }, + { + "key": "baud_14K", + "default": 0 + }, + { + "key": "baud_16K", + "default": 0 } ] } diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/add_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/add_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/add_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/add_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,31 @@ + + + + add_normal + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/album_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/album_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/album_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/album_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,18 @@ + + + + album_normal + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/all_music_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/all_music_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/all_music_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/all_music_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + all music_normal + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/back_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/back_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/back_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/back_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + back_normal + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/clear_list_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/clear_list_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/clear_list_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/clear_list_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + clear list_normal + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/icons/actions/close_round normal.svg" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/close_round normal.svg" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/icons/actions/close_round normal.svg" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/close_round normal.svg" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,20 @@ + + + + titlebutton/close_round normal + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/collection_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/collection_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/collection_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/collection_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + collection_normal + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/cross_cycling_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/cross_cycling_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/cross_cycling_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/cross_cycling_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + cross-cycling_normal + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/famous_ballad_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/famous_ballad_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/famous_ballad_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/famous_ballad_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + famous ballad_normal + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/last_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/last_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/last_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/last_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + last_normal + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/lyric_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/lyric_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/lyric_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/lyric_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + lyric_normal + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/mute_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/mute_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/mute_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/mute_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + mute_normal + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/my_collection_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/my_collection_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/my_collection_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/my_collection_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + my collection_normal + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/next_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/next_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/next_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/next_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + next_normal + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/picture_list_normal_36px.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/picture_list_normal_36px.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/picture_list_normal_36px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/picture_list_normal_36px.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + picture list_normal + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/picture_list_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/picture_list_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/picture_list_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/picture_list_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + picture list_normal + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/play_all_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/play_all_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/play_all_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/play_all_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + play all_normal + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/playlist_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/playlist_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/playlist_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/playlist_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + playlist_normal + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/play_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/play_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/play_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/play_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + play_normal + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/random_play_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/random_play_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/random_play_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/random_play_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + random play_normal + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/search_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/search_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/search_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/search_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + search_normal + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/sequential_loop_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/sequential_loop_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/sequential_loop_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/sequential_loop_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,21 @@ + + + + sequential loop_normal + Created with Sketch. + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/singer_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/singer_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/singer_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/singer_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + singer_normal + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/single_tune_circulation_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/single_tune_circulation_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/single_tune_circulation_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/single_tune_circulation_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,22 @@ + + + + single tune circulation_normal + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/suspend_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/suspend_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/suspend_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/suspend_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + suspend_normal + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/text_list_normal_36px.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/text_list_normal_36px.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/text_list_normal_36px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/text_list_normal_36px.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + text list_normal + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/text_list_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/text_list_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/text_list_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/text_list_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + text list_normal + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/volume_add_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/volume_add_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/volume_add_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/volume_add_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume add_normal + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/volume_lessen_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/volume_lessen_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/volume_lessen_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/volume_lessen_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume lessen_normal + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/volume_low_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/volume_low_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/volume_low_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/volume_low_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume_normal 1 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/volume_mid_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/volume_mid_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/volume_mid_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/volume_mid_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume_normal 2 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/actions/volume_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/volume_normal.svg --- deepin-music-5.0.1+ds/src/music-player/icons/actions/volume_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/actions/volume_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + volume_normal + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/dark/actions/music_album_24px.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/dark/actions/music_album_24px.svg --- deepin-music-5.0.1+ds/src/music-player/icons/dark/actions/music_album_24px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/dark/actions/music_album_24px.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,18 @@ + + + + album_active + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/dark/actions/music_allmusic_24px.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/dark/actions/music_allmusic_24px.svg --- deepin-music-5.0.1+ds/src/music-player/icons/dark/actions/music_allmusic_24px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/dark/actions/music_allmusic_24px.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + all music_active + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/dark/actions/music_famousballad_24px.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/dark/actions/music_famousballad_24px.svg --- deepin-music-5.0.1+ds/src/music-player/icons/dark/actions/music_famousballad_24px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/dark/actions/music_famousballad_24px.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + famous ballad_active + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/dark/actions/music_mycollection_24px.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/dark/actions/music_mycollection_24px.svg --- deepin-music-5.0.1+ds/src/music-player/icons/dark/actions/music_mycollection_24px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/dark/actions/music_mycollection_24px.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + my collection_active + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/dark/actions/music_singer_24px.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/dark/actions/music_singer_24px.svg --- deepin-music-5.0.1+ds/src/music-player/icons/dark/actions/music_singer_24px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/dark/actions/music_singer_24px.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + singer_active + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/icons.qrc deepin-music-6.0.1.54+ds.1/src/music-player/icons/icons.qrc --- deepin-music-5.0.1+ds/src/music-player/icons/icons.qrc 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/icons.qrc 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + texts/picture_list_texts_36px.svg + texts/text_list_texts_36px.svg + dark/actions/music_album_24px.svg + light/actions/music_album_24px.svg + dark/actions/music_singer_24px.svg + dark/actions/music_allmusic_24px.svg + dark/actions/music_famousballad_24px.svg + dark/actions/music_mycollection_24px.svg + light/actions/music_singer_24px.svg + light/actions/music_allmusic_24px.svg + light/actions/music_famousballad_24px.svg + light/actions/music_mycollection_24px.svg + + diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/light/actions/music_album_24px.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/light/actions/music_album_24px.svg --- deepin-music-5.0.1+ds/src/music-player/icons/light/actions/music_album_24px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/light/actions/music_album_24px.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,18 @@ + + + + album_normal + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/light/actions/music_allmusic_24px.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/light/actions/music_allmusic_24px.svg --- deepin-music-5.0.1+ds/src/music-player/icons/light/actions/music_allmusic_24px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/light/actions/music_allmusic_24px.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + all music_normal + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/light/actions/music_famousballad_24px.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/light/actions/music_famousballad_24px.svg --- deepin-music-5.0.1+ds/src/music-player/icons/light/actions/music_famousballad_24px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/light/actions/music_famousballad_24px.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + famous ballad_normal + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/light/actions/music_mycollection_24px.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/light/actions/music_mycollection_24px.svg --- deepin-music-5.0.1+ds/src/music-player/icons/light/actions/music_mycollection_24px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/light/actions/music_mycollection_24px.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + my collection_normal + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/light/actions/music_singer_24px.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/light/actions/music_singer_24px.svg --- deepin-music-5.0.1+ds/src/music-player/icons/light/actions/music_singer_24px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/light/actions/music_singer_24px.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + singer_normal + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/texts/picture_list_texts_36px.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/texts/picture_list_texts_36px.svg --- deepin-music-5.0.1+ds/src/music-player/icons/texts/picture_list_texts_36px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/texts/picture_list_texts_36px.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + picture list_normal + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/icons/texts/text_list_texts_36px.svg deepin-music-6.0.1.54+ds.1/src/music-player/icons/texts/text_list_texts_36px.svg --- deepin-music-5.0.1+ds/src/music-player/icons/texts/text_list_texts_36px.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/icons/texts/text_list_texts_36px.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + text list_normal + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/install.pri deepin-music-6.0.1.54+ds.1/src/music-player/install.pri --- deepin-music-5.0.1+ds/src/music-player/install.pri 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/install.pri 2020-07-14 12:05:00.000000000 +0000 @@ -14,7 +14,8 @@ dman.files = $$PWD/dman/* translations.path = $${PREFIX}/share/$${TARGET}/translations -translations.files = $$PWD/translations/*.qm +translations.files = $$PWD/translations/*.qm \ + $$PWD/translations/desktop/*.qm hicolor.path = $${PREFIX}/share/icons/hicolor/scalable/apps hicolor.files = $$PWD/resource/theme/common/image/deepin-music.svg diff -Nru deepin-music-5.0.1+ds/src/music-player/main.cpp deepin-music-6.0.1.54+ds.1/src/music-player/main.cpp --- deepin-music-5.0.1+ds/src/music-player/main.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/main.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -29,7 +29,9 @@ #include #include #include - +#include +#include +#include #include #include "view/mainframe.h" @@ -40,14 +42,38 @@ #include "core/pluginmanager.h" #include "core/musicsettings.h" #include "core/util/threadpool.h" -#include +#include "core/util/global.h" #include "musicapp.h" +#include "speech/exportedinterface.h" using namespace Dtk::Core; using namespace Dtk::Widget; +void createSpeechDbus() +{ + QDBusConnection::sessionBus().registerService("com.deepin.musicSpeech"); + ExportedInterface *mSpeech = new ExportedInterface(nullptr); + mSpeech->registerAction("1", "playmusic"); + mSpeech->registerAction("2", "play artist"); + mSpeech->registerAction("3", "play artist song"); + mSpeech->registerAction("4", "play faverite"); + mSpeech->registerAction("5", "play custom "); + mSpeech->registerAction("6", "play radom"); + mSpeech->registerAction("11", "pause"); + mSpeech->registerAction("12", "stop"); + mSpeech->registerAction("13", "resume"); + mSpeech->registerAction("14", "previous"); + mSpeech->registerAction("15", "next"); + mSpeech->registerAction("21", "faverite"); + mSpeech->registerAction("22", "unfaverite"); + mSpeech->registerAction("23", "set play mode"); + +} + + int main(int argc, char *argv[]) { +// DApplication::setAttribute(Qt::AA_EnableHighDpiScaling); #ifdef SNAP_APP DStandardPaths::setMode(DStandardPaths::Snap); #endif @@ -60,10 +86,17 @@ DApplication app(argc, argv); app.setAttribute(Qt::AA_UseHighDpiPixmaps); - app.setAttribute(Qt::AA_EnableHighDpiScaling); +// app.setAttribute(Qt::AA_EnableHighDpiScaling); app.setOrganizationName("deepin"); + app.setApplicationName("deepin-music"); - app.setApplicationVersion(DApplication::buildVersion("3.1")); + //app.setApplicationVersion(DApplication::buildVersion("3.1")); + const QDate buildDate = QLocale( QLocale::English ).toDate( QString(__DATE__).replace(" ", " 0"), "MMM dd yyyy"); + QString t_date = buildDate.toString("MMdd"); + // Version Time + app.setApplicationVersion(DApplication::buildVersion(t_date)); + //app.setStyle("chameleon"); + DLogManager::registerConsoleAppender(); DLogManager::registerFileAppender(); @@ -74,32 +107,54 @@ parser.addVersionOption(); parser.addPositionalArgument("file", "Music file path"); parser.process(app); - + createSpeechDbus();//创建语音dbus // handle open file QString toOpenFile; - if (1 == parser.positionalArguments().length()) { + if (parser.positionalArguments().length() > 0) { toOpenFile = parser.positionalArguments().first(); } app.loadTranslator(); - // !!! MUST setApplicationDisplayName before DMainWindow create - app.setApplicationDisplayName(QObject::tr("Deepin Music")); - app.setWindowIcon(QIcon(":/common/image/deepin-music.svg")); + /* + MUST setApplicationDisplayName before DMainWindow create + app.setApplicationDisplayName(QObject::tr("Music")); + app.setWindowIcon(QIcon(":/common/image/deepin-music.svg")); + */ + + QIcon icon = QIcon::fromTheme("deepin-music"); + app.setProductIcon(icon); + + QString userName = QDir::homePath().section("/", -1, -1); + + auto *sharedMemory = new QSharedMemory(userName + QString("-deepinmusicsingle")); + volatile int i = 2; + while (i--) { + if (sharedMemory->attach(QSharedMemory::ReadOnly)) { + sharedMemory->detach(); + } + } - if (!app.setSingleInstance("deepinmusic")) { + if (!app.setSingleInstance("deepinmusic") || !sharedMemory->create(1)) { qDebug() << "another deepin music has started"; - if (!toOpenFile.isEmpty()) { - QFileInfo fi(toOpenFile); - QUrl url = QUrl::fromLocalFile(fi.absoluteFilePath()); - QDBusInterface iface("org.mpris.MediaPlayer2.DeepinMusic", - "/org/mpris/MediaPlayer2", - "org.mpris.MediaPlayer2.Player", - QDBusConnection::sessionBus()); - iface.asyncCall("OpenUri", url.toString()); + for (auto curStr : parser.positionalArguments()) { + if (!curStr.isEmpty()) { + QFileInfo fi(curStr); + QUrl url = QUrl::fromLocalFile(fi.absoluteFilePath()); + while (true) { + QDBusInterface iface("org.mpris.MediaPlayer2.DeepinMusic", + "/org/mpris/MediaPlayer2", + "org.mpris.MediaPlayer2.Player", + QDBusConnection::sessionBus()); + if (iface.isValid()) { + iface.asyncCall("OpenUri", url.toString()); + break; + } + } + } } - // show deepin-music + /*-----show deepin-music----*/ QDBusInterface iface("org.mpris.MediaPlayer2.DeepinMusic", "/org/mpris/MediaPlayer2", "org.mpris.MediaPlayer2", @@ -109,25 +164,24 @@ } MusicSettings::init(); - Player::instance()->init(); + + DApplicationSettings saveTheme; + + /*-DMainWindow must create on main function, so it can deconstruction before QApplication-*/ + + MainFrame mainframe; + MusicApp *music = new MusicApp(&mainframe); + music->initUI(); + /*---Player instance init---*/ + + music->initConnection(); + if (!toOpenFile.isEmpty()) { auto fi = QFileInfo(toOpenFile); auto url = QUrl::fromLocalFile(fi.absoluteFilePath()); MusicSettings::setOption("base.play.to_open_uri", url.toString()); } - // set theme - qDebug() << "TRACE:" << "set theme"; - auto theme = MusicSettings::value("base.play.theme").toString(); -// auto themePrefix = AppSettings::instance()->value("base.play.theme_prefix").toString(); -// DThemeManager::instance()->setPrefix(themePrefix); - DThemeManager::instance()->setTheme(theme); - - // DMainWindow must create on main function, so it can deconstruction before QApplication - MainFrame mainframe; - MusicApp *music = new MusicApp(&mainframe); - music->init(); - app.connect(&app, &QApplication::lastWindowClosed, &mainframe, [ & ]() { auto quit = MusicSettings::value("base.close.close_action").toInt(); @@ -138,5 +192,9 @@ app.setQuitOnLastWindowClosed(false); + + QObject::connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, + &mainframe, &MainFrame::slotTheme); + return app.exec(); } diff -Nru deepin-music-5.0.1+ds/src/music-player/musicapp.cpp deepin-music-6.0.1.54+ds.1/src/music-player/musicapp.cpp --- deepin-music-5.0.1+ds/src/music-player/musicapp.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/musicapp.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -32,7 +32,6 @@ #include #include #include -#include #include "core/player.h" #include "core/musicsettings.h" @@ -83,7 +82,7 @@ mprisPlayer->setCanPause(true); q->connect(mprisPlayer, &MprisPlayer::quitRequested, q, [ = ]() { - onQuit(); +// onQuit(); }); q->connect(mprisPlayer, &MprisPlayer::raiseRequested, q, [ = ]() { onRaise(); @@ -131,8 +130,8 @@ void MusicAppPrivate::onQuit() { -// appPresenter->deleteLater(); -// playerFrame->deleteLater(); + presenter->deleteLater(); + playerFrame->deleteLater(); // this->deleteLater(); } @@ -218,24 +217,27 @@ qDebug() << "restore state:" << state; dumpGeometry(geometry); - if (geometry.isEmpty()) { - d->playerFrame->resize(QSize(1070, 680)); - d->playerFrame->show(); - Dtk::Widget::moveToCenter(d->playerFrame); - } else { - d->playerFrame->restoreGeometry(geometry); - d->playerFrame->setWindowState(static_cast(state)); - } + d->playerFrame->resize(QSize(1070, 680)); + d->playerFrame->show(); + Dtk::Widget::moveToCenter(d->playerFrame); +// if (geometry.isEmpty()) { +// d->playerFrame->resize(QSize(1070, 680)); +// d->playerFrame->show(); +// Dtk::Widget::moveToCenter(d->playerFrame); +// } else { +// d->playerFrame->restoreGeometry(geometry); +// d->playerFrame->setWindowState(static_cast(state)); +// } d->playerFrame->show(); d->playerFrame->setFocus(); } void MusicApp::quit() { - Q_D(MusicApp); - d->presenter->handleQuit(); + //Q_D(MusicApp); +// d->presenter->handleQuit(); qDebug() << "sync config start"; - MusicSettings::sync(); +// MusicSettings::sync(); #ifdef Q_OS_LINUX sync(); #endif @@ -243,16 +245,26 @@ qApp->quit(); } -void MusicApp::init() +void MusicApp::initUI() { Q_D(MusicApp); -// auto mediaCount = AppSettings::instance()->value("base.play.media_count").toInt(); -// auto mediaCount = 1; + /* + *auto mediaCount = AppSettings::instance()->value("base.play.media_count").toInt(); + *auto mediaCount = 1; + *d->playerFrame->initUI(0 != mediaCount); + */ + d->playerFrame->initUI(true); + qDebug() << "TRACE:" << "create MainFrame"; -// d->playerFrame->initUI(0 != mediaCount); + show(); +} + +void MusicApp::initConnection() +{ + Q_D(MusicApp); qDebug() << "TRACE:" << "create Presenter"; d->presenter = new Presenter; @@ -261,8 +273,10 @@ connect(presenterWork, &QThread::started, d->presenter, &Presenter::prepareData); connect(d->presenter, &Presenter::dataLoaded, this, [ = ]() { d->onDataPrepared(); + Player::instance()->init(); }); presenterWork->start(); qDebug() << "TRACE:" << "start prepare data"; } + diff -Nru deepin-music-5.0.1+ds/src/music-player/musicapp.h deepin-music-6.0.1.54+ds.1/src/music-player/musicapp.h --- deepin-music-5.0.1+ds/src/music-player/musicapp.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/musicapp.h 2020-07-14 12:05:00.000000000 +0000 @@ -32,10 +32,11 @@ { Q_OBJECT public: - MusicApp(MainFrame* frame, QObject *parent = nullptr); + MusicApp(MainFrame *frame, QObject *parent = nullptr); ~MusicApp(); - void init(); + void initUI(); + void initConnection(); void show(); void quit(); diff -Nru deepin-music-5.0.1+ds/src/music-player/music-player.pro deepin-music-6.0.1.54+ds.1/src/music-player/music-player.pro --- deepin-music-5.0.1+ds/src/music-player/music-player.pro 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/music-player.pro 2020-07-14 12:05:00.000000000 +0000 @@ -12,13 +12,25 @@ CONFIG += c++11 link_pkgconfig DESTDIR = $$BUILD_DIST/bin -unix{ +#unix{ DEFINES += SUPPORT_INOTIFY QT += x11extras - PKGCONFIG += icu-uc icu-i18n libavutil libavformat libavcodec + PKGCONFIG += icu-uc icu-i18n PKGCONFIG += x11 xext - PKGCONFIG += dtkwidget -} + QT += dtkwidget + + CONFIG(ENABLE_LIBAV) { + PKGCONFIG += libavutil libavformat libavcodec + } else { + DEFINES += DISABLE_LIBAV + } +#} + +LIBS += -L$$BUILD_DIST/lib -lvlc +LIBS += -L$$BUILD_DIST/lib -lvlccore + +INCLUDEPATH += /usr/include/vlc +INCLUDEPATH += /usr/include/vlc/plugins INCLUDEPATH += $$PWD/view/helper INCLUDEPATH += $$PWD/core @@ -34,9 +46,6 @@ view/widget/cover.cpp \ view/widget/infodialog.cpp \ view/widget/modebuttom.cpp \ - view/widget/musiclistview.cpp \ - view/widget/playlistitem.cpp \ - view/widget/playlistview.cpp \ view/widget/pushbutton.cpp \ view/widget/searchedit.cpp \ view/widget/searchresult.cpp \ @@ -56,13 +65,9 @@ view/widget/listview.cpp \ view/mainframe.cpp \ view/importwidget.cpp \ - view/musiclistwidget.cpp \ - view/playlistwidget.cpp \ musicapp.cpp \ main.cpp \ - view/widget/model/musiclistmodel.cpp \ view/widget/delegate/lyriclinedelegate.cpp \ - view/widget/delegate/musicitemdelegate.cpp \ view/lyricwidget.cpp \ view/widget/lyricview.cpp \ view/widget/settingsdialog.cpp \ @@ -70,7 +75,59 @@ view/footerwidget.cpp \ view/loadwidget.cpp \ view/widget/closeconfirmdialog.cpp \ - core/musicsettings.cpp + core/musicsettings.cpp \ + view/playlistwidget.cpp \ + view/widget/playlistview.cpp \ + view/widget/delegate/playitemdelegate.cpp \ + view/widget/model/playlistmodel.cpp \ + view/musiclistwidget.cpp \ + view/widget/musiclistview.cpp \ + view/widget/musiclistitem.cpp \ + view/musiclistdatawidget.cpp \ + view/widget/musiclistdataview.cpp \ + view/widget/model/musiclistdatamodel.cpp \ + view/widget/delegate/musiclistdatadelegate.cpp \ + view/widget/musicimagebutton.cpp \ + view/widget/musicpixmapbutton.cpp \ + view/widget/musiclistviewitem.cpp \ + view/widget/waveform.cpp \ + core/util/musiclyric.cpp \ + view/widget/lyriclabel.cpp \ + view/musiclyricwidget.cpp \ + view/widget/searchlyricswidget.cpp \ + view/widget/waveformscale.cpp \ + view/widget/musiclistinfoview.cpp \ + view/widget/musiclistdialog.cpp \ + view/widget/model/musiclistinfomodel.cpp \ + view/widget/delegate/musicinfoitemdelegate.cpp \ + core/util/fft.cpp \ + view/widget/musictitleimage.cpp \ + view/widget/musiciconbutton.cpp \ + core/metabufferdetector.cpp \ + view/widget/musicboxbutton.cpp \ + view/widget/model/musiclistmodel.cpp \ + view/shortcut.cpp \ + core/util/dbusutils.cpp \ + view/widget/tooltips.cpp \ + core/util/inotifyfiles.cpp \ + view/musiclistscrollarea.cpp \ + core/volumemonitoring.cpp \ + view/widget/musicsearchlistview.cpp \ + view/widget/model/musicsearchlistmodel.cpp \ + view/widget/delegate/musicsearchlistdelegate.cpp \ + core/AudioBufferDevice.cpp \ + core/AudioPlayer.cpp \ + speech/exportedinterface.cpp \ + speech/speechCenter.cpp \ + core/vlc/Audio.cpp \ + core/vlc/Common.cpp \ + core/vlc/Enums.cpp \ + core/vlc/Error.cpp \ + core/vlc/Instance.cpp \ + core/vlc/Media.cpp \ + core/vlc/MediaPlayer.cpp \ + core/vlc/Equalizer.cpp \ + view/widget/dequalizerdialog.cpp HEADERS += \ musicapp.h \ @@ -85,9 +142,6 @@ view/widget/cover.h \ view/widget/infodialog.h \ view/widget/modebuttom.h \ - view/widget/musiclistview.h \ - view/widget/playlistitem.h \ - view/widget/playlistview.h \ view/widget/pushbutton.h \ view/widget/searchedit.h \ view/widget/searchresult.h \ @@ -106,25 +160,76 @@ core/util/global.h \ core/metasearchservice.h \ core/pluginmanager.h \ - view/musiclistwidget.h \ - view/playlistwidget.h \ view/mainframe.h \ view/widget/listview.h \ - view/widget/model/musiclistmodel.h \ view/widget/delegate/lyriclinedelegate.h \ - view/widget/delegate/musicitemdelegate.h \ view/lyricwidget.h \ view/widget/lyricview.h \ core/util/threadpool.h \ view/footerwidget.h \ view/loadwidget.h \ view/widget/closeconfirmdialog.h \ - view/widget/delegate/musicitemdelegate_p.h \ - core/musicsettings.h + core/musicsettings.h \ + view/playlistwidget.h \ + view/widget/delegate/playitemdelegate.h \ + view/widget/model/playlistmodel.h \ + view/widget/playlistview.h \ + view/widget/delegate/playitemdelegate_p.h \ + view/musiclistwidget.h \ + view/widget/musiclistview.h \ + view/widget/musiclistitem.h \ + view/musiclistdatawidget.h \ + view/widget/musiclistdataview.h \ + view/widget/model/musiclistdatamodel.h \ + view/widget/delegate/musiclistdatadelegate.h \ + view/widget/musicimagebutton.h \ + view/widget/musicpixmapbutton.h \ + view/widget/musiclistviewitem.h \ + view/widget/waveform.h \ + core/util/musiclyric.h \ + view/widget/lyriclabel.h \ + view/musiclyricwidget.h \ + view/widget/searchlyricswidget.h \ + view/widget/waveformscale.h \ + view/widget/musiclistdialog.h \ + view/widget/musiclistinfoview.h \ + view/widget/model/musiclistinfomodel.h \ + view/widget/delegate/musicinfoitemdelegate.h \ + view/widget/delegate/musicinfoitemdelegate_p.h \ + core/util/fft.h \ + view/widget/musictitleimage.h \ + view/widget/musiciconbutton.h \ + core/metabufferdetector.h \ + view/widget/musicboxbutton.h \ + view/widget/model/musiclistmodel.h \ + view/shortcut.h \ + core/util/dbusutils.h \ + view/widget/tooltips.h \ + core/util/inotifyfiles.h \ + view/musiclistscrollarea.h \ + core/volumemonitoring.h \ + view/widget/musicsearchlistview.h \ + view/widget/model/musicsearchlistmodel.h \ + view/widget/delegate/musicsearchlistdelegate.h \ + core/AudioBufferDevice.h \ + core/AudioPlayer.h \ + speech/exportedinterface.h \ + speech/speechCenter.h \ + core/vlc/Audio.h \ + core/vlc/Common.h \ + core/vlc/Enums.h \ + core/vlc/Error.h \ + core/vlc/Instance.h \ + core/vlc/Media.h \ + core/vlc/MediaPlayer.h \ + core/vlc/Equalizer.h \ + view/widget/dequalizerdialog.h RESOURCES += \ resource/theme/theme.qrc \ - config.qrc + config.qrc \ + resource/resource.qrc \ + icons/icons.qrc unix{ SOURCES += \ @@ -135,6 +240,9 @@ } TRANSLATIONS += $$PWD/translations/$${TARGET}.ts \ - $$PWD/translations/$${TARGET}_zh_CN.ts + $$PWD/translations/$${TARGET}_zh_CN.ts \ + $$PWD/translations/$${TARGET}_en_US.ts \ + $$PWD/translations/desktop/desktop_zh_CN.ts \ + $$PWD/translations/desktop/desktop_en_US.ts include($$PWD/install.pri) diff -Nru deepin-music-5.0.1+ds/src/music-player/presenter/presenter.cpp deepin-music-6.0.1.54+ds.1/src/music-player/presenter/presenter.cpp --- deepin-music-5.0.1+ds/src/music-player/presenter/presenter.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/presenter/presenter.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -38,6 +38,7 @@ #include #include "../musicapp.h" +#include "util/pinyinsearch.h" #include "../core/player.h" #include "../core/playlist.h" #include "../core/playlistmanager.h" @@ -47,9 +48,39 @@ #include "../core/medialibrary.h" #include "../core/pluginmanager.h" #include "../core/util/threadpool.h" +#include "../core/metabufferdetector.h" using namespace DMusic; +Transfer::Transfer(QObject *parent): QObject(parent) +{ + +} + +Transfer::~Transfer() +{ + +} + +void Transfer::onMusicListAdded(PlaylistPtr playlist, const MetaPtrList metalist) +{ + int length = metalist.length(); + MetaPtrList slice; + for (int i = 0; i < length; i++) { + auto meta = metalist.at(i); + slice << meta; + if (i % 30 == 0) { + Q_EMIT musicListAdded(playlist, slice); + slice.clear(); + QThread::msleep(50); + } + } + if (slice.length() > 0) { + Q_EMIT musicListAdded(playlist, slice); + slice.clear(); + } +} + PresenterPrivate::PresenterPrivate(Presenter *parent) : QObject(parent), q_ptr(parent) { @@ -74,6 +105,14 @@ player = Player::instance(); qDebug() << "TRACE:" << "player init finished"; + connect(player, &Player::audioBufferProbed, q, [ = ](const QAudioBuffer & buffer) { + Q_EMIT q->audioBufferProbed(buffer); + }); + + metaBufferDetector = new MetaBufferDetector(this); + connect(metaBufferDetector, &MetaBufferDetector::metaBuffer, q, [ = ](const QVector &buffer, const QString & hash) { + Q_EMIT q->metaBuffer(buffer, hash); + }, Qt::QueuedConnection); settings = MusicSettings::instance(); @@ -87,11 +126,218 @@ qDebug() << "TRACE:" << "playlistMgr init finished"; currentPlaylist = playlistMgr->playlist(AllMusicListID); + PlaylistPtr albumPlaylist = playlistMgr->playlist(AlbumMusicListID); + albumPlaylist->metaListToPlayMusicTypePtrList(Playlist::SortByAblum, currentPlaylist->allmusic()); + PlaylistPtr artistPlaylist = playlistMgr->playlist(ArtistMusicListID); + artistPlaylist->metaListToPlayMusicTypePtrList(Playlist::SortByArtist, currentPlaylist->allmusic()); + + player->setCurPlaylist(playlistMgr->playlist(PlayMusicListID)); - connect(this, &PresenterPrivate::play, player, &Player::playMeta); - connect(this, &PresenterPrivate::resume, player, &Player::resume); - connect(this, &PresenterPrivate::playNext, player, &Player::playNextMeta); - connect(this, &PresenterPrivate::playPrev, player, &Player::playPrevMusic); + connect(this, &PresenterPrivate::play, + this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { + auto curPlaylist = player->curPlaylist(); + if (curPlaylist->id() != playlist->id()) { + auto curAllMetas = playlist->allmusic(); + for (int i = curAllMetas.size() - 1; i >= 0; i--) { + if (meta == curAllMetas[i]) + continue; + if (curAllMetas[i]->invalid && !QFile::exists(curAllMetas[i]->localPath)) + curAllMetas.removeAt(i); + else { + curAllMetas[i]->invalid = false; + } + } + auto allMsics = curPlaylist->allmusic(); + bool same = true; + if (allMsics.size() != curAllMetas.size()) { + same = false; + } else if (!curAllMetas.isEmpty() && allMsics.size() == curAllMetas.size()) { + if (allMsics.first()->hash != curAllMetas.first()->hash || allMsics.last()->hash != curAllMetas.last()->hash) { + same = false; + } else { + for (int i = 1; i < allMsics.size() - 1; ++i) { + if (allMsics[i]->hash != curAllMetas[i]->hash) { + same = false; + break; + } + } + } + } + if (!same) { + curPlaylist->removeMusicList(curPlaylist->allmusic()); + this->thread()->msleep(50); + curPlaylist->appendMusicList(curAllMetas); + } + } else { + auto curPlaylist = player->curPlaylist(); + auto curAllMetas = curPlaylist->allmusic(); + MetaPtrList curRemoveMetas; + for (int i = curAllMetas.size() - 1; i >= 0; i--) { + if (curAllMetas[i]->invalid && !QFile::exists(curAllMetas[i]->localPath)) + curRemoveMetas.append(curAllMetas[i]); + else { + curAllMetas[i]->invalid = false; + } + } + if (!curRemoveMetas.isEmpty()) { + curPlaylist->removeMusicList(curRemoveMetas); + } + } + player->playMeta(playlist, meta); + }); + connect(this, &PresenterPrivate::resume, + this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { + auto curPlaylist = player->curPlaylist(); + if (curPlaylist->id() != playlist->id()) { + auto curAllMetas = playlist->allmusic(); + for (int i = curAllMetas.size() - 1; i >= 0; i--) { + if (meta == curAllMetas[i]) + continue; + if (curAllMetas[i]->invalid && !QFile::exists(curAllMetas[i]->localPath)) + curAllMetas.removeAt(i); + else { + curAllMetas[i]->invalid = false; + } + } + auto allMsics = curPlaylist->allmusic(); + bool same = true; + if (allMsics.size() != curAllMetas.size()) { + same = false; + } else if (!curAllMetas.isEmpty() && allMsics.size() == curAllMetas.size()) { + if (allMsics.first()->hash != curAllMetas.first()->hash || allMsics.last()->hash != curAllMetas.last()->hash) { + same = false; + } else { + for (int i = 1; i < allMsics.size() - 1; ++i) { + if (allMsics[i]->hash != curAllMetas[i]->hash) { + same = false; + break; + } + } + } + } + if (!same) { + curPlaylist->removeMusicList(curPlaylist->allmusic()); + curPlaylist->appendMusicList(curAllMetas); + } + } else { + auto curPlaylist = player->curPlaylist(); + auto curAllMetas = curPlaylist->allmusic(); + MetaPtrList curRemoveMetas; + for (int i = curAllMetas.size() - 1; i >= 0; i--) { + if (curAllMetas[i]->invalid && !QFile::exists(curAllMetas[i]->localPath)) + curRemoveMetas.append(curAllMetas[i]); + else { + curAllMetas[i]->invalid = false; + } + } + if (!curRemoveMetas.isEmpty()) { + curPlaylist->removeMusicList(curRemoveMetas); + } + } + player->resume(playlist, meta); + }); + connect(this, &PresenterPrivate::playNext, + this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { + auto curPlaylist = player->curPlaylist(); + if (curPlaylist->id() != playlist->id()) { + auto curAllMetas = playlist->allmusic(); + for (int i = curAllMetas.size() - 1; i >= 0; i--) { + if (meta == curAllMetas[i]) + continue; + if (curAllMetas[i]->invalid && !QFile::exists(curAllMetas[i]->localPath)) + curAllMetas.removeAt(i); + else { + curAllMetas[i]->invalid = false; + } + } + auto allMsics = curPlaylist->allmusic(); + bool same = true; + if (allMsics.size() != curAllMetas.size()) { + same = false; + } else if (!curAllMetas.isEmpty() && allMsics.size() == curAllMetas.size()) { + if (allMsics.first()->hash != curAllMetas.first()->hash || allMsics.last()->hash != curAllMetas.last()->hash) { + same = false; + } else { + for (int i = 1; i < allMsics.size() - 1; ++i) { + if (allMsics[i]->hash != curAllMetas[i]->hash) { + same = false; + break; + } + } + } + } + if (!same) { + curPlaylist->removeMusicList(curPlaylist->allmusic()); + curPlaylist->appendMusicList(curAllMetas); + } + } else { + auto curPlaylist = player->curPlaylist(); + auto curAllMetas = curPlaylist->allmusic(); + MetaPtrList curRemoveMetas; + for (int i = curAllMetas.size() - 1; i >= 0; i--) { + if (curAllMetas[i]->invalid && !QFile::exists(curAllMetas[i]->localPath)) + curRemoveMetas.append(curAllMetas[i]); + else { + curAllMetas[i]->invalid = false; + } + } + if (!curRemoveMetas.isEmpty()) { + curPlaylist->removeMusicList(curRemoveMetas); + } + } + player->playNextMeta(playlist, meta); + }); + connect(this, &PresenterPrivate::playPrev, + this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { + auto curPlaylist = player->curPlaylist(); + if (curPlaylist->id() != playlist->id()) { + auto curAllMetas = playlist->allmusic(); + for (int i = curAllMetas.size() - 1; i >= 0; i--) { + if (meta == curAllMetas[i]) + continue; + if (curAllMetas[i]->invalid && !QFile::exists(curAllMetas[i]->localPath)) + curAllMetas.removeAt(i); + else { + curAllMetas[i]->invalid = false; + } + } + auto allMsics = curPlaylist->allmusic(); + bool same = true; + if (allMsics.size() != curAllMetas.size()) { + same = false; + } else if (!curAllMetas.isEmpty() && allMsics.size() == curAllMetas.size()) { + if (allMsics.first()->hash != curAllMetas.first()->hash || allMsics.last()->hash != curAllMetas.last()->hash) { + same = false; + } else { + for (int i = 1; i < allMsics.size() - 1; ++i) { + if (allMsics[i]->hash != curAllMetas[i]->hash) { + same = false; + break; + } + } + } + } + if (!same) { + curPlaylist->removeMusicList(curPlaylist->allmusic()); + curPlaylist->appendMusicList(curAllMetas); + } + } else { + auto curPlaylist = player->curPlaylist(); + auto curAllMetas = curPlaylist->allmusic(); + MetaPtrList curRemoveMetas; + for (int i = curAllMetas.size() - 1; i >= 0; i--) { + if (curAllMetas[i]->invalid && !QFile::exists(curAllMetas[i]->localPath)) + curRemoveMetas.append(curAllMetas[i]); + else { + curAllMetas[i]->invalid = false; + } + } + if (!curRemoveMetas.isEmpty()) { + curPlaylist->removeMusicList(curRemoveMetas); + } + } + player->playPrevMusic(playlist, meta); + }); connect(this, &PresenterPrivate::pause, player, &Player::pause); connect(this, &PresenterPrivate::stop, player, &Player::stop); @@ -139,12 +385,47 @@ { Q_Q(Presenter); + if (playlist.isNull() || meta.isNull()) + return; + MetaPtr favInfo(meta); favInfo->favourite = playlistMgr->playlist(FavMusicListID)->contains(meta); -// qDebug() << FavMusicListID << meta->title << favInfo->favourite; + // qDebug() << FavMusicListID << meta->title << favInfo->favourite; Q_EMIT q->musicPlayed(playlist, favInfo); } +bool Presenter::containsStr(QString searchText, QString text) +{ + //filter + text = QString(text).remove("\r").remove("\n"); + bool chineseFlag = false; + for (auto ch : searchText) { + if (DMusic::PinyinSearch::isChinese(ch)) { + chineseFlag = true; + break; + } + } + if (chineseFlag) { + return text.contains(searchText); + } else { + auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(text); + QString curTextListStr = ""; + if (!curTextList.isEmpty()) { + for (auto mText : curTextList) { + if (mText.contains(searchText, Qt::CaseInsensitive)) { + return true; + } + curTextListStr += mText; + } +// curTextListStr = QString(curTextListStr.remove(" ")); + if (curTextListStr.contains(searchText, Qt::CaseInsensitive)) { + return true; + } + } + return text.contains(searchText, Qt::CaseInsensitive); + } +} + Presenter::Presenter(QObject *parent) : QObject(parent), d_ptr(new PresenterPrivate(this)) { @@ -176,10 +457,11 @@ { Q_D(Presenter); -// QThread::sleep(10); + // QThread::sleep(10); d->initBackend(); qDebug() << "TRACE:" << "initBackend finished"; - + d->transfer = new Transfer(); + ThreadPool::instance()->moveToNewThread(d->transfer); connect(d->library, &MediaLibrary::meidaFileImported, this, [ = ](const QString & playlistId, MetaPtrList metalist) { auto playlist = d->playlistMgr->playlist(playlistId); @@ -192,7 +474,30 @@ PlaylistPtr allplaylist = d->playlistMgr->playlist(AllMusicListID); allplaylist->appendMusicList(metalist); } + auto allMetas = playlist->allmusic(); + int count = 0; + for (auto meta : metalist) { + for (auto curMeta : allMetas) { + if (curMeta->hash == meta->hash) { + count++; + break; + } + } + } + Q_EMIT notifyAddToPlaylist(playlist, metalist, count); + playlist->appendMusicList(metalist); + PlaylistPtr allplaylist = d->playlistMgr->playlist(AllMusicListID); + if (!allplaylist.isNull()) { + PlaylistPtr albumPlaylist = d->playlistMgr->playlist(AlbumMusicListID); + PlaylistPtr artistPlaylist = d->playlistMgr->playlist(ArtistMusicListID); + if (albumPlaylist) { + albumPlaylist->metaListToPlayMusicTypePtrList(Playlist::SortByAblum, allplaylist->allmusic()); + } + if (artistPlaylist) { + artistPlaylist->metaListToPlayMusicTypePtrList(Playlist::SortByArtist, allplaylist->allmusic()); + } + } Q_EMIT meidaFilesImported(playlist, metalist); }); @@ -210,64 +515,55 @@ }); connect(d->playlistMgr, &PlaylistManager::musiclistAdded, - this, [ = ](PlaylistPtr playlist, const MetaPtrList metalist) { - int length = metalist.length(); - MetaPtrList slice; - for (int i = 0; i < length; i++) { - auto meta = metalist.at(i); - slice << meta; - if (i % 30 == 0) { - Q_EMIT musicListAdded(playlist, slice); - slice.clear(); - QThread::msleep(233); - } - } - if (slice.length() > 0) { - Q_EMIT musicListAdded(playlist, slice); - slice.clear(); - } - }); + d->transfer, &Transfer::onMusicListAdded, Qt::UniqueConnection); + connect(d->transfer, &Transfer::musicListAdded, + this, &Presenter::musicListAdded, Qt::UniqueConnection); + + connect(d->playlistMgr, &PlaylistManager::musiclistRemoved, this, [ = ](PlaylistPtr playlist, const MetaPtrList metalist) { - qDebug() << playlist << playlist->id(); + //qDebug() << playlist << playlist->id(); Q_EMIT musicListRemoved(playlist, metalist); }); connect(d->player, &Player::positionChanged, - this, [ = ](qint64 position, qint64 duration) { + this, [ = ](qint64 position, qint64 duration, qint64 coefficient) { d->lastPlayPosition = position; - Q_EMIT progrossChanged(position, duration); + Q_EMIT progrossChanged(position, duration, coefficient); }); connect(d->player, &Player::volumeChanged, this, &Presenter::volumeChanged); - connect(d->player, &Player::mutedChanged, - this, [ = ](bool mute) { - if (mute) { - Q_EMIT this->mutedChanged(mute); - } else { - Q_EMIT this->volumeChanged(d->player->volume()); - } - }); + this, &Presenter::mutedChanged); +// connect(d->player, &Player::localMutedChanged, +// this, &Presenter::localMutedChanged); + + connect(this, &Presenter::musicFileMiss, + d->player, &Player::musicFileMiss); connect(d->player, &Player::mediaPlayed, this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { - d->settings->setOption("base.play.last_meta", meta->hash); - d->settings->setOption("base.play.last_playlist", playlist->id()); - d->notifyMusicPlayed(playlist, meta); - d->requestMetaSearch(meta); + if (!meta.isNull()) { + d->settings->setOption("base.play.last_meta", meta->hash); + if (!playlist.isNull() || playlist->id() != PlayMusicListID) + d->settings->setOption("base.play.last_playlist", playlist->id()); + d->notifyMusicPlayed(playlist, meta); + d->requestMetaSearch(meta); + d->metaBufferDetector->onBufferDetector(meta->localPath, meta->hash); + } }); connect(d->player, &Player::mediaError, this, [ = ](PlaylistPtr playlist, const MetaPtr meta, Player::Error error) { Q_D(Presenter); Q_ASSERT(!playlist.isNull()); + Q_EMIT musicError(playlist, meta, error); if (error == Player::NoError) { -// qDebug() << "set d->syncPlayerResult false " << meta->title; + d->syncPlayerResult = false; if (meta->invalid) { meta->invalid = false; @@ -277,24 +573,20 @@ return; } - if (!meta->invalid) { - meta->invalid = true; - Q_EMIT musicMetaUpdate(playlist, meta); + if (meta != nullptr) { + if (!meta->invalid) { + meta->invalid = true; + Q_EMIT musicMetaUpdate(playlist, meta); + } } -// qDebug() << "check d->syncPlayerResult" << d->syncPlayerResult << meta->title; if (d->syncPlayerResult) { -// qDebug() << "set d->syncPlayerResult false " << meta->title; + d->syncPlayerResult = false; Q_EMIT notifyMusciError(playlist, meta, error); } else { -// qDebug() << "next" << playlist->displayName() << playlist->canNext(); - if (playlist->canNext() && d->continueErrorCount < 5) { - DUtil::TimerSingleShot(800, [d, playlist, meta]() { - ++d->continueErrorCount; - d->playNext(playlist, meta); - }); - } + + Q_EMIT notifyMusciError(playlist, meta, error); } }); @@ -319,9 +611,9 @@ Q_D(Presenter); Q_EMIT d->requestInitPlugin(); - auto volume = d->settings->value("base.play.volume").toInt(); + int volume = d->settings->value("base.play.volume").toInt(); d->player->setVolume(volume); - Q_EMIT this->volumeChanged(d->player->volume()); + Q_EMIT this->volumeChanged(volume); auto mute = d->settings->value("base.play.mute").toBool(); d->player->setMuted(mute); @@ -331,6 +623,30 @@ d->player->setMode(static_cast(playmode)); Q_EMIT this->modeChanged(playmode); + setEqualizerEnable(true); + //读取均衡器使能开关配置 + auto eqSwitch = d->settings->value("equalizer.all.switch").toBool(); + //自定义频率 + QList allBauds; + allBauds.clear(); + allBauds.append(d->settings->value("equalizer.all.baud_pre").toInt()); + allBauds.append(d->settings->value("equalizer.all.baud_60").toInt()); + allBauds.append(d->settings->value("equalizer.all.baud_170").toInt()); + allBauds.append(d->settings->value("equalizer.all.baud_310").toInt()); + allBauds.append(d->settings->value("equalizer.all.baud_600").toInt()); + allBauds.append(d->settings->value("equalizer.all.baud_1K").toInt()); + allBauds.append(d->settings->value("equalizer.all.baud_3K").toInt()); + allBauds.append(d->settings->value("equalizer.all.baud_6K").toInt()); + allBauds.append(d->settings->value("equalizer.all.baud_12K").toInt()); + allBauds.append(d->settings->value("equalizer.all.baud_14K").toInt()); + allBauds.append(d->settings->value("equalizer.all.baud_16K").toInt()); + //载入当前设置音效 + auto eqCurEffect = d->settings->value("equalizer.all.curEffect").toInt(); + + if (eqSwitch) { + setEqualizer(eqSwitch, eqCurEffect, allBauds); + } + auto allplaylist = d->playlistMgr->playlist(AllMusicListID); auto lastPlaylist = allplaylist; if (lastPlaylist.isNull()) { @@ -342,7 +658,7 @@ auto isMetaLibClear = MediaLibrary::instance()->isEmpty(); isMetaLibClear |= allplaylist->isEmpty(); - if (d->settings->value("base.play.remember_progress").toBool() && !isMetaLibClear) { + if (/*d->settings->value("base.play.remember_progress").toBool() && */!isMetaLibClear) { d->syncPlayerResult = true; auto lastPlaylistId = d->settings->value("base.play.last_playlist").toString(); @@ -364,17 +680,24 @@ } if (!lastMeta.isNull()) { - position = d->settings->value("base.play.last_position").toInt(); + position = 0; + if (d->settings->value("base.play.remember_progress").toBool()) { + position = d->settings->value("base.play.last_position").toInt(); + } d->lastPlayPosition = position; - onCurrentPlaylistChanged(lastPlaylist); + if (d->settings->value("base.play.remember_progress").toBool()) + onCurrentPlaylistChanged(lastPlaylist); Q_EMIT locateMusic(lastPlaylist, lastMeta); d->notifyMusicPlayed(lastPlaylist, lastMeta); d->player->setPlayOnLoaded(false); d->player->setFadeInOut(false); d->player->loadMedia(lastPlaylist, lastMeta); - d->player->pause(); - d->player->setPosition(position); + d->metaBufferDetector->onBufferDetector(lastMeta->localPath, lastMeta->hash); +// d->player->pause(); + QTimer::singleShot(150, [ = ]() {//延迟150ms是为了在加载的时候,音乐播放100ms后再设置进度 + d->player->setPosition(position); + }); Q_EMIT musicPaused(lastPlaylist, lastMeta); if (d->lyricService) { @@ -383,16 +706,38 @@ } } + auto curPlaylist = d->playlistMgr->playlist(PlayMusicListID); QString toOpenUri = d->settings->value("base.play.to_open_uri").toString(); if (!toOpenUri.isEmpty()) { MusicSettings::setOption("base.play.to_open_uri", ""); MusicSettings::sync(); openUri(QUrl(toOpenUri)); } else { - if (d->settings->value("base.play.auto_play").toBool() && !lastPlaylist->isEmpty() && !isMetaLibClear) { + if (d->settings->value("base.play.auto_play").toBool() && !curPlaylist->isEmpty() && !lastPlaylist->isEmpty() && !isMetaLibClear) { qDebug() << lastPlaylist->id() << lastPlaylist->displayName(); - onCurrentPlaylistChanged(lastPlaylist); - onMusicResume(lastPlaylist, lastMeta); + if (d->settings->value("base.play.remember_progress").toBool() && !isMetaLibClear) { + onCurrentPlaylistChanged(lastPlaylist); + + // d->player->setPosition(position); + QTimer::singleShot(200, [ = ]() {//200ms播放是为了在加载播放的100ms结束,150ms设置播放进度后再播放。 + onMusicResume(lastPlaylist, lastMeta); + }); + + } else { + d->lastPlayPosition = 0; + onCurrentPlaylistChanged(lastPlaylist); + Q_EMIT locateMusic(lastPlaylist, lastMeta); + d->notifyMusicPlayed(lastPlaylist, lastMeta); + + d->player->setPlayOnLoaded(false); + d->player->setFadeInOut(false); + d->player->loadMedia(lastPlaylist, lastMeta); + + QTimer::singleShot(200, [ = ]() {//200ms播放是为了在加载播放的100ms结束,150ms设置播放进度后再播放。 + onMusicResume(lastPlaylist, lastMeta); + }); + } + } } @@ -423,7 +768,7 @@ return; } auto list = d->playlistMgr->playlist(AllMusicListID); - onAddToPlaylist(list, metas); + onAddMetaToPlaylist(list, metas); Q_EMIT MediaLibrary::instance()->meidaFileImported(AllMusicListID, metas); onSyncMusicPlay(list, metas.first()); @@ -432,6 +777,7 @@ void Presenter::onSyncMusicPlay(PlaylistPtr playlist, const MetaPtr meta) { + Q_D(Presenter); d->syncPlayerResult = true; d->continueErrorCount = 0; @@ -472,6 +818,12 @@ return d->playlistMgr->allplaylist(); } +PlaylistPtr Presenter::playlist(const QString &id) +{ + Q_D(Presenter); + return d->playlistMgr->playlist(id); +} + void Presenter::volumeUp() { Q_D(Presenter); @@ -502,7 +854,7 @@ onMusicPlay(activeList, activeMeta); break; case Player::Playing: - onMusicPause(activeList, activeMeta); + onMusicPauseNow(activeList, activeMeta); break; case Player::Paused: onMusicResume(activeList, activeMeta); @@ -525,6 +877,8 @@ void Presenter::next() { Q_D(Presenter); + if (d->player->curPlaylist().isNull() || d->player->curPlaylist()->isEmpty()) + return; auto alllist = d->playlistMgr->playlist(AllMusicListID); auto activeList = d->player->activePlaylist(); auto activeMeta = d->player->activeMeta(); @@ -533,11 +887,14 @@ return; } onMusicNext(activeList, activeMeta); + Q_EMIT hidewaveformScale(); } void Presenter::prev() { Q_D(Presenter); + if (d->player->curPlaylist().isNull() || d->player->curPlaylist()->isEmpty()) + return; auto alllist = d->playlistMgr->playlist(AllMusicListID); auto activeList = d->player->activePlaylist(); auto activeMeta = d->player->activeMeta(); @@ -546,6 +903,12 @@ return; } onMusicPrev(activeList, activeMeta); + Q_EMIT hidewaveformScale(); +} + +void Presenter::onHandleQuit() +{ + handleQuit(); } void Presenter::requestImportPaths(PlaylistPtr playlist, const QStringList &filelist) @@ -558,13 +921,24 @@ void Presenter::onMusiclistRemove(PlaylistPtr playlist, const MetaPtrList metalist) { Q_D(Presenter); - auto playinglist = d->player->activePlaylist(); + if (playlist == nullptr) + return; + auto playinglist = d->player->curPlaylist(); MetaPtr next; + bool t_isLastMeta = false; - qDebug() << "remove " << playlist->id() << metalist.length(); + //检查当前播放的是否包含最后一首 + if (playinglist != nullptr) { + for (auto meta : metalist) { + if (!d->player->activeMeta().isNull() && meta->hash == d->player->activeMeta()->hash && playlist->isLast(meta)) { + t_isLastMeta = true; + } + } + } // TODO: do better; - if (playlist->id() == AllMusicListID) { + if (playlist->id() == AllMusicListID || playlist->id() == "musicResult") { + for (auto &playlist : allplaylist()) { auto meta = playlist->removeMusicList(metalist); if (playlist == playinglist) { @@ -572,31 +946,69 @@ } } - if (playlist->isEmpty()) { + /*-----Import song interface----*/ + if (playlist->isEmpty() && playinglist->allmusic().isEmpty()) { + qDebug() << "meta library clean"; onMusicStop(playlist, next); - Q_EMIT metaLibraryClean(); + if (d->playlistMgr->playlist(AllMusicListID)->isEmpty()) { + + qDebug() << "Presenter::onMusiclistRemove Q_EMIT 1"; + Q_EMIT metaLibraryClean(); + } + } + + MediaDatabase::instance()->removeMediaMetaList(metalist); + d->library->removeMediaMetaList(metalist); + + } else if (playlist->id() == AlbumMusicListID || playlist->id() == ArtistMusicListID) { + auto curPlaylist = d->playlistMgr->playlist(AllMusicListID); + for (auto &autoPlaylist : allplaylist()) { + auto meta = autoPlaylist->removeMusicList(metalist); + if (autoPlaylist == playinglist) { + next = meta; + } + } + + if (curPlaylist->isEmpty()) { + qDebug() << "meta library clean"; + onMusicStop(playlist, next); + if (d->playlistMgr->playlist(AllMusicListID)->isEmpty()) { + qDebug() << "Presenter::onMusiclistRemove Q_EMIT 2"; + Q_EMIT metaLibraryClean(); + } } MediaDatabase::instance()->removeMediaMetaList(metalist); d->library->removeMediaMetaList(metalist); + } else if (playlist->id() == PlayMusicListID) { + next = playlist->removeMusicList(metalist); + if (playlist->isEmpty()) { + qDebug() << "meta library clean"; + onMusicStop(playlist, next); + if (!d->player->activePlaylist().isNull()) + d->player->activePlaylist()->play(nullptr); + } } else { next = playlist->removeMusicList(metalist); } - if (playlist == d->player->activePlaylist() - || playlist->id() == AllMusicListID) { - //stop music - for (auto &meta : metalist) { - if (d->player->isActiveMeta(meta)) { - if (playinglist->isEmpty()) { - onMusicStop(playinglist, next); - } else { - onMusicPlay(playinglist, next); - } + /*-----Judge the condition to remove the song playback switch -----*/ + for (auto &meta : metalist) { + if (d->player->isActiveMeta(meta) && (playinglist == playlist || playlist->id() == AllMusicListID)) { + if (playinglist->isEmpty() || t_isLastMeta || next.isNull()) { /*新建歌单清空时停止播放*/ + onMusicStop(playinglist, next); + } else { + onMusicPlay(playinglist, next); } } } + + if (playlist->allmusic().size() == 0 && playlist->id() != "play") { + + qDebug() << "Presenter::onMusiclistRemove Q_EMIT 3"; + Q_EMIT musicListClear(); + } } void Presenter::onMusiclistDelete(PlaylistPtr playlist, const MetaPtrList metalist) @@ -605,7 +1017,15 @@ // find next music MetaPtr next; - auto playinglist = d->player->activePlaylist(); + bool t_isLastMeta = false; + auto playinglist = d->player->curPlaylist(); + + //检查当前播放的是否包含最后一首 + for (auto meta : metalist) { + if (!d->player->activeMeta().isNull() && meta->hash == d->player->activeMeta()->hash && playlist->isLast(meta)) { + t_isLastMeta = true; + } + } for (auto &playlist : allplaylist()) { auto meta = playlist->removeMusicList(metalist); @@ -613,8 +1033,13 @@ next = meta; } } + if (playinglist->isEmpty()) { + playinglist->play(nullptr); + } - if (d->playlistMgr->playlist(AllMusicListID)->isEmpty()) { + auto allMusicList = d->playlistMgr->playlist(AllMusicListID); + + if (allMusicList->isEmpty()) { qDebug() << "meta library clean"; onMusicStop(playlist, MetaPtr()); Q_EMIT metaLibraryClean(); @@ -625,8 +1050,8 @@ QMap trashFiles; for (auto &meta : metalist) { if (d->player->activeMeta() && - (meta->hash == d->player->activeMeta()->hash)) { - if (playinglist->isEmpty()) { + (meta->hash == d->player->activeMeta()->hash)) { + if (playinglist->isEmpty() || t_isLastMeta) { onMusicStop(playinglist, next); } else { onMusicPlay(playinglist, next); @@ -641,7 +1066,7 @@ } for (auto file : trashFiles.keys()) { -// FIXME: Q_EMIT d->moniter->fileRemoved(file); + // FIXME: Q_EMIT d->moniter->fileRemoved(file); } if (!qEnvironmentVariableIsEmpty("FLATPAK_APPID")) { @@ -658,6 +1083,50 @@ { Q_D(Presenter); + if (!playlist.isNull() && playlist->id() == FavMusicListID) { + onAddMetasFavourite(metalist); + return; + } + + PlaylistPtr modifiedPlaylist = playlist; + if (playlist.isNull()) { + Q_EMIT showPlaylist(true); + + PlaylistMeta info; + info.editmode = true; + info.readonly = false; + info.uuid = d->playlistMgr->newID(); + info.displayName = d->playlistMgr->newDisplayName(); + modifiedPlaylist = d->playlistMgr->addPlaylist(info); + Q_EMIT playlistAdded(d->playlistMgr->playlist(info.uuid), true); + } else { + //bool existFlag = true; + auto allMetas = modifiedPlaylist->allmusic(); + int count = 0; + for (auto meta : metalist) { + //bool curExistFlag = false; + for (auto curMeta : allMetas) { + if (curMeta->hash == meta->hash) { + count++; + break; + } + } + + } + Q_EMIT notifyAddToPlaylist(modifiedPlaylist, metalist, count); + } + + if (d->playlistMgr->playlist(modifiedPlaylist->id()).isNull()) { + qCritical() << "no list" << modifiedPlaylist->id(); + return; + } + modifiedPlaylist->appendMusicList(metalist); +} + +void Presenter::onAddMetaToPlaylist(PlaylistPtr playlist, const MetaPtrList metalist) +{ + Q_D(Presenter); + PlaylistPtr modifiedPlaylist = playlist; if (playlist.isNull()) { Q_EMIT showPlaylist(true); @@ -670,7 +1139,7 @@ modifiedPlaylist = d->playlistMgr->addPlaylist(info); Q_EMIT playlistAdded(d->playlistMgr->playlist(info.uuid)); } else { - Q_EMIT notifyAddToPlaylist(modifiedPlaylist, metalist); + //Q_EMIT notifyAddToPlaylist(modifiedPlaylist, metalist); } if (d->playlistMgr->playlist(modifiedPlaylist->id()).isNull()) { @@ -694,38 +1163,342 @@ d->playlistMgr->onCustomResort(uuids); } -void Presenter::onRequestMusiclistMenu(const QPoint &pos) +void Presenter::onRequestMusiclistMenu(const QPoint &pos, char type) { Q_D(Presenter); QList newlists = d->playlistMgr->allplaylist(); // remove all and fav and search + newlists.removeAll(d->playlistMgr->playlist(AlbumMusicListID)); + newlists.removeAll(d->playlistMgr->playlist(ArtistMusicListID)); newlists.removeAll(d->playlistMgr->playlist(AllMusicListID)); newlists.removeAll(d->playlistMgr->playlist(FavMusicListID)); newlists.removeAll(d->playlistMgr->playlist(SearchMusicListID)); + newlists.removeAll(d->playlistMgr->playlist(AlbumCandListID)); + newlists.removeAll(d->playlistMgr->playlist(MusicCandListID)); + newlists.removeAll(d->playlistMgr->playlist(ArtistCandListID)); + newlists.removeAll(d->playlistMgr->playlist(AlbumResultListID)); + newlists.removeAll(d->playlistMgr->playlist(MusicResultListID)); + newlists.removeAll(d->playlistMgr->playlist(ArtistResultListID)); auto selectedlist = d->currentPlaylist; auto favlist = d->playlistMgr->playlist(FavMusicListID); - Q_EMIT this->requestMusicListMenu(pos, selectedlist, favlist, newlists); + Q_EMIT this->requestMusicListMenu(pos, selectedlist, favlist, newlists, type); +} + +void Presenter::removeListSame(QStringList *list) +{ + for (int i = 0; i < list->count(); i++) { + for (int k = i + 1; k < list->count(); k++) { + if (list->at(i) == list->at(k)) { + list->removeAt(k); + k--; + } + } + } } -void Presenter::onSearchText(const QString text) +void Presenter::onSearchText(const QString &id, const QString &text) { Q_D(Presenter); - auto searchList = d->playlistMgr->playlist(SearchMusicListID); - auto resultList = MediaDatabase::searchMediaMeta(text, 1000); - searchList->reset(resultList); + QList resultlist; + resultlist.clear(); + if (id == "") {//搜索栏enter按键 + //搜索歌曲候选:<=5个 + auto musicList = d->playlistMgr->playlist(AllMusicListID);; + + auto searchList = d->playlistMgr->playlist(MusicResultListID); + MetaPtrList musicMetaDataList; + + for (auto &metaData : musicList->allmusic()) { + if (containsStr(text, metaData->title)) { + musicMetaDataList.append(metaData); + } + } + searchList->reset(musicMetaDataList); + // Q_EMIT searchResult(text, searchList); + resultlist.push_back(searchList); + + //搜索演唱者候选:<=3 + PlaylistPtr artistList = d->playlistMgr->playlist(ArtistMusicListID); + auto searchArtistList = d->playlistMgr->playlist(ArtistResultListID); + MetaPtrList artistMetaDataList; + searchArtistList->clearTypePtr(); + + for (auto &metaData : artistList->playMusicTypePtrList()) { + if (containsStr(text, metaData->name)) { + searchArtistList->appendMusicTypePtrListData(metaData); + } + } + // Q_EMIT searchResult(text, searchArtistList); + resultlist.push_back(searchArtistList); - if (d->currentPlaylist->id() != SearchMusicListID) { - d->playlistBeforeSearch = d->currentPlaylist; + //搜索专辑候选:<=3 + PlaylistPtr albumList = d->playlistMgr->playlist(AlbumMusicListID); + auto searchAlbumList = d->playlistMgr->playlist(AlbumResultListID); + MetaPtrList albumMetaDataList; + searchAlbumList->clearTypePtr(); + + for (auto &metaData : albumList->playMusicTypePtrList()) { + if (containsStr(text, metaData->name)) { + searchAlbumList->appendMusicTypePtrListData(metaData); + } + } + resultlist.push_back(searchAlbumList); + Q_EMIT searchResult(text, resultlist, ""); + return; } + if (id == MusicResultListID) { //点击歌曲 + resultlist.clear(); + //搜索歌曲 + auto musicList = d->playlistMgr->playlist(AllMusicListID);; + + auto searchList = d->playlistMgr->playlist(MusicResultListID); + MetaPtrList musicMetaDataList; + //该音乐的歌手列表 + QStringList artist, album; + artist.clear(); + album.clear(); + for (auto &metaData : musicList->allmusic()) { + if (containsStr(text, metaData->title)) { + musicMetaDataList.append(metaData); + if (metaData->album == "") { + album.append("未知专辑"); + } else { - d->currentPlaylist = searchList; - Q_EMIT this->currentMusicListChanged(searchList); + album.append(metaData->album); + } + if (metaData->artist == "") { + album.append("未知歌手"); + } else { + artist.append(metaData->artist); + } + } + } + searchList->reset(musicMetaDataList); + // Q_EMIT searchResult(text, searchList); + resultlist.push_back(searchList); + + removeListSame(&artist); + removeListSame(&album); + + //搜索该音乐的专辑 + PlaylistPtr albumList = d->playlistMgr->playlist(AlbumMusicListID); + auto searchAlbumList = d->playlistMgr->playlist(AlbumResultListID); + MetaPtrList albumMetaDataList; + searchAlbumList->clearTypePtr(); + + for (auto &metaData : albumList->playMusicTypePtrList()) { + for (int i = 0; i < album.length(); i++) { + if (metaData->name.contains(album.at(i))) { + searchAlbumList->appendMusicTypePtrListData(metaData); + } + } + } + resultlist.push_back(searchAlbumList); + + //搜索该音乐的歌手 + PlaylistPtr artistList = d->playlistMgr->playlist(ArtistMusicListID); + auto searchArtistList = d->playlistMgr->playlist(ArtistResultListID); + MetaPtrList artistMetaDataList; + searchArtistList->clearTypePtr(); + + for (auto &metaData : artistList->playMusicTypePtrList()) { + for (int i = 0; i < artist.length(); i++) { + if (metaData->name.contains(artist.at(i))) { + searchArtistList->appendMusicTypePtrListData(metaData); + } + } + } + resultlist.push_back(searchArtistList); + + Q_EMIT searchResult(text, resultlist, MusicResultListID); + return; + } + + if (id == ArtistResultListID) { + resultlist.clear(); + + //搜索该歌手 + PlaylistPtr artistList = d->playlistMgr->playlist(ArtistMusicListID); + auto searchArtistList = d->playlistMgr->playlist(ArtistResultListID); + MetaPtrList artistMetaDataList; + searchArtistList->clearTypePtr(); + + for (auto &metaData : artistList->playMusicTypePtrList()) { + if (containsStr(text, metaData->name)) { + searchArtistList->appendMusicTypePtrListData(metaData); + } + } + resultlist.push_back(searchArtistList); + + //搜索该歌手的音乐 + auto musicList = d->playlistMgr->playlist(AllMusicListID);; + auto searchList = d->playlistMgr->playlist(MusicResultListID); + MetaPtrList musicMetaDataList; + //该歌手的专辑列表 + QStringList albumlist; + albumlist.clear(); + for (auto &metaData : musicList->allmusic()) { + if (metaData->artist == "") { + metaData->artist = "未知歌手"; + } + if (containsStr(text, metaData->artist)) { + musicMetaDataList.append(metaData); + if (metaData->album == "") { + albumlist.append("未知专辑"); + } else { + albumlist.append(metaData->album); + } + } + } + searchList->reset(musicMetaDataList); + resultlist.push_back(searchList); + //去除相同的专辑 + removeListSame(&albumlist); + + + //该歌手的专辑 + PlaylistPtr albumList = d->playlistMgr->playlist(AlbumMusicListID); + auto searchAlbumList = d->playlistMgr->playlist(AlbumResultListID); + MetaPtrList albumMetaDataList; + searchAlbumList->clearTypePtr(); + + for (auto &metaData : albumList->playMusicTypePtrList()) { + for (int i = 0; i < albumlist.length(); i++) { + if (metaData->name.contains(albumlist.at(i))) { + searchAlbumList->appendMusicTypePtrListData(metaData); + } + } + } + resultlist.push_back(searchAlbumList); + + Q_EMIT searchResult(text, resultlist, ArtistResultListID); + return; + } + + if (id == AlbumResultListID) { + resultlist.clear(); + + //搜索该专辑 + PlaylistPtr albumList = d->playlistMgr->playlist(AlbumMusicListID); + auto searchAlbumList = d->playlistMgr->playlist(AlbumResultListID); + MetaPtrList albumMetaDataList; + searchAlbumList->clearTypePtr(); + + for (auto &metaData : albumList->playMusicTypePtrList()) { + if (containsStr(text, metaData->name)) { + searchAlbumList->appendMusicTypePtrListData(metaData); + } + } + resultlist.push_back(searchAlbumList); + + //搜索该专辑的音乐 + auto musicList = d->playlistMgr->playlist(AllMusicListID);; + auto searchList = d->playlistMgr->playlist(MusicResultListID); + MetaPtrList musicMetaDataList; + //该专辑的歌手列表 + QStringList artist; + artist.clear(); + for (auto &metaData : musicList->allmusic()) { + if (metaData->album == "") { + metaData->album = "未知专辑"; + } + if (containsStr(text, metaData->album)) { + musicMetaDataList.append(metaData); + if (metaData->artist == "") { + artist.append("未知歌手"); + } else { + artist.append(metaData->artist); + } + } + } + searchList->reset(musicMetaDataList); + resultlist.push_back(searchList); + //去除相同的歌手 + removeListSame(&artist); + + //搜索该专辑的歌手 + auto artistList = d->playlistMgr->playlist(ArtistMusicListID); + auto searchArtistList = d->playlistMgr->playlist(ArtistResultListID); + MetaPtrList artistMetaDataList; + searchArtistList->clearTypePtr(); + + for (auto &metaData : artistList->playMusicTypePtrList()) { + for (int i = 0; i < artist.length(); i++) { + if (metaData->name.contains(artist.at(i))) { + searchArtistList->appendMusicTypePtrListData(metaData); + } + } + } + resultlist.push_back(searchArtistList); + + Q_EMIT searchResult(text, resultlist, AlbumResultListID); + return; + } + +} + +void Presenter::onSearchCand(const QString text) +{ + Q_D(Presenter); + //搜索歌曲候选:<=5个 + auto musicList = d->playlistMgr->playlist(AllMusicListID); + PlaylistPtr musicListResult = nullptr; + int count = 0; + MetaPtrList musicMetaDataList; + for (auto &metaData : musicList->allmusic()) { + if (containsStr(text, metaData->title)) { + musicMetaDataList.append(metaData); + count ++; + } + if (count >= 5) { + count = 0; + break; + } + } + auto searchList = d->playlistMgr->playlist(MusicCandListID); + searchList->reset(musicMetaDataList); + Q_EMIT searchCand(text, searchList); + + //搜索演唱者候选:<=3 + count = 0; + MetaPtrList artistMetaDataList; + PlaylistPtr artistList = d->playlistMgr->playlist(ArtistMusicListID); + auto searchArtistList = d->playlistMgr->playlist(ArtistCandListID); + searchArtistList->clearTypePtr(); + for (auto &metaData : artistList->playMusicTypePtrList()) { + if (containsStr(text, metaData->name)) { + searchArtistList->appendMusicTypePtrListData(metaData); + count ++; + } + if (count >= 3) { + break; + } + } + Q_EMIT searchCand(text, searchArtistList); + + //搜索专辑候选:<=3 + count = 0; + MetaPtrList albumMetaDataList; + PlaylistPtr albumList = d->playlistMgr->playlist(AlbumMusicListID); + auto searchAlbumList = d->playlistMgr->playlist(AlbumCandListID); + searchAlbumList->clearTypePtr(); + for (auto &metaData : albumList->playMusicTypePtrList()) { + if (containsStr(text, metaData->name)) { + searchAlbumList->appendMusicTypePtrListData(metaData); + count ++; + } + if (count >= 3) { + break; + } + } + Q_EMIT searchCand(text, searchAlbumList); } void Presenter::onExitSearch() { + qDebug() << "exit search"; Q_D(Presenter); qDebug() << d->playlistBeforeSearch; if (!d->playlistBeforeSearch.isNull()) { @@ -746,7 +1519,6 @@ void Presenter::onChangeSearchMetaCache(const MetaPtr meta, const DMusic::SearchMeta &search) { Q_D(Presenter); - if (meta->searchID != search.id) { qDebug() << "update search id " << search.id; meta->searchID = search.id; @@ -767,20 +1539,29 @@ info.displayName = d->playlistMgr->newDisplayName(); d->playlistMgr->addPlaylist(info); - Q_EMIT playlistAdded(d->playlistMgr->playlist(info.uuid)); + Q_EMIT playlistAdded(d->playlistMgr->playlist(info.uuid), edit); } void Presenter::onMusicPlay(PlaylistPtr playlist, const MetaPtr meta) { Q_D(Presenter); + /**************************************************************** + * deal with cd ejecting while Optical drive is still connecting. + * **************************************************************/ + if (!meta.isNull() && QFileInfo(meta->localPath).dir().isEmpty()) { + Q_EMIT d->player->mediaError(playlist, meta, Player::ResourceError); + return ; + } auto toPlayMeta = meta; if (playlist.isNull()) { + //为空则播放所有音乐 playlist = d->playlistMgr->playlist(AllMusicListID); } d->player->setPlayOnLoaded(true); if (0 == d->playlistMgr->playlist(AllMusicListID)->length()) { + //所有音乐为空则导入音乐 Q_EMIT requestImportFiles(); return; } @@ -790,9 +1571,6 @@ qDebug() << "stop old list" << oldPlayinglist->id() << playlist->id(); oldPlayinglist->play(MetaPtr()); } -// if (oldPlayinglist.isNull()) { -// d->player->playMeta() -// } if (0 == playlist->length()) { qCritical() << "empty playlist" << playlist->displayName(); @@ -813,19 +1591,53 @@ qDebug() << "play" << playlist->displayName() << "( count:" << playlist->length() << ")" << toPlayMeta->title << toPlayMeta->hash; + auto alllists = d->playlistMgr->allplaylist(); + for (auto curList : alllists) { + if (!curList.isNull()) + curList->setPlayingStatus(true); + } Q_EMIT d->play(playlist, toPlayMeta); } void Presenter::onMusicPause(PlaylistPtr playlist, const MetaPtr info) { Q_D(Presenter); + auto alllists = d->playlistMgr->allplaylist(); + for (auto curList : alllists) { + if (!curList.isNull()) + curList->setPlayingStatus(false); + } Q_EMIT d->pause(); Q_EMIT musicPaused(playlist, info); } +void Presenter::onMusicPauseNow(PlaylistPtr playlist, const MetaPtr meta) +{ + Q_D(Presenter); + d->player->pauseNow(); + auto alllists = d->playlistMgr->allplaylist(); + for (auto curList : alllists) { + if (!curList.isNull()) + curList->setPlayingStatus(false); + } + Q_EMIT musicPaused(playlist, meta); +} + void Presenter::onMusicResume(PlaylistPtr playlist, const MetaPtr info) { Q_D(Presenter); + /**************************************************************** + * deal with cd ejecting while Optical drive is still connecting. + * **************************************************************/ + if (!info.isNull() && QFileInfo(info->localPath).dir().isEmpty()) { + Q_EMIT d->player->mediaError(playlist, info, Player::ResourceError); + return ; + } + auto alllists = d->playlistMgr->allplaylist(); + for (auto curList : alllists) { + if (!curList.isNull()) + curList->setPlayingStatus(true); + } Q_EMIT d->resume(playlist, info); d->notifyMusicPlayed(playlist, info); } @@ -836,6 +1648,12 @@ Q_EMIT coverSearchFinished(meta, SearchMeta(), ""); Q_EMIT lyricSearchFinished(meta, SearchMeta(), ""); d->player->stop(); + d->metaBufferDetector->onClearBufferDetector(); + auto alllists = d->playlistMgr->allplaylist(); + for (auto curList : alllists) { + if (!curList.isNull()) + curList->setPlayingStatus(false); + } Q_EMIT this->musicStoped(playlist, meta); } @@ -846,13 +1664,17 @@ return; } + MetaPtr curMeta = meta; + if (curMeta == nullptr) + curMeta = playlist->first(); if (playlist->isEmpty()) { - Q_EMIT coverSearchFinished(meta, SearchMeta(), ""); - Q_EMIT lyricSearchFinished(meta, SearchMeta(), ""); + Q_EMIT coverSearchFinished(curMeta, SearchMeta(), ""); + Q_EMIT lyricSearchFinished(curMeta, SearchMeta(), ""); d->player->stop(); - Q_EMIT this->musicStoped(playlist, meta); + Q_EMIT this->musicStoped(playlist, curMeta); + return; } - Q_EMIT d->playPrev(playlist, meta); + Q_EMIT d->playPrev(playlist, curMeta); } void Presenter::onMusicNext(PlaylistPtr playlist, const MetaPtr meta) @@ -862,13 +1684,17 @@ return; } + MetaPtr curMeta = meta; + if (curMeta == nullptr) + curMeta = playlist->first(); if (playlist->isEmpty()) { - Q_EMIT coverSearchFinished(meta, SearchMeta(), ""); - Q_EMIT lyricSearchFinished(meta, SearchMeta(), ""); + Q_EMIT coverSearchFinished(curMeta, SearchMeta(), ""); + Q_EMIT lyricSearchFinished(curMeta, SearchMeta(), ""); d->player->stop(); - Q_EMIT this->musicStoped(playlist, meta); + Q_EMIT this->musicStoped(playlist, curMeta); + return; } - Q_EMIT d->playNext(playlist, meta); + Q_EMIT d->playNext(playlist, curMeta); } void Presenter::onToggleFavourite(const MetaPtr meta) @@ -877,19 +1703,45 @@ if (d->playlistMgr->playlist(FavMusicListID)->contains(meta)) { d->playlistMgr->playlist(FavMusicListID)->removeMusicList(MetaPtrList() << meta); } else { - Q_EMIT notifyAddToPlaylist(d->playlistMgr->playlist(FavMusicListID), MetaPtrList() << meta); + Q_EMIT notifyAddToPlaylist(d->playlistMgr->playlist(FavMusicListID), MetaPtrList() << meta, 0); d->playlistMgr->playlist(FavMusicListID)->appendMusicList(MetaPtrList() << meta); } } +void Presenter::onAddMetasFavourite(const MetaPtrList metalist) +{ + Q_D(Presenter); + auto favMusicList = d->playlistMgr->playlist(FavMusicListID); + auto favAllMetas = favMusicList->allmusic(); + int count = 0; + for (auto meta : metalist) { + for (auto fMeta : favAllMetas) { + if (meta->hash == fMeta->hash) { + count++; + break; + } + } + } + d->playlistMgr->playlist(FavMusicListID)->appendMusicList(metalist); + Q_EMIT notifyAddToPlaylist(d->playlistMgr->playlist(FavMusicListID), metalist, count); +} + +void Presenter::onRemoveMetasFavourite(const MetaPtrList metalist) +{ + Q_D(Presenter); + d->playlistMgr->playlist(FavMusicListID)->removeMusicList(metalist); +} + void Presenter::onChangeProgress(qint64 value, qint64 range) { Q_D(Presenter); -// auto position = value * d->player->duration() / range; -// if (position < 0) { -// qCritical() << "invalid position:" << d->player->media().canonicalUrl() << position; -// } -// d->player->setPosition(position); + + /*-----setIOPosition------*/ + + //qDebug() << value << "-" << range; + +// d->player->setIOPosition(value, range); + auto position = value * d->player->duration() / range; d->player->setPosition(position); } @@ -897,14 +1749,7 @@ void Presenter::onVolumeChanged(int volume) { Q_D(Presenter); - d->player->setVolume(volume); - qDebug() << "change play volume" << d->player->volume(); - if (volume > 0 && d->player->muted()) { - d->player->setMuted(false); - d->settings->setOption("base.play.mute", false); - } - d->settings->setOption("base.play.volume", volume); Q_EMIT d->updateMprisVolume(volume); } @@ -920,25 +1765,110 @@ void Presenter::onToggleMute() { Q_D(Presenter); - d->player->setMuted(! d->player->muted()); - d->settings->setOption("base.play.mute", d->player->muted()); + if (d->player->status() == Player::Paused || + d->player->status() == Player::Playing) { + if (d->player->isValidDbusMute()) + d->player->setMuted(!d->player->muted()); + + if (d->player->muted()) { + Q_EMIT d->updateMprisVolume(0); + } else { + Q_EMIT d->updateMprisVolume(d->player->volume()); + } + } else { + //local toggle + Q_EMIT localMutedChanged(0); + } +} - if (d->player->muted()) { - Q_EMIT d->updateMprisVolume(0); +void Presenter::onLocalToggleMute() +{ + Q_D(Presenter); + if (d->player->isValidDbusMute()) { + d->player->setMuted(!d->player->muted()); } else { - Q_EMIT d->updateMprisVolume(d->player->volume()); + Q_EMIT localMutedChanged(1); } } -void Presenter::onUpdateMetaCodec(const MetaPtr meta) +void Presenter::onFadeInOut() +{ + Q_D(Presenter); + auto fadeInOut = d->settings->value("base.play.fade_in_out").toBool(); + d->player->setFadeInOut(fadeInOut); +} + +void Presenter::onUpdateMetaCodec(const QString &preTitle, const QString &preArtist, const QString &preAlbum, const MetaPtr meta) { Q_D(Presenter); + if (meta.isNull() || (preTitle == meta->title && preArtist == meta->artist && preAlbum == meta->album)) + return; Q_EMIT musicMetaUpdate(d->player->activePlaylist(), meta); + + if ((!preArtist.isEmpty() && preArtist != meta->artist) || (!preAlbum.isEmpty() && preAlbum != meta->album)) { + auto artistPlaylist = d->playlistMgr->playlist(ArtistMusicListID); + auto artistTypePtrList = artistPlaylist->playMusicTypePtrList(); + for (auto curType : artistTypePtrList) { + if (curType->name == preArtist) { + curType->name = meta->artist; + break; + } + } + auto albumPlaylist = d->playlistMgr->playlist(AlbumMusicListID); + auto albumTypePtrList = albumPlaylist->playMusicTypePtrList(); + for (auto curType : albumTypePtrList) { + if (curType->name == preAlbum) { + curType->name = meta->album; + curType->extraName = meta->artist; + break; + } + } + } } void Presenter::onPlayall(PlaylistPtr playlist) { - onMusicPlay(playlist, playlist->first()); + Q_D(Presenter); + + if (playlist->id() == AlbumMusicListID || playlist->id() == ArtistMusicListID) { + + PlaylistPtr curPlaylist = playlist; + auto playMusicTypePtrList = curPlaylist->playMusicTypePtrList(); + auto PlayMusicTypePtr = playMusicTypePtrList[0]; + QString name = PlayMusicTypePtr->name; + + if (curPlaylist.isNull()) { + qWarning() << "can not player emptry playlist"; + return; + } + + MetaPtr curMeta; + for (auto TypePtr : curPlaylist->playMusicTypePtrList()) { + if (TypePtr->name == name) { + + auto metaHash = TypePtr->playlistMeta.sortMetas.at(0); + if (TypePtr->playlistMeta.metas.contains(metaHash)) { + curMeta = TypePtr->playlistMeta.metas[metaHash]; + } + } + } + onMusicPlay(playlist, curMeta); + + } else { + + int size = playlist->length(); + if (size < 1) + return; + MetaPtr meta = playlist->playing(); + if (meta == nullptr) + meta = playlist->first(); + if (d->player->mode() == Player::Shuffle) { + int n = qrand() % size; + meta = playlist->allmusic()[n]; + } + + onMusicPlay(playlist, meta); + } } void Presenter::onResort(PlaylistPtr playlist, int sortType) @@ -949,19 +1879,267 @@ } } -void Presenter::onImportFiles(const QStringList &filelist) +void Presenter::onImportFiles(const QStringList &filelist, PlaylistPtr playlist) { Q_D(Presenter); - PlaylistPtr playlist = d->currentPlaylist; - requestImportPaths(playlist, filelist); + //PlaylistPtr playlist = d->currentPlaylist; + PlaylistPtr curPlaylist = playlist; + //bool flag = false; + if (playlist == nullptr) { + curPlaylist = d->playlistMgr->playlist(AllMusicListID); + //flag = true; + } + requestImportPaths(curPlaylist, filelist); + auto curPlayerlist = d->player->curPlaylist(); + if (curPlayerlist->isEmpty()/* && flag*/) { + d->player->setActivePlaylist(curPlaylist); + } + curPlayerlist->appendMusicList(curPlaylist->allmusic()); return; } +void Presenter::onSpeechPlayMusic(const QString music) +{ + Q_D(Presenter); + PlaylistPtr musicList = d->playlistMgr->playlist(AllMusicListID); + PlaylistPtr curPlayList = d->playlistMgr->playlist(PlayMusicListID); + bool find = false; + MetaPtrList musicMetaDataList; + MetaPtr playMetaData; + for (auto &metaData : musicList->allmusic()) { + if (containsStr(music, metaData->title)) { + musicMetaDataList.append(metaData); + playMetaData = metaData; + find = true; + } + } + if (find) { + curPlayList->reset(musicMetaDataList); +// d->player->setActivePlaylist(curPlayList); + onSyncMusicPlay(curPlayList, playMetaData); + Q_EMIT sigSpeedResult(1, true); + } else { + Q_EMIT sigSpeedResult(1, false); + } +} + +void Presenter::onSpeechPlayArtist(const QString artist) +{ + Q_D(Presenter); + MetaPtrList artistMetaDataList; + PlaylistPtr musicList = d->playlistMgr->playlist(AllMusicListID); + PlaylistPtr curPlayList = d->playlistMgr->playlist(PlayMusicListID); + bool find = false; + MetaPtrList musicMetaDataList; + MetaPtr playMetaData; + for (auto &metaData : musicList->allmusic()) { + if (containsStr(artist, metaData->artist)) { + musicMetaDataList.append(metaData); + find = true; + } + } + if (find) { + playMetaData = musicMetaDataList.first(); + curPlayList->reset(musicMetaDataList); + d->player->setActivePlaylist(curPlayList); + onSyncMusicPlay(curPlayList, playMetaData); + Q_EMIT sigSpeedResult(2, true); + } else { + Q_EMIT sigSpeedResult(2, false); + } +} + +void Presenter::onSpeechPlayArtistMusic(const QString artist, const QString music) +{ + Q_D(Presenter); + MetaPtrList artistMetaDataList; + PlaylistPtr musicList = d->playlistMgr->playlist(AllMusicListID); + PlaylistPtr curPlayList = d->playlistMgr->playlist(PlayMusicListID); + bool find = false; + MetaPtrList musicMetaDataList; + MetaPtr playMetaData; + for (auto &metaData : musicList->allmusic()) { + if (containsStr(artist, metaData->artist)) { + if (containsStr(music, metaData->title)) { + musicMetaDataList.append(metaData); + } + find = true; + } + } + if (find) { + playMetaData = musicMetaDataList.first(); + curPlayList->reset(musicMetaDataList); +// d->player->setActivePlaylist(curPlayList); + onSyncMusicPlay(curPlayList, playMetaData); + Q_EMIT sigSpeedResult(3, true); + } else { + Q_EMIT sigSpeedResult(3, false); + } +} + +void Presenter::onSpeechPlayFaverite() +{ + Q_D(Presenter); + MetaPtrList artistMetaDataList; + PlaylistPtr musicList = d->playlistMgr->playlist(FavMusicListID); + PlaylistPtr curPlayList = d->playlistMgr->playlist(PlayMusicListID); + MetaPtrList musicMetaDataList; + MetaPtr playMetaData; + if (musicList->allmusic().size() == 0) { + Q_EMIT sigSpeedResult(4, false); + } else { + playMetaData = musicList->allmusic().first(); + curPlayList->reset(musicList->allmusic()); + d->player->setActivePlaylist(curPlayList); + onSyncMusicPlay(curPlayList, playMetaData); + Q_EMIT sigSpeedResult(4, true); + } +} + +void Presenter::onSpeechPlayCustom(const QString listName) +{ + Q_D(Presenter); + MetaPtrList artistMetaDataList; + PlaylistPtr musicList ; + PlaylistPtr curPlayList = d->playlistMgr->playlist(PlayMusicListID); + bool find = false; + for (auto mList : d->playlistMgr->allplaylist()) { + if (containsStr(mList->displayName(), listName)) { + musicList = mList; + find = true; + } + } + if (find) { + MetaPtrList musicMetaDataList; + MetaPtr playMetaData; + playMetaData = musicList->allmusic().first(); + curPlayList->reset(musicList->allmusic()); + d->player->setActivePlaylist(curPlayList); + onSyncMusicPlay(curPlayList, playMetaData); + Q_EMIT sigSpeedResult(5, true); + } else { + Q_EMIT sigSpeedResult(5, false); + } +} + +void Presenter::onSpeechPlayRadom() +{ + Q_D(Presenter); + PlaylistPtr musicList = d->playlistMgr->playlist(AllMusicListID); + PlaylistPtr curPlayList = d->playlistMgr->playlist(PlayMusicListID); + MetaPtrList musicMetaDataList; + MetaPtr playMetaData; + int count = musicList->allmusic().size(); + if (count == 0) { + Q_EMIT sigSpeedResult(6, false); + } else { + int index = qrand() % count; + playMetaData = musicList->allmusic().at(index); + musicMetaDataList.append(playMetaData); + curPlayList->reset(musicMetaDataList); + onSyncMusicPlay(curPlayList, playMetaData); + Q_EMIT sigSpeedResult(6, true); + } + +} + +void Presenter::onSpeechPause() +{ + Q_D(Presenter); + onMusicPause(d->currentPlaylist, nullptr); +} + +void Presenter::onSpeechStop() +{ + Q_D(Presenter); + onMusicStop(d->currentPlaylist, d->currentPlaylist->playing()); +} + +void Presenter::onSpeechResume() +{ + Q_D(Presenter); + onSyncMusicResume(d->currentPlaylist, d->currentPlaylist->playing()); +} + +void Presenter::onSpeechPrevious() +{ + Q_D(Presenter); + onSyncMusicPrev(d->currentPlaylist, d->currentPlaylist->playing()); +} + +void Presenter::onSpeechNext() +{ + Q_D(Presenter); + onSyncMusicNext(d->currentPlaylist, d->currentPlaylist->playing()); +} + +void Presenter::onSpeechFavorite() +{ + Q_D(Presenter); + onToggleFavourite(d->currentPlaylist->playing()); +} + +void Presenter::onSpeechunFaverite() +{ + Q_D(Presenter); + onToggleFavourite(d->currentPlaylist->playing()); +} + +void Presenter::onSpeechsetMode(const int mode) +{ + //Q_D(Presenter); + onPlayModeChanged(mode); +} +//设置均衡器(配置文件) +void Presenter::setEqualizer(bool enabled, int curIndex, QList indexbaud) +{ + Q_D(Presenter); +// qDebug() << "read equalizer config:" << enabled << "curIndex:" << curIndex << "indexbaud:" << indexbaud; + d->player->setEqualizer(enabled, curIndex, indexbaud); +} +//使能 +void Presenter::setEqualizerEnable(bool enabled) +{ + Q_D(Presenter); + d->player->setEqualizerEnable(enabled); +} +//滑动滑调(前置放大) +void Presenter::setEqualizerpre(int val) +{ + Q_D(Presenter); + d->player->setEqualizerpre(val); +} +//滑动滑调(其他) +void Presenter::setEqualizerbauds(int index, int val) +{ + Q_D(Presenter); + d->player->setEqualizerbauds(index, val); +} +//设置当前模式 +void Presenter::setEqualizerCurMode(int curIndex) +{ + Q_D(Presenter); + d->player->setEqualizerCurMode(curIndex); +} + +void Presenter::localMuteChanged(bool mute) +{ + Q_D(Presenter); + d->player->setLocalMuted(mute); +} + void Presenter::onScanMusicDirectory() { auto musicDir = QStandardPaths::standardLocations(QStandardPaths::MusicLocation); qWarning() << "scan" << musicDir; - onImportFiles(musicDir); + PlaylistPtr playlist = nullptr; + onImportFiles(musicDir, playlist); + + Q_D(Presenter); + auto curPlaylist = d->playlistMgr->playlist(AllMusicListID); + d->player->setActivePlaylist(curPlaylist); + auto curPlayerlist = d->player->curPlaylist(); + curPlayerlist->appendMusicList(curPlaylist->allmusic()); } @@ -1061,11 +2239,12 @@ connect(mprisPlayer, &MprisPlayer::pauseRequested, this, [ = ]() { - if (d->player->activePlaylist().isNull()) { + if (d->player->activePlaylist().isNull() && d->player != nullptr) { + d->player->pauseNow(); return; } - onMusicPause(player->activePlaylist(), player->activeMeta()); + onMusicPauseNow(player->activePlaylist(), player->activeMeta()); mprisPlayer->setPlaybackStatus(Mpris::Paused); }); @@ -1091,13 +2270,14 @@ connect(mprisPlayer, &MprisPlayer::volumeRequested, this, [ = ](double volume) { - onVolumeChanged(volume * 100); - Q_EMIT this->volumeChanged(volume * 100); + Q_UNUSED(volume) +// onVolumeChanged(volume * 100); +// Q_EMIT this->volumeChanged(volume * 100); }); connect(d, &PresenterPrivate::updateMprisVolume, this, [ = ](int volume) { - mprisPlayer->setVolume(volume / 100.0); + mprisPlayer->setVolume((static_cast(volume)) / 100.0); }); connect(this, &Presenter::progrossChanged, @@ -1123,3 +2303,4 @@ mprisPlayer->setMetadata(metadata); }); } + diff -Nru deepin-music-5.0.1+ds/src/music-player/presenter/presenter.h deepin-music-6.0.1.54+ds.1/src/music-player/presenter/presenter.h --- deepin-music-5.0.1+ds/src/music-player/presenter/presenter.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/presenter/presenter.h 2020-07-14 12:05:00.000000000 +0000 @@ -21,22 +21,35 @@ #pragma once +#include "../core/playlist.h" + #include #include - #include - -#include "../core/playlist.h" #include +class QAudioBuffer; + class Playlist; class PresenterPrivate; +class Transfer: public QObject +{ + Q_OBJECT +public: + explicit Transfer(QObject *parent = 0); + ~Transfer(); +public slots: + void onMusicListAdded(PlaylistPtr playlist, const MetaPtrList metalist); +signals: + void musicListAdded(PlaylistPtr playlist, const MetaPtrList metalist); +}; + class Presenter : public QObject { Q_OBJECT public: - explicit Presenter(QObject *parent = 0); + explicit Presenter(QObject *parent = nullptr); ~Presenter(); void initMpris(MprisPlayer *mprisPlayer); @@ -44,8 +57,10 @@ void postAction(); void handleQuit(); void openUri(const QUrl &uri); + void removeListSame(QStringList *list); QList allplaylist(); + PlaylistPtr playlist(const QString &id); public slots: void volumeUp(); @@ -54,13 +69,19 @@ void pause(); void next(); void prev(); - + void onHandleQuit(); void requestImportPaths(PlaylistPtr playlist, const QStringList &filelist); signals: void dataLoaded(); + //控制进度条滑块 + void hidewaveformScale(); signals: + //! player + void audioBufferProbed(const QAudioBuffer &buffer); + void metaBuffer(const QVector &buffer, const QString &hash); + //! ui: request import dialog void meidaFilesImported(PlaylistPtr playlist, MetaPtrList metalist); @@ -71,7 +92,7 @@ void showMusicList(PlaylistPtr playlist); //! from playlist manager - void playlistAdded(PlaylistPtr); + void playlistAdded(PlaylistPtr, bool newflag = false); void playlistRemove(PlaylistPtr); void activePlaylistChanged(PlaylistPtr); @@ -85,7 +106,9 @@ void requestMusicListMenu(const QPoint &pos, PlaylistPtr selectedlist, PlaylistPtr favlist, - QListnewlists); + QListnewlists, + char type); + void musicListClear(); //! from control void musicPlayed(PlaylistPtr playlist, const MetaPtr meta); @@ -93,9 +116,13 @@ void musicPaused(PlaylistPtr playlist, const MetaPtr meta); void musicStoped(PlaylistPtr playlist, const MetaPtr meta); void musicMetaUpdate(PlaylistPtr playlist, const MetaPtr meta); - void progrossChanged(qint64 pos, qint64 length); + void progrossChanged(qint64 pos, qint64 length, qint64 coefficient); void volumeChanged(int volume); void mutedChanged(bool muted); + /********************************************** + * local mute operation,type: 0 volume , 1:mute + * *******************************************/ + void localMutedChanged(int type); void modeChanged(int); //! from lyricservice @@ -106,10 +133,16 @@ //! meta info void metaLibraryClean(); - void scanFinished(const QString& jobid, int mediaCount); + void scanFinished(const QString &jobid, int mediaCount); void notifyMusciError(PlaylistPtr playlist, const MetaPtr meta, int error); - void notifyAddToPlaylist(PlaylistPtr playlist, const MetaPtrList metalist); + void notifyAddToPlaylist(PlaylistPtr playlist, const MetaPtrList metalist, int count); + //! search + void searchCand(QString searchText, PlaylistPtr playlist); + void searchResult(QString searchText, QList resultlist, QString id); + void musicFileMiss(); + //语音控制 + void sigSpeedResult(int action, bool result); public slots: //! music control interface void onSyncMusicPlay(PlaylistPtr playlist, const MetaPtr meta); @@ -119,18 +152,27 @@ void onMusicPlay(PlaylistPtr playlist, const MetaPtr meta); void onMusicPause(PlaylistPtr playlist, const MetaPtr meta); + void onMusicPauseNow(PlaylistPtr playlist, const MetaPtr meta); void onMusicResume(PlaylistPtr playlist, const MetaPtr meta); void onMusicStop(PlaylistPtr playlist, const MetaPtr meta); void onMusicPrev(PlaylistPtr playlist, const MetaPtr meta); void onMusicNext(PlaylistPtr playlist, const MetaPtr meta); void onToggleFavourite(const MetaPtr meta); + void onAddMetasFavourite(const MetaPtrList metalist); + void onRemoveMetasFavourite(const MetaPtrList metalist); + void onChangeProgress(qint64 value, qint64 range); void onVolumeChanged(int volume); void onPlayModeChanged(int mode); void onToggleMute(); + /****************************** + *local toggle + * *****************************/ + void onLocalToggleMute(); + void onFadeInOut(); - void onUpdateMetaCodec(const MetaPtr meta); + void onUpdateMetaCodec(const QString &preTitle, const QString &preArtist, const QString &preAlbum, const MetaPtr meta); //! music list void onPlayall(PlaylistPtr playlist); @@ -140,22 +182,56 @@ void onMusiclistRemove(PlaylistPtr playlist, const MetaPtrList metalist); void onMusiclistDelete(PlaylistPtr playlist, const MetaPtrList metalist); void onAddToPlaylist(PlaylistPtr playlist, const MetaPtrList metalist); + void onAddMetaToPlaylist(PlaylistPtr playlist, const MetaPtrList metalist); void onPlaylistAdd(bool edit); void onCurrentPlaylistChanged(PlaylistPtr playlist); - void onCustomResort(const QStringList& uuids); + void onCustomResort(const QStringList &uuids); //! ui: menu interface - void onRequestMusiclistMenu(const QPoint &pos); - void onSearchText(const QString text); + void onRequestMusiclistMenu(const QPoint &pos, char type); + void onSearchText(const QString &id, const QString &text); + void onSearchCand(const QString text);//查询候选项 void onExitSearch(); void onLocateMusicAtAll(const QString &hash); void onChangeSearchMetaCache(const MetaPtr meta, const DMusic::SearchMeta &search); void onScanMusicDirectory(); - void onImportFiles(const QStringList &filelist); + void onImportFiles(const QStringList &filelist, PlaylistPtr playlist); + + //语音控制槽函数 + void onSpeechPlayMusic(const QString music); + void onSpeechPlayArtist(const QString artist); + void onSpeechPlayArtistMusic(const QString artist, const QString music); + void onSpeechPlayFaverite(); + void onSpeechPlayCustom(const QString listName); + void onSpeechPlayRadom(); + + void onSpeechPause(); + void onSpeechStop(); + void onSpeechResume(); + void onSpeechPrevious(); + void onSpeechNext(); + + void onSpeechFavorite(); + void onSpeechunFaverite(); + void onSpeechsetMode(const int mode); + + //均衡器 + void setEqualizer(bool enabled, int curIndex, QList indexbaud); + void setEqualizerEnable(bool enabled); + void setEqualizerpre(int val); + void setEqualizerbauds(int index, int val); + void setEqualizerCurMode(int curIndex); + + /************************************************** + * local mute operation to player + * ***********************************************/ + void localMuteChanged(bool mute); private: + bool containsStr(QString searchText, QString text); QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), Presenter) }; + diff -Nru deepin-music-5.0.1+ds/src/music-player/presenter/presenter_p.h deepin-music-6.0.1.54+ds.1/src/music-player/presenter/presenter_p.h --- deepin-music-5.0.1+ds/src/music-player/presenter/presenter_p.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/presenter/presenter_p.h 2020-07-14 12:05:00.000000000 +0000 @@ -30,6 +30,8 @@ class PlaylistManager; class Player; class MediaLibrary; +class MetaBufferDetector; +class Transfer; class PresenterPrivate: public QObject { Q_OBJECT @@ -52,6 +54,8 @@ Player *player = nullptr; MediaLibrary *library = nullptr; MusicSettings *settings = nullptr; + Transfer *transfer = nullptr; + MetaBufferDetector *metaBufferDetector = nullptr; Presenter *q_ptr; Q_DECLARE_PUBLIC(Presenter) diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/active/album_active.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/active/album_active.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/active/album_active.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/active/album_active.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,18 @@ + + + + album_active + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/active/all_music_active.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/active/all_music_active.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/active/all_music_active.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/active/all_music_active.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + all music_active + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/active/famous_ballad_active.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/active/famous_ballad_active.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/active/famous_ballad_active.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/active/famous_ballad_active.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + famous ballad_active + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/active/my_collection_active.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/active/my_collection_active.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/active/my_collection_active.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/active/my_collection_active.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + my collection_active + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/active/picture_list_active.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/active/picture_list_active.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/active/picture_list_active.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/active/picture_list_active.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,24 @@ + + + + picture list_active + Created with Sketch. + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/active/singer_active.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/active/singer_active.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/active/singer_active.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/active/singer_active.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + singer_active + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/active/text_list_active.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/active/text_list_active.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/active/text_list_active.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/active/text_list_active.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,24 @@ + + + + text list_active + Created with Sketch. + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/Bullet window warning.svg" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/Bullet window warning.svg" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/Bullet window warning.svg" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/Bullet window warning.svg" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,32 @@ + + + + Bullet window warning + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/Bullet_window_warning.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/Bullet_window_warning.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/Bullet_window_warning.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/Bullet_window_warning.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,32 @@ + + + + Bullet window warning + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/checked/collection1_checked.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/checked/collection1_checked.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/checked/collection1_checked.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/checked/collection1_checked.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + collection1_checked + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/checked/lyric_checked.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/checked/lyric_checked.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/checked/lyric_checked.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/checked/lyric_checked.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + lyric_checked + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/checked/mute_checked.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/checked/mute_checked.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/checked/mute_checked.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/checked/mute_checked.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + mute_checked + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/checked/playlist_checked.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/checked/playlist_checked.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/checked/playlist_checked.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/checked/playlist_checked.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + playlist_checked + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/checked/volume_checked.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/checked/volume_checked.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/checked/volume_checked.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/checked/volume_checked.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + volume_checked + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/checked/volume_low_checked.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/checked/volume_low_checked.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/checked/volume_low_checked.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/checked/volume_low_checked.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume_hover 1 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/checked/volume_mid_checked.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/checked/volume_mid_checked.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/checked/volume_mid_checked.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/checked/volume_mid_checked.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume_hover 2 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/close_round/close_hover_dark.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/close_round/close_hover_dark.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/close_round/close_hover_dark.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/close_round/close_hover_dark.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,21 @@ + + + + close-hover_dark + Created with Sketch. + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/close_round/close_normal_dark.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/close_round/close_normal_dark.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/close_round/close_normal_dark.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/close_round/close_normal_dark.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,21 @@ + + + + close-normal_dark + Created with Sketch. + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/close_round/close_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/close_round/close_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/close_round/close_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/close_round/close_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,21 @@ + + + + close-press + Created with Sketch. + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/disabled/last_disabled.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/disabled/last_disabled.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/disabled/last_disabled.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/disabled/last_disabled.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + last_disabled + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/disabled/next_disabled.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/disabled/next_disabled.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/disabled/next_disabled.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/disabled/next_disabled.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + next_disabled + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/disabled/play_disabled.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/disabled/play_disabled.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/disabled/play_disabled.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/disabled/play_disabled.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + play_disabled + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/disabled/suspend_disabled.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/disabled/suspend_disabled.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/disabled/suspend_disabled.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/disabled/suspend_disabled.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + suspend_disabled + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/focus/add_focus.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/focus/add_focus.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/focus/add_focus.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/focus/add_focus.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,43 @@ + + + + add_focus + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/focus/back_focus.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/focus/back_focus.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/focus/back_focus.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/focus/back_focus.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,30 @@ + + + + back_focus + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/focus/search_focus.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/focus/search_focus.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/focus/search_focus.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/focus/search_focus.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,31 @@ + + + + search_focus + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/add_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/add_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/add_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/add_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,31 @@ + + + + add_hover + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/back_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/back_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/back_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/back_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + back_hover + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/clear_list_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/clear_list_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/clear_list_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/clear_list_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + clear list_normal + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/close_round_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/close_round_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/close_round_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/close_round_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,20 @@ + + + + titlebutton/close_round hover + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/collection_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/collection_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/collection_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/collection_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + collection_hover + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/cross_cycling_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/cross_cycling_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/cross_cycling_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/cross_cycling_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + cross-cycling_hover + Created with Sketch. + + + + + + + + + + \ No newline at end of file Binary files /tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/.DS_Store and /tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/.DS_Store differ diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/last_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/last_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/last_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/last_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + last_hover + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/lyric_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/lyric_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/lyric_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/lyric_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + lyric_hover + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/mute_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/mute_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/mute_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/mute_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + mute_hover + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/next_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/next_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/next_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/next_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + next_hover + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/picture_list_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/picture_list_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/picture_list_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/picture_list_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + picture list_hover + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/play_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/play_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/play_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/play_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + play_hover + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/playlist_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/playlist_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/playlist_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/playlist_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + playlist_hover + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/search_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/search_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/search_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/search_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + search_hover + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/sequential_loop_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/sequential_loop_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/sequential_loop_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/sequential_loop_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,21 @@ + + + + sequential loop_hover + Created with Sketch. + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/single_tune_circulation_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/single_tune_circulation_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/single_tune_circulation_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/single_tune_circulation_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,22 @@ + + + + single tune circulation_hover + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/suspend_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/suspend_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/suspend_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/suspend_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + suspend_hover + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/text_list_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/text_list_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/text_list_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/text_list_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + text list_hover + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/volume_add_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/volume_add_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/volume_add_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/volume_add_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume add_hover + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/volume_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/volume_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/volume_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/volume_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + volume_hover + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/volume_lessen_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/volume_lessen_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/volume_lessen_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/volume_lessen_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume lessen_hover + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/volume_low_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/volume_low_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/volume_low_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/volume_low_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume_hover 1 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/volume_mid_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/volume_mid_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/hover/volume_mid_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/hover/volume_mid_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume_hover 2 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/icon_import_music.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/icon_import_music.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/icon_import_music.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/icon_import_music.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,18 @@ + + + + icon_import_music + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/import_music.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/import_music.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/import_music.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/import_music.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,18 @@ + + + + icon_import_music + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music1.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music1.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music1.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music1.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music1 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music2.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music2.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music2.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music2.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music2 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music3.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music3.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music3.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music3.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music3 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music4.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music4.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music4.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music4.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music4 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/Musical Interval.svg" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/Musical Interval.svg" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/Musical Interval.svg" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/Musical Interval.svg" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,26 @@ + + + + Musical Interval + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/Musical_Interval.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/Musical_Interval.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/Musical_Interval.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/Musical_Interval.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,26 @@ + + + + Musical Interval + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music-blue/music1.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music-blue/music1.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music-blue/music1.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music-blue/music1.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music1 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music-blue/music2.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music-blue/music2.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music-blue/music2.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music-blue/music2.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music2 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music-blue/music3.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music-blue/music3.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music-blue/music3.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music-blue/music3.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music3 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music-blue/music4.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music-blue/music4.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music-blue/music4.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music-blue/music4.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music4 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file Binary files /tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music-white/.DS_Store and /tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music-white/.DS_Store differ diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music-white/music-white-album cover/1.svg" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music-white/music-white-album cover/1.svg" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music-white/music-white-album cover/1.svg" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music-white/music-white-album cover/1.svg" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + 1 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music-white/music-white-album cover/2.svg" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music-white/music-white-album cover/2.svg" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music-white/music-white-album cover/2.svg" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music-white/music-white-album cover/2.svg" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + 2 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music-white/music-white-album cover/3.svg" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music-white/music-white-album cover/3.svg" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music-white/music-white-album cover/3.svg" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music-white/music-white-album cover/3.svg" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + 3 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music-white/music-white-album cover/4.svg" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music-white/music-white-album cover/4.svg" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music-white/music-white-album cover/4.svg" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music-white/music-white-album cover/4.svg" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + 4 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music-white/music-withe-sidebar/music1.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music-white/music-withe-sidebar/music1.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music-white/music-withe-sidebar/music1.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music-white/music-withe-sidebar/music1.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music1 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music-white/music-withe-sidebar/music2.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music-white/music-withe-sidebar/music2.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music-white/music-withe-sidebar/music2.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music-white/music-withe-sidebar/music2.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music2 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music-white/music-withe-sidebar/music3.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music-white/music-withe-sidebar/music3.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music-white/music-withe-sidebar/music3.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music-white/music-withe-sidebar/music3.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music3 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music-white/music-withe-sidebar/music4.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music-white/music-withe-sidebar/music4.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/music-white/music-withe-sidebar/music4.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/music-white/music-withe-sidebar/music4.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music4 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/add_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/add_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/add_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/add_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,31 @@ + + + + add_normal + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/album_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/album_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/album_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/album_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,18 @@ + + + + album_normal + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/all_music_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/all_music_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/all_music_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/all_music_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + all music_normal + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/clear_list_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/clear_list_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/clear_list_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/clear_list_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + clear list_normal + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/close_round normal.svg" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/close_round normal.svg" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/close_round normal.svg" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/close_round normal.svg" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,20 @@ + + + + titlebutton/close_round normal + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/collection_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/collection_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/collection_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/collection_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + collection_normal + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/cross_cycling_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/cross_cycling_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/cross_cycling_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/cross_cycling_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + cross-cycling_normal + Created with Sketch. + + + + + + + + + + \ No newline at end of file Binary files /tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/.DS_Store and /tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/.DS_Store differ diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/famous_ballad_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/famous_ballad_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/famous_ballad_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/famous_ballad_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + famous ballad_normal + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/last_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/last_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/last_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/last_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + last_normal + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/lyric_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/lyric_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/lyric_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/lyric_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + lyric_normal + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/mute_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/mute_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/mute_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/mute_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + mute_normal + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/my_collection_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/my_collection_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/my_collection_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/my_collection_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + my collection_normal + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/next_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/next_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/next_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/next_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + next_normal + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/picture_list_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/picture_list_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/picture_list_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/picture_list_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + picture list_normal + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/play_all_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/play_all_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/play_all_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/play_all_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + play all_normal + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/playlist_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/playlist_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/playlist_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/playlist_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + playlist_normal + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/play_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/play_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/play_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/play_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + play_normal + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/random_play_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/random_play_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/random_play_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/random_play_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + random play_normal + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/search_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/search_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/search_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/search_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + search_normal + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/sequential_loop_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/sequential_loop_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/sequential_loop_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/sequential_loop_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,21 @@ + + + + sequential loop_normal + Created with Sketch. + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/singer_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/singer_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/singer_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/singer_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + singer_normal + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/single_tune_circulation_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/single_tune_circulation_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/single_tune_circulation_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/single_tune_circulation_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,22 @@ + + + + single tune circulation_normal + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/suspend_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/suspend_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/suspend_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/suspend_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + suspend_normal + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/text_list_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/text_list_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/text_list_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/text_list_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + text list_normal + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/volume_add_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/volume_add_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/volume_add_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/volume_add_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume add_normal + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/volume_lessen_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/volume_lessen_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/volume_lessen_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/volume_lessen_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume lessen_normal + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/volume_low_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/volume_low_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/volume_low_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/volume_low_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume_normal 1 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/volume_mid_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/volume_mid_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/volume_mid_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/volume_mid_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume_normal 2 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/volume_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/volume_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/normal/volume_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/normal/volume_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + volume_normal + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/add_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/add_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/add_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/add_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,30 @@ + + + + add_press + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/back_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/back_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/back_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/back_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + back_press + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/clear_list_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/clear_list_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/clear_list_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/clear_list_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + clear list_press + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/close_round_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/close_round_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/close_round_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/close_round_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,20 @@ + + + + titlebutton/close_round press + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/collection1_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/collection1_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/collection1_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/collection1_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + collection1_press + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/collection_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/collection_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/collection_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/collection_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + collection_press + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/cross_cycling_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/cross_cycling_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/cross_cycling_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/cross_cycling_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + cross-cycling_press + Created with Sketch. + + + + + + + + + + \ No newline at end of file Binary files /tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/.DS_Store and /tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/.DS_Store differ diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/last_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/last_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/last_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/last_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + last_press + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/lyric_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/lyric_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/lyric_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/lyric_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + lyric_press + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/mute_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/mute_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/mute_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/mute_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + mute_press + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/next_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/next_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/next_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/next_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + next_press + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/picture_list_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/picture_list_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/picture_list_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/picture_list_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + picture list_press + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/play_all_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/play_all_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/play_all_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/play_all_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + play all_press + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/playlist_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/playlist_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/playlist_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/playlist_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + playlist_press + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/play_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/play_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/play_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/play_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + play_press + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/random_play_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/random_play_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/random_play_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/random_play_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + random play_press + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/search_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/search_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/search_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/search_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + search_press + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/sequential_loop_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/sequential_loop_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/sequential_loop_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/sequential_loop_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,19 @@ + + + + sequential loop_press + Created with Sketch. + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/single_tune_circulation_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/single_tune_circulation_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/single_tune_circulation_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/single_tune_circulation_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,22 @@ + + + + single tune circulation_press + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/suspend_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/suspend_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/suspend_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/suspend_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + suspend_press + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/text_list_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/text_list_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/text_list_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/text_list_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + text list_press + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/volume_add_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/volume_add_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/volume_add_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/volume_add_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume add_press + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/volume_lessen_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/volume_lessen_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/volume_lessen_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/volume_lessen_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume lessen_press + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/volume_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/volume_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/press/volume_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/press/volume_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + volume_press + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/select 2.svg" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/select 2.svg" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/select 2.svg" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/select 2.svg" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,29 @@ + + + + select 2 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/select_2.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/select_2.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/select_2.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/select_2.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,29 @@ + + + + select 2 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/select.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/select.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/select.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/select.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,29 @@ + + + + select 2 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/warning.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/warning.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/dark/warning.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/dark/warning.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + warning + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/active/album_active.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/active/album_active.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/active/album_active.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/active/album_active.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,18 @@ + + + + album_active + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/active/all_music_active.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/active/all_music_active.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/active/all_music_active.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/active/all_music_active.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + all music_active + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/active/famous_ballad_active.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/active/famous_ballad_active.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/active/famous_ballad_active.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/active/famous_ballad_active.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + famous ballad_active + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/active/my_collection_active.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/active/my_collection_active.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/active/my_collection_active.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/active/my_collection_active.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + my collection_active + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/active/picture_list_active.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/active/picture_list_active.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/active/picture_list_active.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/active/picture_list_active.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,24 @@ + + + + picture list_active + Created with Sketch. + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/active/singer_active.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/active/singer_active.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/active/singer_active.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/active/singer_active.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + singer_active + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/active/text_list_active.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/active/text_list_active.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/active/text_list_active.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/active/text_list_active.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,24 @@ + + + + text list_active + Created with Sketch. + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/Bullet window warning.svg" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/Bullet window warning.svg" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/Bullet window warning.svg" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/Bullet window warning.svg" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,32 @@ + + + + Bullet window warning + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/Bullet_window_warning.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/Bullet_window_warning.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/Bullet_window_warning.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/Bullet_window_warning.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,32 @@ + + + + Bullet window warning + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/checked/collection1_checked.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/checked/collection1_checked.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/checked/collection1_checked.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/checked/collection1_checked.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + collection1_checked + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/checked/cross_cycling_checked.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/checked/cross_cycling_checked.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/checked/cross_cycling_checked.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/checked/cross_cycling_checked.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + cross-cycling_checked + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/checked/lyric_checked.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/checked/lyric_checked.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/checked/lyric_checked.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/checked/lyric_checked.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + lyric_checked + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/checked/mute_checked.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/checked/mute_checked.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/checked/mute_checked.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/checked/mute_checked.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + mute_checked + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/checked/playlist_checked.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/checked/playlist_checked.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/checked/playlist_checked.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/checked/playlist_checked.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + playlist_checked + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/checked/sequential_loop_checked.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/checked/sequential_loop_checked.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/checked/sequential_loop_checked.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/checked/sequential_loop_checked.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,19 @@ + + + + sequential loop_checked + Created with Sketch. + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/checked/single_tune_circulation_checked.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/checked/single_tune_circulation_checked.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/checked/single_tune_circulation_checked.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/checked/single_tune_circulation_checked.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,22 @@ + + + + single tune circulation_checked + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/checked/volume_checked.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/checked/volume_checked.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/checked/volume_checked.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/checked/volume_checked.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + volume_checked + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/checked/volume_low_checked.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/checked/volume_low_checked.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/checked/volume_low_checked.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/checked/volume_low_checked.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume_checked 1 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/checked/volume_mid_checked.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/checked/volume_mid_checked.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/checked/volume_mid_checked.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/checked/volume_mid_checked.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume_checked 2 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round hover.svg" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round hover.svg" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round hover.svg" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round hover.svg" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,20 @@ + + + + titlebutton/close_round hover + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round normal.svg" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round normal.svg" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round normal.svg" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round normal.svg" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,20 @@ + + + + titlebutton/close_round normal + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,20 @@ + + + + titlebutton/close_round press + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,20 @@ + + + + titlebutton/close_round press + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_0" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_0" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_0" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_0" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,20 @@ + + + + titlebutton/close_round press + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_1" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_1" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_1" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_1" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,20 @@ + + + + titlebutton/close_round press + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_2" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_2" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_2" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_2" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,20 @@ + + + + titlebutton/close_round press + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_3" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_3" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_3" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_3" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,20 @@ + + + + titlebutton/close_round press + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_4" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_4" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_4" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_4" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,20 @@ + + + + titlebutton/close_round press + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_5" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_5" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_5" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_5" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,20 @@ + + + + titlebutton/close_round press + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,20 @@ + + + + titlebutton/close_round press + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_0" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_0" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_0" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_0" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,20 @@ + + + + titlebutton/close_round press + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_1" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_1" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_1" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_1" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,20 @@ + + + + titlebutton/close_round press + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_2" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_2" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_2" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_2" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,20 @@ + + + + titlebutton/close_round press + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_3" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_3" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_3" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_3" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,20 @@ + + + + titlebutton/close_round press + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_4" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_4" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_4" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_4" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,20 @@ + + + + titlebutton/close_round press + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_5" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_5" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_5" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_5" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,20 @@ + + + + titlebutton/close_round press + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/deepin_music_player.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/deepin_music_player.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/deepin_music_player.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/deepin_music_player.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,45 @@ + + + + deepin-music-player + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/disabled/close_disabled.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/disabled/close_disabled.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/disabled/close_disabled.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/disabled/close_disabled.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + close_disabled + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/disabled/last_disabled.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/disabled/last_disabled.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/disabled/last_disabled.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/disabled/last_disabled.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + last_disabled + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/disabled/next_disabled.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/disabled/next_disabled.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/disabled/next_disabled.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/disabled/next_disabled.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + next_disabled + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/disabled/play_disabled.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/disabled/play_disabled.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/disabled/play_disabled.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/disabled/play_disabled.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + play_disabled + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/disabled/suspend_disabled.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/disabled/suspend_disabled.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/disabled/suspend_disabled.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/disabled/suspend_disabled.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + suspend_disabled + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/focus/add_focus.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/focus/add_focus.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/focus/add_focus.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/focus/add_focus.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,43 @@ + + + + add_focus + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/focus/back_focus.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/focus/back_focus.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/focus/back_focus.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/focus/back_focus.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,30 @@ + + + + back_focus + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/focus/search_focus.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/focus/search_focus.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/focus/search_focus.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/focus/search_focus.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,31 @@ + + + + search_focus + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/add_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/add_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/add_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/add_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,30 @@ + + + + add_hover + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/back_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/back_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/back_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/back_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + back_hover + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/clear_list_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/clear_list_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/clear_list_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/clear_list_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + clear list_normal + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/close_round hover.svg" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/close_round hover.svg" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/close_round hover.svg" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/close_round hover.svg" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,20 @@ + + + + titlebutton/close_round hover + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/collection_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/collection_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/collection_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/collection_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + collection_hover + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/cross_cycling_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/cross_cycling_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/cross_cycling_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/cross_cycling_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + cross-cycling_hover + Created with Sketch. + + + + + + + + + + \ No newline at end of file Binary files /tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/.DS_Store and /tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/.DS_Store differ diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/last_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/last_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/last_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/last_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + last_hover + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/lyric_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/lyric_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/lyric_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/lyric_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + lyric_hover + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/mute_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/mute_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/mute_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/mute_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + mute_hover + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/next_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/next_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/next_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/next_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + next_hover + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/picture_list_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/picture_list_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/picture_list_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/picture_list_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + picture list_hover + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/play_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/play_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/play_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/play_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + play_hover + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/playlist_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/playlist_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/playlist_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/playlist_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + playlist_hover + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/search_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/search_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/search_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/search_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + search_hover + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/sequential_loop_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/sequential_loop_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/sequential_loop_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/sequential_loop_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,21 @@ + + + + sequential loop_hover + Created with Sketch. + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/single_tune_circulation_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/single_tune_circulation_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/single_tune_circulation_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/single_tune_circulation_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,22 @@ + + + + single tune circulation_hover + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/suspend_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/suspend_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/suspend_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/suspend_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + suspend_hover + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/text_list_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/text_list_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/text_list_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/text_list_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + text list_hover + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/volume_add_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/volume_add_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/volume_add_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/volume_add_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume add_hover + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/volume_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/volume_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/volume_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/volume_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + volume_hover + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/volume_lessen_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/volume_lessen_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/volume_lessen_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/volume_lessen_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume lessen_hover + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/volume_low_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/volume_low_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/volume_low_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/volume_low_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume_hover 1 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/volume_mid_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/volume_mid_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/hover/volume_mid_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/hover/volume_mid_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume_hover 2 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/import_music.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/import_music.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/import_music.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/import_music.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,18 @@ + + + + icon_import_music + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music1.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music1.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music1.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music1.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music1 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music2.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music2.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music2.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music2.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music2 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music3.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music3.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music3.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music3.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music3 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music4.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music4.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music4.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music4.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music4 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/Musical Interval.svg" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/Musical Interval.svg" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/Musical Interval.svg" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/Musical Interval.svg" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,26 @@ + + + + Musical Interval + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/Musical_Interval.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/Musical_Interval.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/Musical_Interval.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/Musical_Interval.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,26 @@ + + + + Musical Interval + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file Binary files /tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-blue/.DS_Store and /tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-blue/.DS_Store differ diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-blue/music1.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-blue/music1.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-blue/music1.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-blue/music1.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music1 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-blue/music2.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-blue/music2.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-blue/music2.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-blue/music2.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music2 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-blue/music3.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-blue/music3.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-blue/music3.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-blue/music3.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music3 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-blue/music4.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-blue/music4.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-blue/music4.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-blue/music4.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music4 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file Binary files /tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-white/.DS_Store and /tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-white/.DS_Store differ diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-white/music-white-album cover/1.svg" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-white/music-white-album cover/1.svg" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-white/music-white-album cover/1.svg" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-white/music-white-album cover/1.svg" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + 1 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-white/music-white-album cover/2.svg" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-white/music-white-album cover/2.svg" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-white/music-white-album cover/2.svg" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-white/music-white-album cover/2.svg" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + 2 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-white/music-white-album cover/3.svg" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-white/music-white-album cover/3.svg" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-white/music-white-album cover/3.svg" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-white/music-white-album cover/3.svg" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + 3 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-white/music-white-album cover/4.svg" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-white/music-white-album cover/4.svg" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-white/music-white-album cover/4.svg" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-white/music-white-album cover/4.svg" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + 4 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-white/music-withe-sidebar/music1.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-white/music-withe-sidebar/music1.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-white/music-withe-sidebar/music1.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-white/music-withe-sidebar/music1.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music1 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-white/music-withe-sidebar/music2.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-white/music-withe-sidebar/music2.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-white/music-withe-sidebar/music2.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-white/music-withe-sidebar/music2.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music2 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-white/music-withe-sidebar/music3.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-white/music-withe-sidebar/music3.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-white/music-withe-sidebar/music3.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-white/music-withe-sidebar/music3.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music3 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-white/music-withe-sidebar/music4.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-white/music-withe-sidebar/music4.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music-white/music-withe-sidebar/music4.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music-white/music-withe-sidebar/music4.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music4 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music_white_album_cover/music1.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music_white_album_cover/music1.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music_white_album_cover/music1.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music_white_album_cover/music1.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + 1 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music_white_album_cover/music2.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music_white_album_cover/music2.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music_white_album_cover/music2.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music_white_album_cover/music2.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + 2 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music_white_album_cover/music3.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music_white_album_cover/music3.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music_white_album_cover/music3.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music_white_album_cover/music3.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + 3 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music_white_album_cover/music4.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music_white_album_cover/music4.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music_white_album_cover/music4.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music_white_album_cover/music4.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + 4 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music_withe_sidebar/music1.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music_withe_sidebar/music1.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music_withe_sidebar/music1.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music_withe_sidebar/music1.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music1 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music_withe_sidebar/music2.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music_withe_sidebar/music2.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music_withe_sidebar/music2.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music_withe_sidebar/music2.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music2 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music_withe_sidebar/music3.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music_withe_sidebar/music3.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music_withe_sidebar/music3.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music_withe_sidebar/music3.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music3 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music_withe_sidebar/music4.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music_withe_sidebar/music4.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/music_withe_sidebar/music4.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/music_withe_sidebar/music4.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + music4 + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/add_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/add_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/add_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/add_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,31 @@ + + + + add_normal + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/album_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/album_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/album_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/album_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,18 @@ + + + + album_normal + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/all_music_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/all_music_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/all_music_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/all_music_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + all music_normal + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/back_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/back_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/back_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/back_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + back_normal + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/clear_list_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/clear_list_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/clear_list_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/clear_list_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + clear list_normal + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/close_round normal.svg" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/close_round normal.svg" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/close_round normal.svg" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/close_round normal.svg" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,20 @@ + + + + titlebutton/close_round normal + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/collection_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/collection_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/collection_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/collection_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + collection_normal + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/cross_cycling_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/cross_cycling_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/cross_cycling_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/cross_cycling_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + cross-cycling_normal + Created with Sketch. + + + + + + + + + + \ No newline at end of file Binary files /tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/.DS_Store and /tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/.DS_Store differ diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/famous_ballad_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/famous_ballad_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/famous_ballad_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/famous_ballad_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + famous ballad_normal + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/last_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/last_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/last_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/last_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + last_normal + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/lyric_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/lyric_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/lyric_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/lyric_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + lyric_normal + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/mute_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/mute_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/mute_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/mute_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + mute_normal + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/my_collection_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/my_collection_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/my_collection_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/my_collection_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + my collection_normal + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/next_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/next_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/next_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/next_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + next_normal + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/picture_list_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/picture_list_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/picture_list_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/picture_list_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + picture list_normal + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/play_all_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/play_all_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/play_all_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/play_all_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + play all_normal + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/playlist_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/playlist_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/playlist_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/playlist_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + playlist_normal + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/play_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/play_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/play_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/play_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + play_normal + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/random_play_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/random_play_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/random_play_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/random_play_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + random play_normal + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/search_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/search_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/search_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/search_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + search_normal + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/sequential_loop_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/sequential_loop_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/sequential_loop_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/sequential_loop_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,21 @@ + + + + sequential loop_normal + Created with Sketch. + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/singer_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/singer_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/singer_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/singer_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + singer_normal + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/single_tune_circulation_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/single_tune_circulation_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/single_tune_circulation_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/single_tune_circulation_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,22 @@ + + + + single tune circulation_normal + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/suspend_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/suspend_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/suspend_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/suspend_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + suspend_normal + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/text_list_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/text_list_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/text_list_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/text_list_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + text list_normal + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/volume_add_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/volume_add_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/volume_add_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/volume_add_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume add_normal + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/volume_lessen_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/volume_lessen_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/volume_lessen_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/volume_lessen_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume lessen_normal + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/volume_low_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/volume_low_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/volume_low_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/volume_low_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume_normal 1 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/volume_mid_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/volume_mid_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/volume_mid_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/volume_mid_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume_normal 2 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/volume_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/volume_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/normal/volume_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/normal/volume_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + volume_normal + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/add_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/add_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/add_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/add_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,30 @@ + + + + add_press + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/back_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/back_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/back_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/back_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + back_press + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/clear_list_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/clear_list_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/clear_list_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/clear_list_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + clear list_press + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/close_round press.svg" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/close_round press.svg" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/close_round press.svg" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/close_round press.svg" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,20 @@ + + + + titlebutton/close_round press + Created with Sketch. + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/collection1_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/collection1_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/collection1_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/collection1_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + collection1_press + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/collection_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/collection_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/collection_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/collection_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + collection_press + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/cross_cycling_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/cross_cycling_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/cross_cycling_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/cross_cycling_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + cross-cycling_press + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/last_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/last_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/last_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/last_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + last_press + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/lyric_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/lyric_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/lyric_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/lyric_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + lyric_press + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/mute_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/mute_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/mute_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/mute_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + mute_press + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/next_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/next_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/next_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/next_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + next_press + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/picture_list_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/picture_list_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/picture_list_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/picture_list_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + picture list_press + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/play_all_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/play_all_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/play_all_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/play_all_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + play all_press + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/playlist_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/playlist_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/playlist_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/playlist_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + playlist_press + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/play_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/play_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/play_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/play_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + play_press + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/random_play_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/random_play_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/random_play_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/random_play_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + random play_press + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/search_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/search_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/search_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/search_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,17 @@ + + + + search_press + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/sequential_loop_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/sequential_loop_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/sequential_loop_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/sequential_loop_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,19 @@ + + + + sequential loop_press + Created with Sketch. + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/single_tune_circulation_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/single_tune_circulation_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/single_tune_circulation_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/single_tune_circulation_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,22 @@ + + + + single tune circulation_press + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/suspend_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/suspend_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/suspend_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/suspend_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + suspend_press + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/text_list_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/text_list_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/text_list_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/text_list_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + text list_press + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/volume_add_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/volume_add_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/volume_add_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/volume_add_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume add_press + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/volume_lessen_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/volume_lessen_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/volume_lessen_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/volume_lessen_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume lessen_press + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/volume_low_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/volume_low_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/volume_low_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/volume_low_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume_press 1 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/volume_mid_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/volume_mid_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/volume_mid_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/volume_mid_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + volume_press 2 + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/volume_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/volume_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/press/volume_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/press/volume_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,15 @@ + + + + volume_press + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff -Nru "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/select .svg" "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/select .svg" --- "/tmp/tmpRscYzO/J4I_WhIHOc/deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/select .svg" 1970-01-01 00:00:00.000000000 +0000 +++ "/tmp/tmpRscYzO/PbCG72AO9q/deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/select .svg" 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,33 @@ + + + + select 2 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/select.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/select.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/select.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/select.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,33 @@ + + + + select 2 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/shadow.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/shadow.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/shadow.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/shadow.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,26 @@ + + + + shadow + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/warning.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/warning.svg --- deepin-music-5.0.1+ds/src/music-player/resource/mpimage/light/warning.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/mpimage/light/warning.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + warning + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/resource.qrc deepin-music-6.0.1.54+ds.1/src/music-player/resource/resource.qrc --- deepin-music-5.0.1+ds/src/music-player/resource/resource.qrc 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/resource.qrc 2020-07-14 12:05:00.000000000 +0000 @@ -1,80 +1,224 @@ - image/app_icon.png - image/back_hover_dark.png - image/back_hover.png - image/back_normal_dark.png - image/back_normal.png - image/back_press_dark.png - image/back_press.png - image/cover_max.png - image/cover_min.png - image/dropdown_arrow.png - image/fav_hover.png - image/fav_normal.png - image/fav_press.png - image/jumpto_playing_hover.png - image/jumpto_playing_normal.png - image/jumpto_playing_press.png - image/logo.png - image/lrc_hover.png - image/lrc_normal.png - image/lrc_press.png - image/next_hover.png - image/next_normal.png - image/next_press.png - image/notify_fail.png - image/notify_success.png - image/pause_hover.png - image/pause_normal.png - image/pause_press.png - image/play_all.png - image/playing_active_dark.png - image/playing_active.png - image/playing_normal_dark.png - image/playing_normal.png - image/playlist_allmusic_dark.png - image/playlist_allmusic.png - image/playlist_dark.png - image/playlist_fav_dark.png - image/playlist_fav.png - image/playlist.png - image/previous_hover.png - image/previous_normal.png - image/previous_press.png - image/repeat_all_hover.png - image/repeat_all_normal.png - image/repeat_all_press.png - image/repeat_single_hover.png - image/repeat_single_normal.png - image/repeat_single_press.png - image/show_playlist_hover.png - image/show_playlist_normal.png - image/show_playlist_press.png - image/shuffle_hover.png - image/shuffle_normal.png - image/shuffle_press.png - image/start_hover.png - image/start_normal.png - image/start_press.png - image/unfav_hover.png - image/unfav_normal.png - image/unfav_press.png - image/input_clear_hover.png - image/input_clear_normal.png - image/input_clear_press.png - image/search .png - image/search_dark.png - image/show_lyc_hover.png - image/show_lyc_normal.png - image/show_lyc_press.png - image/slider_handle.png - image/deepin-music.svg - image/sequence_hover.png - image/sequence_normal.png - image/sequence_press.png - image/about_icon.png - image/cover_welcome.png - image/info_cover.png + mpimage/light/import_music.svg + mpimage/light/music1.svg + mpimage/light/Musical_Interval.svg + mpimage/light/music4.svg + mpimage/light/select.svg + mpimage/light/deepin_music_player.svg + mpimage/light/music2.svg + mpimage/light/warning.svg + mpimage/light/music3.svg + mpimage/light/Bullet_window_warning.svg + mpimage/light/active/all_music_active.svg + mpimage/light/active/picture_list_active.svg + mpimage/light/active/text_list_active.svg + mpimage/light/active/singer_active.svg + mpimage/light/active/my_collection_active.svg + mpimage/light/active/album_active.svg + mpimage/light/active/famous_ballad_active.svg + mpimage/light/checked/collection1_checked.svg + mpimage/light/checked/single_tune_circulation_checked.svg + mpimage/light/checked/cross_cycling_checked.svg + mpimage/light/checked/volume_checked.svg + mpimage/light/checked/sequential_loop_checked.svg + mpimage/light/checked/mute_checked.svg + mpimage/light/checked/playlist_checked.svg + mpimage/light/checked/lyric_checked.svg + mpimage/light/disabled/last_disabled.svg + mpimage/light/disabled/suspend_disabled.svg + mpimage/light/disabled/next_disabled.svg + mpimage/light/disabled/play_disabled.svg + mpimage/light/disabled/close_disabled.svg + mpimage/light/focus/back_focus.svg + mpimage/light/focus/add_focus.svg + mpimage/light/focus/search_focus.svg + mpimage/light/hover/volume_add_hover.svg + mpimage/light/hover/text_list_hover.svg + mpimage/light/hover/back_hover.svg + mpimage/light/hover/add_hover.svg + mpimage/light/hover/picture_list_hover.svg + mpimage/light/hover/search_hover.svg + mpimage/light/hover/volume_lessen_hover.svg + mpimage/light/normal/album_normal.svg + mpimage/light/normal/singer_normal.svg + mpimage/light/normal/volume_lessen_normal.svg + mpimage/light/normal/lyric_normal.svg + mpimage/light/normal/last_normal.svg + mpimage/light/normal/playlist_normal.svg + mpimage/light/normal/text_list_normal.svg + mpimage/light/normal/collection_normal.svg + mpimage/light/normal/next_normal.svg + mpimage/light/normal/clear_list_normal.svg + mpimage/light/normal/suspend_normal.svg + mpimage/light/normal/random_play_normal.svg + mpimage/light/normal/volume_add_normal.svg + mpimage/light/normal/back_normal.svg + mpimage/light/normal/search_normal.svg + mpimage/light/normal/cross_cycling_normal.svg + mpimage/light/normal/play_all_normal.svg + mpimage/light/normal/volume_normal.svg + mpimage/light/normal/add_normal.svg + mpimage/light/normal/mute_normal.svg + mpimage/light/normal/famous_ballad_normal.svg + mpimage/light/normal/sequential_loop_normal.svg + mpimage/light/normal/all_music_normal.svg + mpimage/light/normal/picture_list_normal.svg + mpimage/light/normal/play_normal.svg + mpimage/light/normal/single_tune_circulation_normal.svg + mpimage/light/press/volume_add_press.svg + mpimage/light/press/mute_press.svg + mpimage/light/press/text_list_press.svg + mpimage/light/press/volume_lessen_press.svg + mpimage/light/press/random_play_press.svg + mpimage/light/press/sequential_loop_press.svg + mpimage/light/press/collection_press.svg + mpimage/light/press/single_tune_circulation_press.svg + mpimage/light/press/picture_list_press.svg + mpimage/light/press/collection1_press.svg + mpimage/light/press/next_press.svg + mpimage/light/press/volume_press.svg + mpimage/light/press/add_press.svg + mpimage/light/press/back_press.svg + mpimage/light/press/lyric_press.svg + mpimage/light/press/play_all_press.svg + mpimage/light/press/play_press.svg + mpimage/light/press/playlist_press.svg + mpimage/light/press/last_press.svg + mpimage/light/press/clear_list_press.svg + mpimage/light/press/cross_cycling_press.svg + mpimage/light/press/suspend_press.svg + mpimage/light/press/search_press.svg + mpimage/dark/active/text_list_active.svg + mpimage/dark/active/album_active.svg + mpimage/dark/active/singer_active.svg + mpimage/dark/active/picture_list_active.svg + mpimage/dark/active/all_music_active.svg + mpimage/dark/active/my_collection_active.svg + mpimage/dark/active/famous_ballad_active.svg + mpimage/dark/checked/mute_checked.svg + mpimage/dark/checked/playlist_checked.svg + mpimage/dark/checked/volume_checked.svg + mpimage/dark/checked/collection1_checked.svg + mpimage/dark/checked/lyric_checked.svg + mpimage/dark/disabled/last_disabled.svg + mpimage/dark/disabled/play_disabled.svg + mpimage/dark/disabled/next_disabled.svg + mpimage/dark/disabled/suspend_disabled.svg + mpimage/dark/focus/search_focus.svg + mpimage/dark/focus/add_focus.svg + mpimage/dark/focus/back_focus.svg + mpimage/dark/hover/back_hover.svg + mpimage/dark/hover/picture_list_hover.svg + mpimage/dark/hover/mute_hover.svg + mpimage/dark/hover/playlist_hover.svg + mpimage/dark/hover/last_hover.svg + mpimage/dark/hover/volume_add_hover.svg + mpimage/dark/hover/next_hover.svg + mpimage/dark/hover/single_tune_circulation_hover.svg + mpimage/dark/hover/volume_lessen_hover.svg + mpimage/dark/hover/volume_hover.svg + mpimage/dark/hover/cross_cycling_hover.svg + mpimage/dark/hover/collection_hover.svg + mpimage/dark/hover/add_hover.svg + mpimage/dark/hover/suspend_hover.svg + mpimage/dark/hover/search_hover.svg + mpimage/dark/hover/text_list_hover.svg + mpimage/dark/hover/play_hover.svg + mpimage/dark/hover/lyric_hover.svg + mpimage/dark/hover/sequential_loop_hover.svg + mpimage/dark/normal/clear_list_normal.svg + mpimage/dark/normal/last_normal.svg + mpimage/dark/normal/famous_ballad_normal.svg + mpimage/dark/normal/play_normal.svg + mpimage/dark/normal/play_all_normal.svg + mpimage/dark/normal/all_music_normal.svg + mpimage/dark/normal/cross_cycling_normal.svg + mpimage/dark/normal/next_normal.svg + mpimage/dark/normal/playlist_normal.svg + mpimage/dark/normal/single_tune_circulation_normal.svg + mpimage/dark/normal/lyric_normal.svg + mpimage/dark/normal/sequential_loop_normal.svg + mpimage/dark/normal/text_list_normal.svg + mpimage/dark/normal/add_normal.svg + mpimage/dark/normal/album_normal.svg + mpimage/dark/normal/search_normal.svg + mpimage/dark/normal/volume_normal.svg + mpimage/dark/normal/volume_lessen_normal.svg + mpimage/dark/normal/singer_normal.svg + mpimage/dark/normal/my_collection_normal.svg + mpimage/dark/normal/collection_normal.svg + mpimage/dark/normal/picture_list_normal.svg + mpimage/dark/normal/random_play_normal.svg + mpimage/dark/normal/mute_normal.svg + mpimage/dark/normal/suspend_normal.svg + mpimage/dark/normal/volume_add_normal.svg + mpimage/dark/press/clear_list_press.svg + mpimage/dark/press/play_press.svg + mpimage/dark/press/collection1_press.svg + mpimage/dark/press/mute_press.svg + mpimage/dark/press/back_press.svg + mpimage/dark/press/random_play_press.svg + mpimage/dark/press/collection_press.svg + mpimage/dark/press/single_tune_circulation_press.svg + mpimage/dark/press/cross_cycling_press.svg + mpimage/dark/press/last_press.svg + mpimage/dark/press/volume_lessen_press.svg + mpimage/dark/press/picture_list_press.svg + mpimage/dark/press/text_list_press.svg + mpimage/dark/press/play_all_press.svg + mpimage/dark/press/next_press.svg + mpimage/dark/press/volume_press.svg + mpimage/dark/press/add_press.svg + mpimage/dark/press/sequential_loop_press.svg + mpimage/dark/press/playlist_press.svg + mpimage/dark/press/suspend_press.svg + mpimage/dark/press/search_press.svg + mpimage/dark/press/volume_add_press.svg + mpimage/dark/press/lyric_press.svg + mpimage/dark/music1.svg + mpimage/dark/Musical_Interval.svg + mpimage/dark/warning.svg + mpimage/dark/music2.svg + mpimage/dark/import_music.svg + mpimage/dark/music3.svg + mpimage/dark/music4.svg + mpimage/dark/select_2.svg + mpimage/dark/Bullet_window_warning.svg + mpimage/light/music_withe_sidebar/music2.svg + mpimage/light/music_withe_sidebar/music3.svg + mpimage/light/music_withe_sidebar/music4.svg + mpimage/light/music_withe_sidebar/music1.svg + mpimage/light/hover/close_round hover.svg + mpimage/light/normal/close_round normal.svg + mpimage/light/press/close_round press.svg + mpimage/light/music_white_album_cover/music4.svg + mpimage/light/music_white_album_cover/music1.svg + mpimage/light/music_white_album_cover/music2.svg + mpimage/light/music_white_album_cover/music3.svg + mpimage/dark/icon_import_music.svg + mpimage/dark/select.svg + mpimage/dark/close_round/close_hover_dark.svg + mpimage/dark/close_round/close_normal_dark.svg + mpimage/dark/close_round/close_press.svg + mpimage/light/close-round/close_round hover.svg + mpimage/light/close-round/close_round normal.svg + mpimage/light/close-round/close_round press.svg + mpimage/light/normal/my_collection_normal.svg + mpimage/dark/hover/volume_low_hover.svg + mpimage/dark/normal/volume_mid_normal.svg + mpimage/dark/normal/volume_low_normal.svg + mpimage/light/checked/volume_mid_checked.svg + mpimage/light/checked/volume_low_checked.svg + mpimage/light/hover/volume_mid_hover.svg + mpimage/light/hover/volume_low_hover.svg + mpimage/light/normal/volume_mid_normal.svg + mpimage/light/normal/volume_low_normal.svg + mpimage/light/press/volume_mid_press.svg + mpimage/light/press/volume_low_press.svg + mpimage/dark/hover/volume_mid_hover.svg + mpimage/dark/checked/volume_mid_checked.svg + mpimage/dark/checked/volume_low_checked.svg + mpimage/light/shadow.svg diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/common/image/deepin-music.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/common/image/deepin-music.svg --- deepin-music-5.0.1+ds/src/music-player/resource/theme/common/image/deepin-music.svg 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/common/image/deepin-music.svg 2020-07-14 12:05:00.000000000 +0000 @@ -1,44 +1,66 @@ - - - - 深度音乐-256px - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - \ No newline at end of file + + + + + + + diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/common/image/notify_fail_new.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/common/image/notify_fail_new.svg --- deepin-music-5.0.1+ds/src/music-player/resource/theme/common/image/notify_fail_new.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/common/image/notify_fail_new.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/common/image/notify_success_new.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/common/image/notify_success_new.svg --- deepin-music-5.0.1+ds/src/music-player/resource/theme/common/image/notify_success_new.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/common/image/notify_success_new.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/common/image/picturelist_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/common/image/picturelist_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/theme/common/image/picturelist_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/common/image/picturelist_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + picture list_hover + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/common/image/picturelist_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/common/image/picturelist_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/theme/common/image/picturelist_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/common/image/picturelist_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + picture list_normal + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/common/image/picturelist_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/common/image/picturelist_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/theme/common/image/picturelist_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/common/image/picturelist_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + picture list_press + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/common/image/textlist_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/common/image/textlist_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/theme/common/image/textlist_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/common/image/textlist_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + text list_hover + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/common/image/textlist_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/common/image/textlist_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/theme/common/image/textlist_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/common/image/textlist_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + text list_normal + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/common/image/textlist_press.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/common/image/textlist_press.svg --- deepin-music-5.0.1+ds/src/music-player/resource/theme/common/image/textlist_press.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/common/image/textlist_press.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,13 @@ + + + + text list_press + Created with Sketch. + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/dark/image/album_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/dark/image/album_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/theme/dark/image/album_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/dark/image/album_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,18 @@ + + + + album_normal + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/dark/image/singer_normal.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/dark/image/singer_normal.svg --- deepin-music-5.0.1+ds/src/music-player/resource/theme/dark/image/singer_normal.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/dark/image/singer_normal.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + singer_normal + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/dark/MusicListItem.theme deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/dark/MusicListItem.theme --- deepin-music-5.0.1+ds/src/music-player/resource/theme/dark/MusicListItem.theme 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/dark/MusicListItem.theme 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,46 @@ +#MusicListItem { + qproperty-playingIcon: ":/common/animation/playing/blue"; + qproperty-highlightPlayingIcon: ":/common/animation/playing/blue"; +} + +#MusicListIcon { + image: url(:/dark/image/playlist.svg); +} + +#MusicListIcon[iconName="album"] { + image: url(:/dark/image/album_normal.svg); +} + +#MusicListIcon[iconName="artist"] { + image: url(:/dark/image/singer_normal.svg); +} + +#MusicListIcon[iconName="all"] { + image: url(:/dark/image/playlist_allmusic.svg); +} + +#MusicListIcon[iconName="fav"] { + image: url(:/dark/image/playlist_fav.svg); +} + +#MusicListInterFrame { + border: none; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); +} + +#MusicListTitle { + qproperty-alignment: AlignLeft; + font-size: 12px; + border: none; + color: #afafaf; + background: transparent; +} + +#MusicListTitle[status="active"] { + color: #009aff; +} + +#MusicListTitle:focus[status="active"] { + background: rgba(255, 255, 255, 0.15); + border-radius: 4.0px; +} diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/dark/MusicListView.theme deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/dark/MusicListView.theme --- deepin-music-5.0.1+ds/src/music-player/resource/theme/dark/MusicListView.theme 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/dark/MusicListView.theme 2020-07-14 12:05:00.000000000 +0000 @@ -1,15 +1,23 @@ -/* !!!! WARNING !!!!*/ - - -/* modify MusicItem.theme for color */ - #MusicListView { - border: 0px solid red; - margin: 0 0 0 0; + color: #009aff; + background-color: rgba(255, 255, 255, 0.0); + show-decoration-selected: 1; + selection-color: red; + selection-background-color: rgba(42, 166, 248, 0.2); outline: none; - background: #202020; } #MusicListView::item { - height: 36px; -} \ No newline at end of file + color: #009aff; + height: 56; +} + +#MusicListView::item:selected:!active { + color: white; + background-color: qlineargradient(x1: 0 y1: 0, x2: 1 y2: 0, stop: 0 #2aa6f8, stop: 0.015 #2aa6f8, stop: 0.0155 rgba(42, 166, 248, 20%), stop: 1 rgba(42, 166, 248, 20%)); +} + +#MusicListView::item:selected:active { + color: white; + background-color: qlineargradient(x1: 0 y1: 0, x2: 1 y2: 0, stop: 0 #2aa6f8, stop: 0.015 #2aa6f8, stop: 0.0155 rgba(42, 166, 248, 20%), stop: 1 rgba(42, 166, 248, 20%)); +} diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/dark/MusicListWidget.theme deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/dark/MusicListWidget.theme --- deepin-music-5.0.1+ds/src/music-player/resource/theme/dark/MusicListWidget.theme 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/dark/MusicListWidget.theme 2020-07-14 12:05:00.000000000 +0000 @@ -1,34 +1,37 @@ #MusicListWidget { - border-radius: 4px; - background-color: rgba(32, 32, 32, 0); -} - -#MusicListActionBar { - background-color: rgba(32, 32, 32, 1); + border: 1px solid rgba(0, 0, 0, 10%); + border-top: none; + background-color: rgba(37, 37, 37, 0.9); } -#MusicListEmptyHits { - font-size: 24px; - color: #d0d0d0; - qproperty-alignment: AlignCenter; - background-color: rgba(32, 32, 32, 1); +#MusicListWidgetAddFrame { + border-radius: 5px; + border-bottom: 1px solid rgba(0, 0, 0, 0.02); } -#MusicListPlayAll { +#MusicListWidgetAdd { + outline: none; font-size: 12px; - padding: 0 10 0 10; - border: none; - border-radius: 3.0px; - qproperty-icon: url(:/common/image/play_all.svg); + border-radius: 4px; + color: white; + background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0.0000 rgba(255, 255, 255, 0.20), stop: 1.0000 rgba(255, 255, 255, 0.20)); + border: 0px solid rgba(29, 129, 255, 0.5); } -#MusicListPlayAll:hover { - border: 0px solid rgba(0, 0, 0, 0.2); - background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(255, 255, 255, 20%), stop: 1 rgba(255, 255, 255, 20%)); +#MusicListWidgetAdd:hover { + color: white; + background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0.0000 rgba(255, 255, 255, 0.30), stop: 1.0000 rgba(255, 255, 255, 0.30)); + border: 0px solid rgba(29, 129, 255, 0.3); } -#MusicListPlayAll:pressed { +#MusicListWidgetAdd:pressed { color: #2ca7f8; - border: 0px solid rgba(255, 255, 255, 0.2); - background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(255, 255, 255, 10%), stop: 1 rgba(255, 255, 255, 10%)); -} \ No newline at end of file + background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0.0000 rgba(255, 255, 255, 0.10), stop: 1.0000 rgba(255, 255, 255, 0.10)); + border: 0px solid rgba(0, 0, 0, 0.08); +} + +#MusicListWidgetAdd:disabled { + color: rgba(255, 255, 255, 40%); + background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0.0000 rgba(255, 255, 255, 0.08), stop: 1.0000 rgba(255, 255, 255, 0.08)); + border: 0px solid rgba(29, 129, 255, 0.5); +} diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/dark/PlayItemStyleProxy.theme deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/dark/PlayItemStyleProxy.theme --- deepin-music-5.0.1+ds/src/music-player/resource/theme/dark/PlayItemStyleProxy.theme 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/dark/PlayItemStyleProxy.theme 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,10 @@ +#PlayItemStyleProxy { + qproperty-textColor: rgba(255, 255, 255, 70%); + qproperty-titleColor: white; + qproperty-highlightText: white; + qproperty-background: #1c1c1c; + qproperty-alternateBackground: #202020; + qproperty-highlightedBackground: #2ca7f8; + qproperty-playingIcon: ":/common/image/playing_active.svg"; + qproperty-highlightPlayingIcon: ":/common/image/playing_active.svg"; +} diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/dark/PlayListSort.theme deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/dark/PlayListSort.theme --- deepin-music-5.0.1+ds/src/music-player/resource/theme/dark/PlayListSort.theme 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/dark/PlayListSort.theme 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,140 @@ +Dtk--Widget--DComboBox { + border: 1px solid; + border-color: black; + border-radius: 4px; + padding: 1px 1px 1px 4px; + color: #b4b4b4; + font-size: 12px; + qproperty-insensitiveTickImg: url(:/images/dark/images/tick_insensitive.svg); + qproperty-hoverTickImg: url(:/images/dark/images/tick_hover.svg); + qproperty-normalTickImg: url(:/images/dark/images/tick_hover.svg); + background-color: rgba(255, 255, 255, 26); + /*use as outside border*/ +} + +Dtk--Widget--DComboBox:!editable, +DComboBox::drop-down:editable { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #272727, stop: 1.0 #191919); + /*combobox-popup: 0;*/ +} + + +/* DComboBox gets the "on" state when the popup is open */ + +Dtk--Widget--DComboBox:!editable:on, +DComboBox::drop-down:editable:on { + background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #181818, stop: 1.0 #282828); +} + +QAbstractItemView#DComboBoxItemView { + selection-background-color: rgba(0, 0, 0, 0.4); + background: transparent; + margin: 0; + font-size: 12px; +} + +QComboBoxPrivateContainer { + border: 1px solid black; + background-color: #191919; +} + +QAbstractItemView#DComboBoxItemView::item { + min-height: 24; + color: #b4b4b4; +} + +Dtk--Widget--DComboBox::drop-down { + subcontrol-origin: padding; + subcontrol-position: center right; + width: 16px; + margin-right: 3; + border-top-right-radius: 4px; + /* same radius as the DComboBox */ + border-bottom-right-radius: 4px; +} + +Dtk--Widget--DComboBox::down-arrow { + image: url(:/images/dark/images/arrow_down_normal.svg); +} + +Dtk--Widget--DComboBox::down-arrow:hover { + image: url(:/images/dark/images/arrow_down_hover.svg); +} + +QAbstractItemView Dtk--Widget--DComboBoxItem { + color: #b4b4b4; + font-size: 12px; + margin-left: 24; + margin-bottom: 3; +} + +QAbstractItemView Dtk--Widget--DComboBoxItem[hovered="true"] { + color: white; +} + +QAbstractItemView Dtk--Widget--DComboBoxItem[checked="true"] { + color: #01BDFF; +} + +#DComboBoxTitleMask { + color: #b4b4b4; + padding-left: 10px; +} + +QFrame#DComboxInsideFrame { + background-color: transparent; + /* + border-top-width: 1px; + border-style: solid; + border-radius: 3; + border-top-color: rgba(255, 255, 255, 26); + */ + border: 1px solid; + border-radius: 4px; + border-top-color: rgba(255, 255, 255, 26); + border-left-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgba(255, 255, 255, 26), stop: 1.0 rgba(255, 255, 255, 5)); + border-right-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgba(255, 255, 255, 26), stop: 1.0 rgba(255, 255, 255, 5)); + border-bottom-color: rgba(255, 255, 255, 5); +} + +QFrame#ComboboxPopupTopEnd { + border-bottom: 1px solid #222; + border-top-left-radius: 4; + border-top-right-radius: 4; + background: transparent url(:/images/dark/images/combobox_up_arrow.svg); + background-repeat: no-repeat; + background-position: center; +} + +QFrame#ComboboxPopupBottomEnd { + border-top: 1px solid #222; + border-bottom-left-radius: 4; + border-bottom-right-radius: 4; + background: transparent url(:/images/dark/images/combobox_down_arrow.svg); + background-repeat: no-repeat; + background-position: center; +} + +Dtk--Widget--DComboBox:editable { + border: 2px solid transparent; + border-bottom: 1px solid #15FFFFFF; + padding: 0px 0px 1px 0px; + min-height: 21px; + background-color: rgba(255, 255, 255, 26); +} + +QLineEdit { + background: transparent; + border-right: 1px solid rgba(255, 255, 255, 50); + margin-right: 4px; +} + +Dtk--Widget--DComboBox[editable="true"] QFrame#DComboxInsideFrame { + /*outside frame*/ + background-color: rgba(0, 0, 0, 50); + border: 1px solid black; +} + +Dtk--Widget--DComboBox[alert="true"] QFrame#DComboxInsideFrame { + border-color: #FF8F00; +} \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/dark/PlayListView.theme deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/dark/PlayListView.theme --- deepin-music-5.0.1+ds/src/music-player/resource/theme/dark/PlayListView.theme 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/dark/PlayListView.theme 2020-07-14 12:05:00.000000000 +0000 @@ -1,23 +1,15 @@ -#PlayListView { - color: #009aff; - background-color: rgba(255, 255, 255, 0.0); - show-decoration-selected: 1; - selection-color: red; - selection-background-color: rgba(42, 166, 248, 0.2); - outline: none; -} +/* !!!! WARNING !!!!*/ -#PlayListView::item { - color: #009aff; - height: 56; -} -#PlayListView::item:selected:!active { - color: white; - background-color: qlineargradient(x1: 0 y1: 0, x2: 1 y2: 0, stop: 0 #2aa6f8, stop: 0.015 #2aa6f8, stop: 0.0155 rgba(42, 166, 248, 20%), stop: 1 rgba(42, 166, 248, 20%)); +/* modify MusicItem.theme for color */ + +#PlayListView { + border: 0px solid red; + margin: 0 0 0 0; + outline: none; + background: #202020; } -#PlayListView::item:selected:active { - color: white; - background-color: qlineargradient(x1: 0 y1: 0, x2: 1 y2: 0, stop: 0 #2aa6f8, stop: 0.015 #2aa6f8, stop: 0.0155 rgba(42, 166, 248, 20%), stop: 1 rgba(42, 166, 248, 20%)); -} \ No newline at end of file +/* #PlayListView::item { + height: 36px; +}*/ diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/dark/PlayListWidget.theme deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/dark/PlayListWidget.theme --- deepin-music-5.0.1+ds/src/music-player/resource/theme/dark/PlayListWidget.theme 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/dark/PlayListWidget.theme 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,34 @@ +#PlayListWidget { + border-radius: 4px; + background-color: rgba(32, 32, 32, 0); +} + +#PlayListActionBar { + background-color: rgba(32, 32, 32, 1); +} + +#PlayListEmptyHits { + font-size: 24px; + color: #d0d0d0; + qproperty-alignment: AlignCenter; + background-color: rgba(32, 32, 32, 1); +} + +#PlayListPlayAll { + font-size: 12px; + padding: 0 10 0 10; + border: none; + border-radius: 3.0px; + qproperty-icon: url(:/common/image/play_all.svg); +} + +#PlayListPlayAll:hover { + border: 0px solid rgba(0, 0, 0, 0.2); + background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(255, 255, 255, 20%), stop: 1 rgba(255, 255, 255, 20%)); +} + +#PlayListPlayAll:pressed { + color: #2ca7f8; + border: 0px solid rgba(255, 255, 255, 0.2); + background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(255, 255, 255, 10%), stop: 1 rgba(255, 255, 255, 10%)); +} diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/dark/TitlebarWidget.theme deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/dark/TitlebarWidget.theme --- deepin-music-5.0.1+ds/src/music-player/resource/theme/dark/TitlebarWidget.theme 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/dark/TitlebarWidget.theme 2020-07-14 12:05:00.000000000 +0000 @@ -9,7 +9,3 @@ #TitleBack:pressed { border-image: url(:/dark/image/back_press.svg); } - -#TitleIcon { - image: url(:/common/image/app_icon.svg) -} \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/light/image/album_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/light/image/album_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/theme/light/image/album_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/light/image/album_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,18 @@ + + + + album_hover + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/light/image/singer_hover.svg deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/light/image/singer_hover.svg --- deepin-music-5.0.1+ds/src/music-player/resource/theme/light/image/singer_hover.svg 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/light/image/singer_hover.svg 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,16 @@ + + + + singer_hover + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/light/MusicListItem.theme deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/light/MusicListItem.theme --- deepin-music-5.0.1+ds/src/music-player/resource/theme/light/MusicListItem.theme 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/light/MusicListItem.theme 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,48 @@ +#MusicListItem { + qproperty-playingIcon: ":/common/animation/playing/blue"; + qproperty-highlightPlayingIcon: ":/common/animation/playing/blue"; +} + +#MusicListIcon { + image: url(:/light/image/playlist.svg); +} + +#MusicListIcon[iconName="album"] { + image: url(:/light/image/album_hover.svg); +} + +#MusicListIcon[iconName="artist"] { + image: url(:/light/image/singer_hover.svg); +} + +#MusicListIcon[iconName="all"] { + image: url(:/light/image/playlist_allmusic.svg); +} + +#MusicListIcon[iconName="fav"] { + image: url(:/light/image/playlist_fav.svg); +} + +#MusicListInterFrame { + border: none; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); +} + +#MusicListTitle { + color: black; + font-size: 12px; + background: transparent; + border: none; + qproperty-alignment: AlignLeft; +} + +#MusicListTitle[status="active"] { + color: #009aff; +} + +#MusicListTitle:focus[status="active"] { + color: black; + background-color: white; + border-radius: 4.0px; + border: 1px solid rgba(0, 0, 0, 0.08); +} diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/light/MusicListView.theme deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/light/MusicListView.theme --- deepin-music-5.0.1+ds/src/music-player/resource/theme/light/MusicListView.theme 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/light/MusicListView.theme 2020-07-14 12:05:00.000000000 +0000 @@ -1,10 +1,21 @@ -MusicListView { - border: 0px solid red; - margin: 0 0 0 0; +#MusicListView { + color: #009aff; + border: 0px solid rgba(255, 0, 0, 0.7); + background-color: rgba(255, 255, 255, 0.0); outline: none; - background-color: rgba(255, 255, 255, 1); } -MusicListView::item { - height: 36px; +#MusicListView::item { + color: #009aff; + height: 56px; +} + +#MusicListView::item:selected:!active { + color: white; + background-color: qlineargradient(x1: 0 y1: 0, x2: 1 y2: 0, stop: 0 #2aa6f8, stop: 0.015 #2aa6f8, stop: 0.0155 rgba(42, 166, 248, 20%), stop: 1 rgba(42, 166, 248, 20%)); +} + +#MusicListView::item:selected:active { + color: white; + background-color: qlineargradient(x1: 0 y1: 0, x2: 1 y2: 0, stop: 0 #2aa6f8, stop: 0.015 #2aa6f8, stop: 0.0155 rgba(42, 166, 248, 20%), stop: 1 rgba(42, 166, 248, 20%)); } diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/light/MusicListWidget.theme deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/light/MusicListWidget.theme --- deepin-music-5.0.1+ds/src/music-player/resource/theme/light/MusicListWidget.theme 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/light/MusicListWidget.theme 2020-07-14 12:05:00.000000000 +0000 @@ -1,34 +1,36 @@ #MusicListWidget { - border-radius: 4px; - background-color: rgba(255, 255, 255, 0); + border: 1px solid rgba(0, 0, 0, 10%); + border-top: none; + background-color: rgba(255, 255, 255, 0.9); } -#MusicListActionBar { - background-color: rgba(255, 255, 255, 1); +#MusicListWidgetAddFrame { + border-radius: 5px; + border-bottom: 1px solid rgba(0, 0, 0, 0.02); } -#MusicListEmptyHits { - font-size: 24px; - color: #d0d0d0; - qproperty-alignment: AlignCenter; - background-color: rgba(255, 255, 255, 1); +#MusicListWidgetAdd { + color: black; + font-size: 12px; + border-radius: 4px; + background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(255, 255, 255, 0.6), stop: 0.05556 rgba(255, 255, 255, 0.6), stop: 0.05600 rgba(255, 255, 255, 1), stop: 1 rgba(253, 253, 253, 1)); + border: 1px solid rgba(0, 0, 0, 0.08); } -#MusicListPlayAll { - font-size: 12px; - padding: 0 10 0 10; - border: none; - border-radius: 4.0px; - qproperty-icon: url(:/common/image/play_all.svg); +#MusicListWidgetAdd:hover { + color: white; + background-color: qlineargradient( x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 #6ec9ff, stop: 1 #2da9f6); + border: 1px solid rgba(29, 129, 255, 0.5); } -#MusicListPlayAll:hover { - border: 1px solid rgba(0, 0, 0, 0.08); - background: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(255, 255, 255, 40%), stop: 1 rgba(255, 255, 255, 20%)); +#MusicListWidgetAdd:pressed { + color: white; + background-color: qlineargradient( x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 #0b8cff, stop: 1 #0aa1ff); + border: 1px solid rgba(29, 129, 255, 0.3); } -#MusicListPlayAll:pressed { - color: #2ca7f8; - border: 1px solid rgba(0, 0, 0, 8%); - background: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(255, 255, 255, 80%), stop: 1 rgba(255, 255, 255, 60%)); +#MusicListWidgetAdd:disabled { + color: grey; + background-color: qlineargradient( x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 #ffffff, stop: 1 #fdfdfd); + border: 1px solid rgba(0, 0, 0, 0.08); } diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/light/PlayItemStyleProxy.theme deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/light/PlayItemStyleProxy.theme --- deepin-music-5.0.1+ds/src/music-player/resource/theme/light/PlayItemStyleProxy.theme 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/light/PlayItemStyleProxy.theme 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,10 @@ +#PlayItemStyleProxy { + qproperty-textColor: rgba(127, 127, 127, 100%); + qproperty-titleColor: rgba(41, 41, 41, 100%); + qproperty-highlightText: white; + qproperty-background: #fbfbfb; + qproperty-alternateBackground: #ffffff; + qproperty-highlightedBackground: #2ca7f8; + qproperty-playingIcon: ":/common/image/playing_normal.svg"; + qproperty-highlightPlayingIcon: ":/common/image/playing_active.svg"; +} diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/light/PlayListView.theme deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/light/PlayListView.theme --- deepin-music-5.0.1+ds/src/music-player/resource/theme/light/PlayListView.theme 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/light/PlayListView.theme 2020-07-14 12:05:00.000000000 +0000 @@ -1,21 +1,10 @@ -#PlayListView { - color: #009aff; - border: 0px solid rgba(255, 0, 0, 0.7); - background-color: rgba(255, 255, 255, 0.0); +PlayListView { + border: 0px solid red; + margin: 0 0 0 0; outline: none; + background-color: rgba(255, 255, 255, 1); } -#PlayListView::item { - color: #009aff; - height: 56px; -} - -#PlayListView::item:selected:!active { - color: white; - background-color: qlineargradient(x1: 0 y1: 0, x2: 1 y2: 0, stop: 0 #2aa6f8, stop: 0.015 #2aa6f8, stop: 0.0155 rgba(42, 166, 248, 20%), stop: 1 rgba(42, 166, 248, 20%)); -} - -#PlayListView::item:selected:active { - color: white; - background-color: qlineargradient(x1: 0 y1: 0, x2: 1 y2: 0, stop: 0 #2aa6f8, stop: 0.015 #2aa6f8, stop: 0.0155 rgba(42, 166, 248, 20%), stop: 1 rgba(42, 166, 248, 20%)); -} \ No newline at end of file +/*PlayListView::item { + height: 36px; +}*/ diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/light/PlayListWidget.theme deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/light/PlayListWidget.theme --- deepin-music-5.0.1+ds/src/music-player/resource/theme/light/PlayListWidget.theme 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/light/PlayListWidget.theme 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,34 @@ +#PlayListWidget { + border-radius: 4px; + background-color: rgba(255, 255, 255, 0); +} + +#PlayListActionBar { + background-color: rgba(255, 255, 255, 1); +} + +#PlayListEmptyHits { + font-size: 24px; + color: #d0d0d0; + qproperty-alignment: AlignCenter; + background-color: rgba(255, 255, 255, 1); +} + +#PlayListPlayAll { + font-size: 12px; + padding: 0 10 0 10; + border: none; + border-radius: 4.0px; + qproperty-icon: url(:/common/image/play_all.svg); +} + +#PlayListPlayAll:hover { + border: 1px solid rgba(0, 0, 0, 0.08); + background: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(255, 255, 255, 40%), stop: 1 rgba(255, 255, 255, 20%)); +} + +#PlayListPlayAll:pressed { + color: #2ca7f8; + border: 1px solid rgba(0, 0, 0, 8%); + background: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(255, 255, 255, 80%), stop: 1 rgba(255, 255, 255, 60%)); +} diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/light/TitlebarWidget.theme deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/light/TitlebarWidget.theme --- deepin-music-5.0.1+ds/src/music-player/resource/theme/light/TitlebarWidget.theme 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/light/TitlebarWidget.theme 2020-07-14 12:05:00.000000000 +0000 @@ -14,7 +14,3 @@ #TitleBack:pressed { border-image: url(:/light/image/back_press.svg); } - -#TitleIcon { - image: url(:/common/image/app_icon.svg) -} \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/resource/theme/theme.qrc deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/theme.qrc --- deepin-music-5.0.1+ds/src/music-player/resource/theme/theme.qrc 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/resource/theme/theme.qrc 2020-07-14 12:05:00.000000000 +0000 @@ -132,28 +132,6 @@ dark/image/suggest_button_hover.svg dark/image/suggest_button_normal.svg dark/image/suggest_button_press.svg - dark/CloseConfirmDialog.theme - dark/DDropdown.theme - dark/DSettingsDialog.theme - dark/Footer.theme - dark/ImportWidget.theme - dark/InfoDialog.theme - dark/LoadWidget.theme - dark/LyricWidget.theme - dark/MainFrame.theme - dark/MusicListSort.theme - dark/MusicListView.theme - dark/MusicListWidget.theme - dark/PlayListItem.theme - dark/PlayListView.theme - dark/PlaylistWidget.theme - dark/SearchEdit.theme - dark/SearchMetaItem.theme - dark/SearchMetaList.theme - dark/SearchResult.theme - dark/SoundVolume.theme - dark/Titlebar.theme - dark/TitlebarWidget.theme light/image/back_hover.svg light/image/back_normal.svg light/image/back_press.svg @@ -169,31 +147,17 @@ light/image/suggest_button_hover.svg light/image/suggest_button_normal.svg light/image/suggest_button_press.svg - light/CloseConfirmDialog.theme - light/DDropdown.theme - light/Footer.theme - light/ImportWidget.theme - light/InfoDialog.theme - light/LoadWidget.theme - light/LyricWidget.theme - light/MainFrame.theme - light/MusicListView.theme - light/MusicListWidget.theme - light/PlayListItem.theme - light/PlayListView.theme - light/PlaylistWidget.theme - light/SearchEdit.theme - light/SearchMetaItem.theme - light/SearchMetaList.theme - light/SearchResult.theme - light/SoundVolume.theme - light/Titlebar.theme - light/TitlebarWidget.theme - dark/LyricView.theme - light/LyricView.theme - dark/MusicItemStyleProxy.theme - light/MusicItemStyleProxy.theme - light/Slider.theme - dark/Slider.theme + dark/image/singer_normal.svg + dark/image/album_normal.svg + light/image/singer_hover.svg + light/image/album_hover.svg + common/image/picturelist_hover.svg + common/image/textlist_press.svg + common/image/textlist_hover.svg + common/image/picturelist_press.svg + common/image/textlist_normal.svg + common/image/picturelist_normal.svg + common/image/notify_fail_new.svg + common/image/notify_success_new.svg diff -Nru deepin-music-5.0.1+ds/src/music-player/speech/exportedinterface.cpp deepin-music-6.0.1.54+ds.1/src/music-player/speech/exportedinterface.cpp --- deepin-music-5.0.1+ds/src/music-player/speech/exportedinterface.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/speech/exportedinterface.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,73 @@ +#include "exportedinterface.h" +#include +#include +#include +#include +#include +#include +#include "../mainframe.h" + +#include "speechCenter.h" + +ExportedInterface::ExportedInterface(QObject *parent): Dtk::Core::DUtil::DExportedInterface(parent) +{ + m_object = parent; + m_SpeechCenter = SpeechCenter::getInstance(); +} + +QVariant ExportedInterface::invoke(const QString &action, const QString ¶meters)const +{ + //解析参数 + ACTION actionInt = ACTION(action.toInt()); + QString param1; + QString param2; + + QJsonParseError json_error; + QJsonDocument jsonDoc(QJsonDocument::fromJson(parameters.toLocal8Bit(), &json_error)); + + if (json_error.error != QJsonParseError::NoError) { + return false; + } + QJsonObject rootObj = jsonDoc.object(); + if (rootObj.contains("param1")) { + param1 = rootObj.value("param1").toString(); + } + if (rootObj.contains("param2")) { + param2 = rootObj.value("param2").toString(); + } + qDebug() << "-----get ExportedInterface::invoke param1:" << param1; + qDebug() << "-----get ExportedInterface::invoke param2:" << param2; + + //分发语音信号 + switch (actionInt) { + case ACTION::playMusic: + return QVariant(m_SpeechCenter->playMusic(param1)); + case ACTION::playArtist: + return QVariant(m_SpeechCenter->playArtist(param1)); + case ACTION::playArtistMusic: + return QVariant(m_SpeechCenter->playArtistMusic(param1, param2)); + case ACTION::playFaverite: + return QVariant(m_SpeechCenter->playFaverite()); + case ACTION::playCustom: + return QVariant(m_SpeechCenter->playCustom(param1)); + case ACTION::playRadom: + return QVariant(m_SpeechCenter->playRadom()); + case ACTION::pause: + return QVariant(m_SpeechCenter->pause()); + case ACTION::stop: + return QVariant(m_SpeechCenter->stop()); + case ACTION::resume: + return QVariant(m_SpeechCenter->resume()); + case ACTION::previous: + return QVariant(m_SpeechCenter->previous()); + case ACTION::next: + return QVariant(m_SpeechCenter->next()); + case ACTION::favorite: + return QVariant(m_SpeechCenter->favorite()); + case ACTION::unFavorite: + return QVariant(m_SpeechCenter->unFaverite()); + case ACTION::setMode: + return QVariant(m_SpeechCenter->setMode(param1.toInt())); + } + return QVariant(true); +} diff -Nru deepin-music-5.0.1+ds/src/music-player/speech/exportedinterface.h deepin-music-6.0.1.54+ds.1/src/music-player/speech/exportedinterface.h --- deepin-music-5.0.1+ds/src/music-player/speech/exportedinterface.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/speech/exportedinterface.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,40 @@ +#ifndef EXPORTEDINTERFACE_H +#define EXPORTEDINTERFACE_H + +#include +#include +DCORE_USE_NAMESPACE + +//定义action +enum class ACTION { + playMusic = 1, //播放歌曲名 + playArtist = 2, //播放歌手列表 + playArtistMusic = 3, //播放歌手歌曲名 + playFaverite = 4, //播放我的收藏 + playCustom = 5, //播放歌单 + playRadom = 6, //随机播放 + + pause = 11, //暂停 + stop = 12, //停止 + resume = 13, //继续播放 + previous = 14, //上一首 + next = 15, //下一首 + + favorite = 21, //收藏 + unFavorite = 22, //取消收藏 + setMode = 23 //播放模式 +}; + +class SpeechCenter; +class ExportedInterface : public Dtk::Core::DUtil::DExportedInterface +{ +// Q_Ob +public: + explicit ExportedInterface(QObject *parent = nullptr); + QVariant invoke(const QString &action, const QString ¶meters) const; +private: + QObject *m_object; + SpeechCenter *m_SpeechCenter; +}; + +#endif // EXPORTEDINTERFACE_H diff -Nru deepin-music-5.0.1+ds/src/music-player/speech/speechCenter.cpp deepin-music-6.0.1.54+ds.1/src/music-player/speech/speechCenter.cpp --- deepin-music-5.0.1+ds/src/music-player/speech/speechCenter.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/speech/speechCenter.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,146 @@ +#include "speechCenter.h" +#include "exportedinterface.h" +#include +//播放模式定义 +enum class PLAYMODE { + loop = 1, //循环播放 + single = 2, //单曲循环 + radom = 3 //随机播放 +}; + +SpeechCenter *SpeechCenter::getInstance() +{ + static SpeechCenter mInstance; + return &mInstance; +} + +SpeechCenter::SpeechCenter(QObject *parent) : QObject(parent) +{ + +} + +bool SpeechCenter::playMusic(QString music) +{ + qDebug() << "-----playMusic:" << music; + Q_EMIT sigPlayMusic(music); + return playMusicResult; +} + +bool SpeechCenter::playArtist(QString artist) +{ + qDebug() << "-----playArtist:" << artist; + Q_EMIT sigPlayArtist(artist); + return playArtistResult; +} + +bool SpeechCenter::playArtistMusic(QString artist, QString music) +{ + qDebug() << "-----playArtistMusic artist:" << artist << "Music:" << music; + Q_EMIT sigPlayArtistMusic(artist, music); + return playArtistMusicResult; +} + +bool SpeechCenter::playFaverite() +{ + qDebug() << "-----playFaverite"; + Q_EMIT sigPlayFaverite(); + return playFaveriteResult; +} + +bool SpeechCenter::playCustom(QString listName) +{ + qDebug() << "-----playCustom:" << listName; + Q_EMIT sigPlayCustom(listName); + return playCustomResult; +} + +bool SpeechCenter::playRadom() +{ + qDebug() << "-----playRadom:"; + Q_EMIT sigPlayRadom(); + return playRadomResult; +} + +bool SpeechCenter::pause() +{ + qDebug() << "-----pause:"; + Q_EMIT sigPause(); + return true; +} + +bool SpeechCenter::stop() +{ + qDebug() << "-----stop:"; + Q_EMIT sigStop(); + return true; +} + +bool SpeechCenter::resume() +{ + qDebug() << "-----resume:"; + Q_EMIT sigResume(); + return true; +} + +bool SpeechCenter::previous() +{ + qDebug() << "-----previous:"; + Q_EMIT sigPrevious(); + return true; +} + +bool SpeechCenter::next() +{ + qDebug() << "-----next:"; + Q_EMIT sigNext(); + return true; +} + +bool SpeechCenter::favorite() +{ + qDebug() << "-----set favorite:"; + Q_EMIT sigFavorite(); + return true; +} + +bool SpeechCenter::unFaverite() +{ + qDebug() << "-----set unFaverite:"; + Q_EMIT unFaverite(); + return true; +} + +bool SpeechCenter::setMode(int mode) +{ + qDebug() << "-----setMode:" << mode; + Q_EMIT sigSetMode(mode); + return true; +} + +void SpeechCenter::onSpeedResult(int action, bool result) +{ + qDebug() << "-----onSpeedResult action" << action << "result" << result; + ACTION mAction = ACTION(action); + switch (mAction) { + case ACTION::playMusic: + playMusicResult = result; + break; + case ACTION::playArtist: + playArtistResult = result; + break; + case ACTION::playArtistMusic: + playArtistMusicResult = result; + break; + case ACTION::playFaverite: + playFaveriteResult = result; + break; + case ACTION::playCustom: + playCustomResult = result; + break; + case ACTION::playRadom: + playRadomResult = result; + break; + default: + break; + } +} diff -Nru deepin-music-5.0.1+ds/src/music-player/speech/speechCenter.h deepin-music-6.0.1.54+ds.1/src/music-player/speech/speechCenter.h --- deepin-music-5.0.1+ds/src/music-player/speech/speechCenter.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/speech/speechCenter.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,60 @@ +#ifndef SPEECHCENTER_H +#define SPEECHCENTER_H + +#include + +class SpeechCenter : public QObject +{ + Q_OBJECT +public: + static SpeechCenter *getInstance(); +public: + bool playMusic(QString music); + bool playArtist(QString artist); + bool playArtistMusic(QString artist, QString music); + bool playFaverite(); + bool playCustom(QString listName); + bool playRadom(); + + bool pause(); + bool stop(); + bool resume(); + bool previous(); + bool next(); + + bool favorite(); + bool unFaverite(); + bool setMode(int mode); + +signals: + void sigPlayMusic(QString music); + void sigPlayArtist(QString artist); + void sigPlayArtistMusic(QString artist, QString music); + void sigPlayFaverite(); + void sigPlayCustom(QString listName); + void sigPlayRadom(); + + void sigPause(); + void sigStop(); + void sigResume(); + void sigPrevious(); + void sigNext(); + + void sigFavorite(); + void sigUnFaverite(); + void sigSetMode(int mode); +public slots: + void onSpeedResult(int action, bool result); +private: + SpeechCenter(QObject *parent = nullptr); + +private: + bool playMusicResult = true; + bool playArtistResult = true; + bool playArtistMusicResult = true; + bool playFaveriteResult = true; + bool playCustomResult = true; + bool playRadomResult = true; +}; + +#endif // SPEECHCENTER_H diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_af.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_af.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_af.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_af.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,181 +1,334 @@ - + + + CloseConfirmDialog - + Please select your operation - + - + Exit - + - + Minimize to system tray - + - + Do not ask again - + - + Cancel Kanselleer - + + Confirm + + + OK - OK + OK + + + + DequalizerDialog + + + Custom + Verspersoonlik + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Footer - + Previous Vorige - + Next Volgende - + Play/Pause Speel/Pouse - + Favorite - + - + Lyrics - + + + + + Play Queue + - + Unknown Title - + - - - + + + Unknown artist - + - + Play Mode - - - - - Playlist - + - + List Loop - + - + Single Loop - + - + Shuffle - + ImportWidget - - Add folder - + + Open Folder + - - + + Add Music + + + + + Scan - + - - - %1 music directory or drag & drop music file to add music - + + + %1 music directory or drag music files here + - + Loading music, please wait... - + InfoDialog - + Title: - + - + Artist: - + - + Album: - + - + Type: Tipe: - + Path: - + - + Unknown artist - + - + Unknown album - + - + Size: Groote: - + + Basic info + + + + Duration: - + LoadWidget - + Loading... - + @@ -183,365 +336,788 @@ Find lyrics - + Title - + Artist - + Search - + - + Back - + - MainFrame + MUsicLyricWidget - - New playlist - + + No lyrics yet + + + + MainFrame - + Settings - + - - + + Exit - + - - Add folder - - - - - Add file - - - - + Dark theme - + - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + + Equalizer + - + Play/Pause Speel/Pouse - + Previous Vorige - - Invalid or non-existent file - + + All music + - - Failed to import, no vaild music file found! - + + + OK + OK - - All music - + + Add playlist + - - - OK - OK + + Add music + - + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" - + + + + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + - + Next Volgende - MusicListView + MusicListDataDelegate - - New playlist - + + + No songs + - - Play - + + + 1 song + - - Add to playlist - + + + %1 songs + + + + MusicListDataWidget - - Display in file manager - + + + + + + + + + + + No songs + - - Song info - + + + 1 album - 1 song + - - Are you sure you want to delete %1? - + + + + + %1 album - %2 songs + - - - Are you sure you want to delete the selected %1 songs? - + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + + + + + + + + + + Time added + + + + + + + + Album + + + + + + + + Artist + - + + + Title + + + + + Play All + + + + + Artists + + + + + Albums + + + + + Custom + Verspersoonlik + + + + + + Search Results + + + + + Songs + + + + + No result found + + + + + MusicListDialog + + + Play All + + + + + Shuffle + + + + + MusicListInfoView + + + Play queue + + + + + Add to new playlist + + + + + Pause + + + + + Play + + + + + Add to playlist + + + + + Display in file manager + + + + Remove from playlist - + - + Delete from local disk - + - - Encoding - + + Song info + - + + Cancel - Kanselleer + Kanselleer - + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + Delete - Verwyder + Verwyder - - Deleting the current song will also delete the song files contained - + + Are you sure you want to delete %1? + - - Unknown artist - + + + Are you sure you want to delete the selected %1 songs? + - - Unknown album - + + + The song files contained will also be deleted + - MusicListWidget + MusicListItem - - No Music - + + Are you sure you want to delete this playlist? + - - No result found - + + Cancel + Kanselleer - - Play All - + + Delete + Verwyder + + + MusicListScrollArea - - Time added - + + Library + - - Title - + + Playlists + + + + + MusicListView + + + + Play + - - Artist - + + + Are you sure you want to delete this playlist? + - - Album name - + + My Favorites + - - Custom - Verspersoonlik + + + Cancel + Kanselleer + + + + + + + Delete + Verwyder + + + + + Pause + + + + + + Rename + - PlayListItem + MusicListWidget - - Are you sure you want to delete this playlist? - + Custom + Verspersoonlik + + + PlayListItem - Delete - Verwyder + Verwyder - Cancel - Kanselleer + Kanselleer PlayListView - - + + Play queue + + + + + My favorites + + + + + Add to new playlist + + + + + Pause + + + + + Play - + - - - Rename - + + musicResult + + + + + Add to playlist + + + + + Display in file manager + + + + + Remove from play queue + + + + + Delete from local disk + - - + + Encoding + + + + + Song info + + + + + + Cancel + Kanselleer + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + + Delete Verwyder + + + Unknown artist + + + + + Unknown album + + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + + + + + + + Unknown artist + + PlaylistManager - + New playlist - + + + + + + + Albums + - + + + + Artists + + + + + All Music - + - + My favorites - + - + Search result - + - - - PlaylistWidget - - New playlist - + + Play + + + + + Music + QApplication - - Deepin Music - + + Music + QObject - - Deepin Music - - - Minimize to system tray - + - Exit Deepin Music - + Exit Music + Autoplay - + Enable fade in/out - + Remember playback position - + Close Main Window - + Basic - + Play - + Shortcuts - + Restore Defaults - + @@ -570,20 +1146,150 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + + + + + Artist + + + + + Search + + + + SearchResult - - - Search "%1" in Deepin Music - + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + + + + + Songs + + + + + Playlists + + + + + Settings + + + + + Play/Pause + Speel/Pouse + + + + Previous + Vorige + + + + Next + Volgende + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + + + + + Unfavorite + + + + + Song info + + + + + New playlist + + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search - + - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_am_ET.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_am_ET.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_am_ET.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_am_ET.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,589 +0,0 @@ - - - CloseConfirmDialog - - - Please select your operation - እባክዎን የ እርስዎን ተግባር ይምረጡ - - - - Exit - መውጫ - - - - Minimize to system tray - ወደ ስርአቱ ትሪ ማሳነሻ - - - - Do not ask again - - - - - Cancel - መሰረዣ - - - - OK - እሺ - - - - Footer - - - Previous - ቀደም ያለው - - - - Next - ይቀጥሉ - - - - Play/Pause - ማጫወቻ/ማስቆሚያ - - - - Favorite - የምወዳቸው - - - - Lyrics - ግጥሞች - - - - Unknown Title - ያልታወቀ አርእስት - - - - - - Unknown artist - ያልታወቀ ከያኒ - - - - Play Mode - ማጫወቻ ዘዴ - - - - Playlist - የማጫወቻ ዝርዝር - - - - List Loop - ዝርዝር ዙር - - - - Single Loop - ነጠላ ዙር - - - - Shuffle - መበወዣ - - - - ImportWidget - - - Add folder - ፎልደር መጨመሪያ - - - - - Scan - ማሰሻ - - - - - %1 music directory or drag & drop music file to add music - %1 የ ሙዚቃ ዳይሬክቶሪ ወይንም መጎተቻ & መጣያ የ ሙዚቃ ፋይል ወደ ሙዚቃ ውስጥ ለ መጨመር - - - - Loading music, please wait... - እባክዎን ይቆዩ በ መጫን ላይ ነው... - - - - InfoDialog - - - Title: - አርእስት: - - - - Artist: - ከያኒ - - - - Album: - አልበም: - - - - Type: - አይነት: - - - - Path: - መንገድ: - - - - Unknown artist - ያልታወቀ ከያኒ - - - - Unknown album - ያልታወቀ አልበም - - - - Size: - መጠን: - - - - Duration: - የሚፈጀው ጊዜ - - - - LoadWidget - - - Loading... - በ መጫን ላይ... - - - - LyricWidget - - - Find lyrics - - - - - Title - አርእስት - - - - Artist - ከያኒ - - - - Search - መፈለጊያ - - - - Back - ወደ ኋላ - - - - MainFrame - - - New playlist - አዲስ የ ማጫወቻ ዝርዝር - - - - Settings - ማሰናጃዎች - - - - - Exit - መውጫ - - - - Add folder - ፎልደር መጨመሪያ - - - - Add file - ፋይል መጨመሪያ - - - - Dark theme - ጥቁር ገጽታ - - - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - - - - - Play/Pause - ማጫወቻ/ማስቆሚያ - - - - Previous - ቀደም ያለው - - - - Invalid or non-existent file - ዋጋ የሌለው ምንም ይልነበረ ፋይል - - - - Failed to import, no vaild music file found! - ማምጣት አልተቻለም: ምንም ዋጋ ያለው ፋይል አልተገኘም - - - - All music - ሁሉንም ሙዚቃ - - - - - OK - እሺ - - - - Successfully added to "%1" - ተሳክቶ ተጨምሯል ወደ "%1" - - - - Next - ይቀጥሉ - - - - MusicListView - - - New playlist - አዲስ የ ማጫወቻ ዝርዝር - - - - Play - ማጫወቻ - - - - Add to playlist - ወደ ዝርዝር ማጫወቻ መጨመሪያ - - - - Display in file manager - በ ፋይል አስተዳዳሪ እስጥ ማሳያ - - - - Song info - የ ዘፈን መረጃ - - - - Are you sure you want to delete %1? - - - - - - Are you sure you want to delete the selected %1 songs? - - - - - Remove from playlist - ከ ዝርዝር ማጫወቻ ማስወገጃ - - - - Delete from local disk - ከ አካባቢ ዲስክ ውስጥ ማጥፊያ - - - - Encoding - Encoding - - - - Cancel - መሰረዣ - - - - Delete - ማጥፊያ - - - - Deleting the current song will also delete the song files contained - የ አሁኑን ዘፈን ማጥፋት እንዲሁም የ ዘፈኑን ፋይሎች የ ያዙትን ያጠፋል - - - - Unknown artist - ያልታወቀ ከያኒ - - - - Unknown album - ያልታወቀ አልበም - - - - MusicListWidget - - - No Music - ሙዚቃ የለም - - - - No result found - ምንም ውጤት አልተገኘም - - - - Play All - ሁሉንም ማጫወቻ - - - - Time added - የ ተጨመረበት ጊዜ - - - - Title - አርእስት - - - - Artist - ከያኒ - - - - Album name - የ አልበም ስም - - - - Custom - ማስተካከያ - - - - PlayListItem - - - Are you sure you want to delete this playlist? - - - - - Delete - ማጥፊያ - - - - Cancel - መሰረዣ - - - - PlayListView - - - - Play - ማጫወቻ - - - - - Rename - እንደገና መሰየሚያ - - - - - Delete - ማጥፊያ - - - - PlaylistManager - - - New playlist - አዲስ የ ማጫወቻ ዝርዝር - - - - All Music - ሁሉንም ሙዚቃ - - - - My favorites - የምወዳቸው - - - - Search result - የ መፈለጊያ ውጤት - - - - PlaylistWidget - - - New playlist - አዲስ የ ማጫወቻ ዝርዝር - - - - QApplication - - - Deepin Music - ዲፕኢን ሙዚቃ - - - - QObject - - - Deepin Music - ዲፕኢን ሙዚቃ - - - - Minimize to system tray - ወደ ስርአቱ ትሪ ማሳነሻ - - - - Exit Deepin Music - ከ ዲፕኢን ሙዚቃ መውጫ - - - - Autoplay - በራሱ ማጫወቻ - - - - Enable fade in/out - - - - - Remember playback position - የ መልሶ ማጫወቻ ቦታ አስታውስ - - - - Close Main Window - ዋናውን መስኮት መዝጊያ - - - - Basic - መሰረታዊ - - - - Play - ማጫወቻ - - - - Shortcuts - አቋራጭ - - - - Restore Defaults - ነባር እንደ ነበር መመለሻ - - - - Next - ይቀጥሉ - - - - Play/Pause - ማጫወቻ/ማስቆሚያ - - - - Previous - ቀደም ያለው - - - - Volume down - መጠን መቀነሻ - - - - Volume up - መጠን መጨመሪያ - - - - SearchResult - - - - Search "%1" in Deepin Music - መፈለጊያ "%1" በ ዲፕኢን ሙዚቃ ማጫወቻ ውስጥ - - - - TitlebarWidget - - - Search - መፈለጊያ - - - \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_am.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_am.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_am.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_am.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,533 +0,0 @@ - - - Footer - - - Previous - - - - - Next - - - - - Play/Pause - - - - - Favorite - - - - - Lyrics - - - - - Repeat Playlist - - - - - Repeat Song - - - - - Unknown Title - - - - - - - Unknown artist - - - - - Play Mode - - - - - Playlist - - - - - Shuffle - - - - - ImportWidget - - - Add Music - - - - - - Scan - - - - - - %1 music directory or drag & drop music file to add music - - - - - Loading music, please wait... - - - - - InfoDialog - - - Title: - - - - - Artist: - - - - - Album: - - - - - Type: - - - - - Path: - - - - - Size: - - - - - Duration: - - - - - Unkonw artist - - - - - Unkonw album - - - - - LyricWidget - - - Search lyrics - - - - - Title - - - - - Artist - - - - - Search - - - - - Back - - - - - MainFrame - - - New playlist - - - - - Add music - - - - - Add music file - - - - - Settings - - - - - Deep color mode - - - - - About - - - - - Deepin Music Player is a local music player with beautiful design and simple functions. It supports viewing lyrics when playing, playing lossless music and customize playlist, etc. - - - - - Exit - - - - - File invalid or does not exist, failed to load! - - - - - Failed to import, no vaild music file found! - - - - - OK - - - - - Deepin Music - የሙዚቃ ማጫወቻ - - - - Version: 3.0 - - - - - Help - - - - - Successfully added to "%1" - - - - - I got it - - - - - Music (%1) - - - - - MusicListView - - - New playlist - - - - - Play - - - - - Add to playlist - - - - - Display in file manager - - - - - Song info - - - - - Remove from playlist - - - - - Delete from local disk - - - - - Encoding - - - - - Cancel - - - - - Delete - - - - - Are you sure to delete %1? - - - - - - Are you sure to delete the selected %1 songs? - - - - - Deleting the current song will also delete the song files contained - - - - - Unknown artist - - - - - Unknown album - - - - - MusicListWidget - - - No Music - - - - - No result found - - - - - Play All - - - - - Time added - - - - - Title - - - - - Artist - - - - - Album name - - - - - Custom - - - - - PlayListItem - - - Delete - - - - - Are you sure to delete this playlist? - - - - - Cancel - - - - - PlayListView - - - - Play - - - - - - Rename - - - - - - Delete - - - - - PlaylistManager - - - New playlist - - - - - All Music - - - - - My favorites - - - - - Search result - - - - - PlaylistWidget - - - New playlist - - - - - QObject - - - Deepin Music - የሙዚቃ ማጫወቻ - - - - Autoplay - - - - - Enable fade - - - - - Resume play from last position - - - - - Basic settings - - - - - Play - - - - - Shortcuts - - - - - Restore to default - - - - - Next - - - - - Play/Pause - - - - - Previous - - - - - Volume down - - - - - Volume up - - - - - SearchResult - - - - Search "%1" in Deepin Music - - - - - TitleBarWidget - - - Search - - - - \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ar.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ar.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ar.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ar.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,237 @@ - + + + CloseConfirmDialog - - Please select your operation - الرجاء تحديد العملية - - - + Exit خروج - + Minimize to system tray تصغير إلى منطقة اﻹعلام - + Do not ask again - + عدم العرض مرة أخرى + + + + Please select your operation + الرجاء تحديد العملية - + Cancel إلغاء - - OK - موافق + + Confirm + تأكيد + + + + DequalizerDialog + + + Custom + مخصص + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + استعادة الافتراضيات Footer - + + Unknown Title + العنوان غير معروف + + + + + + Unknown artist + فنان غير معروف + + + Previous السابق - + Next التالي - + Play/Pause تشغيل/إيقاف مؤقت - + Favorite المفضلة - + Lyrics كلمات - - Unknown Title - العنوان غير معروف - - - - - - Unknown artist - فنان غير معروف - - - + Play Mode وضع التشغيل - - Playlist - قائمة التشغيل + + Play Queue + تشغيل المقاطع بالترتيب - + List Loop تكرار القائمة - + Single Loop تكرار مفرد - + Shuffle خلط @@ -100,24 +239,29 @@ ImportWidget - - Add folder - إضافة مجلد + + Open Folder + - - + + Add Music + إضافة موسيقى + + + + Scan فحص - - - %1 music directory or drag & drop music file to add music - %1 دليل موسيقى أو قم بسحب وإسقاط ملف لإضافته إلى الموسيقى + + + %1 music directory or drag music files here + %1 دليل للمقاطع الصوتية أو قم بسحب وإسقاط ملف لإضافته إلى تطبيق الموسيقى - + Loading music, please wait... تحميل الموسيقى ، يرجى الانتظار ... @@ -125,55 +269,60 @@ InfoDialog - + + Basic info + معلومات أساسية + + + Title: العنوان: - + Artist: الفنان: - + Album: الألبوم: - + Type: النوع: - + + Size: + الحجم: + + + + Duration: + المدة: + + + Path: المسار: - + Unknown artist فنان غير معروف - + Unknown album ألبوم غير معروف - - - Size: - الحجم: - - - - Duration: - المدة: - LoadWidget - + Loading... يتم التحميل... @@ -183,7 +332,7 @@ Find lyrics - + اعثر على الكلمات @@ -201,307 +350,716 @@ بحث - + Back العودة - MainFrame + MUsicLyricWidget - - New playlist - قائمة تشغيل جديدة + + No lyrics yet + + + + MainFrame - - Settings - إعدادات + + Add playlist + أضف قائمة تشغيل - - - Exit - خروج + + Add music + إضافة مقاطع صوتية - - Add folder - إضافة مجلد + + Equalizer + - - Add file - إضافة ملف + + Settings + إعدادات - + Dark theme سمة داكنة - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + + + Exit + خروج + + + + Music is a local music player with beautiful design and simple functions. + موسيقى: هو مشغّل مقاطع صوتية محلي مع تصميم جميل ووظائف بسيطة. + + + + + + + + Music + موسيقى - + Play/Pause تشغيل/إيقاف مؤقت - + Previous السابق - - Invalid or non-existent file - الملف غير صالح أو أنه غير موجود + + Next + التالي - - Failed to import, no vaild music file found! - تعذر الاستيراد ! إذ لم يتم العثور على ملف موسيقى صالح + + Successfully added to "%1" + تمت الاضافة بنجاح الى "%1" - - All music - كافة الموسيقى + + Already added to the playlist + تم إضافتة مسبقاً إلى قائمة التشغيل + + + + 1 song added + تم إضافة 1 مقطع صوتي - - + + %1 songs added + تم إضافة %1 مقاطع صوتية + + + + File is invalid or does not exist, load failed + فشل التحميل، الملف غير صالح أو غير موجود + + + + OK موافق - - Successfully added to "%1" - تمت الاضافة بنجاح الى "%1" + + Import failed, no valid music file found + فشل الاستيراد، لم يتم إيجاد مقطع صوتي صالح - - Next - التالي + + All music + كافة الموسيقى - MusicListView + MusicListDataDelegate - - New playlist - قائمة تشغيل جديدة + + + No songs + لا يوجد أي مقاطع صوتية + + + + + 1 song + 1 مقطع صوتي + + + + + %1 songs + %1 مقاطع صوتية + + + + MusicListDataWidget + + + + + + + + + + + + No songs + لا يوجد أي مقاطع صوتية + + + + + 1 album - 1 song + 1 إلبوم - 1 مقطع صوتي + + + + + + + %1 album - %2 songs + %1 إلبوم - %2 مقاطع صوتية + + + + + %1 albums - %2 songs + %1 إلبومات - %2 مقاطع صوتية + + + + + 1 artist - 1 song + 1 فنّان - 1 مقطع صوتي + + + + + %1 artist - %2 songs + %1 فنّان - %2 مقاطع صوتية + + + + + %1 artists - %2 songs + %1 فنّانين - %2 مقاطع صوتية + + + + + 1 song + 1 مقطع صوتي + + + + + + + %1 songs + %1 مقاطع صوتية + + + + + + + No search results + لا توجد نتائج للبحث + + + + + + All Music + كل المقاطع الصوتية - + + + + + + + Time added + وقت الاضافة + + + + + + + Album + الألبوم + + + + + + + Artist + فنان + + + + + Title + عنوان + + + + Play All + تشغيل الكل + + + + Artists + الفنّانين + + + + Albums + الإلبومات + + + + Custom + مخصص + + + + + + Search Results + + + + + Songs + المقاطع الصوتية + + + + No result found + لم يتم العثور على نتيجة + + + + MusicListDialog + + + Play All + تشغيل الكل + + + + Shuffle + خلط + + + + MusicListInfoView + + + Play queue + تشغيل المقاطع بالترتيب + + + + Add to new playlist + إضافة إلى قائمة تشغيل جديدة + + + + Pause + إيقاف مؤقت + + + Play تشغيل - + Add to playlist إضافة إلى قائمة التشغيل - + Display in file manager عرض في مدير الملفات - + + Remove from playlist + إزالة من قائمة التشغيل + + + + Delete from local disk + حذف من القرص المحلي + + + Song info معلومات الاغنية - + + + Cancel + إلغاء + + + + Remove + إزالة + + + + Are you sure you want to remove %1? + هل أنت متأكد من حذف %1؟ + + + + Are you sure you want to remove the selected %1 songs? + هل أنت متأكد من حذف المقاطع الصوتية الـ %1 المحددة؟ + + + + Delete + حذف + + + Are you sure you want to delete %1? - + هل أنت متأكد من حذف %1؟ - - + + Are you sure you want to delete the selected %1 songs? - + هل أنت متأكد من حذف الأغاني %1 المختارة؟ - - Remove from playlist - إزالة من قائمة التشغيل + + + The song files contained will also be deleted + سيتم أيضًا حذف المقاطع الصوتية الموجودة + + + MusicListItem - - Delete from local disk - حذف من القرص المحلي + + Are you sure you want to delete this playlist? + هل أنت متأكد من حذف هذه القائمة؟ - - Encoding - الترميز + + Cancel + إلغاء - + + Delete + حذف + + + + MusicListScrollArea + + + Library + المكتبة + + + + Playlists + قوائم التشغيل + + + + MusicListView + + + My Favorites + + + + + + Are you sure you want to delete this playlist? + هل أنت متأكد من حذف هذه القائمة؟ + + + + Cancel إلغاء - + + + + Delete حذف - - Deleting the current song will also delete the song files contained - سيؤدي حذف الأغنية الحالية أيضاً إلى حذف ملفات الأغاني المضمنة + + + Pause + إيقاف مؤقت + + + + + Play + تشغيل + + + + + Rename + إعادة تسمية + + + PlayListView - + Unknown artist - مؤدي غير معروف + فنان غير معروف - + Unknown album ألبوم غير معروف - - - MusicListWidget - - No Music - لا توجد موسيقى + + Play queue + تشغيل المقاطع بالترتيب - - No result found - لم يتم العثور على نتيجة + + musicResult + - - Play All - تشغيل الكل + + My favorites + مفضلتي - - Time added - وقت الاضافة + + Add to new playlist + إضافة إلى قائمة تشغيل جديدة - - Title - عنوان + + Pause + إيقاف مؤقت - - Artist - المؤدي + + + Play + تشغيل - - Album name - اسم الالبوم + + Add to playlist + إضافة إلى قائمة التشغيل - - Custom - مخصص + + Display in file manager + عرض في مدير الملفات - - - PlayListItem - - Are you sure you want to delete this playlist? - + Remove from playlist + إزالة من قائمة التشغيل - - Delete - حذف + + Remove from play queue + - + + Delete from local disk + حذف من القرص المحلي + + + + Encoding + الترميز + + + + Song info + معلومات الاغنية + + + + Cancel إلغاء - - - PlayListView - - - Play - تشغيل + + Remove + إزالة - - - Rename - إعادة تسمية + + Are you sure you want to remove %1? + هل أنت متأكد من حذف %1؟ - - + + Are you sure you want to remove the selected %1 songs? + هل أنت متأكد من حذف المقاطع الصوتية الـ %1 المحددة؟ + + + Delete حذف + + + Are you sure you want to delete %1? + هل أنت متأكد من حذف %1؟ + + + + + Are you sure you want to delete the selected %1 songs? + هل أنت متأكد من حذف الأغاني %1 المختارة؟ + + + + + The song files contained will also be deleted + سيتم أيضًا حذف المقاطع الصوتية الموجودة + + + + PlayListWidget + + + + No songs + لا يوجد أي مقاطع صوتية + + + + No search results + لا توجد نتائج للبحث + + + + Play Queue + تشغيل المقاطع بالترتيب + + + + Empty + فارغ + + + + 1 song + 1 مقطع صوتي + + + + %1 songs + %1 مقاطع صوتية + + + + Playlist + + + + Unknown album + ألبوم غير معروف + + + + + + Unknown artist + فنان غير معروف + PlaylistManager - + New playlist قائمة تشغيل جديدة - + + + + Albums + الإلبومات + + + + + + Artists + الفنّانين + + + + All Music كل الموسيقى - + My favorites مفضلتي - + Search result نتائج البحث - - - PlaylistWidget - - New playlist - قائمة تشغيل جديدة + + Play + تشغيل + + + + Music + موسيقى QApplication - - Deepin Music - موسيقى دييبن + + Music + موسيقى QObject - - Deepin Music - مشغل صوتيات ديبين - - Minimize to system tray تصغير إلى منطقة اﻹعلام - Exit Deepin Music - الخروج من موسيقى ديبين + Exit Music + الخروج من تطبيق الموسيقى @@ -511,7 +1069,7 @@ Enable fade in/out - + تفعيل تأثير دخول/خروج @@ -570,20 +1128,150 @@ + SearchLyricsWidget + + + Find Lyrics + اعثر على كلمات الأغاني + + + + Title + عنوان + + + + Artist + فنان + + + + Search + بحث + + + SearchResult - - - Search "%1" in Deepin Music - البحث عن "%1" في موسيقى ديبين + + Music + موسيقى + + + + Artists + الفنّانين + + + + Albums + الإلبومات + + + + Shortcut + + + Play + تشغيل + + + + Songs + المقاطع الصوتية + + + + Playlists + قوائم التشغيل + + + + Settings + الإعدادات + + + + Play/Pause + تشغيل/إيقاف مؤقت + + + + Previous + السابق + + + + Next + التالي + + + + Volume Up + رفع الصوت + + + + Volume Down + خفض الصوت + + + + Mute + صامت + + + + Favorite + المفضلة + + + + Unfavorite + غير المفضلة + + + + Song info + معلومات الاغنية + + + + New playlist + قائمة تشغيل جديدة + + + + Add music + إضافة مقاطع صوتية + + + + Rename playlist + إعادة تسمية قائمة التشغيل + + + + Remove from playlist + إزالة من قائمة التشغيل + + + + Help + مساعدة + + + + Display shortcuts + عرض الإختصارات TitlebarWidget - + Search بحث - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ast.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ast.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ast.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ast.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,245 @@ - + + + CloseConfirmDialog - + Please select your operation Esbilla la to operación, por favor - + Exit Colar - + Minimize to system tray Minimizar a la bandexa'l sistema - + Do not ask again - + - + Cancel Encaboxar - + + Confirm + + + OK - Aceutar + Aceutar + + + + DequalizerDialog + + + Custom + Personalizáu + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Reafitar valores Footer - + Previous Previo - + Next Siguiente - + Play/Pause Reproducir/Posar - + Favorite - + - + Lyrics Lletres - + + Play Queue + + + + Unknown Title Títulu desconocíu - - - + + + Unknown artist Artista desconocíu - + Play Mode Mou de reproducción - Playlist - Llista de reproducción + Llista de reproducción - + List Loop Repitición del llistáu - + Single Loop Una repitición - + Shuffle Al debalu @@ -100,24 +247,33 @@ ImportWidget - Add folder - Amestar carpeta + Amestar carpeta + + + + Open Folder + + + + + Add Music + - - + + Scan Escaniar - - - %1 music directory or drag & drop music file to add music - + + + %1 music directory or drag music files here + - + Loading music, please wait... Cargando música. Espera, por favor... @@ -125,47 +281,52 @@ InfoDialog - + Title: Títulu: - + Artist: Artista: - + Album: Álbum: - + Type: Triba: - + Path: Camín: - + Unknown artist Artista desconocíu - + Unknown album Álbum desconocíu - + Size: Tamañu: - + + Basic info + + + + Duration: Duración @@ -173,7 +334,7 @@ LoadWidget - + Loading... Cargando... @@ -183,7 +344,7 @@ Find lyrics - + @@ -201,297 +362,843 @@ Guetar - + Back Atrás + MUsicLyricWidget + + + No lyrics yet + + + + MainFrame - New playlist - Llista nueva de reproducción + Llista nueva de reproducción - + Settings Axustes - - + + Exit Colar - Add folder - Amestar carpeta + Amestar carpeta - Add file - Amestar ficheru + Amestar ficheru - + Dark theme Tema prietu - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - - - - + Play/Pause Reproducir/Posar - + Previous Previo - Invalid or non-existent file - Ficheru non válidu o inesistente + Ficheru non válidu o inesistente - Failed to import, no vaild music file found! - Fallu al importar. ¡Nun s'alcontraron ficheros válidos! + Fallu al importar. ¡Nun s'alcontraron ficheros válidos! - + All music Tola música - - + + OK Aceutar - + + Add playlist + + + + + Add music + + + + + Equalizer + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" Amestóse con ésitu a «%1» - + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next Siguiente - MusicListView + MusicListDataDelegate + + + + No songs + + + + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + Tola música + + + + + + + + + Time added + Data d'amiestu + + + + + + + Album + + + + + + + + Artist + Artista + + + + + Title + Títulu + + + + Play All + Reproducir too + + + + Artists + + + + + Albums + + + + + Custom + Personalizáu + + + + + + Search Results + + + + + Songs + + + + + No result found + Nun s'alcontraron resultaos + + + + MusicListDialog + + + Play All + Reproducir too + + + + Shuffle + Al debalu + + + + MusicListInfoView - New playlist - Llista nueva de reproducción + Llista nueva de reproducción + + + + Play queue + - + + Add to new playlist + + + + + Pause + + + + Play - Reproducir + Reproducir - + Add to playlist - Amestar a la llista + Amestar a la llista - + Display in file manager - Amosar nel xestor de ficheros + Amosar nel xestor de ficheros - + + Remove from playlist + Desaniciar del llistáu de reproducción + + + + Delete from local disk + Desaniciar del discu llocal + + + Song info - Informaciónd de canción + Informaciónd de canción + + + + + Cancel + Encaboxar + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + - + + Delete + Desaniciar + + + Are you sure you want to delete %1? - + - - + + Are you sure you want to delete the selected %1 songs? - + + + + + + The song files contained will also be deleted + + + + + MusicListItem + + + Are you sure you want to delete this playlist? + + + + + Cancel + Encaboxar + + + + Delete + Desaniciar + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + + MusicListView + + New playlist + Llista nueva de reproducción + + + + + Play + Reproducir + + + Add to playlist + Amestar a la llista + + + Display in file manager + Amosar nel xestor de ficheros + + + Song info + Informaciónd de canción - Remove from playlist - Desaniciar del llistáu de reproducción + Desaniciar del llistáu de reproducción - Delete from local disk - Desaniciar del discu llocal + Desaniciar del discu llocal - Encoding - Codificación + Codificación + + + + My Favorites + + + + + + Are you sure you want to delete this playlist? + - + + Cancel Encaboxar - + + + + Delete Desaniciar - + + + Pause + + + + + + Rename + Renomar + + Deleting the current song will also delete the song files contained - Desaniciar la canción actual tamién desaniciará los ficheros venceyaos + Desaniciar la canción actual tamién desaniciará los ficheros venceyaos - Unknown artist - Artista desconocíu + Artista desconocíu - Unknown album - Álbum desconocíu + Álbum desconocíu MusicListWidget - No Music - Nun hai música + Nun hai música - No result found - Nun s'alcontraron resultaos + Nun s'alcontraron resultaos - Play All - Reproducir too + Reproducir too - Time added - Data d'amiestu + Data d'amiestu - Title - Títulu + Títulu - Artist - Artista + Artista - Album name - Nome d'álbum + Nome d'álbum - Custom - Personalizáu + Personalizáu PlayListItem - - Are you sure you want to delete this playlist? - - - - Delete - Desaniciar + Desaniciar - Cancel - Encaboxar + Encaboxar PlayListView - - + New playlist + Llista nueva de reproducción + + + + Play queue + + + + + musicResult + + + + + My favorites + Los mios favoritos + + + + Add to new playlist + + + + + Pause + + + + + Play Reproducir - - + + Add to playlist + Amestar a la llista + + + + Display in file manager + Amosar nel xestor de ficheros + + + Remove from playlist + Desaniciar del llistáu de reproducción + + + + Remove from play queue + + + + + Delete from local disk + Desaniciar del discu llocal + + + + Encoding + Codificación + + + + Song info + Informaciónd de canción + + + + + Cancel + Encaboxar + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + Rename - Renomar + Renomar - - + Delete Desaniciar + + + Unknown artist + Artista desconocíu + + + + Unknown album + Álbum desconocíu + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + Álbum desconocíu + + + + + + Unknown artist + Artista desconocíu + PlaylistManager - + New playlist Llista nueva de reproducción - + Artist + Artista + + + + + + Albums + + + + + + + Artists + + + + + All Music Tola música - + My favorites Los mios favoritos - + Search result Resultaos de gueta + + + Play + Reproducir + + + + Music + + PlaylistWidget - New playlist - Llista nueva de reproducción + Llista nueva de reproducción QApplication - Deepin Music - Música Deepin + Música Deepin + + + + Music + QObject - Deepin Music - Música Deepin + Música Deepin @@ -499,9 +1206,13 @@ Minimizar a la bandexa'l sistema - Exit Deepin Music - Colar de Deepin Music + Colar de Deepin Music + + + + Exit Music + @@ -511,7 +1222,7 @@ Enable fade in/out - + @@ -570,20 +1281,154 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + Títulu + + + + Artist + Artista + + + + Search + Guetar + + + SearchResult - - Search "%1" in Deepin Music - Guetar «%1» en Deepin Music + Guetar «%1» en Deepin Music + + + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + Reproducir + + + + Songs + + + + + Playlists + + + + + Settings + Axustes + + + + Play/Pause + Reproducir/Posar + + + + Previous + Previo + + + + Next + Siguiente + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + + + + + Unfavorite + + + + + Song info + Informaciónd de canción + + + + New playlist + Llista nueva de reproducción + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + Desaniciar del llistáu de reproducción + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search Guetar - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_az.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_az.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_az.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_az.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,181 +1,342 @@ - + + + CloseConfirmDialog - + Please select your operation - + - + Exit Çıxış - + Minimize to system tray - + - + Do not ask again - + - + Cancel İmtina - + + Confirm + + + OK - OK + OK + + + + DequalizerDialog + + + Custom + Şəxsi + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Footer - + Previous Əvvəlki - + Next Sonrakı - + Play/Pause Oxut/Fasilə - + Favorite - + - + Lyrics - + + + + + Play Queue + - + Unknown Title - + - - - + + + Unknown artist - + - + Play Mode - + - Playlist - Oxunma siyahısı + Oxunma siyahısı - + List Loop - + - + Single Loop - + - + Shuffle - + ImportWidget - Add folder - Qovluq əlavə et + Qovluq əlavə et + + + + Open Folder + - - + + Add Music + + + + + Scan - + - - - %1 music directory or drag & drop music file to add music - + + + %1 music directory or drag music files here + - + Loading music, please wait... - + InfoDialog - + Title: Başlıq: - + Artist: İfaçı - + Album: - + - + Type: Növ: - + Path: - + - + Unknown artist - + - + Unknown album - + - + Size: Ölçü: - + + Basic info + + + + Duration: - + LoadWidget - + Loading... - + @@ -183,7 +344,7 @@ Find lyrics - + @@ -201,332 +362,799 @@ Axtar - + Back - + - MainFrame + MUsicLyricWidget - - New playlist - + + No lyrics yet + + + + MainFrame - + Settings Tənzimləmələr - - + + Exit Çıxış - Add folder - Qovluq əlavə et + Qovluq əlavə et - Add file - Fayl əlavə et + Fayl əlavə et - + Dark theme - + - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - - - - + Play/Pause Oxut/Fasilə - + Previous Əvvəlki - - Invalid or non-existent file - + + All music + + + + + + OK + OK - - Failed to import, no vaild music file found! - + + Add playlist + - - All music - + + Add music + - - - OK - OK + + Equalizer + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + - + Successfully added to "%1" - + - + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next Sonrakı - MusicListView + MusicListDataDelegate - - New playlist - + + + No songs + - + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + + + + + + + + + + Time added + + + + + + + + Album + + + + + + + + Artist + İfaçı + + + + + Title + Başlıq + + + + Play All + Hamısını Oxut + + + + Artists + + + + + Albums + + + + + Custom + Şəxsi + + + + + + Search Results + + + + + Songs + + + + + No result found + + + + + MusicListDialog + + + Play All + Hamısını Oxut + + + + Shuffle + + + + + MusicListInfoView + + + Play queue + + + + + Add to new playlist + + + + + Pause + + + + Play - Oxut + Oxut - + Add to playlist - + - + Display in file manager - + + + + + Remove from playlist + Oynatma siyahısından çıxart - + + Delete from local disk + + + + Song info - + - + + + Cancel + İmtina + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + Sil + + + Are you sure you want to delete %1? - + - - + + Are you sure you want to delete the selected %1 songs? - + + + + + + The song files contained will also be deleted + + + + + MusicListItem + + + Are you sure you want to delete this playlist? + + + + + Cancel + İmtina + + + + Delete + Sil + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + + MusicListView + + + + Play + Oxut - Remove from playlist - Oynatma siyahısından çıxart + Oynatma siyahısından çıxart - - Delete from local disk - + + My Favorites + - - Encoding - + + + Are you sure you want to delete this playlist? + - + + Cancel İmtina - + + + + Delete Sil - - Deleting the current song will also delete the song files contained - - - - - Unknown artist - + + + Pause + - - Unknown album - + + + Rename + Yenidən adlandır MusicListWidget - - No Music - - - - - No result found - - - - Play All - Hamısını Oxut + Hamısını Oxut - - Time added - - - - Title - Başlıq + Başlıq - Artist - İfaçı - - - - Album name - + İfaçı - Custom - Şəxsi + Şəxsi PlayListItem - - Are you sure you want to delete this playlist? - - - - Delete - Sil + Sil - Cancel - İmtina + İmtina PlayListView - - + + Play queue + + + + + musicResult + + + + + My favorites + + + + + Add to new playlist + + + + + Pause + + + + + Play Oxut - - + + Add to playlist + + + + + Display in file manager + + + + Remove from playlist + Oynatma siyahısından çıxart + + + + Remove from play queue + + + + + Delete from local disk + + + + + Encoding + + + + + Song info + + + + + + Cancel + İmtina + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + Rename - Yenidən adlandır + Yenidən adlandır - - + Delete Sil + + + Unknown artist + + + + + Unknown album + + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + + + + + + + Unknown artist + + PlaylistManager - + New playlist - + + + + Artist + İfaçı + + + + + + Albums + + + + + + + Artists + - + + All Music - + - + My favorites - + - + Search result - + - - - PlaylistWidget - - New playlist - + + Play + Oxut + + + + Music + QApplication - Deepin Music - Deepin Musiqi + Deepin Musiqi + + + + Music + QObject - Deepin Music - Deepin Musiqi + Deepin Musiqi Minimize to system tray - + - Exit Deepin Music - + Exit Music + Autoplay - + Enable fade in/out - + Remember playback position - + Close Main Window - + Basic - + @@ -541,7 +1169,7 @@ Restore Defaults - + @@ -570,20 +1198,150 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + Başlıq + + + + Artist + İfaçı + + + + Search + Axtar + + + SearchResult - - - Search "%1" in Deepin Music - + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + Oxut + + + + Songs + + + + + Playlists + + + + + Settings + Tənzimləmələr + + + + Play/Pause + Oxut/Fasilə + + + + Previous + Əvvəlki + + + + Next + Sonrakı + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + + + + + Unfavorite + + + + + Song info + + + + + New playlist + + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + Oynatma siyahısından çıxart + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search Axtar - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_bg.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_bg.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_bg.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_bg.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,245 @@ - + + + CloseConfirmDialog - + Please select your operation Моля, изберете операция - + Exit Изход - + Minimize to system tray Минимизирай в зоната за уведомяване - + Do not ask again - + - + Cancel Отказ - + + Confirm + + + OK - Да + Да + + + + DequalizerDialog + + + Custom + Потребителски + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Възстанови стандартните настройки Footer - + Previous Предишно - + Next Следващ - + Play/Pause Пускане/Задържане - + Favorite Любими - + Lyrics Текстове на песни - + + Play Queue + + + + Unknown Title Непознато заглавие - - - + + + Unknown artist Неизвестен изпълнител - + Play Mode Режим на възпроизвеждане - Playlist - Списък + Списък - + List Loop Повторение на списъка - + Single Loop Еднократно повторение - + Shuffle Разбъркано @@ -100,24 +247,37 @@ ImportWidget - Add folder - Добавяне на папка + Добавяне на папка + + + + Open Folder + - - + + Add Music + + + + + Scan Сканирай - - + + + %1 music directory or drag music files here + + + %1 music directory or drag & drop music file to add music - %1 папка c музика или влачете и пуснете файл, за да добавите музика + %1 папка c музика или влачете и пуснете файл, за да добавите музика - + Loading music, please wait... Зареждане с музика, почакайте… @@ -125,47 +285,52 @@ InfoDialog - + Title: Название: - + Artist: Изпълнител: - + Album: Албум: - + Type: Тип: - + Path: Път: - + Unknown artist Неизвестен изпълнител - + Unknown album Неизвестен албум - + Size: Размер: - + + Basic info + + + + Duration: Времетраене: @@ -173,7 +338,7 @@ LoadWidget - + Loading... Зареждане… @@ -183,7 +348,7 @@ Find lyrics - + @@ -201,297 +366,843 @@ Търсене - + Back Назад + MUsicLyricWidget + + + No lyrics yet + + + + MainFrame - New playlist - Нов списък + Нов списък - + Settings Настройки - - + + Exit Изход - Add folder - Добавяне на папка + Добавяне на папка - Add file - Добавяне на файл + Добавяне на файл - + Dark theme Тъмна тема - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - - - - + Play/Pause Изпълнение/Пауза - + Previous Предишно - Invalid or non-existent file - Невалиден или несъществуващ файл + Невалиден или несъществуващ файл - Failed to import, no vaild music file found! - Неуспешно внасяне, няма открит файл с музика! + Неуспешно внасяне, няма открит файл с музика! - + All music Цялата музика - - + + OK Да - + + Add playlist + + + + + Add music + + + + + Equalizer + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" Успешно добавено към "%1" - + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next Следващ - MusicListView + MusicListDataDelegate + + + + No songs + + + + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + Цялата музика + + + + + + + + + Time added + Добавено на + + + + + + + Album + + + + + + + + Artist + Изпълнител + + + + + Title + Заглавие + + + + Play All + Изпълни всички + + + + Artists + + + + + Albums + + + + + Custom + Потребителски + + + + + + Search Results + + + + + Songs + + + + + No result found + Няма открит резултат + + + + MusicListDialog + + + Play All + Изпълни всички + + + + Shuffle + Разбъркано + + + + MusicListInfoView - New playlist - Нов списък + Нов списък + + + + Play queue + + + + + Add to new playlist + - + + Pause + + + + Play - Изпълнение + Изпълнение - + Add to playlist - Добавяне към списъка + Добавяне към списъка - + Display in file manager - Покажи във файловия мениджър + Покажи във файловия мениджър - + + Remove from playlist + Премахване от списъка + + + + Delete from local disk + Изтриване от диска + + + Song info - Информация за песента + Информация за песента + + + + + Cancel + Отказ + + + + Remove + - + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + Изтриване + + + Are you sure you want to delete %1? - + - - + + Are you sure you want to delete the selected %1 songs? - + + + + + + The song files contained will also be deleted + + + + + MusicListItem + + + Are you sure you want to delete this playlist? + + + + + Cancel + Отказ + + + + Delete + Изтриване + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + + MusicListView + + New playlist + Нов списък + + + + + Play + Изпълнение + + + Add to playlist + Добавяне към списъка + + + Display in file manager + Покажи във файловия мениджър + + + Song info + Информация за песента - Remove from playlist - Премахване от списъка + Премахване от списъка - Delete from local disk - Изтриване от диска + Изтриване от диска - Encoding - Кодировка + Кодировка + + + + My Favorites + + + + + + Are you sure you want to delete this playlist? + - + + Cancel Отказ - + + + + Delete Изтриване - + + + Pause + + + + + + Rename + Преименуване + + Deleting the current song will also delete the song files contained - Изтриването на текущата песен ще изтрие и самият файл + Изтриването на текущата песен ще изтрие и самият файл - Unknown artist - Неизвестен изпълнител + Неизвестен изпълнител - Unknown album - Неизвестен албум + Неизвестен албум MusicListWidget - No Music - Няма музика + Няма музика - No result found - Няма открит резултат + Няма открит резултат - Play All - Изпълни всички + Изпълни всички - Time added - Добавено на + Добавено на - Title - Заглавие + Заглавие - Artist - Изпълнител + Изпълнител - Album name - Име на албум + Име на албум - Custom - Потребителски + Потребителски PlayListItem - - Are you sure you want to delete this playlist? - - - - Delete - Изтриване + Изтриване - Cancel - Отказ + Отказ PlayListView - - + New playlist + Нов списък + + + + Play queue + + + + + musicResult + + + + + My favorites + Любимите ми + + + + Add to new playlist + + + + + Pause + + + + + Play Изпълнение - - + + Add to playlist + Добавяне към списъка + + + + Display in file manager + Покажи във файловия мениджър + + + Remove from playlist + Премахване от списъка + + + + Remove from play queue + + + + + Delete from local disk + Изтриване от диска + + + + Encoding + Кодировка + + + + Song info + Информация за песента + + + + + Cancel + Отказ + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + Rename - Преименуване + Преименуване - - + Delete Изтриване + + + Unknown artist + Неизвестен изпълнител + + + + Unknown album + Неизвестен албум + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + Неизвестен албум + + + + + + Unknown artist + Неизвестен изпълнител + PlaylistManager - + New playlist Нов списък - + Artist + Изпълнител + + + + + + Albums + + + + + + + Artists + + + + + All Music Цялата музика - + My favorites Любимите ми - + Search result Резултати от търсенето + + + Play + Изпълнение + + + + Music + + PlaylistWidget - New playlist - Нов списък + Нов списък QApplication - Deepin Music - Deepin Музика + Deepin Музика + + + + Music + QObject - Deepin Music - Deepin Музика + Deepin Музика @@ -499,9 +1210,13 @@ Минимизирай в зоната за уведомяване - Exit Deepin Music - Излизане от Deepin Музика + Излизане от Deepin Музика + + + + Exit Music + @@ -511,7 +1226,7 @@ Enable fade in/out - + @@ -570,20 +1285,154 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + Заглавие + + + + Artist + Изпълнител + + + + Search + Търсене + + + SearchResult - - Search "%1" in Deepin Music - Търси "%1" в Deepin Music + Търси "%1" в Deepin Music + + + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + Изпълнение + + + + Songs + + + + + Playlists + + + + + Settings + Настройки + + + + Play/Pause + + + + + Previous + Предишно + + + + Next + Следващ + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + Любими + + + + Unfavorite + + + + + Song info + Информация за песента + + + + New playlist + Нов списък + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + Премахване от списъка + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search Търсене - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_bn.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_bn.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_bn.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_bn.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,171 +1,328 @@ - + + + CloseConfirmDialog - + Please select your operation - + - + Exit বের হয়ে যান - + Minimize to system tray - + - + Do not ask again - + - + Cancel বাতিল - + + Confirm + + + OK - ঠিক আছে + ঠিক আছে + + + + DequalizerDialog + + + Custom + প্রথা + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + পূর্বনির্ধারিত জিনিসে ফিরে যান Footer - + Previous পূর্ববর্তীটি - + Next পরবর্তী - + Play/Pause চালান/থামুন - + Favorite - + - + Lyrics - + + + + + Play Queue + - + Unknown Title - + - - - + + + Unknown artist - + - + Play Mode চালানোর ধরণ - Playlist - চালানোর তালিকা + চালানোর তালিকা - + List Loop সম্পূর্ণ তালিকা ঘুড়ুন - + Single Loop একবার ঘুড়বেন - + Shuffle - + ImportWidget - - Add folder - + + Open Folder + + + + + Add Music + - - + + Scan - + - - - %1 music directory or drag & drop music file to add music - + + + %1 music directory or drag music files here + - + Loading music, please wait... - + InfoDialog - + Title: - + - + Artist: - + - + Album: - + - + Type: ধরণ: - + Path: - + - + Unknown artist - + - + Unknown album - + - + Size: আকার: - + + Basic info + + + + Duration: সময়কালঃ @@ -173,7 +330,7 @@ LoadWidget - + Loading... লোড হচ্ছে... @@ -183,17 +340,17 @@ Find lyrics - + Title - + Artist - + @@ -201,317 +358,752 @@ খুঁজুন - + Back ফিরে যান - MainFrame + MUsicLyricWidget - - New playlist - + + No lyrics yet + + + + MainFrame - + Settings সেটিংস - - + + Exit বের হয়ে যান - - Add folder - - - - - Add file - - - - + Dark theme - + - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + + Equalizer + - + Play/Pause চালান/থামুন - + Previous পূর্ববর্তীটি - - Invalid or non-existent file - + + All music + - - Failed to import, no vaild music file found! - + + + OK + ঠিক আছে - - All music - + + Add playlist + - - - OK - ঠিক আছে + + Add music + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + - + Successfully added to "%1" - + + + + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + - + Next পরবর্তী - MusicListView + MusicListDataDelegate - - New playlist - + + + No songs + - - Play - চালু করুন + + + 1 song + - - Add to playlist - + + + %1 songs + + + + MusicListDataWidget - - Display in file manager - ফাইল ম্যানেজার দেখান + + + + + + + + + + + No songs + - - Song info - + + + 1 album - 1 song + - - Are you sure you want to delete %1? - + + + + + %1 album - %2 songs + - - - Are you sure you want to delete the selected %1 songs? - + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + + + + + + + + + + Time added + + + + + + + + Album + + + + + + + + Artist + + + + + + Title + + + + + Play All + + + + + Artists + - + + Albums + + + + + Custom + প্রথা + + + + + + Search Results + + + + + Songs + + + + + No result found + + + + + MusicListDialog + + + Play All + + + + + Shuffle + + + + + MusicListInfoView + + + Play queue + + + + + Add to new playlist + + + + + Pause + + + + + Play + চালু করুন + + + + Add to playlist + + + + + Display in file manager + ফাইল ম্যানেজার দেখান + + + Remove from playlist - + - + Delete from local disk - + - - Encoding - + + Song info + - + + Cancel - বাতিল + বাতিল + + + + Remove + - + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + Delete - মুছে ফেলুন + মুছে ফেলুন - - Deleting the current song will also delete the song files contained - + + Are you sure you want to delete %1? + - - Unknown artist - + + + Are you sure you want to delete the selected %1 songs? + - - Unknown album - + + + The song files contained will also be deleted + - MusicListWidget + MusicListItem + + + Are you sure you want to delete this playlist? + + - - No Music - + + Cancel + বাতিল - - No result found - + + Delete + মুছে ফেলুন + + + MusicListScrollArea - - Play All - + + Library + - - Time added - + + Playlists + + + + + MusicListView + + + + Play + চালু করুন - - Title - + Display in file manager + ফাইল ম্যানেজার দেখান - - Artist - + + My Favorites + - - Album name - + + + Are you sure you want to delete this playlist? + - - Custom - প্রথা + + + Cancel + বাতিল + + + + + + + Delete + মুছে ফেলুন + + + + + Pause + + + + + + Rename + - PlayListItem + MusicListWidget - - Are you sure you want to delete this playlist? - + Custom + প্রথা + + + PlayListItem - Delete - মুছে ফেলুন + মুছে ফেলুন - Cancel - বাতিল + বাতিল PlayListView - - + + Play queue + + + + + My favorites + + + + + Add to new playlist + + + + + Pause + + + + + Play চালু করুন - - - Rename - + + musicResult + + + + + Add to playlist + + + + + Display in file manager + ফাইল ম্যানেজার দেখান + + + + Remove from play queue + + + + + Delete from local disk + + + + + Encoding + + + + + Song info + + + + + + Cancel + বাতিল + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + - - + Delete মুছে ফেলুন + + + Unknown artist + + + + + Unknown album + + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + + + + + + + Unknown artist + + PlaylistManager - + New playlist - + + + + + + + Albums + + + + + + + Artists + - + + All Music - + - + My favorites - + - + Search result - + - - - PlaylistWidget - - New playlist - + + Play + চালু করুন + + + + Music + QApplication - Deepin Music - ডিপিন মিউজিক + ডিপিন মিউজিক + + + + Music + QObject - Deepin Music - ডিপিন মিউজিক + ডিপিন মিউজিক Minimize to system tray - + - Exit Deepin Music - + Exit Music + Autoplay - + Enable fade in/out - + @@ -521,7 +1113,7 @@ Close Main Window - + @@ -562,7 +1154,7 @@ Volume down - + শব্দ কমান @@ -571,20 +1163,150 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + + + + + Artist + + + + + Search + খুঁজুন + + + SearchResult - - - Search "%1" in Deepin Music - + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + চালু করুন + + + + Songs + + + + + Playlists + + + + + Settings + সেটিংস + + + + Play/Pause + চালান/থামুন + + + + Previous + পূর্ববর্তীটি + + + + Next + পরবর্তী + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + + + + + Unfavorite + + + + + Song info + + + + + New playlist + + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search খুঁজুন - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ca.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ca.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ca.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ca.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,237 @@ - + + + CloseConfirmDialog - - Please select your operation - Seleccioneu l'operació - - - + Exit Surt - + Minimize to system tray Minimitza a la safata del sistema - + Do not ask again - + No ho tornis a preguntar. + + + + Please select your operation + Seleccioneu l'operació - + Cancel Cancel·la - - OK - D'acord + + Confirm + Confirmeu-ho + + + + DequalizerDialog + + + Custom + Personalitzat + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Restaura els valors per defecte Footer - + + Unknown Title + Títol desconegut + + + + + + Unknown artist + Artista desconegut + + + Previous Anterior - + Next Següent - + Play/Pause Reprodueix / Pausa - + Favorite Favorit - + Lyrics Lletres - - Unknown Title - Títol desconegut - - - - - - Unknown artist - Artista desconegut - - - + Play Mode Mode de reproducció - - Playlist - Llista de reproducció + + Play Queue + Cua de reproducció - + List Loop Repetició de la llista - + Single Loop Repetició simple - + Shuffle Aleatòria @@ -100,24 +239,29 @@ ImportWidget - - Add folder - Afegeix una carpeta + + Open Folder + Obre una carpeta + + + + Add Music + Afegiu música - - + + Scan Explora - - - %1 music directory or drag & drop music file to add music - %1 directori de música o arrossegueu i deixeu anar un fitxer de música per afegir-lo + + + %1 music directory or drag music files here + %1 directori de música o arrossegueu fitxers de música aquí. - + Loading music, please wait... Carregant música; espereu, si us plau... @@ -125,55 +269,60 @@ InfoDialog - + + Basic info + Informació bàsica + + + Title: Títol: - + Artist: Artista: - + Album: Àlbum: - + Type: Tipus: - + + Size: + Mida: + + + + Duration: + Durada: + + + Path: Camí: - + Unknown artist Artista desconegut - + Unknown album Àlbum desconegut - - - Size: - Mida: - - - - Duration: - Durada: - LoadWidget - + Loading... Carregant... @@ -183,7 +332,7 @@ Find lyrics - + Troba'n la lletra @@ -201,307 +350,716 @@ Cerca - + Back Enrere - MainFrame + MUsicLyricWidget - - New playlist - Llista de reproducció nova + + No lyrics yet + + + + MainFrame - - Settings - Configuració + + Add playlist + Afegiu una llista de reproducció - - - Exit - Surt + + Add music + Afegiu música - - Add folder - Afegeix una carpeta + + Equalizer + - - Add file - Afegeix un fitxer + + Settings + Configuració - + Dark theme Tema fosc - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + + + Exit + Surt + + + + Music is a local music player with beautiful design and simple functions. + La Música és un reproductor de música local amb un disseny bonic i funcions senzilles. + + + + + + + + Music + Música - + Play/Pause Reprodueix / Pausa - + Previous Anterior - - Invalid or non-existent file - Fitxer no vàlid o inexistent + + Next + Següent - - Failed to import, no vaild music file found! + + Successfully added to "%1" + S'ha afegit correctament a %1 + + + + Already added to the playlist + Ja s'ha afegit a la llista de reproducció. + + + + 1 song added + S'ha afegit 1 cançó. + + + + %1 songs added + S'han afegit %1 cançons. + + + + File is invalid or does not exist, load failed + El fitxer no és vàlid o no existeix. La càrrega ha fallat! + + + + + OK + D'acord + + + + Import failed, no valid music file found Ha fallat la importació. No s'ha trobat cap fitxer de música vàlid! - + All music Tota la música + + + MusicListDataDelegate - - - OK - D'acord + + + No songs + Sense cançons - - Successfully added to "%1" - S'ha afegit correctament a %1 + + + 1 song + 1 cançó - - Next - Següent + + + %1 songs + %1 cançons - MusicListView + MusicListDataWidget - - New playlist - Llista de reproducció nova + + + + + + + + + + + No songs + Sense cançons + + + + + 1 album - 1 song + 1 àlbum - 1 cançó + + + + + + + %1 album - %2 songs + %1 àlbum - %2 cançons + + + + + %1 albums - %2 songs + %1 àlbums - %2 cançons + + + + + 1 artist - 1 song + 1 artista - 1 cançó + + + + + %1 artist - %2 songs + %1 artistes - %2 cançons + + + + + %1 artists - %2 songs + %1 artistes - %2 cançons + + + + + 1 song + 1 cançó + + + + + + + %1 songs + %1 cançons + + + + + + + No search results + No hi ha resultats de la cerca. + + + + + + All Music + Tota la música + + + + + + + + + Time added + Temps afegit + + + + + + + Album + Disc + + + + + + + Artist + Artista + + + + + Title + Títol + + + + Play All + Reprodueix-ho tot + + + + Artists + Artistes + + + + Albums + Àlbums + + + + Custom + Personalitzat + + + + + + Search Results + Resultats de la cerca + + + + Songs + Cançons - + + No result found + No s'ha trobat cap resultat. + + + + MusicListDialog + + + Play All + Reprodueix-ho tot + + + + Shuffle + Aleatòria + + + + MusicListInfoView + + + Play queue + Reprodueix la cua + + + + Add to new playlist + Afegeix a una llista de reproducció nova + + + + Pause + Pausa + + + Play Reprodueix - + Add to playlist Afegeix a la llista de reproducció - + Display in file manager Mostra al gestor de fitxers - + + Remove from playlist + Elimina de la llista de reproducció + + + + Delete from local disk + Elimina del disc local + + + Song info Informació de la cançó - + + + Cancel + Cancel·la + + + + Remove + Elimina + + + + Are you sure you want to remove %1? + Segur que voleu eliminar %1? + + + + Are you sure you want to remove the selected %1 songs? + Segur que voleu eliminar les %1 cançons seleccionades? + + + + Delete + Elimina + + + Are you sure you want to delete %1? - + Segur que voleu eliminar %1? - - + + Are you sure you want to delete the selected %1 songs? - + Segur que voleu eliminar les %1 cançons seleccionades? - - Remove from playlist - Elimina de la llista de reproducció + + + The song files contained will also be deleted + Els fitxers de cançons continguts també s'eliminaran. + + + MusicListItem - - Delete from local disk - Elimina del disc local + + Are you sure you want to delete this playlist? + Segur que voleu eliminar aquesta llista de reproducció? - - Encoding - Codificació + + Cancel + Cancel·la + + + + Delete + Elimina + + + + MusicListScrollArea + + + Library + Biblioteca - + + Playlists + Llistes de reproducció + + + + MusicListView + + + My Favorites + Els favorits + + + + + Are you sure you want to delete this playlist? + Segur que voleu eliminar aquesta llista de reproducció? + + + + Cancel Cancel·la - + + + + Delete Elimina - - Deleting the current song will also delete the song files contained - Eliminar la cançó actual també eliminarà els fitxers que conté + + + Pause + Pausa + + + + + Play + Reprodueix + + + + + Rename + Canvia'n el nom + + + PlayListView - + Unknown artist Artista desconegut - + Unknown album Àlbum desconegut - - - MusicListWidget - - No Music - No hi ha música. + + Play queue + Reprodueix la cua - - No result found - No s'ha trobat cap resultat. + + musicResult + - - Play All - Reprodueix-ho tot + + My favorites + Els favorits - - Time added - Temps afegit + + Add to new playlist + Afegeix a una llista de reproducció nova - - Title - Títol + + Pause + Pausa - - Artist - Artista + + + Play + Reprodueix - - Album name - Nom de l'àlbum + + Add to playlist + Afegeix a la llista de reproducció - - Custom - Personalitzat + + Display in file manager + Mostra al gestor de fitxers - - - PlayListItem - - Are you sure you want to delete this playlist? - + Remove from playlist + Elimina de la llista de reproducció - - Delete - Elimina + + Remove from play queue + + + + + Delete from local disk + Elimina del disc local + + + + Encoding + Codificació - + + Song info + Informació de la cançó + + + + Cancel Cancel·la - - - PlayListView - - - Play - Reprodueix + + Remove + Elimina - - - Rename - Canvia'n el nom + + Are you sure you want to remove %1? + Segur que voleu eliminar %1? - - + + Are you sure you want to remove the selected %1 songs? + Segur que voleu eliminar les %1 cançons seleccionades? + + + Delete Elimina + + + Are you sure you want to delete %1? + Segur que voleu eliminar %1? + + + + + Are you sure you want to delete the selected %1 songs? + Segur que voleu eliminar les %1 cançons seleccionades? + + + + + The song files contained will also be deleted + Els fitxers de cançons continguts també s'eliminaran. + + + + PlayListWidget + + + + No songs + Sense cançons + + + + No search results + No hi ha resultats de la cerca. + + + + Play Queue + Cua de reproducció + + + + Empty + Buit + + + + 1 song + 1 cançó + + + + %1 songs + %1 cançons + + + + Playlist + + + + Unknown album + Àlbum desconegut + + + + + + Unknown artist + Artista desconegut + PlaylistManager - + New playlist Llista de reproducció nova - + + + + Albums + Àlbums + + + + + + Artists + Artistes + + + + All Music Tota la música - + My favorites Els favorits - + Search result Resultat de la cerca - - - PlaylistWidget - - New playlist - Llista de reproducció nova + + Play + Reprodueix + + + + Music + Música QApplication - - Deepin Music - Música del Deepin + + Music + Música QObject - - Deepin Music - Música del Deepin - - Minimize to system tray Minimitza a la safata del sistema - Exit Deepin Music - Surt de la Música del Deepin + Exit Music + Surt de la Música @@ -511,7 +1069,7 @@ Enable fade in/out - + Habilita l'esvaïment @@ -570,20 +1128,150 @@ + SearchLyricsWidget + + + Find Lyrics + Troba'n la lletra + + + + Title + Títol + + + + Artist + Artista + + + + Search + Cerca + + + SearchResult - - - Search "%1" in Deepin Music - Cerca "%1" a la Música del Deepin + + Music + Música + + + + Artists + Artistes + + + + Albums + Àlbums + + + + Shortcut + + + Play + Reprodueix + + + + Songs + Cançons + + + + Playlists + Llistes de reproducció + + + + Settings + Configuració + + + + Play/Pause + Reprodueix / Pausa + + + + Previous + Anterior + + + + Next + Següent + + + + Volume Up + Volum amunt + + + + Volume Down + Volum avall + + + + Mute + Silencia + + + + Favorite + Favorit + + + + Unfavorite + Elimina dels favorits + + + + Song info + Informació de la cançó + + + + New playlist + Llista de reproducció nova + + + + Add music + Afegiu música + + + + Rename playlist + Reanomena la llista de reproducció + + + + Remove from playlist + Elimina de la llista de reproducció + + + + Help + Ajuda + + + + Display shortcuts + Mostra les dreceres TitlebarWidget - + Search Cerca - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_cs.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_cs.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_cs.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_cs.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,245 @@ - + + + CloseConfirmDialog - + Please select your operation Vyberte, prosím, činnost - + Exit Ukončit - + Minimize to system tray Zmenšit do oznamovací oblasti panelu - + Do not ask again - + Znovu se neptat - + Cancel Zrušit - + + Confirm + + + OK - OK + OK + + + + DequalizerDialog + + + Custom + Vlastní + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Obnovit výchozí Footer - + Previous Předchozí - + Next Další - + Play/Pause Přehrát/Pozastavit - + Favorite Oblíbené - + Lyrics Text písně - + + Play Queue + + + + Unknown Title Neznámý název - - - + + + Unknown artist Neznámý umělec - + Play Mode Režim přehrávání - Playlist - Seznam skladeb + Seznam skladeb - + List Loop Smyčka seznamu - + Single Loop Jednoduchá smyčka - + Shuffle Zamíchat @@ -100,24 +247,37 @@ ImportWidget - Add folder - Přidat složku + Přidat složku + + + + Open Folder + + + + + Add Music + - - + + Scan Prohledat - - + + + %1 music directory or drag music files here + + + %1 music directory or drag & drop music file to add music - %1 adresář s hudbou nebo táhněte a upusťte hudební soubor pro přidání hudby + %1 adresář s hudbou nebo táhněte a upusťte hudební soubor pro přidání hudby - + Loading music, please wait... Nahrává se hudba. Počkejte, prosím... @@ -125,47 +285,52 @@ InfoDialog - + Title: Název: - + Artist: Umělec: - + Album: Album: - + Type: Typ: - + Path: Cesta: - + Unknown artist Neznámý umělec - + Unknown album Neznámé album - + Size: Velikost: - + + Basic info + + + + Duration: Doba trvání: @@ -173,7 +338,7 @@ LoadWidget - + Loading... Nahrává se... @@ -183,7 +348,7 @@ Find lyrics - + Najít text písně @@ -201,297 +366,859 @@ Hledat - + Back Zpět + MUsicLyricWidget + + + No lyrics yet + + + + MainFrame - New playlist - Nový seznam skladeb + Nový seznam skladeb - + Settings Nastavení - - + + Exit Ukončit - Add folder - Přidat složku + Přidat složku - Add file - Přidat soubor + Přidat soubor - + Dark theme Tmavý vzhled - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + Hudební přehrávač je jednoduchý a krásný přehrávač, který přehrává místní hudební soubory. Podporuje zobrazení slov písní během přehrávání, přehrávání bezztrátových formátů hudby a přizpůsobení si seznamů skladeb a tak dále. - + Play/Pause Přehrát/Pozastavit - + Previous Předchozí - Invalid or non-existent file - Neplatný nebo nejsoucí soubor + Neplatný nebo nejsoucí soubor - Failed to import, no vaild music file found! - Nepodařilo se zavést. Nenalezen žádný platný hudební soubor! + Nepodařilo se zavést. Nenalezen žádný platný hudební soubor! - + All music Všechna hudba - - + + OK OK - + + Add playlist + + + + + Add music + + + + + Equalizer + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" Úspěšně přidáno do "%1" - + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next Další + MusicListDataDelegate + + + + No songs + + + + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + Všechna hudba + + + + + + + + + Time added + Čas přidání + + + + + + + Album + + + + + + + + Artist + Umělec + + + + + Title + Název + + + + Play All + Přehrát vše + + + + Artists + + + + + Albums + + + + + Custom + Vlastní + + + + + + Search Results + + + + + Songs + + + + + No result found + Nenalezen žádný výsledek + + + + MusicListDialog + + + Play All + Přehrát vše + + + + Shuffle + Zamíchat + + + + MusicListInfoView + + New playlist + Nový seznam skladeb + + + + Play queue + + + + + Add to new playlist + + + + + Pause + + + + + Play + Přehrát + + + + Add to playlist + Přidat do seznamu skladeb + + + + Display in file manager + Zobrazit ve správci souborů + + + + Remove from playlist + Odstranit ze seznamu skladeb + + + + Delete from local disk + Smazat z místního disku + + + + Song info + Údaje o písni + + + + + Cancel + Zrušit + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + Smazat + + + + Are you sure you want to delete %1? + Opravdu je chcete smazat %1? + + + + + Are you sure you want to delete the selected %1 songs? + Opravdu chcete smazat vybraných %1 písní? + + + + + The song files contained will also be deleted + + + + + MusicListItem + + + Are you sure you want to delete this playlist? + Opravdu chcete smazat tento seznam skladeb? + + + + Cancel + Zrušit + + + + Delete + Smazat + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + MusicListView - New playlist - Nový seznam skladeb + Nový seznam skladeb - + + Play Přehrát - Add to playlist - Přidat do seznamu skladeb + Přidat do seznamu skladeb - Display in file manager - Zobrazit ve správci souborů + Zobrazit ve správci souborů - Song info - Údaje o písni + Údaje o písni - Are you sure you want to delete %1? - + Opravdu je chcete smazat %1? - - Are you sure you want to delete the selected %1 songs? - + Opravdu chcete smazat vybraných %1 písní? - Remove from playlist - Odstranit ze seznamu skladeb + Odstranit ze seznamu skladeb - Delete from local disk - Smazat z místního disku + Smazat z místního disku - Encoding - Kódování + Kódování + + + + My Favorites + - + + + Are you sure you want to delete this playlist? + Opravdu chcete smazat tento seznam skladeb? + + + + Cancel Zrušit - + + + + Delete Smazat - + + + Pause + + + + + + Rename + Přejmenovat + + Deleting the current song will also delete the song files contained - Smazáním nynější písně budou rovněž smazány obsažené písňové soubory + Smazáním nynější písně budou rovněž smazány obsažené písňové soubory - Unknown artist - Neznámý umělec + Neznámý umělec - Unknown album - Neznámé album + Neznámé album MusicListWidget - No Music - Žádná hudba + Žádná hudba - No result found - Nenalezen žádný výsledek + Nenalezen žádný výsledek - Play All - Přehrát vše + Přehrát vše - Time added - Čas přidání + Čas přidání - Title - Název + Název - Artist - Umělec + Umělec - Album name - Název alba + Název alba - Custom - Vlastní + Vlastní PlayListItem - Are you sure you want to delete this playlist? - + Opravdu chcete smazat tento seznam skladeb? - Delete - Smazat + Smazat - Cancel - Zrušit + Zrušit PlayListView - - + New playlist + Nový seznam skladeb + + + + Play queue + + + + + musicResult + + + + + My favorites + Moje oblíbené + + + + Add to new playlist + + + + + Pause + + + + + Play Přehrát - - + + Add to playlist + Přidat do seznamu skladeb + + + + Display in file manager + Zobrazit ve správci souborů + + + Remove from playlist + Odstranit ze seznamu skladeb + + + + Remove from play queue + + + + + Delete from local disk + Smazat z místního disku + + + + Encoding + Kódování + + + + Song info + Údaje o písni + + + + + Cancel + Zrušit + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + Opravdu je chcete smazat %1? + + + + + Are you sure you want to delete the selected %1 songs? + Opravdu chcete smazat vybraných %1 písní? + + + + + The song files contained will also be deleted + + + Rename - Přejmenovat + Přejmenovat - - + Delete Smazat + + + Unknown artist + Neznámý umělec + + + + Unknown album + Neznámé album + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + Neznámé album + + + + + + Unknown artist + Neznámý umělec + PlaylistManager - + New playlist Nový seznam skladeb - + Artist + Umělec + + + + + + Albums + + + + + + + Artists + + + + + All Music Všechna hudba - + My favorites Moje oblíbené - + Search result Výsledek hledání + + + Play + Přehrát + + + + Music + + PlaylistWidget - New playlist - Nový seznam skladeb + Nový seznam skladeb QApplication - Deepin Music - Přehrávání hudby + Přehrávání hudby + + + + Music + QObject - Deepin Music - Deepin Hudba + Deepin Hudba @@ -499,9 +1226,13 @@ Zmenšit do oznamovací oblasti panelu - Exit Deepin Music - Ukončit + Ukončit + + + + Exit Music + @@ -511,7 +1242,7 @@ Enable fade in/out - + Povolit postupné zesílení/zeslabení @@ -570,20 +1301,154 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + Název + + + + Artist + Umělec + + + + Search + Hledat + + + SearchResult - - Search "%1" in Deepin Music - Hledat "%1" v Hudba + Hledat "%1" v Hudba + + + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + Přehrát + + + + Songs + + + + + Playlists + + + + + Settings + Nastavení + + + + Play/Pause + Přehrát/Pozastavit + + + + Previous + Předchozí + + + + Next + Další + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + Oblíbené + + + + Unfavorite + + + + + Song info + Údaje o písni + + + + New playlist + Nový seznam skladeb + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + Odstranit ze seznamu skladeb + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search Hledat - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_da.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_da.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_da.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_da.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,237 @@ - + + + CloseConfirmDialog - - Please select your operation - Vælg venligst din handling - - - + Exit Afslut - + Minimize to system tray Minimer til systembakke - + Do not ask again - + Spørg ikke igen + + + + Please select your operation + Vælg venligst din handling - + Cancel Annuller - - OK - OK + + Confirm + Bekræft + + + + DequalizerDialog + + + Custom + Brugerdefineret + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Gendan standarder Footer - + + Unknown Title + Ukendt titel + + + + + + Unknown artist + Ukendt kunstner + + + Previous Forrige - + Next Næste - + Play/Pause Afspil/pause - + Favorite Favorit - + Lyrics Sangtekster - - Unknown Title - Ukendt titel - - - - - - Unknown artist - Ukendt kunstner - - - + Play Mode Afspilningstilstand - - Playlist - Afspilningsliste + + Play Queue + Afspilningskø - + List Loop Listeløkke - + Single Loop Enkel løkke - + Shuffle Bland @@ -100,24 +239,29 @@ ImportWidget - - Add folder - Tilføj mappe + + Open Folder + Åbn mappe - - + + Add Music + Tilføj musik + + + + Scan Scan - - - %1 music directory or drag & drop music file to add music - %1 musikmappe og træk og slip fil for at tilføje musik + + + %1 music directory or drag music files here + %1 musikmappe eller træk musikfiler hertil - + Loading music, please wait... Indlæser musik, vent venligst... @@ -125,55 +269,60 @@ InfoDialog - + + Basic info + Grundlæggende information + + + Title: Titel: - + Artist: Kunstner: - + Album: Album: - + Type: Type: - + + Size: + Størrelse: + + + + Duration: + Varighed: + + + Path: Sti: - + Unknown artist Ukendt kunstner - + Unknown album Ukendt album - - - Size: - Størrelse: - - - - Duration: - Varighed: - LoadWidget - + Loading... Indlæser... @@ -183,7 +332,7 @@ Find lyrics - + Find sangtekster @@ -201,307 +350,716 @@ Søg - + Back Tilbage - MainFrame + MUsicLyricWidget - - New playlist - Ny afspilningsliste + + No lyrics yet + + + + MainFrame - - Settings - Indstillinger + + Add playlist + Tilføj afspilningsliste - - - Exit - Afslut + + Add music + Tilføj musik - - Add folder - Tilføj mappe + + Equalizer + - - Add file - Tilføj fil + + Settings + Indstillinger - + Dark theme Mørkt tema - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + + + Exit + Afslut + + + + Music is a local music player with beautiful design and simple functions. + Musik er en lokal musikafspiller med smukt design og simple funktioner. + + + + + + + + Music + Musik - + Play/Pause Afspil/pause - + Previous Forrige - - Invalid or non-existent file - Ugyldig eller ikkeeksisterende fil + + Next + Næste - - Failed to import, no vaild music file found! - Import mislykkedes - der blev ikke fundet nogen gyldig musikfil! + + Successfully added to "%1" + Tilføjet til "%1" - - All music - Alt musik + + Already added to the playlist + + + + + 1 song added + 1 sang tilføjet - - + + %1 songs added + %1 sange tilføjet + + + + File is invalid or does not exist, load failed + Filen er ugyldig eller findes ikke - indlæsning mislykkedes + + + + OK OK - - Successfully added to "%1" - Tilføjet til "%1" + + Import failed, no valid music file found + Import mislykkedes - der blev ikke fundet nogen gyldig musikfil - - Next - Næste + + All music + Alt musik - MusicListView + MusicListDataDelegate - - New playlist - Ny afspilningsliste + + + No songs + Ingen sange + + + + + 1 song + 1 sang + + + + + %1 songs + %1 sange + + + + MusicListDataWidget + + + + + + + + + + + + No songs + Ingen sange + + + + + 1 album - 1 song + 1 album - 1 sang + + + + + + + %1 album - %2 songs + %1 album - %2 sange + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + 1 sang + + + + + + + %1 songs + %1 sange + + + + + + + No search results + Ingen søgeresultater + + + + + + All Music + Alt musik - + + + + + + + Time added + Tilføjelsestidspunkt + + + + + + + Album + Album + + + + + + + Artist + Kunstner + + + + + Title + Titel + + + + Play All + Afspil alle + + + + Artists + Kunstnere + + + + Albums + + + + + Custom + Brugerdefineret + + + + + + Search Results + + + + + Songs + Sange + + + + No result found + Ingen resultater fundet + + + + MusicListDialog + + + Play All + Afspil alle + + + + Shuffle + Bland + + + + MusicListInfoView + + + Play queue + Afspilningskø + + + + Add to new playlist + Tilføj til ny afspilningsliste + + + + Pause + Pause + + + Play Afspil - + Add to playlist Tilføj til afspilningsliste - + Display in file manager Vis i filhåndtering - + + Remove from playlist + Fjern fra afspilningsliste + + + + Delete from local disk + Slet fra lokal disk + + + Song info Sanginfo - + + + Cancel + Annuller + + + + Remove + Fjern + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + Slet + + + Are you sure you want to delete %1? - + Er du sikker på, at du vil slette %1? - - + + Are you sure you want to delete the selected %1 songs? - + Er du sikker på, at du vil slette de %1 valgte sange? - - Remove from playlist - Fjern fra afspilningsliste + + + The song files contained will also be deleted + De sangfiler som er i slettes også + + + MusicListItem - - Delete from local disk - Slet fra lokal disk + + Are you sure you want to delete this playlist? + Er du sikker på, at du vil slette afspilningslisten? - - Encoding - Kodning + + Cancel + Annuller + + + + Delete + Slet + + + + MusicListScrollArea + + + Library + Bibliotek + + + + Playlists + Afspilningsliste + + + + MusicListView + + + My Favorites + Mine favoritter - + + + Are you sure you want to delete this playlist? + Er du sikker på, at du vil slette afspilningslisten? + + + + Cancel Annuller - + + + + Delete Slet - - Deleting the current song will also delete the song files contained - Hvis den nuværende sang slettes vil det også slettes de indeholdte sangfiler + + + Pause + Pause + + + + + Play + Afspil + + + + + Rename + Omdøb + + + PlayListView - + Unknown artist Ukendt kunstner - + Unknown album Ukendt album - - - MusicListWidget - - No Music - Ingen musik + + Play queue + Afspilningskø - - No result found - Ingen resultater fundet + + musicResult + - - Play All - Afspil alle + + My favorites + Mine favoritter - - Time added - Tilføjelsestidspunkt + + Add to new playlist + Tilføj til ny afspilningsliste - - Title - Titel + + Pause + Pause - - Artist - Kunstner + + + Play + Afspil - - Album name - Albumnavn + + Add to playlist + Tilføj til afspilningsliste - - Custom - Brugerdefineret + + Display in file manager + Vis i filhåndtering - - - PlayListItem - - Are you sure you want to delete this playlist? - + Remove from playlist + Fjern fra afspilningsliste - - Delete - Slet + + Remove from play queue + + + + + Delete from local disk + Slet fra lokal disk + + + + Encoding + Kodning - + + Song info + Sanginfo + + + + Cancel Annuller - - - PlayListView - - - Play - Afspil + + Remove + Fjern - - - Rename - Omdøb + + Are you sure you want to remove %1? + - - + + Are you sure you want to remove the selected %1 songs? + + + + Delete Slet + + + Are you sure you want to delete %1? + Er du sikker på, at du vil slette %1? + + + + + Are you sure you want to delete the selected %1 songs? + Er du sikker på, at du vil slette de %1 valgte sange? + + + + + The song files contained will also be deleted + De sangfiler som er i slettes ogsåDe sangfiler som er i slettes også + + + + PlayListWidget + + + + No songs + Ingen sange + + + + No search results + Ingen søgeresultater + + + + Play Queue + Afspilningskø + + + + Empty + Tomt + + + + 1 song + 1 sang + + + + %1 songs + %1 sange + + + + Playlist + + + + Unknown album + Ukendt album + + + + + + Unknown artist + Ukendt kunstner + PlaylistManager - + New playlist Ny afspilningsliste - + + + + Albums + + + + + + + Artists + Kunstnere + + + + All Music Alt musik - + My favorites Mine favoritter - + Search result Søgresultat - - - PlaylistWidget - - New playlist - Ny afspilningsliste + + Play + Afspil + + + + Music + Musik QApplication - - Deepin Music - Deepin musik + + Music + Musik QObject - - Deepin Music - Deepin musik - - Minimize to system tray Minimer til systembakke - Exit Deepin Music - Afslut Deepin musik + Exit Music + Afslut Musik @@ -511,7 +1069,7 @@ Enable fade in/out - + Aktivér fade ind/ud @@ -570,20 +1128,150 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + Titel + + + + Artist + Kunstner + + + + Search + Søg + + + SearchResult - - - Search "%1" in Deepin Music - Søg efter "%1" i Deepin musik + + Music + Musik + + + + Artists + Kunstnere + + + + Albums + + + + + Shortcut + + + Play + Afspil + + + + Songs + Sange + + + + Playlists + Afspilningsliste + + + + Settings + Indstillinger + + + + Play/Pause + Afspil/pause + + + + Previous + Forrige + + + + Next + Næste + + + + Volume Up + Højere + + + + Volume Down + Lavere + + + + Mute + Lydløs + + + + Favorite + Favorit + + + + Unfavorite + Fjern fra favorit + + + + Song info + Sanginfo + + + + New playlist + Ny afspilningsliste + + + + Add music + Tilføj musik + + + + Rename playlist + Omdøb afspilningsliste + + + + Remove from playlist + Fjern fra afspilningsliste + + + + Help + Hjælp + + + + Display shortcuts + Vis genveje TitlebarWidget - + Search Søg - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_de_DE.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_de_DE.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_de_DE.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_de_DE.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,533 +0,0 @@ - - - Footer - - - Previous - - - - - Next - - - - - Play/Pause - - - - - Favorite - - - - - Lyrics - - - - - Repeat Playlist - - - - - Repeat Song - - - - - Unknown Title - - - - - - - Unknown artist - - - - - Play Mode - - - - - Playlist - - - - - Shuffle - - - - - ImportWidget - - - Add Music - - - - - - Scan - - - - - - %1 music directory or drag & drop music file to add music - - - - - Loading music, please wait... - - - - - InfoDialog - - - Title: - - - - - Artist: - - - - - Album: - - - - - Type: - - - - - Path: - - - - - Size: - - - - - Duration: - - - - - Unkonw artist - - - - - Unkonw album - - - - - LyricWidget - - - Search lyrics - - - - - Title - - - - - Artist - - - - - Search - - - - - Back - - - - - MainFrame - - - New playlist - - - - - Add music - - - - - Add music file - - - - - Settings - - - - - Deep color mode - - - - - About - - - - - Deepin Music Player is a local music player with beautiful design and simple functions. It supports viewing lyrics when playing, playing lossless music and customize playlist, etc. - - - - - Exit - - - - - File invalid or does not exist, failed to load! - - - - - Failed to import, no vaild music file found! - - - - - OK - - - - - Deepin Music - Deepin Musik - - - - Version: 3.0 - - - - - Help - - - - - Successfully added to "%1" - - - - - I got it - - - - - Music (%1) - - - - - MusicListView - - - New playlist - - - - - Play - - - - - Add to playlist - - - - - Display in file manager - - - - - Song info - - - - - Remove from playlist - - - - - Delete from local disk - - - - - Encoding - - - - - Cancel - - - - - Delete - - - - - Are you sure to delete %1? - - - - - - Are you sure to delete the selected %1 songs? - - - - - Deleting the current song will also delete the song files contained - - - - - Unknown artist - - - - - Unknown album - - - - - MusicListWidget - - - No Music - - - - - No result found - - - - - Play All - - - - - Time added - - - - - Title - - - - - Artist - - - - - Album name - - - - - Custom - - - - - PlayListItem - - - Delete - - - - - Are you sure to delete this playlist? - - - - - Cancel - - - - - PlayListView - - - - Play - - - - - - Rename - - - - - - Delete - - - - - PlaylistManager - - - New playlist - - - - - All Music - - - - - My favorites - - - - - Search result - - - - - PlaylistWidget - - - New playlist - - - - - QObject - - - Deepin Music - Deepin Musik - - - - Autoplay - - - - - Enable fade - - - - - Resume play from last position - - - - - Basic settings - - - - - Play - - - - - Shortcuts - - - - - Restore to default - - - - - Next - - - - - Play/Pause - - - - - Previous - - - - - Volume down - - - - - Volume up - - - - - SearchResult - - - - Search "%1" in Deepin Music - - - - - TitleBarWidget - - - Search - - - - \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_de.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_de.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_de.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_de.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,237 @@ - + + + CloseConfirmDialog - - Please select your operation - Bitte wählen Sie eine Aktion aus - - - + Exit Beenden - + Minimize to system tray In die Statusleiste minimieren - + Do not ask again - + Nicht erneut nachfragen + + + + Please select your operation + Bitte wählen Sie eine Aktion aus - + Cancel Abbrechen - - OK - OK + + Confirm + Bestätigen + + + + DequalizerDialog + + + Custom + Angepasst + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Standardeinstellungen wiederherstellen Footer - + + Unknown Title + Unbekannter Titel + + + + + + Unknown artist + Unbekannter Künstler + + + Previous - Vorheriger Titel + Zurück - + Next - Nächster Titel + Weiter - + Play/Pause Abspielen/Pausieren - + Favorite Favorit - + Lyrics Liedtexte - - Unknown Title - Unbekannter Titel - - - - - - Unknown artist - Unbekannter Künstler - - - + Play Mode Wiedergabemodus - - Playlist - Wiedergabeliste + + Play Queue + Wiedergabeliste abspielen - + List Loop Liste wiederholen - + Single Loop Einzelne Schleife - + Shuffle Zufallswiedergabe @@ -100,24 +239,29 @@ ImportWidget - - Add folder - Ordner hinzufügen + + Open Folder + Ordner öffnen - - + + Add Music + Musik hinzufügen + + + + Scan Musik erkennen - - - %1 music directory or drag & drop music file to add music - %1 Musikverzeichnis oder per Drag & Drop Musikdatei hinzufügen + + + %1 music directory or drag music files here + %1 Musikverzeichnis oder Musikdateien hierher ziehen - + Loading music, please wait... Musik wird geladen, bitte warten... @@ -125,55 +269,60 @@ InfoDialog - + + Basic info + Basisinformationen + + + Title: Titel: - + Artist: Künstler: - + Album: Album: - + Type: Typ: - + + Size: + Größe: + + + + Duration: + Dauer: + + + Path: Pfad: - + Unknown artist Unbekannter Künstler - + Unknown album Unbekanntes Album - - - Size: - Größe: - - - - Duration: - Dauer: - LoadWidget - + Loading... Ladevorgang... @@ -183,7 +332,7 @@ Find lyrics - + Liedtexte suchen @@ -201,307 +350,716 @@ Suchen - + Back Zurück - MainFrame + MUsicLyricWidget - - New playlist - Neue Wiedergabeliste + + No lyrics yet + + + + MainFrame - - Settings - Einstellungen + + Add playlist + Wiedergabeliste hinzufügen - - - Exit - Beenden + + Add music + Musik hinzufügen - - Add folder - Ordner hinzufügen + + Equalizer + - - Add file - Datei hinzufügen + + Settings + Einstellungen - + Dark theme - Dunkles Theme + Dunkles Thema + + + + + Exit + Beenden + + + + Music is a local music player with beautiful design and simple functions. + Musik ist ein lokaler Musikplayer mit schönem Design und einfachen Funktionen. - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + + + + + + Music + Musik - + Play/Pause Wiedergeben/Pausieren - + Previous Vorherige - - Invalid or non-existent file - Ungültige oder nicht vorhandene Datei + + Next + Next - - Failed to import, no vaild music file found! - Import fehlgeschlagen, keine gültige Musikdatei gefunden! + + Successfully added to "%1" + Erfolgreich zu "%1" hinzugefügt - - All music - Gesamte Playlist + + Already added to the playlist + Bereits zur Wiedergabeliste hinzugefügt - - + + 1 song added + 1 Lied hinzugefügt + + + + %1 songs added + %1 Lieder hinzugefügt + + + + File is invalid or does not exist, load failed + Datei ist ungültig oder existiert nicht, Laden fehlgeschlagen + + + + OK OK - - Successfully added to "%1" - Erfolgreich zu "%1" hinzugefügt + + Import failed, no valid music file found + Import fehlgeschlagen, keine gültige Musikdatei gefunden - - Next - Next + + All music + Gesamte Musik - MusicListView + MusicListDataDelegate - - New playlist - Neue Wiedergabeliste + + + No songs + Keine Lieder + + + + + 1 song + 1 Lied + + + + + %1 songs + %1 Lieder + + + + MusicListDataWidget + + + + + + + + + + + + No songs + Keine Lieder + + + + + 1 album - 1 song + 1 Album - 1 Lied + + + + + + + %1 album - %2 songs + %1 Album - %2 Lieder + + + + + %1 albums - %2 songs + %1 Alben - %2 Lieder + + + + + 1 artist - 1 song + 1 Künstler-1 Lied + + + + + %1 artist - %2 songs + %1 Künstler - %2 Lieder + + + + + %1 artists - %2 songs + %1 Künstler - %2 Lieder + + + + + 1 song + 1 Lied + + + + + + + %1 songs + %1 Lieder + + + + + + + No search results + Keine Suchergebnisse + + + + + + All Music + Gesamte Musik + + + + + + + + + Time added + Zeit hinzugefügt + + + + + + + Album + Album + + + + + + + Artist + Künstler + + + + + Title + Titel + + + + Play All + Alle Abspielen + + + + Artists + Künstler + + + + Albums + Alben + + + + Custom + Angepasst + + + + + + Search Results + Suchergebnisse + + + + Songs + Lieder + + + + No result found + Kein Ergebnis gefunden + + + MusicListDialog + + + Play All + Alle Abspielen + + + + Shuffle + Zufallswiedergabe + + + + MusicListInfoView - + + Play queue + Wiedergabeliste abspielen + + + + Add to new playlist + Zu neuer Wiedergabeliste hinzufügen + + + + Pause + Pausieren + + + Play Wiedergeben - + Add to playlist Zur Wiedergabeliste hinzufügen - + Display in file manager In Dateiverwaltung anzeigen - + + Remove from playlist + Aus Wiedergabeliste entfernen + + + + Delete from local disk + Von lokalem Datenträger löschen + + + Song info Songinfo - + + + Cancel + Abbrechen + + + + Remove + Entfernen + + + + Are you sure you want to remove %1? + Sind Sie sicher, dass Sie %1 entfernen möchten? + + + + Are you sure you want to remove the selected %1 songs? + Sind Sie sicher, dass Sie die ausgewählten %1 Lieder entfernen möchten? + + + + Delete + Löschen + + + Are you sure you want to delete %1? - + Sind Sie sicher, dass Sie %1 löschen möchten? - - + + Are you sure you want to delete the selected %1 songs? - + Sind Sie sicher, dass Sie die ausgewählten %1 Lieder löschen möchten? - - Remove from playlist - Aus Wiedergabeliste entfernen + + + The song files contained will also be deleted + Die enthaltenen Lieder werden ebenfalls gelöscht + + + MusicListItem - - Delete from local disk - Von lokalem Datenträger löschen + + Are you sure you want to delete this playlist? + Sind Sie sicher, dass Sie diese Wiedergabeliste löschen möchten? - - Encoding - Kodierung + + Cancel + Abbrechen + + + + Delete + Löschen + + + + MusicListScrollArea + + + Library + Bibliothek + + + + Playlists + Wiedergabelisten + + + + MusicListView + + + My Favorites + Meine Favoriten + + + + + Are you sure you want to delete this playlist? + Sind Sie sicher, dass Sie diese Wiedergabeliste löschen möchten? - + + Cancel Abbrechen - + + + + Delete Löschen - - Deleting the current song will also delete the song files contained - Wird der aktuelle Song gelöscht, wird auch die enthaltene Songdatei entfernt + + + Pause + Pausieren - + + + Play + Wiedergeben + + + + + Rename + Umbenennen + + + + PlayListView + + Unknown artist Unbekannter Künstler - + Unknown album Unbekanntes Album - - - MusicListWidget - - No Music - Keine Musik + + Play queue + Wiedergabeliste abspielen - - No result found - Kein Ergebnis gefunden + + musicResult + - - Play All - Alle Abspielen + + My favorites + Meine Favoriten - - Time added - Zeit hinzugefügt + + Add to new playlist + Zu neuer Wiedergabeliste hinzufügen - - Title - Titel + + Pause + Pausieren - - Artist - Künstler + + + Play + Wiedergeben - - Album name - Albumname + + Add to playlist + Zur Wiedergabeliste hinzufügen - - Custom - Angepasst + + Display in file manager + In Dateiverwaltung anzeigen - - - PlayListItem - - Are you sure you want to delete this playlist? - + Remove from playlist + Aus Wiedergabeliste entfernen - - Delete - Löschen + + Remove from play queue + + + + + Delete from local disk + Von lokalem Datenträger löschen - + + Encoding + Kodierung + + + + Song info + Songinfo + + + + Cancel Abbrechen - - - PlayListView - - - Play - Wiedergeben + + Remove + Entfernen - - - Rename - Umbenennen + + Are you sure you want to remove %1? + Sind Sie sicher, dass Sie %1 entfernen möchten? - - + + Are you sure you want to remove the selected %1 songs? + Sind Sie sicher, dass Sie die ausgewählten %1 Lieder entfernen möchten? + + + Delete Löschen + + + Are you sure you want to delete %1? + Sind Sie sicher, dass Sie %1 löschen möchten? + + + + + Are you sure you want to delete the selected %1 songs? + Sind Sie sicher, dass Sie die ausgewählten %1 Lieder löschen möchten? + + + + + The song files contained will also be deleted + Die enthaltenen Lieder werden ebenfalls gelöscht + + + + PlayListWidget + + + + No songs + Keine Lieder + + + + No search results + Keine Suchergebnisse + + + + Play Queue + Wiedergabeliste abspielen + + + + Empty + Leeren + + + + 1 song + 1 Lied + + + + %1 songs + %1 Lieder + + + + Playlist + + + + Unknown album + Unbekanntes Album + + + + + + Unknown artist + Unbekannter Künstler + PlaylistManager - + New playlist Neue Wiedergabeliste - + + + + Albums + Alben + + + + + + Artists + Künstler + + + + All Music - Alle Musik + Gesamte Musik - + My favorites Meine Favoriten - + Search result Suchergebnis - - - PlaylistWidget - - New playlist - Neue Wiedergabeliste + + Play + Wiedergeben + + + + Music + Musik QApplication - - Deepin Music - Deepin Musik + + Music + Musik QObject - - Deepin Music - Deepin Musik - - Minimize to system tray In die Statusleiste minimieren - Exit Deepin Music - Deepin Musik beenden + Exit Music + Musik beenden @@ -511,7 +1069,7 @@ Enable fade in/out - + Ein-/Ausblenden aktivieren @@ -570,20 +1128,150 @@ + SearchLyricsWidget + + + Find Lyrics + Liedtexte suchen + + + + Title + Titel + + + + Artist + Künstler + + + + Search + Suchen + + + SearchResult - - - Search "%1" in Deepin Music - Suche nach "%1" in Deepin Musik + + Music + Musik + + + + Artists + Künstler + + + + Albums + Alben + + + + Shortcut + + + Play + Wiedergeben + + + + Songs + Lieder + + + + Playlists + Wiedergabelisten + + + + Settings + Einstellungen + + + + Play/Pause + Abspielen/Pausieren + + + + Previous + Zurück + + + + Next + Weiter + + + + Volume Up + Lautstärke erhöhen + + + + Volume Down + Lautstärke verringern + + + + Mute + Stummschalten + + + + Favorite + Favorit + + + + Unfavorite + Entfavorisieren + + + + Song info + Songinfo + + + + New playlist + Neue Wiedergabeliste + + + + Add music + Musik hinzufügen + + + + Rename playlist + Wiedergabeliste umbenennen + + + + Remove from playlist + Aus Wiedergabeliste entfernen + + + + Help + Hilfe + + + + Display shortcuts + Tastenkürzel anzeigen TitlebarWidget - + Search Suchen - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_el_GR.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_el_GR.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_el_GR.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_el_GR.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,533 +0,0 @@ - - - Footer - - - Previous - - - - - Next - - - - - Play/Pause - - - - - Favorite - - - - - Lyrics - - - - - Repeat Playlist - - - - - Repeat Song - - - - - Unknown Title - - - - - - - Unknown artist - - - - - Play Mode - - - - - Playlist - - - - - Shuffle - - - - - ImportWidget - - - Add Music - - - - - - Scan - - - - - - %1 music directory or drag & drop music file to add music - - - - - Loading music, please wait... - - - - - InfoDialog - - - Title: - - - - - Artist: - - - - - Album: - - - - - Type: - - - - - Path: - - - - - Size: - - - - - Duration: - - - - - Unkonw artist - - - - - Unkonw album - - - - - LyricWidget - - - Search lyrics - - - - - Title - - - - - Artist - - - - - Search - - - - - Back - - - - - MainFrame - - - New playlist - - - - - Add music - - - - - Add music file - - - - - Settings - - - - - Deep color mode - - - - - About - - - - - Deepin Music Player is a local music player with beautiful design and simple functions. It supports viewing lyrics when playing, playing lossless music and customize playlist, etc. - - - - - Exit - - - - - File invalid or does not exist, failed to load! - - - - - Failed to import, no vaild music file found! - - - - - OK - - - - - Deepin Music - Deepin Αναπαραγωγή Μουσικής - - - - Version: 3.0 - - - - - Help - - - - - Successfully added to "%1" - - - - - I got it - - - - - Music (%1) - - - - - MusicListView - - - New playlist - - - - - Play - - - - - Add to playlist - - - - - Display in file manager - - - - - Song info - - - - - Remove from playlist - - - - - Delete from local disk - - - - - Encoding - - - - - Cancel - - - - - Delete - - - - - Are you sure to delete %1? - - - - - - Are you sure to delete the selected %1 songs? - - - - - Deleting the current song will also delete the song files contained - - - - - Unknown artist - - - - - Unknown album - - - - - MusicListWidget - - - No Music - - - - - No result found - - - - - Play All - - - - - Time added - - - - - Title - - - - - Artist - - - - - Album name - - - - - Custom - - - - - PlayListItem - - - Delete - - - - - Are you sure to delete this playlist? - - - - - Cancel - - - - - PlayListView - - - - Play - - - - - - Rename - - - - - - Delete - - - - - PlaylistManager - - - New playlist - - - - - All Music - - - - - My favorites - - - - - Search result - - - - - PlaylistWidget - - - New playlist - - - - - QObject - - - Deepin Music - Deepin Αναπαραγωγή Μουσικής - - - - Autoplay - - - - - Enable fade - - - - - Resume play from last position - - - - - Basic settings - - - - - Play - - - - - Shortcuts - - - - - Restore to default - - - - - Next - - - - - Play/Pause - - - - - Previous - - - - - Volume down - - - - - Volume up - - - - - SearchResult - - - - Search "%1" in Deepin Music - - - - - TitleBarWidget - - - Search - - - - \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_el.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_el.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_el.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_el.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,179 +1,340 @@ - + + + CloseConfirmDialog - + Please select your operation - + Παρακαλώ επιλέξτε την ενέργειά σας - + Exit Έξοδος - + Minimize to system tray - + Ελαχιστοποίηση στη γραμμή εργασιών - + Do not ask again - + Μην ερωτήσεις ξανά - + Cancel Ακύρωση - + + Confirm + + + OK - OK + OK + + + + DequalizerDialog + + + Custom + Προσαρμογή + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Ανάκτηση Προεπιλογών Footer - + Previous Προηγούμενο - + Next Επόμενο - + Play/Pause Αναπαραγωγή/Παύση - + Favorite - + Αγαπημένα - + Lyrics Στίχοι - + + Play Queue + + + + Unknown Title - + Άγνωστος Τίτλος - - - + + + Unknown artist Άγνωστος καλλιτέχνης - + Play Mode - + Λειτουργία αναπαραγωγής - Playlist - Λίστα αναπαραγωγής + Λίστα αναπαραγωγής - + List Loop - + - + Single Loop - + - + Shuffle - + ImportWidget - Add folder - Προσθήκη φακέλου + Προσθήκη φακέλου + + + + Open Folder + - - + + Add Music + + + + + Scan Σάρωση - - - %1 music directory or drag & drop music file to add music - + + + %1 music directory or drag music files here + - + Loading music, please wait... - + Φόρτωση μουσικής, παρακαλώ περιμένετε... InfoDialog - + Title: Τίτλος: - + Artist: Καλλιτέχνης: - + Album: - + Άλμπουμ: - + Type: Τύπος: - + Path: Διαδρομή: - + Unknown artist Άγνωστος καλλιτέχνης - + Unknown album Άγνωστο άλμπουμ - + Size: Μέγεθος: - + + Basic info + + + + Duration: - + Διάρκεια: LoadWidget - + Loading... Φόρτωση... @@ -183,7 +344,7 @@ Find lyrics - + Αναζήτηση στίχων @@ -201,327 +362,869 @@ Αναζήτηση - + Back Πίσω + MUsicLyricWidget + + + No lyrics yet + + + + MainFrame - New playlist - + Νέα λίστα αναπαραγωγής - + Settings Ρυθμίσεις - - + + Exit Έξοδος - Add folder - Προσθήκη φακέλου + Προσθήκη φακέλου - Add file - Προσθήκη αρχείου + Προσθήκη αρχείου - + Dark theme - + Σκούρο θέμα - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + Η Μουσική Deepin είναι ένα όμορφο και εύκολο πρόγραμμα αναπαραγωγής μουσικής όπου παίζει τοπικά αρχεία ήχου. Υποστηρίζει προβολή στίχων κατά τη διάρκεια αναπαραγωγής, χωρίς απώλειες ήχου και προσαρμοσμένη λίστα αναπαραγωγής κτλ. - + Play/Pause Αναπαραγωγή/Παύση - + Previous Προηγούμενο - Invalid or non-existent file - + Άκυρο ή μη-υπάρχων αρχείο - Failed to import, no vaild music file found! - + Αποτυχία εισαγωγής, δεν βρέθηκε έγκυρο αρχείο μουσικής! - + All music - + Όλη η μουσική - - + + OK OK - + + Add playlist + + + + + Add music + + + + + Equalizer + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" - + Προστέθηκε με επιτυχία στο "%1" + + + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + - + Next Επόμενο + MusicListDataDelegate + + + + No songs + + + + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + Όλη η μουσική + + + + + + + + + Time added + + + + + + + + Album + + + + + + + + Artist + Καλλιτέχνης + + + + + Title + Τίτλος + + + + Play All + Αναπαραγωγή Όλων + + + + Artists + + + + + Albums + + + + + Custom + Προσαρμογή + + + + + + Search Results + + + + + Songs + + + + + No result found + + + + + MusicListDialog + + + Play All + Αναπαραγωγή Όλων + + + + Shuffle + + + + + MusicListInfoView + + New playlist + Νέα λίστα αναπαραγωγής + + + + Play queue + + + + + Add to new playlist + + + + + Pause + + + + + Play + Αναπαραγωγή + + + + Add to playlist + Προσθήκη σε λίστα αναπαραγωγής + + + + Display in file manager + Προβολή στη διαχείριση αρχείων + + + + Remove from playlist + Αφαίρεση από τη λίστα αναπαραγωγής + + + + Delete from local disk + Διαγραφή από τον τοπικό δίσκο + + + + Song info + Πληροφορίες τραγουδιού + + + + + Cancel + Ακύρωση + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + Διαγραφή + + + + Are you sure you want to delete %1? + Είστε βέβαιος ότι θέλετε να διαγράψετε %1; + + + + + Are you sure you want to delete the selected %1 songs? + Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το %1 τραγουδιών; + + + + + The song files contained will also be deleted + + + + + MusicListItem + + + Are you sure you want to delete this playlist? + + + + + Cancel + Ακύρωση + + + + Delete + Διαγραφή + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + MusicListView - New playlist - + Νέα λίστα αναπαραγωγής - + + Play Αναπαραγωγή - Add to playlist - + Προσθήκη σε λίστα αναπαραγωγής - Display in file manager - + Προβολή στη διαχείριση αρχείων - Song info - + Πληροφορίες τραγουδιού - Are you sure you want to delete %1? - + Είστε βέβαιος ότι θέλετε να διαγράψετε %1; - - Are you sure you want to delete the selected %1 songs? - + Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το %1 τραγουδιών; - Remove from playlist - Αφαίρεση από τη λίστα αναπαραγωγής + Αφαίρεση από τη λίστα αναπαραγωγής - Delete from local disk - + Διαγραφή από τον τοπικό δίσκο - Encoding - Κωδικοποίηση + Κωδικοποίηση + + + + My Favorites + - + + + Are you sure you want to delete this playlist? + + + + + Cancel Ακύρωση - + + + + Delete Διαγραφή - - Deleting the current song will also delete the song files contained - + + + Pause + + + + + + Rename + Μετονομασία - Unknown artist - Άγνωστος καλλιτέχνης + Άγνωστος καλλιτέχνης - Unknown album - Άγνωστο άλμπουμ + Άγνωστο άλμπουμ MusicListWidget - - No Music - - - - - No result found - - - - Play All - Αναπαραγωγή Όλων + Αναπαραγωγή Όλων - - Time added - - - - Title - Τίτλος + Τίτλος - Artist - Καλλιτέχνης - - - - Album name - + Καλλιτέχνης - Custom - Προσαρμογή + Προσαρμογή PlayListItem - - Are you sure you want to delete this playlist? - - - - Delete - Διαγραφή + Διαγραφή - Cancel - Ακύρωση + Ακύρωση PlayListView - - + New playlist + Νέα λίστα αναπαραγωγής + + + + Play queue + + + + + musicResult + + + + + My favorites + + + + + Add to new playlist + + + + + Pause + + + + + Play Αναπαραγωγή - - + + Add to playlist + Προσθήκη σε λίστα αναπαραγωγής + + + + Display in file manager + Προβολή στη διαχείριση αρχείων + + + Remove from playlist + Αφαίρεση από τη λίστα αναπαραγωγής + + + + Remove from play queue + + + + + Delete from local disk + Διαγραφή από τον τοπικό δίσκο + + + + Encoding + Κωδικοποίηση + + + + Song info + Πληροφορίες τραγουδιού + + + + + Cancel + Ακύρωση + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + Είστε βέβαιος ότι θέλετε να διαγράψετε %1; + + + + + Are you sure you want to delete the selected %1 songs? + Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το %1 τραγουδιών; + + + + + The song files contained will also be deleted + + + Rename - Μετονομασία + Μετονομασία - - + Delete Διαγραφή + + + Unknown artist + Άγνωστος καλλιτέχνης + + + + Unknown album + Άγνωστο άλμπουμ + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + Άγνωστο άλμπουμ + + + + + + Unknown artist + Άγνωστος καλλιτέχνης + PlaylistManager - + New playlist - + Νέα λίστα αναπαραγωγής + + + Artist + Καλλιτέχνης + + + + + + Albums + + + + + + + Artists + - + + All Music - + Όλη η μουσική - + My favorites - + - + Search result - + + + + + Play + Αναπαραγωγή + + + + Music + PlaylistWidget - New playlist - + Νέα λίστα αναπαραγωγής QApplication - Deepin Music - Deepin Mουσική + Deepin Mουσική + + + + Music + QObject - Deepin Music - Deepin Mουσική + Deepin Mουσική Minimize to system tray - + Ελαχιστοποίηση στη γραμμή εργασιών - Exit Deepin Music - + Έξοδος Μουσικής Deepin + + + + Exit Music + Autoplay - + Αυτόματη αναπαραγωγή Enable fade in/out - + Remember playback position - + Close Main Window - + @@ -570,20 +1273,150 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + Τίτλος + + + + Artist + Καλλιτέχνης + + + + Search + Αναζήτηση + + + SearchResult - - - Search "%1" in Deepin Music - + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + Αναπαραγωγή + + + + Songs + + + + + Playlists + + + + + Settings + Ρυθμίσεις + + + + Play/Pause + Αναπαραγωγή/Παύση + + + + Previous + Προηγούμενο + + + + Next + Επόμενο + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + Αγαπημένα + + + + Unfavorite + + + + + Song info + Πληροφορίες τραγουδιού + + + + New playlist + Νέα λίστα αναπαραγωγής + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + Αφαίρεση από τη λίστα αναπαραγωγής + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search Αναζήτηση - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_en_AU.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_en_AU.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_en_AU.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_en_AU.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,179 +1,332 @@ - + + + CloseConfirmDialog - + Please select your operation - + - + Exit Exit - + Minimize to system tray - + - + Do not ask again - + - + Cancel Cancel - + + Confirm + + + OK - OK + OK + + + + DequalizerDialog + + + Custom + Custom + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Footer - + Previous Previous - + Next Next - + Play/Pause Play/Pause - + Favorite - + - + Lyrics - + + + + + Play Queue + - + Unknown Title - + - - - + + + Unknown artist - + - + Play Mode - - - - - Playlist - + - + List Loop - + - + Single Loop - + - + Shuffle - + ImportWidget - - Add folder - + + Open Folder + - - + + Add Music + + + + + Scan - + - - - %1 music directory or drag & drop music file to add music - + + + %1 music directory or drag music files here + - + Loading music, please wait... - + InfoDialog - + Title: - + - + Artist: - + - + Album: - + - + Type: Type: - + Path: - + - + Unknown artist - + - + Unknown album - + - + Size: Size: - + + Basic info + + + + Duration: - + LoadWidget - + Loading... Loading... @@ -183,17 +336,17 @@ Find lyrics - + Title - + Artist - + @@ -201,347 +354,778 @@ Search - + Back - + - MainFrame + MUsicLyricWidget - - New playlist - + + No lyrics yet + + + + MainFrame - + Settings Settings - - + + Exit Exit - - Add folder - - - - - Add file - - - - + Dark theme - + - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + + Equalizer + - + Play/Pause Play/Pause - + Previous Previous - - Invalid or non-existent file - + + All music + - - Failed to import, no vaild music file found! - + + + OK + OK - - All music - + + Add playlist + - - - OK - OK + + Add music + - + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" - + + + + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + - + Next Next - MusicListView + MusicListDataDelegate - - New playlist - + + + No songs + - - Play - + + + 1 song + - - Add to playlist - + + + %1 songs + + + + MusicListDataWidget - - Display in file manager - + + + + + + + + + + + No songs + - - Song info - + + + 1 album - 1 song + - - Are you sure you want to delete %1? - + + + + + %1 album - %2 songs + - - - Are you sure you want to delete the selected %1 songs? - + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + + + + + + + + + + Time added + + + + + + + + Album + + + + + + + + Artist + - + + + Title + + + + + Play All + + + + + Artists + + + + + Albums + + + + + Custom + Custom + + + + + + Search Results + + + + + Songs + + + + + No result found + + + + + MusicListDialog + + + Play All + + + + + Shuffle + + + + + MusicListInfoView + + + Play queue + + + + + Add to new playlist + + + + + Pause + + + + + Play + + + + + Add to playlist + + + + + Display in file manager + + + + Remove from playlist - + - + Delete from local disk - + - - Encoding - + + Song info + - + + Cancel - Cancel + Cancel - + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + Delete - Delete + Delete - - Deleting the current song will also delete the song files contained - + + Are you sure you want to delete %1? + - - Unknown artist - + + + Are you sure you want to delete the selected %1 songs? + - - Unknown album - + + + The song files contained will also be deleted + - MusicListWidget + MusicListItem - - No Music - + + Are you sure you want to delete this playlist? + - - No result found - + + Cancel + Cancel - - Play All - + + Delete + Delete + + + MusicListScrollArea - - Time added - + + Library + - - Title - + + Playlists + + + + + MusicListView + + + + Play + - - Artist - + + + Are you sure you want to delete this playlist? + - - Album name - + + My Favorites + - - Custom - Custom + + + Cancel + Cancel + + + + + + + Delete + Delete + + + + + Pause + + + + + + Rename + - PlayListItem + MusicListWidget - - Are you sure you want to delete this playlist? - + Custom + Custom + + + PlayListItem - Delete - Delete + Delete - Cancel - Cancel + Cancel PlayListView - - + + Play queue + + + + + My favorites + + + + + Add to new playlist + + + + + Pause + + + + + Play - + - - - Rename - + + musicResult + + + + + Add to playlist + + + + + Display in file manager + + + + + Remove from play queue + + + + + Delete from local disk + - - + + Encoding + + + + + Song info + + + + + + Cancel + Cancel + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + + Delete Delete + + + Unknown artist + + + + + Unknown album + + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + + + + + + + Unknown artist + + PlaylistManager - + New playlist - + + + + + + + Albums + - + + + + Artists + + + + + All Music - + - + My favorites - + - + Search result - + - - - PlaylistWidget - - New playlist - + + Play + + + + + Music + QApplication - Deepin Music - Deepin Music + Deepin Music + + + + Music + QObject - Deepin Music - Deepin Music + Deepin Music Minimize to system tray - + - Exit Deepin Music - + Exit Music + Autoplay - + Enable fade in/out - + Remember playback position - + Close Main Window - + Basic - + Play - + Shortcuts - + Restore Defaults - + @@ -570,20 +1154,150 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + + + + + Artist + + + + + Search + Search + + + SearchResult - - - Search "%1" in Deepin Music - + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + + + + + Songs + + + + + Playlists + + + + + Settings + Settings + + + + Play/Pause + Play/Pause + + + + Previous + Previous + + + + Next + Next + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + + + + + Unfavorite + + + + + Song info + + + + + New playlist + + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search Search - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_en_US.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_en_US.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_en_US.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_en_US.ts 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,1277 @@ + + + + + CloseConfirmDialog + + + Exit + Exit + + + + Minimize to system tray + Minimize to system tray + + + + Do not ask again + Do not ask again + + + + Please select your operation + Please select your operation + + + + Cancel + Cancel + + + + Confirm + Confirm + + + + DequalizerDialog + + + Custom + Custom + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Restore Defaults + + + + Footer + + + Unknown Title + Unknown Title + + + + + + Unknown artist + Unknown artist + + + + Previous + Previous + + + + Next + Next + + + + Play/Pause + Play/Pause + + + + Favorite + Favorite + + + + Lyrics + Lyrics + + + + Play Mode + Play Mode + + + + Play Queue + Play Queue + + + + List Loop + List Loop + + + + Single Loop + Single Loop + + + + Shuffle + Shuffle + + + + ImportWidget + + + Open Folder + Open Folder + + + + Add Music + Add Music + + + + + Scan + Scan + + + + + %1 music directory or drag music files here + %1 music directory or drag music files here + + + + Loading music, please wait... + Loading music, please wait... + + + + InfoDialog + + + Basic info + Basic info + + + + Title: + Title: + + + + Artist: + Artist: + + + + Album: + Album: + + + + Type: + Type: + + + + Size: + Size: + + + + Duration: + Duration: + + + + Path: + Path: + + + + Unknown artist + Unknown artist + + + + Unknown album + Unknown album + + + + LoadWidget + + + Loading... + Loading... + + + + LyricWidget + + + Find lyrics + Find lyrics + + + + Title + Title + + + + Artist + Artist + + + + Search + Search + + + + Back + Back + + + + MUsicLyricWidget + + + No lyrics yet + + + + + MainFrame + + + Add playlist + Add playlist + + + + Add music + Add music + + + + Equalizer + + + + + Settings + Settings + + + + Dark theme + Dark theme + + + + + Exit + Exit + + + + Music is a local music player with beautiful design and simple functions. + Music is a local music player with beautiful design and simple functions. + + + + + + + + Music + Music + + + + Play/Pause + Play/Pause + + + + Previous + Previous + + + + Next + Next + + + + Successfully added to "%1" + Successfully added to "%1" + + + + Already added to the playlist + Already added to the playlist + + + + 1 song added + 1 song added + + + + %1 songs added + %1 songs added + + + + File is invalid or does not exist, load failed + File is invalid or does not exist, load failed + + + + + OK + OK + + + + Import failed, no valid music file found + Import failed, no valid music file found + + + + All music + All music + + + + MusicListDataDelegate + + + + No songs + No songs + + + + + 1 song + 1 song + + + + + %1 songs + %1 songs + + + + MusicListDataWidget + + + + + + + + + + + + No songs + No songs + + + + + 1 album - 1 song + 1 album - 1 song + + + + + + + %1 album - %2 songs + %1 album - %2 songs + + + + + %1 albums - %2 songs + %1 albums - %2 songs + + + + + 1 artist - 1 song + 1 artist - 1 song + + + + + %1 artist - %2 songs + %1 artist - %2 songs + + + + + %1 artists - %2 songs + %1 artists - %2 songs + + + + + 1 song + 1 song + + + + + + + %1 songs + %1 songs + + + + + + + No search results + No search results + + + + + + All Music + All Music + + + + + + + + + Time added + Time added + + + + + + + Album + Album + + + + + + + Artist + Artist + + + + + Title + Title + + + + Play All + Play All + + + + Artists + Artists + + + + Albums + Albums + + + + Custom + Custom + + + + + + Search Results + Search Results + + + + Songs + Songs + + + + No result found + No result found + + + + MusicListDialog + + + Play All + Play All + + + + Shuffle + Shuffle + + + + MusicListInfoView + + + Play queue + Play queue + + + + Add to new playlist + Add to new playlist + + + + Pause + Pause + + + + Play + Play + + + + Add to playlist + Add to playlist + + + + Display in file manager + Display in file manager + + + + Remove from playlist + Remove from playlist + + + + Delete from local disk + Delete from local disk + + + + Song info + Song info + + + + + Cancel + Cancel + + + + Remove + Remove + + + + Are you sure you want to remove %1? + Are you sure you want to remove %1? + + + + Are you sure you want to remove the selected %1 songs? + Are you sure you want to remove the selected %1 songs? + + + + Delete + Delete + + + + Are you sure you want to delete %1? + Are you sure you want to delete %1? + + + + + Are you sure you want to delete the selected %1 songs? + Are you sure you want to delete the selected %1 songs? + + + + + The song files contained will also be deleted + The song files contained will also be deleted + + + + MusicListItem + + + Are you sure you want to delete this playlist? + Are you sure you want to delete this playlist? + + + + Cancel + Cancel + + + + Delete + Delete + + + + MusicListScrollArea + + + Library + Library + + + + Playlists + Playlists + + + + MusicListView + + + My Favorites + My Favorites + + + + + Are you sure you want to delete this playlist? + Are you sure you want to delete this playlist? + + + + + Cancel + Cancel + + + + + + + Delete + Delete + + + + + Pause + Pause + + + + + Play + Play + + + + + Rename + Rename + + + + PlayListView + + + Unknown artist + Unknown artist + + + + Unknown album + Unknown album + + + + Play queue + Play queue + + + + musicResult + + + + + My favorites + My favorites + + + + Add to new playlist + Add to new playlist + + + + Pause + Pause + + + + + Play + Play + + + + Add to playlist + Add to playlist + + + + Display in file manager + Display in file manager + + + Remove from playlist + Remove from playlist + + + + Remove from play queue + + + + + Delete from local disk + Delete from local disk + + + + Encoding + Encoding + + + + Song info + Song info + + + + + Cancel + Cancel + + + + Remove + Remove + + + + Are you sure you want to remove %1? + Are you sure you want to remove %1? + + + + Are you sure you want to remove the selected %1 songs? + Are you sure you want to remove the selected %1 songs? + + + + Delete + Delete + + + + Are you sure you want to delete %1? + Are you sure you want to delete %1? + + + + + Are you sure you want to delete the selected %1 songs? + Are you sure you want to delete the selected %1 songs? + + + + + The song files contained will also be deleted + The song files contained will also be deleted + + + + PlayListWidget + + + + No songs + No songs + + + + No search results + No search results + + + + Play Queue + Play Queue + + + + Empty + Empty + + + + 1 song + 1 song + + + + %1 songs + %1 songs + + + + Playlist + + + + Unknown album + Unknown album + + + + + + Unknown artist + Unknown artist + + + + PlaylistManager + + + New playlist + New playlist + + + + + + Albums + Albums + + + + + + Artists + Artists + + + + + All Music + All Music + + + + My favorites + My favorites + + + + Search result + Search result + + + + Play + Play + + + + Music + Music + + + + QApplication + + + Music + Music + + + + QObject + + + Minimize to system tray + Minimize to system tray + + + + Exit Music + Exit Music + + + + Autoplay + Autoplay + + + + Enable fade in/out + Enable fade in/out + + + + Remember playback position + Remember playback position + + + + Close Main Window + Close Main Window + + + + Basic + Basic + + + + Play + Play + + + + Shortcuts + Shortcuts + + + + Restore Defaults + Restore Defaults + + + + Next + Next + + + + Play/Pause + Play/Pause + + + + Previous + Previous + + + + Volume down + Volume down + + + + Volume up + Volume up + + + + SearchLyricsWidget + + + Find Lyrics + Find Lyrics + + + + Title + Title + + + + Artist + Artist + + + + Search + Search + + + + SearchResult + + + Music + Music + + + + Artists + Artists + + + + Albums + Albums + + + + Shortcut + + + Play + Play + + + + Songs + Songs + + + + Playlists + Playlists + + + + Settings + Settings + + + + Play/Pause + Play/Pause + + + + Previous + Previous + + + + Next + Next + + + + Volume Up + Volume Up + + + + Volume Down + Volume Down + + + + Mute + Mute + + + + Favorite + Favorite + + + + Unfavorite + Unfavorite + + + + Song info + Song info + + + + New playlist + New playlist + + + + Add music + Add music + + + + Rename playlist + Rename playlist + + + + Remove from playlist + Remove from playlist + + + + Help + Help + + + + Display shortcuts + Display shortcuts + + + + TitlebarWidget + + + Search + Search + + + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_eo.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_eo.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_eo.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_eo.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,179 +1,340 @@ - + + + CloseConfirmDialog - + Please select your operation - + - + Exit Eliri - + Minimize to system tray - + - + Do not ask again - + - + Cancel Nuligi - + + Confirm + + + OK - OK + OK + + + + DequalizerDialog + + + Custom + Personigo + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Footer - + Previous Antaŭa - + Next Sekva - + Play/Pause - + - + Favorite - + - + Lyrics - + + + + + Play Queue + - + Unknown Title - + - - - + + + Unknown artist - + - + Play Mode - + - Playlist - Ludilisto + Ludilisto - + List Loop - + - + Single Loop - + - + Shuffle - + ImportWidget - Add folder - Aldoni dosierujon + Aldoni dosierujon + + + + Open Folder + - - + + Add Music + + + + + Scan - + - - - %1 music directory or drag & drop music file to add music - + + + %1 music directory or drag music files here + - + Loading music, please wait... - + InfoDialog - + Title: - + - + Artist: - + - + Album: - + - + Type: Tipo: - + Path: - + - + Unknown artist - + - + Unknown album - + - + Size: Dimensio: - + + Basic info + + + + Duration: - + LoadWidget - + Loading... Ŝargante... @@ -183,17 +344,17 @@ Find lyrics - + Title - + Artist - + @@ -201,332 +362,771 @@ Serĉi - + Back - + - MainFrame + MUsicLyricWidget - - New playlist - + + No lyrics yet + + + + MainFrame - + Settings Agordoj - - + + Exit Eliri - Add folder - Aldoni dosierujon + Aldoni dosierujon - Add file - Aldoni dosieron + Aldoni dosieron - + Dark theme - + - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - - - - + Play/Pause - + - + Previous Antaŭa - - Invalid or non-existent file - + + All music + - - Failed to import, no vaild music file found! - + + + OK + OK - - All music - + + Add playlist + - - - OK - OK + + Add music + + + + + Equalizer + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + - + Successfully added to "%1" - + + + + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + - + + Import failed, no valid music file found + + + + Next Sekva - MusicListView + MusicListDataDelegate - - New playlist - + + + No songs + - - Play - Ludi + + + 1 song + - - Add to playlist - + + + %1 songs + + + + MusicListDataWidget - - Display in file manager - + + + + + + + + + + + No songs + - - Song info - + + + 1 album - 1 song + - - Are you sure you want to delete %1? - + + + + + %1 album - %2 songs + - - - Are you sure you want to delete the selected %1 songs? - + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + + + + + + + + + + Time added + + + + + + + + Album + + + + + + + + Artist + - + + + Title + + + + + Play All + + + + + Artists + + + + + Albums + + + + + Custom + Personigo + + + + + + Search Results + + + + + Songs + + + + + No result found + + + + + MusicListDialog + + + Play All + + + + + Shuffle + + + + + MusicListInfoView + + + Play queue + + + + + Add to new playlist + + + + + Pause + + + + + Play + Ludi + + + + Add to playlist + + + + + Display in file manager + + + + Remove from playlist - + - + Delete from local disk - + - - Encoding - + + Song info + - + + Cancel - Nuligi + Nuligi - + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + Delete - Forigi + Forigi - - Deleting the current song will also delete the song files contained - + + Are you sure you want to delete %1? + - - Unknown artist - + + + Are you sure you want to delete the selected %1 songs? + - - Unknown album - + + + The song files contained will also be deleted + - MusicListWidget + MusicListItem - - No Music - + + Are you sure you want to delete this playlist? + - - No result found - + + Cancel + Nuligi - - Play All - + + Delete + Forigi + + + MusicListScrollArea - - Time added - + + Library + - - Title - + + Playlists + + + + + MusicListView + + + + Play + Ludi - - Artist - + + + Are you sure you want to delete this playlist? + - - Album name - + + My Favorites + - - Custom - Personigo + + + Cancel + Nuligi + + + + + + + Delete + Forigi + + + + + Pause + + + + + + Rename + - PlayListItem + MusicListWidget - - Are you sure you want to delete this playlist? - + Custom + Personigo + + + PlayListItem - Delete - Forigi + Forigi - Cancel - Nuligi + Nuligi PlayListView - - + + Play queue + + + + + My favorites + + + + + Add to new playlist + + + + + Pause + + + + + Play Ludi - - - Rename - + + musicResult + + + + + Add to playlist + + + + + Display in file manager + + + + + Remove from play queue + + + + + Delete from local disk + + + + + Encoding + + + + + Song info + + + + + + Cancel + Nuligi + + + + Remove + - - + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + + Delete Forigi + + + Unknown artist + + + + + Unknown album + + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + + + + + + + Unknown artist + + PlaylistManager - + New playlist - + + + + + + + Albums + + + + + + + Artists + - + + All Music - + - + My favorites - + - + Search result - + - - - PlaylistWidget - - New playlist - + + Play + Ludi + + + + Music + QApplication - Deepin Music - Deepin Muziko + Deepin Muziko + + + + Music + QObject - Deepin Music - Deepin Muziko + Deepin Muziko Minimize to system tray - + - Exit Deepin Music - + Exit Music + Autoplay - + Enable fade in/out - + Remember playback position - + Close Main Window - + Basic - + @@ -541,7 +1141,7 @@ Restore Defaults - + @@ -551,7 +1151,7 @@ Play/Pause - + @@ -561,29 +1161,159 @@ Volume down - + Volume up - + + + + + SearchLyricsWidget + + + Find Lyrics + + + + + Title + + + + + Artist + + + + + Search + Serĉi SearchResult - - - Search "%1" in Deepin Music - + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + Ludi + + + + Songs + + + + + Playlists + + + + + Settings + Agordoj + + + + Play/Pause + + + + + Previous + Antaŭa + + + + Next + Sekva + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + + + + + Unfavorite + + + + + Song info + + + + + New playlist + + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search Serĉi - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_es_419.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_es_419.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_es_419.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_es_419.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,589 +0,0 @@ - - - CloseConfirmDialog - - - Please select your operation - Por favor, seleccione su operación - - - - Exit - Salir - - - - Minimize to system tray - Minimizar a bandeja de sistema - - - - Do not ask again - - - - - Cancel - Cancelar - - - - OK - Aceptar - - - - Footer - - - Previous - Anterior - - - - Next - Siguiente - - - - Play/Pause - Reproducir/Pausar - - - - Favorite - Favorito - - - - Lyrics - Letras - - - - Unknown Title - Título desconocido - - - - - - Unknown artist - Artista desconocido - - - - Play Mode - Modo reproducción - - - - Playlist - Lista de reproducción - - - - List Loop - Lista en bucle - - - - Single Loop - Un solo bucle - - - - Shuffle - Aleatorio - - - - ImportWidget - - - Add folder - Añadir carpeta - - - - - Scan - Escanear - - - - - %1 music directory or drag & drop music file to add music - %1 directorio de música o arrastre y suelte el archivo musical para añadir música - - - - Loading music, please wait... - Cargando música, por favor espere... - - - - InfoDialog - - - Title: - Título: - - - - Artist: - Artista: - - - - Album: - Album: - - - - Type: - Tipo: - - - - Path: - Ruta de acceso: - - - - Unknown artist - Artista desconocido - - - - Unknown album - Album desconocido - - - - Size: - Tamaño: - - - - Duration: - Duración: - - - - LoadWidget - - - Loading... - Cargando... - - - - LyricWidget - - - Find lyrics - - - - - Title - Título - - - - Artist - Artista - - - - Search - Buscar - - - - Back - Atrás - - - - MainFrame - - - New playlist - Nueva lista de reproducción - - - - Settings - Configuración - - - - - Exit - Salir - - - - Add folder - Añadir carpeta - - - - Add file - Añadir archivo - - - - Dark theme - Tema oscuro - - - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - - - - - Play/Pause - Reproducir/Pausar - - - - Previous - Anterior - - - - Invalid or non-existent file - Archivo no existe o es inválido - - - - Failed to import, no vaild music file found! - Error al importar, ¡ningún archivo de música fue encontrado! - - - - All music - Toda la música - - - - - OK - Aceptar - - - - Successfully added to "%1" - Se agregó correctamente a "%1" - - - - Next - Siguiente - - - - MusicListView - - - New playlist - Nueva lista de reproducción - - - - Play - Reproducir - - - - Add to playlist - Añadir a la Lista de Reproducción - - - - Display in file manager - Mostrar en administrador de archivos - - - - Song info - Información de canción - - - - Are you sure you want to delete %1? - - - - - - Are you sure you want to delete the selected %1 songs? - - - - - Remove from playlist - Remover de la lista de reproducción - - - - Delete from local disk - Borrar del disco local - - - - Encoding - Codificando - - - - Cancel - Cancelar - - - - Delete - Borrar - - - - Deleting the current song will also delete the song files contained - Al borrar la canción actual también se eliminarán los archivos musicales contenidos - - - - Unknown artist - Artista desconocido - - - - Unknown album - Album desconocido - - - - MusicListWidget - - - No Music - Sin música - - - - No result found - No se ha encontrado resultado - - - - Play All - Reproducir todo - - - - Time added - Tiempo añadido - - - - Title - Título - - - - Artist - Artista - - - - Album name - Nombre del álbum - - - - Custom - Personailzar - - - - PlayListItem - - - Are you sure you want to delete this playlist? - - - - - Delete - Eliminar - - - - Cancel - Cancelar - - - - PlayListView - - - - Play - Reproducir - - - - - Rename - Renombrar - - - - - Delete - Eliminar - - - - PlaylistManager - - - New playlist - Nueva lista de reproducción - - - - All Music - Toda la música - - - - My favorites - Mis favoritos - - - - Search result - Buscar resultado - - - - PlaylistWidget - - - New playlist - Nueva lista de reproducción - - - - QApplication - - - Deepin Music - Reproductor Deepin - - - - QObject - - - Deepin Music - Reproductor Deepin - - - - Minimize to system tray - Minimizar a bandeja de sistema - - - - Exit Deepin Music - Salir de Música Deepin - - - - Autoplay - Reproducción automática - - - - Enable fade in/out - - - - - Remember playback position - Recuerde la posición de reproducción - - - - Close Main Window - Cerrar ventana principal - - - - Basic - Básico - - - - Play - Reproducir - - - - Shortcuts - Atajos de teclado - - - - Restore Defaults - Restaurar los valores predeterminados - - - - Next - Siguiente - - - - Play/Pause - Reproducir/Pausar - - - - Previous - Anterior - - - - Volume down - Bajar volumen - - - - Volume up - Subir volumen - - - - SearchResult - - - - Search "%1" in Deepin Music - Buscar "%1" en Deepin Music - - - - TitlebarWidget - - - Search - Buscar - - - \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_es_AR.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_es_AR.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_es_AR.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_es_AR.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,533 +0,0 @@ - - - Footer - - - Previous - - - - - Next - - - - - Play/Pause - - - - - Favorite - - - - - Lyrics - - - - - Repeat Playlist - - - - - Repeat Song - - - - - Unknown Title - - - - - - - Unknown artist - - - - - Play Mode - - - - - Playlist - - - - - Shuffle - - - - - ImportWidget - - - Add Music - - - - - - Scan - - - - - - %1 music directory or drag & drop music file to add music - - - - - Loading music, please wait... - - - - - InfoDialog - - - Title: - - - - - Artist: - - - - - Album: - - - - - Type: - - - - - Path: - - - - - Size: - - - - - Duration: - - - - - Unkonw artist - - - - - Unkonw album - - - - - LyricWidget - - - Search lyrics - - - - - Title - - - - - Artist - - - - - Search - - - - - Back - - - - - MainFrame - - - New playlist - - - - - Add music - - - - - Add music file - - - - - Settings - - - - - Deep color mode - - - - - About - - - - - Deepin Music Player is a local music player with beautiful design and simple functions. It supports viewing lyrics when playing, playing lossless music and customize playlist, etc. - - - - - Exit - - - - - File invalid or does not exist, failed to load! - - - - - Failed to import, no vaild music file found! - - - - - OK - - - - - Deepin Music - Reproductor de Música Deepin - - - - Version: 3.0 - - - - - Help - - - - - Successfully added to "%1" - - - - - I got it - - - - - Music (%1) - - - - - MusicListView - - - New playlist - - - - - Play - - - - - Add to playlist - - - - - Display in file manager - - - - - Song info - - - - - Remove from playlist - - - - - Delete from local disk - - - - - Encoding - - - - - Cancel - - - - - Delete - - - - - Are you sure to delete %1? - - - - - - Are you sure to delete the selected %1 songs? - - - - - Deleting the current song will also delete the song files contained - - - - - Unknown artist - - - - - Unknown album - - - - - MusicListWidget - - - No Music - - - - - No result found - - - - - Play All - - - - - Time added - - - - - Title - - - - - Artist - - - - - Album name - - - - - Custom - - - - - PlayListItem - - - Delete - - - - - Are you sure to delete this playlist? - - - - - Cancel - - - - - PlayListView - - - - Play - - - - - - Rename - - - - - - Delete - - - - - PlaylistManager - - - New playlist - - - - - All Music - - - - - My favorites - - - - - Search result - - - - - PlaylistWidget - - - New playlist - - - - - QObject - - - Deepin Music - Reproductor de Música Deepin - - - - Autoplay - - - - - Enable fade - - - - - Resume play from last position - - - - - Basic settings - - - - - Play - - - - - Shortcuts - - - - - Restore to default - - - - - Next - - - - - Play/Pause - - - - - Previous - - - - - Volume down - - - - - Volume up - - - - - SearchResult - - - - Search "%1" in Deepin Music - - - - - TitleBarWidget - - - Search - - - - \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_es_CL.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_es_CL.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_es_CL.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_es_CL.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,533 +0,0 @@ - - - Footer - - - Previous - - - - - Next - - - - - Play/Pause - - - - - Favorite - - - - - Lyrics - - - - - Repeat Playlist - - - - - Repeat Song - - - - - Unknown Title - - - - - - - Unknown artist - - - - - Play Mode - - - - - Playlist - - - - - Shuffle - - - - - ImportWidget - - - Add Music - - - - - - Scan - - - - - - %1 music directory or drag & drop music file to add music - - - - - Loading music, please wait... - - - - - InfoDialog - - - Title: - - - - - Artist: - - - - - Album: - - - - - Type: - - - - - Path: - - - - - Size: - - - - - Duration: - - - - - Unkonw artist - - - - - Unkonw album - - - - - LyricWidget - - - Search lyrics - - - - - Title - - - - - Artist - - - - - Search - - - - - Back - - - - - MainFrame - - - New playlist - - - - - Add music - - - - - Add music file - - - - - Settings - - - - - Deep color mode - - - - - About - - - - - Deepin Music Player is a local music player with beautiful design and simple functions. It supports viewing lyrics when playing, playing lossless music and customize playlist, etc. - - - - - Exit - - - - - File invalid or does not exist, failed to load! - - - - - Failed to import, no vaild music file found! - - - - - OK - - - - - Deepin Music - Reproductor de música Deepin - - - - Version: 3.0 - - - - - Help - - - - - Successfully added to "%1" - - - - - I got it - - - - - Music (%1) - - - - - MusicListView - - - New playlist - - - - - Play - - - - - Add to playlist - - - - - Display in file manager - - - - - Song info - - - - - Remove from playlist - - - - - Delete from local disk - - - - - Encoding - - - - - Cancel - - - - - Delete - - - - - Are you sure to delete %1? - - - - - - Are you sure to delete the selected %1 songs? - - - - - Deleting the current song will also delete the song files contained - - - - - Unknown artist - - - - - Unknown album - - - - - MusicListWidget - - - No Music - - - - - No result found - - - - - Play All - - - - - Time added - - - - - Title - - - - - Artist - - - - - Album name - - - - - Custom - - - - - PlayListItem - - - Delete - - - - - Are you sure to delete this playlist? - - - - - Cancel - - - - - PlayListView - - - - Play - - - - - - Rename - - - - - - Delete - - - - - PlaylistManager - - - New playlist - - - - - All Music - - - - - My favorites - - - - - Search result - - - - - PlaylistWidget - - - New playlist - - - - - QObject - - - Deepin Music - Reproductor de música Deepin - - - - Autoplay - - - - - Enable fade - - - - - Resume play from last position - - - - - Basic settings - - - - - Play - - - - - Shortcuts - - - - - Restore to default - - - - - Next - - - - - Play/Pause - - - - - Previous - - - - - Volume down - - - - - Volume up - - - - - SearchResult - - - - Search "%1" in Deepin Music - - - - - TitleBarWidget - - - Search - - - - \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_es_ES.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_es_ES.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_es_ES.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_es_ES.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,533 +0,0 @@ - - - Footer - - - Previous - - - - - Next - - - - - Play/Pause - - - - - Favorite - - - - - Lyrics - - - - - Repeat Playlist - - - - - Repeat Song - - - - - Unknown Title - - - - - - - Unknown artist - - - - - Play Mode - - - - - Playlist - - - - - Shuffle - - - - - ImportWidget - - - Add Music - - - - - - Scan - - - - - - %1 music directory or drag & drop music file to add music - - - - - Loading music, please wait... - - - - - InfoDialog - - - Title: - - - - - Artist: - - - - - Album: - - - - - Type: - - - - - Path: - - - - - Size: - - - - - Duration: - - - - - Unkonw artist - - - - - Unkonw album - - - - - LyricWidget - - - Search lyrics - - - - - Title - - - - - Artist - - - - - Search - - - - - Back - - - - - MainFrame - - - New playlist - - - - - Add music - - - - - Add music file - - - - - Settings - - - - - Deep color mode - - - - - About - - - - - Deepin Music Player is a local music player with beautiful design and simple functions. It supports viewing lyrics when playing, playing lossless music and customize playlist, etc. - - - - - Exit - - - - - File invalid or does not exist, failed to load! - - - - - Failed to import, no vaild music file found! - - - - - OK - - - - - Deepin Music - Reproductor Deepin - - - - Version: 3.0 - - - - - Help - - - - - Successfully added to "%1" - - - - - I got it - - - - - Music (%1) - - - - - MusicListView - - - New playlist - - - - - Play - - - - - Add to playlist - - - - - Display in file manager - - - - - Song info - - - - - Remove from playlist - - - - - Delete from local disk - - - - - Encoding - - - - - Cancel - - - - - Delete - - - - - Are you sure to delete %1? - - - - - - Are you sure to delete the selected %1 songs? - - - - - Deleting the current song will also delete the song files contained - - - - - Unknown artist - - - - - Unknown album - - - - - MusicListWidget - - - No Music - - - - - No result found - - - - - Play All - - - - - Time added - - - - - Title - - - - - Artist - - - - - Album name - - - - - Custom - - - - - PlayListItem - - - Delete - - - - - Are you sure to delete this playlist? - - - - - Cancel - - - - - PlayListView - - - - Play - - - - - - Rename - - - - - - Delete - - - - - PlaylistManager - - - New playlist - - - - - All Music - - - - - My favorites - - - - - Search result - - - - - PlaylistWidget - - - New playlist - - - - - QObject - - - Deepin Music - Reproductor Deepin - - - - Autoplay - - - - - Enable fade - - - - - Resume play from last position - - - - - Basic settings - - - - - Play - - - - - Shortcuts - - - - - Restore to default - - - - - Next - - - - - Play/Pause - - - - - Previous - - - - - Volume down - - - - - Volume up - - - - - SearchResult - - - - Search "%1" in Deepin Music - - - - - TitleBarWidget - - - Search - - - - \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_es.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_es.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_es.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_es.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,237 @@ - + + + CloseConfirmDialog - - Please select your operation - Por favor, seleccione su operación - - - + Exit Salir - + Minimize to system tray Minimizar a bandeja de sistema - + Do not ask again - + No preguntar de nuevo + + + + Please select your operation + Por favor, seleccione su operación - + Cancel Cancelar - - OK - Aceptar + + Confirm + Confirmar + + + + DequalizerDialog + + + Custom + Personailzar + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Restaurar los valores predeterminados Footer - + + Unknown Title + Título desconocido + + + + + + Unknown artist + Artista desconocido + + + Previous Anterior - + Next Siguiente - + Play/Pause Reproducir/Pausar - + Favorite Favorito - + Lyrics Letras - - Unknown Title - Título desconocido - - - - - - Unknown artist - Artista desconocido - - - + Play Mode Modo reproducción - - Playlist - Lista de reproducción + + Play Queue + Cola de reproducción - + List Loop Lista en bucle - + Single Loop Un solo bucle - + Shuffle Aleatorio @@ -100,24 +239,29 @@ ImportWidget - - Add folder - Añadir carpeta + + Open Folder + Abrir carpeta + + + + Add Music + Añadir música - - + + Scan Escanear - - - %1 music directory or drag & drop music file to add music - %1 directorio de música o arrastre y suelte el archivo musical para añadir música + + + %1 music directory or drag music files here + %1 carpeta de música o arrastre archivos de música aquí - + Loading music, please wait... Cargando música, por favor espere... @@ -125,55 +269,60 @@ InfoDialog - + + Basic info + Información básica + + + Title: Título: - + Artist: Artista: - + Album: - Album: + Álbum: - + Type: Tipo: - + + Size: + Tamaño: + + + + Duration: + Duración: + + + Path: Ruta de acceso: - + Unknown artist Artista desconocido - + Unknown album - Album desconocido - - - - Size: - Tamaño: - - - - Duration: - Duración: + Álbum desconocido LoadWidget - + Loading... Cargando... @@ -183,7 +332,7 @@ Find lyrics - + Buscar letras @@ -201,307 +350,716 @@ Buscar - + Back Atrás - MainFrame + MUsicLyricWidget - - New playlist - Nueva lista de reproducción + + No lyrics yet + + + + MainFrame - - Settings - Configuración + + Add playlist + Añadir lista de reproducción - - - Exit - Salir + + Add music + Añadir música - - Add folder - Añadir carpeta + + Equalizer + - - Add file - Añadir archivo + + Settings + Ajustes - + Dark theme Tema oscuro - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + + + Exit + Salir + + + + Music is a local music player with beautiful design and simple functions. + Música es un reproductor de música local con diseño hermoso y funciones simples. + + + + + + + + Music + Música - + Play/Pause Reproducir/Pausar - + Previous Anterior - - Invalid or non-existent file - Archivo no existe o es inválido + + Next + Siguiente - - Failed to import, no vaild music file found! - Error al importar, ¡ningún archivo de música fue encontrado! + + Successfully added to "%1" + Se añadió correctamente a "%1" - - All music - Toda la música + + Already added to the playlist + Ya se ha añadido a la lista de reproducción + + + + 1 song added + 1 canción añadida + + + + %1 songs added + %1 canciones añadidas - - + + File is invalid or does not exist, load failed + El archivo es inválido o no existe, la carga falló + + + + OK Aceptar - - Successfully added to "%1" - Se agregó correctamente a "%1" + + Import failed, no valid music file found + La importación falló, no se encontró ningún archivo de música válido - - Next - Siguiente + + All music + Toda la música - MusicListView + MusicListDataDelegate - - New playlist - Nueva lista de reproducción + + + No songs + No hay canciones + + + + + 1 song + 1 canción + + + + + %1 songs + %1 canciones + + + + MusicListDataWidget + + + + + + + + + + + + No songs + No hay canciones + + + + + 1 album - 1 song + 1 álbum - 1 canción + + + + + + + %1 album - %2 songs + %1 álbum - %2 canciones + + + + + %1 albums - %2 songs + %1 álbumes - %2 canciones + + + + + 1 artist - 1 song + 1 artista - 1 canción + + + + + %1 artist - %2 songs + %1 artista - %2 canciones + + + + + %1 artists - %2 songs + %1 artistas - %2 canciones + + + + + 1 song + 1 canción - + + + + + %1 songs + %1 canciones + + + + + + + No search results + Sin resultados + + + + + + All Music + Toda la música + + + + + + + + + Time added + Fecha de adición + + + + + + + Album + Álbum + + + + + + + Artist + Artista + + + + + Title + Título + + + + Play All + Reproducir todo + + + + Artists + Artistas + + + + Albums + Álbumes + + + + Custom + Personailzar + + + + + + Search Results + Buscar resultado + + + + Songs + Canciones + + + + No result found + No se ha encontrado resultado + + + + MusicListDialog + + + Play All + Reproducir todo + + + + Shuffle + Aleatorio + + + + MusicListInfoView + + + Play queue + Cola de reproducción + + + + Add to new playlist + Añadir a nueva lista de reproducción + + + + Pause + Pausar + + + Play Reproducir - + Add to playlist - Añadir a la Lista de Reproducción + Añadir a la lista de reproducción - + Display in file manager Mostrar en administrador de archivos - + + Remove from playlist + Quitar de la lista de reproducción + + + + Delete from local disk + Borrar del disco local + + + Song info Información de canción - + + + Cancel + Cancelar + + + + Remove + Quitar + + + + Are you sure you want to remove %1? + ¿Está seguro que quiere quitar %1? + + + + Are you sure you want to remove the selected %1 songs? + ¿Está seguro de que quiere quitar las %1 canciones seleccionadas? + + + + Delete + Borrar + + + Are you sure you want to delete %1? - + ¿Está seguro que quiere borrarlo %1? - - + + Are you sure you want to delete the selected %1 songs? - + ¿Está seguro de borrar las %1 canciones seleccionadas? - - Remove from playlist - Remover de la lista de reproducción + + + The song files contained will also be deleted + Los archivos de canciones contenidas también serán borrados + + + MusicListItem - - Delete from local disk - Borrar del disco local + + Are you sure you want to delete this playlist? + ¿Esta seguro de borrar esta lista de reproducción? - - Encoding - Codificando + + Cancel + Cancelar - + + Delete + Borrar + + + + MusicListScrollArea + + + Library + Libreria + + + + Playlists + Listas de reproducción + + + + MusicListView + + + My Favorites + Mis favoritos + + + + + Are you sure you want to delete this playlist? + ¿Esta seguro de borrar esta lista de reproducción? + + + + Cancel Cancelar - + + + + Delete Borrar - - Deleting the current song will also delete the song files contained - Al borrar la canción actual también se eliminarán los archivos musicales contenidos + + + Pause + Pausar + + + + + Play + Reproducir - + + + Rename + Renombrar + + + + PlayListView + + Unknown artist Artista desconocido - + Unknown album - Album desconocido + Álbum desconocido - - - MusicListWidget - - No Music - Sin música + + Play queue + Cola de reproducción - - No result found - No se ha encontrado resultado + + musicResult + - - Play All - Reproducir todo + + My favorites + Mis favoritos - - Time added - Tiempo añadido + + Add to new playlist + Añadir a nueva lista de reproducción - - Title - Título + + Pause + Pausar - - Artist - Artista + + + Play + Reproducir - - Album name - Nombre del álbum + + Add to playlist + Añadir a la lista de reproducción - - Custom - Personailzar + + Display in file manager + Mostrar en administrador de archivos - - - PlayListItem - - Are you sure you want to delete this playlist? - + Remove from playlist + Quitar de la lista de reproducción - - Delete - Eliminar + + Remove from play queue + + + + + Delete from local disk + Borrar del disco local + + + + Encoding + Codificación + + + + Song info + Información de canción - + + Cancel Cancelar + + + Remove + Quitar + + + + Are you sure you want to remove %1? + ¿Está seguro que quiere quitar %1? + + + + Are you sure you want to remove the selected %1 songs? + ¿Está seguro de que quiere quitar las %1 canciones seleccionadas? + + + + Delete + Borrar + + + + Are you sure you want to delete %1? + ¿Está seguro que quiere borrarlo %1? + + + + + Are you sure you want to delete the selected %1 songs? + ¿Está seguro de borrar las %1 canciones seleccionadas? + + + + + The song files contained will also be deleted + Los archivos de canciones contenidos también serán borrados + - PlayListView + PlayListWidget - - - Play - Reproducir + + + No songs + No hay canciones - - - Rename - Renombrar + + No search results + Sin resultados - - - Delete - Eliminar + + Play Queue + Cola de reproducción + + + + Empty + Vaciar + + + + 1 song + 1 canción + + + + %1 songs + %1 canciones + + + + Playlist + + + + Unknown album + Álbum desconocido + + + + + + Unknown artist + Artista desconocido PlaylistManager - + New playlist Nueva lista de reproducción - + + + + Albums + Álbumes + + + + + + Artists + Artistas + + + + All Music Toda la música - + My favorites Mis favoritos - + Search result Buscar resultado - - - PlaylistWidget - - New playlist - Nueva lista de reproducción + + Play + Reproducir + + + + Music + Música QApplication - - Deepin Music - Reproductor Deepin + + Music + Música QObject - - Deepin Music - Reproductor Deepin - - Minimize to system tray Minimizar a bandeja de sistema - Exit Deepin Music - Salir de Música Deepin + Exit Music + Salir de Música @@ -511,7 +1069,7 @@ Enable fade in/out - + Habilitar desvanecimiento @@ -570,20 +1128,150 @@ + SearchLyricsWidget + + + Find Lyrics + Buscar letras + + + + Title + Título + + + + Artist + Artista + + + + Search + Buscar + + + SearchResult - - - Search "%1" in Deepin Music - Buscar "%1" en Deepin Music + + Music + Música + + + + Artists + Artistas + + + + Albums + Álbumes + + + + Shortcut + + + Play + Reproducir + + + + Songs + Canciones + + + + Playlists + Listas de reproducción + + + + Settings + Ajustes + + + + Play/Pause + Reproducir/Pausar + + + + Previous + Anterior + + + + Next + Siguiente + + + + Volume Up + Subir volumen + + + + Volume Down + Bajar volumen + + + + Mute + Silenciar + + + + Favorite + Favorito + + + + Unfavorite + Quitar favorito + + + + Song info + Información de canción + + + + New playlist + Nueva lista de reproducción + + + + Add music + Añadir música + + + + Rename playlist + Renombrar lista de reproducción + + + + Remove from playlist + Quitar de la lista de reproducción + + + + Help + Ayuda + + + + Display shortcuts + Atajos de pantalla TitlebarWidget - + Search Buscar - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_fa.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_fa.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_fa.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_fa.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,245 @@ - + + + CloseConfirmDialog - + Please select your operation می خواهید چه کاری انجام دهید؟ - + Exit خروج - + Minimize to system tray کوچک نمایی - + Do not ask again - + دوباره نپرس - + Cancel انصراف - + + Confirm + + + OK - تایید + تایید + + + + DequalizerDialog + + + Custom + شخصی + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + بازگرداندن پیش فرض ها Footer - + Previous قبلی - + Next بعدی - + Play/Pause پخش/مکث - + Favorite مورد علاقه - + Lyrics متن - + + Play Queue + + + + Unknown Title عنوان نام مشخص - - - + + + Unknown artist هنرمند ناشناخته - + Play Mode حالت پخش - Playlist - لیست پخش + لیست پخش - + List Loop تکرار لیست - + Single Loop تکرار یک مورد - + Shuffle تصادفی @@ -100,24 +247,37 @@ ImportWidget - Add folder - پوشه جدید + پوشه جدید + + + + Open Folder + + + + + Add Music + - - + + Scan بررسی - - + + + %1 music directory or drag music files here + + + %1 music directory or drag & drop music file to add music - %1 پوشه آهنگ و یا با استفاده از درگ و دراپ فایل موسیقی را اضافه نمایید + %1 پوشه آهنگ و یا با استفاده از درگ و دراپ فایل موسیقی را اضافه نمایید - + Loading music, please wait... بارگذاری موسیقی ، لطفا صبر کنید ... @@ -125,47 +285,52 @@ InfoDialog - + Title: عنوان: - + Artist: هنرمند: - + Album: آلبوم: - + Type: نوع: - + Path: آدرس: - + Unknown artist هنرمند ناشناخته - + Unknown album آلبوم نامشخص - + Size: حجم: - + + Basic info + + + + Duration: مدت: @@ -173,7 +338,7 @@ LoadWidget - + Loading... در حال اجرا... @@ -183,7 +348,7 @@ Find lyrics - + یافتن متن شعر @@ -201,297 +366,859 @@ جستجو - + Back بازگشت + MUsicLyricWidget + + + No lyrics yet + + + + MainFrame - New playlist - لیست پخش جدید + لیست پخش جدید - + Settings تنظیمات - - + + Exit خروج - Add folder - پوشه جدید + پوشه جدید - Add file - اضافه کردن فایل + اضافه کردن فایل - + Dark theme تم مشکی - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + دیپین موزیک یک موزیک پلیر زیبا و ساده است که موسیقی های محلی شما را اجرا می کند این برنامه می تواند در هنگام گوش دادن به موسیقی متن شعر را برای شما نمایش دهد - + Play/Pause پخش/مکث - + Previous پیشین - Invalid or non-existent file - فایل وجود ندارد یا نامعتبر است + فایل وجود ندارد یا نامعتبر است - Failed to import, no vaild music file found! - اضافه کردن ناموفق ، فایل صوتی وجود ندارد! + اضافه کردن ناموفق ، فایل صوتی وجود ندارد! - + All music تمام آهنگ ها - - + + OK تایید - + + Add playlist + + + + + Add music + + + + + Equalizer + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" با موفقیت به "1%" افزوده شد. - + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next بعدی + MusicListDataDelegate + + + + No songs + + + + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + تمام آهنگ ها + + + + + + + + + Time added + زمان افزوده شد + + + + + + + Album + + + + + + + + Artist + هنرمند + + + + + Title + عنوان + + + + Play All + پخش همه + + + + Artists + + + + + Albums + + + + + Custom + شخصی + + + + + + Search Results + + + + + Songs + + + + + No result found + نتیجه ای یافت نشد + + + + MusicListDialog + + + Play All + پخش همه + + + + Shuffle + تصادفی + + + + MusicListInfoView + + New playlist + لیست پخش جدید + + + + Play queue + + + + + Add to new playlist + + + + + Pause + + + + + Play + پخش + + + + Add to playlist + اضافه کردن به لیست پخش + + + + Display in file manager + نمایش درمدیریت فایل + + + + Remove from playlist + حذف از لیست پخش + + + + Delete from local disk + حذف از دیسک محلی + + + + Song info + اطلاعات صدا + + + + + Cancel + انصراف + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + حذف + + + + Are you sure you want to delete %1? + آیا شما ۱٪ از حذف اطمینان دارید؟ + + + + + Are you sure you want to delete the selected %1 songs? + آیا شما ۱ ٪ از حذف این آهنگ اطمینان دارید؟ + + + + + The song files contained will also be deleted + + + + + MusicListItem + + + Are you sure you want to delete this playlist? + آیا شما از حذف این پلی لیست اطمینان دارید؟ + + + + Cancel + انصراف + + + + Delete + حذف + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + MusicListView - New playlist - لیست پخش جدید + لیست پخش جدید - + + Play پخش - Add to playlist - اضافه کردن به لیست پخش + اضافه کردن به لیست پخش - Display in file manager - نمایش درمدیریت فایل + نمایش درمدیریت فایل - Song info - اطلاعات صدا + اطلاعات صدا - Are you sure you want to delete %1? - + آیا شما ۱٪ از حذف اطمینان دارید؟ - - Are you sure you want to delete the selected %1 songs? - + آیا شما ۱ ٪ از حذف این آهنگ اطمینان دارید؟ - Remove from playlist - حذف از لیست پخش + حذف از لیست پخش - Delete from local disk - حذف از دیسک محلی + حذف از دیسک محلی - Encoding - کدگذاری + کدگذاری + + + + My Favorites + - + + + Are you sure you want to delete this playlist? + آیا شما از حذف این پلی لیست اطمینان دارید؟ + + + + Cancel انصراف - + + + + Delete حذف - + + + Pause + + + + + + Rename + تغییر نام + + Deleting the current song will also delete the song files contained - حذف آهنگ فعلی سبب حذف فایل های آهنگ موجود خواهد شد. + حذف آهنگ فعلی سبب حذف فایل های آهنگ موجود خواهد شد. - Unknown artist - هنرمند ناشناخته + هنرمند ناشناخته - Unknown album - آلبوم نامشخص + آلبوم نامشخص MusicListWidget - No Music - بدون موسیقی + بدون موسیقی - No result found - نتیجه ای یافت نشد + نتیجه ای یافت نشد - Play All - پخش همه + پخش همه - Time added - زمان افزوده شد + زمان افزوده شد - Title - عنوان + عنوان - Artist - هنرمند + هنرمند - Album name - نام آلبوم + نام آلبوم - Custom - شخصی + شخصی PlayListItem - Are you sure you want to delete this playlist? - + آیا شما از حذف این پلی لیست اطمینان دارید؟ - Delete - حذف + حذف - Cancel - انصراف + انصراف PlayListView - - + New playlist + لیست پخش جدید + + + + Play queue + + + + + musicResult + + + + + My favorites + مورد علاقه + + + + Add to new playlist + + + + + Pause + + + + + Play پخش - - + + Add to playlist + اضافه کردن به لیست پخش + + + + Display in file manager + نمایش درمدیریت فایل + + + Remove from playlist + حذف از لیست پخش + + + + Remove from play queue + + + + + Delete from local disk + حذف از دیسک محلی + + + + Encoding + کدگذاری + + + + Song info + اطلاعات صدا + + + + + Cancel + انصراف + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + آیا شما ۱٪ از حذف اطمینان دارید؟ + + + + + Are you sure you want to delete the selected %1 songs? + آیا شما ۱ ٪ از حذف این آهنگ اطمینان دارید؟ + + + + + The song files contained will also be deleted + + + Rename - تغییر نام + تغییر نام - - + Delete حذف + + + Unknown artist + هنرمند ناشناخته + + + + Unknown album + آلبوم نامشخص + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + آلبوم نامشخص + + + + + + Unknown artist + هنرمند ناشناخته + PlaylistManager - + New playlist لیست پخش جدید - + Artist + هنرمند + + + + + + Albums + + + + + + + Artists + + + + + All Music تمام آهنگ ها - + My favorites مورد علاقه - + Search result نتایج جستجو + + + Play + پخش + + + + Music + + PlaylistWidget - New playlist - لیست پخش جدید + لیست پخش جدید QApplication - Deepin Music - دیپین موزیک + دیپین موزیک + + + + Music + QObject - Deepin Music - دیپین موزیک + دیپین موزیک @@ -499,9 +1226,13 @@ کوچک نمایی - Exit Deepin Music - خروج + خروج + + + + Exit Music + @@ -511,7 +1242,7 @@ Enable fade in/out - + فعال کردن محو شدن/نشدن @@ -570,20 +1301,154 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + عنوان + + + + Artist + هنرمند + + + + Search + جستجو + + + SearchResult - - Search "%1" in Deepin Music - جستجوی "1%" در موسیقی دیپین + جستجوی "1%" در موسیقی دیپین + + + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + پخش + + + + Songs + + + + + Playlists + + + + + Settings + تنظیمات + + + + Play/Pause + پخش/مکث + + + + Previous + + + + + Next + بعدی + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + مورد علاقه + + + + Unfavorite + + + + + Song info + اطلاعات صدا + + + + New playlist + لیست پخش جدید + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + حذف از لیست پخش + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search جستجو - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_fil.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_fil.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_fil.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_fil.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,181 +1,330 @@ - + + + CloseConfirmDialog - + Please select your operation - + - + Exit - + - + Minimize to system tray - + - + Do not ask again - + - + Cancel - + - - OK - + + Confirm + + + + + DequalizerDialog + + + Custom + + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Footer - + Previous - + - + Next - + - + Play/Pause - + - + Favorite - + - + Lyrics - + + + + + Play Queue + - + Unknown Title - + - - - + + + Unknown artist - + - + Play Mode - + - - Playlist - - - - + List Loop - + - + Single Loop - + - + Shuffle - + ImportWidget - - Add folder - + + Open Folder + - - + + Add Music + + + + + Scan - + - - - %1 music directory or drag & drop music file to add music - + + + %1 music directory or drag music files here + - + Loading music, please wait... - + InfoDialog - + Title: - + - + Artist: - + - + Album: - + - + Type: - + - + Path: - + - + Unknown artist - + - + Unknown album - + - + Size: - + + + + + Basic info + - + Duration: - + LoadWidget - + Loading... - + @@ -183,407 +332,950 @@ Find lyrics - + Title - + Artist - + Search - + - + Back - + - MainFrame + MUsicLyricWidget - - New playlist - + + No lyrics yet + + + + MainFrame - + Settings - + - - + + Exit - + - - Add folder - + + Dark theme + - - Add file - + + Equalizer + - - Dark theme - + + Play/Pause + - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + + Previous + - - Play/Pause - + + All music + - - Previous - + + + OK + - - Invalid or non-existent file - + + Add playlist + - - Failed to import, no vaild music file found! - + + Add music + - - All music - + + Music is a local music player with beautiful design and simple functions. + - - - OK - + + + + + + Music + - + Successfully added to "%1" - + + + + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + - + Next - + - MusicListView + MusicListDataDelegate - - New playlist - + + + No songs + - - Play - + + + 1 song + - - Add to playlist - + + + %1 songs + + + + MusicListDataWidget - - Display in file manager - + + + + + + + + + + + No songs + - - Song info - + + + 1 album - 1 song + - - Are you sure you want to delete %1? - + + + + + %1 album - %2 songs + - - - Are you sure you want to delete the selected %1 songs? - + + + %1 albums - %2 songs + - - Remove from playlist - + + + 1 artist - 1 song + - - Delete from local disk - + + + %1 artist - %2 songs + - - Encoding - + + + %1 artists - %2 songs + - - Cancel - + + + 1 song + - - Delete - + + + + + %1 songs + - - Deleting the current song will also delete the song files contained - + + + + + No search results + - - Unknown artist - + + + + All Music + - - Unknown album - + + + + + + + Time added + + + + + + + + Album + + + + + + + + Artist + + + + + + Title + + + + + Play All + + + + + Artists + - - - MusicListWidget - - No Music - + + Albums + + + + + Custom + - + + + + Search Results + + + + + Songs + + + + No result found - + + + + MusicListDialog - + Play All - + - - Time added - + + Shuffle + + + + MusicListInfoView - - Title - + + Play queue + - - Artist - + + Add to new playlist + - - Album name - + + Pause + - - Custom - + + Play + + + + + Add to playlist + + + + + Display in file manager + + + + + Remove from playlist + + + + + Delete from local disk + + + + + Song info + + + + + + Cancel + + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + - PlayListItem + MusicListItem - + Are you sure you want to delete this playlist? - + - + + Cancel + + + + Delete - + + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + MusicListView - + + + Play + + + + + + Are you sure you want to delete this playlist? + + + + + My Favorites + + + + + Cancel - + + + + + + + + Delete + + + + + + Pause + + + + + + Rename + PlayListView - - + + Play queue + + + + + My favorites + + + + + Add to new playlist + + + + + Pause + + + + + Play - + - - - Rename - + + musicResult + - - + + Add to playlist + + + + + Display in file manager + + + + + Remove from play queue + + + + + Delete from local disk + + + + + Encoding + + + + + Song info + + + + + + Cancel + + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + + Delete - + + + + + Unknown artist + + + + + Unknown album + + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + + + + + + + Unknown artist + PlaylistManager - + New playlist - + - + + + + Albums + + + + + + + Artists + + + + + All Music - + - + My favorites - + - + Search result - + - - - PlaylistWidget - - New playlist - + + Play + + + + + Music + QApplication - Deepin Music - Deepin Music + Deepin Music + + + + Music + QObject - Deepin Music - Deepin Music + Deepin Music Minimize to system tray - + - Exit Deepin Music - + Exit Music + Autoplay - + Enable fade in/out - + Remember playback position - + Close Main Window - + Basic - + Play - + Shortcuts - + Restore Defaults - + Next - + Play/Pause - + Previous - + Volume down - + Volume up - + + + + + SearchLyricsWidget + + + Find Lyrics + + + + + Title + + + + + Artist + + + + + Search + SearchResult - - - Search "%1" in Deepin Music - + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + + + + + Songs + + + + + Playlists + + + + + Settings + + + + + Play/Pause + + + + + Previous + + + + + Next + + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + + + + + Unfavorite + + + + + Song info + + + + + New playlist + + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search - + - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_fi.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_fi.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_fi.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_fi.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,237 @@ - + + + CloseConfirmDialog - - Please select your operation - Valitse toiminto - - - + Exit Poistu - + Minimize to system tray Minimoi valikkoon - + Do not ask again Älä kysy uudestaan - + + Please select your operation + Valitse toiminto + + + Cancel Peruuta - - OK - OK + + Confirm + Vahvista + + + + DequalizerDialog + + + Custom + Kustomoitu + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Palauta oletukset Footer - + + Unknown Title + Tuntematon nimi + + + + + + Unknown artist + Tuntematon artisti + + + Previous Edellinen - + Next Seuraava - + Play/Pause - Toista/Keskeytä + Toista/keskeytä - + Favorite Suosikki - + Lyrics Sanat - - Unknown Title - Tuntematon nimi - - - - - - Unknown artist - Tuntematon artisti - - - + Play Mode Toistotila - - Playlist - Soittolista + + Play Queue + Toista jono - + List Loop - Musiikkilistan silmukka + Listan silmukka - + Single Loop Silmukka - + Shuffle Sekoitta @@ -100,24 +239,29 @@ ImportWidget - - Add folder - Lisää kansio + + Open Folder + Avaa kansio + + + + Add Music + Lisää musiikkia - - + + Scan Skannaa - - - %1 music directory or drag & drop music file to add music - %1 musiikkikansio lisää musiikkia vetämällä tai pudottamalla + + + %1 music directory or drag music files here + %1 musiikkikansio tai vedä musiikkitiedostot tähän - + Loading music, please wait... Lataa musiikkia, odota ... @@ -125,55 +269,60 @@ InfoDialog - + + Basic info + Perustiedot + + + Title: Otsikko: - + Artist: Artisti: - + Album: Albumi: - + Type: Tyyppi: - + + Size: + Koko: + + + + Duration: + Kesto: + + + Path: Polku: - + Unknown artist Tuntematon artisti - + Unknown album Tuntematon albumi - - - Size: - Koko: - - - - Duration: - Kesto: - LoadWidget - + Loading... Lataa... @@ -201,307 +350,716 @@ Etsi - + Back Takaisin + MUsicLyricWidget + + + No lyrics yet + + + + MainFrame - - New playlist - Uusi soittolista + + Add playlist + Lisää soittolistaan - + + Add music + Lisää musiikkia + + + + Equalizer + + + + Settings Asetukset - - + + Dark theme + Tumma + + + + Exit Poistu - - Add folder - Lisää kansio + + Music is a local music player with beautiful design and simple functions. + Musiikki on paikallinen musiikkisoitin, jossa on kaunis muotoilu ja yksinkertaiset toiminnot. - - Add file - Lisää tiedosto + + + + + + Music + Musiikki - - Dark theme - Tumma teema + + Play/Pause + Toista/keskeytä - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - Deepin Music on kaunis ja yksinkertainen musiikkisoitin, joka toistaa kiintolevysi paikallista musiikkia. Se tukee sanoitusten näyttämistä toiston aikana, häviöttömän äänen ja soittolistan muokkaamista jne. + + Previous + Edellinen - - Play/Pause - Toista/Keskeytä + + Next + Seuraava - - Previous - Edellinen + + Successfully added to "%1" + Lisätty onnistuneesti osoitteeseen "%1" - - Invalid or non-existent file - Virheellinen tai olematon tiedosto + + Already added to the playlist + On jo lisätty soittolistaan - - Failed to import, no vaild music file found! - Tuonti epäonnistui, musiikkitiedostoa ei löytynyt! + + 1 song added + 1 kappale lisätty - - All music - Kaikki musiikki + + %1 songs added + %1 kappaletta lisätty - - + + File is invalid or does not exist, load failed + Tiedosto virheellinen tai sitä ei ole, lataus epäonnistui + + + + OK OK - - Successfully added to "%1" - Lisätty onnistuneesti osoitteeseen "%1" + + Import failed, no valid music file found + Tuonti epäonnistui, musiikkitiedostoa ei löytynyt - - Next - Seuraava + + All music + Kaikki musiikki - MusicListView + MusicListDataDelegate - - New playlist - Uusi soittolista + + + No songs + Ei kappaleita + + + + + 1 song + 1 kappale + + + + + %1 songs + %1 kappaletta + + + + MusicListDataWidget + + + + + + + + + + + + No songs + Ei kappaleita + + + + + 1 album - 1 song + 1 albumi - 1 kappale + + + + + + + %1 album - %2 songs + %1 albumi - %2 kappaletta + + + + + %1 albums - %2 songs + %1 albumia - %2 kappaletta + + + + + 1 artist - 1 song + 1 artisti - 1 kappale + + + + + %1 artist - %2 songs + %1 artisti - %2 kappaletta + + + + + %1 artists - %2 songs + %1 artistia - %2 kappaletta + + + + + 1 song + 1 kappale + + + + + + + %1 songs + %1 kappaletta + + + + + + + No search results + Ei hakutuloksia + + + + + + All Music + Kaikki musiikki + + + + + + + + + Time added + Aikaväli + + + + + + + Album + Albumi + + + + + + + Artist + Esittäjä + + + + + Title + Nimi + + + + Play All + Toista kaikki + + + + Artists + Artistit + + + + Albums + Albumit + + + + Custom + Kustomoitu + + + + + + Search Results + Hakutulokset + + + + Songs + Kappaletta + + + + No result found + Tuloksia ei löytynyt + + + MusicListDialog + + + Play All + Toista kaikki + + + + Shuffle + Sekoitta + + + + MusicListInfoView - + + Play queue + Toista jono + + + + Add to new playlist + Lisää uuteen soittolistaan + + + + Pause + Pysäytä + + + Play Toista - + Add to playlist Lisää soittolistaan - + Display in file manager Näytä tiedostonhallinnassa - + + Remove from playlist + Poista soittolistalta + + + + Delete from local disk + Poista paikalliselta levyltä + + + Song info Kappaleen tiedot - + + + Cancel + Peruuta + + + + Remove + Poista + + + + Are you sure you want to remove %1? + Haluatko varmasti poistaa %1? + + + + Are you sure you want to remove the selected %1 songs? + Haluatko varmasti poistaa valitut %1 kappaleet? + + + + Delete + Poista + + + Are you sure you want to delete %1? Haluatko varmasti poistaa %1? - - + + Are you sure you want to delete the selected %1 songs? Haluatko varmasti poistaa valitut %1 kappaleet? - - Remove from playlist - Poista soittolistalta + + + The song files contained will also be deleted + Sisältämät musiikkitiedostot poistetaan myös + + + MusicListItem - - Delete from local disk - Poista paikalliselta levyltä + + Are you sure you want to delete this playlist? + Haluatko varmasti poistaa tämän soittolistan? - - Encoding - Tavuesitys + + Cancel + Peruuta + + + + Delete + Poista + + + + MusicListScrollArea + + + Library + Kirjasto + + + + Playlists + Soittolistat + + + + MusicListView + + + My Favorites + Minun suosikit - + + + Are you sure you want to delete this playlist? + Haluatko varmasti poistaa tämän soittolistan? + + + + Cancel Peruuta - + + + + Delete Poista - - Deleting the current song will also delete the song files contained - Nykyisen kappaleen poistaminen poistaa myös lauluun sisältyvät tiedostot + + + Pause + Pysäytä + + + + + Play + Toista + + + + + Rename + Nimeä uudelleen + + + PlayListView - + Unknown artist Tuntematon artisti - + Unknown album Tuntematon albumi - - - MusicListWidget - - No Music - Ei musiikkia + + Play queue + Toista jono - - No result found - Tuloksia ei löytynyt + + musicResult + - - Play All - Toista kaikki + + My favorites + Minun suosikit - - Time added - Lisätty aika + + Add to new playlist + Lisää uuteen soittolistaan - - Title - Nimi + + Pause + Pysäytä - - Artist - Esittäjä + + + Play + Toista - - Album name - Albumin nimi + + Add to playlist + Lisää soittolistaan - - Custom - Kustomoitu + + Display in file manager + Näytä tiedostonhallinnassa - - - PlayListItem - - Are you sure you want to delete this playlist? - Haluatko varmasti poistaa tämän soittolistan? + Remove from playlist + Poista soittolistalta - - Delete - Poista + + Remove from play queue + + + + + Delete from local disk + Poista paikalliselta levyltä + + + + Encoding + Koodaus - + + Song info + Kappaleen tiedot + + + + Cancel Peruuta - - - PlayListView - - - Play - Toista + + Remove + Poista - - - Rename - Nimeä uudestaan + + Are you sure you want to remove %1? + Haluatko varmasti poistaa %1? - - + + Are you sure you want to remove the selected %1 songs? + Haluatko varmasti poistaa valitut %1 kappaleet? + + + Delete Poista + + + Are you sure you want to delete %1? + Haluatko varmasti poistaa %1? + + + + + Are you sure you want to delete the selected %1 songs? + Haluatko varmasti poistaa valitut %1 kappaleet? + + + + + The song files contained will also be deleted + Sisältämät musiikkitiedostot poistetaan myös + + + + PlayListWidget + + + + No songs + Ei kappaleita + + + + No search results + Ei hakutuloksia + + + + Play Queue + Toista jono + + + + Empty + Tyhjennä + + + + 1 song + 1 kappale + + + + %1 songs + %1 kappaletta + + + + Playlist + + + + Unknown album + Tuntematon albumi + + + + + + Unknown artist + Tuntematon artisti + PlaylistManager - + New playlist Uusi soittolista - + + + + Albums + Albumit + + + + + + Artists + Artistit + + + + All Music Kaikki musiikki - + My favorites Minun suosikit - + Search result Hakutulokset - - - PlaylistWidget - - New playlist - Uusi soittolista + + Play + Toista + + + + Music + Musiikki QApplication - - Deepin Music - Deepin Musiikki + + Music + Musiikki QObject - - Deepin Music - Deepin Musiikki - - Minimize to system tray Minimoi valikkoon - Exit Deepin Music - Poistu Deepin musiikista + Exit Music + Poistu musiikista @@ -551,7 +1109,7 @@ Play/Pause - Toista/Keskeytä + Toista/keskeytä @@ -570,20 +1128,150 @@ + SearchLyricsWidget + + + Find Lyrics + Etsi sanoitukset + + + + Title + Nimi + + + + Artist + Esittäjä + + + + Search + Etsi + + + SearchResult - - - Search "%1" in Deepin Music - Hae "%1" Deepin musiikista + + Music + Musiikki + + + + Artists + Artistit + + + + Albums + Albumit + + + + Shortcut + + + Play + Toista + + + + Songs + Kappaletta + + + + Playlists + Soittolistat + + + + Settings + Asetukset + + + + Play/Pause + Toista/keskeytä + + + + Previous + Edellinen + + + + Next + Seuraava + + + + Volume Up + Äänitaso ylös + + + + Volume Down + Äänitaso alas + + + + Mute + Vaienna + + + + Favorite + Suosikki + + + + Unfavorite + Inhokki + + + + Song info + Kappaleen tiedot + + + + New playlist + Uusi soittolista + + + + Add music + Lisää musiikkia + + + + Rename playlist + Nimeä soittolista + + + + Remove from playlist + Poista soittolistalta + + + + Help + Ohje + + + + Display shortcuts + Näytä pikanäppäimet TitlebarWidget - + Search Etsi - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_fr.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_fr.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_fr.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_fr.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,181 +1,330 @@ - + + + CloseConfirmDialog - - Please select your operation - Veuillez faire votre choix - - - + Exit Quitter - + Minimize to system tray - Réduire dans la zone de notification + Réduire dans la barre d'état système - + Do not ask again - + Ne plus demander - + + Please select your operation + Veuillez sélectionner votre opération + + + Cancel Annuler - - OK - OK + + Confirm + Confirmer + + + + DequalizerDialog + + + Custom + Personnalisé + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Restaurer les valeurs par défaut Footer - + + Unknown Title + Titre inconnu + + + + + + Unknown artist + Artiste inconnu + + + Previous Précédent - + Next Suivant - + Play/Pause - Lecture / Pause + Lecture/Pause - + Favorite Favoris - + Lyrics Paroles - - Unknown Title - Titre inconnu - - - - - - Unknown artist - Artiste inconnu - - - + Play Mode Mode de lecture - - Playlist - Liste de lecture + + Play Queue + Lire la file d'attente - + List Loop Répéter la liste - + Single Loop Répéter le morceau - + Shuffle - Aléatoire + Lecture aléatoire ImportWidget - - Add folder - Ajouter un dossier + + Open Folder + + + + + Add Music + Ajouter Musique - - + + Scan - Rechercher + Numériser - - - %1 music directory or drag & drop music file to add music - %1 dans votre dossier musical ou glisser ici vos fichiers musicaux pour les ajouter + + + %1 music directory or drag music files here + %1 répertoire musical ou faites glisser les fichiers musicaux ici - + Loading music, please wait... - Chargement de votre musique, veuillez patienter... + Chargement de la musique, veuillez patienter... InfoDialog - + + Basic info + Informations de base + + + Title: - Titre: + Titre : - + Artist: Artiste: - + Album: - Album: + Album : - + Type: - Type : + Type : + + + + Size: + Taille : - + + Duration: + Durée : + + + Path: - Chemin: + Chemin : - + Unknown artist Artiste inconnu - + Unknown album Album inconnu - - - Size: - Taille : - - - - Duration: - Durée: - LoadWidget - + Loading... - Chargement… + Chargement... @@ -183,7 +332,7 @@ Find lyrics - + Rechercher des paroles @@ -201,307 +350,716 @@ Rechercher - + Back - Précédent + Retour - MainFrame + MUsicLyricWidget - - New playlist - Nouvelle liste de lecture + + No lyrics yet + + + + MainFrame - - Settings - Paramètres + + Add playlist + Ajouter à la liste de lecture - - - Exit - Arrêter + + Add music + Ajouter une musique - - Add folder - Ajouter un dossier + + Equalizer + - - Add file - Ajouter un fichier + + Settings + Paramètres - + Dark theme Thème sombre - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + + + Exit + Quitter + + + + Music is a local music player with beautiful design and simple functions. + Musique est un lecteur de musique local avec un beau design et des fonctions simples. + + + + + + + + Music + Musique - + Play/Pause - Lecture / Pause + Lecture/Pause - + Previous Précédent - - Invalid or non-existent file - fichier non valide ou inexistant + + Next + Suivant - - Failed to import, no vaild music file found! - Pas de fichiers musicaux trouvés! + + Successfully added to "%1" + Ajouté avec succès à '%1' - - All music - Toute la musique + + Already added to the playlist + Déjà ajouté à la liste de lecture + + + + 1 song added + 1 chanson ajoutée + + + + %1 songs added + %1 chansons ajoutées - - + + File is invalid or does not exist, load failed + Le fichier n'est pas valide ou n'existe pas, le chargement a échoué + + + + OK OK - - Successfully added to "%1" - Ajoutés vers "%1" + + Import failed, no valid music file found + Échec de l'importation, aucun fichier de musique valide n'a été trouvé - - Next - Suivant + + All music + Toute la musique - MusicListView + MusicListDataDelegate - - New playlist - Nouvelle liste de lecture + + + No songs + Aucune chanson - + + + 1 song + 1 chanson + + + + + %1 songs + %1 chansons + + + + MusicListDataWidget + + + + + + + + + + + + No songs + Aucune chanson + + + + + 1 album - 1 song + 1 album - 1 chanson + + + + + + + %1 album - %2 songs + %1 album - %2 chansons + + + + + %1 albums - %2 songs + %1 albums - %2 chansons + + + + + 1 artist - 1 song + 1 artiste - 1 chanson + + + + + %1 artist - %2 songs + %1 artiste - %2 chansons + + + + + %1 artists - %2 songs + %1 artistes - %2 chansons + + + + + 1 song + 1 chanson + + + + + + + %1 songs + %1 chansons + + + + + + + No search results + Aucun résultat de recherche + + + + + + All Music + Toute la musique + + + + + + + + + Time added + Temps ajouté + + + + + + + Album + Album + + + + + + + Artist + Artiste + + + + + Title + Titre + + + + Play All + Tout jouer + + + + Artists + Artistes + + + + Albums + Albums + + + + Custom + Personnalisé + + + + + + Search Results + + + + + Songs + Chansons + + + + No result found + Aucun résultat trouvé + + + + MusicListDialog + + + Play All + Tout jouer + + + + Shuffle + Lecture aléatoire + + + + MusicListInfoView + + + Play queue + Lire la file d'attente + + + + Add to new playlist + Ajouter à une nouvelle liste de lecture + + + + Pause + Pause + + + Play - Lecture + Jouer - + Add to playlist Ajouter à la liste de lecture - + Display in file manager Afficher dans le gestionnaire de fichiers - + + Remove from playlist + Supprimer de la liste de lecture + + + + Delete from local disk + Supprimer du disque local + + + Song info Informations sur la chanson - + + + Cancel + Annuler + + + + Remove + Retirer + + + + Are you sure you want to remove %1? + Voulez-vous vraiment supprimer %1 ? + + + + Are you sure you want to remove the selected %1 songs? + Voulez-vous vraiment supprimer les chansons %1 sélectionnées ? + + + + Delete + Supprimer + + + Are you sure you want to delete %1? - + Voulez-vous vraiment supprimer %1 ? - - + + Are you sure you want to delete the selected %1 songs? - + Voulez-vous vraiment supprimer les %1 chansons sélectionnées ? - - Remove from playlist - Enlever de la liste de lecture + + + The song files contained will also be deleted + Les fichiers de chansons contenus seront également supprimés + + + MusicListItem - - Delete from local disk - Supprimer du disque local + + Are you sure you want to delete this playlist? + Voulez-vous vraiment supprimer cette liste de lecture ? - - Encoding - Encodage + + Cancel + Annuler - + + Delete + Supprimer + + + + MusicListScrollArea + + + Library + Bibliothèque + + + + Playlists + Listes de lecture + + + + MusicListView + + + My Favorites + + + + + + Are you sure you want to delete this playlist? + Voulez-vous vraiment supprimer cette liste de lecture ? + + + + Cancel Annuler - + + + + Delete Supprimer - - Deleting the current song will also delete the song files contained - Supprimer la chanson supprimera également le fichier + + + Pause + Pause - + + + Play + Jouer + + + + + Rename + Renommer + + + + PlayListView + + Unknown artist Artiste inconnu - + Unknown album Album inconnu - - - MusicListWidget - - No Music - Pas de musique + + Play queue + Lire la file d'attente - - No result found - Aucun résultat + + musicResult + - - Play All - Tout lire + + My favorites + Mes favoris - - Time added - Temps ajouté + + Add to new playlist + Ajouter à une nouvelle liste de lecture - - Title - Titre + + Pause + Pause - - Artist - Artiste + + + Play + Jouer - - Album name - Nom de l'album + + Add to playlist + Ajouter à la liste de lecture - - Custom - Personnalisé + + Display in file manager + Afficher dans le gestionnaire de fichiers - - - PlayListItem - - Are you sure you want to delete this playlist? - + Remove from playlist + Supprimer de la liste de lecture - - Delete - Supprimer + + Remove from play queue + + + + + Delete from local disk + Supprimer du disque local + + + + Encoding + Encodage + + + + Song info + Informations sur la chanson - + + Cancel Annuler - - - PlayListView - - - Play - Lecture + + Remove + Retirer - - - Rename - Renommer + + Are you sure you want to remove %1? + Voulez-vous vraiment supprimer %1 ? + + + + Are you sure you want to remove the selected %1 songs? + Voulez-vous vraiment supprimer les chansons %1 sélectionnées ? - - + Delete Supprimer + + + Are you sure you want to delete %1? + Voulez-vous vraiment supprimer %1 ? + + + + + Are you sure you want to delete the selected %1 songs? + Voulez-vous vraiment supprimer les %1 chansons sélectionnées ? + + + + + The song files contained will also be deleted + Les fichiers de chansons contenus seront également supprimés + + + + PlayListWidget + + + + No songs + Aucune chanson + + + + No search results + Aucun résultat de recherche + + + + Play Queue + Lire la file d'attente + + + + Empty + Vide + + + + 1 song + 1 chanson + + + + %1 songs + %1 chansons + + + + Playlist + + + + Unknown album + Album inconnu + + + + + + Unknown artist + Artiste inconnu + PlaylistManager - + New playlist Nouvelle liste de lecture - + + + + Albums + Albums + + + + + + Artists + Artistes + + + + All Music Toute la musique - + My favorites Mes favoris - + Search result Résultat de la recherche - - - PlaylistWidget - - New playlist - Nouvelle liste de lecture + + Play + Jouer + + + + Music + Musique QApplication - - Deepin Music - Deepin Musique + + Music + Musique QObject - - Deepin Music - Deepin Musique - - Minimize to system tray - Réduire dans la zone de notification + Réduire dans la barre d'état système - Exit Deepin Music - Quitter Deepin Musique + Exit Music + Quitter Musique @@ -511,7 +1069,7 @@ Enable fade in/out - + Activer le fondu entrant/sortant @@ -526,17 +1084,17 @@ Basic - Simple + Basique Play - Lecture + Jouer Shortcuts - Raccourcis + Raccourcis @@ -551,7 +1109,7 @@ Play/Pause - Lecture / Pause + Lecture/Pause @@ -561,7 +1119,7 @@ Volume down - Baisser le volume + Réduction du volume @@ -570,20 +1128,150 @@ + SearchLyricsWidget + + + Find Lyrics + Trouver des paroles + + + + Title + Titre + + + + Artist + Artiste + + + + Search + Rechercher + + + SearchResult - - - Search "%1" in Deepin Music - Checher "%1" dans Deepin Musique + + Music + Musique + + + + Artists + Artistes + + + + Albums + Albums + + + + Shortcut + + + Play + Jouer + + + + Songs + Chansons + + + + Playlists + Listes de lecture + + + + Settings + Paramètres + + + + Play/Pause + Lecture/Pause + + + + Previous + Précédent + + + + Next + Suivant + + + + Volume Up + Augmenter le volume + + + + Volume Down + Réduction du volume + + + + Mute + Muet + + + + Favorite + Favoris + + + + Unfavorite + Défavoris + + + + Song info + Informations sur la chanson + + + + New playlist + Nouvelle liste de lecture + + + + Add music + Ajouter une musique + + + + Rename playlist + Renommer la liste de lecture + + + + Remove from playlist + Supprimer de la liste de lecture + + + + Help + Aide + + + + Display shortcuts + Afficher les raccourcis TitlebarWidget - + Search Rechercher - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_gl_ES.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_gl_ES.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_gl_ES.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_gl_ES.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,245 @@ - + + + CloseConfirmDialog - + Please select your operation Por favor, selecciona a túa operación - + Exit Saír - + Minimize to system tray Minimizar na bandexa - + Do not ask again - + - + Cancel Cancelar - + + Confirm + + + OK - Aceptar + Aceptar + + + + DequalizerDialog + + + Custom + Personalizado + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Restablecer o predefinido Footer - + Previous Anterior - + Next Seguinte - + Play/Pause Rep./Pausar - + Favorite Favorito - + Lyrics Letras - + + Play Queue + + + + Unknown Title Título descoñecido - - - + + + Unknown artist Artista descoñecido - + Play Mode Modo de reprodución - Playlist - Lista de reprodución + Lista de reprodución - + List Loop Lista en bucle - + Single Loop Un só bucle - + Shuffle Modo aleatorio @@ -100,24 +247,37 @@ ImportWidget - Add folder - Engadir cartafol + Engadir cartafol + + + + Open Folder + - - + + Add Music + + + + + Scan Comprobar - - + + + %1 music directory or drag music files here + + + %1 music directory or drag & drop music file to add music - %1 directorio de música ou arrastra e solta o ficheiro musical para engadir música + %1 directorio de música ou arrastra e solta o ficheiro musical para engadir música - + Loading music, please wait... Cargando música, por favor agarda... @@ -125,47 +285,52 @@ InfoDialog - + Title: Título: - + Artist: Artista: - + Album: Álbum: - + Type: Tipo: - + Path: Ruta: - + Unknown artist Artista descoñecido - + Unknown album Álbum descoñecido - + Size: Tamaño: - + + Basic info + + + + Duration: Duración: @@ -173,7 +338,7 @@ LoadWidget - + Loading... Cargando... @@ -183,7 +348,7 @@ Find lyrics - + @@ -201,297 +366,843 @@ Buscar - + Back Volver + MUsicLyricWidget + + + No lyrics yet + + + + MainFrame - New playlist - Nova lista de reprodución + Nova lista de reprodución - + Settings Axustes - - + + Exit Saír - Add folder - Engadir cartafol + Engadir cartafol - Add file - Engadir ficheiro + Engadir ficheiro - + Dark theme Tema Escuro - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - - - - + Play/Pause Rep./Pausar - + Previous Anterior - Invalid or non-existent file - O ficheiro non é válido ou non existe + O ficheiro non é válido ou non existe - Failed to import, no vaild music file found! - Fallo na importación, non se atopou un ficheiro de música válido! + Fallo na importación, non se atopou un ficheiro de música válido! - + All music Toda a música - - + + OK Aceptar - + + Add playlist + + + + + Add music + + + + + Equalizer + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" Engadida con éxito "%1" - + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next Seguinte - MusicListView + MusicListDataDelegate + + + + No songs + + + + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + Toda a música + + + + + + + + + Time added + Tempo engadido + + + + + + + Album + + + + + + + + Artist + Artista + + + + + Title + Título + + + + Play All + Reproducir todo + + + + Artists + + + + + Albums + + + + + Custom + Personalizado + + + + + + Search Results + + + + + Songs + + + + + No result found + Non se atoparon resultados + + + + MusicListDialog + + + Play All + Reproducir todo + + + + Shuffle + Modo aleatorio + + + + MusicListInfoView - New playlist - Nova lista de reprodución + Nova lista de reprodución + + + + Play queue + + + + + Add to new playlist + - + + Pause + + + + Play - Reproducir + Reproducir - + Add to playlist - Engadir á lista de reprodución + Engadir á lista de reprodución - + Display in file manager - Amosar no xestor de ficheiros + Amosar no xestor de ficheiros - + + Remove from playlist + Eliminar da lista de reprodución + + + + Delete from local disk + Eliminar do disco local + + + Song info - Información da canción + Información da canción + + + + + Cancel + Cancelar + + + + Remove + - + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + Eliminar + + + Are you sure you want to delete %1? - + - - + + Are you sure you want to delete the selected %1 songs? - + + + + + + The song files contained will also be deleted + + + + + MusicListItem + + + Are you sure you want to delete this playlist? + + + + + Cancel + Cancelar + + + + Delete + Eliminar + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + + MusicListView + + New playlist + Nova lista de reprodución + + + + + Play + Reproducir + + + Add to playlist + Engadir á lista de reprodución + + + Display in file manager + Amosar no xestor de ficheiros + + + Song info + Información da canción - Remove from playlist - Eliminar da lista de reprodución + Eliminar da lista de reprodución - Delete from local disk - Eliminar do disco local + Eliminar do disco local - Encoding - Codificación + Codificación + + + + My Favorites + + + + + + Are you sure you want to delete this playlist? + - + + Cancel Cancelar - + + + + Delete Eliminar - + + + Pause + + + + + + Rename + Renomear + + Deleting the current song will also delete the song files contained - Ao eliminar a canción actual eliminarase tamén o ficheiro + Ao eliminar a canción actual eliminarase tamén o ficheiro - Unknown artist - Artista descoñecido + Artista descoñecido - Unknown album - Álbum descoñecido + Álbum descoñecido MusicListWidget - No Music - Sen música + Sen música - No result found - Non se atoparon resultados + Non se atoparon resultados - Play All - Reproducir todo + Reproducir todo - Time added - Tempo engadido + Tempo engadido - Title - Título + Título - Artist - Artista + Artista - Album name - Nome do álbum + Nome do álbum - Custom - Personalizado + Personalizado PlayListItem - - Are you sure you want to delete this playlist? - - - - Delete - Eliminar + Eliminar - Cancel - Cancelar + Cancelar PlayListView - - + New playlist + Nova lista de reprodución + + + + Play queue + + + + + musicResult + + + + + My favorites + Os meus favoritos + + + + Add to new playlist + + + + + Pause + + + + + Play Reproducir - - + + Add to playlist + Engadir á lista de reprodución + + + + Display in file manager + Amosar no xestor de ficheiros + + + Remove from playlist + Eliminar da lista de reprodución + + + + Remove from play queue + + + + + Delete from local disk + Eliminar do disco local + + + + Encoding + Codificación + + + + Song info + Información da canción + + + + + Cancel + Cancelar + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + Rename - Renomear + Renomear - - + Delete Eliminar + + + Unknown artist + Artista descoñecido + + + + Unknown album + Álbum descoñecido + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + Álbum descoñecido + + + + + + Unknown artist + Artista descoñecido + PlaylistManager - + New playlist Nova lista de reprodución - + Artist + Artista + + + + + + Albums + + + + + + + Artists + + + + + All Music Toda a música - + My favorites Os meus favoritos - + Search result Resultados da busca + + + Play + Reproducir + + + + Music + + PlaylistWidget - New playlist - Nova lista de reprodución + Nova lista de reprodución QApplication - Deepin Music - Música + Música + + + + Music + QObject - Deepin Music - Música + Música @@ -499,9 +1210,13 @@ Minimizar na bandexa - Exit Deepin Music - Saír de Música + Saír de Música + + + + Exit Music + @@ -511,7 +1226,7 @@ Enable fade in/out - + @@ -570,20 +1285,154 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + Título + + + + Artist + Artista + + + + Search + Buscar + + + SearchResult - - Search "%1" in Deepin Music - Buscar "%1" en Música + Buscar "%1" en Música + + + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + Reproducir + + + + Songs + + + + + Playlists + + + + + Settings + Axustes + + + + Play/Pause + Rep./Pausar + + + + Previous + Anterior + + + + Next + Seguinte + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + Favorito + + + + Unfavorite + + + + + Song info + Información da canción + + + + New playlist + Nova lista de reprodución + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + Eliminar da lista de reprodución + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search Buscar - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_he.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_he.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_he.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_he.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,245 @@ - + + + CloseConfirmDialog - + Please select your operation - + - + Exit יציאה - + Minimize to system tray - + - + Do not ask again - + - + Cancel ביטול - + + Confirm + + + OK - אישור + אישור + + + + DequalizerDialog + + + Custom + בהתאמה אישית + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Footer - + Previous הקודם - + Next הבא - + Play/Pause נגינה/השהיה - + Favorite הוספה למועדפים - + Lyrics מילים - + + Play Queue + + + + Unknown Title אין כותרת - - - + + + Unknown artist אמן לא ידוע - + Play Mode מצב נגינה - Playlist - רשימת נגינה + רשימת נגינה - + List Loop - + - + Single Loop - + - + Shuffle ערבול @@ -100,24 +247,37 @@ ImportWidget - Add folder - הוסף תיקייה + הוסף תיקייה + + + + Open Folder + + + + + Add Music + - - + + Scan סריקה - - + + + %1 music directory or drag music files here + + + %1 music directory or drag & drop music file to add music - %1 תיקיית מוזיקה או שניתן לגרור ולשחרר קובץ מוזיקה כדי להוסיף מוזיקה + %1 תיקיית מוזיקה או שניתן לגרור ולשחרר קובץ מוזיקה כדי להוסיף מוזיקה - + Loading music, please wait... המוזיקה נטענת, נא להמתין… @@ -125,47 +285,52 @@ InfoDialog - + Title: שם: - + Artist: אמן: - + Album: אלבום: - + Type: סוג - + Path: נתיב: - + Unknown artist אמן לא ידוע - + Unknown album אלבום לא ידוע - + Size: גודל: - + + Basic info + + + + Duration: משך: @@ -173,7 +338,7 @@ LoadWidget - + Loading... טוען... @@ -183,7 +348,7 @@ Find lyrics - + @@ -201,307 +366,849 @@ חיפוש - + Back חזרה + MUsicLyricWidget + + + No lyrics yet + + + + MainFrame - New playlist - רשימת נגינה חדשה + רשימת נגינה חדשה - + Settings הגדרות - - + + Exit יציאה - Add folder - הוסף תיקייה + הוסף תיקייה - Add file - הוסף קובץ + הוסף קובץ - + Dark theme - - - - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + - + Play/Pause נגינה/השהיה - + Previous הקודם - - Invalid or non-existent file - - - - Failed to import, no vaild music file found! - יבוא הקובץ נכשל, לא נמצא קובץ מוזיקה תקין! + יבוא הקובץ נכשל, לא נמצא קובץ מוזיקה תקין! - + All music - + - - + + OK אישור - + + Add playlist + + + + + Add music + + + + + Equalizer + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" נוסף בהצלחה אל „%1“ - + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next הבא - MusicListView + MusicListDataDelegate + + + + No songs + + + + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + כל המוזיקה + + + + + + + + + Time added + מועד ההוספה + + + + + + + Album + + + + + + + + Artist + אמן + + + + + Title + שם + + + + Play All + לנגן הכול + + + + Artists + + + + + Albums + + + + + Custom + בהתאמה אישית + + + + + + Search Results + + + + + Songs + + + + + No result found + לא נמצאו תוצאות + + + + MusicListDialog + + + Play All + לנגן הכול + + + + Shuffle + ערבול + + + + MusicListInfoView - New playlist - רשימת נגינה חדשה + רשימת נגינה חדשה + + + + Play queue + - + + Add to new playlist + + + + + Pause + + + + Play - נגינה + נגינה - + Add to playlist - הוספה לרשימת נגינה + הוספה לרשימת נגינה - + Display in file manager - הצגה במנהל הקבצים + הצגה במנהל הקבצים + + + + Remove from playlist + הסרה מרשימת נגינה + + + + Delete from local disk + מחיקה מהכונן המקומי - + Song info - פרטי השיר + פרטי השיר + + + + + Cancel + ביטול + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + מחיקה - + Are you sure you want to delete %1? - + - - + + Are you sure you want to delete the selected %1 songs? - + + + + + + The song files contained will also be deleted + + + + + MusicListItem + + + Are you sure you want to delete this playlist? + + + + + Cancel + ביטול + + + + Delete + מחיקה + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + + MusicListView + + New playlist + רשימת נגינה חדשה + + + + + Play + נגינה + + + Add to playlist + הוספה לרשימת נגינה + + + Display in file manager + הצגה במנהל הקבצים + + + Song info + פרטי השיר - Remove from playlist - הסרה מרשימת נגינה + הסרה מרשימת נגינה - Delete from local disk - מחיקה מהכונן המקומי + מחיקה מהכונן המקומי - Encoding - קידוד + קידוד - + + My Favorites + + + + + + Are you sure you want to delete this playlist? + + + + + Cancel ביטול - + + + + Delete מחיקה - + + + Pause + + + + + + Rename + שינוי שם + + Deleting the current song will also delete the song files contained - מחיקת השיר הנוכחי תמחוק גם את קובצי השירים שבתוכו + מחיקת השיר הנוכחי תמחוק גם את קובצי השירים שבתוכו - Unknown artist - אמן לא ידוע + אמן לא ידוע - Unknown album - אלבום לא ידוע + אלבום לא ידוע MusicListWidget - No Music - אין מוזיקה + אין מוזיקה - No result found - לא נמצאו תוצאות + לא נמצאו תוצאות - Play All - לנגן הכול + לנגן הכול - Time added - מועד ההוספה + מועד ההוספה - Title - שם + שם - Artist - אמן + אמן - Album name - שם האלבום + שם האלבום - Custom - בהתאמה אישית + בהתאמה אישית PlayListItem - - Are you sure you want to delete this playlist? - - - - Delete - מחיקה + מחיקה - Cancel - ביטול + ביטול PlayListView - - + New playlist + רשימת נגינה חדשה + + + + Play queue + + + + + musicResult + + + + + My favorites + המועדפים שלי + + + + Add to new playlist + + + + + Pause + + + + + Play נגינה - - + + Add to playlist + הוספה לרשימת נגינה + + + + Display in file manager + הצגה במנהל הקבצים + + + Remove from playlist + הסרה מרשימת נגינה + + + + Remove from play queue + + + + + Delete from local disk + מחיקה מהכונן המקומי + + + + Encoding + קידוד + + + + Song info + פרטי השיר + + + + + Cancel + ביטול + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + Rename - שינוי שם + שינוי שם - - + Delete מחיקה + + + Unknown artist + אמן לא ידוע + + + + Unknown album + אלבום לא ידוע + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + אלבום לא ידוע + + + + + + Unknown artist + אמן לא ידוע + PlaylistManager - + New playlist רשימת נגינה חדשה - + Artist + אמן + + + + + + Albums + + + + + + + Artists + + + + + All Music כל המוזיקה - + My favorites המועדפים שלי - + Search result תוצאות חיפוש + + + Play + נגינה + + + + Music + + PlaylistWidget - New playlist - רשימת נגינה חדשה + רשימת נגינה חדשה QApplication - Deepin Music - נגן מוסיקה Deepin + נגן מוסיקה Deepin + + + + Music + QObject - Deepin Music - Deepin מוזיקה + Deepin מוזיקה Minimize to system tray - + - Exit Deepin Music - + Exit Music + @@ -511,17 +1218,17 @@ Enable fade in/out - + Remember playback position - + Close Main Window - + @@ -541,7 +1248,7 @@ Restore Defaults - + @@ -570,20 +1277,154 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + שם + + + + Artist + אמן + + + + Search + חיפוש + + + SearchResult - - Search "%1" in Deepin Music - חיפוש אחר „%1“ ב־Deepin מוזיקה + חיפוש אחר „%1“ ב־Deepin מוזיקה + + + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + נגינה + + + + Songs + + + + + Playlists + + + + + Settings + הגדרות + + + + Play/Pause + נגינה/השהיה + + + + Previous + הקודם + + + + Next + הבא + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + הוספה למועדפים + + + + Unfavorite + + + + + Song info + פרטי השיר + + + + New playlist + רשימת נגינה חדשה + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + הסרה מרשימת נגינה + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search חיפוש - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_hi_IN.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_hi_IN.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_hi_IN.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_hi_IN.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,181 +1,346 @@ - + + + CloseConfirmDialog - + Please select your operation - + कृपया कार्य चुने - + Exit बाहर - + Minimize to system tray - + सिस्टम ट्रे में छोटा करें - + Do not ask again - + दोबारा मत पूछें - + Cancel रद्द करो - + + Confirm + + + OK - ठीक + ठीक + + + + DequalizerDialog + + + Custom + स्वयं के द्वारा + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + डिफॉल्ट्स पुनःस्थापित करें Footer - + Previous पिछला - + Next आगे - + Play/Pause बजाएं/रोकें - + Favorite - + प्रिय - + Lyrics - गीत + गीत के बोल - + + Play Queue + + + + Unknown Title - + अज्ञात गीत - - - + + + Unknown artist - ज्ञात कलाकार + अज्ञात कलाकार - + Play Mode - + प्ले मोड - Playlist - चलाने की सूची + प्लेलिस्ट - + List Loop - + लिस्ट लूप - + Single Loop - + सिंगल लूप - + Shuffle - + फेर बदलें ImportWidget - Add folder - फोंल्डर जोड़ें + फोंल्डर जोड़ें + + + + Open Folder + + + + + Add Music + - - + + Scan स्कैन - - + + + %1 music directory or drag music files here + + + %1 music directory or drag & drop music file to add music - + %1 संगीत निर्देशिका या संगीत जोड़ने के लिए संगीत फ़ाइल खींचें और छोड़ें - + Loading music, please wait... - + संगीत लोड हो रहा है, कृपया प्रतीक्षा करें... InfoDialog - + Title: टाइटल्स: - + Artist: कलाकार: - + Album: - + एल्बम: - + Type: प्रकार: - + Path: - + रास्ता: - + Unknown artist - ज्ञात कलाकार + अज्ञात कलाकार - + Unknown album - ज्ञात ऐल्बम + अज्ञात ऐल्बम - + Size: आकार: - + + Basic info + + + + Duration: - + अवधि: LoadWidget - + Loading... - + लोड हो रहा है... @@ -183,7 +348,7 @@ Find lyrics - + बोल ढूँढें @@ -198,335 +363,901 @@ Search - खोज + खोजें - + Back वापस + MUsicLyricWidget + + + No lyrics yet + + + + MainFrame - New playlist - + नई प्लेलिस्ट - + Settings - व्यवस्था + सेटिंग्स - - + + Exit बाहर - Add folder - फोंल्डर जोड़ें + फोंल्डर जोड़ें - Add file - फ़ाइल जोड़ें + फ़ाइल जोड़ें - + Dark theme - + डार्क थीम - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + दीपिन संगीत एक सुंदर और सरल संगीत चालक है जो स्थानीय ऑडियो चलता है। यह प्लेबैक के दौरान गीत के बोल देखने, दोषरहित ऑडियो चलाने और प्लेलिस्ट अनुकूलन आदि का समर्थन करता है। - + Play/Pause बजाएं/रोकें - + Previous पिछला - Invalid or non-existent file - + अमान्य या गैर-मौजूद फ़ाइल - Failed to import, no vaild music file found! - + आयात करने में विफल, कोई मान्य संगीत फ़ाइल नहीं मिली! - + All music - + सारे गाने - - + + OK ठीक - + + Add playlist + + + + + Add music + + + + + Equalizer + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" - + सफलतापूर्वक "%1" में जोड़ दिया गया + + + + Already added to the playlist + - + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next आगे + MusicListDataDelegate + + + + No songs + + + + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + सारे गाने + + + + + + + + + Time added + जोड़ का समय + + + + + + + Album + + + + + + + + Artist + कलाकार + + + + + Title + टाइटल + + + + Play All + सभी को प्ले करें + + + + Artists + + + + + Albums + + + + + Custom + स्वयं के द्वारा + + + + + + Search Results + + + + + Songs + + + + + No result found + कोई परिणाम नहीं मिला + + + + MusicListDialog + + + Play All + सभी को प्ले करें + + + + Shuffle + फेर बदलें + + + + MusicListInfoView + + New playlist + नई प्लेलिस्ट + + + + Play queue + + + + + Add to new playlist + + + + + Pause + + + + + Play + चलायें + + + + Add to playlist + प्लेलिस्ट में जोड़ें + + + + Display in file manager + फ़ाइल मैनेजर में प्रदर्शित करें + + + + Remove from playlist + प्लेलिस्ट से हटाएँ + + + + Delete from local disk + स्थानीय डिस्क से हटाएं + + + + Song info + गाने की जानकारी + + + + + Cancel + रद्द करो + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + हटाएँ + + + + Are you sure you want to delete %1? + क्या आप स्पष्ट होकर %1 को हटाना चाहते हैं ? + + + + + Are you sure you want to delete the selected %1 songs? + क्या आप स्पष्ट होकर चयनित %1 गाने हटाना चाहते हैं ? + + + + + The song files contained will also be deleted + + + + + MusicListItem + + + Are you sure you want to delete this playlist? + क्या आप स्पष्ट होकर यह प्लेलिस्ट हटाना चाहते हैं ? + + + + Cancel + रद्द करो + + + + Delete + हटाएँ + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + MusicListView - New playlist - + नई प्लेलिस्ट - + + Play चलायें - Add to playlist - + प्लेलिस्ट में जोड़ें - Display in file manager - + फ़ाइल मैनेजर में प्रदर्शित करें - Song info - + गाने की जानकारी - Are you sure you want to delete %1? - + क्या आप स्पष्ट होकर %1 को हटाना चाहते हैं ? - - Are you sure you want to delete the selected %1 songs? - + क्या आप स्पष्ट होकर चयनित %1 गाने हटाना चाहते हैं ? - Remove from playlist - चलाने की सूची से हटाएँ + प्लेलिस्ट से हटाएँ - Delete from local disk - + स्थानीय डिस्क से हटाएं - Encoding - + एन्कोडिंग - + + My Favorites + + + + + + Are you sure you want to delete this playlist? + क्या आप स्पष्ट होकर यह प्लेलिस्ट हटाना चाहते हैं ? + + + + Cancel रद्द करो - + + + + Delete हटाएँ - + + + Pause + + + + + + Rename + रीनैम + + Deleting the current song will also delete the song files contained - + वर्तमान गीत को हटाने से निहित गीत फ़ाइलें भी हट जाएँगी - Unknown artist - ज्ञात कलाकार + ज्ञात कलाकार - Unknown album - ज्ञात ऐल्बम + ज्ञात ऐल्बम MusicListWidget - No Music - + कोई संगीत नहीं है - No result found - + कोई परिणाम नहीं मिला - Play All - सभी को प्ले करें + सभी को प्ले करें - Time added - + जोड़ का समय - Title - टाइटल + टाइटल - Artist - कलाकार + कलाकार - Album name - + एल्बम का नाम - Custom - स्वयं के द्वारा + स्वयं के द्वारा PlayListItem - Are you sure you want to delete this playlist? - + क्या आप स्पष्ट होकर यह प्लेलिस्ट हटाना चाहते हैं ? - Delete - हटाएँ + हटाएँ - Cancel - रद्द करो + रद्द करो PlayListView - - + New playlist + नई प्लेलिस्ट + + + + Play queue + + + + + musicResult + + + + + My favorites + मेरे पसंदीदा + + + + Add to new playlist + + + + + Pause + + + + + Play चलायें - - + + Add to playlist + प्लेलिस्ट में जोड़ें + + + + Display in file manager + फ़ाइल मैनेजर में प्रदर्शित करें + + + Remove from playlist + प्लेलिस्ट से हटाएँ + + + + Remove from play queue + + + + + Delete from local disk + स्थानीय डिस्क से हटाएं + + + + Encoding + एन्कोडिंग + + + + Song info + गाने की जानकारी + + + + + Cancel + रद्द करो + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + क्या आप स्पष्ट होकर %1 को हटाना चाहते हैं ? + + + + + Are you sure you want to delete the selected %1 songs? + क्या आप स्पष्ट होकर चयनित %1 गाने हटाना चाहते हैं ? + + + + + The song files contained will also be deleted + + + Rename - रीनैम + रीनैम - - + Delete हटाएँ + + + Unknown artist + + + + + Unknown album + + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + + + + + + + Unknown artist + + PlaylistManager - + New playlist - + नई प्लेलिस्ट - + Artist + कलाकार + + + + + + Albums + + + + + + + Artists + + + + + All Music - + सारे गाने - + My favorites - + मेरे पसंदीदा - + Search result - + परिणाम खोजें + + + + Play + चलायें + + + + Music + PlaylistWidget - New playlist - + नई प्लेलिस्ट QApplication - Deepin Music - डीपइन संगीत + डीपइन संगीत + + + + Music + QObject - Deepin Music - डीपइन संगीत + डीपइन संगीत Minimize to system tray - + सिस्टम ट्रे में छोटा करें - Exit Deepin Music - + डीपइन संगीत से बाहर आएं + + + + Exit Music + Autoplay - + ऑटो प्ले Enable fade in/out - + फ़ेड इन/आउट सक्षम करें Remember playback position - + प्लेबैक स्थिति याद रखें Close Main Window - + मुख्य विंडो बंद करें Basic - + मौलिक @@ -541,7 +1272,7 @@ Restore Defaults - + डिफॉल्ट्स पुनःस्थापित करें @@ -570,20 +1301,154 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + टाइटल + + + + Artist + कलाकार + + + + Search + + + + SearchResult - - Search "%1" in Deepin Music - + डीपइन संगीत में "%1" ढूंढें + + + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + चलायें + + + + Songs + + + + + Playlists + + + + + Settings + सेटिंग्स + + + + Play/Pause + बजाएं/रोकें + + + + Previous + पिछला + + + + Next + आगे + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + प्रिय + + + + Unfavorite + + + + + Song info + गाने की जानकारी + + + + New playlist + नई प्लेलिस्ट + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + प्लेलिस्ट से हटाएँ + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search खोज - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_hr.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_hr.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_hr.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_hr.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,245 @@ - + + + CloseConfirmDialog - + Please select your operation Molim izaberite vašu operaciju - + Exit Izađi - + Minimize to system tray - + - + Do not ask again - + - + Cancel Otkaži - + + Confirm + + + OK - U redu + U redu + + + + DequalizerDialog + + + Custom + Prilagođeno + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Obnovi zadano Footer - + Previous Prijašnje - + Next Slijedeće - + Play/Pause Reprodukcija/Pauza - + Favorite Omiljeni - + Lyrics Stihovi - + + Play Queue + + + + Unknown Title Nepoznati naslov - - - + + + Unknown artist Nepoznati umjetnik - + Play Mode Način reprodukcije - Playlist - Popis izvođenja + Popis izvođenja - + List Loop - + - + Single Loop - + - + Shuffle Izmješaj @@ -100,24 +247,37 @@ ImportWidget - Add folder - Dodaj mapu + Dodaj mapu + + + + Open Folder + - - + + Add Music + + + + + Scan Sken - - + + + %1 music directory or drag music files here + + + %1 music directory or drag & drop music file to add music - %1 mapu sa glazbom ili povucite i spustite glazbene datoteke kako biste dodali glazbu + %1 mapu sa glazbom ili povucite i spustite glazbene datoteke kako biste dodali glazbu - + Loading music, please wait... Učitavam glazbu, molim pričekajte... @@ -125,47 +285,52 @@ InfoDialog - + Title: Naslov: - + Artist: Umjetnik: - + Album: Album: - + Type: Vrsta: - + Path: Putanja: - + Unknown artist Nepoznati umjetnik - + Unknown album Nepoznati album - + Size: Veličina: - + + Basic info + + + + Duration: Trajanje: @@ -173,7 +338,7 @@ LoadWidget - + Loading... Učitavanje... @@ -183,7 +348,7 @@ Find lyrics - + @@ -201,307 +366,857 @@ Traži - + Back Natrag + MUsicLyricWidget + + + No lyrics yet + + + + MainFrame - New playlist - Nova lista izvođenja + Nova lista izvođenja - + Settings Postavke - - + + Exit Izađi - Add folder - Dodaj mapu + Dodaj mapu - Add file - Dodaj datoteku + Dodaj datoteku - + Dark theme Tamna tema - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - - - - + Play/Pause Reprodukcija/Pauza - + Previous Prijašnje - Invalid or non-existent file - Neispravna ili nepostojeća datoteka + Neispravna ili nepostojeća datoteka - Failed to import, no vaild music file found! - Pogreška prilikom uvoza, nisu pronađene ispravne glazbene datoteke! + Pogreška prilikom uvoza, nisu pronađene ispravne glazbene datoteke! - + All music Sva glazba - - + + OK U redu - + + Add playlist + + + + + Add music + + + + + Equalizer + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" Uspješno dodano u "%1" - + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next Slijedeće - MusicListView + MusicListDataDelegate + + + + No songs + + + + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + Sva glazba + + + + + + + + + Time added + Vrijeme dodavanja + + + + + + + Album + + + + + + + + Artist + Umjetnik + + + + + Title + Naslov + + + + Play All + Reproduciraj sve + + + + Artists + + + + + Albums + + + + + Custom + Prilagođeno + + + + + + Search Results + + + + + Songs + + + + + No result found + Nisu pronađeni rezultati + + + + MusicListDialog + + + Play All + Reproduciraj sve + + + + Shuffle + Izmješaj + + + + MusicListInfoView - New playlist - Nova lista izvođenja + Nova lista izvođenja + + + + Play queue + + + + + Add to new playlist + - + + Pause + + + + Play - Reprodukcija + Reprodukcija - + Add to playlist - Dodaj na list uizvođenja + Dodaj na list uizvođenja - + Display in file manager - Prikaži u upravitelju datotekama + Prikaži u upravitelju datotekama - + + Remove from playlist + Ukloni sa liste izvođenja + + + + Delete from local disk + Izbriši sa lokalnog diska + + + Song info - Informacije o pjesmi + Informacije o pjesmi + + + + + Cancel + Otkaži + + + + Remove + - + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + Obriši + + + Are you sure you want to delete %1? - + - - + + Are you sure you want to delete the selected %1 songs? - + + + + + + The song files contained will also be deleted + + + + + MusicListItem + + + Are you sure you want to delete this playlist? + + + + + Cancel + Otkaži + + + + Delete + Obriši + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + + MusicListView + + New playlist + Nova lista izvođenja + + + + + Play + Reprodukcija + + + Add to playlist + Dodaj na list uizvođenja + + + Display in file manager + Prikaži u upravitelju datotekama + + + Song info + Informacije o pjesmi - Remove from playlist - Ukloni sa liste izvođenja + Ukloni sa liste izvođenja - Delete from local disk - Izbriši sa lokalnog diska + Izbriši sa lokalnog diska - Encoding - Enkodiranje + Enkodiranje + + + + My Favorites + + + + + + Are you sure you want to delete this playlist? + - + + Cancel Otkaži - + + + + Delete Obriši - + + + Pause + + + + + + Rename + Preimenuj + + Deleting the current song will also delete the song files contained - Brisanje trenutne pjesme će također izbrisati i glazbenu datoteku pjesme. + Brisanje trenutne pjesme će također izbrisati i glazbenu datoteku pjesme. - Unknown artist - Nepoznati umjetnik + Nepoznati umjetnik - Unknown album - Nepoznati album + Nepoznati album MusicListWidget - No Music - Nema glazbe + Nema glazbe - No result found - Nisu pronađeni rezultati + Nisu pronađeni rezultati - Play All - Reproduciraj sve + Reproduciraj sve - Time added - Vrijeme dodavanja + Vrijeme dodavanja - Title - Naslov + Naslov - Artist - Umjetnik + Umjetnik - Album name - Ime albuma + Ime albuma - Custom - Prilagođeno + Prilagođeno PlayListItem - - Are you sure you want to delete this playlist? - - - - Delete - Obriši + Obriši - Cancel - Otkaži + Otkaži PlayListView - - + New playlist + Nova lista izvođenja + + + + Play queue + + + + + musicResult + + + + + My favorites + Moji omiljeni + + + + Add to new playlist + + + + + Pause + + + + + Play Reprodukcija - - + + Add to playlist + Dodaj na list uizvođenja + + + + Display in file manager + Prikaži u upravitelju datotekama + + + Remove from playlist + Ukloni sa liste izvođenja + + + + Remove from play queue + + + + + Delete from local disk + Izbriši sa lokalnog diska + + + + Encoding + Enkodiranje + + + + Song info + Informacije o pjesmi + + + + + Cancel + Otkaži + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + Rename - Preimenuj + Preimenuj - - + Delete Obriši + + + Unknown artist + Nepoznati umjetnik + + + + Unknown album + Nepoznati album + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + Nepoznati album + + + + + + Unknown artist + Nepoznati umjetnik + PlaylistManager - + New playlist Nova lista izvođenja - + Artist + Umjetnik + + + + + + Albums + + + + + + + Artists + + + + + All Music Sva glazba - + My favorites Moji omiljeni - + Search result Rezultat pretrage + + + Play + Reprodukcija + + + + Music + + PlaylistWidget - New playlist - Nova lista izvođenja + Nova lista izvođenja QApplication - Deepin Music - Deepin glazba + Deepin glazba + + + + Music + QObject - Deepin Music - Deepin glazba + Deepin glazba Minimize to system tray - + - Exit Deepin Music - Izađi iz Deepin glazbe + Izađi iz Deepin glazbe + + + + Exit Music + @@ -511,7 +1226,7 @@ Enable fade in/out - + @@ -570,20 +1285,154 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + Naslov + + + + Artist + Umjetnik + + + + Search + Traži + + + SearchResult - - Search "%1" in Deepin Music - Traži "%1" u Deepin glazbi + Traži "%1" u Deepin glazbi + + + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + Reprodukcija + + + + Songs + + + + + Playlists + + + + + Settings + Postavke + + + + Play/Pause + Reprodukcija/Pauza + + + + Previous + Prijašnje + + + + Next + Slijedeće + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + Omiljeni + + + + Unfavorite + + + + + Song info + Informacije o pjesmi + + + + New playlist + Nova lista izvođenja + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + Ukloni sa liste izvođenja + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search Traži - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_hu.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_hu.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_hu.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_hu.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,245 @@ - + + + CloseConfirmDialog - + Please select your operation Válasszon műveletet - + Exit Kilépés - + Minimize to system tray Tálcára - + Do not ask again - + Ne kérdezzen rá megint. - + Cancel Mégse - + + Confirm + + + OK - OK + OK + + + + DequalizerDialog + + + Custom + Egyéni + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Alaphelyzetbe állítás Footer - + Previous Előző - + Next Következő - + Play/Pause Lejátszás/Szünet - + Favorite Kedvencek - + Lyrics Zeneszöveg - + + Play Queue + + + + Unknown Title Ismeretlen zene-cím - - - + + + Unknown artist Ismeretlen előadó - + Play Mode Lejátszási mód - Playlist - Lejátszási lista + Lejátszási lista - + List Loop Újrajátszás listáról - + Single Loop Újra játszás - + Shuffle Keverés @@ -100,24 +247,37 @@ ImportWidget - Add folder - Mappa hozzáadása + Mappa hozzáadása + + + + Open Folder + + + + + Add Music + - - + + Scan Keresés - - + + + %1 music directory or drag music files here + + + %1 music directory or drag & drop music file to add music - %1 zene mappa vagy fogd és vidd a zene fájl hozzáadásához + %1 zene mappa vagy fogd és vidd a zene fájl hozzáadásához - + Loading music, please wait... Zene betöltés, várjunk.... @@ -125,47 +285,52 @@ InfoDialog - + Title: Cím: - + Artist: Előadó: - + Album: Album: - + Type: Típus: - + Path: Elérési útvonal: - + Unknown artist Ismeretlen előadó - + Unknown album Ismeretlen album - + Size: Méret: - + + Basic info + + + + Duration: Időtartam: @@ -173,7 +338,7 @@ LoadWidget - + Loading... Betöltés @@ -183,7 +348,7 @@ Find lyrics - + Dalszöveg keresése @@ -201,297 +366,851 @@ Keresés - + Back Vissza + MUsicLyricWidget + + + No lyrics yet + + + + MainFrame - New playlist - Új lejátszólista + Új lejátszólista - + Settings Beállítások - - + + Exit Kilépés - Add folder - Mappa hozzáadása + Mappa hozzáadása - Add file - Fájl hozzáadása + Fájl hozzáadása - + Dark theme Sötét téma - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + A Deepin Zene egy egyszerű zenelejátszó, amellyel a helyi könyvtáradban levő zenéidet tudod lejátszani. Támogatja a dalszövegek megjelenítését, a lejátszó listákat. Ezeket tetszésed szerint szerkesztheted is. - + Play/Pause Lejátszás/Szünet - + Previous Előző - Invalid or non-existent file - Érvénytelen, vagy nem létező fájl. + Érvénytelen, vagy nem létező fájl. - Failed to import, no vaild music file found! - Fájl érvénytelen vagy nem létezik, nem sikerült importálni! + Fájl érvénytelen vagy nem létezik, nem sikerült importálni! - + All music Összes zene - - + + OK OK - + + Add playlist + + + + + Add music + + + + + Equalizer + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" Sikeres hozzáadás ehhez: "%1" - + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next Következő + MusicListDataDelegate + + + + No songs + + + + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + Összes zeneszám + + + + + + + + + Time added + Idő hozzáadva + + + + + + + Album + + + + + + + + Artist + Előadó + + + + + Title + Cím + + + + Play All + Összes lejátszása + + + + Artists + + + + + Albums + + + + + Custom + Egyéni + + + + + + Search Results + + + + + Songs + + + + + No result found + Nincs találat + + + + MusicListDialog + + + Play All + Összes lejátszása + + + + Shuffle + Keverés + + + + MusicListInfoView + + + Play queue + + + + + Add to new playlist + + + + + Pause + + + + + Play + Lejátszás + + + + Add to playlist + Hozzáadás a lejátszólistához + + + + Display in file manager + Megjelenítés fájlkezelőben + + + + Remove from playlist + Éltávoltás a lejátszási listából + + + + Delete from local disk + Törlés a helyi lemezről + + + + Song info + Zeneszám információ + + + + + Cancel + Mégse + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + Törlés + + + + Are you sure you want to delete %1? + Biztos, hogy törölni akarod %1 ? + + + + + Are you sure you want to delete the selected %1 songs? + Biztos, hogy törölni akarod a kiválasztott %1 zenét? + + + + + The song files contained will also be deleted + + + + + MusicListItem + + + Are you sure you want to delete this playlist? + Biztos, hogy tötölni akarod ezt a lejátszási listát? + + + + Cancel + Mégse + + + + Delete + Törlés + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + MusicListView - New playlist - Új lejátszási lista + Új lejátszási lista - + + Play Lejátszás - Add to playlist - Hozzáadás a lejátszólistához + Hozzáadás a lejátszólistához - Display in file manager - Megjelenítés fájlkezelőben + Megjelenítés fájlkezelőben - Song info - Zeneszám információ + Zeneszám információ - Are you sure you want to delete %1? - + Biztos, hogy törölni akarod %1 ? - - Are you sure you want to delete the selected %1 songs? - + Biztos, hogy törölni akarod a kiválasztott %1 zenét? - Remove from playlist - Éltávoltás a lejátszási listából + Éltávoltás a lejátszási listából - Delete from local disk - Törlés a helyi lemezről + Törlés a helyi lemezről - Encoding - Kódolás + Kódolás + + + + My Favorites + - + + + Are you sure you want to delete this playlist? + Biztos, hogy tötölni akarod ezt a lejátszási listát? + + + + Cancel Mégse - + + + + Delete Törlés - + + + Pause + + + + + + Rename + Átnevezés + + Deleting the current song will also delete the song files contained - Az aktuális zeneszám törlésével törlésre kerül a zene fájl + Az aktuális zeneszám törlésével törlésre kerül a zene fájl - Unknown artist - Ismeretlen előadó + Ismeretlen előadó - Unknown album - Ismeretlen album + Ismeretlen album MusicListWidget - No Music - Nincs zeneszám + Nincs zeneszám - No result found - Nincs találat + Nincs találat - Play All - Összes lejátszása + Összes lejátszása - Time added - Idő hozzáadva + Idő hozzáadva - Title - Cím + Cím - Artist - Előadó + Előadó - Album name - Album címe + Album címe - Custom - Egyéni + Egyéni PlayListItem - Are you sure you want to delete this playlist? - + Biztos, hogy tötölni akarod ezt a lejátszási listát? - Delete - Törlés + Törlés - Cancel - Mégse + Mégse PlayListView - - + + Play queue + + + + + musicResult + + + + + My favorites + Kedvenceim + + + + Add to new playlist + + + + + Pause + + + + + Play Lejátszás - - + + Add to playlist + Hozzáadás a lejátszólistához + + + + Display in file manager + Megjelenítés fájlkezelőben + + + Remove from playlist + Éltávoltás a lejátszási listából + + + + Remove from play queue + + + + + Delete from local disk + Törlés a helyi lemezről + + + + Encoding + Kódolás + + + + Song info + Zeneszám információ + + + + + Cancel + Mégse + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + Biztos, hogy törölni akarod %1 ? + + + + + Are you sure you want to delete the selected %1 songs? + Biztos, hogy törölni akarod a kiválasztott %1 zenét? + + + + + The song files contained will also be deleted + + + Rename - Átnevezés + Átnevezés - - + Delete Törlés + + + Unknown artist + Ismeretlen előadó + + + + Unknown album + Ismeretlen album + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + Ismeretlen album + + + + + + Unknown artist + Ismeretlen előadó + PlaylistManager - + New playlist Új lejátszási lista - + Artist + Előadó + + + + + + Albums + + + + + + + Artists + + + + + All Music Összes zeneszám - + My favorites Kedvenceim - + Search result Keresési eredmény + + + Play + Lejátszás + + + + Music + + PlaylistWidget - New playlist - Új lejátszási lista + Új lejátszási lista QApplication - Deepin Music - Deepin zenelejátszó + Deepin zenelejátszó + + + + Music + QObject - Deepin Music - Deepin Zene + Deepin Zene @@ -499,9 +1218,13 @@ Tálcára - Exit Deepin Music - Kilépés a Deepin Zenéből + Kilépés a Deepin Zenéből + + + + Exit Music + @@ -511,7 +1234,7 @@ Enable fade in/out - + Halkítás engedélyezése @@ -570,20 +1293,154 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + Cím + + + + Artist + Előadó + + + + Search + Keresés + + + SearchResult - - Search "%1" in Deepin Music - Keresés: "%1" a Deepin Zenelejátszóban + Keresés: "%1" a Deepin Zenelejátszóban + + + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + Lejátszás + + + + Songs + + + + + Playlists + + + + + Settings + Beállítások + + + + Play/Pause + Lejátszás/Szünet + + + + Previous + Előző + + + + Next + Következő + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + Kedvencek + + + + Unfavorite + + + + + Song info + Zeneszám információ + + + + New playlist + + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + Éltávoltás a lejátszási listából + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search Keresés - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_hy.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_hy.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_hy.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_hy.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,181 +1,338 @@ - + + + CloseConfirmDialog - + Please select your operation - + - + Exit - + - + Minimize to system tray - + - + Do not ask again - + - + Cancel Չեղարկել - + + Confirm + + + OK - Լավ + Լավ + + + + DequalizerDialog + + + Custom + Ընտրովի + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Footer - + Previous Նախորդ - + Next Հաջորդ - + Play/Pause Շարունակել/Ընդհատել - + Favorite - + - + Lyrics Բառեր - + + Play Queue + + + + Unknown Title - + - - - + + + Unknown artist Անհայտ կատարող - + Play Mode - + - Playlist - Ցանկ + Ցանկ - + List Loop - + - + Single Loop - + - + Shuffle - + ImportWidget - - Add folder - + + Open Folder + + + + + Add Music + - - + + Scan Ծրում - - - %1 music directory or drag & drop music file to add music - + + + %1 music directory or drag music files here + - + Loading music, please wait... - + InfoDialog - + Title: Անվանում` - + Artist: Կատարող` - + Album: - + - + Type: - + - + Path: - + - + Unknown artist Անհայտ կատարող - + Unknown album Անհայտ ալբոմ - + Size: - + - + + Basic info + + + + Duration: - + LoadWidget - + Loading... - + @@ -183,7 +340,7 @@ Find lyrics - + @@ -201,332 +358,791 @@ Փնտրել - + Back - + - MainFrame + MUsicLyricWidget - - New playlist - + + No lyrics yet + + + + MainFrame - + Settings Կարգավորումներ - - + + Exit - - - - - Add folder - + - - Add file - - - - + Dark theme - + - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + + Equalizer + - + Play/Pause Շարունակել/Ընդհատել - + Previous Նախորդ - - Invalid or non-existent file - + + All music + - - Failed to import, no vaild music file found! - + + + OK + Լավ - - All music - + + Add playlist + - - - OK - Լավ + + Add music + - + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" - + + + + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + - + Next Հաջորդ - MusicListView + MusicListDataDelegate - - New playlist - + + + No songs + - + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + + + + + + + + + + Time added + + + + + + + + Album + + + + + + + + Artist + Կատարող + + + + + Title + Անվանում + + + + Play All + Նվագարկել բոլորը + + + + Artists + + + + + Albums + + + + + Custom + Ընտրովի + + + + + + Search Results + + + + + Songs + + + + + No result found + + + + + MusicListDialog + + + Play All + Նվագարկել բոլորը + + + + Shuffle + + + + + MusicListInfoView + + + Play queue + + + + + Add to new playlist + + + + + Pause + + + + Play - Սկսել + Սկսել - + Add to playlist - + - + Display in file manager - + - + + Remove from playlist + + + + + Delete from local disk + + + + Song info - + + + + + + Cancel + Չեղարկել + + + + Remove + + + + + Are you sure you want to remove %1? + - + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + Ջնջել + + + Are you sure you want to delete %1? - + - - + + Are you sure you want to delete the selected %1 songs? - + - - Remove from playlist - + + + The song files contained will also be deleted + + + + MusicListItem - - Delete from local disk - + + Are you sure you want to delete this playlist? + - - Encoding - + + Cancel + Չեղարկել - + + Delete + Ջնջել + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + + MusicListView + + + + Play + Սկսել + + + + + Are you sure you want to delete this playlist? + + + + + My Favorites + + + + + Cancel Չեղարկել - + + + + Delete Ջնջել - - Deleting the current song will also delete the song files contained - + + + Pause + + + + + + Rename + Վերանվանել - Unknown artist - Անհայտ կատարող + Անհայտ կատարող - Unknown album - Անհայտ ալբոմ + Անհայտ ալբոմ MusicListWidget - - No Music - - - - - No result found - - - - Play All - Նվագարկել բոլորը + Նվագարկել բոլորը - - Time added - - - - Title - Անվանում + Անվանում - Artist - Կատարող - - - - Album name - + Կատարող - Custom - Ընտրովի + Ընտրովի PlayListItem - - Are you sure you want to delete this playlist? - - - - Delete - Ջնջել + Ջնջել - Cancel - Չեղարկել + Չեղարկել PlayListView - - + + Play queue + + + + + My favorites + + + + + Add to new playlist + + + + + Pause + + + + + Play Սկսել - - + + musicResult + + + + + Add to playlist + + + + + Display in file manager + + + + + Remove from play queue + + + + + Delete from local disk + + + + + Encoding + + + + + Song info + + + + + + Cancel + Չեղարկել + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + Rename - Վերանվանել + Վերանվանել - - + Delete Ջնջել + + + Unknown artist + Անհայտ կատարող + + + + Unknown album + Անհայտ ալբոմ + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + Անհայտ ալբոմ + + + + + + Unknown artist + Անհայտ կատարող + PlaylistManager - + New playlist - + + + + Artist + Կատարող + + + + + + Albums + - + + + + Artists + + + + + All Music - + - + My favorites - + - + Search result - + - - - PlaylistWidget - - New playlist - + + Play + Սկսել + + + + Music + QApplication - Deepin Music - Deepin Երաժշտական Նվագարկիչ + Deepin Երաժշտական Նվագարկիչ + + + + Music + QObject - Deepin Music - Deepin Music + Deepin Music Minimize to system tray - + - Exit Deepin Music - + Exit Music + Autoplay - + Enable fade in/out - + Remember playback position - + Close Main Window - + Basic - + @@ -536,12 +1152,12 @@ Shortcuts - + Restore Defaults - + @@ -561,29 +1177,159 @@ Volume down - + Volume up - + + + + + SearchLyricsWidget + + + Find Lyrics + + + + + Title + Անվանում + + + + Artist + Կատարող + + + + Search + Փնտրել SearchResult - - - Search "%1" in Deepin Music - + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + Սկսել + + + + Songs + + + + + Playlists + + + + + Settings + Կարգավորումներ + + + + Play/Pause + Շարունակել/Ընդհատել + + + + Previous + Նախորդ + + + + Next + Հաջորդ + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + + + + + Unfavorite + + + + + Song info + + + + + New playlist + + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search Փնտրել - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_id_ID.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_id_ID.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_id_ID.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_id_ID.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,533 +0,0 @@ - - - Footer - - - Previous - - - - - Next - - - - - Play/Pause - - - - - Favorite - - - - - Lyrics - - - - - Repeat Playlist - - - - - Repeat Song - - - - - Unknown Title - - - - - - - Unknown artist - - - - - Play Mode - - - - - Playlist - - - - - Shuffle - - - - - ImportWidget - - - Add Music - - - - - - Scan - - - - - - %1 music directory or drag & drop music file to add music - - - - - Loading music, please wait... - - - - - InfoDialog - - - Title: - - - - - Artist: - - - - - Album: - - - - - Type: - - - - - Path: - - - - - Size: - - - - - Duration: - - - - - Unkonw artist - - - - - Unkonw album - - - - - LyricWidget - - - Search lyrics - - - - - Title - - - - - Artist - - - - - Search - - - - - Back - - - - - MainFrame - - - New playlist - - - - - Add music - - - - - Add music file - - - - - Settings - - - - - Deep color mode - - - - - About - - - - - Deepin Music Player is a local music player with beautiful design and simple functions. It supports viewing lyrics when playing, playing lossless music and customize playlist, etc. - - - - - Exit - - - - - File invalid or does not exist, failed to load! - - - - - Failed to import, no vaild music file found! - - - - - OK - - - - - Deepin Music - Pemutar Musik Deepin - - - - Version: 3.0 - - - - - Help - - - - - Successfully added to "%1" - - - - - I got it - - - - - Music (%1) - - - - - MusicListView - - - New playlist - - - - - Play - - - - - Add to playlist - - - - - Display in file manager - - - - - Song info - - - - - Remove from playlist - - - - - Delete from local disk - - - - - Encoding - - - - - Cancel - - - - - Delete - - - - - Are you sure to delete %1? - - - - - - Are you sure to delete the selected %1 songs? - - - - - Deleting the current song will also delete the song files contained - - - - - Unknown artist - - - - - Unknown album - - - - - MusicListWidget - - - No Music - - - - - No result found - - - - - Play All - - - - - Time added - - - - - Title - - - - - Artist - - - - - Album name - - - - - Custom - - - - - PlayListItem - - - Delete - - - - - Are you sure to delete this playlist? - - - - - Cancel - - - - - PlayListView - - - - Play - - - - - - Rename - - - - - - Delete - - - - - PlaylistManager - - - New playlist - - - - - All Music - - - - - My favorites - - - - - Search result - - - - - PlaylistWidget - - - New playlist - - - - - QObject - - - Deepin Music - Pemutar Musik Deepin - - - - Autoplay - - - - - Enable fade - - - - - Resume play from last position - - - - - Basic settings - - - - - Play - - - - - Shortcuts - - - - - Restore to default - - - - - Next - - - - - Play/Pause - - - - - Previous - - - - - Volume down - - - - - Volume up - - - - - SearchResult - - - - Search "%1" in Deepin Music - - - - - TitleBarWidget - - - Search - - - - \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_id.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_id.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_id.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_id.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,245 @@ - + + + CloseConfirmDialog - + Please select your operation Mohon pilih operasi anda - + Exit Keluar - + Minimize to system tray Kecilkan ke baki sistem - + Do not ask again - + - + Cancel Batal - + + Confirm + + + OK - OK + OK + + + + DequalizerDialog + + + Custom + Kustom + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Pulihkan baku Footer - + Previous Sebelumnya - + Next Selanjutnya - + Play/Pause Mainkan/Jeda - + Favorite Favorit - + Lyrics Lirik - + + Play Queue + + + + Unknown Title Judul tidak diketahui - - - + + + Unknown artist Artis tidak diketahui - + Play Mode Mode main - Playlist - Daftar Putar + Daftar Putar - + List Loop Daftar putar - + Single Loop Putar sekali - + Shuffle Acak @@ -100,24 +247,37 @@ ImportWidget - Add folder - Tambah folder + Tambah folder + + + + Open Folder + - - + + Add Music + + + + + Scan Pindai - - + + + %1 music directory or drag music files here + + + %1 music directory or drag & drop music file to add music - %1 direktori musik atau seret dan lepas berkas musik untuk menambah musik + %1 direktori musik atau seret dan lepas berkas musik untuk menambah musik - + Loading music, please wait... Memuat musik, mohon menunggu... @@ -125,47 +285,52 @@ InfoDialog - + Title: Judul: - + Artist: Artis: - + Album: Album: - + Type: Tipe: - + Path: Jejak: - + Unknown artist Artis tidak diketahui - + Unknown album Album tidak diketahui - + Size: Ukuran: - + + Basic info + + + + Duration: Durasi: @@ -173,7 +338,7 @@ LoadWidget - + Loading... Memuat... @@ -183,7 +348,7 @@ Find lyrics - + @@ -201,297 +366,843 @@ Cari - + Back Kembali + MUsicLyricWidget + + + No lyrics yet + + + + MainFrame - New playlist - Daftar putar baru + Daftar putar baru - + Settings Pengaturan - - + + Exit Keluar - Add folder - Tambah folder + Tambah folder - Add file - Tambah berkas + Tambah berkas - + Dark theme Tema gelap - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - - - - + Play/Pause Mainkan/Jeda - + Previous Sebelumnya - Invalid or non-existent file - Tidak valid dan berkas tidak ada + Tidak valid dan berkas tidak ada - Failed to import, no vaild music file found! - Gagal mengimpor, tidak ada berkas musik valid ditemukan! + Gagal mengimpor, tidak ada berkas musik valid ditemukan! - + All music Semua musik - - + + OK OK - + + Add playlist + + + + + Add music + + + + + Equalizer + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" Berhasil menambahkan ke "%1" - + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next Selanjutnya - MusicListView + MusicListDataDelegate + + + + No songs + + + + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + Semua musik + + + + + + + + + Time added + Waktu ditambahkan + + + + + + + Album + + + + + + + + Artist + Artis + + + + + Title + Judul + + + + Play All + Mainkan semua + + + + Artists + + + + + Albums + + + + + Custom + Kustom + + + + + + Search Results + + + + + Songs + + + + + No result found + Tidak ada hasil ditemukan + + + + MusicListDialog + + + Play All + Mainkan semua + + + + Shuffle + Acak + + + + MusicListInfoView - New playlist - Daftar putar baru + Daftar putar baru + + + + Play queue + + + + + Add to new playlist + - + + Pause + + + + Play - Putar + Putar - + Add to playlist - Tambahkan ke daftar putar + Tambahkan ke daftar putar - + Display in file manager - Tampilkan dalam manajer berkas + Tampilkan dalam manajer berkas - + + Remove from playlist + Hapus dari daftar putar + + + + Delete from local disk + Hapus dari disk lokal + + + Song info - Info lagu + Info lagu + + + + + Cancel + + + + + Remove + - + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + Hapus + + + Are you sure you want to delete %1? - + - - + + Are you sure you want to delete the selected %1 songs? - + + + + + + The song files contained will also be deleted + + + + + MusicListItem + + + Are you sure you want to delete this playlist? + + + + + Cancel + + + + + Delete + Hapus + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + + MusicListView + + New playlist + Daftar putar baru + + + + + Play + Putar + + + Add to playlist + Tambahkan ke daftar putar + + + Display in file manager + Tampilkan dalam manajer berkas + + + Song info + Info lagu - Remove from playlist - Hapus dari daftar putar + Hapus dari daftar putar - Delete from local disk - Hapus dari disk lokal + Hapus dari disk lokal - Encoding - Menyandi + Menyandi + + + + My Favorites + + + + + + Are you sure you want to delete this playlist? + - + + Cancel Batalkan - + + + + Delete Hapus - + + + Pause + + + + + + Rename + Rename + + Deleting the current song will also delete the song files contained - Menghapus lagu saat ini juga akan menghapus berkas lagu + Menghapus lagu saat ini juga akan menghapus berkas lagu - Unknown artist - Artis tidak diketahui + Artis tidak diketahui - Unknown album - Album tidak diketahui + Album tidak diketahui MusicListWidget - No Music - Tidak ada musik + Tidak ada musik - No result found - Tidak ada hasil ditemukan + Tidak ada hasil ditemukan - Play All - Mainkan semua + Mainkan semua - Time added - Waktu ditambahkan + Waktu ditambahkan - Title - Judul + Judul - Artist - Artis + Artis - Album name - Nama album + Nama album - Custom - Kustom + Kustom PlayListItem - - Are you sure you want to delete this playlist? - - - - Delete - Hapus + Hapus - Cancel - Batalkan + Batalkan PlayListView - - + New playlist + Daftar putar baru + + + + Play queue + + + + + musicResult + + + + + My favorites + Favorit saya + + + + Add to new playlist + + + + + Pause + + + + + Play Putar - - + + Add to playlist + Tambahkan ke daftar putar + + + + Display in file manager + Tampilkan dalam manajer berkas + + + Remove from playlist + Hapus dari daftar putar + + + + Remove from play queue + + + + + Delete from local disk + Hapus dari disk lokal + + + + Encoding + Menyandi + + + + Song info + Info lagu + + + + + Cancel + + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + Rename - Rename + Rename - - + Delete Hapus + + + Unknown artist + Artis tidak diketahui + + + + Unknown album + Album tidak diketahui + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + Album tidak diketahui + + + + + + Unknown artist + Artis tidak diketahui + PlaylistManager - + New playlist Daftar putar baru - + Artist + Artis + + + + + + Albums + + + + + + + Artists + + + + + All Music Semua musik - + My favorites Favorit saya - + Search result Hasil pencarian + + + Play + Putar + + + + Music + + PlaylistWidget - New playlist - Daftar putar baru + Daftar putar baru QApplication - Deepin Music - Musik Deepin + Musik Deepin + + + + Music + QObject - Deepin Music - Musik Deepin + Musik Deepin @@ -499,9 +1210,13 @@ Kecilkan ke baki sistem - Exit Deepin Music - Keluar Deepin Musik + Keluar Deepin Musik + + + + Exit Music + @@ -511,7 +1226,7 @@ Enable fade in/out - + @@ -570,20 +1285,154 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + Judul + + + + Artist + Artis + + + + Search + Cari + + + SearchResult - - Search "%1" in Deepin Music - Cari "%1" dalam Musik Deepin + Cari "%1" dalam Musik Deepin + + + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + Putar + + + + Songs + + + + + Playlists + + + + + Settings + Pengaturan + + + + Play/Pause + Mainkan/Jeda + + + + Previous + Sebelumnya + + + + Next + Selanjutnya + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + Favorit + + + + Unfavorite + + + + + Song info + Info lagu + + + + New playlist + Daftar putar baru + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + Hapus dari daftar putar + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search Cari - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_it.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_it.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_it.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_it.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,237 @@ - + + + CloseConfirmDialog - - Please select your operation - Seleziona l'operazione - - - + Exit Esci - + Minimize to system tray Minimizza nella tray di Sistema - + Do not ask again Non chiedere nuovamente - + + Please select your operation + Seleziona l'operazione + + + Cancel Annulla - - OK - OK + + Confirm + Conferma + + + + DequalizerDialog + + + Custom + Personalizza + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Ripristina i valori di default Footer - + + Unknown Title + Titolo sconosciuto + + + + + + Unknown artist + Artista sconosciuto + + + Previous Precedente - + Next Avanti - + Play/Pause Play/Pausa - + Favorite Preferiti - + Lyrics Lyrics - - Unknown Title - Titolo sconosciuto - - - - - - Unknown artist - Artista sconosciuto - - - + Play Mode Modalità di riproduzione - - Playlist - Playlist + + Play Queue + Esegui sequenza - + List Loop Ripetizione di Gruppo - + Single Loop Ripetizione singola - + Shuffle Shuffle @@ -100,24 +239,29 @@ ImportWidget - - Add folder - Aggiungi una cartella + + Open Folder + Apri cartella - - + + Add Music + Aggiungi musica + + + + Scan Ricerca - - - %1 music directory or drag & drop music file to add music - Directory musicale %1 o trascina i file musicali per aggiungere i brani + + + %1 music directory or drag music files here + Directory musicale %1 o trascina i file musicali - + Loading music, please wait... Caricamento brani, attendere... @@ -125,55 +269,60 @@ InfoDialog - + + Basic info + Info base + + + Title: Titolo: - + Artist: Artista: - + Album: Album: - + Type: Tipo: - + + Size: + Dimensioni: + + + + Duration: + Durata: + + + Path: Percorso: - + Unknown artist Artista sconosciuto - + Unknown album Album sconosciuto - - - Size: - Dimensioni: - - - - Duration: - Durata: - LoadWidget - + Loading... Caricamento... @@ -201,308 +350,717 @@ Cerca - + Back Indietro - MainFrame + MUsicLyricWidget - - New playlist - Nuova playlist + + No lyrics yet + + + + MainFrame - - Settings - Impostazioni + + Add playlist + Aggiungi alla Playlist - - - Exit - Esci + + Add music + Aggiungi brani - - Add folder - Aggiungi una cartella + + Equalizer + - - Add file - Aggiungi File + + Settings + Impostazioni - + Dark theme Tema scuro - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - Deepin Music Player è un riproduttore musicale con un design bello e funzioni semplificate. Supporta la visualizzazione dei testi delle canzoni in riproduzione, la riproduzione di musica lossless e le playlist personalizzate, ecc. -Localizzazione italiana a cura di Massimo A. Carofano. + + + Exit + Esci + + + + Music is a local music player with beautiful design and simple functions. + Music è un riproduttore musicale con design all'avanguardia e funzionalità semplificate. +Localizzazione italiana a cura di Massimo A. Carofano - + + + + + + Music + Musica + + + Play/Pause Play/Pausa - + Previous Precedente - - Invalid or non-existent file - File non valido o non esistente + + Next + Avanti - - Failed to import, no vaild music file found! - Importazione fallita, non è stato trovato un file valido! + + Successfully added to "%1" + Aggiunto con successo a "%1" - - All music - Tutti i brani + + Already added to the playlist + Già aggiunto alla Playlist + + + + 1 song added + 1 brano aggiunto + + + + %1 songs added + %1 brani aggiunti + + + + File is invalid or does not exist, load failed + File non valido o non esistente, caricamento fallito - - + + OK OK - - Successfully added to "%1" - Aggiunto con successo a "%1" + + Import failed, no valid music file found + Importazione fallita, non è stato trovato un file valido - - Next - Avanti + + All music + Tutti i brani - MusicListView + MusicListDataDelegate - - New playlist - Nuova playlist + + + No songs + Nessun brano + + + + + 1 song + 1 brano + + + + + %1 songs + %1 brani + + + + MusicListDataWidget + + + + + + + + + + + + No songs + Nessun brano + + + + + 1 album - 1 song + 1 album - 1 brano + + + + + + + %1 album - %2 songs + %1 album - %2 brani + + + + + %1 albums - %2 songs + %1 album - %2 brani + + + + + 1 artist - 1 song + 1 artista - 1 brano + + + + + %1 artist - %2 songs + %1 artisti - %2 brani + + + + + %1 artists - %2 songs + %1 artisti - %2 brani + + + + + 1 song + 1 brano + + + + + + + %1 songs + %1 brani + + + + + + + No search results + Nessun risultato disponibile + + + + + + All Music + Tutta la musica + + + + + + + + + Time added + Durata aggiunta + + + + + + + Album + Album + + + + + + + Artist + Artista + + + + + Title + Titolo + + + + Play All + Avvia tutti + + + + Artists + Artisti + + + + Albums + Album - + + Custom + Personalizza + + + + + + Search Results + Risultati di ricerca + + + + Songs + Brani + + + + No result found + Nessun risultato trovato + + + + MusicListDialog + + + Play All + Avvia tutti + + + + Shuffle + Shuffle + + + + MusicListInfoView + + + Play queue + Esegui sequenza + + + + Add to new playlist + Aggiungi ad una nuova Playlist + + + + Pause + Pausa + + + Play Play - + Add to playlist Aggiungi alla Playlist - + Display in file manager Visualizza nel file manager - + + Remove from playlist + Rimuovi dalla playlist + + + + Delete from local disk + Elimina dal disco locale + + + Song info Info brano - + + + Cancel + Annulla + + + + Remove + Rimuovi + + + + Are you sure you want to remove %1? + Sicuro di voler eliminare %1? + + + + Are you sure you want to remove the selected %1 songs? + Sicuro di voler eliminare le %1 canzoni selezionate? + + + + Delete + Elimina + + + Are you sure you want to delete %1? Sicuro di voler eliminare %1? - - + + Are you sure you want to delete the selected %1 songs? Sicuro di voler eliminare le %1 canzoni selezionate? - - Remove from playlist - Rimuovi dalla playlist + + + The song files contained will also be deleted + Il file del brano sarà rimosso + + + MusicListItem - - Delete from local disk - Elimina dal disco locale + + Are you sure you want to delete this playlist? + Sicuro di voler eliminare questa playlist? - - Encoding - Encoding + + Cancel + Annulla - + + Delete + Elimina + + + + MusicListScrollArea + + + Library + Libreria + + + + Playlists + Playlists + + + + MusicListView + + + My Favorites + I miei Preferiti + + + + + Are you sure you want to delete this playlist? + Sicuro di voler eliminare questa playlist? + + + + Cancel Cancella - + + + + Delete Elimina - - Deleting the current song will also delete the song files contained - Eliminando tali canzoni verranno eliminati i relativi files + + + Pause + Pausa + + + + + Play + Play + + + + + Rename + Rinomina + + + PlayListView - + Unknown artist Artista sconosciuto - + Unknown album Album sconosciuto - - - MusicListWidget - - No Music - Nessun brano + + Play queue + Esegui sequenza - - No result found - Nessun risultato trovato + + musicResult + - - Play All - Avvia tutti + + My favorites + I miei preferiti - - Time added - Durata aggiunta + + Add to new playlist + Aggiungi ad una nuova Playlist - - Title - Titolo + + Pause + Pausa - - Artist - Artista + + + Play + Play - - Album name - Nome Album + + Add to playlist + Aggiungi alla Playlist - - Custom - Personalizza + + Display in file manager + Visualizza nel file manager - - - PlayListItem - - Are you sure you want to delete this playlist? - Sicuro di voler eliminare questa playlist? + Remove from playlist + Rimuovi dalla playlist - + + Remove from play queue + + + + + Delete from local disk + Elimina dal disco locale + + + + Encoding + Encoding + + + + Song info + Info brano + + + + + Cancel + Annulla + + + + Remove + Rimuovi + + + + Are you sure you want to remove %1? + Sicuro di voler eliminare %1? + + + + Are you sure you want to remove the selected %1 songs? + Sicuro di voler eliminare le %1 canzoni selezionate? + + + Delete Elimina - - Cancel - Cancella + + Are you sure you want to delete %1? + Sicuro di voler eliminare %1? + + + + + Are you sure you want to delete the selected %1 songs? + Sicuro di voler eliminare le %1 canzoni selezionate? + + + + + The song files contained will also be deleted + Il file del brano sarà rimosso - PlayListView + PlayListWidget - - - Play - Play + + + No songs + Nessun brano - - - Rename - Rinomina + + No search results + Nessun risultato disponibile - - - Delete - Elimina + + Play Queue + Esegui sequenza + + + + Empty + Svuota + + + + 1 song + 1 brano + + + + %1 songs + %1 brani + + + + Playlist + + + + Unknown album + Album sconosciuto + + + + + + Unknown artist + Artista sconosciuto PlaylistManager - + New playlist Nuova playlist - + + + + Albums + Album + + + + + + Artists + Artisti + + + + All Music Tutta la musica - + My favorites Preferiti - + Search result Risultati di ricerca - - - PlaylistWidget - - New playlist - Nuova playlist + + Play + Play + + + + Music + Musica QApplication - - Deepin Music - Deepin Music + + Music + Musica QObject - - Deepin Music - Deepin Music - - Minimize to system tray Minimizza nella tray di Sistema - Exit Deepin Music - Esci da Deepin Music + Exit Music + Esci da Music @@ -571,20 +1129,150 @@ + SearchLyricsWidget + + + Find Lyrics + Trova testi + + + + Title + Titolo + + + + Artist + Artista + + + + Search + Cerca + + + SearchResult - - - Search "%1" in Deepin Music - Cerca "%1" in Deepin Music + + Music + Musica + + + + Artists + Artisti + + + + Albums + Album + + + + Shortcut + + + Play + Play + + + + Songs + Brani + + + + Playlists + Playlists + + + + Settings + Impostazioni + + + + Play/Pause + Play/Pausa + + + + Previous + Precedente + + + + Next + Avanti + + + + Volume Up + Volume Più + + + + Volume Down + Volume Meno + + + + Mute + Muto + + + + Favorite + Preferiti + + + + Unfavorite + Rimuovi dai preferiti + + + + Song info + Info brano + + + + New playlist + Nuova playlist + + + + Add music + Aggiungi brani + + + + Rename playlist + Rinomina playlist + + + + Remove from playlist + Rimuovi dalla playlist + + + + Help + Aiuto + + + + Display shortcuts + Visualizza scorciatoie TitlebarWidget - + Search Cerca - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ja.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ja.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ja.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ja.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,245 @@ - + + + CloseConfirmDialog - + Please select your operation - + - + Exit 終了 - + Minimize to system tray - + - + Do not ask again - + - + Cancel キャンセル - + + Confirm + + + OK - OK + OK + + + + DequalizerDialog + + + Custom + カスタム + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Footer - + Previous 前へ - + Next 次へ - + Play/Pause 再生・一時停止 - + Favorite お気に入り - + Lyrics 歌詞 - + + Play Queue + + + + Unknown Title 不明なタイトル - - - + + + Unknown artist 不明のアーチスト - + Play Mode - + - Playlist - プレイリスト + プレイリスト - + List Loop - + - + Single Loop - + - + Shuffle シャッフル @@ -100,24 +247,33 @@ ImportWidget - Add folder - フォルダーを追加 + フォルダーを追加 - - + + Open Folder + + + + + Add Music + + + + + Scan 検索 - - - %1 music directory or drag & drop music file to add music - + + + %1 music directory or drag music files here + - + Loading music, please wait... 音楽を読み込んでいます、お待ち下さい... @@ -125,57 +281,62 @@ InfoDialog - + Title: タイトル - + Artist: アーティスト: - + Album: アルバム - + Type: 種類: - + Path: - + パス: - + Unknown artist 不明のアーチスト - + Unknown album 不明のアルバム - + Size: サイズ: - + + Basic info + + + + Duration: - + LoadWidget - + Loading... - + @@ -183,7 +344,7 @@ Find lyrics - + @@ -201,327 +362,814 @@ 検索 - + Back 戻る - MainFrame + MUsicLyricWidget - - New playlist - + + No lyrics yet + + + + MainFrame - + Settings 設定 - - + + Exit 終了 - Add folder - フォルダーを追加 + フォルダーを追加 - Add file - ファイルの追加 + ファイルの追加 - + Dark theme - - - - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + - + Play/Pause 再生・一時停止 - + Previous 前へ - - Invalid or non-existent file - + + All music + - - Failed to import, no vaild music file found! - + + + OK + OK - - All music - + + Add playlist + - - - OK - OK + + Add music + + + + + Equalizer + - + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" - + - + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next 次へ - MusicListView + MusicListDataDelegate - - New playlist - + + + No songs + + + + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + 全ての音楽 + + + + + + + + + Time added + + + + + + + + Album + + + + + + + + Artist + アーティスト + + + + + Title + タイトル + + + + Play All + すべて再生 + + + + Artists + + + + + Albums + + + + + Custom + カスタム + + + + + + Search Results + - + + Songs + + + + + No result found + + + + + MusicListDialog + + + Play All + すべて再生 + + + + Shuffle + シャッフル + + + + MusicListInfoView + + + Play queue + + + + + Add to new playlist + + + + + Pause + + + + Play - 再生 + 再生 - + Add to playlist - + - + Display in file manager - + + + + + Remove from playlist + プレイリストから削除 - + + Delete from local disk + + + + Song info - 音楽情報 + 音楽情報 - + + + Cancel + キャンセル + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + 削除 + + + Are you sure you want to delete %1? - + - - + + Are you sure you want to delete the selected %1 songs? - + - - Remove from playlist - プレイリストから削除 + + + The song files contained will also be deleted + + + + MusicListItem - - Delete from local disk - + + Are you sure you want to delete this playlist? + + + + + Cancel + キャンセル + + + + Delete + 削除 + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + + MusicListView + + + + Play + 再生 + + + Song info + 音楽情報 + + + Remove from playlist + プレイリストから削除 - Encoding - + エンコーディング - + + My Favorites + + + + + + Are you sure you want to delete this playlist? + + + + + Cancel キャンセル - + + + + Delete 削除 - - Deleting the current song will also delete the song files contained - + + + Pause + + + + + + Rename + 名前の変更 - Unknown artist - 不明のアーチスト + 不明のアーチスト - Unknown album - 不明のアルバム + 不明のアルバム MusicListWidget - No Music - 音楽は有りません - - - - No result found - + 音楽は有りません - Play All - すべて再生 + すべて再生 - - Time added - - - - Title - タイトル + タイトル - Artist - アーティスト + アーティスト - - Album name - - - - Custom - カスタム + カスタム PlayListItem - - Are you sure you want to delete this playlist? - - - - Delete - 削除 + 削除 - Cancel - キャンセル + キャンセル PlayListView - - + + Play queue + + + + + musicResult + + + + + My favorites + + + + + Add to new playlist + + + + + Pause + + + + + Play 再生 - - + + Add to playlist + + + + + Display in file manager + + + + Remove from playlist + プレイリストから削除 + + + + Remove from play queue + + + + + Delete from local disk + + + + + Encoding + エンコーディング + + + + Song info + 音楽情報 + + + + + Cancel + キャンセル + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + Rename - 名前の変更 + 名前の変更 - - + Delete 削除 + + + Unknown artist + 不明のアーチスト + + + + Unknown album + 不明のアルバム + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + 不明のアルバム + + + + + + Unknown artist + 不明のアーチスト + PlaylistManager - + New playlist - + - + Artist + アーティスト + + + + + + Albums + + + + + + + Artists + + + + + All Music 全ての音楽 - + My favorites - + - + Search result - + - - - PlaylistWidget - - New playlist - + + Play + 再生 + + + + Music + QApplication - Deepin Music - Deepin音楽プレイヤー + Deepin音楽プレイヤー + + + + Music + QObject - Deepin Music - Deepin Music + Deepin Music Minimize to system tray - + - Exit Deepin Music - + Exit Music + Autoplay - + Enable fade in/out - + Remember playback position - + Close Main Window - + @@ -541,7 +1189,7 @@ Restore Defaults - + @@ -570,20 +1218,150 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + タイトル + + + + Artist + アーティスト + + + + Search + 検索 + + + SearchResult - - - Search "%1" in Deepin Music - + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + 再生 + + + + Songs + + + + + Playlists + + + + + Settings + 設定 + + + + Play/Pause + 再生・一時停止 + + + + Previous + 前へ + + + + Next + 次へ + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + お気に入り + + + + Unfavorite + + + + + Song info + 音楽情報 + + + + New playlist + + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + プレイリストから削除 + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search 検索 - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ko.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ko.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ko.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ko.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,181 +1,330 @@ - + + + CloseConfirmDialog - - Please select your operation - - - - + Exit - 나가기 + 종료 - + Minimize to system tray - + 시스템 트레이로 최소화 - + Do not ask again - + 다시 묻지 않기 - + + Please select your operation + 작업을 선택하십시오 + + + Cancel 취소 - - OK - 확인 + + Confirm + 확정 + + + + DequalizerDialog + + + Custom + 사용자 지정 + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + 기본값 복원 Footer - + + Unknown Title + 알 수 없는 제목 + + + + + + Unknown artist + 알 수 없는 아티스트 + + + Previous - ㅇㅣㅈㅓㄴ + 이전 - + Next 다음 - + Play/Pause 재생/일시정지 - + Favorite - + 즐겨찾기 - + Lyrics 가사 - - Unknown Title - - - - - - - Unknown artist - 아티스트 미상 - - - + Play Mode - + 재생 모드 - - Playlist - 재생목록 + + Play Queue + 재생 대기열 - + List Loop - + 목록 반복 - + Single Loop - + 한곡 반복 - + Shuffle - + 섞기 ImportWidget - - Add folder - 폴더 추가 + + Open Folder + + + + + Add Music + - - + + Scan 스캔 - - - %1 music directory or drag & drop music file to add music - + + + %1 music directory or drag music files here + %1 음악 디렉토리 또는 음악 파일을 여기로 끌어다 놓습니다 - + Loading music, please wait... - + 음악을 로드하는 중, 잠시 기다리십시오... InfoDialog - + + Basic info + 기본 정보 + + + Title: 제목: - + Artist: 아티스트: - + Album: - + 앨범: - + Type: 종류: - - Path: - + + Size: + 크기: - - Unknown artist - 아티스트 미상 + + Duration: + 재생 시간: - - Unknown album - 알려지지 않는 앨범 + + Path: + 경로: - - Size: - 크기: + + Unknown artist + 알 수 없는 아티스트 - - Duration: - + + Unknown album + 알 수 없는 앨범 LoadWidget - + Loading... - + 불러오는 중... @@ -183,7 +332,7 @@ Find lyrics - + 가사 찾기 @@ -198,310 +347,719 @@ Search - 찾기 + 검색 - + Back - 뒤로 가기 + 뒤로 - MainFrame + MUsicLyricWidget - - New playlist - + + No lyrics yet + + + + MainFrame - - Settings - 설정 + + Add playlist + 재생목록 추가 - - - Exit - 나가기 + + Add music + 음악 추가 - - Add folder - 폴더 추가 + + Equalizer + - - Add file - 파일 추가 + + Settings + 설정 - + Dark theme - + 어두운 색상 테마 - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + + + Exit + 종료 - + + Music is a local music player with beautiful design and simple functions. + 음악은 아름다운 디자인과 간단한 기능을 갖춘 로컬 음악 플레이어입니다. + + + + + + + + Music + 음악 + + + Play/Pause 재생/일시정지 - + Previous - ㅇㅣㅈㅓㄴ + 이전 - - Invalid or non-existent file - + + Next + 다음 - - Failed to import, no vaild music file found! - + + Successfully added to "%1" + %1에 성공적으로 추가됨 - - All music - + + Already added to the playlist + 재생목록에 이미 추가됨 + + + + 1 song added + 노래 1곡 추가됨 + + + + %1 songs added + 노래 %1곡 추가됨 - - + + File is invalid or does not exist, load failed + 파일이 잘못되었거나 존재하지 않습니다. 불러오기 실패 + + + + OK 확인 - - Successfully added to "%1" - + + Import failed, no valid music file found + 가져오기 실패, 올바른 음악 파일을 찾을 수 없습니다 - - Next - 다음 + + All music + 모든 음악 - MusicListView + MusicListDataDelegate - - New playlist - + + + No songs + 노래 없음 - - Play - 재생 + + + 1 song + 노래 1곡 - - Add to playlist - + + + %1 songs + 노래 %1곡 + + + + MusicListDataWidget + + + + + + + + + + + + No songs + 노래 없음 - - Display in file manager - + + + 1 album - 1 song + 앨범 1장 - 노래 1곡 - - Song info - + + + + + %1 album - %2 songs + 앨범 %1장 - 노래 %2곡 - - Are you sure you want to delete %1? - + + + %1 albums - %2 songs + 앨범 %1장 - 노래 %2곡 - - - Are you sure you want to delete the selected %1 songs? - + + + 1 artist - 1 song + 아티스트 1명 - 노래 1곡 - - Remove from playlist - 플레이리스트에서 제거 + + + %1 artist - %2 songs + 아티스트 %1명 - 노래 %2곡 - - Delete from local disk - + + + %1 artists - %2 songs + 아티스트 %1명 - 노래 %2곡 - - Encoding - + + + 1 song + 노래 1곡 - - Cancel - 취소 + + + + + %1 songs + 노래 %1곡 - - Delete - 삭제 + + + + + No search results + 검색결과가 없습니다. - - Deleting the current song will also delete the song files contained - + + + + All Music + 모든 음악 - - Unknown artist - 아티스트 미상 + + + + + + + Time added + 추가된 시간 - - Unknown album - 알려지지 않는 앨범 + + + + + Album + 앨범 + + + + + + + Artist + 아티스트 + + + + + Title + 제목 + + + + Play All + 모두 재생 + + + + Artists + 아티스트 + + + + Albums + 앨범 + + + + Custom + 사용자 지정 + + + + + + Search Results + - - - MusicListWidget - - No Music - + + Songs + 노래 - + No result found - + 결과를 찾을 수 없음 + + + MusicListDialog - + Play All 모두 재생 - - Time added - + + Shuffle + 섞기 + + + MusicListInfoView - - Title - 제목 + + Play queue + 재생 대기열 - - Artist - 아티스트 + + Add to new playlist + 새 재생 목록에 추가 - - Album name - + + Pause + 일시정지 - - Custom - 사용자 정의 + + Play + 재생 + + + + Add to playlist + 재생 목록에 추가 + + + + Display in file manager + 파일 관리자에 표시 + + + + Remove from playlist + 재생 목록에서 제거 + + + + Delete from local disk + 로컬 디스크에서 삭제 + + + + Song info + 노래 정보 + + + + + Cancel + 취소 + + + + Remove + 제거 + + + + Are you sure you want to remove %1? + %1을(를) 제거 하시겠습니까? + + + + Are you sure you want to remove the selected %1 songs? + 선택한 %1 곡을 삭제 하시겠습니까? + + + + Delete + 삭제 + + + + Are you sure you want to delete %1? + %1을(를) 삭제하시겠습니까? + + + + + Are you sure you want to delete the selected %1 songs? + 선택한 %1 노래를 삭제하시겠습니까? + + + + + The song files contained will also be deleted + 포함된 노래 파일도 삭제됩니다 - PlayListItem + MusicListItem - + Are you sure you want to delete this playlist? - + 이 재생 목록을 삭제하시겠습니까? - + + Cancel + 취소 + + + Delete 삭제 + + + MusicListScrollArea - + + Library + 라이브러리 + + + + Playlists + 재생목록 + + + + MusicListView + + + My Favorites + + + + + + Are you sure you want to delete this playlist? + 이 재생 목록을 삭제하시겠습니까? + + + + Cancel 취소 + + + + + + Delete + 삭제 + + + + + Pause + 일시정지 + + + + + Play + 재생 + + + + + Rename + 이름 변경 + PlayListView - - + + Unknown artist + 알 수 없는 아티스트 + + + + Unknown album + 알 수없는 앨범 + + + + Play queue + 재생 대기열 + + + + musicResult + + + + + My favorites + 내 즐겨찾기 + + + + Add to new playlist + 새 재생 목록에 추가 + + + + Pause + 일시정지 + + + + Play 재생 - - - Rename - 이름 변경 + + Add to playlist + 재생 목록에 추가 + + + + Display in file manager + 파일 관리자에 표시 + + + Remove from playlist + 재생 목록에서 제거 + + + + Remove from play queue + + + + + Delete from local disk + 로컬 디스크에서 삭제 + + + + Encoding + 인코딩 - - + + Song info + 노래 정보 + + + + + Cancel + 취소 + + + + Remove + 제거 + + + + Are you sure you want to remove %1? + %1을(를) 제거 하시겠습니까? + + + + Are you sure you want to remove the selected %1 songs? + 선택한 %1 곡을 삭제 하시겠습니까? + + + Delete 삭제 + + + Are you sure you want to delete %1? + %1을(를) 삭제하시겠습니까? + + + + + Are you sure you want to delete the selected %1 songs? + 선택한 %1 노래를 삭제하시겠습니까? + + + + + The song files contained will also be deleted + 포함된 노래 파일도 삭제됩니다 + + + + PlayListWidget + + + + No songs + 노래 없음 + + + + No search results + 검색결과가 없습니다. + + + + Play Queue + 재생 대기열 + + + + Empty + 비우기 + + + + 1 song + 노래 1곡 + + + + %1 songs + 노래 %1곡 + + + + Playlist + + + + Unknown album + 알 수없는 앨범 + + + + + + Unknown artist + 알 수 없는 아티스트 + PlaylistManager - + New playlist - + 새 재생목록 - + + + + Albums + 앨범 + + + + + + Artists + 아티스트 + + + + All Music - + 모든 음악 - + My favorites - + 내 즐겨찾기 - + Search result - + 검색 결과 - - - PlaylistWidget - - New playlist - + + Play + 재생 + + + + Music + 음악 QApplication - - Deepin Music - Deepin Music + + Music + 음악 QObject - - Deepin Music - Deepin Music - - Minimize to system tray - + 시스템 트레이로 최소화 - Exit Deepin Music - + Exit Music + 음악 종료 @@ -511,22 +1069,22 @@ Enable fade in/out - + 페이드 인/아웃 활성화 Remember playback position - + 재생 위치 기억 Close Main Window - + 기본 창 닫기 Basic - + 기본 @@ -541,7 +1099,7 @@ Restore Defaults - + 기본값 복원 @@ -556,34 +1114,164 @@ Previous - ㅇㅣㅈㅓㄴ + 이전 Volume down - 볼륨 다운 + 음량 줄이기 Volume up - 볼륨 키우기 + 음량 키우기 + + + + SearchLyricsWidget + + + Find Lyrics + 가사 찾기 + + + + Title + 제목 + + + + Artist + 아티스트 + + + + Search + 검색 SearchResult - - - Search "%1" in Deepin Music - + + Music + 음악 + + + + Artists + 아티스트 + + + + Albums + 앨범 + + + + Shortcut + + + Play + 재생 + + + + Songs + 노래 + + + + Playlists + 재생목록 + + + + Settings + 설정 + + + + Play/Pause + 재생/일시정지 + + + + Previous + 이전 + + + + Next + 다음 + + + + Volume Up + 음량 높이기 + + + + Volume Down + 볼륨 내리기 + + + + Mute + 음소거 + + + + Favorite + 즐겨찾기 + + + + Unfavorite + 즐겨찾지 않음 + + + + Song info + 노래 정보 + + + + New playlist + 새 재생목록 + + + + Add music + 음악 추가 + + + + Rename playlist + 재생목록 이름변경 + + + + Remove from playlist + 재생 목록에서 제거 + + + + Help + 도움말 + + + + Display shortcuts + 단축키 표시 TitlebarWidget - + Search - 찾기 + 검색 - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ku_IQ.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ku_IQ.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ku_IQ.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ku_IQ.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,245 @@ - + + + CloseConfirmDialog - + Please select your operation Ji kerema xwe çalakiya ku tu dixwazî hilbijêre - + Exit Derkeve - + Minimize to system tray Li sêniya pergalê biçûk bike - + Do not ask again - + - + Cancel Jê bibe - + + Confirm + + + OK - Baş e + Baş e + + + + DequalizerDialog + + + Custom + Taybet + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Mîhengên Destpêkê Dîsa Bîne Footer - + Previous Paşve - + Next Pêşve - + Play/Pause Lêde/Bisekinîne - + Favorite Bijare - + Lyrics Peyvên stranê - + + Play Queue + + + + Unknown Title Sernivîs Nayê Zanîn - - - + + + Unknown artist Hunermend Nayê Zanîn - + Play Mode Moda Lêdanê - Playlist - Lîsteya Lêdanê + Lîsteya Lêdanê - + List Loop Çerxa Lîsteyê - + Single Loop Çerxa Stranê - + Shuffle Li hev bide @@ -100,24 +247,37 @@ ImportWidget - Add folder - Peldankek tevlî bike + Peldankek tevlî bike + + + + Open Folder + - - + + Add Music + + + + + Scan Şeh bike - - + + + %1 music directory or drag music files here + + + %1 music directory or drag & drop music file to add music - Ji bo tevlîkirina peldanka mûzîkê %1 an jî pela stranê bigirin û bikişînin vir + Ji bo tevlîkirina peldanka mûzîkê %1 an jî pela stranê bigirin û bikişînin vir - + Loading music, please wait... Mûzîk tê barkîrîn, ji kerema xwe bisekine... @@ -125,47 +285,52 @@ InfoDialog - + Title: Sernivîs: - + Artist: Hunermend: - + Album: Album: - + Type: Cûre: - + Path: Rê: - + Unknown artist Hunermend nayê zanîn - + Unknown album Album nayê zanîn - + Size: Hecîm: - + + Basic info + + + + Duration: Dirîjahî: @@ -173,7 +338,7 @@ LoadWidget - + Loading... Tê barkirin... @@ -183,7 +348,7 @@ Find lyrics - + @@ -201,297 +366,843 @@ Lê bigere - + Back Paşve + MUsicLyricWidget + + + No lyrics yet + + + + MainFrame - New playlist - Lîsteya lêdanê ya nû + Lîsteya lêdanê ya nû - + Settings Mîheng - - + + Exit Derkeve - Add folder - Peldankek tevlî bike + Peldankek tevlî bike - Add file - Pelek tevlî bike + Pelek tevlî bike - + Dark theme Temaya tarî - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - - - - + Play/Pause Lêxe/Bisekinîne - + Previous Paşve - Invalid or non-existent file - Dosye ya nederbasdar e yan jî nehat dîtin! + Dosye ya nederbasdar e yan jî nehat dîtin! - Failed to import, no vaild music file found! - Nebû bê navanîn, dosyeke derbasdar nehat dîtin! + Nebû bê navanîn, dosyeke derbasdar nehat dîtin! - + All music Hemû mûzîk - - + + OK Baş e - + + Add playlist + + + + + Add music + + + + + Equalizer + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" "%1" ser wê hat tevlîkirin - + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next Pêşve - MusicListView + MusicListDataDelegate + + + + No songs + + + + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + Hemû Mûzîk + + + + + + + + + Time added + Dem hat tevlîkirin + + + + + + + Album + + + + + + + + Artist + Hunermend + + + + + Title + Sernivîs + + + + Play All + Hemû Lê de + + + + Artists + + + + + Albums + + + + + Custom + Taybet + + + + + + Search Results + + + + + Songs + + + + + No result found + Tu encam nehat dîtin + + + + MusicListDialog + + + Play All + Hemû Lê de + + + + Shuffle + Li hev bide + + + + MusicListInfoView - New playlist - Lîsteya lêdanê ya nû + Lîsteya lêdanê ya nû + + + + Play queue + + + + + Add to new playlist + - + + Pause + + + + Play - Lêde + Lêde - + Add to playlist - Tevlî lîsteya lêdanê bike + Tevlî lîsteya lêdanê bike - + Display in file manager - Di rêvebira dosyeyê de rê bide + Di rêvebira dosyeyê de rê bide - + + Remove from playlist + Ji lîsteya lêdanê rake + + + + Delete from local disk + Ji dîska xwecihî bibe + + + Song info - Agahiya stranê + Agahiya stranê + + + + + Cancel + + + + + Remove + - + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + Jê bibe + + + Are you sure you want to delete %1? - + - - + + Are you sure you want to delete the selected %1 songs? - + + + + + + The song files contained will also be deleted + + + + + MusicListItem + + + Are you sure you want to delete this playlist? + + + + + Cancel + + + + + Delete + Jê bibe + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + + MusicListView + + New playlist + Lîsteya lêdanê ya nû + + + + + Play + Lêde + + + Add to playlist + Tevlî lîsteya lêdanê bike + + + Display in file manager + Di rêvebira dosyeyê de rê bide + + + Song info + Agahiya stranê - Remove from playlist - Ji lîsteya lêdanê rake + Ji lîsteya lêdanê rake - Delete from local disk - Ji dîska xwecihî bibe + Ji dîska xwecihî bibe - Encoding - Kodkirin + Kodkirin + + + + My Favorites + + + + + + Are you sure you want to delete this playlist? + - + + Cancel Betal bike - + + + + Delete Jê bibe - + + + Pause + + + + + + Rename + Dîsa nav lê bide + + Deleting the current song will also delete the song files contained - Jêbirina strana derbasdar dê pelên naveroka stranê jî jê bibe. + Jêbirina strana derbasdar dê pelên naveroka stranê jî jê bibe. - Unknown artist - Hunermend Nayê Zanîn + Hunermend Nayê Zanîn - Unknown album - Album nayê zanîn + Album nayê zanîn MusicListWidget - No Music - Mûzîk tune ye + Mûzîk tune ye - No result found - Tu encam nehat dîtin + Tu encam nehat dîtin - Play All - Hemû Lê de + Hemû Lê de - Time added - Dem hat tevlîkirin + Dem hat tevlîkirin - Title - Sernivîs + Sernivîs - Artist - Hunermend + Hunermend - Album name - Navê albûm + Navê albûm - Custom - Taybet + Taybet PlayListItem - - Are you sure you want to delete this playlist? - - - - Delete - Jê bibe + Jê bibe - Cancel - Betal bike + Betal bike PlayListView - - + New playlist + Lîsteya lêdanê ya nû + + + + Play queue + + + + + musicResult + + + + + My favorites + Bijareyên min + + + + Add to new playlist + + + + + Pause + + + + + Play Lêde - - + + Add to playlist + Tevlî lîsteya lêdanê bike + + + + Display in file manager + Di rêvebira dosyeyê de rê bide + + + Remove from playlist + Ji lîsteya lêdanê rake + + + + Remove from play queue + + + + + Delete from local disk + Ji dîska xwecihî bibe + + + + Encoding + Kodkirin + + + + Song info + Agahiya stranê + + + + + Cancel + + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + Rename - Dîsa nav lê bide + Dîsa nav lê bide - - + Delete Jê bibe + + + Unknown artist + + + + + Unknown album + Album nayê zanîn + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + Album nayê zanîn + + + + + + Unknown artist + + PlaylistManager - + New playlist Lîsteya lêdanê ya nû - + Artist + Hunermend + + + + + + Albums + + + + + + + Artists + + + + + All Music Hemû Mûzîk - + My favorites Bijareyên min - + Search result Encamên lêgerînê + + + Play + Lêde + + + + Music + + PlaylistWidget - New playlist - Lîsteya lêdanê ya nû + Lîsteya lêdanê ya nû QApplication - Deepin Music - Deepin Mûzîk + Deepin Mûzîk + + + + Music + QObject - Deepin Music - Deepin Mûzîk + Deepin Mûzîk @@ -499,9 +1210,13 @@ Li sêniya pergalê biçûk bike - Exit Deepin Music - Ji Deepin Mûzîkê derkeve + Ji Deepin Mûzîkê derkeve + + + + Exit Music + @@ -511,7 +1226,7 @@ Enable fade in/out - + @@ -570,20 +1285,154 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + Sernivîs + + + + Artist + Hunermend + + + + Search + Lê bigere + + + SearchResult - - Search "%1" in Deepin Music -  "%1" li ser Deepin Mûzîkê bigere +  "%1" li ser Deepin Mûzîkê bigere + + + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + Lêde + + + + Songs + + + + + Playlists + + + + + Settings + Mîheng + + + + Play/Pause + + + + + Previous + Paşve + + + + Next + Pêşve + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + Bijare + + + + Unfavorite + + + + + Song info + Agahiya stranê + + + + New playlist + Lîsteya lêdanê ya nû + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + Ji lîsteya lêdanê rake + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search Lê bigere - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_lt.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_lt.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_lt.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_lt.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,245 @@ - + + + CloseConfirmDialog - + Please select your operation Pasirinkite operaciją - + Exit Išeiti - + Minimize to system tray Suskleisti į sistemos dėklą - + Do not ask again Daugiau nebeklausti - + Cancel Atsisakyti - + + Confirm + + + OK - Gerai + Gerai + + + + DequalizerDialog + + + Custom + Pasirinktinai + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Atkurti numatytuosius Footer - + Previous Ankstesnis - + Next Kitas - + Play/Pause Groti/Pristabdyti - + Favorite Mėgstama - + Lyrics Dainų žodžiai - + + Play Queue + + + + Unknown Title Nežinomas pavadinimas - - - + + + Unknown artist Nežinomas atlikėjas - + Play Mode Atkūrimo veiksena - Playlist - Grojaraštis + Grojaraštis - + List Loop Sąrašo kartojimas - + Single Loop Pavienio kartojimas - + Shuffle Maišyti @@ -100,24 +247,37 @@ ImportWidget - Add folder - Pridėti aplanką + Pridėti aplanką + + + + Open Folder + + + + + Add Music + - - + + Scan Peržiūrėkite - - + + + %1 music directory or drag music files here + + + %1 music directory or drag & drop music file to add music - %1 muzikos katalogą arba vilkite muzikinius failus, norėdami pridėti muziką + %1 muzikos katalogą arba vilkite muzikinius failus, norėdami pridėti muziką - + Loading music, please wait... Muzika įkeliama, prašome palaukti... @@ -125,47 +285,52 @@ InfoDialog - + Title: Pavadinimas: - + Artist: Atlikėjas: - + Album: Albumas: - + Type: Tipas: - + Path: Kelias: - + Unknown artist Nežinomas atlikėjas - + Unknown album Nežinomas albumas - + Size: Dydis: - + + Basic info + + + + Duration: Trukmė: @@ -173,7 +338,7 @@ LoadWidget - + Loading... Įkeliama... @@ -201,297 +366,859 @@ Ieškoti - + Back Atgal + MUsicLyricWidget + + + No lyrics yet + + + + MainFrame - New playlist - Naujas grojaraštis + Naujas grojaraštis - + Settings Nustatymai - - + + Exit Išeiti - Add folder - Pridėti aplanką + Pridėti aplanką - Add file - Pridėti failą + Pridėti failą - + Dark theme Tamsi tema - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - Deepin muzikos grotuvas yra patrauklus ir paprastas muzikos grotuvas, atkuriantis vietinius garso įrašus. Jis palaiko dainos žodžių peržiūrą atkūrimo metu, nenuostolingųjų garso įrašų atkūrimą bei grojaraščio tinkinimą ir t.t. + Deepin muzikos grotuvas yra patrauklus ir paprastas muzikos grotuvas, atkuriantis vietinius garso įrašus. Jis palaiko dainos žodžių peržiūrą atkūrimo metu, nenuostolingųjų garso įrašų atkūrimą bei grojaraščio tinkinimą ir t.t. - + Play/Pause Groti/Pristabdyti - + Previous Ankstesnis - Invalid or non-existent file - Failas yra neteisingas arba jo nėra + Failas yra neteisingas arba jo nėra - Failed to import, no vaild music file found! - Nepavyko importuoti, nėrasta jokio teisingo muzikinio failo! + Nepavyko importuoti, nėrasta jokio teisingo muzikinio failo! - + All music Visa muzika - - + + OK Gerai - + + Add playlist + + + + + Add music + + + + + Equalizer + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" Sėkmingai pridėta į "%1" - + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next Kitas + MusicListDataDelegate + + + + No songs + + + + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + Visa muzika + + + + + + + + + Time added + Pridėjimo laikas + + + + + + + Album + + + + + + + + Artist + Atlikėjas + + + + + Title + Pavadinimas + + + + Play All + Groti visus + + + + Artists + + + + + Albums + + + + + Custom + Pasirinktinai + + + + + + Search Results + + + + + Songs + + + + + No result found + Rezultatų nerasta + + + + MusicListDialog + + + Play All + Groti visus + + + + Shuffle + Maišyti + + + + MusicListInfoView + + New playlist + Naujas grojaraštis + + + + Play queue + + + + + Add to new playlist + + + + + Pause + + + + + Play + Groti + + + + Add to playlist + Pridėti į grojaraštį + + + + Display in file manager + Rodyti failų tvarkytuvėje + + + + Remove from playlist + Šalinti iš grojaraščio + + + + Delete from local disk + Ištrinti iš vietinio disko + + + + Song info + Dainos informacija + + + + + Cancel + Atsisakyti + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + Ištrinti + + + + Are you sure you want to delete %1? + Ar tikrai norite ištrinti %1? + + + + + Are you sure you want to delete the selected %1 songs? + Ar tikrai norite ištrinti %1 pasirinktas dainas? + + + + + The song files contained will also be deleted + + + + + MusicListItem + + + Are you sure you want to delete this playlist? + Ar tikrai norite ištrinti šį grojaraštį? + + + + Cancel + Atsisakyti + + + + Delete + Ištrinti + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + MusicListView - New playlist - Naujas grojaraštis + Naujas grojaraštis - + + Play Groti - Add to playlist - Pridėti į grojaraštį + Pridėti į grojaraštį - Display in file manager - Rodyti failų tvarkytuvėje + Rodyti failų tvarkytuvėje - Song info - Dainos informacija + Dainos informacija - Are you sure you want to delete %1? - Ar tikrai norite ištrinti %1? + Ar tikrai norite ištrinti %1? - - Are you sure you want to delete the selected %1 songs? - Ar tikrai norite ištrinti %1 pasirinktas dainas? + Ar tikrai norite ištrinti %1 pasirinktas dainas? - Remove from playlist - Šalinti iš grojaraščio + Šalinti iš grojaraščio - Delete from local disk - Ištrinti iš vietinio disko + Ištrinti iš vietinio disko - Encoding - Koduotė + Koduotė + + + + My Favorites + + + + + + Are you sure you want to delete this playlist? + Ar tikrai norite ištrinti šį grojaraštį? - + + Cancel Atsisakyti - + + + + Delete Ištrinti - + + + Pause + + + + + + Rename + Pervadinti + + Deleting the current song will also delete the song files contained - Ištrinus esamą dainą, taip pat bus ištrinti turimi dainos failai + Ištrinus esamą dainą, taip pat bus ištrinti turimi dainos failai - Unknown artist - Nežinomas atlikėjas + Nežinomas atlikėjas - Unknown album - Nežinomas albumas + Nežinomas albumas MusicListWidget - No Music - Nėra muzikos + Nėra muzikos - No result found - Rezultatų nerasta + Rezultatų nerasta - Play All - Groti visus + Groti visus - Time added - Pridėjimo laikas + Pridėjimo laikas - Title - Pavadinimas + Pavadinimas - Artist - Atlikėjas + Atlikėjas - Album name - Albumo pavadinimas + Albumo pavadinimas - Custom - Pasirinktinai + Pasirinktinai PlayListItem - Are you sure you want to delete this playlist? - Ar tikrai norite ištrinti šį grojaraštį? + Ar tikrai norite ištrinti šį grojaraštį? - Delete - Ištrinti + Ištrinti - Cancel - Atsisakyti + Atsisakyti PlayListView - - + New playlist + Naujas grojaraštis + + + + Play queue + + + + + musicResult + + + + + My favorites + Mano mėgstamos + + + + Add to new playlist + + + + + Pause + + + + + Play Groti - - + + Add to playlist + Pridėti į grojaraštį + + + + Display in file manager + Rodyti failų tvarkytuvėje + + + Remove from playlist + Šalinti iš grojaraščio + + + + Remove from play queue + + + + + Delete from local disk + Ištrinti iš vietinio disko + + + + Encoding + Koduotė + + + + Song info + Dainos informacija + + + + + Cancel + Atsisakyti + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + Ar tikrai norite ištrinti %1? + + + + + Are you sure you want to delete the selected %1 songs? + Ar tikrai norite ištrinti %1 pasirinktas dainas? + + + + + The song files contained will also be deleted + + + Rename - Pervadinti + Pervadinti - - + Delete Ištrinti + + + Unknown artist + Nežinomas atlikėjas + + + + Unknown album + Nežinomas albumas + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + Nežinomas albumas + + + + + + Unknown artist + Nežinomas atlikėjas + PlaylistManager - + New playlist Naujas grojaraštis - + Artist + Atlikėjas + + + + + + Albums + + + + + + + Artists + + + + + All Music Visa muzika - + My favorites Mano mėgstamos - + Search result Paieškos rezultatai + + + Play + Groti + + + + Music + + PlaylistWidget - New playlist - Naujas grojaraštis + Naujas grojaraštis QApplication - Deepin Music - Deepin muzika + Deepin muzika + + + + Music + QObject - Deepin Music - Deepin muzika + Deepin muzika @@ -499,9 +1226,13 @@ Suskleisti į sistemos dėklą - Exit Deepin Music - Išeiti iš Deepin muzikos + Išeiti iš Deepin muzikos + + + + Exit Music + @@ -570,20 +1301,154 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + Pavadinimas + + + + Artist + Atlikėjas + + + + Search + Ieškoti + + + SearchResult - - Search "%1" in Deepin Music - Ieškoti "%1" programoje Deepin muzika + Ieškoti "%1" programoje Deepin muzika + + + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + Groti + + + + Songs + + + + + Playlists + + + + + Settings + Nustatymai + + + + Play/Pause + Groti/Pristabdyti + + + + Previous + Ankstesnis + + + + Next + Kitas + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + Mėgstama + + + + Unfavorite + + + + + Song info + Dainos informacija + + + + New playlist + Naujas grojaraštis + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + Šalinti iš grojaraščio + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search Ieškoti - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ml.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ml.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ml.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ml.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,181 +1,330 @@ - + + + CloseConfirmDialog - + Please select your operation - + - + Exit പുറത്തേക്ക് കടക്കുക - + Minimize to system tray - + - + Do not ask again - + - + Cancel റദ്ദാക്കുക - - OK - + + Confirm + + + + + DequalizerDialog + + + Custom + കസ്റ്റം + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Footer - + Previous - + - + Next അടുത്തത് - + Play/Pause - + - + Favorite - + - + Lyrics - + + + + + Play Queue + - + Unknown Title - + - - - + + + Unknown artist - + - + Play Mode - + - - Playlist - - - - + List Loop - + - + Single Loop - + - + Shuffle - + ImportWidget - - Add folder - + + Open Folder + + + + + Add Music + - - + + Scan - + - - - %1 music directory or drag & drop music file to add music - + + + %1 music directory or drag music files here + - + Loading music, please wait... - + InfoDialog - + Title: - + - + Artist: - + - + Album: - + - + Type: - + - + Path: - + - + Unknown artist - + - + Unknown album - + - + Size: - + + + + + Basic info + - + Duration: - + LoadWidget - + Loading... - + @@ -183,17 +332,17 @@ Find lyrics - + Title - + Artist - + @@ -201,347 +350,770 @@ തിരയുക - + Back - + - MainFrame + MUsicLyricWidget - - New playlist - + + No lyrics yet + + + + MainFrame - + Settings - + - - + + Exit പുറത്തേക്ക് കടക്കുക - - Add folder - + + Dark theme + - - Add file - + + Equalizer + - - Dark theme - + + Play/Pause + - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + + Previous + - - Play/Pause - + + All music + - - Previous - + + + OK + - - Invalid or non-existent file - + + Add playlist + - - Failed to import, no vaild music file found! - + + Add music + - - All music - + + Music is a local music player with beautiful design and simple functions. + - - - OK - + + + + + + Music + - + Successfully added to "%1" - + - + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next അടുത്തത് - MusicListView + MusicListDataDelegate - - New playlist - + + + No songs + - - Play - + + + 1 song + - - Add to playlist - + + + %1 songs + + + + MusicListDataWidget - - Display in file manager - + + + + + + + + + + + No songs + - - Song info - + + + 1 album - 1 song + - - Are you sure you want to delete %1? - + + + + + %1 album - %2 songs + - - - Are you sure you want to delete the selected %1 songs? - + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + - + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + + + + + + + + + + Time added + + + + + + + + Album + + + + + + + + Artist + + + + + + Title + + + + + Play All + + + + + Artists + + + + + Albums + + + + + Custom + കസ്റ്റം + + + + + + Search Results + + + + + Songs + + + + + No result found + + + + + MusicListDialog + + + Play All + + + + + Shuffle + + + + + MusicListInfoView + + + Play queue + + + + + Add to new playlist + + + + + Pause + + + + + Play + + + + + Add to playlist + + + + + Display in file manager + + + + Remove from playlist - + - + Delete from local disk - + - - Encoding - + + Song info + - + + Cancel - റദ്ദാക്കുക + റദ്ദാക്കുക - + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + Delete - നീക്കം ചെയ്യുക + നീക്കം ചെയ്യുക - - Deleting the current song will also delete the song files contained - + + Are you sure you want to delete %1? + - - Unknown artist - + + + Are you sure you want to delete the selected %1 songs? + - - Unknown album - + + + The song files contained will also be deleted + - MusicListWidget + MusicListItem - - No Music - + + Are you sure you want to delete this playlist? + - - No result found - + + Cancel + റദ്ദാക്കുക - - Play All - + + Delete + നീക്കം ചെയ്യുക + + + MusicListScrollArea - - Time added - + + Library + - - Title - + + Playlists + + + + MusicListView - - Artist - + + + Play + - - Album name - + + + Are you sure you want to delete this playlist? + - - Custom - കസ്റ്റം + + My Favorites + + + + + + Cancel + റദ്ദാക്കുക + + + + + + + Delete + നീക്കം ചെയ്യുക + + + + + Pause + + + + + + Rename + - PlayListItem + MusicListWidget - - Are you sure you want to delete this playlist? - + Custom + കസ്റ്റം + + + PlayListItem - Delete - നീക്കം ചെയ്യുക + നീക്കം ചെയ്യുക - Cancel - റദ്ദാക്കുക + റദ്ദാക്കുക PlayListView - - + + Play queue + + + + + My favorites + + + + + Add to new playlist + + + + + Pause + + + + + Play - + - - - Rename - + + musicResult + - - + + Add to playlist + + + + + Display in file manager + + + + + Remove from play queue + + + + + Delete from local disk + + + + + Encoding + + + + + Song info + + + + + + Cancel + റദ്ദാക്കുക + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + + Delete നീക്കം ചെയ്യുക + + + Unknown artist + + + + + Unknown album + + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + + + + + + + Unknown artist + + PlaylistManager - + New playlist - + + + + + + + Albums + + + + + + + Artists + - + + All Music - + - + My favorites - + - + Search result - + - - - PlaylistWidget - - New playlist - + + Play + + + + + Music + QApplication - - Deepin Music - + + Music + QObject - - Deepin Music - - - Minimize to system tray - + - Exit Deepin Music - + Exit Music + Autoplay - + Enable fade in/out - + Remember playback position - + Close Main Window - + Basic - + Play - + Shortcuts - + Restore Defaults - + @@ -551,39 +1123,169 @@ Play/Pause - + Previous - + Volume down - + Volume up - + + + + + SearchLyricsWidget + + + Find Lyrics + + + + + Title + + + + + Artist + + + + + Search + തിരയുക SearchResult - - - Search "%1" in Deepin Music - + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + + + + + Songs + + + + + Playlists + + + + + Settings + + + + + Play/Pause + + + + + Previous + + + + + Next + അടുത്തത് + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + + + + + Unfavorite + + + + + Song info + + + + + New playlist + + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search തിരയുക - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_mn.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_mn.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_mn.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_mn.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,245 @@ - + + + CloseConfirmDialog - + Please select your operation Үйлдлээ сонгоно уу - + Exit Гарах - + Minimize to system tray Систем мѳрѳнд шилжүүлэх - + Do not ask again - + - + Cancel Цуцлах - + + Confirm + + + OK - ЗА + ЗА + + + + DequalizerDialog + + + Custom + Дурын + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Анхдагч утга сэргээх Footer - + Previous Ѳмнѳх - + Next Дараах - + Play/Pause Тоглуулах/Зогсоох - + Favorite Дуртай - + Lyrics Дууны үг - + + Play Queue + + + + Unknown Title Тодорхойгүй нэр - - - + + + Unknown artist Тодорхойгүй уран бүтээлч - + Play Mode Тоглох горим - Playlist - Жагсаалт + Жагсаалт - + List Loop Давтах жагсаалт - + Single Loop Нэгийг давт - + Shuffle Холих @@ -100,24 +247,37 @@ ImportWidget - Add folder - Хавтас нэмэх + Хавтас нэмэх + + + + Open Folder + - - + + Add Music + + + + + Scan Шүүх - - + + + %1 music directory or drag music files here + + + %1 music directory or drag & drop music file to add music - %1 хавтас эсвэл дуугаа чирч оруулна уу + %1 хавтас эсвэл дуугаа чирч оруулна уу - + Loading music, please wait... Уншиж байна, түр хүлээнэ үү... @@ -125,47 +285,52 @@ InfoDialog - + Title: Гарчиг: - + Artist: Уран бүтээлч: - + Album: Цомог: - + Type: Тѳрѳл: - + Path: Зам: - + Unknown artist Тодорхойгүй уран бүтээлч - + Unknown album Тодорхойгүй цомог - + Size: Хэмжээ: - + + Basic info + + + + Duration: Үргэлжлэх хугацаа: @@ -173,7 +338,7 @@ LoadWidget - + Loading... Уншиж байна... @@ -183,7 +348,7 @@ Find lyrics - + @@ -201,297 +366,843 @@ Хайх - + Back Буцах + MUsicLyricWidget + + + No lyrics yet + + + + MainFrame - New playlist - Шинэ жагсаалт + Шинэ жагсаалт - + Settings Тохиргоо - - + + Exit Гарах - Add folder - Хавтас нэмэх + Хавтас нэмэх - Add file - Файл нэмэх + Файл нэмэх - + Dark theme Бараан загвар - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - - - - + Play/Pause Тоглуулах/Зогсоох - + Previous Ѳмнѳх - Invalid or non-existent file - Алдаатай эсвэл байхгүй файл + Алдаатай эсвэл байхгүй файл - Failed to import, no vaild music file found! - Импортолж чадсангүй, хөгжмийн файл олдсонгүй! + Импортолж чадсангүй, хөгжмийн файл олдсонгүй! - + All music Бүх хѳгжим - - + + OK ЗА - + + Add playlist + + + + + Add music + + + + + Equalizer + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" "%1" амжилттай нэмлээ - + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next Дараах - MusicListView + MusicListDataDelegate + + + + No songs + + + + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + Бүх хѳгжим + + + + + + + + + Time added + Нэмсэн огноо + + + + + + + Album + + + + + + + + Artist + Уран бүтээлч + + + + + Title + Гарчиг + + + + Play All + Бүгдийг тоглуул + + + + Artists + + + + + Albums + + + + + Custom + Дурын + + + + + + Search Results + + + + + Songs + + + + + No result found + Үр дүн олдсонгүй + + + + MusicListDialog + + + Play All + Бүгдийг тоглуул + + + + Shuffle + Холих + + + + MusicListInfoView - New playlist - Шинэ жагсаалт + Шинэ жагсаалт + + + + Play queue + + + + + Add to new playlist + - + + Pause + + + + Play - Тоглуулах + Тоглуулах - + Add to playlist - Жагсаалтад нэмэх + Жагсаалтад нэмэх - + Display in file manager - Файл менежерт харах + Файл менежерт харах - + + Remove from playlist + Жагсаалтаас хасах + + + + Delete from local disk + Ѳѳр дээрээс устгах + + + Song info - Дууны мэдээлэл + Дууны мэдээлэл + + + + + Cancel + Цуцлах + + + + Remove + - + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + Устгах + + + Are you sure you want to delete %1? - + - - + + Are you sure you want to delete the selected %1 songs? - + + + + + + The song files contained will also be deleted + + + + + MusicListItem + + + Are you sure you want to delete this playlist? + + + + + Cancel + Цуцлах + + + + Delete + Устгах + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + + MusicListView + + New playlist + Шинэ жагсаалт + + + + + Play + Тоглуулах + + + Add to playlist + Жагсаалтад нэмэх + + + Display in file manager + Файл менежерт харах + + + Song info + Дууны мэдээлэл - Remove from playlist - Жагсаалтаас хасах + Жагсаалтаас хасах - Delete from local disk - Ѳѳр дээрээс устгах + Ѳѳр дээрээс устгах - Encoding - Энкод + Энкод + + + + My Favorites + + + + + + Are you sure you want to delete this playlist? + - + + Cancel Цуцлах - + + + + Delete Устгах - + + + Pause + + + + + + Rename + Дахин нэрлэх + + Deleting the current song will also delete the song files contained - Энэ дууг устгаснаар хадгалагдаж буй файл устгагдана + Энэ дууг устгаснаар хадгалагдаж буй файл устгагдана - Unknown artist - Тодорхойгүй уран бүтээлч + Тодорхойгүй уран бүтээлч - Unknown album - Тодорхойгүй цомог + Тодорхойгүй цомог MusicListWidget - No Music - Дуу алга + Дуу алга - No result found - Үр дүн олдсонгүй + Үр дүн олдсонгүй - Play All - Бүгдийг тоглуул + Бүгдийг тоглуул - Time added - Нэмсэн огноо + Нэмсэн огноо - Title - Гарчиг + Гарчиг - Artist - Уран бүтээлч + Уран бүтээлч - Album name - Цомгийн нэр + Цомгийн нэр - Custom - Дурын + Дурын PlayListItem - - Are you sure you want to delete this playlist? - - - - Delete - Устгах + Устгах - Cancel - Цуцлах + Цуцлах PlayListView - - + New playlist + Шинэ жагсаалт + + + + Play queue + + + + + musicResult + + + + + My favorites + Дуртай + + + + Add to new playlist + + + + + Pause + + + + + Play Тоглуулах - - + + Add to playlist + Жагсаалтад нэмэх + + + + Display in file manager + Файл менежерт харах + + + Remove from playlist + Жагсаалтаас хасах + + + + Remove from play queue + + + + + Delete from local disk + Ѳѳр дээрээс устгах + + + + Encoding + Энкод + + + + Song info + Дууны мэдээлэл + + + + + Cancel + Цуцлах + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + Rename - Дахин нэрлэх + Дахин нэрлэх - - + Delete Устгах + + + Unknown artist + Тодорхойгүй уран бүтээлч + + + + Unknown album + Тодорхойгүй цомог + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + Тодорхойгүй цомог + + + + + + Unknown artist + Тодорхойгүй уран бүтээлч + PlaylistManager - + New playlist Шинэ жагсаалт - + Artist + Уран бүтээлч + + + + + + Albums + + + + + + + Artists + + + + + All Music Бүх хѳгжим - + My favorites Дуртай - + Search result Хайлтын үр дүн + + + Play + Тоглуулах + + + + Music + + PlaylistWidget - New playlist - Шинэ жагсаалт + Шинэ жагсаалт QApplication - Deepin Music - Дээпин хөгжим + Дээпин хөгжим + + + + Music + QObject - Deepin Music - Дээпин Хѳгжи + Дээпин Хѳгжи @@ -499,9 +1210,13 @@ Систем мѳрѳнд шилжүүлэх - Exit Deepin Music - Дээпин хѳгжим гаргах + Дээпин хѳгжим гаргах + + + + Exit Music + @@ -511,7 +1226,7 @@ Enable fade in/out - + @@ -570,20 +1285,154 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + Гарчиг + + + + Artist + Уран бүтээлч + + + + Search + Хайх + + + SearchResult - - Search "%1" in Deepin Music - Деепин хөгжимөөс "%1" хайх + Деепин хөгжимөөс "%1" хайх + + + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + Тоглуулах + + + + Songs + + + + + Playlists + + + + + Settings + Тохиргоо + + + + Play/Pause + Тоглуулах/Зогсоох + + + + Previous + Ѳмнѳх + + + + Next + Дараах + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + Дуртай + + + + Unfavorite + + + + + Song info + Дууны мэдээлэл + + + + New playlist + Шинэ жагсаалт + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + Жагсаалтаас хасах + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search Хайх - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ms.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ms.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ms.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ms.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,237 @@ - + + + CloseConfirmDialog - - Please select your operation - Sila pilih operasi anda - - - + Exit Keluar - + Minimize to system tray Minimumkan ke dalam talam sistem - + Do not ask again - + Jangan tanya lagi + + + + Please select your operation + Sila pilih operasi anda - + Cancel Batal - - OK - OK + + Confirm + Sahkan + + + + DequalizerDialog + + + Custom + Suai + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Pulih ke Lalai Footer - + + Unknown Title + Tajuk Tidak Diketahui + + + + + + Unknown artist + Artis tidak diketahui + + + Previous Terdahulu - + Next Berikutnya - + Play/Pause Main/Jeda - + Favorite Kegemaran - + Lyrics Lirik - - Unknown Title - Tajuk Tidak Diketahui - - - - - - Unknown artist - Artis tidak diketahui - - - + Play Mode Mod Main - - Playlist - Senarai Main + + Play Queue + Main Baris Gilir - + List Loop Ulang Senarai - + Single Loop Ulang Tunggal - + Shuffle Kocok @@ -100,24 +239,29 @@ ImportWidget - - Add folder - Tambah folder + + Open Folder + + + + + Add Music + Tambah Muzik - - + + Scan Imbas - - - %1 music directory or drag & drop music file to add music - %1 direktori muzik atau seret & lepas fail muzik untuk menambah muzik + + + %1 music directory or drag music files here + %1 direktori muzik atau seret fail-fail muzik di sini - + Loading music, please wait... Memuatkan muzik, tunggu sebentar... @@ -125,55 +269,60 @@ InfoDialog - + + Basic info + Maklumat asas + + + Title: Tajuk: - + Artist: Artis - + Album: Album: - + Type: Jenis: - + + Size: + Saiz: + + + + Duration: + Tempoh: + + + Path: Laluan: - + Unknown artist Artis tidak diketahui - + Unknown album Album tidak diketahui - - - Size: - Saiz: - - - - Duration: - Tempoh: - LoadWidget - + Loading... Memuat.... @@ -183,7 +332,7 @@ Find lyrics - + Cari lirik @@ -201,307 +350,716 @@ Gelintar - + Back Undur - MainFrame + MUsicLyricWidget - - New playlist - Senarai main baharu + + No lyrics yet + + + + MainFrame - - Settings - Tetapan + + Add playlist + Tambah senarai main - - - Exit - Keluar + + Add music + Tambah muzik - - Add folder - Tambah folder + + Equalizer + - - Add file - Tambah fail + + Settings + Tetapan - + Dark theme Tema gelap - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + + + Exit + Keluar + + + + Music is a local music player with beautiful design and simple functions. + Muzik ialah sebuah pemain muzik setempat dengan reka bentuk cantik dan fungsi-fungsi yang ringkas. + + + + + + + + Music + Muzik - + Play/Pause Main/Jeda - + Previous Terdahulu - - Invalid or non-existent file - Fail tidak sah atau tidak-wujud + + Next + Berikutnya - - Failed to import, no vaild music file found! - Gagal diimport, tiada fail muzik yang sah ditemui! + + Successfully added to "%1" + Berjaya ditambah kepada "%1" - - All music - Semua muzik + + Already added to the playlist + Sudah ditambah ke dalam senarai main + + + + 1 song added + 1 lagu ditambah - - + + %1 songs added + %1 lagu ditambah + + + + File is invalid or does not exist, load failed + Fail tidak sah atau tidak wujud, proses muat gagal + + + + OK OK - - Successfully added to "%1" - Berjaya ditambah kepada "%1" + + Import failed, no valid music file found + Import gagal, tiada fail muzik yang sah ditemui - - Next - Berikutnya + + All music + Semua muzik - MusicListView + MusicListDataDelegate - - New playlist - Senarai main baharu + + + No songs + Tiada lagu + + + + + 1 song + 1 lagu + + + + + %1 songs + %1 lagu + + + + MusicListDataWidget + + + + + + + + + + + + No songs + Tiada lagu + + + + + 1 album - 1 song + 1 album - 1 lagu + + + + + + + %1 album - %2 songs + %1 album - %2 lagu + + + + + %1 albums - %2 songs + %1 album - %2 lagu + + + + + 1 artist - 1 song + 1 artis - 1 lagu + + + + + %1 artist - %2 songs + %1 artist - %2 lagu + + + + + %1 artists - %2 songs + %1 artis - %2 lagu + + + + + 1 song + 1 lagu + + + + + + + %1 songs + %1 lagu + + + + + + + No search results + Tiada keputusan gelintar + + + + + + All Music + Semua Muzik - + + + + + + + Time added + Masa ditambah + + + + + + + Album + Album + + + + + + + Artist + Artis + + + + + Title + Tajuk + + + + Play All + Main Semua + + + + Artists + Artis + + + + Albums + Album + + + + Custom + Suai + + + + + + Search Results + + + + + Songs + Lagu + + + + No result found + Tiada keputusan ditemui + + + + MusicListDialog + + + Play All + Main Semua + + + + Shuffle + Kocok + + + + MusicListInfoView + + + Play queue + Main baris gilir + + + + Add to new playlist + Tambah ke senarai main baharu + + + + Pause + Jeda + + + Play Main - + Add to playlist Tambah ke senarai main - + Display in file manager Papar dalam pengurus fail - + + Remove from playlist + Buang dari senarai main + + + + Delete from local disk + Padam dari cakera setempat + + + Song info Maklumat lagu - + + + Cancel + Batal + + + + Remove + Buang + + + + Are you sure you want to remove %1? + Anda pasti mahu membuang %1? + + + + Are you sure you want to remove the selected %1 songs? + Anda pasti mahu membuang %1 lagu terpilih ini? + + + + Delete + Padam + + + Are you sure you want to delete %1? - + Anda pasti mahu memadam %1? - - + + Are you sure you want to delete the selected %1 songs? - + Anda pasti mahu memadam %1 lagu terpilih ini? - - Remove from playlist - Buang dari senarai main + + + The song files contained will also be deleted + Fail lagu yang terkandung juga akan dipadamkan + + + MusicListItem - - Delete from local disk - Padam dari cakera setempat + + Are you sure you want to delete this playlist? + Anda pasti mahu memadam senarai main ini? - - Encoding - Pengekodan + + Cancel + Batal + + + + Delete + Padam + + + + MusicListScrollArea + + + Library + Pustaka - + + Playlists + Senarai main + + + + MusicListView + + + My Favorites + + + + + + Are you sure you want to delete this playlist? + Anda pasti mahu memadam senarai main ini? + + + + Cancel Batal - + + + + Delete Padam - - Deleting the current song will also delete the song files contained - Memadam lagu semasa juga akan memadam fail lagu yang dikandunginya + + + Pause + Jeda + + + + + Play + Main + + + + + Rename + Nama Semula + + + PlayListView - + Unknown artist Artis tidak diketahui - + Unknown album Album tidak diketahui - - - MusicListWidget - - No Music - Tiada Muzik + + Play queue + Main baris gilir - - No result found - Tiada keputusan ditemui + + musicResult + - - Play All - Main Semua + + My favorites + Kegemaran saya - - Time added - Masa ditambah + + Add to new playlist + Tambah ke senarai main baharu - - Title - Tajuk + + Pause + Jeda - - Artist - Artis + + + Play + Main - - Album name - Nama album + + Add to playlist + Tambah ke senarai main - - Custom - Suai + + Display in file manager + Papar dalam pengurus fail - - - PlayListItem - - Are you sure you want to delete this playlist? - + Remove from playlist + Buang dari senarai main - - Delete - Padam + + Remove from play queue + - + + Delete from local disk + Padam dari cakera setempat + + + + Encoding + Pengekodan + + + + Song info + Maklumat lagu + + + + Cancel Batal - - - PlayListView - - - Play - Main + + Remove + Buang - - - Rename - Nama Semula + + Are you sure you want to remove %1? + Anda pasti mahu membuang %1? + + + + Are you sure you want to remove the selected %1 songs? + Anda pasti mahu membuang %1 lagu terpilih ini? - - + Delete Padam + + + Are you sure you want to delete %1? + Anda pasti mahu memadam %1? + + + + + Are you sure you want to delete the selected %1 songs? + Anda pasti mahu memadam %1 lagu terpilih ini? + + + + + The song files contained will also be deleted + Fail lagu yang terkandung juga akan dipadamkan + + + + PlayListWidget + + + + No songs + Tiada lagu + + + + No search results + Tiada keputusan gelintar + + + + Play Queue + Main Baris Gilir + + + + Empty + Kosong + + + + 1 song + 1 lagu + + + + %1 songs + %1 lagu + + + + Playlist + + + + Unknown album + Album tidak diketahui + + + + + + Unknown artist + Artis tidak diketahui + PlaylistManager - + New playlist Senarai main baharu - + + + + Albums + Album + + + + + + Artists + Artis + + + + All Music Semua Muzik - + My favorites Kegemaran saya - + Search result Hasil gelintar - - - PlaylistWidget - - New playlist - Senarai main baharu + + Play + Main + + + + Music + Muzik QApplication - - Deepin Music - Pemain Muzik Deepin + + Music + Muzik QObject - - Deepin Music - Muzik Deepin - - Minimize to system tray Minimumkan ke dalam talam sistem - Exit Deepin Music - Keluar dari Muzik Deepin + Exit Music + Keluar dari Muzik @@ -511,7 +1069,7 @@ Enable fade in/out - + Benarkan resap jelma/lenyap @@ -570,20 +1128,150 @@ + SearchLyricsWidget + + + Find Lyrics + Cari Lirik + + + + Title + Tajuk + + + + Artist + Artis + + + + Search + Gelintar + + + SearchResult - - - Search "%1" in Deepin Music - Gelintar "%1" dalam Muzik Deepin + + Music + Muzik + + + + Artists + Artis + + + + Albums + Album + + + + Shortcut + + + Play + Main + + + + Songs + Lagu + + + + Playlists + Senarai main + + + + Settings + Tetapan + + + + Play/Pause + Main/Jeda + + + + Previous + Terdahulu + + + + Next + Berikutnya + + + + Volume Up + Volum Naik + + + + Volume Down + Volum Turun + + + + Mute + Senyap + + + + Favorite + Kegemaran + + + + Unfavorite + Nyahgemar + + + + Song info + Maklumat lagu + + + + New playlist + Senarai main baharu + + + + Add music + Tambah muzik + + + + Rename playlist + Nama semula senarai main + + + + Remove from playlist + Buang dari senarai main + + + + Help + Bantuan + + + + Display shortcuts + Papar pintasan TitlebarWidget - + Search Gelintar - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_nb.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_nb.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_nb.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_nb.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,245 @@ - + + + CloseConfirmDialog - + Please select your operation - + - + Exit Lukk - + Minimize to system tray Minimer til systemfeltet - + Do not ask again - + - + Cancel Avbryt - + + Confirm + + + OK - OK + OK + + + + DequalizerDialog + + + Custom + Egendefinert + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Gjenopprett Standard Footer - + Previous Forrige - + Next Neste - + Play/Pause Spill/Pause - + Favorite Favoritt - + Lyrics Lyrikk - + + Play Queue + + + + Unknown Title Ukjent Tittel - - - + + + Unknown artist Ukjent artist - + Play Mode Avspillingsmodus - Playlist - Spilleliste + Spilleliste - + List Loop - + - + Single Loop - + - + Shuffle Tilfeldig rekkefølge @@ -100,24 +247,33 @@ ImportWidget - Add folder - Legg til mappe + Legg til mappe + + + + Open Folder + - - + + Add Music + + + + + Scan Skann - - - %1 music directory or drag & drop music file to add music - + + + %1 music directory or drag music files here + - + Loading music, please wait... Laster musikk, vennligst vent... @@ -125,47 +281,52 @@ InfoDialog - + Title: Tittel: - + Artist: Artist: - + Album: Album: - + Type: Type: - + Path: Sti: - + Unknown artist Ukjent artist - + Unknown album Ukjent albu - + Size: Størrelse: - + + Basic info + + + + Duration: Lengde: @@ -173,7 +334,7 @@ LoadWidget - + Loading... Laster... @@ -183,7 +344,7 @@ Find lyrics - + @@ -201,297 +362,819 @@ Søk - + Back Tilbake + MUsicLyricWidget + + + No lyrics yet + + + + MainFrame - New playlist - Ny spilleliste + Ny spilleliste - + Settings Instillinger - - + + Exit Lukk - Add folder - Legg til mappe + Legg til mappe - Add file - Legg til fil + Legg til fil - + Dark theme Mørkt tema - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - - - - + Play/Pause Spill/Pause - + Previous Forrige - Invalid or non-existent file - Ugyldig eller ikke-eksisterende fil - - - - Failed to import, no vaild music file found! - + Ugyldig eller ikke-eksisterende fil - + All music All musikk - - + + OK OK - + + Add playlist + + + + + Add music + + + + + Equalizer + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" - + + + + + Already added to the playlist + + + + + 1 song added + - + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next Neste - MusicListView + MusicListDataDelegate + + + + No songs + + + + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + All musikk + + + + + + + + + Time added + + + + + + + + Album + + + + + + + + Artist + Artist + + + + + Title + Tittel + + + + Play All + Spill alle + + + + Artists + + + + + Albums + + + + + Custom + Egendefinert + + + + + + Search Results + + + + + Songs + + + + + No result found + + + + + MusicListDialog + + + Play All + Spill alle + + + + Shuffle + Tilfeldig rekkefølge + + + + MusicListInfoView - New playlist - Ny spilleliste + Ny spilleliste + + + + Play queue + + + + + Add to new playlist + - + + Pause + + + + Play - Spill av + Spill av - + Add to playlist - Legg til i spilleliste + Legg til i spilleliste - + Display in file manager - Vis i filutforsker + Vis i filutforsker - + + Remove from playlist + Fjern fra spilleliste + + + + Delete from local disk + Slett fra lokal disk + + + Song info - + + + + + + Cancel + Avbryt + + + + Remove + - + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + Slett + + + Are you sure you want to delete %1? - + - - + + Are you sure you want to delete the selected %1 songs? - + + + + + + The song files contained will also be deleted + + + + + MusicListItem + + + Are you sure you want to delete this playlist? + + + + + Cancel + Avbryt + + + + Delete + Slett + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + + MusicListView + + New playlist + Ny spilleliste + + + + + Play + Spill av + + + Add to playlist + Legg til i spilleliste + + + Display in file manager + Vis i filutforsker - Remove from playlist - Fjern fra spilleliste + Fjern fra spilleliste - Delete from local disk - Slett fra lokal disk + Slett fra lokal disk - Encoding - Enkoding + Enkoding - + + My Favorites + + + + + + Are you sure you want to delete this playlist? + + + + + Cancel Avbryt - + + + + Delete Slett - - Deleting the current song will also delete the song files contained - + + + Pause + + + + + + Rename + Omdøp - Unknown artist - Ukjent artist + Ukjent artist - Unknown album - Ukjent albu + Ukjent albu MusicListWidget - - No Music - - - - - No result found - - - - Play All - Spill alle - - - - Time added - + Spill alle - Title - Tittel + Tittel - Artist - Artist + Artist - Album name - Albumnavn + Albumnavn - Custom - Egendefinert + Egendefinert PlayListItem - - Are you sure you want to delete this playlist? - - - - Delete - Slett + Slett - Cancel - Avbryt + Avbryt PlayListView - - + New playlist + Ny spilleliste + + + + Play queue + + + + + musicResult + + + + + My favorites + Mine favoritter + + + + Add to new playlist + + + + + Pause + + + + + Play Spill av - - + + Add to playlist + Legg til i spilleliste + + + + Display in file manager + Vis i filutforsker + + + Remove from playlist + Fjern fra spilleliste + + + + Remove from play queue + + + + + Delete from local disk + Slett fra lokal disk + + + + Encoding + Enkoding + + + + Song info + + + + + + Cancel + Avbryt + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + Rename - Omdøp + Omdøp - - + Delete Slett + + + Unknown artist + Ukjent artist + + + + Unknown album + Ukjent albu + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + Ukjent albu + + + + + + Unknown artist + Ukjent artist + PlaylistManager - + New playlist Ny spilleliste - + Artist + Artist + + + + + + Albums + + + + + + + Artists + + + + + All Music All musikk - + My favorites Mine favoritter - + Search result Søkeresultat + + + Play + Spill av + + + + Music + + PlaylistWidget - New playlist - Ny spilleliste + Ny spilleliste QApplication - Deepin Music - Deepin Musikk + Deepin Musikk + + + + Music + QObject - Deepin Music - Deepin musik + Deepin musik @@ -499,9 +1182,13 @@ Minimer til oppgavelinje - Exit Deepin Music - Avslutt Deepin Musikk + Avslutt Deepin Musikk + + + + Exit Music + @@ -511,7 +1198,7 @@ Enable fade in/out - + @@ -521,7 +1208,7 @@ Close Main Window - + @@ -570,20 +1257,150 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + Tittel + + + + Artist + Artist + + + + Search + Søk + + + SearchResult - - - Search "%1" in Deepin Music - + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + Spill av + + + + Songs + + + + + Playlists + + + + + Settings + Instillinger + + + + Play/Pause + Spill/Pause + + + + Previous + Forrige + + + + Next + Neste + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + Favoritt + + + + Unfavorite + + + + + Song info + + + + + New playlist + Ny spilleliste + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + Fjern fra spilleliste + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search Søk - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ne.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ne.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ne.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ne.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,181 +1,334 @@ - + + + CloseConfirmDialog - + Please select your operation - + - + Exit - + - + Minimize to system tray - + - + Do not ask again - + - + Cancel रद्द गर्नुहोस् - + + Confirm + + + OK - ठिक छ + ठिक छ + + + + DequalizerDialog + + + Custom + + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Footer - + Previous - + - + Next अर्को - + Play/Pause - + - + Favorite - + - + Lyrics - + - + + Play Queue + + + + Unknown Title - + - - - + + + Unknown artist - + - + Play Mode - - - - - Playlist - + - + List Loop - + - + Single Loop - + - + Shuffle - + ImportWidget - - Add folder - + + Open Folder + + + + + Add Music + - - + + Scan - + - - - %1 music directory or drag & drop music file to add music - + + + %1 music directory or drag music files here + - + Loading music, please wait... - + InfoDialog - + Title: - + - + Artist: - + - + Album: - + - + Type: प्रकार - + Path: - + - + Unknown artist - + - + Unknown album - + - + Size: - + - + + Basic info + + + + Duration: - + LoadWidget - + Loading... - + @@ -183,17 +336,17 @@ Find lyrics - + Title - + Artist - + @@ -201,337 +354,753 @@ खोजी गर्नुहोस् - + Back - + - MainFrame + MUsicLyricWidget - - New playlist - + + No lyrics yet + + + + MainFrame - + Settings सेटिंग्स - - + + Exit - + - - Add folder - + + Dark theme + - - Add file - + + Equalizer + - - Dark theme - + + Play/Pause + - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + + Previous + - - Play/Pause - + + All music + - - Previous - + + + OK + ठिक छ - - Invalid or non-existent file - + + Add playlist + - - Failed to import, no vaild music file found! - + + Add music + - - All music - + + Music is a local music player with beautiful design and simple functions. + - - - OK - ठिक छ + + + + + + Music + - + Successfully added to "%1" - + + + + + Already added to the playlist + - + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next अर्को - MusicListView + MusicListDataDelegate - - New playlist - + + + No songs + + + + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + + + + + + + + + + Time added + + + + + + + + Album + + + + + + + + Artist + + + + + + Title + + + + + Play All + + + + + Artists + + + + + Albums + + + + + Custom + + + + + + + Search Results + + + + + Songs + + + + + No result found + + + + + MusicListDialog + + + Play All + + + + + Shuffle + + + + + MusicListInfoView + + + Play queue + + + + + Add to new playlist + + + + + Pause + - + Play - + - + Add to playlist - + - + Display in file manager - + + + + + Remove from playlist + - + + Delete from local disk + + + + Song info - + + + + + + Cancel + रद्द गर्नुहोस् + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + मेटाउनुहोस् - + Are you sure you want to delete %1? - + - - + + Are you sure you want to delete the selected %1 songs? - + - - Remove from playlist - + + + The song files contained will also be deleted + + + + MusicListItem - - Delete from local disk - + + Are you sure you want to delete this playlist? + - - Encoding - + + Cancel + रद्द गर्नुहोस् + + + + Delete + मेटाउनुहोस् + + + + MusicListScrollArea + + + Library + - + + Playlists + + + + + MusicListView + + + + Play + + + + + + Are you sure you want to delete this playlist? + + + + + My Favorites + + + + + Cancel रद्द गर्नुहोस् - + + + + Delete मेटाउनुहोस् - - Deleting the current song will also delete the song files contained - + + + Pause + - - Unknown artist - + + + Rename + + + + PlayListItem - - Unknown album - + Delete + मेटाउनुहोस् + + + Cancel + रद्द गर्नुहोस् - MusicListWidget + PlayListView - - No Music - + + Play queue + - - No result found - + + My favorites + - - Play All - + + Add to new playlist + - - Time added - + + Pause + - - Title - + + + Play + - - Artist - + + musicResult + - - Album name - + + Add to playlist + - - Custom - + + Display in file manager + - - - PlayListItem - - Are you sure you want to delete this playlist? - + + Remove from play queue + + + + + Delete from local disk + + + + + Encoding + + + + + Song info + + + + + + Cancel + रद्द गर्नुहोस् + + + + Remove + - + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + + Delete मेटाउनुहोस् - - Cancel - रद्द गर्नुहोस् + + Unknown artist + + + + + Unknown album + - PlayListView + PlayListWidget - - - Play - + + + No songs + - - - Rename - + + No search results + - - - Delete - मेटाउनुहोस् + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + + + + + + + Unknown artist + PlaylistManager - + New playlist - + + + + + + + Albums + + + + + + + Artists + - + + All Music - + - + My favorites - + - + Search result - + - - - PlaylistWidget - - New playlist - + + Play + + + + + Music + QApplication - - Deepin Music - + + Music + QObject - - Deepin Music - - - Minimize to system tray - + - Exit Deepin Music - + Exit Music + Autoplay - + Enable fade in/out - + Remember playback position - + Close Main Window - + Basic - + Play - + @@ -541,7 +1110,7 @@ Restore Defaults - + @@ -551,39 +1120,169 @@ Play/Pause - + Previous - + Volume down - + Volume up - + + + + + SearchLyricsWidget + + + Find Lyrics + + + + + Title + + + + + Artist + + + + + Search + खोजी गर्नुहोस् SearchResult - - - Search "%1" in Deepin Music - + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + + + + + Songs + + + + + Playlists + + + + + Settings + सेटिंग्स + + + + Play/Pause + + + + + Previous + + + + + Next + अर्को + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + + + + + Unfavorite + + + + + Song info + + + + + New playlist + + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search खोजी गर्नुहोस् - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_nl.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_nl.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_nl.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_nl.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,237 @@ - + + + CloseConfirmDialog - - Please select your operation - Selecteer een handeling - - - + Exit - Sluiten + Afsluiten - + Minimize to system tray Minimaliseren naar systeemvak - + Do not ask again Nooit meer vragen - + + Please select your operation + Kies een handeling + + + Cancel Annuleren - - OK - Oké + + Confirm + Bevestigen + + + + DequalizerDialog + + + Custom + Aangepast + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Standaardwaarden herstellen Footer - + + Unknown Title + Onbekende titel + + + + + + Unknown artist + Onbekende artiest + + + Previous Vorige - + Next Volgende - + Play/Pause Afspelen/pauzeren - + Favorite - Favoriet + Toevoegen aan favorieten - + Lyrics Songtekst - - Unknown Title - Onbekende titel - - - - - - Unknown artist - Onbekende artiest - - - + Play Mode Afspeelmodus - - Playlist - Afspeellijst + + Play Queue + Wachtrij afspelen - + List Loop Lijst herhalen - + Single Loop Enkele herhaling - + Shuffle Willekeurig @@ -100,80 +239,90 @@ ImportWidget - - Add folder - Map toevoegen + + Open Folder + Map openen - - + + Add Music + Muziek toevoegen + + + + Scan Scannen - - - %1 music directory or drag & drop music file to add music - %1 muziekmap of versleep muziekbestanden hierheen om ze toe te voegen + + + %1 music directory or drag music files here + %1-muziekmap of sleep muziekbestanden hierheen - + Loading music, please wait... - Bezig met laden van muziek; even geduld... + Bezig met laden van muziek... InfoDialog - + + Basic info + Eigenschappen + + + Title: Titel: - + Artist: Artiest: - + Album: Album: - + Type: Type: - + + Size: + Grootte: + + + + Duration: + Duur: + + + Path: Pad: - + Unknown artist Onbekende artiest - + Unknown album Onbekend album - - - Size: - Grootte: - - - - Duration: - Duur: - LoadWidget - + Loading... Bezig met laden... @@ -201,307 +350,716 @@ Zoeken - + Back Terug - MainFrame + MUsicLyricWidget - - New playlist - Nieuwe afspeellijst + + No lyrics yet + + + + MainFrame - - Settings - Instellingen + + Add playlist + Afspeellijst toevoegen - - - Exit - Afsluiten + + Add music + Muziek toevoegen - - Add folder - Map toevoegen + + Equalizer + - - Add file - Bestand toevoegen + + Settings + Instellingen - + Dark theme Donker thema - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - Deepin Muziek is een lokale muziekspeler met een prachtig ontwerp en eenvoudige functies. Er is ondersteuning voor het tonen van songteksten, afspelen van lossless muziek, aanpassen van de afspeellijst, etc. + + + Exit + Afsluiten + + + + Music is a local music player with beautiful design and simple functions. + Met Muziek kun je je lokale muziekverzameling afspelen in een mooi jasje voorzien van alle basisfuncties. - + + + + + + Music + Muziek + + + Play/Pause - Afspelen/pauzeren + Afspelen/Pauzeren - + Previous Vorige - - Invalid or non-existent file - Ongeldig of niet-bestaand bestand + + Next + Volgende - - Failed to import, no vaild music file found! - Importeren mislukt; geen geldig muziekbestand gevonden! + + Successfully added to "%1" + Toegevoegd aan '%1' - - All music - Alle muziek + + Already added to the playlist + Reeds toegevoegd aan afspeellijst + + + + 1 song added + 1 nummer toegevoegd - - + + %1 songs added + %1 nummers toegevoegd + + + + File is invalid or does not exist, load failed + Het laden is mislukt: bestand is ongeldig of bestaat niet. + + + + OK Oké - - Successfully added to "%1" - Toegevoegd aan "%1" + + Import failed, no valid music file found + Het importeren is mislukt: geen geldig muziekbestand aangetroffen! - - Next - Volgende + + All music + Alle muziek - MusicListView + MusicListDataDelegate - - New playlist - Nieuwe afspeellijst + + + No songs + Geen nummers + + + + + 1 song + 1 nummer + + + + + %1 songs + %1 nummers + + + + MusicListDataWidget + + + + + + + + + + + + No songs + Geen nummers + + + + + 1 album - 1 song + 1 album - 1 nummer + + + + + + + %1 album - %2 songs + %1 album - %2 nummers + + + + + %1 albums - %2 songs + %1 albums - %2 nummers + + + + + 1 artist - 1 song + 1 artiest - 1 nummer + + + + + %1 artist - %2 songs + %1 artiest - %2 nummers + + + + + %1 artists - %2 songs + %1 artiest - %2 nummers + + + + + 1 song + 1 nummer + + + + + + + %1 songs + %1 nummers + + + + + + + No search results + Geen zoekresultaten + + + + + + All Music + Alle muziek + + + + + + + + + Time added + Datum + + + + + + + Album + Album + + + + + + + Artist + Artiest + + + + + Title + Titel + + + + Play All + Alles afspelen + + + + Artists + Artiesten + + + + Albums + Albums + + + + Custom + Aangepast + + + + + + Search Results + Zoekresultaat + + + + Songs + Nummers + + + + No result found + Geen resultaat gevonden + + + + MusicListDialog + + + Play All + Alles afspelen + + + + Shuffle + Willekeurig + + + + MusicListInfoView + + + Play queue + Wachtrij afspelen - + + Add to new playlist + Toevoegen aan afspeellijst + + + + Pause + Pauzeren + + + Play Afspelen - + Add to playlist Toevoegen aan afspeellijst - + Display in file manager Tonen in bestandsbeheerder - + + Remove from playlist + Verwijderen van afspeellijst + + + + Delete from local disk + Verwijderen van lokale schijf + + + Song info Nummerinformatie - + + + Cancel + Annuleren + + + + Remove + Verwijderen + + + + Are you sure you want to remove %1? + Weet je zeker dat je %1 wilt verwijderen? + + + + Are you sure you want to remove the selected %1 songs? + Weet je zeker dat je de %1 geselecteerde nummers wilt verwijderen? + + + + Delete + Verwijderen + + + Are you sure you want to delete %1? Weet je zeker dat je %1 wilt verwijderen? - - + + Are you sure you want to delete the selected %1 songs? - Weet je zeker dat je de %1 gekozen nummers wilt verwijderen? + Weet je zeker dat je de %1 geselecteerde nummers wilt verwijderen? - - Remove from playlist - Verwijderen uit afspeellijst + + + The song files contained will also be deleted + De bijbehorende muziekbestanden worden eveneens verwijderd + + + MusicListItem - - Delete from local disk - Verwijderen van lokale schijf + + Are you sure you want to delete this playlist? + Weet je zeker dat je deze afspeellijst wilt verwijderen? - - Encoding - Versleuteling + + Cancel + Annuleren - + + Delete + Verwijderen + + + + MusicListScrollArea + + + Library + Bibliotheek + + + + Playlists + Afspeellijsten + + + + MusicListView + + + My Favorites + Mijn favorieten + + + + + Are you sure you want to delete this playlist? + Weet je zeker dat je deze afspeellijst wilt verwijderen? + + + + Cancel Annuleren - + + + + Delete Verwijderen - - Deleting the current song will also delete the song files contained - Door het huidige nummer te verwijderen, worden ook de bijbehorende muziekbestanden verwijderd + + + Pause + Pauzeren - + + + Play + Afspelen + + + + + Rename + Naam wijzigen + + + + PlayListView + + Unknown artist Onbekende artiest - + Unknown album Onbekend album - - - MusicListWidget - - No Music - Geen muziek + + Play queue + Wachtrij afspelen - - No result found - Geen resultaat gevonden + + musicResult + - - Play All - Alles afspelen + + My favorites + Mijn favorieten - - Time added - Toegevoegd om + + Add to new playlist + Toevoegen aan afspeellijst - - Title - Titel + + Pause + Pauzeren - - Artist - Artiest + + + Play + Afspelen - - Album name - Albumnaam + + Add to playlist + Toevoegen aan afspeellijst - - Custom - Aangepast + + Display in file manager + Tonen in bestandsbeheerder - - - PlayListItem - - Are you sure you want to delete this playlist? - Weet je zeker dat je deze afspeellijst wilt verwijderen? + Remove from playlist + Verwijderen van afspeellijst - - Delete - Verwijderen + + Remove from play queue + + + + + Delete from local disk + Verwijderen van lokale schijf + + + + Encoding + Versleuteling - + + Song info + Nummerinformatie + + + + Cancel Annuleren - - - PlayListView - - - Play - Afspelen + + Remove + Verwijderen - - - Rename - Naam wijzigen + + Are you sure you want to remove %1? + Weet je zeker dat je %1 wilt verwijderen? - - + + Are you sure you want to remove the selected %1 songs? + Weet je zeker dat je de %1 geselecteerde nummers wilt verwijderen? + + + Delete Verwijderen + + + Are you sure you want to delete %1? + Weet je zeker dat je %1 wilt verwijderen? + + + + + Are you sure you want to delete the selected %1 songs? + Weet je zeker dat je de %1 geselecteerde nummers wilt verwijderen? + + + + + The song files contained will also be deleted + De bijbehorende muziekbestanden worden eveneens verwijderd + + + + PlayListWidget + + + + No songs + Geen nummers + + + + No search results + Geen zoekresultaten + + + + Play Queue + Wachtrij afspelen + + + + Empty + Leeg + + + + 1 song + 1 nummer + + + + %1 songs + %1 nummers + + + + Playlist + + + + Unknown album + Onbekend album + + + + + + Unknown artist + Onbekende artiest + PlaylistManager - + New playlist Nieuwe afspeellijst - + + + + Albums + Albums + + + + + + Artists + Artiesten + + + + All Music Alle muziek - + My favorites Mijn favorieten - + Search result Zoekresultaat - - - PlaylistWidget - - New playlist - Nieuwe afspeellijst + + Play + Afspelen + + + + Music + Muziek QApplication - - Deepin Music - Deepin Muziek + + Music + Muziek QObject - - Deepin Music - Deepin Muziek - - Minimize to system tray Minimaliseren naar systeemvak - Exit Deepin Music - Deepin Muziek afsluiten + Exit Music + Muziek afsluiten @@ -551,7 +1109,7 @@ Play/Pause - Afspelen/pauzeren + Afspelen/Pauzeren @@ -570,20 +1128,150 @@ + SearchLyricsWidget + + + Find Lyrics + Songtekst zoeken + + + + Title + Titel + + + + Artist + Artiest + + + + Search + Zoeken + + + SearchResult - - - Search "%1" in Deepin Music - Zoek "%1" in Deepin Muziek + + Music + Muziek + + + + Artists + Artiesten + + + + Albums + Albums + + + + Shortcut + + + Play + Afspelen + + + + Songs + Nummers + + + + Playlists + Afspeellijsten + + + + Settings + Instellingen + + + + Play/Pause + Afspelen/Pauzeren + + + + Previous + Vorige + + + + Next + Volgende + + + + Volume Up + Volume omhoog + + + + Volume Down + Volume omlaag + + + + Mute + Dempen + + + + Favorite + Toevoegen aan favorieten + + + + Unfavorite + Verwijderen uit favorieten + + + + Song info + Nummerinformatie + + + + New playlist + Nieuwe afspeellijst + + + + Add music + Muziek toevoegen + + + + Rename playlist + Naam wijzigen + + + + Remove from playlist + Verwijderen van afspeellijst + + + + Help + Hulp + + + + Display shortcuts + Sneltoetsen tonen TitlebarWidget - + Search Zoeken - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_pam.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_pam.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_pam.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_pam.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,179 +1,332 @@ - + + + CloseConfirmDialog - + Please select your operation - + - + Exit - + - + Minimize to system tray - + - + Do not ask again - + - + Cancel I-cancel - + + Confirm + + + OK - OK + OK + + + + DequalizerDialog + + + Custom + Custom + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Footer - + Previous - + - + Next - + - + Play/Pause - + - + Favorite - + - + Lyrics - + + + + + Play Queue + - + Unknown Title - + - - - + + + Unknown artist - + - + Play Mode - - - - - Playlist - + - + List Loop - + - + Single Loop - + - + Shuffle - + ImportWidget - - Add folder - + + Open Folder + - - + + Add Music + + + + + Scan - + - - - %1 music directory or drag & drop music file to add music - + + + %1 music directory or drag music files here + - + Loading music, please wait... - + InfoDialog - + Title: - + - + Artist: - + - + Album: - + - + Type: - + - + Path: - + - + Unknown artist - + - + Unknown album - + - + Size: - + + + + + Basic info + - + Duration: - + LoadWidget - + Loading... Mag load ne... @@ -183,17 +336,17 @@ Find lyrics - + Title - + Artist - + @@ -201,389 +354,942 @@ Manintun - + Back - + - MainFrame + MUsicLyricWidget - - New playlist - + + No lyrics yet + + + + MainFrame - + Settings - + - - + + Exit - + - - Add folder - + + Dark theme + - - Add file - + + Equalizer + - - Dark theme - + + Play/Pause + - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + + Previous + - - Play/Pause - + + All music + - - Previous - + + + OK + OK - - Invalid or non-existent file - + + Add playlist + - - Failed to import, no vaild music file found! - + + Add music + - - All music - + + Music is a local music player with beautiful design and simple functions. + - - - OK - OK + + + + + + Music + - + Successfully added to "%1" - + + + + + Already added to the playlist + + + + + 1 song added + - + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next - + - MusicListView + MusicListDataDelegate - - New playlist - + + + No songs + - - Play - + + + 1 song + - - Add to playlist - + + + %1 songs + + + + MusicListDataWidget - - Display in file manager - + + + + + + + + + + + No songs + - - Song info - + + + 1 album - 1 song + - - Are you sure you want to delete %1? - + + + + + %1 album - %2 songs + - - - Are you sure you want to delete the selected %1 songs? - + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + + + + + + + + + + Time added + + + + + + + + Album + + + + + + + + Artist + + + + + + Title + + + + + Play All + + + + + Artists + + + + + Albums + + + + + Custom + Custom - + + + + Search Results + + + + + Songs + + + + + No result found + + + + + MusicListDialog + + + Play All + + + + + Shuffle + + + + + MusicListInfoView + + + Play queue + + + + + Add to new playlist + + + + + Pause + + + + + Play + + + + + Add to playlist + + + + + Display in file manager + + + + Remove from playlist - + - + Delete from local disk - + - - Encoding - + + Song info + - + + Cancel - I-cancel + I-cancel - + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + Delete - Buran + Buran - - Deleting the current song will also delete the song files contained - + + Are you sure you want to delete %1? + - - Unknown artist - + + + Are you sure you want to delete the selected %1 songs? + - - Unknown album - + + + The song files contained will also be deleted + - MusicListWidget + MusicListItem - - No Music - + + Are you sure you want to delete this playlist? + - - No result found - + + Cancel + I-cancel - - Play All - + + Delete + Buran + + + MusicListScrollArea - - Time added - + + Library + - - Title - + + Playlists + + + + + MusicListView + + + + Play + - - Artist - + + + Are you sure you want to delete this playlist? + - - Album name - + + My Favorites + - - Custom - Custom + + + Cancel + I-cancel + + + + + + + Delete + Buran + + + + + Pause + + + + + + Rename + - PlayListItem + MusicListWidget - - Are you sure you want to delete this playlist? - + Custom + Custom + + + PlayListItem - Delete - Buran + Buran - Cancel - I-cancel + I-cancel PlayListView - - + + Play queue + + + + + My favorites + + + + + Add to new playlist + + + + + Pause + + + + + Play - + - - - Rename - + + musicResult + + + + + Add to playlist + + + + + Display in file manager + + + + + Remove from play queue + + + + + Delete from local disk + - - + + Encoding + + + + + Song info + + + + + + Cancel + I-cancel + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + + Delete Buran + + + Unknown artist + + + + + Unknown album + + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + + + + + + + Unknown artist + + PlaylistManager - + New playlist - + + + + + + + Albums + - + + + + Artists + + + + + All Music - + - + My favorites - + - + Search result - + - - - PlaylistWidget - - New playlist - + + Play + + + + + Music + QApplication - - Deepin Music - + + Music + QObject - - Deepin Music - - - Minimize to system tray - + - Exit Deepin Music - + Exit Music + Autoplay - + Enable fade in/out - + Remember playback position - + Close Main Window - + Basic - + Play - + Shortcuts - + Restore Defaults - + Next - + Play/Pause - + Previous - + Volume down - + Volume up - + + + + + SearchLyricsWidget + + + Find Lyrics + + + + + Title + + + + + Artist + + + + + Search + Manintun SearchResult - - - Search "%1" in Deepin Music - + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + + + + + Songs + + + + + Playlists + + + + + Settings + + + + + Play/Pause + + + + + Previous + + + + + Next + + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + + + + + Unfavorite + + + + + Song info + + + + + New playlist + + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search Manintun - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_pl_PL.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_pl_PL.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_pl_PL.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_pl_PL.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,533 +0,0 @@ - - - Footer - - - Previous - - - - - Next - - - - - Play/Pause - - - - - Favorite - - - - - Lyrics - - - - - Repeat Playlist - - - - - Repeat Song - - - - - Unknown Title - - - - - - - Unknown artist - - - - - Play Mode - - - - - Playlist - - - - - Shuffle - - - - - ImportWidget - - - Add Music - - - - - - Scan - - - - - - %1 music directory or drag & drop music file to add music - - - - - Loading music, please wait... - - - - - InfoDialog - - - Title: - - - - - Artist: - - - - - Album: - - - - - Type: - - - - - Path: - - - - - Size: - - - - - Duration: - - - - - Unkonw artist - - - - - Unkonw album - - - - - LyricWidget - - - Search lyrics - - - - - Title - - - - - Artist - - - - - Search - - - - - Back - - - - - MainFrame - - - New playlist - - - - - Add music - - - - - Add music file - - - - - Settings - - - - - Deep color mode - - - - - About - - - - - Deepin Music Player is a local music player with beautiful design and simple functions. It supports viewing lyrics when playing, playing lossless music and customize playlist, etc. - - - - - Exit - - - - - File invalid or does not exist, failed to load! - - - - - Failed to import, no vaild music file found! - - - - - OK - - - - - Deepin Music - Odtwarzacz muzyki Deepin - - - - Version: 3.0 - - - - - Help - - - - - Successfully added to "%1" - - - - - I got it - - - - - Music (%1) - - - - - MusicListView - - - New playlist - - - - - Play - - - - - Add to playlist - - - - - Display in file manager - - - - - Song info - - - - - Remove from playlist - - - - - Delete from local disk - - - - - Encoding - - - - - Cancel - - - - - Delete - - - - - Are you sure to delete %1? - - - - - - Are you sure to delete the selected %1 songs? - - - - - Deleting the current song will also delete the song files contained - - - - - Unknown artist - - - - - Unknown album - - - - - MusicListWidget - - - No Music - - - - - No result found - - - - - Play All - - - - - Time added - - - - - Title - - - - - Artist - - - - - Album name - - - - - Custom - - - - - PlayListItem - - - Delete - - - - - Are you sure to delete this playlist? - - - - - Cancel - - - - - PlayListView - - - - Play - - - - - - Rename - - - - - - Delete - - - - - PlaylistManager - - - New playlist - - - - - All Music - - - - - My favorites - - - - - Search result - - - - - PlaylistWidget - - - New playlist - - - - - QObject - - - Deepin Music - Odtwarzacz muzyki Deepin - - - - Autoplay - - - - - Enable fade - - - - - Resume play from last position - - - - - Basic settings - - - - - Play - - - - - Shortcuts - - - - - Restore to default - - - - - Next - - - - - Play/Pause - - - - - Previous - - - - - Volume down - - - - - Volume up - - - - - SearchResult - - - - Search "%1" in Deepin Music - - - - - TitleBarWidget - - - Search - - - - \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_pl.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_pl.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_pl.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_pl.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,245 @@ - + + + CloseConfirmDialog - + Please select your operation Prosimy wybrać swoje działanie - + Exit Wyjdź - + Minimize to system tray Minimalizuj do tacki systemowej - + Do not ask again - + Nie pytaj ponownie - + Cancel Anuluj - + + Confirm + + + OK - OK + OK + + + + DequalizerDialog + + + Custom + Własne + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Przywróć domyślne Footer - + Previous Poprzedni - + Next Następny - + Play/Pause Odtwórz/Wstrzymaj - + Favorite Ulubione - + Lyrics Tekst piosenki - + + Play Queue + + + + Unknown Title Nieznany tytuł - - - + + + Unknown artist Nieznany wykonawca - + Play Mode Tryb odtwarzania - Playlist - Lista odtwarzania + Lista odtwarzania - + List Loop Pętla listy - + Single Loop Pojedyncza pętla - + Shuffle Przetasuj @@ -100,24 +247,37 @@ ImportWidget - Add folder - Dodaj katalog + Dodaj katalog + + + + Open Folder + + + + + Add Music + - - + + Scan Skanowanie - - + + + %1 music directory or drag music files here + + + %1 music directory or drag & drop music file to add music - %1 katalog z muzyką lub przeciągnij i upuść plik z muzyką, aby ją dodać + %1 katalog z muzyką lub przeciągnij i upuść plik z muzyką, aby ją dodać - + Loading music, please wait... Wczytywanie muzyki, prosimy czekać @@ -125,47 +285,52 @@ InfoDialog - + Title: Tytuł: - + Artist: Wykonawca: - + Album: Album: - + Type: Rodzaj: - + Path: Ścieżka: - + Unknown artist Nieznany wykonawca - + Unknown album Nieznany album - + Size: Rozmiar: - + + Basic info + + + + Duration: Czas trwania: @@ -173,7 +338,7 @@ LoadWidget - + Loading... Wczytywanie... @@ -183,7 +348,7 @@ Find lyrics - + Znajdź tekst @@ -201,297 +366,859 @@ Szukaj - + Back Wstecz + MUsicLyricWidget + + + No lyrics yet + + + + MainFrame - New playlist - Nowa lista odtwarzania + Nowa lista odtwarzania - + Settings Ustawienia - - + + Exit Wyjdź - Add folder - Dodaj katalog + Dodaj katalog - Add file - Dodaj plik + Dodaj plik - + Dark theme Ciemny motyw - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + Deepin Music to piękny i prosty odtwarzacz muzyki, który odtwarza lokalne audio. Obsługuje wyświetlanie tekstów podczas odtwarzania, odtwarzanie bezstratnego dostosowywania dźwięku i listy odtwarzania itp. - + Play/Pause Odtwórz/Wstrzymaj - + Previous Poprzedni - Invalid or non-existent file - Nieprawidłowy lub nieistniejący plik + Nieprawidłowy lub nieistniejący plik - Failed to import, no vaild music file found! - Błąd importu, nie odnaleziono poprawnego pliku muzycznego! + Błąd importu, nie odnaleziono poprawnego pliku muzycznego! - + All music Cała muzyka - - + + OK OK - + + Add playlist + + + + + Add music + + + + + Equalizer + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" Pomyślnie dodano do "%1" - + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next Następny + MusicListDataDelegate + + + + No songs + + + + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + Cała muzyka + + + + + + + + + Time added + Dodany czas + + + + + + + Album + + + + + + + + Artist + Wykonawca + + + + + Title + Tytuł + + + + Play All + Odtwórz wszystko + + + + Artists + + + + + Albums + + + + + Custom + Własne + + + + + + Search Results + + + + + Songs + + + + + No result found + Brak wyników wyszukiwania + + + + MusicListDialog + + + Play All + Odtwórz wszystko + + + + Shuffle + Przetasuj + + + + MusicListInfoView + + New playlist + Nowa lista odtwarzania + + + + Play queue + + + + + Add to new playlist + + + + + Pause + + + + + Play + Odtwórz + + + + Add to playlist + Dodaj do listy odtwarzania + + + + Display in file manager + Wyświetl w menedżerze plików + + + + Remove from playlist + Usuń z listy odtwarzania + + + + Delete from local disk + Usuń z dysku lokalnego + + + + Song info + Informacje o utworze + + + + + Cancel + Anuluj + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + Usuń + + + + Are you sure you want to delete %1? + Czy na pewno chcesz usunąć %1? + + + + + Are you sure you want to delete the selected %1 songs? + Czy na pewno chcesz usunąć wybrane utwory %1? + + + + + The song files contained will also be deleted + + + + + MusicListItem + + + Are you sure you want to delete this playlist? + Czy na pewno chcesz usunąć tę listę odtwarzania? + + + + Cancel + Anuluj + + + + Delete + Usuń + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + MusicListView - New playlist - Nowa lista odtwarzania + Nowa lista odtwarzania - + + Play Odtwórz - Add to playlist - Dodaj do listy odtwarzania + Dodaj do listy odtwarzania - Display in file manager - Wyświetl w menedżerze plików + Wyświetl w menedżerze plików - Song info - Informacje o utworze + Informacje o utworze - Are you sure you want to delete %1? - + Czy na pewno chcesz usunąć %1? - - Are you sure you want to delete the selected %1 songs? - + Czy na pewno chcesz usunąć wybrane utwory %1? - Remove from playlist - Usuń z listy odtwarzania + Usuń z listy odtwarzania - Delete from local disk - Usuń z dysku lokalnego + Usuń z dysku lokalnego - Encoding - Kodowanie + Kodowanie + + + + My Favorites + + + + + + Are you sure you want to delete this playlist? + Czy na pewno chcesz usunąć tę listę odtwarzania? - + + Cancel Anuluj - + + + + Delete Usuń - + + + Pause + + + + + + Rename + Zmień nazwę + + Deleting the current song will also delete the song files contained - Usuwanie bieżącego utworu usunie także powiązany z nim plik utworu + Usuwanie bieżącego utworu usunie także powiązany z nim plik utworu - Unknown artist - Nieznany wykonawca + Nieznany wykonawca - Unknown album - Nieznany album + Nieznany album MusicListWidget - No Music - Brak muzyki + Brak muzyki - No result found - Brak wyników wyszukiwania + Brak wyników wyszukiwania - Play All - Odtwórz wszystko + Odtwórz wszystko - Time added - Dodany czas + Dodany czas - Title - Tytuł + Tytuł - Artist - Wykonawca + Wykonawca - Album name - Nazwa albumu + Nazwa albumu - Custom - Własne + Własne PlayListItem - Are you sure you want to delete this playlist? - + Czy na pewno chcesz usunąć tę listę odtwarzania? - Delete - Usuń + Usuń - Cancel - Anuluj + Anuluj PlayListView - - + New playlist + Nowa lista odtwarzania + + + + Play queue + + + + + musicResult + + + + + My favorites + Moje ulubione + + + + Add to new playlist + + + + + Pause + + + + + Play Odtwórz - - + + Add to playlist + Dodaj do listy odtwarzania + + + + Display in file manager + Wyświetl w menedżerze plików + + + Remove from playlist + Usuń z listy odtwarzania + + + + Remove from play queue + + + + + Delete from local disk + Usuń z dysku lokalnego + + + + Encoding + Kodowanie + + + + Song info + Informacje o utworze + + + + + Cancel + Anuluj + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + Czy na pewno chcesz usunąć %1? + + + + + Are you sure you want to delete the selected %1 songs? + Czy na pewno chcesz usunąć wybrane utwory %1? + + + + + The song files contained will also be deleted + + + Rename - Zmień nazwę + Zmień nazwę - - + Delete Usuń + + + Unknown artist + Nieznany wykonawca + + + + Unknown album + Nieznany album + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + Nieznany album + + + + + + Unknown artist + Nieznany wykonawca + PlaylistManager - + New playlist Nowa lista odtwarzania - + Artist + Wykonawca + + + + + + Albums + + + + + + + Artists + + + + + All Music Cała muzyka - + My favorites Moje ulubione - + Search result Wyniki wyszukiwania + + + Play + Odtwórz + + + + Music + + PlaylistWidget - New playlist - Nowa lista odtwarzania + Nowa lista odtwarzania QApplication - Deepin Music - Muzyka Deepin + Muzyka Deepin + + + + Music + QObject - Deepin Music - Muzyka Deepin + Muzyka Deepin @@ -499,9 +1226,13 @@ Minimalizuj do tacki systemowej - Exit Deepin Music - Zakończ Muzykę Deepin + Zakończ Muzykę Deepin + + + + Exit Music + @@ -511,7 +1242,7 @@ Enable fade in/out - + Włącz wejście/wyjście @@ -570,20 +1301,154 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + Tytuł + + + + Artist + Wykonawca + + + + Search + Szukaj + + + SearchResult - - Search "%1" in Deepin Music - Szukaj "%1" w Muzyce Deepin + Szukaj "%1" w Muzyce Deepin + + + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + Odtwórz + + + + Songs + + + + + Playlists + + + + + Settings + Ustawienia + + + + Play/Pause + Odtwórz/Wstrzymaj + + + + Previous + Poprzedni + + + + Next + Następny + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + Ulubione + + + + Unfavorite + + + + + Song info + Informacje o utworze + + + + New playlist + Nowa lista odtwarzania + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + Usuń z listy odtwarzania + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search Szukaj - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_pt_BR.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_pt_BR.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_pt_BR.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_pt_BR.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,237 @@ - + + + CloseConfirmDialog - - Please select your operation - Selecione sua operação - - - + Exit Sair - + Minimize to system tray - Minimizar para a bandeja do sistema + Minimizar para a Bandeja do Sistema - + Do not ask again - Não perguntar novamente + Não Perguntar Novamente - + + Please select your operation + Selecione a operação + + + Cancel Cancelar - - OK - OK + + Confirm + Confirmar - Footer + DequalizerDialog - - Previous - Anterior + + Custom + Personalizado - - Next - Próxima + + Classical + - - Play/Pause - Play/Pause + + Club + - - Favorite - Favoritos + + Dance + - - Lyrics - Letras + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + - + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Restaurar Padrões + + + + Footer + + Unknown Title - Titulo desconhecido + Título Desconhecido - - - + + + Unknown artist Artista desconhecido - + + Previous + Anterior + + + + Next + Próximo + + + + Play/Pause + Reproduzir/Pausar + + + + Favorite + Favorito + + + + Lyrics + Letra da Música + + + Play Mode - Modo de reprodução + Modo de Reprodução - - Playlist - Playlist + + Play Queue + Fila de Reprodução - + List Loop - Repetir lista + Repetir Lista - + Single Loop - Repetir uma vez + Repetir Uma Vez - + Shuffle Aleatório @@ -100,80 +239,90 @@ ImportWidget - - Add folder - Adicionar pasta + + Open Folder + Abrir Pasta - - + + Add Music + Adicionar Música + + + + Scan - Rastrear + Verificar - - - %1 music directory or drag & drop music file to add music - %1 diretório de música ou arraste e solte o arquivo para adicionar música + + + %1 music directory or drag music files here + %1 o diretório de músicas ou arraste as músicas até aqui - + Loading music, please wait... - Carregando música, aguarde... + Carregando... InfoDialog - + + Basic info + Informação básica + + + Title: Título: - + Artist: Artista: - + Album: Álbum: - + Type: Tipo: - + + Size: + Tamanho: + + + + Duration: + Duração: + + + Path: Caminho: - + Unknown artist Artista desconhecido - + Unknown album Álbum desconhecido - - - Size: - Tamanho: - - - - Duration: - Duração: - LoadWidget - + Loading... Carregando... @@ -183,12 +332,12 @@ Find lyrics - Encontrar letras + Encontrar Letras Title - Titulo + Título @@ -201,307 +350,716 @@ Pesquisar - + Back Voltar - MainFrame + MUsicLyricWidget - - New playlist - Nova playlist + + No lyrics yet + + + + MainFrame - - Settings - Configurações + + Add playlist + Adicionar lista de reprodução - - - Exit - Sair + + Add music + Adicionar música - - Add folder - Adicionar pasta + + Equalizer + - - Add file - Adicionar arquivo + + Settings + Configurações - + Dark theme Tema Escuro - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - Deepin Music é um player musical bonito e simples que toca áudios locais. Suporta a visualização de letras durante a reprodução, reprodução de áudio sem perdas, personalização de listas de reprodução e etc. + + + Exit + Sair + + + + Music is a local music player with beautiful design and simple functions. + O Música é um player de música local com um design bonito e funções simples. - + + + + + + Music + Música + + + Play/Pause - Play/Pause + Reproduzir/Pausar - + Previous Anterior - - Invalid or non-existent file - Arquivo inválido ou inexistente + + Next + Próximo - - Failed to import, no vaild music file found! - Falha ao importar, nenhum arquivo de música foi encontrado! + + Successfully added to "%1" + Adicionado a "%1" - - All music - Todas as músicas + + Already added to the playlist + Já adicionado à lista de reprodução + + + + 1 song added + 1 música adicionada - - + + %1 songs added + %1 músicas adicionadas + + + + File is invalid or does not exist, load failed + Falha ao carregar, o arquivo é inválido ou não existe + + + + OK - OK + Ok - - Successfully added to "%1" - Adicionado com sucesso para "%1" + + Import failed, no valid music file found + Falha na importação, nenhum arquivo de música válido encontrado - - Next - Próximo + + All music + Todas as Músicas - MusicListView + MusicListDataDelegate - - New playlist - Nova playlist + + + No songs + Nenhuma música + + + + + 1 song + 1 música + + + + + %1 songs + %1 músicas + + + + MusicListDataWidget + + + + + + + + + + + + No songs + Nenhuma música + + + + + 1 album - 1 song + 1 álbum - 1 música + + + + + + + %1 album - %2 songs + %1 álbum - %2 músicas + + + + + %1 albums - %2 songs + %1 álbuns - %2 músicas + + + + + 1 artist - 1 song + 1 artista - 1 música + + + + + %1 artist - %2 songs + %1 artista - %2 músicas + + + + + %1 artists - %2 songs + %1 artistas - %2 músicas + + + + + 1 song + 1 música + + + + + + + %1 songs + %1 músicas + + + + + + + No search results + Nenhum resultado encontrado + + + + + + All Music + Todas as Músicas + + + + + + + + + Time added + Recente + + + + + + + Album + Álbum + + + + + + + Artist + Artista + + + + + Title + Titulo + + + + Play All + Reproduzir Tudo + + + + Artists + Artistas + + + + Albums + Álbuns + + + + Custom + Personalizado - + + + + Search Results + Resultados da Pesquisa + + + + Songs + Músicas + + + + No result found + Nenhum resultado encontrado + + + + MusicListDialog + + + Play All + Reproduzir Tudo + + + + Shuffle + Aleatório + + + + MusicListInfoView + + + Play queue + Fila de reprodução + + + + Add to new playlist + Adicionar à uma nova lista de reprodução + + + + Pause + Pausar + + + Play - Play + Reproduzir - + Add to playlist - Adicionar à playlist + Adicionar à lista de reprodução - + Display in file manager - Exibir no gerenciador de arquivos + Exibir no Gerenciador de Arquivos + + + + Remove from playlist + Remover da lista de reprodução + + + + Delete from local disk + Excluir do disco - + Song info - Informações da música + Informação da Música + + + + + Cancel + Cancelar + + + + Remove + Remover + + + + Are you sure you want to remove %1? + Remover %1? + + + + Are you sure you want to remove the selected %1 songs? + Remover as %1 músicas selecionadas? - + + Delete + Excluir + + + Are you sure you want to delete %1? - Quer realmente excluir %1? + Excluir %1? - - + + Are you sure you want to delete the selected %1 songs? - Quer realmente excluir as %1 músicas selecionadas? + Excluir as %1 músicas selecionadas? - - Remove from playlist - Remover da playlist + + + The song files contained will also be deleted + Os arquivos de música contidos também serão excluídos + + + MusicListItem - - Delete from local disk - Excluir do disco local + + Are you sure you want to delete this playlist? + Excluir esta lista de reprodução? - - Encoding - Codificação + + Cancel + Cancelar - + + Delete + Excluir + + + + MusicListScrollArea + + + Library + Biblioteca + + + + Playlists + Listas de Reprodução + + + + MusicListView + + + My Favorites + Favoritos + + + + + Are you sure you want to delete this playlist? + Excluir esta lista de reprodução? + + + + Cancel Cancelar - + + + + Delete Excluir - - Deleting the current song will also delete the song files contained - A exclusão da música atual também excluirá os arquivos + + + Pause + Pausar + + + + + Play + Reproduzir - + + + Rename + Renomear + + + + PlayListView + + Unknown artist Artista desconhecido - + Unknown album Álbum desconhecido - - - MusicListWidget - - No Music - Sem música + + Play queue + Fila de reprodução - - No result found - Nenhum resultado encontrado + + musicResult + - - Play All - Reproduzir todas + + My favorites + Favoritos - - Time added - Recentes + + Add to new playlist + Adicionar à uma nova lista de reprodução - - Title - Titulo + + Pause + Pausar - - Artist - Artista + + + Play + Reproduzir - - Album name - Nome do álbum + + Add to playlist + Adicionar à lista de reprodução - - Custom - Personalizar + + Display in file manager + Exibir no Gerenciador de Arquivos - - - PlayListItem - - Are you sure you want to delete this playlist? - Quer realmente excluir esta playlist? + Remove from playlist + Remover da lista de reprodução - - Delete - Excluir + + Remove from play queue + + + + + Delete from local disk + Excluir do disco + + + + Encoding + Codificação - + + Song info + Informação da Música + + + + Cancel Cancelar - - - PlayListView - - - Play - Play + + Remove + Remover - - - Rename - Renomear + + Are you sure you want to remove %1? + Remover %1? + + + + Are you sure you want to remove the selected %1 songs? + Remover as %1 músicas selecionadas? - - + Delete Excluir + + + Are you sure you want to delete %1? + Excluir %1? + + + + + Are you sure you want to delete the selected %1 songs? + Excluir as %1 músicas selecionadas? + + + + + The song files contained will also be deleted + Os arquivos de música contidos também serão excluídos + + + + PlayListWidget + + + + No songs + Nenhuma música + + + + No search results + Nenhum resultado encontrado + + + + Play Queue + Fila de Reprodução + + + + Empty + Vazio + + + + 1 song + 1 música + + + + %1 songs + %1 músicas + + + + Playlist + + + + Unknown album + Álbum desconhecido + + + + + + Unknown artist + Artista desconhecido + PlaylistManager - + New playlist - Nova playlist + Nova lista de reprodução - + + + + Albums + Álbuns + + + + + + Artists + Artistas + + + + All Music - Todas as músicas + Todas as Músicas - + My favorites - Meus favoritos + Favoritos - + Search result Resultado da pesquisa - - - PlaylistWidget - - New playlist - Nova playlist + + Play + Reproduzir + + + + Music + Música QApplication - - Deepin Music + + Music Música QObject - - Deepin Music - Música - - Minimize to system tray - Minimizar para a bandeja do sistema + Minimizar para a Bandeja do Sistema - Exit Deepin Music - Sair + Exit Music + Sair do Música @@ -511,17 +1069,17 @@ Enable fade in/out - Ativar o aparecimento/desaparecimento gradual + Transição Gradual Remember playback position - Lembrar da posição de reprodução + Lembrar a posição da última reprodução Close Main Window - Fechar janela principal + Fechar a Janela Principal @@ -531,7 +1089,7 @@ Play - Play + Reproduzir @@ -541,7 +1099,7 @@ Restore Defaults - Restaurar padrões + Restaurar Padrões @@ -551,7 +1109,7 @@ Play/Pause - Play/Pause + Reproduzir/Pausar @@ -561,7 +1119,7 @@ Volume down - Diminuir volume + Reduzir volume @@ -570,20 +1128,150 @@ + SearchLyricsWidget + + + Find Lyrics + Encontrar Letras + + + + Title + Título + + + + Artist + Artista + + + + Search + Pesquisar + + + SearchResult - - - Search "%1" in Deepin Music - Pesquisar "%1" + + Music + Música + + + + Artists + Artistas + + + + Albums + Álbuns + + + + Shortcut + + + Play + Reproduzir + + + + Songs + Músicas + + + + Playlists + Listas de Reprodução + + + + Settings + Configurações + + + + Play/Pause + Reproduzir/Pausar + + + + Previous + Anterior + + + + Next + Próximo + + + + Volume Up + Aumentar Volume + + + + Volume Down + Reduzir Volume + + + + Mute + Sem Áudio + + + + Favorite + Favorito + + + + Unfavorite + Remover dos Favoritos + + + + Song info + Informação da Música + + + + New playlist + Nova lista de reprodução + + + + Add music + Adicionar música + + + + Rename playlist + Renomear lista de reprodução + + + + Remove from playlist + Remover da lista de reprodução + + + + Help + Ajuda + + + + Display shortcuts + Exibir atalhos TitlebarWidget - + Search Pesquisar - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_pt_PT.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_pt_PT.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_pt_PT.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_pt_PT.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,533 +0,0 @@ - - - Footer - - - Previous - - - - - Next - - - - - Play/Pause - - - - - Favorite - - - - - Lyrics - - - - - Repeat Playlist - - - - - Repeat Song - - - - - Unknown Title - - - - - - - Unknown artist - - - - - Play Mode - - - - - Playlist - - - - - Shuffle - - - - - ImportWidget - - - Add Music - - - - - - Scan - - - - - - %1 music directory or drag & drop music file to add music - - - - - Loading music, please wait... - - - - - InfoDialog - - - Title: - - - - - Artist: - - - - - Album: - - - - - Type: - - - - - Path: - - - - - Size: - - - - - Duration: - - - - - Unkonw artist - - - - - Unkonw album - - - - - LyricWidget - - - Search lyrics - - - - - Title - - - - - Artist - - - - - Search - - - - - Back - - - - - MainFrame - - - New playlist - - - - - Add music - - - - - Add music file - - - - - Settings - - - - - Deep color mode - - - - - About - - - - - Deepin Music Player is a local music player with beautiful design and simple functions. It supports viewing lyrics when playing, playing lossless music and customize playlist, etc. - - - - - Exit - - - - - File invalid or does not exist, failed to load! - - - - - Failed to import, no vaild music file found! - - - - - OK - - - - - Deepin Music - Reprodutor de Música Deepin - - - - Version: 3.0 - - - - - Help - - - - - Successfully added to "%1" - - - - - I got it - - - - - Music (%1) - - - - - MusicListView - - - New playlist - - - - - Play - - - - - Add to playlist - - - - - Display in file manager - - - - - Song info - - - - - Remove from playlist - - - - - Delete from local disk - - - - - Encoding - - - - - Cancel - - - - - Delete - - - - - Are you sure to delete %1? - - - - - - Are you sure to delete the selected %1 songs? - - - - - Deleting the current song will also delete the song files contained - - - - - Unknown artist - - - - - Unknown album - - - - - MusicListWidget - - - No Music - - - - - No result found - - - - - Play All - - - - - Time added - - - - - Title - - - - - Artist - - - - - Album name - - - - - Custom - - - - - PlayListItem - - - Delete - - - - - Are you sure to delete this playlist? - - - - - Cancel - - - - - PlayListView - - - - Play - - - - - - Rename - - - - - - Delete - - - - - PlaylistManager - - - New playlist - - - - - All Music - - - - - My favorites - - - - - Search result - - - - - PlaylistWidget - - - New playlist - - - - - QObject - - - Deepin Music - Reprodutor de Música Deepin - - - - Autoplay - - - - - Enable fade - - - - - Resume play from last position - - - - - Basic settings - - - - - Play - - - - - Shortcuts - - - - - Restore to default - - - - - Next - - - - - Play/Pause - - - - - Previous - - - - - Volume down - - - - - Volume up - - - - - SearchResult - - - - Search "%1" in Deepin Music - - - - - TitleBarWidget - - - Search - - - - \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_pt.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_pt.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_pt.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_pt.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,237 @@ - + + + CloseConfirmDialog - - Please select your operation - Por favor seleccione a operação - - - + Exit Sair - + Minimize to system tray Minimizar para a área de notificação - + Do not ask again - + Não voltar a perguntar - + + Please select your operation + Selecione a operação + + + Cancel Cancelar - - OK - OK + + Confirm + Confirmar + + + + DequalizerDialog + + + Custom + Personalizado + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Restaurar Predefinições Footer - + + Unknown Title + Título desconhecido + + + + + + Unknown artist + Artista desconhecido + + + Previous Anterior - + Next Seguinte - + Play/Pause Reproduzir/Pausa - + Favorite - Favorito + Adicionar às favoritas - + Lyrics - Letras de música - - - - Unknown Title - Título Desconhecido - - - - - - Unknown artist - Artista Desconhecido + Letras - + Play Mode - Modo de Reprodução + Modo de reprodução - - Playlist - Lista de Reprodução + + Play Queue + Reproduzir lista em espera - + List Loop - Lista de ciclos + Repetição de lista - + Single Loop - Ciclo Único + Repetição única - + Shuffle Aleatório @@ -100,80 +239,90 @@ ImportWidget - - Add folder - Adicionar pasta + + Open Folder + Abrir Pasta + + + + Add Music + Adicionar Música - - + + Scan Pesquisar - - - %1 music directory or drag & drop music file to add music - %1 na pasta música ou arraste e largue um ficheiro de som para adicionar músicas + + + %1 music directory or drag music files here + %1 diretório de música ou arraste ficheiros de música aqui - + Loading music, please wait... - A carregar música, por favor aguarde... + A carregar música, aguarde... InfoDialog - + + Basic info + Informação Básica + + + Title: Título: - + Artist: Artista: - + Album: Álbum: - + Type: Tipo: - + + Size: + Tamanho: + + + + Duration: + Duração: + + + Path: Caminho: - + Unknown artist Artista desconhecido - + Unknown album Álbum desconhecido - - - Size: - Tamanho: - - - - Duration: - Duração: - LoadWidget - + Loading... A carregar... @@ -183,7 +332,7 @@ Find lyrics - + Encontrar letras @@ -201,317 +350,726 @@ Pesquisar - + Back Voltar - MainFrame + MUsicLyricWidget - - New playlist - Nova lista de reprodução + + No lyrics yet + + + + MainFrame - - Settings - Definições + + Add playlist + Adicionar lista de reprodução - - - Exit - Sair + + Add music + Adicionar música - - Add folder - Adicionar pasta + + Equalizer + - - Add file - Adicionar ficheiro + + Settings + Definições - + Dark theme Tema Escuro - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + + + Exit + Sair + + + + Music is a local music player with beautiful design and simple functions. + Música é um reprodutor de música local com um estilo elegante e funções simples. - + + + + + + Music + Música + + + Play/Pause Reproduzir/Pausa - + Previous Anterior - - Invalid or non-existent file - Ficheiro inválido ou inexistente + + Next + Seguinte + + + + Successfully added to "%1" + Adicionada com sucesso a "%1" - - Failed to import, no vaild music file found! - Falha ao importar, nenhum ficheiro de música válido encontrado! + + Already added to the playlist + Já adicionada à lista de reprodução - - All music - Toda a música + + 1 song added + 1 música adicionada - - + + %1 songs added + %1 músicas adicionadas + + + + File is invalid or does not exist, load failed + O ficheiro é inválido ou não existe, falha ao carregar + + + + OK OK - - Successfully added to "%1" - Adicionado com sucesso a "%1" + + Import failed, no valid music file found + A importação falhou, não foi encontrado nenhum ficheiro de música válido - - Next - Seguinte + + All music + Toda a música - MusicListView + MusicListDataDelegate - - New playlist - Nova lista de reprodução + + + No songs + Sem músicas + + + + + 1 song + 1 música - + + + %1 songs + %1 músicas + + + + MusicListDataWidget + + + + + + + + + + + + No songs + Sem músicas + + + + + 1 album - 1 song + 1 álbum - 1 música + + + + + + + %1 album - %2 songs + %1 álbum - %2 músicas + + + + + %1 albums - %2 songs + %1 álbuns - %2 músicas + + + + + 1 artist - 1 song + 1 artista - 1 música + + + + + %1 artist - %2 songs + %1 artista - %2 músicas + + + + + %1 artists - %2 songs + %1 artistas - %2 músicas + + + + + 1 song + 1 música + + + + + + + %1 songs + %1 músicas + + + + + + + No search results + Sem resultados + + + + + + All Music + Toda a música + + + + + + + + + Time added + Adicionada em + + + + + + + Album + Álbum + + + + + + + Artist + Artista + + + + + Title + Título + + + + Play All + Reproduzir Tudo + + + + Artists + Artistas + + + + Albums + Álbuns + + + + Custom + Personalizado + + + + + + Search Results + Resultados da pesquisa + + + + Songs + Músicas + + + + No result found + Nenhum resultado encontrado + + + + MusicListDialog + + + Play All + Reproduzir Tudo + + + + Shuffle + Aleatório + + + + MusicListInfoView + + + Play queue + Reproduzir lista em espera + + + + Add to new playlist + Adicionar à nova lista de reprodução + + + + Pause + Pausa + + + Play Reproduzir - + Add to playlist Adicionar à lista de reprodução - + Display in file manager Mostrar no gestor de ficheiros - + + Remove from playlist + Remover da lista de reprodução + + + + Delete from local disk + Eliminar do disco local + + + Song info - Informação da faixa + Informação da música + + + + + Cancel + Cancelar + + + + Remove + Remover + + + + Are you sure you want to remove %1? + Tem a certeza que deseja remover %1? + + + + Are you sure you want to remove the selected %1 songs? + Tem a certeza que deseja remover as %1 músicas selecionadas? - + + Delete + Eliminar + + + Are you sure you want to delete %1? - + Tem a certeza que deseja eliminar %1? - - + + Are you sure you want to delete the selected %1 songs? - + Tem a certeza que deseja eliminar as %1 músicas selecionadas? - - Remove from playlist - Remover da lista de reprodução + + + The song files contained will also be deleted + Os ficheiros de música contidos também serão eliminados + + + MusicListItem - - Delete from local disk - Eliminar do disco local + + Are you sure you want to delete this playlist? + Tem a certeza que deseja eliminar esta lista de reprodução? - - Encoding - A codificar + + Cancel + Cancelar - + + Delete + Eliminar + + + + MusicListScrollArea + + + Library + Biblioteca + + + + Playlists + Listas de reprodução + + + + MusicListView + + + My Favorites + Minhas Favoritas + + + + + Are you sure you want to delete this playlist? + Tem a certeza que deseja eliminar esta lista de reprodução? + + + + Cancel Cancelar - + + + + Delete Eliminar - - Deleting the current song will also delete the song files contained - Ao eliminar a faixa atual vai também eliminar as faixas contidas + + + Pause + Pausa - + + + Play + Reproduzir + + + + + Rename + Renomear + + + + PlayListView + + Unknown artist Artista desconhecido - + Unknown album Álbum desconhecido - - - MusicListWidget - - No Music - Sem Músicas + + Play queue + Reproduzir lista em espera - - No result found - Nenhum resultado encontrado + + musicResult + - - Play All - Reproduzir Todos + + My favorites + Minhas favoritas - - Time added - Adicionado em + + Add to new playlist + Adicionar à nova lista de reprodução - - Title - Título + + Pause + Pausa - - Artist - Artista + + + Play + Reproduzir - - Album name - Nome do Álbum + + Add to playlist + Adicionar à lista de reprodução - - Custom - Personalizado + + Display in file manager + Mostrar no gestor de ficheiros - - - PlayListItem - - Are you sure you want to delete this playlist? - + Remove from playlist + Remover da lista de reprodução - - Delete - Eliminar + + Remove from play queue + - + + Delete from local disk + Eliminar do disco local + + + + Encoding + Codificação + + + + Song info + Informação da música + + + + Cancel Cancelar - - - PlayListView - - - Play - Reproduzir + + Remove + Remover - - - Rename - Mudar o nome + + Are you sure you want to remove %1? + Tem a certeza que deseja remover %1? - - + + Are you sure you want to remove the selected %1 songs? + Tem a certeza que deseja remover as %1 músicas selecionadas? + + + Delete Eliminar + + + Are you sure you want to delete %1? + Tem a certeza que deseja eliminar %1? + + + + + Are you sure you want to delete the selected %1 songs? + Tem a certeza que deseja eliminar as %1 músicas selecionadas? + + + + + The song files contained will also be deleted + Os ficheiros de música contidos também serão eliminados + + + + PlayListWidget + + + + No songs + Sem músicas + + + + No search results + Sem resultados + + + + Play Queue + Reproduzir lista em espera + + + + Empty + Esvaziar + + + + 1 song + 1 música + + + + %1 songs + %1 músicas + + + + Playlist + + + + Unknown album + Álbum desconhecido + + + + + + Unknown artist + Artista desconhecido + PlaylistManager - + New playlist Nova lista de reprodução - + + + + Albums + Álbuns + + + + + + Artists + Artistas + + + + All Music Toda a música - + My favorites - Meus favoritos + Minhas favoritas - + Search result Resultado da pesquisa - - - PlaylistWidget - - New playlist - Nova lista de reprodução + + Play + Reproduzir + + + + Music + Música QApplication - - Deepin Music - Deepin Music + + Music + Música QObject - - Deepin Music - Deepin Music - - Minimize to system tray Minimizar para a área de notificação - Exit Deepin Music - Sair do Deepin Music + Exit Music + Sair do programa Autoplay - Reprodução Automática + Reprodução automática Enable fade in/out - + Ativar desvanecimento @@ -570,20 +1128,150 @@ + SearchLyricsWidget + + + Find Lyrics + Encontrar Letras + + + + Title + Título + + + + Artist + Artista + + + + Search + Pesquisar + + + SearchResult - - - Search "%1" in Deepin Music - Pesquisar "%1" no Deepin Music + + Music + Música + + + + Artists + Artistas + + + + Albums + Álbuns + + + + Shortcut + + + Play + Reproduzir + + + + Songs + Músicas + + + + Playlists + Listas de Reprodução + + + + Settings + Definições + + + + Play/Pause + Reproduzir/Pausa + + + + Previous + Anterior + + + + Next + Seguinte + + + + Volume Up + Aumentar Volume + + + + Volume Down + Diminuir Volume + + + + Mute + Silenciar + + + + Favorite + Adicionar às favoritas + + + + Unfavorite + Remover das favoritas + + + + Song info + Informação da música + + + + New playlist + Nova lista de reprodução + + + + Add music + Adicionar música + + + + Rename playlist + Renomear lista de reprodução + + + + Remove from playlist + Remover da lista de reprodução + + + + Help + Ajuda + + + + Display shortcuts + Mostrar atalhos TitlebarWidget - + Search Pesquisar - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ro.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ro.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ro.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ro.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,237 @@ - + + + CloseConfirmDialog - - Please select your operation - Selectare operațiune - - - + Exit Ieşire - + Minimize to system tray Minimalizare - + Do not ask again - + Nu întreba din nou + + + + Please select your operation + Selectare operațiune - + Cancel Anulare - - OK - Ok + + Confirm + Confirm + + + + DequalizerDialog + + + Custom + Personalizat + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Restaurare setări implicite Footer - + + Unknown Title + Titlu necunoscut + + + + + + Unknown artist + Artist Necunoscut + + + Previous Precedent - + Next Următorul - + Play/Pause Redare/Pauză - + Favorite Favorite - + Lyrics Versuri - - Unknown Title - Titlu necunoscut - - - - - - Unknown artist - Artist Necunoscut - - - + Play Mode Mod redare - - Playlist - Lista de redare + + Play Queue + Coadă de Redare - + List Loop Redare lista fără pauză - + Single Loop Redare melodia fără pauză - + Shuffle Amestecare @@ -100,24 +239,29 @@ ImportWidget - - Add folder - Adăugare director + + Open Folder + - - + + Add Music + Adaugă muzică + + + + Scan Scanare - - - %1 music directory or drag & drop music file to add music - %1 director muzică sau trageți și plaseați fișiere pentru a adăuga melodii + + + %1 music directory or drag music files here + %1 director cu muzică sau trage fișierele aici - + Loading music, please wait... Se încarcă muzica, așteptați... @@ -125,55 +269,60 @@ InfoDialog - + + Basic info + Informații Uzuale + + + Title: Titlu: - + Artist: Artist: - + Album: Album: - + Type: Tip: - + + Size: + Mărime: + + + + Duration: + Durată: + + + Path: Cale fișier: - + Unknown artist Artist necunoscut - + Unknown album Album necunoscut - - - Size: - Mărime: - - - - Duration: - Durată: - LoadWidget - + Loading... Se încarcă... @@ -183,7 +332,7 @@ Find lyrics - + Caută versuri @@ -201,307 +350,716 @@ Căutare - + Back Înapoi - MainFrame + MUsicLyricWidget - - New playlist - Lista de redare nouă + + No lyrics yet + + + + MainFrame - - Settings - Setări + + Add playlist + Adaugă listă de redare - - - Exit - Ieşire + + Add music + Adaugă muzică - - Add folder - Adăugare dosar + + Equalizer + - - Add file - Adăugare fișier + + Settings + Setări - + Dark theme Fundal întunecat - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + + + Exit + Ieşire + + + + Music is a local music player with beautiful design and simple functions. + Music este un music player local cu o interfață aspectuoasă și funcții simple. - + + + + + + Music + Muzică + + + Play/Pause Redare/Pauză - + Previous Precedent - - Invalid or non-existent file - Invalid sau inexistent + + Next + Următorul - - Failed to import, no vaild music file found! - Importarea a eșuat, nu s-a găsit un fișier de muzică valid + + Successfully added to "%1" + %1 adăugat cu succes - - All music - Toate melodiile + + Already added to the playlist + Deja adăugat în lista de redare - - + + 1 song added + 1 cântec adăugat + + + + %1 songs added + %1 cântece adăugate + + + + File is invalid or does not exist, load failed + Fișier invalid sau inexistent, încărcare eșuată + + + + OK Ok - - Successfully added to "%1" - %1 adăugat cu succes + + Import failed, no valid music file found + Importare eșuată, niciun fișier audio valid găsit - - Next - Următorul + + All music + Toate melodiile - MusicListView + MusicListDataDelegate - - New playlist - Lista de redare nouă + + + No songs + Niciun cântec - + + + 1 song + 1 cântec + + + + + %1 songs + %1 cântece + + + + MusicListDataWidget + + + + + + + + + + + + No songs + Niciun cântec + + + + + 1 album - 1 song + 1 album - 1 piesă + + + + + + + %1 album - %2 songs + %1 album - %2 piese + + + + + %1 albums - %2 songs + %1 albume - %2 piese + + + + + 1 artist - 1 song + 1 artist - 1 piesă + + + + + %1 artist - %2 songs + %1 artist - %2 piese + + + + + %1 artists - %2 songs + %1 artiști - %2 piese + + + + + 1 song + 1 cântec + + + + + + + %1 songs + %1 cântece + + + + + + + No search results + Niciun rezultat la căutare + + + + + + All Music + Toate melodiile + + + + + + + + + Time added + Timp adăugat + + + + + + + Album + Album + + + + + + + Artist + Artist + + + + + Title + Titlu + + + + Play All + Redare toate + + + + Artists + Artiști + + + + Albums + Albume + + + + Custom + Personalizat + + + + + + Search Results + + + + + Songs + Cântece + + + + No result found + Nu s-a găsit un rezultat + + + + MusicListDialog + + + Play All + Redare toate + + + + Shuffle + Amestecare + + + + MusicListInfoView + + + Play queue + + + + + Add to new playlist + + + + + Pause + Pauză + + + Play Redare - + Add to playlist Adăugare la lista de redare - + Display in file manager Deschidere în managerul de fișiere - + + Remove from playlist + Scoatere din lista de redare + + + + Delete from local disk + Ștergere de pe discul local + + + Song info Informație melodie - + + + Cancel + Anulare + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + Ștergeți + + + Are you sure you want to delete %1? - + Sigur doriți să ștergeți% 1? - - + + Are you sure you want to delete the selected %1 songs? - + Sigur doriți să ștergeți melodiile %1 selectate? - - Remove from playlist - Scoatere din lista de redare + + + The song files contained will also be deleted + Fișierele vor fi deasemenea șterse + + + MusicListItem - - Delete from local disk - Ștergere de pe disk-ul local + + Are you sure you want to delete this playlist? + Sigur doriți să ștergeți această listă de redare? - - Encoding - Compresie + + Cancel + Anulare - + + Delete + Ștergeți + + + + MusicListScrollArea + + + Library + Biblioteca + + + + Playlists + Liste de redare + + + + MusicListView + + + My Favorites + + + + + + Are you sure you want to delete this playlist? + Sigur doriți să ștergeți această listă de redare? + + + + Cancel Anulare - + + + + Delete Ștergere - - Deleting the current song will also delete the song files contained - Ștergerea melodiei curente va determina ștergerea fișierelor conținute de aceasta + + + Pause + Pauză + + + + + Play + Redare + + + + + Rename + Redenumire + + + PlayListView - + Unknown artist Artist necunoscut - + Unknown album Album necunoscut - - - MusicListWidget - - No Music - Nici o melodie + + Play queue + - - No result found - Nu s-a găsit un rezultat + + musicResult + - - Play All - Redare toate + + My favorites + Favoritele mele - - Time added - Timp adăugat + + Add to new playlist + - - Title - Titlu + + Pause + Pauză - - Artist - Artist + + + Play + Redare - - Album name - Nume album + + Add to playlist + Adăugare la lista de redare - - Custom - Personalizat + + Display in file manager + Deschidere în managerul de fișiere - - - PlayListItem - - Are you sure you want to delete this playlist? - + Remove from playlist + Scoatere din lista de redare - - Delete - Ștergere + + Remove from play queue + - + + Delete from local disk + Ștergere de pe disk-ul local + + + + Encoding + Compresie + + + + Song info + Informație melodie + + + + Cancel Anulare - - - PlayListView - - - Play - Redare + + Remove + - - - Rename - Redenumire + + Are you sure you want to remove %1? + - - + + Are you sure you want to remove the selected %1 songs? + + + + Delete Ștergere + + + Are you sure you want to delete %1? + Sigur doriți să ștergeți% 1? + + + + + Are you sure you want to delete the selected %1 songs? + Sigur doriți să ștergeți melodiile %1 selectate? + + + + + The song files contained will also be deleted + Fișierele vor fi deasemenea șterse + + + + PlayListWidget + + + + No songs + Niciun cântec + + + + No search results + Niciun rezultat la căutare + + + + Play Queue + Coadă de Redare + + + + Empty + Gol + + + + 1 song + 1 cântec + + + + %1 songs + %1 cântece + + + + Playlist + + + + Unknown album + Album necunoscut + + + + + + Unknown artist + Artist necunoscut + PlaylistManager - + New playlist Lista de redare nouă - + + + + Albums + Albume + + + + + + Artists + Artiști + + + + All Music Toate melodiile - + My favorites Favoritele mele - + Search result Rezultat căutare - - - PlaylistWidget - - New playlist - Lista de redare nouă + + Play + Redare + + + + Music + Muzică QApplication - - Deepin Music - Player-ul muzical Deepin + + Music + Muzică QObject - - Deepin Music - Player-ul muzical Deepin - - Minimize to system tray Minimalizare - Exit Deepin Music - Închidere + Exit Music + Ieșire @@ -511,7 +1069,7 @@ Enable fade in/out - + Activați fade in/out @@ -570,20 +1128,150 @@ + SearchLyricsWidget + + + Find Lyrics + Găsește Versuri + + + + Title + Titlu + + + + Artist + Artist + + + + Search + Căutare + + + SearchResult - - - Search "%1" in Deepin Music - Caută "%1" în player-ul muzical Deepin + + Music + Muzică + + + + Artists + Artiști + + + + Albums + Albume + + + + Shortcut + + + Play + Redare + + + + Songs + Cântece + + + + Playlists + Liste de redare + + + + Settings + Setări + + + + Play/Pause + Redare/Pauză + + + + Previous + Precedent + + + + Next + Următorul + + + + Volume Up + Mărirea Volumului + + + + Volume Down + Micșorarea Volumului + + + + Mute + Mute + + + + Favorite + Favorite + + + + Unfavorite + Nefavorit + + + + Song info + Informație melodie + + + + New playlist + Lista de redare nouă + + + + Add music + Adaugă muzică + + + + Rename playlist + Redenumește lista de redare + + + + Remove from playlist + Scoatere din lista de redare + + + + Help + Ajutor + + + + Display shortcuts + Afișează scurtături TitlebarWidget - + Search Căutare - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ru.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ru.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ru.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ru.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,237 @@ - + + + CloseConfirmDialog - - Please select your operation - Пожалуйста выберите действие - - - + Exit Выход - + Minimize to system tray Минимизировать в трей - + Do not ask again Не спрашивать больше - + + Please select your operation + Пожалуйста выберите действие + + + Cancel Отмена - - OK - OK + + Confirm + Подтвердить + + + + DequalizerDialog + + + Custom + Пользовательский + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Восстановить Значения по умолчанию Footer - + + Unknown Title + Неизвестное Название + + + + + + Unknown artist + Неизвестный исполнитель + + + Previous Предыдущий - + Next Следующий - + Play/Pause Воспроизведение / Пауза - + Favorite Избранное - + Lyrics Текст песни - - Unknown Title - Неизвестное Название - - - - - - Unknown artist - Неизвестный исполнитель - - - + Play Mode Режим Воспроизведения - - Playlist - Список воспроизведения + + Play Queue + - + List Loop Непрерывно - + Single Loop Одиночный цикл - + Shuffle Перемешать @@ -100,24 +239,29 @@ ImportWidget - - Add folder - Добавить папку + + Open Folder + + + + + Add Music + Добавить музыку - - + + Scan Сканируйте - - - %1 music directory or drag & drop music file to add music + + + %1 music directory or drag music files here %1 музыкальный каталог или перетащите музыкальный файл, чтобы добавить музыку - + Loading music, please wait... Загрузка музыки, пожалуйста ждите... @@ -125,55 +269,60 @@ InfoDialog - + + Basic info + Основная информация + + + Title: Название - + Artist: Исполнитель - + Album: Альбом: - + Type: Тип: - + + Size: + Размер: + + + + Duration: + Продолжительность: + + + Path: Путь: - + Unknown artist Неизвестный исполнитель - + Unknown album Неизвестный альбом - - - Size: - Размер: - - - - Duration: - Продолжительность: - LoadWidget - + Loading... Загрузка... @@ -201,307 +350,716 @@ Поиск - + Back Назад - MainFrame + MUsicLyricWidget - - New playlist - Новый список воспроизведения + + No lyrics yet + + + + MainFrame - - Settings - Настройки + + Add playlist + Новый список воспроизведения - - - Exit - Выход + + Add music + Добавить музыку - - Add folder - Добавить папку + + Equalizer + - - Add file - Добавить файл + + Settings + Настройки - + Dark theme Темная тема - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - Музыкальный Проигрыватель Deepin - это красивый и простой музыкальный проигрыватель, который воспроизводит локальные аудиозаписи. Он поддерживает просмотр текста во время воспроизведения, проигрывание аудио без потерь, настройку списка воспроизведения и т. д. + + + Exit + Выход + + + + Music is a local music player with beautiful design and simple functions. + Плеер - это локальный музыкальный плеер с красивым дизайном и простыми функциями. + + + + + + + + Music + Музыка - + Play/Pause Воспроизведение / Пауза - + Previous Предыдущий - - Invalid or non-existent file - Недопустимый или несуществующий файл + + Next + Следующий - - Failed to import, no vaild music file found! - Не удалось импортировать, не найден действительный музыкальный файл! + + Successfully added to "%1" + Успешно добавлено "%1" - - All music - Вся музыка + + Already added to the playlist + + + + + 1 song added + - - + + %1 songs added + + + + + File is invalid or does not exist, load failed + Файл недействителен или не существует, не удалось загрузить + + + + OK OK - - Successfully added to "%1" - Успешно добавлено "%1" + + Import failed, no valid music file found + Не удалось импортировать, не найден действительный музыкальный файл - - Next - Следующий + + All music + Вся музыка - MusicListView + MusicListDataDelegate - - New playlist - Новый список воспроизведения + + + No songs + Нет песен + + + + + 1 song + 1 песня + + + + + %1 songs + %1 песни + + + + MusicListDataWidget + + + + + + + + + + + + No songs + Нет песен + + + + + 1 album - 1 song + 1 альбом - 1 песня + + + + + + + %1 album - %2 songs + %1 альбом - %2 песни + + + + + %1 albums - %2 songs + %1 альбом - %2 песни + + + + + 1 artist - 1 song + 1 артист - 1 песня + + + + + %1 artist - %2 songs + %1 артист - %2 песни + + + + + %1 artists - %2 songs + %1 артисты - %2 песни + + + + + 1 song + 1 песня + + + + + + + %1 songs + %1 песни + + + + + + + No search results + Ничего не найдено + + + + + + All Music + Вся Музыка + + + + + + + + + Time added + Время добавления + + + + + + + Album + Альбом + + + + + + + Artist + Исполнитель + + + + + Title + Название + + + + Play All + Воспроизвести Всё + + + + Artists + Исполнитель + + + + Albums + Альбом + + + + Custom + Пользовательский + + + + + + Search Results + + + + + Songs + Песни - + + No result found + Ничего не найдено + + + + MusicListDialog + + + Play All + Воспроизвести Всё + + + + Shuffle + Перемешать + + + + MusicListInfoView + + + Play queue + + + + + Add to new playlist + + + + + Pause + Пауза + + + Play Воспроизведение - + Add to playlist Добавить список воспроизведения - + Display in file manager Отобразить в менеджере файлов - + + Remove from playlist + Удалить из списка воспроизведения + + + + Delete from local disk + Удалить с локального диска + + + Song info Информация о песне - + + + Cancel + Отмена + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + Удалить + + + Are you sure you want to delete %1? Вы уверены, что хотите удалить %1? - - + + Are you sure you want to delete the selected %1 songs? Вы уверены, что хотите удалить выбранные %1 песни? - - Remove from playlist - Удалить из списка воспроизведения + + + The song files contained will also be deleted + Файлы, содержащую песню будут также удалены + + + MusicListItem - - Delete from local disk - Удалить из локального диска + + Are you sure you want to delete this playlist? + Вы действительно хотите удалить этот список воспроизведения? - - Encoding - Кодировка + + Cancel + Отмена + + + + Delete + Удалить + + + + MusicListScrollArea + + + Library + Библиотека + + + + Playlists + Списки воспроизведения + + + MusicListView - + + My Favorites + + + + + + Are you sure you want to delete this playlist? + Вы действительно хотите удалить этот список воспроизведения? + + + + Cancel Отмена - + + + + Delete Удалить - - Deleting the current song will also delete the song files contained - При удалении текущей песни звуковые файлы также будут удалены + + + Pause + Пауза - + + + Play + Воспроизведение + + + + + Rename + Переименовать + + + + PlayListView + + Unknown artist Неизвестный исполнитель - + Unknown album Неизвестный альбом - - - MusicListWidget - - No Music - Нет Музыки + + Play queue + - - No result found - Ничего не найдено + + musicResult + - - Play All - Воспроизвести все + + My favorites + Избранное - - Time added - Время добавления + + Add to new playlist + - - Title - Название + + Pause + Пауза - - Artist - Исполнитель + + + Play + Воспроизведение - - Album name - Название альбома + + Add to playlist + Добавить список воспроизведения - - Custom - Собственный + + Display in file manager + Отобразить в менеджере файлов - - - PlayListItem - - Are you sure you want to delete this playlist? - Вы действительно хотите удалить этот список воспроизведения? + Remove from playlist + Удалить из списка воспроизведения - - Delete - Удалить + + Remove from play queue + + + + + Delete from local disk + Удалить с локального диска + + + + Encoding + Кодировка - + + Song info + Информация о песне + + + + Cancel Отмена - - - PlayListView - - - Play - Воспроизведение + + Remove + - - - Rename - Переименовать + + Are you sure you want to remove %1? + - - + + Are you sure you want to remove the selected %1 songs? + + + + Delete Удалить + + + Are you sure you want to delete %1? + Вы уверены, что хотите удалить %1? + + + + + Are you sure you want to delete the selected %1 songs? + Вы уверены, что хотите удалить выбранные %1 песни? + + + + + The song files contained will also be deleted + Файлы, содержащую песню будут также удалены + + + + PlayListWidget + + + + No songs + Нет песен + + + + No search results + Ничего не найдено + + + + Play Queue + + + + + Empty + Очистить + + + + 1 song + 1 песня + + + + %1 songs + %1 песни + + + + Playlist + + + + Unknown album + Неизвестный альбом + + + + + + Unknown artist + Неизвестный исполнитель + PlaylistManager - + New playlist Новый список воспроизведения - + + + + Albums + Альбом + + + + + + Artists + Исполнитель + + + + All Music Вся Музыка - + My favorites Избранное - + Search result Результат поиска - - - PlaylistWidget - - New playlist - Новый список воспроизведения + + Play + Воспроизведение + + + + Music + Музыка QApplication - - Deepin Music - Музыкальный проигрыватель Deepin + + Music + Музыка QObject - - Deepin Music - Музыкальный проигрыватель Deepin - - Minimize to system tray Минимизировать в трей - Exit Deepin Music - Выйти из Плеера Deepin + Exit Music + Выйти из Плеера @@ -570,20 +1128,150 @@ + SearchLyricsWidget + + + Find Lyrics + Найти текст песни + + + + Title + Название + + + + Artist + Исполнитель + + + + Search + Поиск + + + SearchResult - - - Search "%1" in Deepin Music - Поиск %1 в Музыкальном проигрывателе Deepin + + Music + Музыка + + + + Artists + Исполнитель + + + + Albums + Альбом + + + + Shortcut + + + Play + Воспроизведение + + + + Songs + Песни + + + + Playlists + Списки воспроизведения + + + + Settings + Настройки + + + + Play/Pause + Воспроизведение / Пауза + + + + Previous + Предыдущий + + + + Next + Далее + + + + Volume Up + Громче + + + + Volume Down + Тише + + + + Mute + Приглушить + + + + Favorite + Избранное + + + + Unfavorite + Удалить из избранного + + + + Song info + Информация о песне + + + + New playlist + Новый список воспроизведения + + + + Add music + Добавить музыку + + + + Rename playlist + Переименовать список воспроизведения + + + + Remove from playlist + Удалить из списка воспроизведения + + + + Help + Помощь + + + + Display shortcuts + Горячие клавиши TitlebarWidget - + Search Поиск - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_sk.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_sk.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_sk.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_sk.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,245 @@ - + + + CloseConfirmDialog - + Please select your operation Vyberte svoju operáciu - + Exit Ukončiť - + Minimize to system tray Minimalizovať na systémový panel - + Do not ask again - + Nepýtať sa znovu - + Cancel Zrušiť - + + Confirm + + + OK - OK + OK + + + + DequalizerDialog + + + Custom + Vlastný + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Obnoviť predvolené nastavenia Footer - + Previous Predchádzajúce - + Next Ďalšie - + Play/Pause Prehrať/pozastaviť - + Favorite Obľúbené - + Lyrics Text piesne - + + Play Queue + + + + Unknown Title Neznámy názov - - - + + + Unknown artist Neznámy autor - + Play Mode Režim prehrávania - Playlist - Zoznam skladieb + Zoznam skladieb - + List Loop Zoznam slučiek - + Single Loop Jedna slučka - + Shuffle Miešanie @@ -100,24 +247,37 @@ ImportWidget - Add folder - Pridať adresár + Pridať adresár + + + + Open Folder + + + + + Add Music + - - + + Scan Skenovať - - + + + %1 music directory or drag music files here + + + %1 music directory or drag & drop music file to add music - %1 adresár hudby alebo chyťte, potiahnite a puste hudobný súbor pre pridanie hudby + %1 adresár hudby alebo chyťte, potiahnite a puste hudobný súbor pre pridanie hudby - + Loading music, please wait... Nahrávanie hudby, prosím čakajte... @@ -125,47 +285,52 @@ InfoDialog - + Title: Názov: - + Artist: Umelec: - + Album: Album: - + Type: Typ: - + Path: Cesta: - + Unknown artist Neznámy autor - + Unknown album Neznámy album - + Size: Veľkosť: - + + Basic info + + + + Duration: Doba trvania: @@ -173,7 +338,7 @@ LoadWidget - + Loading... Načítavanie... @@ -183,7 +348,7 @@ Find lyrics - + Nájsť texty piesní @@ -201,297 +366,859 @@ Hľadať - + Back Späť + MUsicLyricWidget + + + No lyrics yet + + + + MainFrame - New playlist - Nový zoznam skladieb + Nový zoznam skladieb - + Settings Nastavenia - - + + Exit Ukončiť - Add folder - Pridať adresár + Pridať adresár - Add file - Pridať súbor + Pridať súbor - + Dark theme Tmavá téma - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + Deepin Hudobný prehrávač je miestny hudobný prehrávač s krásnym dizajnom a jednoduchými funkciami. Podporuje prezeranie textov pri prehrávaní, prehrávanie bezstratovej hudby a upravovanie zoznamu skladieb, atď. - + Play/Pause Prehrať/pozastaviť - + Previous Predchádzajúce - Invalid or non-existent file - Neplatný alebo neexistujúci súbor + Neplatný alebo neexistujúci súbor - Failed to import, no vaild music file found! - Nepodarilo sa importovať, hudobný súbor je neplatný! + Nepodarilo sa importovať, hudobný súbor je neplatný! - + All music Všetká hudba - - + + OK OK - + + Add playlist + + + + + Add music + + + + + Equalizer + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" Úspešne pridané do "%1" - + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next Ďalšie + MusicListDataDelegate + + + + No songs + + + + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + Všetká hudba + + + + + + + + + Time added + Čas pridaný + + + + + + + Album + + + + + + + + Artist + Umelca + + + + + Title + Názov + + + + Play All + Prehrať všetko + + + + Artists + + + + + Albums + + + + + Custom + Vlastný + + + + + + Search Results + + + + + Songs + + + + + No result found + Nenájdený žiaden výsledok + + + + MusicListDialog + + + Play All + Prehrať všetko + + + + Shuffle + Miešanie + + + + MusicListInfoView + + New playlist + Nový zoznam skladieb + + + + Play queue + + + + + Add to new playlist + + + + + Pause + + + + + Play + Spustiť + + + + Add to playlist + Pridať do zoznamu skladieb + + + + Display in file manager + Zobraziť v správcovi súborov + + + + Remove from playlist + Odstrániť zo zoznamu skladieb + + + + Delete from local disk + Odstrániť z lokálneho disku + + + + Song info + Info o piesni + + + + + Cancel + Zrušiť + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + Vymazať + + + + Are you sure you want to delete %1? + Naozaj chcete vymazať %1? + + + + + Are you sure you want to delete the selected %1 songs? + Naozaj chcete vymazať vybrané %1 piesne? + + + + + The song files contained will also be deleted + + + + + MusicListItem + + + Are you sure you want to delete this playlist? + Naozaj chcete vymazať tento zoznam prehrávania? + + + + Cancel + Zrušiť + + + + Delete + Vymazať + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + MusicListView - New playlist - Nový zoznam skladieb + Nový zoznam skladieb - + + Play Spustiť - Add to playlist - Pridať do zoznamu skladieb + Pridať do zoznamu skladieb - Display in file manager - Zobraziť v správcovi súborov + Zobraziť v správcovi súborov - Song info - Info o piesni + Info o piesni - Are you sure you want to delete %1? - + Naozaj chcete vymazať %1? - - Are you sure you want to delete the selected %1 songs? - + Naozaj chcete vymazať vybrané %1 piesne? - Remove from playlist - Odstrániť zo zoznamu skladieb + Odstrániť zo zoznamu skladieb - Delete from local disk - Odstrániť z lokálneho disku + Odstrániť z lokálneho disku - Encoding - Kódovanie + Kódovanie + + + + My Favorites + + + + + + Are you sure you want to delete this playlist? + Naozaj chcete vymazať tento zoznam prehrávania? - + + Cancel Zrušiť - + + + + Delete Vymazať - + + + Pause + + + + + + Rename + Premenovať + + Deleting the current song will also delete the song files contained - Vymazanie aktuálnej skladby tiež odstráni súbory obsiahnutých piesní + Vymazanie aktuálnej skladby tiež odstráni súbory obsiahnutých piesní - Unknown artist - Neznámy autor + Neznámy autor - Unknown album - Neznámy album + Neznámy album MusicListWidget - No Music - Žiadna hudba + Žiadna hudba - No result found - Nenájdený žiaden výsledok + Nenájdený žiaden výsledok - Play All - Prehrať všetko + Prehrať všetko - Time added - Čas pridaný + Čas pridaný - Title - Názov + Názov - Artist - Umelca + Umelca - Album name - Názov albumu + Názov albumu - Custom - Vlastný + Vlastný PlayListItem - Are you sure you want to delete this playlist? - + Naozaj chcete vymazať tento zoznam prehrávania? - Delete - Vymazať + Vymazať - Cancel - Zrušiť + Zrušiť PlayListView - - + New playlist + Nový zoznam skladieb + + + + Play queue + + + + + musicResult + + + + + My favorites + Moje obľúbené + + + + Add to new playlist + + + + + Pause + + + + + Play Spustiť - - + + Add to playlist + Pridať do zoznamu skladieb + + + + Display in file manager + Zobraziť v správcovi súborov + + + Remove from playlist + Odstrániť zo zoznamu skladieb + + + + Remove from play queue + + + + + Delete from local disk + Odstrániť z lokálneho disku + + + + Encoding + Kódovanie + + + + Song info + Info o piesni + + + + + Cancel + Zrušiť + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + Naozaj chcete vymazať %1? + + + + + Are you sure you want to delete the selected %1 songs? + Naozaj chcete vymazať vybrané %1 piesne? + + + + + The song files contained will also be deleted + + + Rename - Premenovať + Premenovať - - + Delete Vymazať + + + Unknown artist + Neznámy autor + + + + Unknown album + Neznámy album + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + Neznámy album + + + + + + Unknown artist + Neznámy autor + PlaylistManager - + New playlist Nový zoznam skladieb - + Artist + Umelca + + + + + + Albums + + + + + + + Artists + + + + + All Music Všetká hudba - + My favorites Moje obľúbené - + Search result Výsledky vyhľadávania + + + Play + Spustiť + + + + Music + + PlaylistWidget - New playlist - Nový zoznam skladieb + Nový zoznam skladieb QApplication - Deepin Music - Deepin Hudobný prehrávač + Deepin Hudobný prehrávač + + + + Music + QObject - Deepin Music - Deepin Hudobný prehrávač + Deepin Hudobný prehrávač @@ -499,9 +1226,13 @@ Minimalizovať na systémový panel - Exit Deepin Music - Ukončiť Deepin Hudba + Ukončiť Deepin Hudba + + + + Exit Music + @@ -511,7 +1242,7 @@ Enable fade in/out - + Povoliť zblednutie @@ -570,20 +1301,154 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + Názov + + + + Artist + Umelca + + + + Search + Hľadať + + + SearchResult - - Search "%1" in Deepin Music - Vyhľadať "%1" v Deepin Hudba + Vyhľadať "%1" v Deepin Hudba + + + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + Spustiť + + + + Songs + + + + + Playlists + + + + + Settings + Nastavenia + + + + Play/Pause + Prehrať/pozastaviť + + + + Previous + Predchádzajúce + + + + Next + Ďalšie + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + Obľúbené + + + + Unfavorite + + + + + Song info + Info o piesni + + + + New playlist + Nový zoznam skladieb + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + Odstrániť zo zoznamu skladieb + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search Hľadať - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_sl.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_sl.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_sl.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_sl.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,245 @@ - + + + CloseConfirmDialog - + Please select your operation Prosim, izberite vašo operacijo - + Exit Izhod - + Minimize to system tray Pomanjšaj v statusno vrstico - + Do not ask again - + - + Cancel Prekliči - + + Confirm + + + OK - V redu + V redu + + + + DequalizerDialog + + + Custom + Po meri + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Obnovi privzeto Footer - + Previous Predhodni - + Next Naslednji - + Play/Pause Predvajaj/premor - + Favorite Priljubljena - + Lyrics Besedila pesmi - + + Play Queue + + + + Unknown Title Neznan naslov - - - + + + Unknown artist Neznan izvajalec - + Play Mode Način predvajanja - Playlist - Seznam predvajanja + Seznam predvajanja - + List Loop Zanka seznamov - + Single Loop Enojna zanka - + Shuffle Mešanje @@ -100,24 +247,37 @@ ImportWidget - Add folder - Dodaj mapo + Dodaj mapo + + + + Open Folder + - - + + Add Music + + + + + Scan Pregled - - + + + %1 music directory or drag music files here + + + %1 music directory or drag & drop music file to add music - %1 glasbeni direktorij ali povlecite in spustite glasbeno datoteko, da dodate glasbo + %1 glasbeni direktorij ali povlecite in spustite glasbeno datoteko, da dodate glasbo - + Loading music, please wait... Nalagam glasbo, prosim počakajte ... @@ -125,47 +285,52 @@ InfoDialog - + Title: Naslov: - + Artist: Izvajalec: - + Album: Album: - + Type: Vrsta: - + Path: Pot: - + Unknown artist Neznan izvajalec - + Unknown album Neznan album - + Size: Velikost: - + + Basic info + + + + Duration: Čas trajanja: @@ -173,7 +338,7 @@ LoadWidget - + Loading... Nalagam... @@ -183,7 +348,7 @@ Find lyrics - + @@ -201,297 +366,843 @@ Išči - + Back Nazaj + MUsicLyricWidget + + + No lyrics yet + + + + MainFrame - New playlist - Nov seznam predvajanja + Nov seznam predvajanja - + Settings Nastavitve - - + + Exit Izhod - Add folder - Dodaj mapo + Dodaj mapo - Add file - Dodaj datoteko + Dodaj datoteko - + Dark theme Temna tema - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - - - - + Play/Pause Predvajaj/premor - + Previous Predhodni - Invalid or non-existent file - Neveljavna ali neobstoječa datoteka + Neveljavna ali neobstoječa datoteka - Failed to import, no vaild music file found! - Uvoz ni uspel, ni veljavne glasbene datoteke! + Uvoz ni uspel, ni veljavne glasbene datoteke! - + All music Vsa glasba - - + + OK V redu - + + Add playlist + + + + + Add music + + + + + Equalizer + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" Uspešno dodano v "%1" - + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next Naslednji - MusicListView + MusicListDataDelegate + + + + No songs + + + + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + Vsa glasba + + + + + + + + + Time added + Dodan čas + + + + + + + Album + + + + + + + + Artist + Izvajalec + + + + + Title + Naslov + + + + Play All + Predvajaj vse + + + + Artists + + + + + Albums + + + + + Custom + Po meri + + + + + + Search Results + + + + + Songs + + + + + No result found + Ni rezultatov iskanja + + + + MusicListDialog + + + Play All + Predvajaj vse + + + + Shuffle + Mešanje + + + + MusicListInfoView - New playlist - Nov seznam predvajanja + Nov seznam predvajanja + + + + Play queue + + + + + Add to new playlist + - + + Pause + + + + Play - Predvajaj + Predvajaj - + Add to playlist - Dodaj na seznam predvajanja + Dodaj na seznam predvajanja - + Display in file manager - Prikaži v upravitelju datotek + Prikaži v upravitelju datotek - + + Remove from playlist + Odstrani s seznama predvajanja + + + + Delete from local disk + Izbriši z lokalnega diska + + + Song info - Informacije o pesmi + Informacije o pesmi + + + + + Cancel + Prekliči + + + + Remove + - + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + Izbriši + + + Are you sure you want to delete %1? - + - - + + Are you sure you want to delete the selected %1 songs? - + + + + + + The song files contained will also be deleted + + + + + MusicListItem + + + Are you sure you want to delete this playlist? + + + + + Cancel + Prekliči + + + + Delete + Izbriši + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + + MusicListView + + New playlist + Nov seznam predvajanja + + + + + Play + Predvajaj + + + Add to playlist + Dodaj na seznam predvajanja + + + Display in file manager + Prikaži v upravitelju datotek + + + Song info + Informacije o pesmi - Remove from playlist - Odstrani s seznama predvajanja + Odstrani s seznama predvajanja - Delete from local disk - Izbriši z lokalnega diska + Izbriši z lokalnega diska - Encoding - Encoding + Encoding + + + + My Favorites + + + + + + Are you sure you want to delete this playlist? + - + + Cancel Prekliči - + + + + Delete Izbriši - + + + Pause + + + + + + Rename + Preimenuj + + Deleting the current song will also delete the song files contained - Izbris te pesmi bo povzročil tudi izbris vseh datotek, ki jih vsebuje + Izbris te pesmi bo povzročil tudi izbris vseh datotek, ki jih vsebuje - Unknown artist - Neznan izvajalec + Neznan izvajalec - Unknown album - Neznan album + Neznan album MusicListWidget - No Music - Ni glasbe + Ni glasbe - No result found - Ni rezultatov iskanja + Ni rezultatov iskanja - Play All - Predvajaj vse + Predvajaj vse - Time added - Dodan čas + Dodan čas - Title - Naslov + Naslov - Artist - Izvajalec + Izvajalec - Album name - Ime albuma + Ime albuma - Custom - Po meri + Po meri PlayListItem - - Are you sure you want to delete this playlist? - - - - Delete - Izbriši + Izbriši - Cancel - Prekliči + Prekliči PlayListView - - + New playlist + Nov seznam predvajanja + + + + Play queue + + + + + musicResult + + + + + My favorites + Priljubljene + + + + Add to new playlist + + + + + Pause + + + + + Play Predvajaj - - + + Add to playlist + Dodaj na seznam predvajanja + + + + Display in file manager + Prikaži v upravitelju datotek + + + Remove from playlist + Odstrani s seznama predvajanja + + + + Remove from play queue + + + + + Delete from local disk + Izbriši z lokalnega diska + + + + Encoding + Encoding + + + + Song info + Informacije o pesmi + + + + + Cancel + Prekliči + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + Rename - Preimenuj + Preimenuj - - + Delete Izbriši + + + Unknown artist + Neznan izvajalec + + + + Unknown album + Neznan album + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + Neznan album + + + + + + Unknown artist + Neznan izvajalec + PlaylistManager - + New playlist Nov seznam predvajanja - + Artist + Izvajalec + + + + + + Albums + + + + + + + Artists + + + + + All Music Vsa glasba - + My favorites Priljubljene - + Search result Rezultati iskanja + + + Play + Predvajaj + + + + Music + + PlaylistWidget - New playlist - Nov seznam predvajanja + Nov seznam predvajanja QApplication - Deepin Music - Deepin glasbeni predvajalnik + Deepin glasbeni predvajalnik + + + + Music + QObject - Deepin Music - Glasba Deepin + Glasba Deepin @@ -499,9 +1210,13 @@ Pomanjšaj v statusno vrstico - Exit Deepin Music - Izhod iz Glasbe Deepin + Izhod iz Glasbe Deepin + + + + Exit Music + @@ -511,7 +1226,7 @@ Enable fade in/out - + @@ -570,20 +1285,154 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + Naslov + + + + Artist + Izvajalec + + + + Search + Išči + + + SearchResult - - Search "%1" in Deepin Music - Išči "%1" v Glasbi Deepin + Išči "%1" v Glasbi Deepin + + + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + Predvajaj + + + + Songs + + + + + Playlists + + + + + Settings + Nastavitve + + + + Play/Pause + Predvajaj/premor + + + + Previous + Predhodni + + + + Next + Naslednji + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + Priljubljena + + + + Unfavorite + + + + + Song info + Informacije o pesmi + + + + New playlist + Nov seznam predvajanja + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + Odstrani s seznama predvajanja + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search Išči - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_sq.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_sq.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_sq.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_sq.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,181 +1,330 @@ - + + + CloseConfirmDialog - + Please select your operation - + - + Exit Dalje - + Minimize to system tray - + - + Do not ask again - + - + Cancel Anuloje - - OK - + + Confirm + + + + + DequalizerDialog + + + Custom + + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Footer - + Previous - + - + Next - + - + Play/Pause - + - + Favorite - + - + Lyrics - + - + + Play Queue + + + + Unknown Title - + - - - + + + Unknown artist - + - + Play Mode - - - - - Playlist - + - + List Loop - + - + Single Loop - + - + Shuffle - + ImportWidget - - Add folder - + + Open Folder + - - + + Add Music + + + + + Scan - + - - - %1 music directory or drag & drop music file to add music - + + + %1 music directory or drag music files here + - + Loading music, please wait... - + InfoDialog - + Title: - + - + Artist: - + - + Album: - + - + Type: - + - + Path: - + - + Unknown artist - + - + Unknown album - + - + Size: - + - + + Basic info + + + + Duration: - + LoadWidget - + Loading... - + @@ -183,407 +332,949 @@ Find lyrics - + Title - + Artist - + Search - + - + Back - + - MainFrame + MUsicLyricWidget - - New playlist - + + No lyrics yet + + + + MainFrame - + Settings - + - - + + Exit Dalje - - Add folder - + + Dark theme + - - Add file - + + Equalizer + - - Dark theme - + + Play/Pause + - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + + Previous + - - Play/Pause - + + All music + - - Previous - + + + OK + - - Invalid or non-existent file - + + Add playlist + - - Failed to import, no vaild music file found! - + + Add music + - - All music - + + Music is a local music player with beautiful design and simple functions. + - - - OK - + + + + + + Music + - + Successfully added to "%1" - + + + + + Already added to the playlist + + + + + 1 song added + - + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next - + - MusicListView + MusicListDataDelegate - - New playlist - + + + No songs + + + + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + + + + + + + + + + Time added + + + + + + + + Album + + + + + + + + Artist + + + + + + Title + + + + + Play All + + + + + Artists + + + + + Albums + + + + + Custom + + + + + + + Search Results + + + + + Songs + - + + No result found + + + + + MusicListDialog + + + Play All + + + + + Shuffle + + + + + MusicListInfoView + + + Play queue + + + + + Add to new playlist + + + + + Pause + + + + Play - + - + Add to playlist - + - + Display in file manager - + + + + + Remove from playlist + - + + Delete from local disk + + + + Song info - + + + + + + Cancel + Anuloje + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + - + Are you sure you want to delete %1? - + - - + + Are you sure you want to delete the selected %1 songs? - + - - Remove from playlist - + + + The song files contained will also be deleted + + + + MusicListItem - - Delete from local disk - + + Are you sure you want to delete this playlist? + - - Encoding - + + Cancel + Anuloje + + + + Delete + + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + + MusicListView + + + + Play + + + + + + Are you sure you want to delete this playlist? + - + + My Favorites + + + + + Cancel Anuloje - + + + + Delete - + - - Deleting the current song will also delete the song files contained - + + + Pause + - - Unknown artist - + + + Rename + + + + PlayListItem - - Unknown album - + Cancel + Anuloje - MusicListWidget + PlayListView - - No Music - + + Play queue + - - No result found - + + My favorites + - - Play All - + + Add to new playlist + - - Time added - + + Pause + - - Title - + + + Play + - - Artist - + + musicResult + - - Album name - + + Add to playlist + - - Custom - + + Display in file manager + - - - PlayListItem - - Are you sure you want to delete this playlist? - + + Remove from play queue + - - Delete - + + Delete from local disk + + + + + Encoding + - + + Song info + + + + + Cancel - Anuloje + Anuloje + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + + + Delete + + + + + Unknown artist + + + + + Unknown album + - PlayListView + PlayListWidget - - - Play - + + + No songs + - - - Rename - + + No search results + - - - Delete - + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + + + + + + + Unknown artist + PlaylistManager - + New playlist - + - + + + + Albums + + + + + + + Artists + + + + + All Music - + - + My favorites - + - + Search result - + - - - PlaylistWidget - - New playlist - + + Play + + + + + Music + QApplication - - Deepin Music - + + Music + QObject - - Deepin Music - - - Minimize to system tray - + - Exit Deepin Music - + Exit Music + Autoplay - + Enable fade in/out - + Remember playback position - + Close Main Window - + Basic - + Play - + Shortcuts - + Restore Defaults - + Next - + Play/Pause - + Previous - + Volume down - + Volume up - + + + + + SearchLyricsWidget + + + Find Lyrics + + + + + Title + + + + + Artist + + + + + Search + SearchResult - - - Search "%1" in Deepin Music - + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + + + + + Songs + + + + + Playlists + + + + + Settings + + + + + Play/Pause + + + + + Previous + + + + + Next + + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + + + + + Unfavorite + + + + + Song info + + + + + New playlist + + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search - + - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_sr.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_sr.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_sr.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_sr.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,237 @@ - + + + CloseConfirmDialog - - Please select your operation - Молимо изаберите операцију - - - + Exit Изађи - + Minimize to system tray Спусти у системску касету - + Do not ask again Не питај ме поново - + + Please select your operation + Молимо изаберите операцију + + + Cancel Откажи - - OK - У реду + + Confirm + Потврди + + + + DequalizerDialog + + + Custom + Прилагођено + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Врати Подразумевано Footer - + + Unknown Title + Непознат наслов + + + + + + Unknown artist + Непознат извођач + + + Previous Претходно - + Next Следеће - + Play/Pause Пусти/Паузирај - + Favorite Омиљено - + Lyrics Текст - - Unknown Title - Непознат наслов - - - - - - Unknown artist - Непознат извођач - - - + Play Mode Режим пуштања - - Playlist - Листа пуштања + + Play Queue + Редослед пуштања - + List Loop Понављање листе - + Single Loop Понављање нумере - + Shuffle Насумично @@ -100,24 +239,29 @@ ImportWidget - - Add folder - Додај фасциклу + + Open Folder + Отвори фасциклу - - + + Add Music + Додај музику + + + + Scan - Скенирај + Учитај - - - %1 music directory or drag & drop music file to add music - %1 музички директоријум или превуци датотеку са музиком да додаш нумере + + + %1 music directory or drag music files here + %1 музички директоријум или превуци музичке датотеке овде - + Loading music, please wait... Учитавање музике, молимо сачекајте... @@ -125,55 +269,60 @@ InfoDialog - + + Basic info + Основни подаци + + + Title: Наслов: - + Artist: Извођач: - + Album: Албум: - + Type: Врста: - + + Size: + Величина: + + + + Duration: + Трајање: + + + Path: Путања: - + Unknown artist Непознат извођач - + Unknown album Непознат албум - - - Size: - Величина: - - - - Duration: - Трајање: - LoadWidget - + Loading... Учитавање... @@ -201,307 +350,716 @@ Претражи - + Back Назад - MainFrame + MUsicLyricWidget - - New playlist - Нова листа пуштања + + No lyrics yet + + + + MainFrame - - Settings - Подешавања + + Add playlist + Додај листу пуштања - - - Exit - Изађи + + Add music + Додај музику - - Add folder - Додај фасциклу + + Equalizer + - - Add file - Додај датотеку + + Settings + Подешавања - + Dark theme Тамна тема - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + + + Exit + Изађи + + + + Music is a local music player with beautiful design and simple functions. + Музика је локални пуштач музике лепог дизајна са једноставним функцијама. + + + + + + + + Music + Музика - + Play/Pause Пусти/Паузирај - + Previous Претходно - - Invalid or non-existent file - Неисправна или непостојећа датотека + + Next + Следеће - - Failed to import, no vaild music file found! - Неуспешан увоз, нису пронађене регуларне музичке датотеке! + + Successfully added to "%1" + Успешно додато у "%1" - - All music - Сва музика + + Already added to the playlist + Већ додато листи пуштања + + + + 1 song added + 1 нумера додато - - + + %1 songs added + %1 нумера/е додато + + + + File is invalid or does not exist, load failed + Датотека је неважећа или не постоји, учитавање неуспешно + + + + OK У реду - - Successfully added to "%1" - Успешно додато у "%1" + + Import failed, no valid music file found + Неуспешан увоз, нису пронађене регуларне музичке датотеке - - Next - Следеће + + All music + Сва музика - MusicListView + MusicListDataDelegate - - New playlist - Нова листа пуштања + + + No songs + Нема нумера + + + + + 1 song + 1 нумера + + + + + %1 songs + %1 нумера/е + + + + MusicListDataWidget + + + + + + + + + + + + No songs + Нема нумера + + + + + 1 album - 1 song + 1 албум - 1 нумера + + + + + + + %1 album - %2 songs + %1 албум - %2 нумера/е + + + + + %1 albums - %2 songs + %1 албума - %2 нумера/е + + + + + 1 artist - 1 song + 1 извођач - 1 нумера + + + + + %1 artist - %2 songs + %1 извођач - %2 нумера/е + + + + + %1 artists - %2 songs + %1 извођача - %2 нумера/е + + + + + 1 song + 1 нумера + + + + + + + %1 songs + %1 нумера/е + + + + + + + No search results + Нема резултата претраге + + + + + + All Music + Сва музика - + + + + + + + Time added + Време додавања + + + + + + + Album + Албум + + + + + + + Artist + Извођач + + + + + Title + Наслов + + + + Play All + Пусти све + + + + Artists + Извођачи + + + + Albums + Албуми + + + + Custom + Прилагођено + + + + + + Search Results + Резултати претраге + + + + Songs + Нумере + + + + No result found + Није пронађен ниједан резултат + + + + MusicListDialog + + + Play All + Пусти све + + + + Shuffle + Насумично + + + + MusicListInfoView + + + Play queue + Редослед пуштања + + + + Add to new playlist + Додај у нову листу + + + + Pause + Паузирај + + + Play Пусти - + Add to playlist Додај у листу пуштања - + Display in file manager Прикажи у управнику података - + + Remove from playlist + Уклони из листе пуштања + + + + Delete from local disk + Обриши са диска + + + Song info Информације о нумери - + + + Cancel + Откажи + + + + Remove + Уклони + + + + Are you sure you want to remove %1? + Заиста желите да уклоните %1? + + + + Are you sure you want to remove the selected %1 songs? + Заиста желите да уклоните %1 изабране/их нумере/а? + + + + Delete + Обриши + + + Are you sure you want to delete %1? - + Заиста желите да обришете %1? - - + + Are you sure you want to delete the selected %1 songs? - + Заиста желите да обришете %1 нумере/а? - - Remove from playlist - Уклони из листе пуштања + + + The song files contained will also be deleted + Припадајуће датотеке нумера ће такође бити обрисане + + + MusicListItem - - Delete from local disk - Обриши са диска + + Are you sure you want to delete this playlist? + Заиста желите да обришете листу пуштања? - - Encoding - Кодирање + + Cancel + Откажи + + + + Delete + Обриши + + + + MusicListScrollArea + + + Library + Библиотека - + + Playlists + Листа пуштања + + + + MusicListView + + + My Favorites + Моје омиљено + + + + + Are you sure you want to delete this playlist? + Заиста желите да обришете листу пуштања? + + + + Cancel Откажи - + + + + Delete Обриши - - Deleting the current song will also delete the song files contained - Брисање тренутне нумере ће је такође обрисати у припадајућој датотеци + + + Pause + Паузирај + + + + + Play + Пусти + + + + + Rename + Преименуј + + + PlayListView - + Unknown artist Непознат извођач - + Unknown album Непознат албум - - - MusicListWidget - - No Music - Нема музике + + Play queue + Редослед пуштања - - No result found - Није пронађен ниједан резултат + + musicResult + - - Play All - Пусти све + + My favorites + Моје омиљено - - Time added - Време додавања + + Add to new playlist + Додај у нову листу - - Title - Наслов + + Pause + Паузирај - - Artist - Извођач + + + Play + Пусти - - Album name - Име албума + + Add to playlist + Додај у листу пуштања - - Custom - Прилагођено + + Display in file manager + Прикажи у управнику података - - - PlayListItem - - Are you sure you want to delete this playlist? - + Remove from playlist + Уклони из листе пуштања - - Delete - Обриши + + Remove from play queue + - + + Delete from local disk + Обриши са диска + + + + Encoding + Кодирање + + + + Song info + Информације о нумери + + + + Cancel Откажи - - - PlayListView - - - Play - Пусти + + Remove + Уклони - - - Rename - Преименуј + + Are you sure you want to remove %1? + Заиста желите да уклоните %1? - - + + Are you sure you want to remove the selected %1 songs? + Заиста желите да уклоните %1 изабране/их нумере/а? + + + Delete Обриши + + + Are you sure you want to delete %1? + Заиста желите да обришете %1? + + + + + Are you sure you want to delete the selected %1 songs? + Заиста желите да обришете %1 нумере/а? + + + + + The song files contained will also be deleted + Припадајуће датотеке нумера ће такође бити обрисане + + + + PlayListWidget + + + + No songs + Нема нумера + + + + No search results + Нема резултата претраге + + + + Play Queue + Редослед пуштања + + + + Empty + Празно + + + + 1 song + 1 нумера + + + + %1 songs + %1 нумера/е + + + + Playlist + + + + Unknown album + Непознат албум + + + + + + Unknown artist + Непознат извођач + PlaylistManager - + New playlist Нова листа пуштања - + + + + Albums + Албуми + + + + + + Artists + Извођачи + + + + All Music Сва музика - + My favorites Моје омиљено - + Search result Резултати претраге - - - PlaylistWidget - - New playlist - Нова листа пуштања + + Play + Пусти + + + + Music + Музика QApplication - - Deepin Music - Дипин Музика + + Music + Музика QObject - - Deepin Music - Дипин Музика - - Minimize to system tray Спусти у системску касету - Exit Deepin Music - Изађи из Дипин Музике + Exit Music + Изађи из Музике @@ -511,7 +1069,7 @@ Enable fade in/out - + Прелазно утишавање @@ -570,20 +1128,150 @@ + SearchLyricsWidget + + + Find Lyrics + Пронађи текст + + + + Title + Наслов + + + + Artist + Извођач + + + + Search + Претражи + + + SearchResult - - - Search "%1" in Deepin Music - Претражи "%1" у Дипин Музици + + Music + Музика + + + + Artists + Извођачи + + + + Albums + Албуми + + + + Shortcut + + + Play + Пусти + + + + Songs + Нумере + + + + Playlists + Листа пуштања + + + + Settings + Подeшавања + + + + Play/Pause + Пусти/Паузирај + + + + Previous + Претходно + + + + Next + Следеће + + + + Volume Up + Појачај звук + + + + Volume Down + Утишај звук + + + + Mute + Ућуткај + + + + Favorite + Омиљено + + + + Unfavorite + Уклони из омиљеног + + + + Song info + Информације о нумери + + + + New playlist + Нова листа пуштања + + + + Add music + Додај музику + + + + Rename playlist + Преименуј листу пуштања + + + + Remove from playlist + Уклони из листе пуштања + + + + Help + Помоћ + + + + Display shortcuts + Прикажи пречице TitlebarWidget - + Search Претражи - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_sv.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_sv.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_sv.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_sv.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,179 +1,340 @@ - + + + CloseConfirmDialog - + Please select your operation - + - + Exit Avsluta - + Minimize to system tray - + - + Do not ask again - + - + Cancel Avbryt - + + Confirm + + + OK - Okej + Okej + + + + DequalizerDialog + + + Custom + Egen + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Footer - + Previous Föregående - + Next Nästa - + Play/Pause Spela/Pausa - + Favorite - + - + Lyrics Låttexter - + + Play Queue + + + + Unknown Title - + - - - + + + Unknown artist Okänd artist - + Play Mode - + - Playlist - Spellista + Spellista - + List Loop - + - + Single Loop - + - + Shuffle - + ImportWidget - Add folder - Lägg till mapp + Lägg till mapp + + + + Open Folder + - - + + Add Music + + + + + Scan Skanna - - - %1 music directory or drag & drop music file to add music - + + + %1 music directory or drag music files here + - + Loading music, please wait... - + InfoDialog - + Title: Titel: - + Artist: Artist: - + Album: - + - + Type: Typ: - + Path: - + - + Unknown artist Okänd artist - + Unknown album Okänt album - + Size: Storlek: - + + Basic info + + + + Duration: - + LoadWidget - + Loading... Laddar... @@ -183,7 +344,7 @@ Find lyrics - + @@ -201,332 +362,807 @@ Sök - + Back - + - MainFrame + MUsicLyricWidget - - New playlist - + + No lyrics yet + + + + MainFrame - + Settings Inställningar - - + + Exit Avsluta - Add folder - Lägg till mapp + Lägg till mapp - Add file - Lägg till fil + Lägg till fil - + Dark theme - + - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - - - - + Play/Pause Spela/Pausa - + Previous Föregående - - Invalid or non-existent file - + + All music + + + + + + OK + Okej - - Failed to import, no vaild music file found! - + + Add playlist + - - All music - + + Add music + - - - OK - Okej + + Equalizer + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + - + Successfully added to "%1" - + - + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next Nästa - MusicListView + MusicListDataDelegate - - New playlist - + + + No songs + - + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + + + + + + + + + + Time added + + + + + + + + Album + + + + + + + + Artist + Artist + + + + + Title + Titel + + + + Play All + Spela Alla + + + + Artists + + + + + Albums + + + + + Custom + Egen + + + + + + Search Results + + + + + Songs + + + + + No result found + + + + + MusicListDialog + + + Play All + Spela Alla + + + + Shuffle + + + + + MusicListInfoView + + + Play queue + + + + + Add to new playlist + + + + + Pause + + + + Play - Spela + Spela - + Add to playlist - + - + Display in file manager - + + + + + Remove from playlist + Ta bort fån spellista - + + Delete from local disk + + + + Song info - + - + + + Cancel + Avbryt + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + Radera + + + Are you sure you want to delete %1? - + - - + + Are you sure you want to delete the selected %1 songs? - + + + + + + The song files contained will also be deleted + + + + + MusicListItem + + + Are you sure you want to delete this playlist? + + + + + Cancel + Avbryt + + + + Delete + Radera + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + + MusicListView + + + + Play + Spela - Remove from playlist - Ta bort fån spellista + Ta bort fån spellista - - Delete from local disk - + + My Favorites + - - Encoding - + + + Are you sure you want to delete this playlist? + - + + Cancel Avbryt - + + + + Delete Radera - - Deleting the current song will also delete the song files contained - + + + Pause + + + + + + Rename + Byt namn - Unknown artist - Okänd artist + Okänd artist - Unknown album - Okänt album + Okänt album MusicListWidget - - No Music - - - - - No result found - - - - Play All - Spela Alla + Spela Alla - - Time added - - - - Title - Titel + Titel - Artist - Artist - - - - Album name - + Artist - Custom - Egen + Egen PlayListItem - - Are you sure you want to delete this playlist? - - - - Delete - Radera + Radera - Cancel - Avbryt + Avbryt PlayListView - - + + Play queue + + + + + musicResult + + + + + My favorites + + + + + Add to new playlist + + + + + Pause + + + + + Play Spela - - + + Add to playlist + + + + + Display in file manager + + + + Remove from playlist + Ta bort fån spellista + + + + Remove from play queue + + + + + Delete from local disk + + + + + Encoding + + + + + Song info + + + + + + Cancel + Avbryt + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + Rename - Byt namn + Byt namn - - + Delete Radera + + + Unknown artist + Okänd artist + + + + Unknown album + Okänt album + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + Okänt album + + + + + + Unknown artist + Okänd artist + PlaylistManager - + New playlist - + + + + Artist + Artist + + + + + + Albums + + + + + + + Artists + - + + All Music - + - + My favorites - + - + Search result - + - - - PlaylistWidget - - New playlist - + + Play + Spela + + + + Music + QApplication - Deepin Music - Deepin-musik + Deepin-musik + + + + Music + QObject - Deepin Music - Deepin-musik + Deepin-musik Minimize to system tray - + - Exit Deepin Music - + Exit Music + Autoplay - + Enable fade in/out - + Remember playback position - + Close Main Window - + Basic - + @@ -541,7 +1177,7 @@ Restore Defaults - + @@ -570,20 +1206,150 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + Titel + + + + Artist + Artist + + + + Search + Sök + + + SearchResult - - - Search "%1" in Deepin Music - + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + Spela + + + + Songs + + + + + Playlists + + + + + Settings + Inställningar + + + + Play/Pause + Spela/Pausa + + + + Previous + Föregående + + + + Next + Nästa + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + + + + + Unfavorite + + + + + Song info + + + + + New playlist + + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + Ta bort fån spellista + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search Sök - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ta.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ta.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ta.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ta.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,181 +1,334 @@ - + + + CloseConfirmDialog - + Please select your operation - + - + Exit வெளியேறுக - + Minimize to system tray - + - + Do not ask again - + - + Cancel நிறுத்து - + + Confirm + + + OK - சரி + சரி + + + + DequalizerDialog + + + Custom + விருப்பம் + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Footer - + Previous முந்தைய - + Next அடுத்து - + Play/Pause இயக்கு/இடைநிறுத்து - + Favorite - + - + Lyrics - + + + + + Play Queue + - + Unknown Title - + - - - + + + Unknown artist - + - + Play Mode - - - - - Playlist - + - + List Loop - + - + Single Loop - + - + Shuffle - + ImportWidget - - Add folder - + + Open Folder + - - + + Add Music + + + + + Scan - + - - - %1 music directory or drag & drop music file to add music - + + + %1 music directory or drag music files here + - + Loading music, please wait... - + InfoDialog - + Title: - + - + Artist: - + - + Album: - + - + Type: - + - + Path: - + - + Unknown artist - + - + Unknown album - + - + Size: - + + + + + Basic info + - + Duration: - + LoadWidget - + Loading... - + @@ -183,365 +336,796 @@ Find lyrics - + Title - + Artist - + Search - + - + Back - + - MainFrame + MUsicLyricWidget - - New playlist - + + No lyrics yet + + + + MainFrame - + Settings அமைவுகள் - - + + Exit வெளியேறுக - - Add folder - - - - - Add file - - - - + Dark theme - + - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + + Equalizer + - + Play/Pause இயக்கு/இடைநிறுத்து - + Previous முந்தைய - - Invalid or non-existent file - + + All music + - - Failed to import, no vaild music file found! - + + + OK + சரி - - All music - + + Add playlist + - - - OK - சரி + + Add music + - + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" - + + + + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + - + Next அடுத்து - MusicListView + MusicListDataDelegate - - New playlist - + + + No songs + - - Play - + + + 1 song + - - Add to playlist - + + + %1 songs + + + + MusicListDataWidget - - Display in file manager - + + + + + + + + + + + No songs + - - Song info - + + + 1 album - 1 song + - - Are you sure you want to delete %1? - + + + + + %1 album - %2 songs + - - - Are you sure you want to delete the selected %1 songs? - + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + + + + + + + + + + Time added + + + + + + + + Album + + + + + + + + Artist + - + + + Title + + + + + Play All + + + + + Artists + + + + + Albums + + + + + Custom + விருப்பம் + + + + + + Search Results + + + + + Songs + + + + + No result found + + + + + MusicListDialog + + + Play All + + + + + Shuffle + + + + + MusicListInfoView + + + Play queue + + + + + Add to new playlist + + + + + Pause + + + + + Play + + + + + Add to playlist + + + + + Display in file manager + + + + Remove from playlist - + - + Delete from local disk - + - - Encoding - + + Song info + - + + Cancel - நிறுத்து + நிறுத்து - + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + Delete - அழி + அழி - - Deleting the current song will also delete the song files contained - + + Are you sure you want to delete %1? + - - Unknown artist - + + + Are you sure you want to delete the selected %1 songs? + - - Unknown album - + + + The song files contained will also be deleted + - MusicListWidget + MusicListItem - - No Music - + + Are you sure you want to delete this playlist? + - - No result found - + + Cancel + நிறுத்து - - Play All - + + Delete + அழி + + + MusicListScrollArea - - Time added - + + Library + - - Title - + + Playlists + + + + + MusicListView + + + + Play + - - Artist - + + + Are you sure you want to delete this playlist? + - - Album name - + + My Favorites + - - Custom - விருப்பம் + + + Cancel + நிறுத்து + + + + + + + Delete + அழி + + + + + Pause + + + + + + Rename + - PlayListItem + MusicListWidget - - Are you sure you want to delete this playlist? - + Custom + விருப்பம் + + + PlayListItem - Delete - அழி + அழி - Cancel - நிறுத்து + நிறுத்து PlayListView - - + + Play queue + + + + + My favorites + + + + + Add to new playlist + + + + + Pause + + + + + Play - + - - - Rename - + + musicResult + + + + + Add to playlist + + + + + Display in file manager + + + + + Remove from play queue + + + + + Delete from local disk + - - + + Encoding + + + + + Song info + + + + + + Cancel + நிறுத்து + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + + Delete அழி + + + Unknown artist + + + + + Unknown album + + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + + + + + + + Unknown artist + + PlaylistManager - + New playlist - + + + + + + + Albums + - + + + + Artists + + + + + All Music - + - + My favorites - + - + Search result - + - - - PlaylistWidget - - New playlist - + + Play + + + + + Music + QApplication - Deepin Music - டீப்இன் இசை + டீப்இன் இசை + + + + Music + QObject - Deepin Music - டீப்இன் இசை + டீப்இன் இசை Minimize to system tray - + - Exit Deepin Music - + Exit Music + Autoplay - + Enable fade in/out - + Remember playback position - + Close Main Window - + Basic - + Play - + Shortcuts - + Restore Defaults - + @@ -570,20 +1154,150 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + + + + + Artist + + + + + Search + + + + SearchResult - - - Search "%1" in Deepin Music - + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + + + + + Songs + + + + + Playlists + + + + + Settings + அமைவுகள் + + + + Play/Pause + இயக்கு/இடைநிறுத்து + + + + Previous + முந்தைய + + + + Next + அடுத்து + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + + + + + Unfavorite + + + + + Song info + + + + + New playlist + + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search - + - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_tr.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_tr.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_tr.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_tr.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,237 @@ - + + + CloseConfirmDialog - - Please select your operation - Lütfen yapmak istediğiniz işlemi seçin - - - + Exit - Çık + Çıkış - + Minimize to system tray Sistem tepsisine küçült - + Do not ask again - + Bir daha sorma + + + + Please select your operation + Lütfen yapmak istediğiniz işlemi seçin - + Cancel İptal - - OK - Tamam + + Confirm + Onayla + + + + DequalizerDialog + + + Custom + Özel + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Varsayılanları Geri Yükle Footer - + + Unknown Title + Bilinmeyen Başlık + + + + + + Unknown artist + Bilinmeyen sanatçı + + + Previous Önceki - + Next Sonraki - + Play/Pause Oynat/Duraklat - + Favorite Sık kullanılanlara ekle - + Lyrics - Şarkı sözleri - - - - Unknown Title - Başlık Bilinmiyor - - - - - - Unknown artist - Sanatçı bilinmiyor + Sözler - + Play Mode Oynatma Kipi - - Playlist - Oynatma listesi + + Play Queue + Oynatma Sırası - + List Loop Liste Döngüsü - + Single Loop Parça Döngüsü - + Shuffle Karıştır @@ -100,24 +239,29 @@ ImportWidget - - Add folder - Klasör ekle + + Open Folder + Klasör Aç + + + + Add Music + Müzik Ekle - - + + Scan Tara - - - %1 music directory or drag & drop music file to add music - Müzik eklemek için Müzik klasörünü %1 ya da müzik dosyasını sürükleyip bırakın + + + %1 music directory or drag music files here + %1 müzik dizini veya müzik dosyalarını buraya sürükleyin - + Loading music, please wait... Müzikler yükleniyor, lütfen bekleyin... @@ -125,55 +269,60 @@ InfoDialog - + + Basic info + Temel bilgi + + + Title: Başlık: - + Artist: Sanatçı: - + Album: Albüm: - + Type: Tür: - - Path: - Yol: + + Size: + Boyut: - - Unknown artist - Sanatçı bilinmiyor + + Duration: + Süre: - - Unknown album - Albüm bilinmiyor + + Path: + Yol: - - Size: - Boyut: + + Unknown artist + Bilinmeyen sanatçı - - Duration: - Süre: + + Unknown album + Bilinmeyen albüm LoadWidget - + Loading... Yükleniyor... @@ -183,7 +332,7 @@ Find lyrics - + Sözleri Bul @@ -198,310 +347,719 @@ Search - Arama + Ara - + Back Geri - MainFrame + MUsicLyricWidget - - New playlist - Yeni oynatma listesi + + No lyrics yet + + + + MainFrame - - Settings - Ayarlar + + Add playlist + Oynatma listesi ekle - - - Exit - Çık + + Add music + Müzik ekle - - Add folder - Klasör ekle + + Equalizer + - - Add file - Dosya ekle + + Settings + Ayarlar - + Dark theme Koyu tema - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + + + Exit + Çıkış + + + + Music is a local music player with beautiful design and simple functions. + Müzik, hoş tasarımı ve basit işlevleri olan sade bir müzik çalardır. - + + + + + + Music + Müzik + + + Play/Pause Oynat/Duraklat - + Previous Önceki - - Invalid or non-existent file - Dosya geçersiz ya da bulunamadı + + Next + Sonraki + + + + Successfully added to "%1" + "%1" üzerine eklendi - - Failed to import, no vaild music file found! - İçe aktarılamadı, geçerli bir müzik dosyası bulunamadı! + + Already added to the playlist + Oynatma listesine zaten eklenmiş - - All music - Tüm müzikler + + 1 song added + 1 parça eklendi - - + + %1 songs added + %1 parça eklendi + + + + File is invalid or does not exist, load failed + Dosya geçersiz veya mevcut değil, yükleme başarısız + + + + OK Tamam - - Successfully added to "%1" - "%1" üzerine eklendi + + Import failed, no valid music file found + İçe aktarılamadı, geçerli müzik dosyası bulunamadı - - Next - Sonraki + + All music + Tüm müzikler - MusicListView + MusicListDataDelegate - - New playlist - Yeni oynatma listesi + + + No songs + Parça yok + + + + + 1 song + 1 parça + + + + + %1 songs + %1 parça + + + + MusicListDataWidget + + + + + + + + + + + + No songs + Parça yok + + + + + 1 album - 1 song + 1 albüm - 1 parça + + + + + + + %1 album - %2 songs + %1 albüm - %2 parça + + + + + %1 albums - %2 songs + %1 albüm - %2 parça + + + + + 1 artist - 1 song + 1 sanatçı - 1 parça + + + + + %1 artist - %2 songs + %1 sanatçı - %2 parça + + + + + %1 artists - %2 songs + %1 sanatçı - %2 parça + + + + + 1 song + 1 parça + + + + + + + %1 songs + %1 parça + + + + + + + No search results + Arama sonucu bulunamadı + + + + + + All Music + Tüm Müzikler + + + + + + + + + Time added + Zaman eklendi + + + + + + + Album + Albüm + + + + + + + Artist + Sanatçı + + + + + Title + Başlık + + + + Play All + Tümünü Oynat + + + + Artists + Sanatçılar + + + + Albums + Albümler + + + + Custom + Özel + + + + + + Search Results + Arama Sonuçları + + + + Songs + Parçalar + + + + No result found + Sonuç bulunamadı + + + + MusicListDialog + + + Play All + Tümünü Oynat + + + + Shuffle + Karıştır + + + + MusicListInfoView + + + Play queue + Oynatma sırası + + + + Add to new playlist + Yeni oynatma listesine ekle + + + + Pause + Duraklat - + Play Oynat - + Add to playlist Oynatma listesine ekle - + Display in file manager Dosya yöneticisinde görüntüle - + + Remove from playlist + Oynatma listesinden kaldır + + + + Delete from local disk + Yerel diskten sil + + + Song info - Şarkı bilgileri + Parça bilgileri + + + + + Cancel + İptal + + + + Remove + Kaldır + + + + Are you sure you want to remove %1? + Kaldırmak istediğinizden emin misiniz %1? + + + + Are you sure you want to remove the selected %1 songs? + Seçilen %1 parçayı kaldırmak istediğinizden emin misiniz? - + + Delete + Sil + + + Are you sure you want to delete %1? - + %1 ögesini silmek istediğinize emin misiniz? - - + + Are you sure you want to delete the selected %1 songs? - + %1 seçili parçayı silmek istediğinize emin misiniz? - - Remove from playlist - Oynatma listesinden kaldır + + + The song files contained will also be deleted + Parça dosyalarının içeriği de silinecek + + + MusicListItem - - Delete from local disk - Yerel diskten sil + + Are you sure you want to delete this playlist? + Bu oynatma listesini silmek istediğinize emin misiniz? - - Encoding - Kodlama + + Cancel + İptal + + + + Delete + Sil + + + + MusicListScrollArea + + + Library + Kütüphane + + + + Playlists + Oynatma listesi + + + + MusicListView + + + My Favorites + Sık Kullandıklarım - + + + Are you sure you want to delete this playlist? + Bu oynatma listesini silmek istediğinize emin misiniz? + + + + Cancel İptal - + + + + Delete Sil - - Deleting the current song will also delete the song files contained - Geçerli şarkıyı silmek, şarkı içeriği dosyalarını da silecek + + + Pause + Duraklat - - Unknown artist - Sanatçı bilinmiyor + + + Play + Oynat - - Unknown album - Albüm bilinmiyor + + + Rename + Yeniden adlandır - MusicListWidget + PlayListView - - No Music - Henüz Bir Müzik Yok + + Unknown artist + Bilinmeyen sanatçı - - No result found - Herhangi bir sonuç bulunamadı + + Unknown album + Bilinmeyen albüm - - Play All - Tümünü Oynat + + Play queue + Oynatma sırası - - Time added - Zaman eklendi + + musicResult + - - Title - Başlık + + My favorites + Sık kullandıklarım - - Artist - Sanatçı + + Add to new playlist + Yeni oynatma listesine ekle - - Album name - Albüm adı + + Pause + Duraklat - - Custom - Özel + + + Play + Oynat - - - PlayListItem - - Are you sure you want to delete this playlist? - + + Add to playlist + Oynatma listesine ekle - - Delete - Sil + + Display in file manager + Dosya yöneticisinde görüntüle + + + Remove from playlist + Oynatma listesinden kaldır + + + + Remove from play queue + + + + + Delete from local disk + Yerel diskten sil + + + + Encoding + Kodlama - + + Song info + Parça bilgileri + + + + Cancel İptal - - - PlayListView - - - Play - Oynat + + Remove + Kaldır - - - Rename - Yeniden Adlandır + + Are you sure you want to remove %1? + Kaldırmak istediğinizden emin misiniz %1? - - + + Are you sure you want to remove the selected %1 songs? + Seçilen %1 parçayı kaldırmak istediğinizden emin misiniz? + + + Delete Sil + + + Are you sure you want to delete %1? + %1 ögesini silmek istediğinize emin misiniz? + + + + + Are you sure you want to delete the selected %1 songs? + %1 seçili parçayı silmek istediğinize emin misiniz? + + + + + The song files contained will also be deleted + Parça dosyalarının içeriği de silinecek + + + + PlayListWidget + + + + No songs + Parça yok + + + + No search results + Arama sonucu bulunamadı + + + + Play Queue + Oynatma Sırası + + + + Empty + Boşalt + + + + 1 song + 1 parça + + + + %1 songs + %1 parça + + + + Playlist + + + + Unknown album + Bilinmeyen albüm + + + + + + Unknown artist + Bilinmeyen sanatçı + PlaylistManager - + New playlist Yeni oynatma listesi - + + + + Albums + Albümler + + + + + + Artists + Sanatçılar + + + + All Music Tüm Müzikler - + My favorites Sık kullandıklarım - + Search result Arama sonuçları - - - PlaylistWidget - - New playlist - Yeni oynatma listesi + + Play + Oynat + + + + Music + Müzik QApplication - - Deepin Music - Deepin Müzik + + Music + Müzik QObject - - Deepin Music - Deepin Müzik - - Minimize to system tray Sistem tepsisine küçült - Exit Deepin Music - Deepin Müzik Uygulamasından Çık + Exit Music + Müzik'den Çık @@ -511,12 +1069,12 @@ Enable fade in/out - + Geçişlerde açma/kısma kullan Remember playback position - Oynatma konumu hatırlansın + Oynatma konumu hatırla @@ -566,24 +1124,154 @@ Volume up - Sesi arttır + Sesi yükselt + + + + SearchLyricsWidget + + + Find Lyrics + Şarkı Sözlerini Bul + + + + Title + Başlık + + + + Artist + Sanatçı + + + + Search + Ara SearchResult - - - Search "%1" in Deepin Music - Deepin Müzik üzerinde "%1" ara + + Music + Müzik + + + + Artists + Sanatçılar + + + + Albums + Albümler + + + + Shortcut + + + Play + Oynat + + + + Songs + Parçalar + + + + Playlists + Oynatma listesi + + + + Settings + Ayarlar + + + + Play/Pause + Oynat/Duraklat + + + + Previous + Önceki + + + + Next + Sonraki + + + + Volume Up + Sesi Yükselt + + + + Volume Down + Sesi Azalt + + + + Mute + Sesi kapat + + + + Favorite + Sık kullanılanlara ekle + + + + Unfavorite + Favoriden çıkar + + + + Song info + Parça bilgileri + + + + New playlist + Yeni oynatma listesi + + + + Add music + Müzik ekle + + + + Rename playlist + Çalma listesini yeniden adlandır + + + + Remove from playlist + Oynatma listesinden kaldır + + + + Help + Yardım + + + + Display shortcuts + Kısayolları görüntüle TitlebarWidget - + Search Ara - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music.ts 2020-07-14 12:05:00.000000000 +0000 @@ -4,97 +4,234 @@ CloseConfirmDialog - + Please select your operation - + Exit - + Minimize to system tray - + Do not ask again - + Cancel - - OK + + Confirm + + + + + DequalizerDialog + + + Custom + + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults Footer - + Previous - + Next - + Play/Pause - + Favorite - + Lyrics - - Unknown Title + + Play Queue - - - - Unknown artist + + Unknown Title - - Play Mode + + + + Unknown artist - - Playlist + + Play Mode - + List Loop - + Single Loop - + Shuffle @@ -102,24 +239,29 @@ ImportWidget - - Add folder + + Open Folder + + + + + Add Music - - + + Scan - - - %1 music directory or drag & drop music file to add music + + + %1 music directory or drag music files here - + Loading music, please wait... @@ -127,47 +269,52 @@ InfoDialog - + Title: - + Artist: - + Album: - + Type: - + Path: - + Unknown artist - + Unknown album - + Size: - + + Basic info + + + + Duration: @@ -175,7 +322,7 @@ LoadWidget - + Loading... @@ -203,306 +350,711 @@ - + Back - MainFrame + MUsicLyricWidget - - New playlist + + No lyrics yet + + + MainFrame - + Settings - - + + Exit - - Add folder + + Dark theme - - Add file + + Equalizer - - Dark theme + + Play/Pause - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. + + Previous - - Play/Pause + + All music - - Previous + + + OK - - Invalid or non-existent file + + Add playlist - - Failed to import, no vaild music file found! + + Add music - - All music + + Music is a local music player with beautiful design and simple functions. - - - OK + + + + + + Music - + Successfully added to "%1" - + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next - MusicListView + MusicListDataDelegate - - New playlist + + + No songs - - Play + + + 1 song - - Add to playlist + + + %1 songs + + + MusicListDataWidget - - Display in file manager + + + + + + + + + + + No songs - - Song info + + + 1 album - 1 song - - Are you sure you want to delete %1? + + + + + %1 album - %2 songs - - - Are you sure you want to delete the selected %1 songs? + + + %1 albums - %2 songs - - Remove from playlist + + + 1 artist - 1 song - - Delete from local disk + + + %1 artist - %2 songs - - Encoding + + + %1 artists - %2 songs - - Cancel + + + 1 song - - Delete + + + + + %1 songs - - Deleting the current song will also delete the song files contained + + + + + No search results - - Unknown artist + + + + All Music - - Unknown album + + + + + + + Time added + + + + + + + + Album + + + + + + + + Artist + + + + + + Title + + + + + Play All + + + + + Artists + + + + + Albums + + + + + Custom - - - MusicListWidget - - No Music + + + + Search Results - + + Songs + + + + No result found + + + MusicListDialog - + Play All - - Time added + + Shuffle + + + MusicListInfoView - - Title + + Play queue - - Artist + + Add to new playlist - - Album name + + Pause - - Custom + + Play + + + + + Add to playlist + + + + + Display in file manager + + + + + Remove from playlist + + + + + Delete from local disk + + + + + Song info + + + + + + Cancel + + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted - PlayListItem + MusicListItem - + Are you sure you want to delete this playlist? - + + Cancel + + + + Delete + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + + MusicListView + + + + Play + + + + + + Are you sure you want to delete this playlist? + + + + + My Favorites + + - + + Cancel + + + + + + Delete + + + + + + Pause + + + + + + Rename + + PlayListView - - + + Play queue + + + + + My favorites + + + + + Add to new playlist + + + + + Pause + + + + + Play - - - Rename + + musicResult + + + + + Add to playlist - - + + Display in file manager + + + + + Remove from play queue + + + + + Delete from local disk + + + + + Encoding + + + + + Song info + + + + + + Cancel + + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + + Delete + + + Unknown artist + + + + + Unknown album + + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + + + + + + + Unknown artist + + PlaylistManager - + New playlist - + + + + Albums + + + + + + + Artists + + + + + All Music - + My favorites - + Search result - - - PlaylistWidget - - New playlist + + Play + + + + + Music QApplication - - Deepin Music + + Music QObject - - Deepin Music - - - Minimize to system tray - Exit Deepin Music + Exit Music @@ -572,18 +1124,148 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + + + + + Artist + + + + + Search + + + + SearchResult - - - Search "%1" in Deepin Music + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + + + + + Songs + + + + + Playlists + + + + + Settings + + + + + Play/Pause + + + + + Previous + + + + + Next + + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + + + + + Unfavorite + + + + + Song info + + + + + New playlist + + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + + + + + Help + + + + + Display shortcuts TitlebarWidget - + Search diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ug.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ug.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_ug.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_ug.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,181 +1,330 @@ - + + + CloseConfirmDialog - - Please select your operation - - - - + Exit چېكىنىش - + Minimize to system tray - + سىستېما تەخسىگە كىچىكلىتىش - + Do not ask again - + خاتالىق كۆرۈلدى - + + Please select your operation + مەشغۇلاتىڭىزنى تاللاڭ + + + Cancel بىكار قىلىش - - OK - جەزملەش + + Confirm + جەزملەشتۈرۈش + + + + DequalizerDialog + + + Custom + ئادەت + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + سۈكۈتتىكى ھالىتىگە قايتۇرۇش Footer - + + Unknown Title + تېمىسى نامەلۇم + + + + + + Unknown artist + نامەلۇم سەنئەتچى + + + Previous - + ئالدىنقى - + Next كېيىنكى - + Play/Pause قويۇش\توختۇتۇش - + Favorite - + ياقتۇرغانلىرىم - + Lyrics ناخشا تېكىستى - - Unknown Title - نامالۇم تېما - - - - - - Unknown artist - - - - + Play Mode - ھالىتى + قويۇش ھالىتى - - Playlist - تىزىملىك + + Play Queue + قويۇش تەرتىپى - + List Loop - + ھالقىسىمان تىزىملىك - + Single Loop - + تاق تىزىملىك - + Shuffle - + ئۆزگەرتىش ImportWidget - - Add folder - يېڭى قىسقۇچ + + Open Folder + - - + + Add Music + + + + + Scan - سىكاننېرلاش + سايىلەش - - - %1 music directory or drag & drop music file to add music - + + + %1 music directory or drag music files here + % 1 مۇزىكا مۇندەرىجىسى ياكى مۇزىكا ھۆججەتلىرىنى بۇ يەرگە سۆرەپ كىرىۋاتىدۇ - + Loading music, please wait... - + مۇزىكا قۇشۇلىۋاتىدۇ،سەل ساقلاڭ... InfoDialog - + + Basic info + ئاساسىي ئۇچۇرلىرى + + + Title: - + تېما : - + Artist: - + ناخشىچى : - + Album: - + ئالبوم : - + Type: تىپى: - - Path: - + + Size: + چوڭلىقى : - - Unknown artist - + + Duration: + داۋاملاشتۇرۇش ۋاقتى - - Unknown album - + + Path: + غول مۇندەرىجە: - - Size: - + + Unknown artist + نامەلۇم سەنئەتچى - - Duration: - + + Unknown album + نامەلۇم ئالبۇم LoadWidget - + Loading... - + قوشۇۋاتىدۇ... @@ -183,7 +332,7 @@ Find lyrics - + تېكىستنى تېپىش @@ -193,7 +342,7 @@ Artist - + سەنئەتكار @@ -201,307 +350,716 @@ ئىزدەش - + Back - + قايتىش - MainFrame + MUsicLyricWidget - - New playlist - + + No lyrics yet + + + + MainFrame - - Settings - + + Add playlist + قويۇش تىزىملىكىگە قوشۇش - - - Exit - چېكىنىش + + Add music + مۇزىكا قوشۇش - - Add folder - يېڭى قىسقۇچ + + Equalizer + - - Add file - ھۆججەت قۇرۇش + + Settings + تەڭشەك - + Dark theme - + قاراڭغۇ تېما + + + + + Exit + چېكىنىش + + + + Music is a local music player with beautiful design and simple functions. + مۇزىكا گۈزەل لايىھىلەش ۋە ئاددىي ئىقتىدارغا ئىگە يەرلىك مۇزىكا قويغۇچ. - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + + + + + + Music + مۇزىكا - + Play/Pause قويۇش\توختۇتۇش - + Previous - + ئالدىنقى - - Invalid or non-existent file - ۋاختى ئۆتكەن-ياكى مەۋجۈت بولمىغان قىسقۇچ + + Next + كېيىنكى - - Failed to import, no vaild music file found! - + + Successfully added to "%1" + مۇۋەپپەقىيەتلىك ھالدا "% 1" گە قوشۇلدى - - All music - ھەممە ناخشىلار + + Already added to the playlist + قويۇش تىزىملىكىگە بۇرۇنلا قوشۇلغان + + + + 1 song added + 1 ناخشا قوشۇلدى + + + + %1 songs added + % 1 ناخشا قوشۇلدى + + + + File is invalid or does not exist, load failed + ھۆججەت ئىناۋەتسىز ياكى مەۋجۇت ئەمەس ،قوشۇش مەغلۇپ بولدى - - + + OK تامام - - Successfully added to "%1" - + + Import failed, no valid music file found + ئەكىرىش مەغلۇپ بولدى ، ئۈنۈملۈك مۇزىكا ھۆججىتى تېپىلمىدى - - Next - كېيىنكى + + All music + ھەممە ناخشىلار - MusicListView + MusicListDataDelegate - - New playlist - + + + No songs + ناخشا يوق + + + + + 1 song + 1 ناخشا + + + + + %1 songs + % 1 ناخشا + + + + MusicListDataWidget + + + + + + + + + + + + No songs + ناخشا يوق + + + + + 1 album - 1 song + 1 پىلاستىنكا - 1 ناخشا + + + + + + + %1 album - %2 songs + % 1 پىلاستىنكا -% 2 ناخشا + + + + + %1 albums - %2 songs + % 1 پىلاستىنكا -% 2 ناخشا + + + + + 1 artist - 1 song + 1 سەنئەتكار - 1 ناخشا + + + + + %1 artist - %2 songs + % 1 سەنئەتكار -% 2 ناخشا + + + + + %1 artists - %2 songs + % 1 سەنئەتكار -% 2 ناخشا + + + + + 1 song + 1 ناخشا + + + + + + + %1 songs + % 1 ناخشا + + + + + + + No search results + ھېچقانداق ئىزدەش نەتىجىسى تىپىلمىدى + + + + + + All Music + ھەممە ناخشىلار - + + + + + + + Time added + ۋاقىت قوشۇش + + + + + + + Album + پىلاستىنكا + + + + + + + Artist + سەنئەتكار + + + + + Title + تېما + + + + Play All + ھەممىسىنى قويۇش + + + + Artists + سەنئەتكار + + + + Albums + پىلاستىنكا + + + + Custom + ئادەت + + + + + + Search Results + + + + + Songs + ناخشا + + + + No result found + ھېچقانداق نەتىجە تېپىلمىدى + + + + MusicListDialog + + + Play All + ھەممىسىنى قويۇش + + + + Shuffle + ئۆزگەرتىش + + + + MusicListInfoView + + + Play queue + + + + + Add to new playlist + + + + + Pause + تورمۇزلاش + + + Play - + قويۇش - + Add to playlist - + قويۇش تىزىملىكىگە قوشۇڭ - + Display in file manager - + ھۆججەت باشقۇرغۇچتا كۆرسىتىلىدۇ + + + + Remove from playlist + قويۇش تىزىملىكىدىن ئۆچۈرۈڭ - + + Delete from local disk + يەرلىك دىسكىدىن ئۆچۈرۈڭ + + + Song info ناخشا ئۇچۇرى - + + + Cancel + بىكار قىلىش + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + ئۆچۈرۈش + + + Are you sure you want to delete %1? - + % 1 نى ئۆچۈرمەكچىمۇ؟ - - + + Are you sure you want to delete the selected %1 songs? - + تاللانغان% 1 ناخشىنى ئۆچۈرمەكچىمۇ؟ - - Remove from playlist - + + + The song files contained will also be deleted + مەزمۇندىكى ناخشا ھۆججەتلىرىمۇ ئۆچۈرۈلىدۇ + + + MusicListItem - - Delete from local disk - + + Are you sure you want to delete this playlist? + بۇ تىزىملىكنى ئۆچۈرمەكچىمۇ؟ - - Encoding - + + Cancel + بىكار قىلىش + + + + Delete + ئۆچۈرۈش + + + + MusicListScrollArea + + + Library + كۈتۈپخانا + + + + Playlists + قويۇش تىزىملىكى + + + + MusicListView + + + My Favorites + + + + + + Are you sure you want to delete this playlist? + بۇ تىزىملىكنى ئۆچۈرمەكچىمۇ؟ - + + Cancel بىكار قىلىش - + + + + Delete ئۆچۈرۈش - - Deleting the current song will also delete the song files contained - + + + Pause + تورمۇزلاش - - Unknown artist - + + + Play + قويۇش - - Unknown album - + + + Rename + قايتا ئىسىم قويۇش - MusicListWidget + PlayListView - - No Music - ناخشا يوق + + Unknown artist + نامەلۇم سەنئەتچى - - No result found - + + Unknown album + نامەلۇم ئالبۇم - - Play All - ھەممىسىنى قويۇش + + Play queue + - - Time added - ۋاقىت قوشۇش + + musicResult + - - Title - تېما + + My favorites + مىنىڭ ياقتۇرغانلىرىم - - Artist - + + Add to new playlist + - - Album name - ئالبوم نامى + + Pause + تورمۇزلاش - - Custom - ئادەت + + + Play + قويۇش - - - PlayListItem - - Are you sure you want to delete this playlist? - + + Add to playlist + قويۇش تىزىملىكىگە قوشۇڭ - - Delete - ئۆچۈرۈش + + Display in file manager + ھۆججەت باشقۇرغۇچتا كۆرسىتىلىدۇ + + + Remove from playlist + قويۇش تىزىملىكىدىن ئۆچۈرۈڭ + + + + Remove from play queue + + + + + Delete from local disk + يەرلىك دىسكىدىن ئۆچۈرۈڭ + + + + Encoding + كودلاش - + + Song info + ناخشا ئۇچۇرى + + + + Cancel بىكار قىلىش - - - PlayListView - - - Play - + + Remove + - - - Rename - قايتا ئىسىم قويۇش + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + - - + Delete ئۆچۈرۈش + + + Are you sure you want to delete %1? + % 1 نى ئۆچۈرمەكچىمۇ؟ + + + + + Are you sure you want to delete the selected %1 songs? + تاللانغان% 1 ناخشىنى ئۆچۈرمەكچىمۇ؟ + + + + + The song files contained will also be deleted + مەزمۇندىكى ناخشا ھۆججەتلىرىمۇ ئۆچۈرۈلىدۇ + + + + PlayListWidget + + + + No songs + ناخشا يوق + + + + No search results + ھېچقانداق ئىزدەش نەتىجىسى تىپىلمىدى + + + + Play Queue + قويۇش تەرتىپى + + + + Empty + قۇرۇق + + + + 1 song + 1 ناخشا + + + + %1 songs + % 1 ناخشا + + + + Playlist + + + + Unknown album + نامەلۇم ئالبۇم + + + + + + Unknown artist + نامەلۇم سەنئەتچى + PlaylistManager - + New playlist - + يېڭى قويۇش تىزىملىكى + + + + + + Albums + پىلاستىنكا - + + + + Artists + سەنئەتكار + + + + All Music ھەممە ناخشىلار - + My favorites - + مىنىڭ ياقتۇرغانلىرىم - + Search result ئىزدەش نەتىجىسى - - - PlaylistWidget - - New playlist - + + Play + قويۇش + + + + Music + مۇزىكا QApplication - - Deepin Music - Deepin ناخشى قويغۇچى + + Music + مۇزىكا QObject - - Deepin Music - Deepin ناخشى قويغۇچى - - Minimize to system tray - + سىستېما تەخسىگە كىچىكلىتىش - Exit Deepin Music - Deepin ناخشا قويغۇچىدىن چېكىنىش + Exit Music + مۇزىكىدىن چېكىنىش @@ -511,12 +1069,12 @@ Enable fade in/out - + ئاقما ئېقىم قوزغۇتۇش Remember playback position - + قويۇش ئورنىنى ئەستە تۇتۇش @@ -526,12 +1084,12 @@ Basic - + ئاساسىي ئۇچۇر Play - + قويۇش @@ -556,34 +1114,164 @@ Previous - + ئالدىنقى Volume down - + تۆۋەن ئاۋاز Volume up - + يۇقىرى ئاۋاز + + + + SearchLyricsWidget + + + Find Lyrics + ناخشا تېكىستى ئىزدەش + + + + Title + تېما + + + + Artist + سەنئەتكار + + + + Search + ئىزدەش SearchResult - - - Search "%1" in Deepin Music - + + Music + مۇزىكا + + + + Artists + سەنئەتكار + + + + Albums + پىلاستىنكا + + + + Shortcut + + + Play + قويۇش + + + + Songs + ناخشا + + + + Playlists + قويۇش تىزىملىكى + + + + Settings + تەڭشەك + + + + Play/Pause + قويۇش\توختۇتۇش + + + + Previous + ئالدىنقى + + + + Next + كېيىنكى + + + + Volume Up + يۇقىرى ئاۋاز + + + + Volume Down + تۆۋەن ئاۋاز + + + + Mute + ئاۋازسىز + + + + Favorite + ياقتۇرغانلىرىم + + + + Unfavorite + ياقتۇرمىغانلار + + + + Song info + ناخشا ئۇچۇرى + + + + New playlist + يېڭى قويۇش تىزىملىكى + + + + Add music + مۇزىكا قوشۇش + + + + Rename playlist + قويۇش تىزىملىكىنىڭ نامىنى ئۆزگەرتىش + + + + Remove from playlist + قويۇش تىزىملىكىدىن ئۆچۈرۈڭ + + + + Help + ياردەم + + + + Display shortcuts + تېزلەتمە كۆرسىتىش TitlebarWidget - + Search ئىزدەش - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_uk.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_uk.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_uk.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_uk.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,237 @@ - + + + CloseConfirmDialog - - Please select your operation - Будь ласка, оберіть дію - - - + Exit Вихід - + Minimize to system tray Згорнути до лотка - + Do not ask again Не запитуй знову - + + Please select your operation + Будь ласка, оберіть дію + + + Cancel Скасувати - - OK - Гаразд + + Confirm + Підтвердити + + + + DequalizerDialog + + + Custom + Користувацький + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Відновити за замовчуванням Footer - + + Unknown Title + Невідома назва + + + + + + Unknown artist + Невідомий виконавець + + + Previous Попередній - + Next Наступний - + Play/Pause Відтворення/Пауза - + Favorite Улюблені - + Lyrics Текст пісні - - Unknown Title - Невідома назва - - - - - - Unknown artist - Невідомий виконавець - - - + Play Mode Режим відтворення - - Playlist - Плейлист + + Play Queue + Відтворити чергу - + List Loop Зациклити список - + Single Loop Зациклити - + Shuffle Перемішати @@ -100,24 +239,29 @@ ImportWidget - - Add folder - Додати теку + + Open Folder + + + + + Add Music + Додати музику - - + + Scan Сканувати - - - %1 music directory or drag & drop music file to add music - %1 музичний каталог або перетягніть музичний файл аби додати музику + + + %1 music directory or drag music files here + %1 каталог звукових файлів або скиньте сюди звукові файли - + Loading music, please wait... Музика завантажується, зачекайте... @@ -125,55 +269,60 @@ InfoDialog - + + Basic info + Базові дані + + + Title: Назва: - + Artist: Виконавець: - + Album: Альбом: - + Type: Тип: - + + Size: + Розмір: + + + + Duration: + Тривалість: + + + Path: Шлях: - + Unknown artist Невідомий виконавець - + Unknown album Невідомий альбом - - - Size: - Розмір: - - - - Duration: - Тривалість: - LoadWidget - + Loading... Завантаження... @@ -201,307 +350,716 @@ Пошук - + Back Назад - MainFrame + MUsicLyricWidget - - New playlist - Новий плейлист + + No lyrics yet + + + + MainFrame - - Settings - Налаштування + + Add playlist + Додати список відтворення - - - Exit - Вихід + + Add music + Додати музику - - Add folder - Додати теку + + Equalizer + - - Add file - Додати файл + + Settings + Налаштування - + Dark theme Темна тема - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - Музичний плеєр Deepin є локальним відтворювачем музики з красивим дизайном та простим набором функцій. Він підтримує перегляд лірики під час прослуховування, відтворення музики, стиснутої без втрат, налаштування списку відтворення, тощо. + + + Exit + Вихід + + + + Music is a local music player with beautiful design and simple functions. + «Музика» — програма-програвач для музичних файлів на вашому комп'ютері. Має чудовий та зручний дизайн. + + + + + + + + Music + Музика - + Play/Pause Відтворення/Пауза - + Previous Попередній - - Invalid or non-existent file - Недійсний або неіснуючий файл + + Next + Наступний - - Failed to import, no vaild music file found! - Не вдалося імпортувати, не знайдено дійсний музичний файл! + + Successfully added to "%1" + Успішно додано до "%1" - - All music - Уся музика + + Already added to the playlist + Вже додано до списку відтворення + + + + 1 song added + Додано 1 композицію + + + + %1 songs added + Додано %1 композицій - - + + File is invalid or does not exist, load failed + Файл є некоректним або файла не існує. Не вдалося завантажити. + + + + OK Гаразд - - Successfully added to "%1" - Успішно додано до "%1" + + Import failed, no valid music file found + Не вдалося імпортувати. Не знайдено коректного файла звукових даних. - - Next - Наступний + + All music + Уся музика - MusicListView + MusicListDataDelegate - - New playlist - Новий плейлист + + + No songs + Немає пісень - + + + 1 song + 1 піісня + + + + + %1 songs + %1 пісні + + + + MusicListDataWidget + + + + + + + + + + + + No songs + Немає пісень + + + + + 1 album - 1 song + 1 альбом — 1 композиція + + + + + + + %1 album - %2 songs + %1 альбом — %2 композиції + + + + + %1 albums - %2 songs + %1 альбомів — %2 композицій + + + + + 1 artist - 1 song + 1 виконавець — 1 композиція + + + + + %1 artist - %2 songs + %1 виконавець — %2 композицій + + + + + %1 artists - %2 songs + %1 виконавців — %2 композицій + + + + + 1 song + 1 піісня + + + + + + + %1 songs + %1 пісні + + + + + + + No search results + Немає результатів пошуку + + + + + + All Music + Уся музика + + + + + + + + + Time added + Час додано + + + + + + + Album + Альбом + + + + + + + Artist + Виконавець + + + + + Title + Назва + + + + Play All + Відтворити всі + + + + Artists + Виконавці + + + + Albums + Альбоми + + + + Custom + Користувацький + + + + + + Search Results + + + + + Songs + Пісні + + + + No result found + Нічого не знайдено + + + + MusicListDialog + + + Play All + Відтворити всі + + + + Shuffle + Перемішати + + + + MusicListInfoView + + + Play queue + Відтворити чергу + + + + Add to new playlist + Додати у новий список відтворення + + + + Pause + Пауза + + + Play Відтворити - + Add to playlist Додати у плейлист - + Display in file manager Відобразити у файловому менеджері - + + Remove from playlist + Видалити з плейлисту + + + + Delete from local disk + Видалити з локального диску + + + Song info Інформація про пісню - + + + Cancel + Скасувати + + + + Remove + Видалити + + + + Are you sure you want to remove %1? + Ви впевнені, що хочете видалити %1? + + + + Are you sure you want to remove the selected %1 songs? + Ви впевнені, що хочете видалити вибрані %1 пісні? + + + + Delete + Вилучити + + + Are you sure you want to delete %1? Ви впевнені, що хочете видалити %1? - - + + Are you sure you want to delete the selected %1 songs? Ви впевнені, що хочете видалити вибрані %1 пісні? - - Remove from playlist - Видалити з плейлисту + + + The song files contained will also be deleted + Файли пісень, які там зберігаються, також буде вилучено. + + + MusicListItem - - Delete from local disk - Видалити з локального диску + + Are you sure you want to delete this playlist? + Ви впевнені, що хочете видалити цей плейлист? - - Encoding - Кодування + + Cancel + Скасувати - + + Delete + Вилучити + + + + MusicListScrollArea + + + Library + Бібліотека + + + + Playlists + Списки відтворення + + + + MusicListView + + + My Favorites + + + + + + Are you sure you want to delete this playlist? + Ви впевнені, що хочете видалити цей плейлист? + + + + Cancel Відмінити - + + + + Delete Видалити - - Deleting the current song will also delete the song files contained - Видалення поточної пісні призведе також до видалення файлів пісні + + + Pause + Пауза - + + + Play + Відтворити + + + + + Rename + Перейменувати + + + + PlayListView + + Unknown artist Невідомий виконавець - + Unknown album Невідомий альбом - - - MusicListWidget - - No Music - Немає музики + + Play queue + Відтворити чергу - - No result found - Нічого не знайдено + + musicResult + - - Play All - Відтворити всі + + My favorites + Мої улюблені - - Time added - Час додано + + Add to new playlist + Додати у новий список відтворення - - Title - Назва + + Pause + Пауза - - Artist - Виконавець + + + Play + Відтворити - - Album name - Назва альбому + + Add to playlist + Додати у плейлист - - Custom - Користувацький + + Display in file manager + Відобразити у файловому менеджері - - - PlayListItem - - Are you sure you want to delete this playlist? - Ви впевнені, що хочете видалити цей плейлист? + Remove from playlist + Видалити з плейлисту + + + + Remove from play queue + + + + + Delete from local disk + Видалити з локального диску - + + Encoding + Кодування + + + + Song info + Інформація про пісню + + + + + Cancel + Скасувати + + + + Remove + Видалити + + + + Are you sure you want to remove %1? + Ви впевнені, що хочете видалити %1? + + + + Are you sure you want to remove the selected %1 songs? + Ви впевнені, що хочете видалити вибрані %1 пісні? + + + Delete Видалити - - Cancel - Відмінити + + Are you sure you want to delete %1? + Ви впевнені, що хочете видалити %1? + + + + + Are you sure you want to delete the selected %1 songs? + Ви впевнені, що хочете видалити вибрані %1 пісні? + + + + + The song files contained will also be deleted + Файли пісень, які там зберігаються, також буде вилучено. - PlayListView + PlayListWidget - - - Play - Відтворити + + + No songs + Немає пісень - - - Rename - Перейменувати + + No search results + Немає результатів пошуку - - - Delete - Видалити + + Play Queue + Відтворити чергу + + + + Empty + Пусто + + + + 1 song + 1 піісня + + + + %1 songs + %1 пісні + + + + Playlist + + + + Unknown album + Невідомий альбом + + + + + + Unknown artist + Невідомий виконавець PlaylistManager - + New playlist Новий плейлист - + + + + Albums + Альбоми + + + + + + Artists + Виконавці + + + + All Music Уся музика - + My favorites Мої улюблені - + Search result Результати пошуку - - - PlaylistWidget - - New playlist - Новий плейлист + + Play + Відтворити + + + + Music + Музика QApplication - - Deepin Music - Deepin Музика + + Music + Музика QObject - - Deepin Music - Deepin Музика - - Minimize to system tray Згорнути до лотка - Exit Deepin Music - Вийти з Deepin Music + Exit Music + Вийти з «Музики» @@ -570,20 +1128,150 @@ + SearchLyricsWidget + + + Find Lyrics + Знайти текст + + + + Title + Назва + + + + Artist + Виконавець + + + + Search + Пошук + + + SearchResult - - - Search "%1" in Deepin Music - Пошук "%1" у Deepin Музика + + Music + Музика + + + + Artists + Виконавці + + + + Albums + Альбоми + + + + Shortcut + + + Play + Відтворити + + + + Songs + Пісні + + + + Playlists + Списки відтворення + + + + Settings + Налаштування + + + + Play/Pause + Відтворення/Пауза + + + + Previous + Назад + + + + Next + Далі + + + + Volume Up + Збільшити гучність + + + + Volume Down + Зменшити гучність + + + + Mute + Вимкнути звук + + + + Favorite + Улюблені + + + + Unfavorite + Вилучити з вибраних + + + + Song info + Інформація про пісню + + + + New playlist + Новий плейлист + + + + Add music + Додати музику + + + + Rename playlist + Перейменувати список відтворення + + + + Remove from playlist + Видалити з плейлисту + + + + Help + Допомога + + + + Display shortcuts + Показати ярлики TitlebarWidget - + Search Пошук - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_vi.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_vi.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_vi.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_vi.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,179 +1,332 @@ - + + + CloseConfirmDialog - + Please select your operation - + - + Exit Thoát - + Minimize to system tray - + - + Do not ask again - + - + Cancel Hủy - + + Confirm + + + OK - OK + OK + + + + DequalizerDialog + + + Custom + Tùy biến + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + Footer - + Previous Trước - + Next Kế tiếp - + Play/Pause Chạy/Tạm dừng - + Favorite - + - + Lyrics - + + + + + Play Queue + - + Unknown Title - + - - - + + + Unknown artist - + - + Play Mode - - - - - Playlist - + - + List Loop - + - + Single Loop - + - + Shuffle - + ImportWidget - - Add folder - + + Open Folder + - - + + Add Music + + + + + Scan - + - - - %1 music directory or drag & drop music file to add music - + + + %1 music directory or drag music files here + - + Loading music, please wait... - + InfoDialog - + Title: - + - + Artist: - + - + Album: - + - + Type: Loại: - + Path: - + - + Unknown artist - + - + Unknown album - + - + Size: - + + + + + Basic info + - + Duration: - + LoadWidget - + Loading... Đang tải... @@ -183,17 +336,17 @@ Find lyrics - + Title - + Artist - + @@ -201,307 +354,738 @@ Tìm kiếm - + Back Trở lại - MainFrame + MUsicLyricWidget - - New playlist - + + No lyrics yet + + + + MainFrame - + Settings Cài đặt - - + + Exit Thoát - - Add folder - - - - - Add file - - - - + Dark theme - + - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + + Equalizer + - + Play/Pause Chạy/Tạm dừng - + Previous Trước - - Invalid or non-existent file - + + All music + - - Failed to import, no vaild music file found! - + + + OK + OK - - All music - + + Add playlist + - - - OK - OK + + Add music + - + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" - + + + + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + - + Next Kế tiếp - MusicListView + MusicListDataDelegate - - New playlist - + + + No songs + - - Play - + + + 1 song + - - Add to playlist - + + + %1 songs + + + + MusicListDataWidget - - Display in file manager - + + + + + + + + + + + No songs + - - Song info - + + + 1 album - 1 song + - - Are you sure you want to delete %1? - + + + + + %1 album - %2 songs + - - - Are you sure you want to delete the selected %1 songs? - + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + + + + + + + + + + Time added + + + + + + + + Album + + + + + + + + Artist + - + + + Title + + + + + Play All + + + + + Artists + + + + + Albums + + + + + Custom + Tùy biến + + + + + + Search Results + + + + + Songs + + + + + No result found + + + + + MusicListDialog + + + Play All + + + + + Shuffle + + + + + MusicListInfoView + + + Play queue + + + + + Add to new playlist + + + + + Pause + + + + + Play + + + + + Add to playlist + + + + + Display in file manager + + + + Remove from playlist - + - + Delete from local disk - + - - Encoding - + + Song info + - + + Cancel - Hủy + Hủy - + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + Delete - Xóa + Xóa - - Deleting the current song will also delete the song files contained - + + Are you sure you want to delete %1? + - - Unknown artist - + + + Are you sure you want to delete the selected %1 songs? + - - Unknown album - + + + The song files contained will also be deleted + - MusicListWidget + MusicListItem - - No Music - + + Are you sure you want to delete this playlist? + - - No result found - + + Cancel + Hủy - - Play All - + + Delete + Xóa + + + MusicListScrollArea - - Time added - + + Library + - - Title - + + Playlists + + + + + MusicListView + + + + Play + - - Artist - + + + Are you sure you want to delete this playlist? + - - Album name - + + My Favorites + - - Custom - Tùy biến + + + Cancel + Hủy + + + + + + + Delete + Xóa + + + + + Pause + + + + + + Rename + - PlayListItem + MusicListWidget - - Are you sure you want to delete this playlist? - + Custom + Tùy biến + + + PlayListItem - Delete - Xóa + Xóa - Cancel - Hủy + Hủy PlayListView - - + + Play queue + + + + + My favorites + + + + + Add to new playlist + + + + + Pause + + + + + Play - + - - - Rename - + + musicResult + + + + + Add to playlist + + + + + Display in file manager + + + + + Remove from play queue + + + + + Delete from local disk + - - + + Encoding + + + + + Song info + + + + + + Cancel + Hủy + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + + Delete Xóa + + + Unknown artist + + + + + Unknown album + + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + + + + + + + Unknown artist + + PlaylistManager - + New playlist - + + + + + + + Albums + - + + + + Artists + + + + + All Music - + - + My favorites - + - + Search result - + - - - PlaylistWidget - - New playlist - + + Play + + + + + Music + QApplication - Deepin Music - Trình nghe nhạc Deepin + Trình nghe nhạc Deepin + + + + Music + QObject - Deepin Music - Trình nghe nhạc Deepin + Trình nghe nhạc Deepin Minimize to system tray - + - Exit Deepin Music - + Exit Music + @@ -511,27 +1095,27 @@ Enable fade in/out - + Remember playback position - + Close Main Window - + Basic - + Play - + @@ -541,7 +1125,7 @@ Restore Defaults - + @@ -570,20 +1154,150 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + + + + + Artist + + + + + Search + Tìm kiếm + + + SearchResult - - - Search "%1" in Deepin Music - + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + + + + + Songs + + + + + Playlists + + + + + Settings + Cài đặt + + + + Play/Pause + Chạy/Tạm dừng + + + + Previous + Trước + + + + Next + Kế tiếp + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + + + + + Unfavorite + + + + + Song info + + + + + New playlist + + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search Tìm kiếm - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_zh_CN.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_zh_CN.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_zh_CN.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_zh_CN.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,269 @@ - + + + CloseConfirmDialog - - Please select your operation - 请选择您的操作 - - - + Exit 退出 - + Minimize to system tray 最小化到系统托盘 - + Do not ask again 不再询问 - + + Please select your operation + 请选择您的操作 + + + Cancel 取消 - - OK + + Confirm 确定 + DequalizerDialog + + + Custom + 自定义 + + + Flat + 单调 + + + + Classical + 古典 + + + + Club + 俱乐部 + + + + Dance + 舞曲 + + + Full bass + 全低音 + + + Full bass and treble + 全低音和高音 + + + Full treble + 全高音 + + + + Headphones + 耳机 + + + Large Hall + 大厅 + + + + Monophony + 单调 + + + + Full Bass + 全低音 + + + + Full Bass and Treble + 全低音和高音 + + + + Full Treble + 全高音 + + + + Hall + 大厅 + + + + Live + 实况 + + + + Party + 聚会 + + + + Pop + 流行 + + + + Reggae + 雷盖 + + + + Rock + 摇滚 + + + + Ska + 斯卡 + + + + Soft + 柔和 + + + + Soft Rock + 慢摇 + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + 音效已保存 + + + Soft rock + 慢摇 + + + + Techno + 电子乐 + + + + + Equalizer + 均衡器 + + + Open + + + + Close + + + + + Save + 保存 + + + + Preamplifier + 前置放大 + + + + Restore Defaults + 恢复默认 + + + Footer - + + Unknown Title + 未知名称 + + + + + + Unknown artist + 未知歌手 + + + Previous 上一首 - + Next 下一首 - + Play/Pause 播放/暂停 - + Favorite 收藏 - + Lyrics 歌词 - - Unknown Title - 未知名称 - - - - - - Unknown artist - 未知歌手 - - - + Play Mode 播放模式 - - Playlist - 歌单 + + Play Queue + 播放队列 - + List Loop 列表循环 - + Single Loop 单曲循环 - + Shuffle 随机播放 @@ -100,24 +271,29 @@ ImportWidget - - Add folder - 添加文件夹 + + Open Folder + 添加歌曲路径 - - + + Add Music + 添加歌曲文件 + + + + Scan 扫描 - - - %1 music directory or drag & drop music file to add music - 您可以%1音乐目录或拖拽音乐文件添加音乐 + + + %1 music directory or drag music files here + %1音乐目录或拖拽音乐文件来添加音乐 - + Loading music, please wait... 正在加载音乐,请稍候…… @@ -125,55 +301,60 @@ InfoDialog - + + Basic info + 基本信息 + + + Title: 歌曲: - + Artist: 歌手: - + Album: 专辑: - + Type: 文件类型: - + + Size: + 文件大小: + + + + Duration: + 时长: + + + Path: 文件路径: - + Unknown artist 未知歌手 - + Unknown album 未知专辑 - - - Size: - 文件大小: - - - - Duration: - 时长: - LoadWidget - + Loading... 加载中...... @@ -201,307 +382,716 @@ 搜索 - + Back 返回 - MainFrame + MUsicLyricWidget - - New playlist - 新建歌单 + + No lyrics yet + 还没有歌词哦 + + + MainFrame - - Settings - 设置 + + Add playlist + 添加新歌单 - - - Exit - 退出 + + Add music + 添加音乐 - - Add folder - 添加文件夹 + + Equalizer + 均衡器 - - Add file - 添加文件 + + Settings + 设置 - + Dark theme 深色主题 - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - 深度音乐是一款设计美观,功能简洁的本地音乐播放器。支持播放时查看歌词、播放无损音乐、自定义创建歌单等功能。 + + + Exit + 退出 + + + + Music is a local music player with beautiful design and simple functions. + 音乐是一款设计美观,功能简洁的本地音乐播放器。 + + + + + + + + Music + 音乐 - + Play/Pause 播放/暂停 - + Previous 上一首 - - Invalid or non-existent file - 文件无效或不存在 + + Next + 下一首 - - Failed to import, no vaild music file found! - 导入失败,未找到有效的音乐文件! + + Successfully added to "%1" + 成功添加到“%1” - - All music - 所有音乐 + + Already added to the playlist + 已添加此音乐 - - + + 1 song added + 成功添加1首音乐 + + + + %1 songs added + 成功添加%1首音乐 + + + + File is invalid or does not exist, load failed + 文件无效或不存在,加载失败 + + + + OK 确定 - - Successfully added to "%1" - 成功添加到“%1” + + Import failed, no valid music file found + 导入失败,未找到有效的音乐文件 - - Next - 下一首 + + All music + 所有音乐 - MusicListView + MusicListDataDelegate - - New playlist - 新建歌单 + + + No songs + 无歌曲 + + + + + 1 song + 1首歌曲 + + + + + %1 songs + %1首歌曲 + + + + MusicListDataWidget + + + + + + + + + + + + No songs + 无歌曲 + + + + + 1 album - 1 song + 1部专辑 - 1首歌曲 + + + + + + + %1 album - %2 songs + %1部专辑 - %2首歌曲 + + + + + %1 albums - %2 songs + %1部专辑 - %2首歌曲 + + + + + 1 artist - 1 song + 1位演唱者 - 1首歌曲 + + + + + %1 artist - %2 songs + %1位演唱者 - %2首歌曲 + + + + + %1 artists - %2 songs + %1位演唱者 - %2首歌曲 + + + + + 1 song + 1首歌曲 + + + + + + + %1 songs + %1首歌曲 + + + + + + + No search results + 无搜索结果 + + + + + + All Music + 所有音乐 + + + + + + + + + Time added + 添加时间 + + + + + + + Album + 专辑名称 + + + + + + + Artist + 歌手名称 + + + + + Title + 歌曲名称 + + + + Play All + 播放所有 + + + + Artists + 演唱者 + + + + Albums + 专辑 + + + + Custom + 自定义 + + + + + + Search Results + 搜索结果 + + + + Songs + 歌曲 + + + + No result found + 无搜索结果 + + + + MusicListDialog + + + Play All + 播放所有 + + + + Shuffle + 随机播放 + + + + MusicListInfoView + + + Play queue + 播放队列 + + + + Add to new playlist + 添加到新歌单 + + + + Pause + 暂停 - + Play 播放 - + Add to playlist 添加到歌单 - + Display in file manager 在文件管理器中显示 - + + Remove from playlist + 从歌单中删除 + + + + Delete from local disk + 从本地删除 + + + Song info 歌曲信息 - + + + Cancel + 取消 + + + + Remove + 移除 + + + + Are you sure you want to remove %1? + 您确定要移除%1吗? + + + + Are you sure you want to remove the selected %1 songs? + 您确定要移除选中的%1首歌曲吗? + + + + Delete + 删除 + + + Are you sure you want to delete %1? 您确定要删除 %1 吗? - - + + Are you sure you want to delete the selected %1 songs? 您确定要删除选中的%1首歌曲吗? - - Remove from playlist - 从歌单中删除 + + + The song files contained will also be deleted + 这些歌曲所包含的歌曲文件也将被删除 + + + MusicListItem - - Delete from local disk - 从本地删除 + + Are you sure you want to delete this playlist? + 您确定要删除此歌单吗? - - Encoding - 编码方式 + + Cancel + 取消 + + + + Delete + 删除 + + + + MusicListScrollArea + + + Library + 音乐库 + + + + Playlists + 我的歌单 + + + MusicListView - + + My Favorites + 我的收藏 + + + + + Are you sure you want to delete this playlist? + 您确定要删除此歌单吗? + + + + Cancel 取消 - + + + + Delete 删除 - - Deleting the current song will also delete the song files contained - 删除当前歌曲将会删除所包含的歌曲文件 + + + Pause + 暂停 - + + + Play + 播放 + + + + + Rename + 重命名 + + + + PlayListView + + Unknown artist 未知歌手 - + Unknown album 未知专辑 - - - MusicListWidget - - No Music - 当前歌单为空 + + Play queue + 播放队列 - - No result found - 无搜索结果 + + musicResult + - - Play All - 播放所有 + + My favorites + 我的收藏 - - Time added - 添加时间 + + Add to new playlist + 添加到新歌单 - - Title - 歌曲名称 + + Pause + 暂停 - - Artist - 歌手名称 + + + Play + 播放 - - Album name - 专辑名称 + + Add to playlist + 添加到歌单 - - Custom - 自定义 + + Display in file manager + 在文件管理器中显示 - - - PlayListItem - - Are you sure you want to delete this playlist? - 您确定要删除此歌单吗? + Remove from playlist + 从歌单中删除 - - Delete - 删除 + + Remove from play queue + 从播放队列中删除 + + + + Delete from local disk + 从本地删除 - + + Encoding + 编码方式 + + + + Song info + 歌曲信息 + + + + Cancel 取消 - - - PlayListView - - - Play - 播放 + + Remove + 移除 - - - Rename - 重命名 + + Are you sure you want to remove %1? + 您确定要移除%1吗? + + + + Are you sure you want to remove the selected %1 songs? + 您确定要移除选中的%1首歌曲吗? - - + Delete 删除 + + + Are you sure you want to delete %1? + 您确定要删除 %1 吗? + + + + + Are you sure you want to delete the selected %1 songs? + 您确定要删除选中的%1首歌曲吗? + + + + + The song files contained will also be deleted + 这些歌曲所包含的歌曲文件也将被删除 + + + + PlayListWidget + + + + No songs + 无歌曲 + + + + No search results + 无搜索结果 + + + + Play Queue + 播放队列 + + + + Empty + 清空列表 + + + + 1 song + 1首歌曲 + + + + %1 songs + %1首歌曲 + + + + Playlist + + + + Unknown album + 未知专辑 + + + + + + Unknown artist + 未知歌手 + PlaylistManager - + New playlist 新建歌单 - + + + + Albums + 专辑 + + + + + + Artists + 演唱者 + + + + All Music 所有音乐 - + My favorites 我的收藏 - + Search result 搜索结果 - - - PlaylistWidget - - New playlist - 新建歌单 + + Play + 播放 + + + + Music + 歌曲 QApplication - - Deepin Music - 深度音乐 + + Music + 音乐 QObject - - Deepin Music - 深度音乐 - - Minimize to system tray 最小化到系统托盘 - Exit Deepin Music - 退出深度音乐 + Exit Music + 退出音乐 @@ -511,7 +1101,7 @@ Enable fade in/out - 启用淡入淡出 + 开启淡入淡出 @@ -570,20 +1160,150 @@ + SearchLyricsWidget + + + Find Lyrics + 搜索歌词 + + + + Title + 歌曲名称 + + + + Artist + 歌手名称 + + + + Search + 搜索 + + + SearchResult - - - Search "%1" in Deepin Music - 在深度音乐中搜索“%1” + + Music + 歌曲 + + + + Artists + 演唱者 + + + + Albums + 专辑 + + + + Shortcut + + + Play + 播放 + + + + Songs + 歌曲 + + + + Playlists + 歌单 + + + + Settings + 设置 + + + + Play/Pause + 播放/暂停 + + + + Previous + 上一首 + + + + Next + 下一首 + + + + Volume Up + 音量增大 + + + + Volume Down + 音量减小 + + + + Mute + 静音 + + + + Favorite + 收藏 + + + + Unfavorite + 取消收藏 + + + + Song info + 歌曲信息 + + + + New playlist + 新建歌单 + + + + Add music + 添加音乐 + + + + Rename playlist + 重命名歌单 + + + + Remove from playlist + 从歌单中删除 + + + + Help + 帮助 + + + + Display shortcuts + 显示快捷键 TitlebarWidget - + Search 搜索 - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_zh_HK.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_zh_HK.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_zh_HK.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_zh_HK.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,123 +1,279 @@ - + + + CloseConfirmDialog - + Please select your operation - + - + Exit 離開 - + Minimize to system tray - + - + Do not ask again - + - + Cancel 取消 - + + Confirm + + + OK - 確定 + 確定 + + + + DequalizerDialog + + + Custom + 自訂 + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + 恢復預設值 Footer - + Previous 上一首 - + Next 下一步 - + Play/Pause 暫停/繼續 - + Favorite 最愛 - + Lyrics 歌詞設置 - + + Play Queue + + + + Unknown Title 未知標題 - - - + + + Unknown artist 未知藝術家 - + Play Mode 播放模式 - Playlist - 播放清單 + 播放清單 - + List Loop - + - + Single Loop - + - + Shuffle - + ImportWidget - Add folder - 新增資料夾 + 新增資料夾 + + + + Open Folder + + + + + Add Music + - - + + Scan 掃描 - - - %1 music directory or drag & drop music file to add music - + + + %1 music directory or drag music files here + - + Loading music, please wait... 載入音樂中,請稍候… @@ -125,47 +281,52 @@ InfoDialog - + Title: 標題: - + Artist: 藝人: - + Album: 專輯: - + Type: 類型: - + Path: 路徑: - + Unknown artist 未知藝術家 - + Unknown album 未知專輯 - + Size: 大小: - + + Basic info + + + + Duration: 長度: @@ -173,7 +334,7 @@ LoadWidget - + Loading... 載入中… @@ -183,7 +344,7 @@ Find lyrics - + @@ -201,307 +362,861 @@ 搜尋 - + Back 返回 + MUsicLyricWidget + + + No lyrics yet + + + + MainFrame - New playlist - 新增播放清單 + 新增播放清單 + + + + Add music + + + + + Equalizer + - + Settings 設置 - - + + Exit 離開 - Add folder - 新增資料夾 + 新增資料夾 - Add file - 新增檔案 + 新增檔案 - + Dark theme 深色主題 - - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - - - - + Play/Pause 暫停/繼續 - + Previous 上一首 - Invalid or non-existent file - 無效或不存在的檔案 - - - - Failed to import, no vaild music file found! - + 無效或不存在的檔案 - + All music 所有音樂 - - + + OK 確定 - + + Add playlist + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" 成功新增到「%1」 - + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next 下一步 - MusicListView + MusicListDataDelegate + + + + No songs + + + + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + No Music + 沒有音樂 + + + + No result found + 沒有搜尋結果 + + + + + + All Music + 所有音樂 + + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + + + + Time added + + + + + + + + Album + + + + + + + + Artist + 藝術家 + + + + Songs + + + + + + + Search Results + + + + Album name + 專輯名稱 + + + + + Title + 標題 + + + + Play All + 播放全部 + + + + Artists + + + + + Albums + + + + + Custom + 自訂 + + + + MusicListDialog + + + Play All + 播放全部 + + + + Shuffle + + + + + MusicListInfoView - New playlist - 新增播放清單 + 新增播放清單 + + + + Play queue + - + + Add to new playlist + + + + + Pause + + + + Play - 播放 + 播放 - + Add to playlist - 加到播放清單 + 加到播放清單 - + Display in file manager - 於檔案管理員顯示 + 於檔案管理員顯示 - + + Remove from playlist + 從播放清單中移除 + + + + Delete from local disk + 從本機儲存刪除 + + + Song info - 歌曲資訊 + 歌曲資訊 + + + + + Cancel + 取消 + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + - + + Delete + 刪除 + + + Are you sure you want to delete %1? - + - - + + Are you sure you want to delete the selected %1 songs? - + + + + + + The song files contained will also be deleted + + + + + MusicListItem + + + Are you sure you want to delete this playlist? + + + + + Cancel + 取消 + + + + Delete + 刪除 + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + + MusicListView + + New playlist + 新增播放清單 + + + + My Favorites + + + + + + Pause + + + + + + Play + 播放 + + + + + Rename + 重新命名 + + + + + Are you sure you want to delete this playlist? + + + + Add to playlist + 加到播放清單 + + + Display in file manager + 於檔案管理員顯示 + + + Song info + 歌曲資訊 - Remove from playlist - 從播放清單中移除 + 從播放清單中移除 - Delete from local disk - 從本機儲存刪除 + 從本機儲存刪除 - Encoding - 編碼 + 編碼 - + + Cancel 取消 - + + + + Delete 刪除 - - Deleting the current song will also delete the song files contained - - - - Unknown artist - 未知藝術家 + 未知藝術家 - Unknown album - 未知專輯 + 未知專輯 MusicListWidget - No Music - 沒有音樂 + 沒有音樂 - No result found - 沒有搜尋結果 + 沒有搜尋結果 - Play All - 播放全部 + 播放全部 - - Time added - - - - Title - 標題 + 標題 - Artist - 藝術家 + 藝術家 - Album name - 專輯名稱 + 專輯名稱 - Custom - 自訂 + 自訂 PlayListItem - - Are you sure you want to delete this playlist? - - - - Delete - 刪除 + 刪除 - Cancel - 取消 + 取消 PlayListView - - + New playlist + 新增播放清單 + + + + Play queue + + + + + musicResult + + + + + My favorites + 我的最愛 + + + + Add to new playlist + + + + + Pause + + + + + Play 播放 - - + + Add to playlist + 加到播放清單 + + + + Display in file manager + 於檔案管理員顯示 + + + Remove from playlist + 從播放清單中移除 + + + + Remove from play queue + + + + + Delete from local disk + 從本機儲存刪除 + + + + Encoding + 編碼 + + + + Song info + 歌曲資訊 + + + + + Cancel + 取消 + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + Rename - 重新命名 + 重新命名 - - + Delete 刪除 + + + Unknown artist + 未知藝術家 + + + + Unknown album + 未知專輯 + + + + PlayListWidget + + No Music + 沒有音樂 + + + No result found + 沒有搜尋結果 + + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + 未知專輯 + + + + + + Unknown artist + 未知藝術家 + PlaylistManager - + New playlist 新增播放清單 - + Artist + 藝術家 + + + + + + Albums + + + + + + + Artists + + + + + All Music 所有音樂 - + My favorites 我的最愛 - + Search result 搜尋結果 + + + Play + 播放 + + + + Music + + PlaylistWidget - New playlist - 新增播放清單 + 新增播放清單 QApplication - Deepin Music - Deepin 音樂 + Deepin 音樂 + + + + Music + QObject - Deepin Music - Deepin 音樂 + Deepin 音樂 Minimize to system tray - + - Exit Deepin Music - 退出 Deepin 音樂 + 退出 Deepin 音樂 + + + + Exit Music + @@ -511,7 +1226,7 @@ Enable fade in/out - + @@ -570,20 +1285,154 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + 標題 + + + + Artist + 藝術家 + + + + Search + 搜尋 + + + SearchResult - - Search "%1" in Deepin Music - 於 Deepin 音樂搜尋「%1」 + 於 Deepin 音樂搜尋「%1」 + + + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + 播放 + + + + Songs + + + + + Playlists + + + + + Settings + 設置 + + + + Play/Pause + 暫停/繼續 + + + + Previous + 上一首 + + + + Next + 下一步 + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + 最愛 + + + + Unfavorite + + + + + Song info + 歌曲資訊 + + + + New playlist + 新增播放清單 + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + 從播放清單中移除 + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search 搜尋 - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_zh_TW.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_zh_TW.ts --- deepin-music-5.0.1+ds/src/music-player/translations/deepin-music_zh_TW.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/deepin-music_zh_TW.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1,98 +1,245 @@ - + + + CloseConfirmDialog - + Please select your operation 請選擇動作 - + Exit 退出程式 - + Minimize to system tray 最小化到系統匣 - + Do not ask again - + 請勿再次詢問 - + Cancel 取消 - + + Confirm + + + OK - 確定 + 確定 + + + + DequalizerDialog + + + Custom + 自訂 + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + 還原預設值 Footer - + Previous 上一曲 - + Next 下一曲 - + Play/Pause 播放/暫停 - + Favorite 我的最愛 - + Lyrics 顯示歌詞 - + + Play Queue + + + + Unknown Title 未知標題 - - - + + + Unknown artist 未知作家 - + Play Mode 播放模式 - Playlist - 播放列表 + 播放列表 - + List Loop 列表循環 - + Single Loop 單曲循環 - + Shuffle 隨機播放 @@ -100,24 +247,37 @@ ImportWidget - Add folder - 加入資料夾 + 加入資料夾 + + + + Open Folder + + + + + Add Music + - - + + Scan 掃描 - - + + + %1 music directory or drag music files here + + + %1 music directory or drag & drop music file to add music - %1 音樂資料夾或拖拽音樂檔案到此加入音樂 + %1 音樂資料夾或拖拽音樂檔案到此加入音樂 - + Loading music, please wait... 正在載入音樂,請稍候 @@ -125,47 +285,52 @@ InfoDialog - + Title: 歌曲標題: - + Artist: 作家名稱: - + Album: 專輯名稱: - + Type: 類型: - + Path: 位置: - + Unknown artist 未知作家 - + Unknown album 未知專輯 - + Size: 檔案大小: - + + Basic info + + + + Duration: 歌曲長度: @@ -173,7 +338,7 @@ LoadWidget - + Loading... 正在載入 @@ -183,7 +348,7 @@ Find lyrics - + 搜尋歌詞 @@ -201,297 +366,851 @@ 搜尋 - + Back 返回 + MUsicLyricWidget + + + No lyrics yet + + + + MainFrame - New playlist - 新增播放列表 + 新增播放列表 - + Settings 設定 - - + + Exit 離開 - Add folder - 加入資料夾 + 加入資料夾 - Add file - 加入檔案 + 加入檔案 - + Dark theme 深色模式 - Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. - + Deepin 音樂是個漂亮且簡單,用來播放本機音樂的音樂播放器。其支援播放時顯示歌詞、播放無損音樂和自訂播放列表等等。 - + Play/Pause 播放/暫停 - + Previous 上一曲 - Invalid or non-existent file - 檔案格式錯誤或遺失 + 檔案格式錯誤或遺失 - Failed to import, no vaild music file found! - 無法匯入,找不到有效的音樂檔案! + 無法匯入,找不到有效的音樂檔案! - + All music 所有音樂 - - + + OK 確定 - + + Add playlist + + + + + Add music + + + + + Equalizer + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + Successfully added to "%1" 成功加入至「%1」 - + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + Import failed, no valid music file found + + + + Next 下一曲 + MusicListDataDelegate + + + + No songs + + + + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + 所有音樂 + + + + + + + + + Time added + 加入時間 + + + + + + + Album + + + + + + + + Artist + 作家名稱 + + + + + Title + 歌曲標題 + + + + Play All + 全部播放 + + + + Artists + + + + + Albums + + + + + Custom + 自訂 + + + + + + Search Results + + + + + Songs + + + + + No result found + 找不到結果 + + + + MusicListDialog + + + Play All + 全部播放 + + + + Shuffle + 隨機播放 + + + + MusicListInfoView + + + Play queue + + + + + Add to new playlist + + + + + Pause + + + + + Play + 播放 + + + + Add to playlist + 加入播放列表 + + + + Display in file manager + 在檔案管理器中顯示 + + + + Remove from playlist + 從播放列表移除 + + + + Delete from local disk + 從本機硬碟中移除 + + + + Song info + 歌曲資訊 + + + + + Cancel + 取消 + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + 刪除 + + + + Are you sure you want to delete %1? + 確定刪除 %1? + + + + + Are you sure you want to delete the selected %1 songs? + 確定刪除 %1 首選取音樂? + + + + + The song files contained will also be deleted + + + + + MusicListItem + + + Are you sure you want to delete this playlist? + 確定刪除此播放列表? + + + + Cancel + 取消 + + + + Delete + 刪除 + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + MusicListView - New playlist - 新增播放列表 + 新增播放列表 - + + Play 播放 - Add to playlist - 加入播放列表 + 加入播放列表 - Display in file manager - 在檔案管理器中顯示 + 在檔案管理器中顯示 - Song info - 歌曲資訊 + 歌曲資訊 - Are you sure you want to delete %1? - + 確定刪除 %1? - - Are you sure you want to delete the selected %1 songs? - + 確定刪除 %1 首選取音樂? - Remove from playlist - 從播放列表移除 + 從播放列表移除 - Delete from local disk - 從本機硬碟中移除 + 從本機硬碟中移除 - Encoding - 編碼 + 編碼 + + + + My Favorites + - + + + Are you sure you want to delete this playlist? + 確定刪除此播放列表? + + + + Cancel 取消 - + + + + Delete 刪除 - + + + Pause + + + + + + Rename + 重新命名 + + Deleting the current song will also delete the song files contained - 刪除歌曲也會刪除電腦中的檔案 + 刪除歌曲也會刪除電腦中的檔案 - Unknown artist - 未知作家 + 未知作家 - Unknown album - 未知專輯 + 未知專輯 MusicListWidget - No Music - 沒有音樂 + 沒有音樂 - No result found - 找不到結果 + 找不到結果 - Play All - 全部播放 + 全部播放 - Time added - 加入時間 + 加入時間 - Title - 歌曲標題 + 歌曲標題 - Artist - 作家名稱 + 作家名稱 - Album name - 專輯名稱 + 專輯名稱 - Custom - 自訂 + 自訂 PlayListItem - Are you sure you want to delete this playlist? - + 確定刪除此播放列表? - Delete - 刪除 + 刪除 - Cancel - 取消 + 取消 PlayListView - - + + Play queue + + + + + musicResult + + + + + My favorites + 我的最愛 + + + + Add to new playlist + + + + + Pause + + + + + Play 播放 - - + + Add to playlist + 加入播放列表 + + + + Display in file manager + 在檔案管理器中顯示 + + + Remove from playlist + 從播放列表移除 + + + + Remove from play queue + + + + + Delete from local disk + 從本機硬碟中移除 + + + + Encoding + 編碼 + + + + Song info + 歌曲資訊 + + + + + Cancel + 取消 + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Are you sure you want to delete %1? + 確定刪除 %1? + + + + + Are you sure you want to delete the selected %1 songs? + 確定刪除 %1 首選取音樂? + + + + + The song files contained will also be deleted + + + Rename - 重新命名 + 重新命名 - - + Delete 刪除 + + + Unknown artist + 未知作家 + + + + Unknown album + 未知專輯 + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + 未知專輯 + + + + + + Unknown artist + 未知作家 + PlaylistManager - + New playlist 新播放列表 - + Artist + 作家名稱 + + + + + + Albums + + + + + + + Artists + + + + + All Music 所有音樂 - + My favorites 我的最愛 - + Search result 搜尋結果 + + + Play + 播放 + + + + Music + + PlaylistWidget - New playlist - 新增播放列表 + 新增播放列表 QApplication - Deepin Music - Deepin 音樂 + Deepin 音樂 + + + + Music + QObject - Deepin Music - Deepin 音樂 + Deepin 音樂 @@ -499,9 +1218,13 @@ 最小化到系統匣 - Exit Deepin Music - 關閉 Deepin 音樂 + 關閉 Deepin 音樂 + + + + Exit Music + @@ -511,7 +1234,7 @@ Enable fade in/out - + 開啟淡入淡出 @@ -570,20 +1293,154 @@ + SearchLyricsWidget + + + Find Lyrics + + + + + Title + 歌曲標題 + + + + Artist + 作家名稱 + + + + Search + 搜尋 + + + SearchResult - - Search "%1" in Deepin Music - 在 Deepin 音樂中搜尋「%1」 + 在 Deepin 音樂中搜尋「%1」 + + + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + 播放 + + + + Songs + + + + + Playlists + + + + + Settings + 設定 + + + + Play/Pause + 播放/暫停 + + + + Previous + 上一曲 + + + + Next + 下一曲 + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + 我的最愛 + + + + Unfavorite + + + + + Song info + 歌曲資訊 + + + + New playlist + + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + 從播放列表移除 + + + + Help + + + + + Display shortcuts + TitlebarWidget - + Search 搜尋 - \ No newline at end of file + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/desktop/desktop_am_ET.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/desktop/desktop_am_ET.ts --- deepin-music-5.0.1+ds/src/music-player/translations/desktop/desktop_am_ET.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/desktop/desktop_am_ET.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -desktopDeepin Musicዲፕኢን ሙዚቃMusicሙዚቃNext trackየሚቀጥለው ተረኛPlay your music collectionየእርስዎን የ ሙዚቃ ስብስብ ያጫውቱPlay/Pause trackተረኛ ማጫወቻ/ማስቆሚያPrevious trackያለፈው ተረኛ \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/desktop/desktop_el.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/desktop/desktop_el.ts --- deepin-music-5.0.1+ds/src/music-player/translations/desktop/desktop_el.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/desktop/desktop_el.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1 +1 @@ -desktopDeepin MusicDeepin MουσικήMusicΜουσικήNext trackPlay your music collectionΑναπαραγάγετε τη μουσική σας συλλογήPlay/Pause trackPrevious track \ No newline at end of file +desktopDeepin MusicΜουσική DeepinMusicΜουσικήNext trackΕπόμενο κομμάτιPlay your music collectionΑναπαραγάγετε τη μουσική σας συλλογήPlay/Pause trackΑναπαραγωγή/Παύση κομματιούPrevious trackΠροηγούμενο κομμάτι \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/desktop/desktop_en_US.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/desktop/desktop_en_US.ts --- deepin-music-5.0.1+ds/src/music-player/translations/desktop/desktop_en_US.ts 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/desktop/desktop_en_US.ts 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,1273 @@ + + + + + CloseConfirmDialog + + + Exit + + + + + Minimize to system tray + + + + + Do not ask again + + + + + Please select your operation + + + + + Cancel + + + + + Confirm + + + + + DequalizerDialog + + + Custom + + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + + + + + Footer + + + Unknown Title + + + + + + + Unknown artist + + + + + Previous + + + + + Next + + + + + Play/Pause + + + + + Favorite + + + + + Lyrics + + + + + Play Mode + + + + + Play Queue + + + + + List Loop + + + + + Single Loop + + + + + Shuffle + + + + + ImportWidget + + + Open Folder + + + + + Add Music + + + + + + Scan + + + + + + %1 music directory or drag music files here + + + + + Loading music, please wait... + + + + + InfoDialog + + + Basic info + + + + + Title: + + + + + Artist: + + + + + Album: + + + + + Type: + + + + + Size: + + + + + Duration: + + + + + Path: + + + + + Unknown artist + + + + + Unknown album + + + + + LoadWidget + + + Loading... + + + + + LyricWidget + + + Find lyrics + + + + + Title + + + + + Artist + + + + + Search + + + + + Back + + + + + MUsicLyricWidget + + + No lyrics yet + + + + + MainFrame + + + Add playlist + + + + + Add music + + + + + Equalizer + + + + + Settings + + + + + Dark theme + + + + + + Exit + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + + + + + Play/Pause + + + + + Previous + + + + + Next + + + + + Successfully added to "%1" + + + + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + + OK + + + + + Import failed, no valid music file found + + + + + All music + + + + + MusicListDataDelegate + + + + No songs + + + + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + + + + + + + + + + Time added + + + + + + + + Album + + + + + + + + Artist + + + + + + Title + + + + + Play All + + + + + Artists + + + + + Albums + + + + + Custom + + + + + + + Search Results + + + + + Songs + + + + + No result found + + + + + MusicListDialog + + + Play All + + + + + Shuffle + + + + + MusicListInfoView + + + Play queue + + + + + Add to new playlist + + + + + Pause + + + + + Play + + + + + Add to playlist + + + + + Display in file manager + + + + + Remove from playlist + + + + + Delete from local disk + + + + + Song info + + + + + + Cancel + + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + + + MusicListItem + + + Are you sure you want to delete this playlist? + + + + + Cancel + + + + + Delete + + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + + MusicListView + + + My Favorites + + + + + + Are you sure you want to delete this playlist? + + + + + + Cancel + + + + + + + + Delete + + + + + + Pause + + + + + + Play + + + + + + Rename + + + + + PlayListView + + + Unknown artist + + + + + Unknown album + + + + + Play queue + + + + + My favorites + + + + + Add to new playlist + + + + + Pause + + + + + + Play + + + + + musicResult + + + + + Add to playlist + + + + + Display in file manager + + + + + Remove from play queue + + + + + Delete from local disk + + + + + Encoding + + + + + Song info + + + + + + Cancel + + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + + + + + + + Unknown artist + + + + + PlaylistManager + + + New playlist + + + + + + + Albums + + + + + + + Artists + + + + + + All Music + + + + + My favorites + + + + + Search result + + + + + Play + + + + + Music + + + + + QApplication + + + Music + + + + + QObject + + + Minimize to system tray + + + + + Exit Music + + + + + Autoplay + + + + + Enable fade in/out + + + + + Remember playback position + + + + + Close Main Window + + + + + Basic + + + + + Play + + + + + Shortcuts + + + + + Restore Defaults + + + + + Next + + + + + Play/Pause + + + + + Previous + + + + + Volume down + + + + + Volume up + + + + + SearchLyricsWidget + + + Find Lyrics + + + + + Title + + + + + Artist + + + + + Search + + + + + SearchResult + + + Music + + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + + + + + Songs + + + + + Playlists + + + + + Settings + + + + + Play/Pause + + + + + Previous + + + + + Next + + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + + + + + Unfavorite + + + + + Song info + + + + + New playlist + + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + + + + + Help + + + + + Display shortcuts + + + + + TitlebarWidget + + + Search + + + + diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/desktop/desktop_es_419.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/desktop/desktop_es_419.ts --- deepin-music-5.0.1+ds/src/music-player/translations/desktop/desktop_es_419.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/desktop/desktop_es_419.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -desktopDeepin MusicReproductor de Música DeepinMusicMúsicaNext trackPista siguientePlay your music collectionReproducir tu colección de músicaPlay/Pause trackReproducir/Pausar PistaPrevious trackPista anterior \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/desktop/desktop_fr.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/desktop/desktop_fr.ts --- deepin-music-5.0.1+ds/src/music-player/translations/desktop/desktop_fr.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/desktop/desktop_fr.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1 +1 @@ -desktopDeepin MusicDeepin Lecteur de MusiqueMusicMusiqueNext trackPiste SuivantePlay your music collectionLire votre collection de musiquePlay/Pause trackLire/Pause le fichierPrevious trackPiste précédente \ No newline at end of file +desktopDeepin MusicDeepin MusicMusicMusiqueNext trackPiste suivantePlay your music collectionLire votre collection de musiquePlay/Pause trackLire / Mettre en pause la pistePrevious trackPiste précédente \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/desktop/desktop_hi_IN.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/desktop/desktop_hi_IN.ts --- deepin-music-5.0.1+ds/src/music-player/translations/desktop/desktop_hi_IN.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/desktop/desktop_hi_IN.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1 +1 @@ -desktopDeepin Musicडीपइन संगीतMusicसंगीतNext trackPlay your music collectionसंगीत संग्रह चलायेंPlay/Pause trackPrevious track \ No newline at end of file +desktopDeepin Musicडीपइन संगीतMusicसंगीतNext trackअगला गानाPlay your music collectionसंगीत संग्रह चलायेंPlay/Pause trackगाना प्ले/पौज़ करेंPrevious trackपिछला गाना \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/desktop/desktop_ko.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/desktop/desktop_ko.ts --- deepin-music-5.0.1+ds/src/music-player/translations/desktop/desktop_ko.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/desktop/desktop_ko.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1 +1 @@ -desktopDeepin MusicDeepin MusicMusic음악Next trackPlay your music collection당신의 음악 컬렉션을 재생하세요Play/Pause trackPrevious track \ No newline at end of file +desktopDeepin MusicDeepin 음악Music음악Next track다음 트랙Play your music collection음악 컬렉션 재생Play/Pause track트랙 재생/일시정지Previous track이전 트랙 \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/desktop/desktop_tr.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/desktop/desktop_tr.ts --- deepin-music-5.0.1+ds/src/music-player/translations/desktop/desktop_tr.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/desktop/desktop_tr.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1 +1 @@ -desktopDeepin MusicDeepin MüzikMusicMüzikNext trackSonraki parçaPlay your music collectionMüzik koleksiyonunuzu oynatınPlay/Pause trackParçayı Oynat/DuraklatPrevious trackÖnceki parça \ No newline at end of file +desktopDeepin MusicDeepin MüzikMusicMüzikNext trackSonraki parçaPlay your music collectionMüzik koleksiyonunuzu oynatınPlay/Pause trackParçayı oynat/duraklatPrevious trackÖnceki parça \ No newline at end of file diff -Nru deepin-music-5.0.1+ds/src/music-player/translations/desktop/desktop_zh_CN.ts deepin-music-6.0.1.54+ds.1/src/music-player/translations/desktop/desktop_zh_CN.ts --- deepin-music-5.0.1+ds/src/music-player/translations/desktop/desktop_zh_CN.ts 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/translations/desktop/desktop_zh_CN.ts 2020-07-14 12:05:00.000000000 +0000 @@ -1 +1,1304 @@ -desktopDeepin Music深度音乐Music音乐Next track下一首Play your music collection为您播放本地及网络音频流Play/Pause track暂停/继续Previous track上一首 \ No newline at end of file + + + + + CloseConfirmDialog + + + Exit + + + + + Minimize to system tray + + + + + Do not ask again + + + + + Please select your operation + + + + + Cancel + + + + + Confirm + + + + + DequalizerDialog + + + Custom + + + + + Classical + + + + + Club + + + + + Dance + + + + + Headphones + + + + + Monophony + + + + + Full Bass + + + + + Full Bass and Treble + + + + + Full Treble + + + + + Hall + + + + + Live + + + + + Party + + + + + Pop + + + + + Reggae + + + + + Rock + + + + + Ska + + + + + Soft + + + + + Soft Rock + + + + + + ON + + + + + + OFF + + + + + + Sound Effects Saved + + + + + Techno + + + + + + Equalizer + + + + + Save + + + + + Preamplifier + + + + + Restore Defaults + + + + + Footer + + + Unknown Title + + + + + + + Unknown artist + + + + + Previous + + + + + Next + + + + + Play/Pause + + + + + Favorite + + + + + Lyrics + + + + + Play Mode + + + + + Play Queue + + + + + List Loop + + + + + Single Loop + + + + + Shuffle + + + + + ImportWidget + + + Open Folder + + + + + Add Music + + + + + + Scan + + + + + + %1 music directory or drag music files here + + + + + Loading music, please wait... + + + + + InfoDialog + + + Basic info + + + + + Title: + + + + + Artist: + + + + + Album: + + + + + Type: + + + + + Size: + + + + + Duration: + + + + + Path: + + + + + Unknown artist + + + + + Unknown album + + + + + LoadWidget + + + Loading... + + + + + LyricWidget + + + Find lyrics + + + + + Title + + + + + Artist + + + + + Search + + + + + Back + + + + + MUsicLyricWidget + + + No lyrics yet + + + + + MainFrame + + + Add playlist + + + + + Add music + + + + + Equalizer + + + + + Settings + + + + + Dark theme + + + + + + Exit + + + + + Music is a local music player with beautiful design and simple functions. + + + + + + + + + Music + 音乐 + + + + Play/Pause + + + + + Previous + + + + + Next + + + + + Successfully added to "%1" + + + + + Already added to the playlist + + + + + 1 song added + + + + + %1 songs added + + + + + File is invalid or does not exist, load failed + + + + + + OK + + + + + Import failed, no valid music file found + + + + + All music + + + + + MusicListDataDelegate + + + + No songs + + + + + + 1 song + + + + + + %1 songs + + + + + MusicListDataWidget + + + + + + + + + + + + No songs + + + + + + 1 album - 1 song + + + + + + + + %1 album - %2 songs + + + + + + %1 albums - %2 songs + + + + + + 1 artist - 1 song + + + + + + %1 artist - %2 songs + + + + + + %1 artists - %2 songs + + + + + + 1 song + + + + + + + + %1 songs + + + + + + + + No search results + + + + + + + All Music + + + + + + + + + + Time added + + + + + + + + Album + + + + + + + + Artist + + + + + + Title + + + + + Play All + + + + Music + 音乐 + + + + Artists + + + + + Albums + + + + + Custom + + + + + + + Search Results + + + + + Songs + + + + + No result found + + + + + MusicListDialog + + + Play All + + + + + Shuffle + + + + + MusicListInfoView + + + Play queue + + + + + Add to new playlist + + + + + Pause + + + + + Play + + + + + Add to playlist + + + + + Display in file manager + + + + + Remove from playlist + + + + + Delete from local disk + + + + + Song info + + + + + + Cancel + + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + + + MusicListItem + + + Are you sure you want to delete this playlist? + + + + + Cancel + + + + + Delete + + + + + MusicListScrollArea + + + Library + + + + + Playlists + + + + + MusicListView + + + My Favorites + + + + + + Are you sure you want to delete this playlist? + + + + + + Cancel + + + + + + + + Delete + + + + + + Pause + + + + + + Play + + + + + + Rename + + + + + PlayListView + + + Unknown artist + + + + + Unknown album + + + + + Play queue + + + + + My favorites + + + + + Add to new playlist + + + + + Pause + + + + + + Play + + + + + musicResult + + + + + Add to playlist + + + + + Display in file manager + + + + + Remove from play queue + + + + + Delete from local disk + + + + + Encoding + + + + + Song info + + + + + + Cancel + + + + + Remove + + + + + Are you sure you want to remove %1? + + + + + Are you sure you want to remove the selected %1 songs? + + + + + Delete + + + + + Are you sure you want to delete %1? + + + + + + Are you sure you want to delete the selected %1 songs? + + + + + + The song files contained will also be deleted + + + + + PlayListWidget + + + + No songs + + + + + No search results + + + + + Play Queue + + + + + Empty + + + + + 1 song + + + + + %1 songs + + + + + Playlist + + + + Unknown album + + + + + + + Unknown artist + + + + + PlaylistManager + + + New playlist + + + + + + + Albums + + + + + + + Artists + + + + + + All Music + + + + + My favorites + + + + + Search result + + + + + Play + + + + + Music + 音乐 + + + + QApplication + + + Music + 音乐 + + + + QObject + + + Minimize to system tray + + + + + Exit Music + + + + + Autoplay + + + + + Enable fade in/out + + + + + Remember playback position + + + + + Close Main Window + + + + + Basic + + + + + Play + + + + + Shortcuts + + + + + Restore Defaults + + + + + Next + + + + + Play/Pause + + + + + Previous + + + + + Volume down + + + + + Volume up + + + + + SearchLyricsWidget + + + Find Lyrics + + + + + Title + + + + + Artist + + + + + Search + + + + + SearchResult + + + Music + 音乐 + + + + Artists + + + + + Albums + + + + + Shortcut + + + Play + + + + + Songs + + + + + Playlists + + + + + Settings + + + + + Play/Pause + + + + + Previous + + + + + Next + + + + + Volume Up + + + + + Volume Down + + + + + Mute + + + + + Favorite + + + + + Unfavorite + + + + + Song info + + + + + New playlist + + + + + Add music + + + + + Rename playlist + + + + + Remove from playlist + + + + + Help + + + + + Display shortcuts + + + + + TitlebarWidget + + + Search + + + + + desktop + + Deepin Music + 音乐 + + + Music + 音乐 + + + Next track + 下一首 + + + Play your music collection + 为您播放本地及网络音频流 + + + Play/Pause track + 暂停/继续 + + + Previous track + 上一首 + + + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/footerwidget.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/footerwidget.cpp --- deepin-music-5.0.1+ds/src/music-player/view/footerwidget.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/footerwidget.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -23,31 +23,43 @@ #include #include -#include #include #include -#include #include #include -#include #include #include -#include -#include +#include +#include +#include +#include +#include +#include + +#include #include "../musicapp.h" #include "../core/playlistmanager.h" #include "../core/player.h" +#include "../core/metasearchservice.h" +#include "../core/musicsettings.h" +#include "../core/volumemonitoring.h" +#include "../core/util/threadpool.h" #include "widget/filter.h" -#include "widget/slider.h" #include "widget/modebuttom.h" #include "widget/label.h" #include "widget/cover.h" #include "widget/soundvolume.h" +#include "widget/musicimagebutton.h" +#include "widget/musiciconbutton.h" -DWIDGET_USE_NAMESPACE +#include "widget/musicpixmapbutton.h" +#include "widget/waveform.h" +#include "playlistwidget.h" +#include "widget/musicboxbutton.h" +#include "widget/tooltips.h" static const char *sPropertyFavourite = "fav"; static const char *sPropertyPlayStatus = "playstatus"; @@ -56,6 +68,8 @@ static const QString sPlayStatusValuePause = "pause"; static const QString sPlayStatusValueStop = "stop"; +DGUI_USE_NAMESPACE + class FooterPrivate { public: @@ -69,44 +83,51 @@ void installHint(QWidget *w, QWidget *hint); void initConnection(); - Cover *cover = nullptr; + DBlurEffectWidget *forwardWidget = nullptr; Label *title = nullptr; Label *artist = nullptr; - QPushButton *btCover = nullptr; - QPushButton *btPlay = nullptr; - QPushButton *btPrev = nullptr; - QPushButton *btNext = nullptr; - QPushButton *btFavorite = nullptr; - QPushButton *btLyric = nullptr; - QPushButton *btPlayList = nullptr; - ModeButton *btPlayMode = nullptr; - QPushButton *btSound = nullptr; - Slider *progress = nullptr; - SoundVolume *volSlider = nullptr; - QFrame *ctlWidget = nullptr; + MusicPixmapButton *btCover = nullptr; + MusicBoxButton *btPlay = nullptr; + MusicBoxButton *btPrev = nullptr; + MusicBoxButton *btNext = nullptr; + MusicIconButton *btFavorite = nullptr; + MusicIconButton *btLyric = nullptr; + MusicIconButton *btPlayList = nullptr; + ModeButton *btPlayMode = nullptr; + MusicIconButton *btSound = nullptr; + SoundVolume *volSlider = nullptr; + DButtonBox *ctlWidget = nullptr; + Waveform *waveform = nullptr; + PlayListWidget *playListWidget = nullptr; + bool showPlaylistFlag = false; HintFilter *hintFilter = nullptr; HoverShadowFilter *hoverShadowFilter = nullptr; - PlaylistPtr activingPlaylist; - MetaPtr activingMeta; + PlaylistPtr activingPlaylist = nullptr; + MetaPtr activingMeta = nullptr; - QString defaultCover = ""; + QString defaultCover = ":/common/image/info_cover.svg"; int mode = -1; bool enableMove = false; + int m_type = 1; + + bool btPlayingStatus = false; + + VolumeMonitoring volumeMonitoring; + int m_Volume = 0; + int m_Mute = 0; Footer *q_ptr; Q_DECLARE_PUBLIC(Footer) }; void FooterPrivate::updateQssProperty(QWidget *w, const char *name, const QVariant &value) { - Q_Q(Footer); + //Q_Q(Footer); w->setProperty(name, value); - q->style()->unpolish(w); - q->style()->polish(w); w->update(); } @@ -114,10 +135,11 @@ { Q_Q(Footer); // TODO: parent must be mainframe - auto hintWidget = new Dtk::Widget::DToast(q->parentWidget()); - hintWidget->layout()->setContentsMargins(10, 0, 10, 0); + auto hintWidget = new ToolTips("", q->parentWidget()); + hintWidget->hide(); hintWidget->setText(hintstr); hintWidget->setFixedHeight(32); +// hintWidget->setForegroundRole(DPalette::TextTitle); installHint(w, hintWidget); } @@ -134,154 +156,249 @@ q->connect(btPlayMode, &ModeButton::modeChanged, q, [ = ](int mode) { Q_EMIT q->modeChanged(mode); - auto hintWidget = btPlayMode->property("HintWidget").value(); + auto hintWidget = btPlayMode->property("HintWidget").value(); hintFilter->showHitsFor(btPlayMode, hintWidget); }); - q->connect(progress, &Slider::valueAccpet, q, [ = ](int value) { - auto range = progress->maximum() - progress->minimum(); +// q->connect(progress, &Slider::valueAccpet, q, [ = ](int value) { +// auto range = progress->maximum() - progress->minimum(); +// Q_ASSERT(range != 0); +// Q_EMIT q->changeProgress(value, range); +// }); + + q->connect(waveform, &Waveform::valueAccpet, q, [ = ](int value) { + auto range = waveform->maximum() - waveform->minimum(); Q_ASSERT(range != 0); Q_EMIT q->changeProgress(value, range); }); - q->connect(progress, &Slider::realHeightChanged, q, [ = ](qreal value) { - Q_EMIT q->progressRealHeightChanged(value); - }); - q->connect(btPlay, &QPushButton::released, q, [ = ]() { - auto status = btPlay->property(sPropertyPlayStatus).toString(); - if (status == sPlayStatusValuePlaying) { - Q_EMIT q->pause(activingPlaylist, activingMeta); - } else if (status == sPlayStatusValuePause) { - Q_EMIT q->resume(activingPlaylist, activingMeta); - } else { - Q_EMIT q->play(activingPlaylist, activingMeta); - } + q->connect(btPlay, &DPushButton::released, q, [ = ]() { + q->onTogglePlayButton(); }); - q->connect(btPrev, &QPushButton::released, q, [ = ]() { + q->connect(btPrev, &DPushButton::released, q, [ = ]() { Q_EMIT q->prev(activingPlaylist, activingMeta); }); - q->connect(btNext, &QPushButton::released, q, [ = ]() { + q->connect(btNext, &DPushButton::released, q, [ = ]() { Q_EMIT q->next(activingPlaylist, activingMeta); }); - q->connect(btFavorite, &QPushButton::released, q, [ = ]() { - Q_EMIT q->toggleFavourite(activingMeta); + q->connect(btFavorite, &DPushButton::released, q, [ = ]() { + if (activingMeta != nullptr) + Q_EMIT q->toggleFavourite(activingMeta); }); q->connect(title, &Label::clicked, q, [ = ](bool) { Q_EMIT q->locateMusic(activingPlaylist, activingMeta); }); - q->connect(btLyric, &QPushButton::released, q, [ = ]() { + q->connect(btLyric, &DPushButton::released, q, [ = ]() { Q_EMIT q->toggleLyricView(); }); - q->connect(btPlayList, &QPushButton::released, q, [ = ]() { + q->connect(btPlayList, &DPushButton::released, q, [ = ]() { Q_EMIT q->togglePlaylist(); }); - q->connect(btSound, &QPushButton::pressed, q, [ = ]() { - Q_EMIT q->toggleMute(); + q->connect(btSound, &DPushButton::pressed, q, [ = ]() { + Q_EMIT q->localToggleMute(); }); q->connect(volSlider, &SoundVolume::volumeChanged, q, [ = ](int vol) { q->onVolumeChanged(vol); + if (m_Mute) { + m_Mute = false; + Q_EMIT q->toggleMute(); + } + m_Volume = vol; Q_EMIT q->volumeChanged(vol); }); q->connect(q, &Footer::mouseMoving, q, [ = ](Qt::MouseButton) { hintFilter->hideAll(); }); + + q->connect(q, &Footer::audioBufferProbed, waveform, &Waveform::onAudioBufferProbed); + q->connect(q, &Footer::metaBuffer, waveform, &Waveform::onAudioBuffer); + + q->connect(&volumeMonitoring, &VolumeMonitoring::volumeChanged, q, [ = ](int vol) { + q->onVolumeChanged(vol); + }); + + q->connect(&volumeMonitoring, &VolumeMonitoring::muteChanged, q, [ = ](bool mute) { + q->onMutedChanged(mute); + }); } Footer::Footer(QWidget *parent) : - QFrame(parent), d_ptr(new FooterPrivate(this)) + DFloatingWidget(parent), d_ptr(new FooterPrivate(this)) { Q_D(Footer); + //setFixedHeight(70); setFocusPolicy(Qt::ClickFocus); setObjectName("Footer"); + this->setBlurBackgroundEnabled(true); - DThemeManager::instance()->registerWidget(this); +// this->blurBackground()->setBlurRectXRadius(18); +// this->blurBackground()->setBlurRectYRadius(18); + this->blurBackground()->setRadius(30); + this->blurBackground()->setBlurEnabled(true); + this->blurBackground()->setMode(DBlurEffectWidget::GaussianBlur); + QColor backMaskColor(255, 255, 255, 140); + this->blurBackground()->setMaskColor(backMaskColor); + + d->forwardWidget = new DBlurEffectWidget(this); +// d->forwardWidget->setBlurBackgroundEnabled(true); + d->forwardWidget->setBlurRectXRadius(18); + d->forwardWidget->setBlurRectYRadius(18); + d->forwardWidget->setRadius(30); + d->forwardWidget->setBlurEnabled(true); + d->forwardWidget->setMode(DBlurEffectWidget::GaussianBlur); + + QColor maskColor(255, 255, 255, 76); + d->forwardWidget->setMaskColor(maskColor); + + auto backLayout = new QVBoxLayout(this); + backLayout->setSpacing(0); + backLayout->setContentsMargins(0, 0, 0, 0); + backLayout->addWidget(d->forwardWidget); - auto mainVBoxlayout = new QVBoxLayout(this); + auto mainVBoxlayout = new QVBoxLayout(d->forwardWidget); mainVBoxlayout->setSpacing(0); - mainVBoxlayout->setContentsMargins(0, 0, 0, 0); + mainVBoxlayout->setContentsMargins(10, 0, 0, 10); - auto hoverFilter = new HoverFilter(this); + auto downWidget = new DWidget(); + auto layout = new QHBoxLayout(downWidget); + layout->setContentsMargins(0, 0, 10, 0); +// layout->setSpacing(10); - d->progress = new Slider(Qt::Horizontal); - d->progress->setObjectName("FooterProgress"); - d->progress->setFixedHeight(6); - d->progress->setMinimum(0); - d->progress->setMaximum(1000); - d->progress->setValue(0); - - auto layout = new QHBoxLayout(); - layout->setContentsMargins(10, 0, 20, 0); - layout->setSpacing(20); - - auto stackedLayout = new QStackedLayout; - stackedLayout->setStackingMode(QStackedLayout::StackAll); - - d->cover = new Cover(this); - d->cover->setObjectName("FooterCover"); - d->cover->setFixedSize(40, 40); - d->cover->setRadius(0); - - d->btCover = new QPushButton(); + d->btCover = new MusicPixmapButton(); d->btCover->setObjectName("FooterCoverHover"); -// d->btCover->setFixedSize(40, 40); + d->btCover->setFixedSize(50, 50); + d->btCover->setIconSize(QSize(50, 50)); - stackedLayout->addWidget(d->cover); - stackedLayout->addWidget(d->btCover); - d->btCover->installEventFilter(hoverFilter); d->title = new Label; + auto titleFont = d->title->font(); + titleFont.setFamily("SourceHanSansSC"); + titleFont.setWeight(QFont::Normal); + titleFont.setPixelSize(12); + d->title->setFont(titleFont); d->title->setObjectName("FooterTitle"); - d->title->setMaximumWidth(240); + d->title->setMaximumWidth(140); d->title->setText(tr("Unknown Title")); // d->title->installEventFilter(hoverFilter); +// auto titlePl = d->title->palette(); +// titlePl.setColor(DPalette::WindowText, QColor("#000000")); +// d->title->setPalette(titlePl); + + d->title->setForegroundRole(DPalette::BrightText); d->artist = new Label; + auto artistFont = d->artist->font(); + artistFont.setFamily("SourceHanSansSC"); + artistFont.setWeight(QFont::Normal); + artistFont.setPixelSize(11); + d->artist->setFont(titleFont); d->artist->setObjectName("FooterArtist"); - d->artist->setMaximumWidth(240); + d->artist->setMaximumWidth(140); d->artist->setText(tr("Unknown artist")); - - d->btPlay = new QPushButton; - d->btPlay->setObjectName("FooterActionPlay"); - d->btPlay->setFixedSize(30, 30); - - d->btPrev = new QPushButton; + auto artistPl = d->title->palette(); + QColor artistColor = artistPl.color(DPalette::BrightText); + artistColor.setAlphaF(0.6); + artistPl.setColor(DPalette::WindowText, artistColor); + d->artist->setPalette(artistPl); + d->artist->setForegroundRole(DPalette::WindowText); +// d->artist->setForegroundRole(DPalette::BrightText); + + d->btPlay = new MusicBoxButton("", ":/mpimage/light/normal/play_normal.svg", + ":/mpimage/light/normal/play_normal.svg", + ":/mpimage/light/press/play_press.svg"); + //d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/light/normal/play_normal.svg")); + d->btPlay->setIconSize(QSize(36, 36)); + d->btPlay->setFixedSize(40, 50); + + d->btPrev = new MusicBoxButton("", ":/mpimage/light/normal/last_normal.svg", + ":/mpimage/light/normal/last_normal.svg", + ":/mpimage/light/press/last_press.svg"); + //d->btPrev->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/light/normal/last_normal.svg")); + d->btPrev->setIconSize(QSize(36, 36)); d->btPrev->setObjectName("FooterActionPrev"); - d->btPrev->setFixedSize(30, 30); + d->btPrev->setFixedSize(40, 50); - d->btNext = new QPushButton; + d->btNext = new MusicBoxButton("", ":/mpimage/light/normal/next_normal.svg", + ":/mpimage/light/normal/next_normal.svg", + ":/mpimage/light/press/next_press.svg"); + //d->btNext->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/light/normal/next_normal.svg")); + d->btNext->setIconSize(QSize(36, 36)); d->btNext->setObjectName("FooterActionNext"); - d->btNext->setFixedSize(30, 30); + d->btNext->setFixedSize(40, 50); - d->btFavorite = new QPushButton; + d->btFavorite = new MusicIconButton(":/mpimage/light/normal/collection_normal.svg", + ":/mpimage/light/normal/collection_normal.svg", + ":/mpimage/light/press/collection_press.svg"); + d->btFavorite->setPropertyPic(sPropertyFavourite, QVariant(true), + ":/mpimage/light/checked/collection1_checked.svg", + ":/mpimage/light/checked/collection1_checked.svg", + ":/mpimage/light/press/collection_press.svg"); d->btFavorite->setObjectName("FooterActionFavorite"); - d->btFavorite->setFixedSize(24, 24); + d->btFavorite->setFixedSize(50, 50); + d->btFavorite->setTransparent(false); - d->btLyric = new QPushButton; + d->btLyric = new MusicIconButton(":/mpimage/light/normal/lyric_normal.svg", + ":/mpimage/light/hover/lyric_hover.svg", + ":/mpimage/light/press/lyric_press.svg", + ":/mpimage/light/checked/lyric_checked.svg"); d->btLyric->setObjectName("FooterActionLyric"); - d->btLyric->setFixedSize(24, 24); + d->btLyric->setFixedSize(50, 50); + d->btLyric->setTransparent(false); + d->btLyric->setCheckable(true); QStringList modes; - modes /*<< ":/image/sequence"*/ - << ":/image/repeat_all" - << ":/image/repeat_single" - << ":/image/shuffle"; + modes << ":/mpimage/light/normal/sequential_loop_normal.svg" + << ":/mpimage/light/normal/single_tune_circulation_normal.svg" + << ":/mpimage/light/normal/cross_cycling_normal.svg"; + QStringList pressModes; + pressModes << ":/mpimage/light/press/sequential_loop_press.svg" + << ":/mpimage/light/press/single_tune_circulation_press.svg" + << ":/mpimage/light/press/cross_cycling_press.svg"; d->btPlayMode = new ModeButton; d->btPlayMode->setObjectName("FooterActionPlayMode"); - d->btPlayMode->setFixedSize(24, 24); - d->btPlayMode->setModeIcons(modes); - - d->btSound = new QPushButton; + d->btPlayMode->setFixedSize(50, 50); + d->btPlayMode->setModeIcons(modes, pressModes); + d->btPlayMode->setTransparent(false); + + d->btSound = new MusicIconButton(":/mpimage/light/normal/volume_normal.svg", + ":/mpimage/light/hover/volume_hover.svg", + ":/mpimage/light/press/volume_press.svg", + ":/mpimage/light/checked/volume_checked.svg"); + d->btSound->setPropertyPic("volume", QVariant("mid"), + ":/mpimage/light/normal/volume_mid_normal.svg", + ":/mpimage/light/hover/volume_mid_hover.svg", + ":/mpimage/light/press/volume_mid_press.svg", + ":/mpimage/light/checked/volume_mid_checked.svg"); + d->btSound->setPropertyPic("volume", QVariant("low"), + ":/mpimage/light/normal/volume_low_normal.svg", + ":/mpimage/light/hover/volume_low_hover.svg", + ":/mpimage/light/press/volume_low_press.svg", + ":/mpimage/light/checked/volume_low_checked.svg"); + d->btSound->setPropertyPic("volume", QVariant("mute"), + ":/mpimage/light/normal/mute_normal.svg", + ":/mpimage/light/normal/mute_normal.svg", + ":/mpimage/light/press/mute_press.svg", + ":/mpimage/light/checked/mute_checked.svg"); d->btSound->setObjectName("FooterActionSound"); - d->btSound->setFixedSize(24, 24); + d->btSound->setFixedSize(50, 50); + d->btSound->setTransparent(false); d->btSound->setProperty("volume", "mid"); + d->btSound->setCheckable(true); + d->btSound->setAutoChecked(true); - d->btPlayList = new QPushButton; + d->btPlayList = new MusicIconButton(":/mpimage/light/normal/playlist_normal.svg", + ":/mpimage/light/hover/playlist_hover.svg", + ":/mpimage/light/press/playlist_press.svg", + ":/mpimage/checked/press/playlist_checked.svg"); d->btPlayList->setObjectName("FooterActionPlayList"); - d->btPlayList->setFixedSize(24, 24); + d->btPlayList->setFixedSize(50, 50); + d->btPlayList->setTransparent(false); + d->btPlayList->setCheckable(true); +// d->btPlayList->hide(); d->hoverShadowFilter = new HoverShadowFilter; d->title->installEventFilter(d->hoverShadowFilter); @@ -293,7 +410,16 @@ d->installTipHint(d->btFavorite, tr("Favorite")); d->installTipHint(d->btLyric, tr("Lyrics")); d->installTipHint(d->btPlayMode, tr("Play Mode")); - d->installTipHint(d->btPlayList, tr("Playlist")); + d->installTipHint(d->btPlayList, tr("Play Queue")); + +// d->btPrev->setToolTip(tr("Previous")); +// d->btNext->setToolTip(tr("Next")); +// d->btPlay->setToolTip(tr("Play/Pause")); +// d->btFavorite->setToolTip(tr("Favorite")); +// d->btLyric->setToolTip(tr("Lyrics")); +// d->btPlayMode->setToolTip(tr("Play Mode")); +// d->btPlayList->setToolTip(tr("Playlist")); + d->volSlider = new SoundVolume(this->parentWidget()); d->volSlider->hide(); d->volSlider->setProperty("DelayHide", true); @@ -303,68 +429,68 @@ auto musicMetaLayout = new QVBoxLayout; musicMetaLayout->setContentsMargins(0, 0, 0, 0); musicMetaLayout->setSpacing(0); + musicMetaLayout->addStretch(100); musicMetaLayout->addWidget(d->title); musicMetaLayout->addWidget(d->artist); + musicMetaLayout->addStretch(100); - auto metaWidget = new QFrame; -// metaWidget->setStyleSheet("border: 1px solid red;"); - auto metaLayout = new QHBoxLayout(metaWidget); + auto metaLayout = new QHBoxLayout(); metaLayout->setContentsMargins(0, 0, 0, 0); - metaLayout->setSpacing(0); - metaLayout->addLayout(stackedLayout); - metaLayout->addSpacing(10); - metaLayout->addLayout(musicMetaLayout, 0); - metaLayout->addStretch(); - - d->ctlWidget = new QFrame(this); -// d->ctlWidget->setStyleSheet("border: 1px solid red;"); - auto ctlLayout = new QHBoxLayout(d->ctlWidget); - ctlLayout->setMargin(0); - ctlLayout->setSpacing(30); - ctlLayout->addWidget(d->btPrev, 0, Qt::AlignCenter); - ctlLayout->addWidget(d->btPlay, 0, Qt::AlignCenter); - ctlLayout->addWidget(d->btNext, 0, Qt::AlignCenter); - d->ctlWidget->adjustSize(); +// metaLayout->setSpacing(10); + metaLayout->addWidget(d->btCover); + metaLayout->addLayout(musicMetaLayout); + + d->ctlWidget = new DButtonBox(this); + d->ctlWidget->setFixedHeight(50); + QList allCtlButtons; + allCtlButtons.append(d->btPrev); + allCtlButtons.append(d->btPlay); + allCtlButtons.append(d->btNext); + d->ctlWidget->setButtonList(allCtlButtons, false); + + d->waveform = new Waveform(Qt::Horizontal, static_cast(parent), this); + d->waveform->setMinimum(0); + d->waveform->setMaximum(1000); + d->waveform->setValue(0); + d->waveform->adjustSize(); auto actWidget = new QWidget; auto actLayout = new QHBoxLayout(actWidget); actLayout->setMargin(0); - actLayout->setSpacing(20); +// actLayout->setSpacing(10); actLayout->addWidget(d->btFavorite, 0, Qt::AlignRight | Qt::AlignVCenter); actLayout->addWidget(d->btLyric, 0, Qt::AlignRight | Qt::AlignVCenter); actLayout->addWidget(d->btPlayMode, 0, Qt::AlignRight | Qt::AlignVCenter); actLayout->addWidget(d->btSound, 0, Qt::AlignRight | Qt::AlignVCenter); actLayout->addWidget(d->btPlayList, 0, Qt::AlignRight | Qt::AlignVCenter); - QSizePolicy sp(QSizePolicy::Preferred, QSizePolicy::Preferred); - sp.setHorizontalStretch(33); - metaWidget->setSizePolicy(sp); - actWidget->setSizePolicy(sp); - - layout->addWidget(metaWidget, 0, Qt::AlignLeft | Qt::AlignVCenter); - layout->addStretch(); -// layout->addWidget(d->ctlWidget, 0, Qt::AlignCenter); - layout->addStretch(); +// QSizePolicy sp(QSizePolicy::Preferred, QSizePolicy::Preferred); +// sp.setHorizontalStretch(33); +// metaWidget->setSizePolicy(sp); +// actWidget->setSizePolicy(sp); + + layout->addWidget(d->ctlWidget, 0); + layout->addLayout(metaLayout); + layout->addWidget(d->waveform, 100); layout->addWidget(actWidget, 0, Qt::AlignRight | Qt::AlignVCenter); - mainVBoxlayout->addWidget(d->progress); - - auto controlFrame = new QFrame; - controlFrame->setObjectName("FooterControlFrame"); - controlFrame->setFixedHeight(60 - d->progress->height() / 2); - controlFrame->setLayout(layout); + d->playListWidget = new PlayListWidget(d->forwardWidget); +// d->playListWidget->setContentsMargins(0, 0, 0, 0); + d->playListWidget->hide(); +// mainVBoxlayout->addWidget(d->playListWidget); mainVBoxlayout->addStretch(); - mainVBoxlayout->addWidget(controlFrame); + mainVBoxlayout->addWidget(downWidget, 0, Qt::AlignBottom); d->title->hide(); d->artist->hide(); - d->btPrev->hide(); - d->btNext->hide(); +// d->btPrev->hide(); +// d->btNext->hide(); d->btFavorite->hide(); d->btLyric->hide(); d->btPrev->setFocusPolicy(Qt::NoFocus); + d->btPlay->setFocusPolicy(Qt::NoFocus); d->btNext->setFocusPolicy(Qt::NoFocus); d->btFavorite->setFocusPolicy(Qt::NoFocus); d->btLyric->setFocusPolicy(Qt::NoFocus); @@ -372,9 +498,13 @@ d->btSound->setFocusPolicy(Qt::NoFocus); d->btPlayList->setFocusPolicy(Qt::NoFocus); + d->btPrev->setDisabled(true); + d->btNext->setDisabled(true); + d->btPlay->setDisabled(true); + d->initConnection(); - connect(d->btCover, &QPushButton::clicked, this, [ = ](bool) { + connect(d->btCover, &DPushButton::clicked, this, [ = ](bool) { Q_EMIT toggleLyricView(); if (d->btCover->property("viewname").toString() != "lyric") { d->updateQssProperty(d->btCover, "viewname", "lyric"); @@ -382,10 +512,27 @@ d->updateQssProperty(d->btCover, "viewname", "musiclist"); } }); + if (d->m_type == 1) { + d->btPlay->setPropertyPic(":/mpimage/light/normal/play_normal.svg", + ":/mpimage/light/normal/play_normal.svg", + ":/mpimage/light/press/play_press.svg"); + //d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/light/normal/play_press.svg")); + } else { + d->btPlay->setPropertyPic(":/mpimage/dark/normal/play_normal.svg", + ":/mpimage/dark/normal/play_normal.svg", + ":/mpimage/dark/press/play_press.svg"); + //d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/dark/normal/play_press.svg")); + } + d->btCover->setIcon(Dtk::Widget::DHiDPIHelper::loadNxPixmap(d->defaultCover)); + int themeType = DGuiApplicationHelper::instance()->themeType(); + slotTheme(themeType); + d->m_Mute = MusicSettings::value("base.play.mute").toBool(); + d->m_Volume = MusicSettings::value("base.play.volume").toInt(); + onMutedChanged(d->m_Mute); + onVolumeChanged(d->m_Volume); - d->updateQssProperty(d->btPlay, sPropertyPlayStatus, sPlayStatusValueStop); - d->updateQssProperty(this, sPropertyPlayStatus, sPlayStatusValueStop); - d->cover->setCoverPixmap(Dtk::Widget::DHiDPIHelper::loadNxPixmap(d->defaultCover)); + ThreadPool::instance()->moveToNewThread(&d->volumeMonitoring); + d->volumeMonitoring.start(); } Footer::~Footer() @@ -393,10 +540,25 @@ } -int Footer::progressExtentHeight() const +void Footer::setCurPlaylist(PlaylistPtr playlist) { - Q_D(const Footer); - return (d->progress->height()) / 2; + Q_D(Footer); + d->activingPlaylist = playlist; + if (d->activingPlaylist != nullptr) { + if (d->activingPlaylist->allmusic().isEmpty()) { + d->btPlay->setDisabled(true); + d->btPrev->setDisabled(true); + d->btNext->setDisabled(true); + } else if (d->activingPlaylist->allmusic().size() == 1) { + d->btPrev->setDisabled(true); + d->btNext->setDisabled(true); + d->btPlay->setDisabled(false); + } else { + d->btPrev->setDisabled(false); + d->btNext->setDisabled(false); + d->btPlay->setDisabled(false); + } + } } void Footer::enableControl(bool enable) @@ -404,33 +566,33 @@ Q_D(Footer); d->btCover->setEnabled(enable); - d->btPrev->setEnabled(enable); - d->btNext->setEnabled(enable); +// d->btPrev->setEnabled(enable); +// d->btNext->setEnabled(enable); d->btFavorite->setEnabled(enable); d->btLyric->setEnabled(enable); d->btPlayList->setEnabled(enable); d->btPlayMode->setEnabled(enable); d->btSound->setEnabled(enable); - d->progress->setEnabled(enable); + d->waveform->setEnabled(enable); - d->cover->blockSignals(!enable); + d->btCover->blockSignals(!enable); d->title->blockSignals(!enable); d->artist->blockSignals(!enable); } -void Footer::initData(PlaylistPtr current, int mode) -{ - Q_D(Footer); - d->mode = mode; - d->activingPlaylist = current; - d->btPlayMode->setMode(mode); -} +//void Footer::initData(PlaylistPtr current, int mode) +//{ +// Q_D(Footer); +// d->mode = mode; +// d->activingPlaylist = current; +// d->btPlayMode->setMode(mode); +//} void Footer::setViewname(const QString &viewname) { Q_D(Footer); setProperty("viewname", viewname); - d->progress->setProperty("viewname", viewname); + d->waveform->setProperty("viewname", viewname); } QString Footer::defaultCover() const @@ -439,13 +601,132 @@ return d->defaultCover; } +void Footer::setLyricButtonChecked(bool flag) +{ + Q_D(const Footer); + if (d->btLyric->isChecked() != flag) { + d->btLyric->blockSignals(true); + d->btLyric->setChecked(flag); + d->btLyric->blockSignals(false); + } +} + +void Footer::setPlaylistButtonChecked(bool flag) +{ + Q_D(const Footer); + if (d->btPlayList->isChecked() != flag) { + d->btPlayList->blockSignals(true); + d->btPlayList->setChecked(flag); + d->btPlayList->blockSignals(false); + } +} + +PlayListWidget *Footer::getPlayListWidget() +{ + Q_D(const Footer); + return d->playListWidget; +} + +void Footer::showPlayListWidget(int width, int height, bool changFlag) +{ + Q_D(Footer); + if (changFlag) { + if (d->showPlaylistFlag) { + d->playListWidget->hide(); + setGeometry(5, height - 86, width - 10, 80); + d->playListWidget->setGeometry(0, 0, width - 10, 0); + } else { + d->playListWidget->show(); + setGeometry(5, height - 429, width - 10, 423); + d->playListWidget->setGeometry(0, 0, width - 10, 314); + } + d->showPlaylistFlag = (!d->showPlaylistFlag); + } else { + if (d->showPlaylistFlag) { + setGeometry(5, height - 429, width - 10, 423); + d->playListWidget->setGeometry(0, 0, width - 10, 314); + } else { + setGeometry(5, height - 86, width - 10, 80); + d->playListWidget->setGeometry(0, 0, width - 10, 0); + } + } +} +void Footer::setSize(int width, int height, bool changFlag) +{ + Q_D(Footer); + if (changFlag) { + if (d->showPlaylistFlag) { + d->playListWidget->hide(); + setFixedSize(width - 10, 80); + move(5, height - 86); + resize(width - 10, 80); + } else { + d->playListWidget->show(); + setFixedSize(width - 10, 423); + move(5, height - 429); + resize(width - 10, 423); + } + d->showPlaylistFlag = (!d->showPlaylistFlag); + } else { + if (d->showPlaylistFlag) { + setFixedSize(width - 10, 423); + move(5, height - 429); + resize(width - 10, 423); + } else { + setFixedSize(width - 10, 80); + move(5, height - 86); + resize(width - 10, 80); + } + } +} + +bool Footer::getShowPlayListFlag() +{ + Q_D(const Footer); + return d->showPlaylistFlag; +} + +void Footer::refreshBackground() +{ + Q_D(const Footer); + QImage cover(d->defaultCover); + if (d->activingMeta != nullptr) { + auto coverData = MetaSearchService::coverData(d->activingMeta); + if (coverData.length() > 0) { + cover = QImage::fromData(coverData); + } + } + //cut image + double windowScale = (width() * 1.0) / height(); + int imageWidth = static_cast(cover.height() * windowScale); + QImage coverImage; + if (d->playListWidget->isVisible()) { + coverImage.fill(QColor(255, 255, 255)); + } else { + if (imageWidth > cover.width()) { + int imageheight = static_cast(cover.width() / windowScale); + coverImage = cover.copy(0, (cover.height() - imageheight) / 2, cover.width(), imageheight); + } else { + int imageheight = cover.height(); + coverImage = cover.copy((cover.width() - imageWidth) / 2, 0, imageWidth, imageheight); + } + } + d->forwardWidget->setSourceImage(coverImage); +} + +void Footer::hidewaveform() +{ + Q_D(Footer); + d->waveform->hidewaveformScale(); +} + void Footer::mousePressEvent(QMouseEvent *event) { Q_D(Footer); - QFrame::mousePressEvent(event); - auto subCtlPos = d->progress->mapFromParent(event->pos()); - if (d->progress->rect().contains(subCtlPos) - /*|| !this->rect().contains(event->pos())*/) { + DWidget::mousePressEvent(event); + auto subCtlPos = d->waveform->mapFromParent(event->pos()); + if (d->waveform->rect().contains(subCtlPos) + /*|| !this->rect().contains(event->pos())*/) { d->enableMove = false; } else { d->enableMove = true; @@ -455,7 +736,7 @@ void Footer::mouseReleaseEvent(QMouseEvent *event) { Q_D(Footer); - QFrame::mouseReleaseEvent(event); + DWidget::mouseReleaseEvent(event); d->enableMove = false; } @@ -465,7 +746,7 @@ Qt::MouseButton button = event->buttons() & Qt::LeftButton ? Qt::LeftButton : Qt::NoButton; if (d->enableMove && d->enableMove && event->buttons() == Qt::LeftButton) { Q_EMIT mouseMoving(button); - QFrame::mouseMoveEvent(event); + DWidget::mouseMoveEvent(event); } } @@ -502,30 +783,72 @@ void Footer::onMusicListAdded(PlaylistPtr playlist, const MetaPtrList metalist) { + Q_UNUSED(metalist) Q_D(Footer); - if (playlist->id() == FavMusicListID) - for (auto &meta : metalist) { - if (d->activingMeta && meta == d->activingMeta) { - d->updateQssProperty(d->btFavorite, sPropertyFavourite, true); - } + if (playlist != nullptr && playlist->id() == FavMusicListID + && d->activingMeta != nullptr && playlist->contains(d->activingMeta)) + d->updateQssProperty(d->btFavorite, sPropertyFavourite, true); + else { + if (d->activingMeta != nullptr) { + d->updateQssProperty(d->btFavorite, sPropertyFavourite, d->activingMeta->favourite); + } else { + d->updateQssProperty(d->btFavorite, sPropertyFavourite, false); + } + } + + if (d->activingPlaylist != nullptr) { + if (d->activingPlaylist->allmusic().isEmpty()) { + d->btPlay->setDisabled(true); + d->btPrev->setDisabled(true); + d->btNext->setDisabled(true); + } else if (d->activingPlaylist->allmusic().size() == 1) { + d->btPrev->setDisabled(true); + d->btNext->setDisabled(true); + d->btPlay->setDisabled(false); + } else { + d->btPrev->setDisabled(false); + d->btNext->setDisabled(false); + d->btPlay->setDisabled(false); } + } } void Footer::onMusicListRemoved(PlaylistPtr playlist, const MetaPtrList metalist) { + Q_UNUSED(metalist) Q_D(Footer); - if (playlist->id() == FavMusicListID) - for (auto &meta : metalist) { - if (meta == d->activingMeta) { - d->updateQssProperty(d->btFavorite, sPropertyFavourite, false); - } + if (playlist != nullptr && playlist->id() == FavMusicListID + && d->activingMeta != nullptr && playlist->contains(d->activingMeta)) + d->updateQssProperty(d->btFavorite, sPropertyFavourite, true); + else { + d->updateQssProperty(d->btFavorite, sPropertyFavourite, false); + } + + if (d->activingPlaylist != nullptr) { + if (d->activingPlaylist->allmusic().isEmpty()) { + d->btPlay->setDisabled(true); + d->btPrev->setDisabled(true); + d->btNext->setDisabled(true); + } else if (d->activingPlaylist->allmusic().size() == 1) { + d->btPrev->setDisabled(true); + d->btNext->setDisabled(true); + d->btPlay->setDisabled(false); + } else { + d->btPrev->setDisabled(false); + d->btNext->setDisabled(false); + d->btPlay->setDisabled(false); } + } } void Footer::onMusicPlayed(PlaylistPtr playlist, const MetaPtr meta) { + Q_UNUSED(playlist) Q_D(Footer); + if (!d->activingPlaylist->contains(meta)) + return; + QFontMetrics fm(d->title->font()); auto text = fm.elidedText(meta->title, Qt::ElideMiddle, d->title->maximumWidth()); d->title->setText(text); @@ -536,6 +859,32 @@ d->artist->setText(tr("Unknown artist")); } + QImage cover(d->defaultCover); + auto coverData = MetaSearchService::coverData(meta); + if (coverData.length() > 0) { + cover = QImage::fromData(coverData); + } + d->btCover->setIcon(QPixmap::fromImage(cover)); + d->btCover->update(); + d->waveform->clearBufferAudio(meta->hash); + + //cut image + double windowScale = (width() * 1.0) / height(); + int imageWidth = static_cast(cover.height() * windowScale); + QImage coverImage; + if (imageWidth > cover.width()) { + int imageheight = static_cast(cover.width() / windowScale); + coverImage = cover.copy(0, (cover.height() - imageheight) / 2, cover.width(), imageheight); + } else { + int imageheight = cover.height(); + coverImage = cover.copy((cover.width() - imageWidth) / 2, 0, imageWidth, imageheight); + } + + refreshBackground(); +// d->forwardWidget->setSourceImage(coverImage); +// blurBackground()->setSourceImage(coverImage); + //d->waveform->onAudioBuffer(MetaDetector::getMetaData(meta->localPath)); + this->enableControl(true); d->title->show(); d->artist->show(); @@ -544,26 +893,72 @@ d->btFavorite->show(); d->btLyric->show(); - d->activingPlaylist = playlist; + //d->activingPlaylist = playlist; d->activingMeta = meta; + if (d->activingPlaylist != nullptr) { + if (d->activingPlaylist->allmusic().isEmpty()) { + d->btPlay->setDisabled(true); + d->btPrev->setDisabled(true); + d->btNext->setDisabled(true); + } else if (d->activingPlaylist->allmusic().size() == 1) { + d->btPrev->setDisabled(true); + d->btNext->setDisabled(true); + d->btPlay->setDisabled(false); + } else { + d->btPrev->setDisabled(false); + d->btNext->setDisabled(false); + d->btPlay->setDisabled(false); + } + } + d->updateQssProperty(d->btFavorite, sPropertyFavourite, meta->favourite); - if (!meta->invalid) { + if (!meta->invalid || true) { d->updateQssProperty(d->btPlay, sPropertyPlayStatus, sPlayStatusValuePlaying); d->updateQssProperty(this, sPropertyPlayStatus, sPlayStatusValuePlaying); + if (d->m_type == 1) { + d->btPlay->setPropertyPic(":/mpimage/light/normal/suspend_normal.svg", + ":/mpimage/light/normal/suspend_normal.svg", + ":/mpimage/light/press/suspend_press.svg"); + //d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/light/normal/suspend_normal.svg")); + } else { + //d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/dark/normal/suspend_normal.svg")); + d->btPlay->setPropertyPic(":/mpimage/dark/normal/suspend_normal.svg", + ":/mpimage/dark/normal/suspend_normal.svg", + ":/mpimage/dark/press/suspend_press.svg"); + } + + d->btPlayingStatus = true; + } else { + if (d->m_type == 1) { + d->btPlay->setPropertyPic(":/mpimage/light/normal/play_normal.svg", + ":/mpimage/light/normal/play_normal.svg", + ":/mpimage/light/press/play_press.svg"); + //d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/light/normal/play_normal.svg")); + } else { + d->btPlay->setPropertyPic(":/mpimage/dark/normal/play_normal.svg", + ":/mpimage/dark/normal/play_normal.svg", + ":/mpimage/dark/press/play_press.svg"); + //d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/dark/normal/play_normal.svg")); + } + + d->btPlayingStatus = false; } } void Footer::onMusicError(PlaylistPtr playlist, const MetaPtr meta, int error) { + Q_UNUSED(playlist) + Q_UNUSED(meta) Q_D(Footer); - if (d->activingMeta && d->activingPlaylist) { - if (meta != d->activingMeta || playlist != d->activingPlaylist) { - return; - } - } + //d->waveform->clearBufferAudio(); +// if (d->activingMeta && d->activingPlaylist) { +// if (meta != d->activingMeta || playlist != d->activingPlaylist) { +// return; +// } +// } if (0 == error) { return; @@ -571,18 +966,56 @@ auto status = sPlayStatusValuePause; d->updateQssProperty(d->btPlay, sPropertyPlayStatus, status); + if (d->m_type == 1) { + d->btPlay->setPropertyPic(":/mpimage/light/normal/play_normal.svg", + ":/mpimage/light/normal/play_normal.svg", + ":/mpimage/light/press/play_press.svg"); + // d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/light/normal/play_normal.svg")); + } else { + d->btPlay->setPropertyPic(":/mpimage/dark/normal/play_normal.svg", + ":/mpimage/dark/normal/play_normal.svg", + ":/mpimage/dark/press/play_press.svg"); + //d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/dark/normal/play_normal.svg")); + } + d->btPlayingStatus = false; } void Footer::onMusicPause(PlaylistPtr playlist, const MetaPtr meta) { + Q_UNUSED(playlist) + Q_UNUSED(meta) Q_D(Footer); - if (meta->hash != d->activingMeta->hash || playlist != d->activingPlaylist) { - qWarning() << "can not pasue" << d->activingPlaylist << playlist - << d->activingMeta->hash << meta->hash; - return; - } + auto status = sPlayStatusValuePause; d->updateQssProperty(d->btPlay, sPropertyPlayStatus, status); + if (d->m_type == 1) { + d->btPlay->setPropertyPic(":/mpimage/light/normal/play_normal.svg", + ":/mpimage/light/normal/play_normal.svg", + ":/mpimage/light/press/play_press.svg"); + // d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/light/normal/play_normal.svg")); + } else { + // d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/dark/normal/play_normal.svg")); + d->btPlay->setPropertyPic(":/mpimage/dark/normal/play_normal.svg", + ":/mpimage/dark/normal/play_normal.svg", + ":/mpimage/dark/press/play_press.svg"); + } + d->btPlayingStatus = false; + + if (d->activingPlaylist != nullptr) { + if (d->activingPlaylist->allmusic().isEmpty()) { + d->btPlay->setDisabled(true); + d->btPrev->setDisabled(true); + d->btNext->setDisabled(true); + } else if (d->activingPlaylist->allmusic().size() == 1) { + d->btPrev->setDisabled(true); + d->btNext->setDisabled(true); + d->btPlay->setDisabled(false); + } else { + d->btPrev->setDisabled(false); + d->btNext->setDisabled(false); + d->btPlay->setDisabled(false); + } + } } void Footer::onMusicStoped(PlaylistPtr playlist, const MetaPtr meta) @@ -592,46 +1025,262 @@ Q_UNUSED(playlist); Q_UNUSED(meta); - onProgressChanged(0, 1); + onProgressChanged(0, 1, 1); d->title->hide(); d->artist->hide(); - d->btFavorite->hide(); + //d->btFavorite->hide(); d->activingMeta = MetaPtr(); - d->cover->setCoverPixmap(Dtk::Widget::DHiDPIHelper::loadNxPixmap(d->defaultCover)); - d->cover->update(); + d->waveform->clearBufferAudio(QString()); + d->btCover->setIcon(Dtk::Widget::DHiDPIHelper::loadNxPixmap(d->defaultCover)); + d->btCover->update(); d->updateQssProperty(d->btPlay, sPropertyPlayStatus, sPlayStatusValueStop); d->updateQssProperty(this, sPropertyPlayStatus, sPlayStatusValueStop); + if (d->m_type == 1) { + d->btPlay->setPropertyPic(":/mpimage/light/normal/play_normal.svg", + ":/mpimage/light/normal/play_normal.svg", + ":/mpimage/light/press/play_press.svg"); + //d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/light/normal/play_normal.svg")); + } else { + //d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/dark/normal/play_normal.svg")); + d->btPlay->setPropertyPic(":/mpimage/dark/normal/play_normal.svg", + ":/mpimage/dark/normal/play_normal.svg", + ":/mpimage/dark/press/play_press.svg"); + } + d->btPlayingStatus = false; + + if (d->activingPlaylist != nullptr) { + if (d->activingPlaylist->allmusic().isEmpty()) { + d->btPlay->setDisabled(true); + d->btPrev->setDisabled(true); + d->btNext->setDisabled(true); + } else if (d->activingPlaylist->allmusic().size() == 1) { + d->btPrev->setDisabled(true); + d->btNext->setDisabled(true); + d->btPlay->setDisabled(false); + } else { + d->btPrev->setDisabled(false); + d->btNext->setDisabled(false); + d->btPlay->setDisabled(false); + } + } } void Footer::onMediaLibraryClean() { - Q_D(Footer); - d->btPrev->hide(); - d->btNext->hide(); - d->btFavorite->hide(); - d->btLyric->hide(); + //Q_D(Footer); + + /*---enableControl----*/ enableControl(false); } -void Footer::onProgressChanged(qint64 value, qint64 duration) +void Footer::slotTheme(int type) +{ + + Q_D(Footer); + QString rStr; + if (type == 1) { + QColor backMaskColor(255, 255, 255, 140); + this->blurBackground()->setMaskColor(backMaskColor); + QColor maskColor(255, 255, 255, 76); + d->forwardWidget->setMaskColor(maskColor); + rStr = "light"; + + /* + auto titlePl = d->title->palette(); + QColor titleColor("#000000"); + titlePl.setColor(DPalette::WindowText, titleColor); + d->title->setPalette(titlePl); + */ + + auto artistPl = d->artist->palette(); + QColor artistColor = artistPl.color(DPalette::BrightText); + artistColor.setAlphaF(0.4); + artistPl.setColor(DPalette::WindowText, artistColor); + d->artist->setPalette(artistPl); + + DPalette pa; + pa = d->ctlWidget->palette(); + pa.setColor(DPalette::Light, QColor("#FFFFFF")); + pa.setColor(DPalette::Dark, QColor("#FFFFFF")); + pa.setColor(DPalette::Button, QColor("#FFFFFF")); + d->ctlWidget->setPalette(pa); + + pa = d->btFavorite->palette(); + pa.setColor(DPalette::Light, QColor("#FFFFFF")); + pa.setColor(DPalette::Dark, QColor("#FFFFFF")); + d->btFavorite->setPalette(pa); + + pa = d->btLyric->palette(); + pa.setColor(DPalette::Light, QColor("#FFFFFF")); + pa.setColor(DPalette::Dark, QColor("#FFFFFF")); + d->btLyric->setPalette(pa); + + pa = d->btPlayList->palette(); + pa.setColor(DPalette::Light, QColor("#FFFFFF")); + pa.setColor(DPalette::Dark, QColor("#FFFFFF")); + d->btPlayList->setPalette(pa); + + pa = d->btPlayMode->palette(); + pa.setColor(DPalette::Light, QColor("#FFFFFF")); + pa.setColor(DPalette::Dark, QColor("#FFFFFF")); + d->btPlayMode->setPalette(pa); + + pa = d->btSound->palette(); + pa.setColor(DPalette::Light, QColor("#FFFFFF")); + pa.setColor(DPalette::Dark, QColor("#FFFFFF")); + d->btSound->setPalette(pa); + + } else { + QColor backMaskColor(37, 37, 37, 140); + blurBackground()->setMaskColor(backMaskColor); + QColor maskColor(37, 37, 37, 76); + d->forwardWidget->setMaskColor(maskColor); + rStr = "dark"; + + /* + auto titlePl = d->title->palette(); + QColor titleColor("#FFFFFF"); + titlePl.setColor(DPalette::WindowText, titleColor); + d->title->setPalette(titlePl); + */ + + auto artistPl = d->artist->palette(); + QColor artistColor = artistPl.color(DPalette::BrightText); + artistColor.setAlphaF(0.6); + artistPl.setColor(DPalette::WindowText, artistColor); + d->artist->setPalette(artistPl); + + DPalette pa; + pa = d->ctlWidget->palette(); + pa.setColor(DPalette::Light, QColor("#444444")); + pa.setColor(DPalette::Dark, QColor("#444444")); + pa.setColor(DPalette::Button, QColor("#444444")); + d->ctlWidget->setPalette(pa); + + pa = d->btFavorite->palette(); + pa.setColor(DPalette::Light, QColor("#444444")); + pa.setColor(DPalette::Dark, QColor("#444444")); + d->btFavorite->setPalette(pa); + + pa = d->btLyric->palette(); + pa.setColor(DPalette::Light, QColor("#444444")); + pa.setColor(DPalette::Dark, QColor("#444444")); + d->btLyric->setPalette(pa); + + pa = d->btPlayList->palette(); + pa.setColor(DPalette::Light, QColor("#444444")); + pa.setColor(DPalette::Dark, QColor("#444444")); + d->btPlayList->setPalette(pa); + + pa = d->btPlayMode->palette(); + pa.setColor(DPalette::Light, QColor("#444444")); + pa.setColor(DPalette::Dark, QColor("#444444")); + d->btPlayMode->setPalette(pa); + + pa = d->btSound->palette(); + pa.setColor(DPalette::Light, QColor("#444444")); + pa.setColor(DPalette::Dark, QColor("#444444")); + d->btSound->setPalette(pa); + + } + d->m_type = type; + //d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(QString(":/mpimage/%1/normal/play_normal.svg").arg(rStr))); + //d->btPrev->setIcon(DHiDPIHelper::loadNxPixmap(QString(":/mpimage/%1/normal/last_normal.svg").arg(rStr))); + //d->btNext->setIcon(DHiDPIHelper::loadNxPixmap(QString(":/mpimage/%1/normal/next_normal.svg").arg(rStr))); + if (d->btPlayingStatus) { + d->btPlay->setPropertyPic(QString(":/mpimage/%1/normal/suspend_normal.svg").arg(rStr), + QString(":/mpimage/%1/normal/suspend_normal.svg").arg(rStr), + QString(":/mpimage/%1/press/suspend_press.svg").arg(rStr)); + } else { + d->btPlay->setPropertyPic(QString(":/mpimage/%1/normal/play_normal.svg").arg(rStr), + QString(":/mpimage/%1/normal/play_normal.svg").arg(rStr), + QString(":/mpimage/%1/press/play_press.svg").arg(rStr)); + } + d->btPrev->setPropertyPic(QString(":/mpimage/%1/normal/last_normal.svg").arg(rStr), + QString(":/mpimage/%1/normal/last_normal.svg").arg(rStr), + QString(":/mpimage/%1/press/last_press.svg").arg(rStr)); + d->btNext->setPropertyPic(QString(":/mpimage/%1/normal/next_normal.svg").arg(rStr), + QString(":/mpimage/%1/normal/next_normal.svg").arg(rStr), + QString(":/mpimage/%1/press/next_press.svg").arg(rStr)); + + d->btFavorite->setPropertyPic(QString(":/mpimage/%1/normal/collection_normal.svg").arg(rStr), + QString(":/mpimage/%1/normal/collection_normal.svg").arg(rStr), + QString(":/mpimage/%1/press/collection_press.svg").arg(rStr)); + d->btFavorite->setPropertyPic(sPropertyFavourite, QVariant(true), + QString(":/mpimage/%1/checked/collection1_checked.svg").arg(rStr), + QString(":/mpimage/%1/checked/collection1_checked.svg").arg(rStr), + QString(":/mpimage/%1/press/collection1_press.svg").arg(rStr), + QString(":/mpimage/%1/checked/collection1_checked.svg").arg(rStr)); + + d->btLyric->setPropertyPic(QString(":/mpimage/%1/normal/lyric_normal.svg").arg(rStr), + QString(":/mpimage/%1/normal/lyric_normal.svg").arg(rStr), + QString(":/mpimage/%1/press/lyric_press.svg").arg(rStr), + QString(":/mpimage/%1/checked/lyric_checked.svg").arg(rStr)); + QStringList modes; + modes << QString(":/mpimage/%1/normal/sequential_loop_normal.svg").arg(rStr) + << QString(":/mpimage/%1/normal/single_tune_circulation_normal.svg").arg(rStr) + << QString(":/mpimage/%1/normal/cross_cycling_normal.svg").arg(rStr); + QStringList pressModes; + pressModes << QString(":/mpimage/%1/press/sequential_loop_press.svg").arg(rStr) + << QString(":/mpimage/%1/press/single_tune_circulation_press.svg").arg(rStr) + << QString(":/mpimage/%1/press/cross_cycling_press.svg").arg(rStr); + d->btSound->setPropertyPic(QString(":/mpimage/%1/normal/volume_normal.svg").arg(rStr), + QString(":/mpimage/%1/hover/volume_hover.svg").arg(rStr), + QString(":/mpimage/%1/press/volume_press.svg").arg(rStr), + QString(":/mpimage/%1/checked/volume_checked.svg").arg(rStr)); + d->btSound->setPropertyPic("volume", QVariant("mid"), + QString(":/mpimage/%1/normal/volume_mid_normal.svg").arg(rStr), + QString(":/mpimage/%1/hover/volume_mid_hover.svg").arg(rStr), + QString(":/mpimage/%1/press/volume_mid_press.svg").arg(rStr), + QString(":/mpimage/%1/checked/volume_mid_checked.svg").arg(rStr)); + d->btSound->setPropertyPic("volume", QVariant("low"), + QString(":/mpimage/%1/normal/volume_low_normal.svg").arg(rStr), + QString(":/mpimage/%1/hover/volume_low_hover.svg").arg(rStr), + QString(":/mpimage/%1/press/volume_low_press.svg").arg(rStr), + QString(":/mpimage/%1/checked/volume_low_checked.svg").arg(rStr)); + d->btSound->setPropertyPic("volume", QVariant("mute"), + QString(":/mpimage/%1/normal/mute_normal.svg").arg(rStr), + QString(":/mpimage/%1/normal/mute_normal.svg").arg(rStr), + QString(":/mpimage/%1/press/mute_press.svg").arg(rStr), + QString(":/mpimage/%1/checked/mute_checked.svg").arg(rStr)); + d->btPlayList->setPropertyPic(QString(":/mpimage/%1/normal/playlist_normal.svg").arg(rStr), + QString(":/mpimage/%1/normal/playlist_normal.svg").arg(rStr), + QString(":/mpimage/%1/press/playlist_press.svg").arg(rStr), + QString(":/mpimage/%1/checked/playlist_checked.svg").arg(rStr)); + + d->btPlayMode->setModeIcons(modes, pressModes); + d->waveform->setThemeType(type); + d->volSlider->slotTheme(type); + d->playListWidget->slotTheme(type); +} + +void Footer::onTogglePlayButton() { Q_D(Footer); - auto length = d->progress->maximum() - d->progress->minimum(); - Q_ASSERT(length != 0); - auto progress = 0; - if (0 != duration) { - progress = static_cast(length * value / duration); + auto status = d->btPlay->property(sPropertyPlayStatus).toString(); + if (d->activingMeta == nullptr) { + if (d->activingPlaylist->isEmpty()) + return; + d->activingMeta = d->activingPlaylist->first(); + status = ""; } - if (d->progress->signalsBlocked()) { - return; + if (status == sPlayStatusValuePlaying) { + Q_EMIT pause(d->activingPlaylist, d->activingMeta); + } else if (status == sPlayStatusValuePause) { + Q_EMIT resume(d->activingPlaylist, d->activingMeta); + } else { + Q_EMIT play(d->activingPlaylist, d->activingMeta); } +} + +void Footer::onProgressChanged(qint64 value, qint64 duration, qint64 coefficient) +{ + Q_D(Footer); - d->progress->blockSignals(true); - d->progress->setValue(progress); - d->progress->blockSignals(false); + d->waveform->onProgressChanged(value, duration, coefficient); } void Footer::onCoverChanged(const MetaPtr meta, const DMusic::SearchMeta &, const QByteArray &coverData) @@ -644,8 +1293,8 @@ QPixmap coverPixmap = coverData.length() > 1024 ? QPixmap::fromImage(QImage::fromData(coverData)) : Dtk::Widget::DHiDPIHelper::loadNxPixmap(d->defaultCover); - d->cover->setCoverPixmap(coverPixmap); - d->cover->update(); + d->btCover->setIcon(coverPixmap); + d->btCover->update(); } void Footer::onVolumeChanged(int volume) @@ -656,23 +1305,79 @@ status = "high"; } else if (volume > 33) { status = "mid"; - } else { + } else { status = "low"; } - d->updateQssProperty(d->btSound, "volume", status); -// qDebug() << status << volume; + if (d->m_Mute) { + d->updateQssProperty(d->btSound, "volume", "mute"); + } else { + d->updateQssProperty(d->btSound, "volume", status); + } + d->m_Volume = volume; + MusicSettings::setOption("base.play.volume", d->m_Volume); + MusicSettings::setOption("base.play.mute", d->m_Mute); d->volSlider->onVolumeChanged(volume); } void Footer::onMutedChanged(bool muted) { Q_D(Footer); -// qDebug() << muted; + if(d->volumeMonitoring.needSyncLocalFlag()) + { + d->volumeMonitoring.stop(); + d->volumeMonitoring.timeoutSlot(); + d->volumeMonitoring.start(); + return ; + } + d->m_Mute = muted; if (muted) { d->updateQssProperty(d->btSound, "volume", "mute"); - d->volSlider->onVolumeChanged(0); + } else { + QString status = "mid"; + if (d->m_Volume > 77) { + status = "high"; + } else if (d->m_Volume > 33) { + status = "mid"; + } else { + status = "low"; + } + + d->updateQssProperty(d->btSound, "volume", status); + d->volSlider->onVolumeChanged(d->m_Volume); + } + MusicSettings::setOption("base.play.volume", d->m_Volume); + MusicSettings::setOption("base.play.mute", d->m_Mute); +} + +void Footer::onLocalMutedChanged(int type) +{ + Q_D(Footer); + if(type) + d->m_Mute = !d->m_Mute; + else + d->m_Mute = false; + + if (d->m_Mute) { + d->updateQssProperty(d->btSound, "volume", "mute"); + } else { + QString status = "mid"; + if (d->m_Volume > 77) { + status = "high"; + } else if (d->m_Volume > 33) { + status = "mid"; + } else { + status = "low"; + } + d->updateQssProperty(d->btSound, "volume", status); + d->volSlider->onVolumeChanged(d->m_Volume); } + MusicSettings::setOption("base.play.volume", d->m_Volume); + MusicSettings::setOption("base.play.mute", d->m_Mute); + + d->volumeMonitoring.syncLocalFlag(); + //emit mute state + Q_EMIT localMuteStat(d->m_Mute); } void Footer::onModeChange(int mode) @@ -688,27 +1393,33 @@ d->btPlayMode->blockSignals(false); d->mode = mode; - auto hintWidget = d->btPlayMode->property("HintWidget").value(); - QString playmode; - switch (mode) { - default: - case 0: - playmode = Footer::tr("List Loop"); - break; - case 1: - playmode = Footer::tr("Single Loop"); - break; - case 2: - playmode = Footer::tr("Shuffle"); - break; - } - if (hintWidget) { - hintWidget->setText(playmode); + auto hintWidget = d->btPlayMode->property("HintWidget").value(); + if (hintWidget != nullptr) { + auto hintToolTips = static_cast(hintWidget); + QString playmode; + switch (mode) { + default: + case 0: + playmode = Footer::tr("List Loop"); + break; + case 1: + playmode = Footer::tr("Single Loop"); + break; + case 2: + playmode = Footer::tr("Shuffle"); + break; + } + if (hintToolTips != nullptr) { + hintToolTips->setText(playmode); + } } } -void Footer::onUpdateMetaCodec(const MetaPtr meta) +void Footer::onUpdateMetaCodec(const QString &preTitle, const QString &preArtist, const QString &preAlbum, const MetaPtr meta) { + Q_UNUSED(preTitle) + Q_UNUSED(preArtist) + Q_UNUSED(preAlbum) Q_D(Footer); if (d->activingMeta && d->activingMeta == meta) { d->title->setText(meta->title); @@ -729,11 +1440,35 @@ void Footer::resizeEvent(QResizeEvent *event) { Q_D(Footer); - QFrame::resizeEvent(event); + DWidget::resizeEvent(event); - auto fix = progressExtentHeight(); - auto center = rect().marginsRemoved(QMargins(0, fix, 0, 0)).center() - d->ctlWidget->rect().center(); + //auto fix = progressExtentHeight(); + //auto center = rect().marginsRemoved(QMargins(0, fix, 0, 0)).center() - d->ctlWidget->rect().center(); - d->ctlWidget->move(center); - d->ctlWidget->raise(); + //d->ctlWidget->move(center); + //d->ctlWidget->raise(); + + QImage cover(d->defaultCover); + if (d->activingMeta != nullptr) { + auto coverData = MetaSearchService::coverData(d->activingMeta); + if (coverData.length() > 0) { + cover = QImage::fromData(coverData); + } + } + //cut image + double windowScale = (width() * 1.0) / height(); + int imageWidth = static_cast(cover.height() * windowScale); + QImage coverImage; + if (imageWidth > cover.width()) { + int imageheight = static_cast(cover.width() / windowScale); + coverImage = cover.copy(0, (cover.height() - imageheight) / 2, cover.width(), imageheight); + } else { + int imageheight = cover.height(); + coverImage = cover.copy((cover.width() - imageWidth) / 2, 0, imageWidth, imageheight); + } + if (d->playListWidget->isVisible()) { + coverImage.fill(QColor(255, 255, 255)); + } + d->forwardWidget->setSourceImage(coverImage); +// blurBackground()->setSourceImage(coverImage); } diff -Nru deepin-music-5.0.1+ds/src/music-player/view/footerwidget.h deepin-music-6.0.1.54+ds.1/src/music-player/view/footerwidget.h --- deepin-music-5.0.1+ds/src/music-player/view/footerwidget.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/footerwidget.h 2020-07-14 12:05:00.000000000 +0000 @@ -21,31 +21,45 @@ #pragma once -#include +#include #include -#include +#include #include "../core/playlist.h" #include +class QAudioBuffer; + +DWIDGET_USE_NAMESPACE + +class PlayListWidget; class FooterPrivate; -class Footer : public QFrame +class Footer : public DFloatingWidget { Q_OBJECT Q_PROPERTY(QString defaultCover READ defaultCover WRITE setDefaultCover) public: explicit Footer(QWidget *parent = nullptr); - ~Footer(); + ~Footer() override; public: - int progressExtentHeight() const; + void setCurPlaylist(PlaylistPtr playlist); void enableControl(bool enable = true); - void initData(PlaylistPtr current, int mode); - void setViewname(const QString &viewname); + QString defaultCover() const; + void setLyricButtonChecked(bool flag); + void setPlaylistButtonChecked(bool flag); + + PlayListWidget *getPlayListWidget(); + void showPlayListWidget(int width, int height, bool changFlag = false); + void setSize(int width, int height, bool changFlag = false); + bool getShowPlayListFlag(); + void refreshBackground(); + void hidewaveform(); + signals: void toggleLyricView(); void locateMusic(PlaylistPtr playlist, const MetaPtr meta); @@ -59,6 +73,7 @@ void volumeChanged(int volume); void toggleMute(); + void localToggleMute(); void togglePlaylist(); void modeChanged(int); void toggleFavourite(const MetaPtr meta); @@ -66,6 +81,12 @@ void progressRealHeightChanged(qreal height); void mouseMoving(Qt::MouseButton button); + void audioBufferProbed(const QAudioBuffer &buffer); + void metaBuffer(const QVector &buffer, const QString &hash); + /***************************************** + * emit local changed mute state + * ****************************************/ + void localMuteStat(bool mute); public slots: void onMusicListAdded(PlaylistPtr playlist, const MetaPtrList metalist); void onMusicListRemoved(PlaylistPtr playlist, const MetaPtrList metalist); @@ -73,14 +94,20 @@ void onMusicError(PlaylistPtr playlist, const MetaPtr meta, int error); void onMusicPause(PlaylistPtr playlist, const MetaPtr meta); void onMusicStoped(PlaylistPtr playlist, const MetaPtr meta); - void onProgressChanged(qint64 value, qint64 duration); + void onProgressChanged(qint64 value, qint64 duration, qint64 coefficient); void onCoverChanged(const MetaPtr meta, const DMusic::SearchMeta &, const QByteArray &coverData); void onVolumeChanged(int volume); void onMutedChanged(bool muted); + /************************************** + * slots local mute ,type: 0 volume,1 mute + * ************************************/ + void onLocalMutedChanged(int type); void onModeChange(int mode); - void onUpdateMetaCodec(const MetaPtr meta); + void onUpdateMetaCodec(const QString &preTitle, const QString &preArtist, const QString &preAlbum, const MetaPtr meta); void setDefaultCover(QString defaultCover); void onMediaLibraryClean(); + void slotTheme(int type); + void onTogglePlayButton(); protected: virtual void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; diff -Nru deepin-music-5.0.1+ds/src/music-player/view/helper/widgethellper.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/helper/widgethellper.cpp --- deepin-music-5.0.1+ds/src/music-player/view/helper/widgethellper.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/helper/widgethellper.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -36,8 +36,7 @@ extern Q_WIDGETS_EXPORT void qt_blurImage(QPainter *p, QImage &blurImage, qreal radius, bool quality, bool alphaOnly, int transposed = 0); QT_END_NAMESPACE -namespace WidgetHelper -{ +namespace WidgetHelper { QImage applyEffectToImage(const QImage src, QGraphicsEffect *effect, int extent = 0) { @@ -264,11 +263,11 @@ }); } -void slideEdgeWidget(QWidget *right, QRect start, QRect end, int delay, bool hide) +void slideEdgeWidget(QWidget *widget, QWidget *child, QRect start, QRect end, int delay, bool visible) { - right->show(); - - QPropertyAnimation *animation2 = new QPropertyAnimation(right, "geometry"); + Q_UNUSED(child) + Q_UNUSED(visible) + QPropertyAnimation *animation2 = new QPropertyAnimation(widget, "geometry"); animation2->setEasingCurve(QEasingCurve::InCurve); animation2->setDuration(delay); animation2->setStartValue(start); @@ -276,10 +275,28 @@ animation2->start(); animation2->connect(animation2, &QPropertyAnimation::finished, animation2, &QPropertyAnimation::deleteLater); - if (hide) - animation2->connect(animation2, &QPropertyAnimation::finished, - right, &QWidget::hide); + animation2->connect(animation2, &QPropertyAnimation::finished, widget, [ = ]() { + }); +} +void slideEdgeWidget2(QWidget *widget, QRect start, QRect end, int delay, bool visible) +{ + QPropertyAnimation *animation2 = new QPropertyAnimation(widget, "geometry"); + animation2->setEasingCurve(QEasingCurve::InCurve); + animation2->setDuration(delay); + animation2->setStartValue(start); + animation2->setEndValue(end); + animation2->start(); + if (visible) { + widget->show(); + } + animation2->connect(animation2, &QPropertyAnimation::finished, + animation2, &QPropertyAnimation::deleteLater); + animation2->connect(animation2, &QPropertyAnimation::finished, widget, [ = ]() { + if (!visible) { + widget->hide(); + } + }); } QPixmap coverPixmap(const QString &coverPath, QSize sz) @@ -289,7 +306,6 @@ void workaround_updateStyle(QWidget *parent, const QString &theme) { - parent->setStyle(QStyleFactory::create(theme)); for (auto obj : parent->children()) { auto w = qobject_cast(obj); if (!w) { diff -Nru deepin-music-5.0.1+ds/src/music-player/view/helper/widgethellper.h deepin-music-6.0.1.54+ds.1/src/music-player/view/helper/widgethellper.h --- deepin-music-5.0.1+ds/src/music-player/view/helper/widgethellper.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/helper/widgethellper.h 2020-07-14 12:05:00.000000000 +0000 @@ -24,8 +24,7 @@ #include #include -namespace WidgetHelper -{ +namespace WidgetHelper { QPixmap blurImage(const QImage &image, int radius); QImage cropRect(const QImage &image, QSize sz); @@ -34,7 +33,8 @@ void slideRight2LeftWidget(QWidget *left, QWidget *right, int delay); void slideBottom2TopWidget(QWidget *top, QWidget *bottom, int delay); void slideTop2BottomWidget(QWidget *top, QWidget *bottom, int delay); -void slideEdgeWidget(QWidget *right, QRect start, QRect end, int delay, bool hide = false); +void slideEdgeWidget(QWidget *widget, QWidget *child, QRect start, QRect end, int delay, bool hide = false); +void slideEdgeWidget2(QWidget *widget, QRect start, QRect end, int delay, bool hide = false); void workaround_updateStyle(QWidget *parent, const QString &theme); } diff -Nru deepin-music-5.0.1+ds/src/music-player/view/importwidget.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/importwidget.cpp --- deepin-music-5.0.1+ds/src/music-player/view/importwidget.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/importwidget.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -22,19 +22,21 @@ #include "importwidget.h" #include -#include -#include #include #include #include -#include +#include +#include +#include +#include +#include +#include -#include +#include "musicsettings.h" +DGUI_USE_NAMESPACE -DWIDGET_USE_NAMESPACE - -const QString linkTemplate = "%2"; +const QString linkTemplate = "%2"; class ImportWidgetPrivate { @@ -42,61 +44,99 @@ ImportWidgetPrivate(ImportWidget *parent) : q_ptr(parent) {} QLabel *text = nullptr; - QPushButton *importButton = nullptr; - + DPushButton *importButton = nullptr; + DPushButton *addMusicButton = nullptr; + QLabel *logo; ImportWidget *q_ptr; Q_DECLARE_PUBLIC(ImportWidget) }; -ImportWidget::ImportWidget(QWidget *parent) : QFrame(parent), d_ptr(new ImportWidgetPrivate(this)) +ImportWidget::ImportWidget(QWidget *parent) : DFrame(parent), d_ptr(new ImportWidgetPrivate(this)) { Q_D(ImportWidget); setObjectName("ImportWidget"); - DThemeManager::instance()->registerWidget(this); - setAcceptDrops(true); + setAutoFillBackground(true); auto layout = new QVBoxLayout(this); + layout->setMargin(0); - auto logo = new QLabel; - logo->setFixedSize(128, 128); - logo->setObjectName("ImportViewLogo"); - -// auto btFrme = new QFrame; -// auto btFrmeLayout = new QVBoxLayout(btFrme); -// btFrme->setFixedSize(150, 50); - d->importButton = new QPushButton; + d->logo = new QLabel; + d->logo->setFixedSize(128, 128); + d->logo->setObjectName("ImportViewLogo"); + d->logo->setPixmap(DHiDPIHelper::loadNxPixmap(":/mpimage/light/import_music.svg")); + + d->importButton = new DPushButton; + auto importButtonFont = d->importButton->font(); + importButtonFont.setFamily("SourceHanSansSC"); + importButtonFont.setWeight(QFont::Normal); + importButtonFont.setPixelSize(14); + d->importButton->setFont(importButtonFont); + auto pl = d->importButton->palette(); + pl.setColor(DPalette::Dark, QColor("#0098FF")); + pl.setColor(DPalette::Light, QColor("#25B7FF")); + pl.setColor(DPalette::ButtonText, QColor("#FFFFFF")); + QColor sbcolor("#000000"); + sbcolor.setAlphaF(0); + pl.setColor(DPalette::Shadow, sbcolor); +// d->importButton->setPalette(pl); d->importButton->setObjectName("ImportViewImportButton"); - d->importButton->setFixedSize(142, 42); -// btFrmeLayout->addWidget(d->importButton, 0, Qt::AlignCenter); - d->importButton->setText(tr("Add folder")); + d->importButton->setFixedSize(302, 36); + d->importButton->setText(tr("Open Folder")); + d->importButton->setFocusPolicy(Qt::NoFocus); + + d->addMusicButton = new DPushButton; + d->addMusicButton->setFont(importButtonFont); +// d->addMusicButton->setPalette(pl); + d->addMusicButton->setObjectName("ImportViewImportButton"); + d->addMusicButton->setFixedSize(302, 36); + d->addMusicButton->setText(tr("Add Music")); + d->addMusicButton->setFocusPolicy(Qt::NoFocus); d->text = new QLabel; d->text->setObjectName("ImportViewText"); - d->text->setFixedHeight(24); - d->text->setOpenExternalLinks(false); + auto textFont = d->text->font(); + textFont.setFamily("SourceHanSansSC"); + textFont.setWeight(QFont::Normal); + textFont.setPixelSize(12); + d->text->setFont(textFont); + d->text->setFixedHeight(18); QString linkText = QString(linkTemplate).arg(tr("Scan")).arg(tr("Scan")); - d->text->setText(QString(tr("%1 music directory or drag & drop music file to add music")).arg(linkText)); + d->text->setText(tr("%1 music directory or drag music files here").arg(linkText)); + layout->setSpacing(0); layout->addStretch(); - layout->addWidget(logo, 0, Qt::AlignCenter); + layout->addWidget(d->logo, 0, Qt::AlignCenter); layout->addSpacing(20); + layout->addWidget(d->addMusicButton, 0, Qt::AlignCenter); + layout->addSpacing(10); layout->addWidget(d->importButton, 0, Qt::AlignCenter); layout->addSpacing(10); layout->addWidget(d->text, 0, Qt::AlignCenter); layout->addStretch(); - connect(d->importButton, &QPushButton::clicked, + connect(d->importButton, &DPushButton::clicked, + this, [ = ] { + Q_EMIT this->selectImportDirectory(); + }); + + connect(d->addMusicButton, &DPushButton::clicked, this, [ = ] { Q_EMIT this->importFiles(); }); - connect(d->text, &QLabel::linkActivated, + connect(d->text, &DLabel::linkActivated, this, [ = ](const QString & /*link*/) { showWaitHint(); Q_EMIT this->scanMusicDirectory(); }); +// bool themeFlag = false; +// int themeType = MusicSettings::value("base.play.theme").toInt(&themeFlag); +// if (!themeFlag) +// themeType = 1; + int themeType = DGuiApplicationHelper::instance()->themeType(); + slotTheme(themeType); } ImportWidget::~ImportWidget() @@ -109,6 +149,7 @@ Q_D(ImportWidget); d->importButton->setDisabled(true); d->importButton->hide(); + d->addMusicButton->hide(); d->text->setText(tr("Loading music, please wait...")); } @@ -117,8 +158,9 @@ Q_D(ImportWidget); d->importButton->setDisabled(false); d->importButton->show(); + d->addMusicButton->show(); QString linkText = QString(linkTemplate).arg(tr("Scan")).arg(tr("Scan")); - d->text->setText(QString(tr("%1 music directory or drag & drop music file to add music")).arg(linkText)); + d->text->setText(tr("%1 music directory or drag music files here").arg(linkText)); } void ImportWidget::dragEnterEvent(QDragEnterEvent *event) @@ -129,7 +171,7 @@ return; } - QFrame::dragEnterEvent(event); + DFrame::dragEnterEvent(event); } void ImportWidget::dragMoveEvent(QDragMoveEvent *) @@ -158,3 +200,46 @@ Q_EMIT importSelectFiles(localpaths); } } +void ImportWidget::slotTheme(int type) +{ + Q_D(ImportWidget); + QString rStr; + if (type == 1) { + rStr = "light"; + auto pl = d->importButton->palette(); + pl.setColor(DPalette::Dark, QColor("#0098FF")); + pl.setColor(DPalette::Light, QColor("#25B7FF")); + pl.setColor(DPalette::ButtonText, QColor("#FFFFFF")); + QColor sbcolor("#000000"); + sbcolor.setAlphaF(0); + pl.setColor(DPalette::Shadow, sbcolor); +// d->importButton->setPalette(pl); + +// d->addMusicButton->setPalette(pl); + + QPalette pa = d->text->palette(); + pa.setColor(QPalette::WindowText, "#777777"); +// d->text->setPalette(pa); + d->text->setForegroundRole(QPalette::WindowText); +// d->text->setForegroundRole(DPalette::TextTips); + } else { + rStr = "dark"; + auto pl = d->importButton->palette(); + pl.setColor(DPalette::Dark, QColor("#0056C1")); + pl.setColor(DPalette::Light, QColor("#004C9C")); + pl.setColor(DPalette::ButtonText, QColor("#B8D3FF")); + QColor sbcolor("#0091FF"); + sbcolor.setAlphaF(0.1); + pl.setColor(DPalette::Shadow, sbcolor); +// d->importButton->setPalette(pl); + +// d->addMusicButton->setPalette(pl); + + QPalette pa = d->text->palette(); + pa.setColor(QPalette::WindowText, "#798190"); +// d->text->setPalette(pa); + d->text->setForegroundRole(QPalette::WindowText); +// d->text->setForegroundRole(DPalette::TextTips); + } + d->logo->setPixmap(DHiDPIHelper::loadNxPixmap(QString(":/mpimage/%1/import_music.svg").arg(rStr))); +} diff -Nru deepin-music-5.0.1+ds/src/music-player/view/importwidget.h deepin-music-6.0.1.54+ds.1/src/music-player/view/importwidget.h --- deepin-music-5.0.1+ds/src/music-player/view/importwidget.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/importwidget.h 2020-07-14 12:05:00.000000000 +0000 @@ -22,25 +22,29 @@ #pragma once #include -#include +#include + +DWIDGET_USE_NAMESPACE class ImportWidgetPrivate; -class ImportWidget : public QFrame +class ImportWidget : public DFrame { Q_OBJECT public: explicit ImportWidget(QWidget *parent = Q_NULLPTR); - ~ImportWidget(); + ~ImportWidget() override; signals: void scanMusicDirectory(); void importFiles(); + void selectImportDirectory(); void importSelectFiles(const QStringList &urllist); public slots: void showWaitHint(); void showImportHint(); + void slotTheme(int type); protected: virtual void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE; virtual void dragMoveEvent(QDragMoveEvent *event) Q_DECL_OVERRIDE; diff -Nru deepin-music-5.0.1+ds/src/music-player/view/loadwidget.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/loadwidget.cpp --- deepin-music-5.0.1+ds/src/music-player/view/loadwidget.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/loadwidget.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -22,26 +22,26 @@ #include "loadwidget.h" #include -#include -#include +#include -#include +#include DWIDGET_USE_NAMESPACE LoadWidget::LoadWidget(QWidget *parent) : - QFrame(parent) + DFrame(parent) { - DThemeManager::instance()->registerWidget(this); + setAutoFillBackground(true); auto water = new DWaterProgress(this); water->setValue(50); water->setTextVisible(false); water->start(); - auto label = new QLabel(tr("Loading...")); + auto label = new DLabel(tr("Loading...")); label->setObjectName("LoadWidgetLabel"); + label->setForegroundRole(DPalette::TextTitle); auto vbox = new QVBoxLayout; setLayout(vbox); diff -Nru deepin-music-5.0.1+ds/src/music-player/view/loadwidget.h deepin-music-6.0.1.54+ds.1/src/music-player/view/loadwidget.h --- deepin-music-5.0.1+ds/src/music-player/view/loadwidget.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/loadwidget.h 2020-07-14 12:05:00.000000000 +0000 @@ -21,9 +21,11 @@ #pragma once -#include +#include -class LoadWidget : public QFrame +DWIDGET_USE_NAMESPACE + +class LoadWidget : public DFrame { Q_OBJECT public: diff -Nru deepin-music-5.0.1+ds/src/music-player/view/lyricwidget.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/lyricwidget.cpp --- deepin-music-5.0.1+ds/src/music-player/view/lyricwidget.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/lyricwidget.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -22,27 +22,28 @@ #include "lyricwidget.h" #include -#include #include #include -#include #include -#include #include #include #include #include #include -#include -#include +#include +#include +#include +#include #include "../core/util/lyric.h" +#include "../core/metasearchservice.h" #include "widget/cover.h" #include "widget/searchmetalist.h" #include "widget/searchmetaitem.h" #include "widget/lyricview.h" +#include "widget/musicimagebutton.h" DWIDGET_USE_NAMESPACE @@ -68,15 +69,15 @@ Lyric m_lyriclist; SearchMetaList *searchMetaList = nullptr; - QPushButton *m_showSearch = nullptr; - QPushButton *m_exitSearch = nullptr; - QFrame *searchMetaFrame = nullptr; + MusicImageButton *m_showSearch = nullptr; + DPushButton *m_exitSearch = nullptr; + DFrame *searchMetaFrame = nullptr; Cover *m_cover = nullptr; LyricView *lyricview = nullptr; QStringListModel *m_model = nullptr; - QString defaultCover; + QString defaultCover = ":/common/image/cover_max.svg"; QColor backgroundColor; LyricWidget *q_ptr; @@ -145,37 +146,36 @@ } LyricWidget::LyricWidget(QWidget *parent) - : QFrame(parent), d_ptr(new LyricWidgetPrivate(this)) + : DFrame(parent), d_ptr(new LyricWidgetPrivate(this)) { Q_D(LyricWidget); - DThemeManager::instance()->registerWidget(this); setObjectName("LyricWidget"); auto layout = new QHBoxLayout(this); layout->setContentsMargins(20, 20, 20, 20); - d->searchMetaFrame = new QFrame; + d->searchMetaFrame = new DFrame; d->searchMetaFrame->setObjectName("SearchMetaFrame"); d->searchMetaFrame->setFixedWidth(300); auto searchMetaLayout = new QVBoxLayout(d->searchMetaFrame); searchMetaLayout->setSpacing(20); - auto searchMetaHeader = new QLabel; + auto searchMetaHeader = new DLabel; searchMetaHeader->setObjectName("SearchMetaHeader"); searchMetaHeader->setText(tr("Find lyrics")); - auto searchMetaTitle = new QLineEdit; + auto searchMetaTitle = new DLineEdit; searchMetaTitle->setObjectName("SearchMetaTitle"); - searchMetaTitle->setPlaceholderText(tr("Title")); + searchMetaTitle->lineEdit()->setPlaceholderText(tr("Title")); searchMetaTitle->setFixedHeight(34); - auto searchMetaArtist = new QLineEdit; + auto searchMetaArtist = new DLineEdit; searchMetaArtist->setObjectName("SearchMetaArtist"); - searchMetaArtist->setPlaceholderText(tr("Artist")); + searchMetaArtist->lineEdit()->setPlaceholderText(tr("Artist")); searchMetaArtist->setFixedHeight(34); - auto searchMetaButton = new QPushButton; + auto searchMetaButton = new DPushButton; searchMetaButton->setObjectName("SearchMetaButton"); searchMetaButton->setText(tr("Search")); searchMetaButton->setFixedHeight(34); @@ -205,14 +205,16 @@ d->lyricview->setModel(d->m_model); - d->m_showSearch = new QPushButton; + d->m_showSearch = new MusicImageButton(":/common/image/lrc_search_hover.svg", + ":/common/image/lrc_search_hover.svg", + ":/common/image/lrc_search_hover.svg"); d->m_showSearch->setObjectName("ShowSearch"); - d->m_exitSearch = new QPushButton; + d->m_exitSearch = new DPushButton; d->m_exitSearch->setObjectName("ExitSearch"); d->m_exitSearch->setText(tr("Back")); - auto btFrame = new QFrame; + auto btFrame = new DFrame; btFrame->setFixedWidth(50); auto btLayout = new QVBoxLayout(btFrame); btLayout->addWidget(d->m_showSearch, 0, Qt::AlignRight | Qt::AlignTop); @@ -246,7 +248,7 @@ layout->addWidget(btFrame); - connect(d->m_showSearch, &QPushButton::clicked, + connect(d->m_showSearch, &DPushButton::clicked, this, [ = ](bool) { Q_ASSERT(!d->activingMeta.isNull()); searchMetaTitle->setText(d->activingMeta->title); @@ -259,7 +261,7 @@ d->m_exitSearch->show(); }); - connect(d->m_exitSearch, &QPushButton::clicked, + connect(d->m_exitSearch, &DPushButton::clicked, this, [ = ](bool) { d->searchMetaFrame->hide(); d->m_cover->show(); @@ -267,7 +269,7 @@ d->m_exitSearch->hide(); }); - connect(searchMetaButton, &QPushButton::clicked, + connect(searchMetaButton, &DPushButton::clicked, this, [ = ](bool) { auto context = searchMetaTitle->text() + " " + searchMetaArtist->text(); Q_EMIT requestContextSearch(context); @@ -345,7 +347,7 @@ { Q_D(LyricWidget); - QFrame::paintEvent(e); + DFrame::paintEvent(e); if (!d->lyricview->viewMode()) { return; @@ -404,17 +406,31 @@ Q_UNUSED(playlist); d->activingMeta = meta; d->m_showSearch->setDisabled(false); + + QImage cover(d->defaultCover); + auto coverData = MetaSearchService::coverData(meta); + if (coverData.length() > 0) { + cover = QImage::fromData(coverData); + } + + d->m_cover->setCoverPixmap(QPixmap::fromImage(cover)); + d->m_cover->update(); } -void LyricWidget::onMusicStop(PlaylistPtr /*playlist*/, const MetaPtr /*meta*/) +void LyricWidget::onMusicStop(PlaylistPtr playlist, const MetaPtr meta) { + Q_UNUSED(playlist) Q_D(LyricWidget); auto lyricStr = QString::fromUtf8(""); d->setLyricLines(lyricStr); - QPixmap coverPixmap = QPixmap(d->defaultCover); - d->m_cover->setCoverPixmap(coverPixmap); + QImage cover(d->defaultCover); + auto coverData = MetaSearchService::coverData(meta); + if (coverData.length() > 0) { + cover = QImage::fromData(coverData); + } + d->m_cover->setCoverPixmap(QPixmap::fromImage(cover)); d->m_cover->update(); d->m_showSearch->setDisabled(true); @@ -424,8 +440,8 @@ { Q_D(LyricWidget); - QPalette p = palette(); - p.setColor(QPalette::Background, d->backgroundColor); + DPalette p = palette(); + p.setColor(DPalette::Background, d->backgroundColor); setPalette(p); auto len = d->m_lyriclist.m_lyricElements.length(); @@ -474,11 +490,12 @@ } d->searchMeta = search; - QPixmap coverPixmap = coverData.length() > 1024 ? - QPixmap::fromImage(QImage::fromData(coverData)) : - QPixmap(d->defaultCover); - d->m_cover->setCoverPixmap(coverPixmap); + QImage cover(d->defaultCover); + if (coverData.length() > 0) { + cover = QImage::fromData(coverData); + } + d->m_cover->setCoverPixmap(QPixmap::fromImage(cover)); d->m_cover->update(); } @@ -497,9 +514,15 @@ // d->m_playingMusic.title = meta.title; // d->m_playingMusic.artist = meta.artist; // d->m_playingMusic.album = meta.album; -// } + // } } +//void LyricWidget::slotTheme(int type) +//{ +// Q_D(LyricWidget); + +//} + void LyricWidget::setBackgroundColor(QColor backgroundColor) { Q_D(LyricWidget); diff -Nru deepin-music-5.0.1+ds/src/music-player/view/lyricwidget.h deepin-music-6.0.1.54+ds.1/src/music-player/view/lyricwidget.h --- deepin-music-5.0.1+ds/src/music-player/view/lyricwidget.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/lyricwidget.h 2020-07-14 12:05:00.000000000 +0000 @@ -21,13 +21,15 @@ #pragma once -#include +#include #include #include "core/playlist.h" +DWIDGET_USE_NAMESPACE + class LyricWidgetPrivate; -class LyricWidget : public QFrame +class LyricWidget : public DFrame { Q_OBJECT Q_PROPERTY(QString defaultCover READ defaultCover WRITE setDefaultCover) @@ -35,7 +37,7 @@ public: explicit LyricWidget(QWidget *parent = Q_NULLPTR); - ~LyricWidget(); + ~LyricWidget() override; void updateUI(); QString defaultCover() const; @@ -65,7 +67,7 @@ void setDefaultCover(QString defaultCover); void setBackgroundColor(QColor backgroundColor); void onUpdateMetaCodec(const MetaPtr meta); - +// void slotTheme(int type); protected: virtual void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE; virtual void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; diff -Nru deepin-music-5.0.1+ds/src/music-player/view/mainframe.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/mainframe.cpp --- deepin-music-5.0.1+ds/src/music-player/view/mainframe.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/mainframe.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -25,28 +25,31 @@ #include #include #include -#include -#include #include #include #include #include #include +#include #include #include -#include -#include +#include +#include #include -#include -#include #include -#include +#include +#include +#include +#include + +#include "../speech/speechCenter.h" #include "../presenter/presenter.h" #include "../core/metasearchservice.h" #include "../core/musicsettings.h" #include "../core/player.h" +#include "../core/util/global.h" #include "../musicapp.h" #include "widget/titlebarwidget.h" @@ -54,21 +57,24 @@ #include "widget/searchresult.h" #include "widget/closeconfirmdialog.h" #include "helper/widgethellper.h" +#include "widget/dequalizerdialog.h" #include "importwidget.h" -#include "musiclistwidget.h" #include "playlistwidget.h" -#include "lyricwidget.h" +#include "musiclyricwidget.h" #include "footerwidget.h" #include "loadwidget.h" - +#include "musiclistwidget.h" +#include "shortcut.h" #include - +#include +#include DWIDGET_USE_NAMESPACE const QString s_PropertyViewname = "viewname"; const QString s_PropertyViewnameLyric = "lyric"; -static const int FooterHeight = 60; +const QString s_PropertyViewnamePlay = "playList"; +static const int FooterHeight = 70; static const int AnimationDelay = 400; //ms static const int BlurRadius = 25; @@ -82,142 +88,264 @@ void initUI(bool showLoading); void postInitUI(); void initMenu(); - - void setPlaylistVisible(bool visible); + void setTheme(int type); + void setPlayListVisible(bool visible); void toggleLyricView(); void togglePlaylist(); void slideToImportView(); - void slideToLyricView(); + void showLyricView(); + void hideLyricView(); + void showPlaylistView(); + void hidePlaylistView(); + void resiveistView(); void slideToMusicListView(bool keepPlaylist); - void showTips(QIcon icon, QString text); void disableControl(int delay = 350); void updateSize(QSize newSize); void updateViewname(const QString &vm); void updateTitlebarViewname(const QString &vm); void overrideTitlebarStyle(); const QString getLastImportPath() const; + void startTimer(); //! ui: show info dialog void showInfoDialog(const MetaPtr meta); - QWidget *centralWidget = nullptr; - QStackedLayout *contentLayout = nullptr; - DTitlebar *titlebar = nullptr; - DToast *tips = nullptr; - SearchResult *searchResult = nullptr; - TitlebarWidget *titlebarwidget = nullptr; - ImportWidget *importWidget = nullptr; - LoadWidget *loadWidget = nullptr; - MusicListWidget *musicList = nullptr; - LyricWidget *lyricWidget = nullptr; - PlaylistWidget *playlistWidget = nullptr; - Footer *footer = nullptr; - - QWidget *currentWidget = nullptr; - InfoDialog *infoDialog = nullptr; - - QAction *newSonglistAction = nullptr; - QAction *colorModeAction = nullptr; - QString coverBackground = ":/common/image/cover_max.svg"; - QImage originCoverImage; - QImage currentCoverImage; - QString viewname = ""; + VlcMediaPlayer *m_VlcMediaPlayer = nullptr; + DequalizerDialog *equalizerDialog = nullptr; + SpeechCenter *m_SpeechCenter = nullptr; + DWidget *centralWidget = nullptr; + QStackedLayout *contentLayout = nullptr; + DTitlebar *titlebar = nullptr; + SearchResult *searchResult = nullptr; + TitlebarWidget *titlebarwidget = nullptr; + ImportWidget *importWidget = nullptr; + LoadWidget *loadWidget = nullptr; + PlayListWidget *playListWidget = nullptr; + MUsicLyricWidget *lyricWidget = nullptr; + Footer *footer = nullptr; + MusicListWidget *musicListWidget = nullptr; + + DWidget *currentWidget = nullptr; + InfoDialog *infoDialog = nullptr; +// DSettingsDialog *configDialog = nullptr; + + QAction *newSonglistAction = nullptr; + QAction *colorModeAction = nullptr; + QString coverBackground = ":/common/image/cover_max.svg"; + QImage originCoverImage; + QImage currentCoverImage; + QString viewname = ""; QPoint m_LastMousePos; + QTimer *timer = nullptr; + int playingCount = 0; + QShortcut *volumeUpShortcut = nullptr; + QShortcut *volumeDownShortcut = nullptr; + QShortcut *nextShortcut = nullptr; + QShortcut *playPauseShortcut = nullptr; + QShortcut *previousShortcut = nullptr; + + int width = 0; + int height = 0; + bool first = true; MainFrame *q_ptr; Q_DECLARE_PUBLIC(MainFrame) }; - +void MainFramePrivate::setTheme(int type) +{ + //Q_Q(MainFrame); + if (type == 0) { + type = DGuiApplicationHelper::instance()->themeType(); + } + if (musicListWidget != nullptr) + musicListWidget->slotTheme(type); + if (playListWidget != nullptr) + playListWidget->slotTheme(type); + if (footer != nullptr) + footer->slotTheme(type); + if (lyricWidget != nullptr) + lyricWidget->slotTheme(type); + if (infoDialog != nullptr) + infoDialog->setThemeType(type); + if (importWidget != nullptr) + importWidget->slotTheme(type); + if (searchResult != nullptr) { + searchResult->slotTheme(type); + } +} void MainFramePrivate::initMenu() { Q_Q(MainFrame); - - newSonglistAction = new QAction(MainFrame::tr("New playlist"), q); + newSonglistAction = new QAction(MainFrame::tr("Add playlist"), q); + newSonglistAction->setEnabled(false); q->connect(newSonglistAction, &QAction::triggered, q, [ = ](bool) { - setPlaylistVisible(true); Q_EMIT q->addPlaylist(true); }); - auto addmusic = new QAction(MainFrame::tr("Add folder"), q); - q->connect(addmusic, &QAction::triggered, q, [ = ](bool) { - q->onSelectImportDirectory(); - }); + // auto addmusic = new QAction(MainFrame::tr("Add folder"), q); + // q->connect(addmusic, &QAction::triggered, q, [ = ](bool) { + // q->onSelectImportDirectory(); + // }); - auto addmusicfiles = new QAction(MainFrame::tr("Add file"), q); + auto addmusicfiles = new QAction(MainFrame::tr("Add music"), q); q->connect(addmusicfiles, &QAction::triggered, q, [ = ](bool) { q->onSelectImportFiles(); }); + auto equalizer = new QAction(MainFrame::tr("Equalizer"), q); + equalizerDialog = new DequalizerDialog(q); + q->connect(equalizer, &QAction::triggered, q, [ = ](bool) { + Dtk::Widget::moveToCenter(equalizerDialog); + equalizerDialog->exec(); + MusicSettings::sync(); + }); + auto settings = new QAction(MainFrame::tr("Settings"), q); q->connect(settings, &QAction::triggered, q, [ = ](bool) { - auto configDialog = new DSettingsDialog(q); - configDialog->setProperty("_d_QSSThemename", "dark"); - configDialog->setProperty("_d_QSSFilename", "DSettingsDialog"); - DThemeManager::instance()->registerWidget(configDialog); - - configDialog->setFixedSize(720, 520); + DSettingsDialog *configDialog = new DSettingsDialog(q); + // configDialog->setProperty("_d_QSSThemename", "dark"); configDialog->updateSettings(MusicSettings::settings()); - WidgetHelper::workaround_updateStyle(configDialog, "dlight"); Dtk::Widget::moveToCenter(configDialog); + + auto curAskCloseAction = MusicSettings::value("base.close.ask_close_action").toBool(); + auto curLastPlaylist = MusicSettings::value("base.play.last_playlist").toString(); + auto curLastMeta = MusicSettings::value("base.play.last_meta").toString(); + auto curLastPosition = MusicSettings::value("base.play.last_position").toInt(); configDialog->exec(); + delete configDialog; MusicSettings::sync(); + MusicSettings::setOption("base.close.ask_close_action", curAskCloseAction); + MusicSettings::setOption("base.play.last_playlist", curLastPlaylist); + MusicSettings::setOption("base.play.last_meta", curLastMeta); + MusicSettings::setOption("base.play.last_position", curLastPosition); + + auto play_pauseStr = MusicSettings::value("shortcuts.all.play_pause").toString(); + if (play_pauseStr.isEmpty()) + playPauseShortcut->setEnabled(false); + else { + playPauseShortcut->setEnabled(true); + playPauseShortcut->setKey(QKeySequence(play_pauseStr)); + } + auto volume_upStr = MusicSettings::value("shortcuts.all.volume_up").toString(); + if (volume_upStr.isEmpty()) + volumeUpShortcut->setEnabled(false); + else { + volumeUpShortcut->setEnabled(true); + volumeUpShortcut->setKey(QKeySequence(volume_upStr)); + } + auto volume_downStr = MusicSettings::value("shortcuts.all.volume_down").toString(); + if (volume_downStr.isEmpty()) + volumeDownShortcut->setEnabled(false); + else { + volumeDownShortcut->setEnabled(true); + volumeDownShortcut->setKey(QKeySequence(volume_downStr)); + } + auto nextStr = MusicSettings::value("shortcuts.all.next").toString(); + if (nextStr.isEmpty()) + nextShortcut->setEnabled(false); + else { + nextShortcut->setEnabled(true); + nextShortcut->setKey(QKeySequence(nextStr)); + } + auto previousStr = MusicSettings::value("shortcuts.all.previous").toString(); + if (previousStr.isEmpty()) + previousShortcut->setEnabled(false); + else { + previousShortcut->setEnabled(true); + previousShortcut->setKey(QKeySequence(previousStr)); + } + Q_EMIT q->fadeInOut(); }); + int themeType = DGuiApplicationHelper::instance()->themeType(); colorModeAction = new QAction(MainFrame::tr("Dark theme"), q); colorModeAction->setCheckable(true); - colorModeAction->setChecked(MusicSettings::value("base.play.theme").toString() == "dark"); + colorModeAction->setChecked(themeType == 2); q->connect(colorModeAction, &QAction::triggered, q, [ = ](bool) { - if (DThemeManager::instance()->theme() == "light") { - colorModeAction->setChecked(true); - DThemeManager::instance()->setTheme("dark"); - } else { - colorModeAction->setChecked(false); - DThemeManager::instance()->setTheme("light"); - } - MusicSettings::setOption("base.play.theme", DThemeManager::instance()->theme()); + //MusicSettings::setOption("base.play.theme", DThemeManager::instance()->theme()); }); QAction *m_close = new QAction(MainFrame::tr("Exit"), q); q->connect(m_close, &QAction::triggered, q, [ = ](bool) { +// d->presenter->handleQuit(); + Q_EMIT q->exit(); + qDebug() << "sync config start"; +// MusicSettings::sync(); q->close(); }); - auto titleMenu = new QMenu(q); - titleMenu->setStyle(QStyleFactory::create("dlight")); - + auto titleMenu = new DMenu(q); titleMenu->addAction(newSonglistAction); - titleMenu->addAction(addmusic); titleMenu->addAction(addmusicfiles); titleMenu->addSeparator(); - - titleMenu->addAction(colorModeAction); + titleMenu->addAction(equalizer); titleMenu->addAction(settings); titleMenu->addSeparator(); titlebar->setMenu(titleMenu); + +//add shortcut + playPauseShortcut = new QShortcut(q); + playPauseShortcut->setKey(QKeySequence(MusicSettings::value("shortcuts.all.play_pause").toString())); + q->connect(playPauseShortcut, &QShortcut::activated, q, [ = ]() { + //Q_EMIT q->triggerShortcutAction("shortcuts.all.play_pause"); + footer->onTogglePlayButton(); + }); + + volumeUpShortcut = new QShortcut(q); + volumeUpShortcut->setKey(QKeySequence(MusicSettings::value("shortcuts.all.volume_up").toString())); + q->connect(volumeUpShortcut, &QShortcut::activated, q, [ = ]() { + Q_EMIT q->triggerShortcutAction("shortcuts.all.volume_up"); + }); + + volumeDownShortcut = new QShortcut(q); + volumeDownShortcut->setKey(QKeySequence(MusicSettings::value("shortcuts.all.volume_down").toString())); + q->connect(volumeDownShortcut, &QShortcut::activated, q, [ = ]() { + Q_EMIT q->triggerShortcutAction("shortcuts.all.volume_down"); + }); + + nextShortcut = new QShortcut(q); + nextShortcut->setKey(QKeySequence(MusicSettings::value("shortcuts.all.next").toString())); + q->connect(nextShortcut, &QShortcut::activated, q, [ = ]() { + Q_EMIT q->triggerShortcutAction("shortcuts.all.next"); + }); + + previousShortcut = new QShortcut(q); + previousShortcut->setKey(QKeySequence(MusicSettings::value("shortcuts.all.previous").toString())); + q->connect(previousShortcut, &QShortcut::activated, q, [ = ]() { + Q_EMIT q->triggerShortcutAction("shortcuts.all.previous"); + }); + + QShortcut *addmusicfilesShortcut = new QShortcut(q); + addmusicfilesShortcut->setKey(QKeySequence(QLatin1String("Ctrl+I"))); + q->connect(addmusicfilesShortcut, &QShortcut::activated, q, [ = ]() { + q->onSelectImportFiles(); + }); + + QShortcut *newSonglistShortcut = new QShortcut(q); + newSonglistShortcut->setKey(QKeySequence(QLatin1String("Ctrl+Shift+N"))); + q->connect(newSonglistShortcut, &QShortcut::activated, q, [ = ]() { + if (newSonglistAction->isEnabled()) + Q_EMIT q->addPlaylist(true); + }); } void MainFramePrivate::initUI(bool showLoading) { showLoading = true; Q_Q(MainFrame); - q->setMinimumSize(QSize(720, 480)); + q->setMinimumSize(QSize(900, 600)); q->setFocusPolicy(Qt::ClickFocus); - titlebarwidget = new TitlebarWidget(q); - titlebarwidget->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); - - titlebar = q->titlebar(); - titlebar->setCustomWidget(titlebarwidget, Qt::AlignLeft, false); -// titlebar->setBackgroundTransparent(true); - overrideTitlebarStyle(); + //titlebar->setBackgroundTransparent(true); + //overrideTitlebarStyle(); centralWidget = new QWidget(q); contentLayout = new QStackedLayout(centralWidget); - contentLayout->setContentsMargins(20, 20, 20, 20); + contentLayout->setContentsMargins(20, 20, 20, 0); contentLayout->setMargin(0); contentLayout->setSpacing(0); q->setCentralWidget(centralWidget); @@ -226,7 +354,6 @@ importWidget = new ImportWidget(q); footer = new Footer(q); - footer->setFixedHeight(FooterHeight + footer->progressExtentHeight()); footer->enableControl(false); contentLayout->addWidget(titlebar); @@ -241,76 +368,178 @@ loadWidget->hide(); importWidget->show(); } - footer->show(); + footer->hide(); infoDialog = new InfoDialog(q); + + int themeType = DGuiApplicationHelper::instance()->themeType(); + infoDialog->setThemeType(themeType); infoDialog->hide(); + m_SpeechCenter = SpeechCenter::getInstance(); + m_VlcMediaPlayer = Player::instance()->core(); +#if 0 + footer->show(); +#endif } void MainFramePrivate::postInitUI() { Q_Q(MainFrame); - QString descriptionText = MainFrame::tr("Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc."); - QString acknowledgementLink = "https://www.deepin.org/acknowledgments/deepin-music#thanks"; - qApp->setProductName(QApplication::tr("Deepin Music")); - qApp->setApplicationAcknowledgementPage(acknowledgementLink); - qApp->setProductIcon(QIcon(":/common/image/app_icon.svg")); - qApp->setApplicationDescription(descriptionText); - - searchResult = new SearchResult(q); - titlebarwidget->setResultWidget(searchResult); loadWidget->hide(); + newSonglistAction->setDisabled(true); - musicList = new MusicListWidget; - musicList->setContentsMargins(0, titlebar->height(), 0, FooterHeight); + playListWidget = footer->getPlayListWidget(); - lyricWidget = new LyricWidget; - lyricWidget->setContentsMargins(0, titlebar->height(), 0, FooterHeight); + lyricWidget = new MUsicLyricWidget; + lyricWidget->setContentsMargins(0, titlebar->height(), 0, FooterHeight + 10); - playlistWidget = new PlaylistWidget; + musicListWidget = new MusicListWidget; + musicListWidget->setContentsMargins(0, titlebar->height(), 0, FooterHeight + 10); + + contentLayout->setContentsMargins(0, 0, 0, 0); contentLayout->addWidget(importWidget); - contentLayout->addWidget(musicList); contentLayout->addWidget(lyricWidget); - contentLayout->addWidget(playlistWidget); + contentLayout->addWidget(musicListWidget); + + timer = new QTimer(q); + q->connect(timer, SIGNAL(timeout()), q, SLOT(changePicture())); titlebarwidget->setSearchEnable(false); importWidget->show(); - footer->show(); + footer->hide(); footer->setFocus(); updateSize(q->size()); + infoDialog->move(q->pos().x() + q->size().width() / 2 - infoDialog->width() / 2, q->pos().y() + titlebar->height()); } -void MainFramePrivate::slideToLyricView() +void MainFramePrivate::showLyricView() { -// Q_Q(MainFrame); - - auto current = currentWidget ? currentWidget : musicList; + footer->setPlaylistButtonChecked(false); + hidePlaylistView(); + auto current = currentWidget ? currentWidget : playListWidget; + lyricWidget->setFixedSize(current->size()); WidgetHelper::slideBottom2TopWidget( current, lyricWidget, AnimationDelay); - -// q->disableControl(); -// setPlaylistVisible(false); currentWidget = lyricWidget; titlebar->raise(); + footer->setLyricButtonChecked(true); footer->raise(); updateViewname(s_PropertyViewnameLyric); } +void MainFramePrivate::hideLyricView() +{ + footer->setPlaylistButtonChecked(false); + auto current = currentWidget ? currentWidget : playListWidget; + lyricWidget->setFixedSize(current->size()); + WidgetHelper::slideTop2BottomWidget( + current, musicListWidget, AnimationDelay); + titlebar->raise(); + footer->setLyricButtonChecked(false); + footer->raise(); + + currentWidget = musicListWidget; + updateViewname(s_PropertyViewnameLyric); +} + +void MainFramePrivate::showPlaylistView() +{ + if (footer->height() > 80) { + return; + } + QRect start(5, height - 86, + width - 10, 80); + QRect end(5, height - 429, + width - 10, 423); + QRect start1(0, 0, + width - 10, 0); + QRect end1(0, 0, + width - 10, 349); + WidgetHelper::slideEdgeWidget2( + playListWidget, start1, end1, AnimationDelay, true); + WidgetHelper::slideEdgeWidget( + footer, playListWidget, start, end, AnimationDelay, true); + titlebar->raise(); + footer->raise(); + footer->setPlaylistButtonChecked(true); + +} + +void MainFramePrivate::hidePlaylistView() +{ + if (footer->height() <= 80) { + return; + } + QRect start(5, height - 429, + width - 10, 423); + QRect end(5, height - 86, + width - 10, 80); + + QRect start1(0, 0, + width - 10, 349); + QRect end1(0, 0, + width - 10, 0); + WidgetHelper::slideEdgeWidget2( + playListWidget, start1, end1, AnimationDelay, false); + WidgetHelper::slideEdgeWidget( + footer, playListWidget, start, end, AnimationDelay, false); + titlebar->raise(); + footer->setPlaylistButtonChecked(false); + footer->raise(); +} + +void MainFramePrivate::resiveistView() +{ + if (first) { + first = false; + return ; + } + if (playListWidget->isVisible()) { + QRect start1(0, 0, + width - 10, 349); + QRect end1(0, 0, + width - 10, 349); + WidgetHelper::slideEdgeWidget2( + playListWidget, start1, end1, AnimationDelay, true); + QRect rect(5, height - 429, + width - 10, 423); + WidgetHelper::slideEdgeWidget( + footer, playListWidget, rect, rect, 10, true); + } else { + QRect start1(0, 0, + width - 10, 0); + QRect end1(0, 0, + width - 10, 0); + WidgetHelper::slideEdgeWidget2( + playListWidget, start1, end1, AnimationDelay, false); + QRect rect(5, height - 86, + width - 10, 80); + WidgetHelper::slideEdgeWidget( + footer, playListWidget, rect, rect, 10, false); + } +} + + void MainFramePrivate:: slideToImportView() { -// Q_Q(MainFrame); + //Q_Q(MainFrame); + titlebarwidget->setSearchEnable(false); + newSonglistAction->setDisabled(true); + footer->setLyricButtonChecked(false); + footer->setPlaylistButtonChecked(false); if (importWidget->isVisible()) { importWidget->showImportHint(); footer->enableControl(false); return; } -// setPlaylistVisible(false); - auto current = currentWidget ? currentWidget : musicList; + //setPlayListVisible(false); + playListWidget->hide(); + auto current = currentWidget ? currentWidget : playListWidget; importWidget->showImportHint(); footer->enableControl(false); importWidget->setFixedSize(current->size()); @@ -322,116 +551,78 @@ footer->enableControl(false); currentWidget = importWidget; titlebar->raise(); - footer->raise(); + footer->hide(); - titlebarwidget->setSearchEnable(false); - newSonglistAction->setDisabled(true); updateViewname(""); } void MainFramePrivate:: slideToMusicListView(bool keepPlaylist) { + Q_UNUSED(keepPlaylist) Q_Q(MainFrame); + titlebarwidget->setSearchEnable(true); + newSonglistAction->setDisabled(false); + footer->setLyricButtonChecked(false); + footer->setPlaylistButtonChecked(false); auto current = currentWidget ? currentWidget : importWidget; - if (musicList->isVisible()) { - musicList->raise(); + if (musicListWidget->isVisible()) { + musicListWidget->raise(); titlebar->raise(); footer->raise(); - setPlaylistVisible(keepPlaylist); return; } - musicList->setFixedSize(current->size()); + musicListWidget->setFixedSize(current->size()); WidgetHelper::slideTop2BottomWidget( - current, musicList, AnimationDelay); + current, musicListWidget, AnimationDelay); q->update(); - disableControl(AnimationDelay); - currentWidget = musicList; - setPlaylistVisible(keepPlaylist); + //disableControl(AnimationDelay); + currentWidget = musicListWidget; titlebar->raise(); + footer->show(); footer->raise(); - titlebarwidget->setSearchEnable(true); - newSonglistAction->setDisabled(false); footer->setFocus(); updateViewname(""); } -void MainFramePrivate::showTips(QIcon icon, QString text) -{ - Q_Q(MainFrame); - if (tips) { - tips->hide(); - tips->deleteLater(); - } - - tips = new DToast(q); - tips->setIcon(icon); - tips->setText(text); - tips->pop(); - auto center = q->mapToGlobal(QPoint(q->rect().center())); - center.setX(center.x() - tips->width() / 2); - center.setY(center.y() + q->height() / 2 - footer->height() - 40); - center = tips->mapFromGlobal(center); - center = tips->mapToParent(center); - tips->move(center); -} - void MainFramePrivate::toggleLyricView() { + musicListWidget->hide(); if (lyricWidget->isVisible()) { - slideToMusicListView(false); + hideLyricView(); + titlebarwidget->setSearchEnable(true); } else { - slideToLyricView(); + titlebarwidget->setSearchEnable(false); + showLyricView(); } } void MainFramePrivate::togglePlaylist() { - setPlaylistVisible(!playlistWidget->isVisible()); + + importWidget->hide(); + + if (playListWidget->isVisible()) { + hidePlaylistView(); + titlebarwidget->setSearchEnable(true); + } else { + showPlaylistView(); + titlebarwidget->setSearchEnable(true); + } } -void MainFramePrivate::setPlaylistVisible(bool visible) +void MainFramePrivate::setPlayListVisible(bool visible) { Q_Q(MainFrame); - if (playlistWidget->isVisible() == visible) { - if (visible) { - playlistWidget->setFocus(); - playlistWidget->show(); - playlistWidget->raise(); - } - return; - } - - auto ismoving = playlistWidget->property("moving").toBool(); - if (ismoving) { + footer->setPlaylistButtonChecked(visible); + if (footer->getShowPlayListFlag() == visible) { return; } - playlistWidget->setEnabled(false); - playlistWidget->setProperty("moving", true); - auto titleBarHeight = titlebar->height(); - - int delay = AnimationDelay * 6 / 10; - QRect start(q->width(), titleBarHeight, - playlistWidget->width(), playlistWidget->height()); - QRect end(q->width() - playlistWidget->width(), titleBarHeight, - playlistWidget->width(), playlistWidget->height()); - if (!visible) { - WidgetHelper::slideEdgeWidget(playlistWidget, end, start, delay, true); - footer->setFocus(); - } else { - playlistWidget->setFocus(); - WidgetHelper::slideEdgeWidget(playlistWidget, start, end, delay); - playlistWidget->raise(); - } - disableControl(delay); + footer->showPlayListWidget(q->width(), q->height(), false); titlebar->raise(); footer->raise(); - - QTimer::singleShot(delay * 1, q, [ = ]() { - playlistWidget->setProperty("moving", false); - }); } void MainFramePrivate::disableControl(int delay) @@ -439,8 +630,9 @@ Q_Q(MainFrame); footer->enableControl(false); QTimer::singleShot(delay, q, [ = ]() { + footer->show(); footer->enableControl(true); - playlistWidget->setEnabled(true); + playListWidget->setEnabled(true); }); } @@ -457,30 +649,21 @@ auto titleBarHeight = titlebar->height(); titlebar->raise(); - titlebar->move(0, 0); titlebar->resize(newSize.width(), titleBarHeight); - titlebarwidget->setFixedSize(newSize.width() - titlebar->buttonAreaWidth() - FooterHeight, titleBarHeight); importWidget->setFixedSize(newSize); - auto progressExtHeight = footer->progressExtentHeight(); if (lyricWidget) { - lyricWidget->resize(newSize); - musicList->setFixedSize(newSize); - - playlistWidget->setFixedSize(220, newSize.height() - FooterHeight - titleBarHeight); - if (playlistWidget->isVisible()) { - playlistWidget->hide(); - } + lyricWidget->setFixedSize(newSize); + musicListWidget->setFixedSize(newSize); } footer->raise(); - footer->resize(newSize.width(), FooterHeight + progressExtHeight); - footer->setFixedHeight(FooterHeight + progressExtHeight); - footer->move(0, newSize.height() - FooterHeight - progressExtHeight); - - if (tips) { - tips->hide(); + width = newSize.width(); + height = newSize.height(); + footer->showPlayListWidget(newSize.width(), newSize.height()); + if (playListWidget != nullptr) { + resiveistView(); } } @@ -523,7 +706,6 @@ void MainFramePrivate::overrideTitlebarStyle() { titlebar->setObjectName("Titlebar"); - DThemeManager::registerWidget(titlebar, "Titlebar", QStringList({"viewname"})); QStringList objNames; objNames << "DTitlebarDWindowMinButton" @@ -536,7 +718,6 @@ if (!titlebarBt) { continue; } - DThemeManager::registerWidget(titlebarBt, "Titlebar", QStringList({"viewname"})); } } @@ -556,6 +737,11 @@ return lastImportPath; } +void MainFramePrivate::startTimer() +{ + timer->start(250); +} + void MainFramePrivate::showInfoDialog(const MetaPtr meta) { infoDialog->show(); @@ -566,18 +752,70 @@ DMainWindow(parent), dd_ptr(new MainFramePrivate(this)) { setObjectName("MainFrame"); - DThemeManager::instance()->registerWidget(this, QStringList() << s_PropertyViewname); + Global::setAppName(tr("Music")); + QString descriptionText = MainFrame::tr("Music is a local music player with beautiful design and simple functions."); + QString acknowledgementLink = "https://www.deepin.org/acknowledgments/deepin-music#thanks"; + qApp->setProductName(QApplication::tr("Music")); + qApp->setApplicationAcknowledgementPage(acknowledgementLink); + qApp->setProductIcon(QIcon::fromTheme("deepin-music")); + qApp->setApplicationDescription(descriptionText); + + this->setWindowTitle(tr("Music")); + + Q_D(MainFrame); + d->titlebarwidget = new TitlebarWidget(this); + + d->searchResult = new SearchResult(this); +// d->searchResult->show(); + d->titlebarwidget->setResultWidget(d->searchResult); + d->titlebarwidget->setEnabled(false); + d->titlebarwidget->show(); + + d->titlebar = titlebar(); + d->titlebar->setFixedHeight(50); + d->titlebar->setTitle(tr("Music")); + d->titlebar->setIcon(QIcon::fromTheme("deepin-music")); //titlebar->setCustomWidget(titlebarwidget, Qt::AlignLeft, false); + + d->titlebar->setCustomWidget(d->titlebarwidget); + d->titlebar->layout()->setAlignment(d->titlebarwidget, Qt::AlignCenter); + d->titlebar->resize(width(), 50); + QShortcut *viewshortcut = new QShortcut(this); + viewshortcut->setKey(QKeySequence(QLatin1String("Ctrl+Shift+/"))); + connect(viewshortcut, SIGNAL(activated()), this, SLOT(onViewShortcut())); + + QShortcut *searchShortcut = new QShortcut(this); + searchShortcut->setKey(QKeySequence(QLatin1String("Ctrl+F"))); + connect(searchShortcut, &QShortcut::activated, this, [ = ]() { + d->titlebarwidget->setEditStatus(); + }); + + QShortcut *windowShortcut = new QShortcut(this); + windowShortcut->setKey(QKeySequence(QLatin1String("Ctrl+Alt+F"))); + connect(windowShortcut, &QShortcut::activated, this, [ = ]() { + if (windowState() == Qt::WindowMaximized) { + showNormal(); + } else { + showMaximized(); + } + }); } MainFrame::~MainFrame() { - + Q_D(MainFrame); + Q_EMIT exit(); + MusicSettings::sync(); + MusicSettings::setOption("base.play.state", int(windowState())); + MusicSettings::setOption("base.play.geometry", saveGeometry()); + delete d->equalizerDialog; } void MainFrame::initUI(bool showLoading) { Q_D(MainFrame); + d->initUI(showLoading); + d->initMenu(); } @@ -587,14 +825,14 @@ d->postInitUI(); updateUI(); - focusMusicList(); + focusPlayList(); auto playAction = new QAction(tr("Play/Pause"), this); auto prevAction = new QAction(tr("Previous"), this); auto nextAction = new QAction(tr("Next"), this); auto quitAction = new QAction(tr("Exit"), this); - auto trayIconMenu = new QMenu(this); + auto trayIconMenu = new DMenu(this); trayIconMenu->addAction(playAction); trayIconMenu->addAction(prevAction); trayIconMenu->addAction(nextAction); @@ -602,7 +840,8 @@ trayIconMenu->addAction(quitAction); auto trayIcon = new QSystemTrayIcon(this); - trayIcon->setIcon(QIcon(":/common/image/deepin-music.svg")); + trayIcon->setIcon(QIcon::fromTheme("deepin-music")); + trayIcon->setToolTip(tr("Music")); trayIcon->setContextMenu(trayIconMenu); trayIcon->show(); @@ -628,7 +867,7 @@ if (isVisible()) { if (isMinimized()) { showNormal(); - // when window flags changed, should call hide() and show() + // when window flags changed, should call hide and show hide(); show(); } else { @@ -645,11 +884,19 @@ { Q_D(MainFrame); + + d->playListWidget->setCurPlaylist(presenter->playlist(PlayMusicListID)); + d->footer->setCurPlaylist(presenter->playlist(PlayMusicListID)); + + connect(this, &MainFrame::exit, presenter, &Presenter::onHandleQuit, Qt::DirectConnection); connect(this, &MainFrame::importSelectFiles, presenter, &Presenter::onImportFiles); connect(this, &MainFrame::addPlaylist, presenter, &Presenter::onPlaylistAdd); + connect(this, &MainFrame::fadeInOut, presenter, &Presenter::onFadeInOut); -// connect(d->titlebar, &Titlebar::mouseMoving, this, &MainFrame::moveWindow); -// connect(d->footer, &Footer::mouseMoving, this, &MainFrame::moveWindow); + connect(presenter, &Presenter::searchResult, + d->musicListWidget, [ = ](QString searchText, QList resultlist) { + Q_EMIT d->musicListWidget->seaResult(searchText, resultlist); + }); #ifdef Q_OS_WIN connect(d->titlebar, &Titlebar::mousePosMoving, @@ -665,46 +912,70 @@ }); #endif - connect(d->titlebarwidget, &TitlebarWidget::locateMusicInAllMusiclist, - presenter, &Presenter::onLocateMusicAtAll); - connect(d->titlebarwidget, &TitlebarWidget::search, - presenter, &Presenter::onSearchText); connect(d->titlebarwidget, &TitlebarWidget::searchExited, presenter, &Presenter::onExitSearch); + connect(d->titlebarwidget, &TitlebarWidget::searchText, + presenter, &Presenter::onSearchText); + + connect(d->titlebarwidget, &TitlebarWidget::searchExited, + presenter, [ = ]() { + Q_EMIT d->musicListWidget->closeSearch(); + }); connect(d->importWidget, &ImportWidget::scanMusicDirectory, presenter, &Presenter::onScanMusicDirectory); - connect(d->importWidget, &ImportWidget::importFiles, + connect(d->importWidget, &ImportWidget::selectImportDirectory, this, &MainFrame::onSelectImportDirectory); + connect(d->importWidget, &ImportWidget::importFiles, + this, &MainFrame::onSelectImportFiles); connect(d->importWidget, &ImportWidget::importSelectFiles, this, [ = ](const QStringList & urllist) { d->importWidget->showWaitHint(); - Q_EMIT importSelectFiles(urllist); + Q_EMIT importSelectFiles(urllist, nullptr); }); connect(presenter, &Presenter::notifyAddToPlaylist, - this, [ = ](PlaylistPtr playlist, const MetaPtrList) { - auto icon = QIcon(":/common/image/notify_success.svg"); + this, [ = ](PlaylistPtr playlist, const MetaPtrList metaPtrList, int count) { + auto icon = QIcon(":/common/image/notify_success_new.svg"); QFontMetrics fm(font()); auto displayName = fm.elidedText(playlist->displayName(), Qt::ElideMiddle, 300); + auto text = tr("Successfully added to \"%1\"").arg(displayName); - d->showTips(icon, text); - }); + int curCount = metaPtrList.size() - count; + if (count > 0) { + if (metaPtrList.size() == 1 || curCount == 0) + text = tr("Already added to the playlist"); + else { + if (curCount == 1) + text = tr("1 song added"); + else + text = tr("%1 songs added").arg(curCount); + } + } - connect(presenter, &Presenter::showPlaylist, - this, [ = ](bool show) { - d->setPlaylistVisible(show); + if (playlist->id() != AlbumMusicListID && playlist->id() != ArtistMusicListID + && playlist->id() != PlayMusicListID) + this->sendMessage(icon, text); + + QWidget *content = this->findChild("_d_message_manager_content"); + if (nullptr != content) + content->setContentsMargins(0, 0, 0, 90); }); + connect(presenter, &Presenter::showMusicList, this, [ = ](PlaylistPtr playlist) { auto current = d->currentWidget ? d->currentWidget : d->importWidget; - d->musicList->resize(current->size()); - d->musicList->show(); + + d->musicListWidget->resize(current->size()); + d->musicListWidget->show(); + d->currentWidget = d->musicListWidget; d->importWidget->hide(); - d->musicList->onMusiclistChanged(playlist); + d->playListWidget->onMusiclistChanged(playlist); + d->musicListWidget->onMusiclistChanged(playlist); d->disableControl(false); d->titlebarwidget->setSearchEnable(true); + d->newSonglistAction->setEnabled(true); }); connect(presenter, &Presenter::coverSearchFinished, @@ -729,22 +1000,55 @@ connect(presenter, &Presenter::musicStoped, this, [ = ](PlaylistPtr, const MetaPtr) { setCoverBackground(coverBackground()); + d->timer->stop(); }); + /************************************************ + * handl the case where file does not exsit + * ***********************************************/ + connect(d->playListWidget, &PlayListWidget::fileRemoved, + presenter, &Presenter::notifyMusciError); connect(presenter, &Presenter::notifyMusciError, this, [ = ](PlaylistPtr playlist, const MetaPtr meta, int /*error*/) { + Q_UNUSED(playlist) + QList ql = this->findChildren("uniqueinvaliddailog"); + if (ql.size() > 0) { + if (!ql.first()->isHidden()) + return ; + } + Dtk::Widget::DDialog warnDlg(this); - warnDlg.setIcon(QIcon(":/common/image/dialog_warning.svg")); + warnDlg.setObjectName("uniqueinvaliddailog"); + warnDlg.setIcon(QIcon::fromTheme("deepin-music")); warnDlg.setTextFormat(Qt::RichText); - warnDlg.setTitle(tr("Invalid or non-existent file")); + warnDlg.setTitle(tr("File is invalid or does not exist, load failed")); warnDlg.addButtons(QStringList() << tr("OK")); warnDlg.setDefaultButton(0); if (0 == warnDlg.exec()) { - if (playlist->canNext() && playlist->playing() == meta) { - Q_EMIT presenter->playNext(playlist, meta); + auto curPlaylist = d->playListWidget->curPlaylist(); + if (curPlaylist->canNext()) { + bool existFlag = false; + for (auto curMeta : curPlaylist->allmusic()) { + if (!curMeta->invalid || access(curMeta->localPath.toStdString().c_str(), F_OK) == 0) { + if (QFileInfo(curMeta->localPath).dir().isEmpty()) { + continue; + } + Q_EMIT presenter->playNext(curPlaylist, meta); + existFlag = true; + break; + } + } + if (!existFlag) { + d->timer->stop(); + } + } else { + d->timer->stop(); } + } else { + d->timer->stop(); } + }); connect(presenter, &Presenter::metaLibraryClean, @@ -757,9 +1061,16 @@ connect(presenter, &Presenter::scanFinished, this, [ = ](const QString & /*jobid*/, int mediaCount) { if (0 == mediaCount) { - QString message = QString(tr("Failed to import, no vaild music file found!")); + QList ql = this->findChildren("uniquewarndailog"); + if (ql.size() > 0) { + if (!ql.first()->isHidden()) + return ; + } + + QString message = QString(tr("Import failed, no valid music file found")); Dtk::Widget::DDialog warnDlg(this); - warnDlg.setIcon(QIcon(":/common/image/dialog_warning.svg")); + warnDlg.setObjectName("uniquewarndailog"); + warnDlg.setIcon(QIcon::fromTheme("deepin-music")); warnDlg.setTextFormat(Qt::AutoText); warnDlg.setTitle(message); warnDlg.addButtons(QStringList() << tr("OK")); @@ -777,15 +1088,23 @@ qApp->setApplicationDisplayName(playlist->displayName()); this->setWindowTitle(meta->title); + d->startTimer(); + }); + + connect(presenter, &Presenter::musicPaused, + this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { + Q_UNUSED(playlist) + Q_UNUSED(meta) + d->timer->stop(); }); connect(presenter, &Presenter::meidaFilesImported, this, [ = ](PlaylistPtr playlist, const MetaPtrList metalist) { - d->slideToMusicListView(false); - d->musicList->onMusiclistChanged(playlist); - if (!metalist.isEmpty()) { - d->musicList->setCustomSortType(); - } + d->setPlayListVisible(false); + d->playListWidget->onMusiclistChanged(playlist); + d->musicListWidget->onMusicListAdded(playlist, metalist); + d->disableControl(true); + d->slideToMusicListView(true); }); connect(presenter, &Presenter::requestImportFiles, @@ -799,7 +1118,16 @@ d->titlebarwidget->exitSearch(); } if (d->lyricWidget->isVisible()) { - d->slideToMusicListView(false); + d->setPlayListVisible(true); + } + }); + + connect(presenter, &Presenter::requestMusicListMenu, + this, [ = ](const QPoint & pos, PlaylistPtr selectedlist, PlaylistPtr favlist, QListnewlists, char type) { + if (type > 0) { + d->musicListWidget->onCustomContextMenuRequest(pos, selectedlist, favlist, newlists, type); + } else { + d->playListWidget->onCustomContextMenuRequest(pos, selectedlist, favlist, newlists); } }); @@ -809,73 +1137,91 @@ d->titlebarwidget->exitSearch(); } if (d->lyricWidget->isVisible()) { - d->slideToMusicListView(false); + d->setPlayListVisible(true); } }); - // MusicList - connect(d->musicList, &MusicListWidget::showInfoDialog, + // The search box + connect(d->titlebarwidget, &TitlebarWidget::searchCand, + presenter, &Presenter::onSearchCand); + + connect(presenter, &Presenter::searchCand, + d->searchResult, &SearchResult::onSearchCand, Qt::QueuedConnection); + + // PlayList + connect(d->playListWidget, &PlayListWidget::showInfoDialog, this, [ = ](const MetaPtr meta) { d->showInfoDialog(meta); }); - connect(d->musicList, &MusicListWidget::playall, + connect(d->playListWidget, &PlayListWidget::playall, presenter, &Presenter::onPlayall); - connect(d->musicList, &MusicListWidget::resort, + + connect(d->playListWidget, &PlayListWidget::resort, presenter, &Presenter::onResort); - connect(d->musicList, &MusicListWidget::playMedia, + + connect(d->playListWidget, &PlayListWidget::playMedia, presenter, &Presenter::onSyncMusicPlay); - connect(d->musicList, &MusicListWidget::updateMetaCodec, + connect(d->playListWidget, &PlayListWidget::resume, + presenter, &Presenter::onSyncMusicResume); + connect(d->playListWidget, &PlayListWidget::updateMetaCodec, presenter, &Presenter::onUpdateMetaCodec); - connect(d->musicList, &MusicListWidget::requestCustomContextMenu, + connect(d->playListWidget, &PlayListWidget::requestCustomContextMenu, presenter, &Presenter::onRequestMusiclistMenu); - connect(d->musicList, &MusicListWidget::addToPlaylist, + connect(d->playListWidget, &PlayListWidget::addToPlaylist, presenter, &Presenter::onAddToPlaylist); - connect(d->musicList, &MusicListWidget::musiclistRemove, + connect(d->playListWidget, &PlayListWidget::musiclistRemove, presenter, &Presenter::onMusiclistRemove); - connect(d->musicList, &MusicListWidget::musiclistDelete, + connect(d->playListWidget, &PlayListWidget::musiclistDelete, presenter, &Presenter::onMusiclistDelete); + connect(d->playListWidget, &PlayListWidget::addMetasFavourite, + presenter, &Presenter::onAddMetasFavourite); + connect(d->playListWidget, &PlayListWidget::removeMetasFavourite, + presenter, &Presenter::onRemoveMetasFavourite); + connect(d->playListWidget, &PlayListWidget::pause, + presenter, &Presenter::onMusicPause); + connect(d->playListWidget, &PlayListWidget::musicFileMiss, + presenter, &Presenter::musicFileMiss); - connect(d->musicList, &MusicListWidget::importSelectFiles, + connect(d->playListWidget, &PlayListWidget::importSelectFiles, this, [ = ](PlaylistPtr playlist, QStringList urllist) { presenter->requestImportPaths(playlist, urllist); }); - connect(d->musicList, &MusicListWidget::updateMetaCodec, + connect(d->playListWidget, &PlayListWidget::updateMetaCodec, d->footer, &Footer::onUpdateMetaCodec); connect(presenter, &Presenter::musicListResorted, - d->musicList, &MusicListWidget::onMusiclistChanged); - connect(presenter, &Presenter::requestMusicListMenu, - d->musicList, &MusicListWidget::onCustomContextMenuRequest); + d->playListWidget, &PlayListWidget::onMusiclistChanged); + connect(presenter, &Presenter::currentMusicListChanged, - d->musicList, &MusicListWidget::onMusiclistChanged); + d->playListWidget, &PlayListWidget::onMusiclistChanged); connect(presenter, &Presenter::musicPlayed, - d->musicList, &MusicListWidget::onMusicPlayed); + d->playListWidget, &PlayListWidget::onMusicPlayed); connect(presenter, &Presenter::musicError, - d->musicList, &MusicListWidget::onMusicError); + d->playListWidget, &PlayListWidget::onMusicError); connect(presenter, &Presenter::musicListAdded, - d->musicList, &MusicListWidget::onMusicListAdded); + d->playListWidget, &PlayListWidget::onMusicListAdded); connect(presenter, &Presenter::musicListRemoved, - d->musicList, &MusicListWidget::onMusicListRemoved); + d->playListWidget, &PlayListWidget::onMusicListRemoved); connect(presenter, &Presenter::locateMusic, - d->musicList, &MusicListWidget::onLocate); + d->playListWidget, &PlayListWidget::onLocate); connect(presenter, &Presenter::progrossChanged, - d->lyricWidget, &LyricWidget::onProgressChanged); + d->lyricWidget, &MUsicLyricWidget::onProgressChanged); connect(presenter, &Presenter::musicPlayed, - d->lyricWidget, &LyricWidget::onMusicPlayed); + d->lyricWidget, &MUsicLyricWidget::onMusicPlayed); connect(presenter, &Presenter::coverSearchFinished, - d->lyricWidget, &LyricWidget::onCoverChanged); + d->lyricWidget, &MUsicLyricWidget::onCoverChanged); connect(presenter, &Presenter::lyricSearchFinished, - d->lyricWidget, &LyricWidget::onLyricChanged); + d->lyricWidget, &MUsicLyricWidget::onLyricChanged); connect(presenter, &Presenter::contextSearchFinished, - d->lyricWidget, &LyricWidget::onContextSearchFinished); + d->lyricWidget, &MUsicLyricWidget::onContextSearchFinished); connect(presenter, &Presenter::musicStoped, - d->lyricWidget, &LyricWidget::onMusicStop); + d->lyricWidget, &MUsicLyricWidget::onMusicStop); - connect(d->lyricWidget, &LyricWidget::requestContextSearch, + connect(d->lyricWidget, &MUsicLyricWidget::requestContextSearch, presenter, &Presenter::requestContextSearch); - connect(d->lyricWidget, &LyricWidget::changeMetaCache, + connect(d->lyricWidget, &MUsicLyricWidget::changeMetaCache, presenter, &Presenter::onChangeSearchMetaCache); @@ -891,7 +1237,7 @@ connect(d->footer, &Footer::locateMusic, - d->musicList, &MusicListWidget::onLocate); + d->playListWidget, &PlayListWidget::onLocate); connect(d->footer, &Footer::play, presenter, &Presenter::onSyncMusicPlay); connect(d->footer, &Footer::resume, @@ -908,17 +1254,27 @@ presenter, &Presenter::onVolumeChanged); connect(d->footer, &Footer::toggleMute, presenter, &Presenter::onToggleMute); + /*************************************** + * local toggle + * *************************************/ + connect(d->footer, &Footer::localToggleMute, + presenter, &Presenter::onLocalToggleMute); connect(d->footer, &Footer::modeChanged, presenter, &Presenter::onPlayModeChanged); connect(d->footer, &Footer::toggleFavourite, presenter, &Presenter::onToggleFavourite); + connect(d->footer, &Footer::pause, + this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { + Q_UNUSED(playlist) + Q_UNUSED(meta) + d->timer->stop(); + }); connect(d->footer, &Footer::progressRealHeightChanged, this, [ = ](qreal realHeight) { int margin = FooterHeight - - d->footer->progressExtentHeight() + static_cast(realHeight); - d->musicList->setContentsMargins(0, d->titlebar->height(), 0, margin); + d->playListWidget->setContentsMargins(0, 0, 0, margin); }); connect(presenter, &Presenter::modeChanged, @@ -941,36 +1297,159 @@ d->footer, &Footer::onVolumeChanged); connect(presenter, &Presenter::mutedChanged, d->footer, &Footer::onMutedChanged); + connect(presenter, &Presenter::localMutedChanged, + d->footer, &Footer::onLocalMutedChanged); connect(presenter, &Presenter::musicError, d->footer, &Footer::onMusicError); + connect(presenter, &Presenter::audioBufferProbed, + d->footer, &Footer::audioBufferProbed); + connect(presenter, &Presenter::metaBuffer, + d->footer, &Footer::metaBuffer); - // playlist + connect(d->footer, &Footer::localMuteStat, + presenter, &Presenter::localMuteChanged); + + // musiclist connect(presenter, &Presenter::playlistAdded, - d->playlistWidget, &PlaylistWidget::onPlaylistAdded); + d->musicListWidget, &MusicListWidget::onPlaylistAdded); connect(presenter, &Presenter::musicPlayed, - d->playlistWidget, &PlaylistWidget::onMusicPlayed); + d->musicListWidget, &MusicListWidget::onMusicPlayed); connect(presenter, &Presenter::currentMusicListChanged, - d->playlistWidget, &PlaylistWidget::onCurrentChanged); + d->musicListWidget, &MusicListWidget::onCurrentChanged); - connect(d->playlistWidget, &PlaylistWidget::addPlaylist, + connect(presenter, &Presenter::musicListResorted, + d->musicListWidget, &MusicListWidget::onMusiclistChanged); + + connect(presenter, &Presenter::musicListAdded, + d->musicListWidget, &MusicListWidget::onMusicListAdded); + connect(presenter, &Presenter::musicListRemoved, + d->musicListWidget, &MusicListWidget::onMusicListRemoved); + + connect(d->musicListWidget, &MusicListWidget::requestCustomContextMenu, + presenter, &Presenter::onRequestMusiclistMenu); + + connect(d->musicListWidget, &MusicListWidget::showInfoDialog, + this, [ = ](const MetaPtr meta) { + d->showInfoDialog(meta); + }); + + connect(d->musicListWidget, &MusicListWidget::modeChanged, + presenter, &Presenter::onPlayModeChanged); + + connect(d->musicListWidget, &MusicListWidget::resort, + presenter, &Presenter::onResort); + + connect(d->musicListWidget, &MusicListWidget::addPlaylist, presenter, &Presenter::onPlaylistAdd); - connect(d->playlistWidget, &PlaylistWidget::selectPlaylist, + connect(d->musicListWidget, &MusicListWidget::selectPlaylist, presenter, &Presenter::onCurrentPlaylistChanged); - connect(d->playlistWidget, &PlaylistWidget::playall, + connect(d->musicListWidget, &MusicListWidget::playall, presenter, &Presenter::onPlayall); - connect(d->playlistWidget, &PlaylistWidget::customResort, + connect(d->musicListWidget, &MusicListWidget::customResort, presenter, &Presenter::onCustomResort); - connect(d->playlistWidget, &PlaylistWidget::hidePlaylist, + connect(d->musicListWidget, &MusicListWidget::playMedia, + presenter, &Presenter::onSyncMusicPlay); + connect(d->musicListWidget, &MusicListWidget::resume, + presenter, &Presenter::onSyncMusicResume); + connect(d->musicListWidget, &MusicListWidget::pause, + presenter, &Presenter::onMusicPause); + connect(d->musicListWidget, &MusicListWidget::updateMetaCodec, + presenter, &Presenter::onUpdateMetaCodec); + connect(d->musicListWidget, &MusicListWidget::addToPlaylist, + presenter, &Presenter::onAddToPlaylist); + connect(d->musicListWidget, &MusicListWidget::musiclistRemove, + presenter, &Presenter::onMusiclistRemove); + connect(d->musicListWidget, &MusicListWidget::musiclistDelete, + presenter, &Presenter::onMusiclistDelete); + + connect(presenter, &Presenter::musicListClear, this, [ = ]() { - d->setPlaylistVisible(false); + qApp->setApplicationDisplayName(""); + this->setWindowTitle(tr("Music")); + }); + connect(d->musicListWidget, &MusicListWidget::importSelectFiles, + this, [ = ](PlaylistPtr playlist, QStringList urllist) { + presenter->requestImportPaths(playlist, urllist); }); + connect(d->musicListWidget, &MusicListWidget::addMetasFavourite, + presenter, &Presenter::onAddMetasFavourite); + connect(d->musicListWidget, &MusicListWidget::removeMetasFavourite, + presenter, &Presenter::onRemoveMetasFavourite); + + connect(d->musicListWidget, &MusicListWidget::selectedPlaylistChange, + d->searchResult, &SearchResult::selectPlaylist); + connect(d->musicListWidget, &MusicListWidget::selectedPlaylistChange, + d->titlebarwidget, &TitlebarWidget::selectPlaylist); + + //add Shortcut + QShortcut *muteShortcut = new QShortcut(this); + muteShortcut->setKey(QKeySequence(QLatin1String("M"))); + connect(muteShortcut, &QShortcut::activated, presenter, &Presenter::onToggleMute); + + connect(presenter, &Presenter::hidewaveformScale, d->footer, &Footer::hidewaveform); + bindSpeechConnect(presenter); + + bindEqualizerConnect(presenter); +} + +//绑定语音处理信号 +void MainFrame::bindSpeechConnect(Presenter *presenter) +{ + Q_D(const MainFrame); + connect(d->m_SpeechCenter, &SpeechCenter::sigPlayMusic, + presenter, &Presenter::onSpeechPlayMusic); + connect(d->m_SpeechCenter, &SpeechCenter::sigPlayArtist, + presenter, &Presenter::onSpeechPlayArtist); + connect(d->m_SpeechCenter, &SpeechCenter::sigPlayArtistMusic, + presenter, &Presenter::onSpeechPlayArtistMusic); + connect(d->m_SpeechCenter, &SpeechCenter::sigPlayFaverite, + presenter, &Presenter::onSpeechPlayFaverite); + connect(d->m_SpeechCenter, &SpeechCenter::sigPlayCustom, + presenter, &Presenter::onSpeechPlayCustom); + connect(d->m_SpeechCenter, &SpeechCenter::sigPlayRadom, + presenter, &Presenter::onSpeechPlayRadom); + + connect(d->m_SpeechCenter, &SpeechCenter::sigPause, + presenter, &Presenter::onSpeechPause); + connect(d->m_SpeechCenter, &SpeechCenter::sigStop, + presenter, &Presenter::onSpeechStop); + connect(d->m_SpeechCenter, &SpeechCenter::sigResume, + presenter, &Presenter::onSpeechResume); + connect(d->m_SpeechCenter, &SpeechCenter::sigPrevious, + presenter, &Presenter::onSpeechPrevious); + connect(d->m_SpeechCenter, &SpeechCenter::sigNext, + presenter, &Presenter::onSpeechNext); + + connect(d->m_SpeechCenter, &SpeechCenter::sigFavorite, + presenter, &Presenter::onSpeechFavorite); + connect(d->m_SpeechCenter, &SpeechCenter::sigUnFaverite, + presenter, &Presenter::onSpeechunFaverite); + connect(d->m_SpeechCenter, &SpeechCenter::sigSetMode, + presenter, &Presenter::onSpeechsetMode); + + //语音返回信号 + connect(presenter, &Presenter::sigSpeedResult, + d->m_SpeechCenter, &SpeechCenter::onSpeedResult); +} +//绑定均衡器处理信号 +void MainFrame::bindEqualizerConnect(Presenter *presenter) +{ + Q_D(const MainFrame); + connect(d->equalizerDialog, &DequalizerDialog::setEqualizerEnable, + presenter, &Presenter::setEqualizerEnable); + connect(d->equalizerDialog, &DequalizerDialog::setEqualizerpre, + presenter, &Presenter::setEqualizerpre); + connect(d->equalizerDialog, &DequalizerDialog::setEqualizerbauds, + presenter, &Presenter::setEqualizerbauds); + connect(d->equalizerDialog, &DequalizerDialog::setEqualizerIndex, + presenter, &Presenter::setEqualizerCurMode); } -void MainFrame::focusMusicList() +void MainFrame::focusPlayList() { Q_D(const MainFrame); - d->musicList->setFocus(); + d->playListWidget->setFocus(); } QString MainFrame::coverBackground() const @@ -984,6 +1463,8 @@ Q_D(MainFrame); setCoverBackground(coverBackground()); d->lyricWidget->updateUI(); + d->titlebarwidget->setEnabled(true); + d->titlebarwidget->show(); } void MainFrame::setCoverBackground(QString coverBackground) @@ -1000,25 +1481,25 @@ void MainFrame::onSelectImportDirectory() { Q_D(const MainFrame); - QFileDialog fileDlg(this); + DFileDialog fileDlg(this); QString lastImportPath = d->getLastImportPath(); fileDlg.setDirectory(lastImportPath); - fileDlg.setViewMode(QFileDialog::Detail); - fileDlg.setFileMode(QFileDialog::DirectoryOnly); - if (QFileDialog::Accepted == fileDlg.exec()) { + fileDlg.setViewMode(DFileDialog::Detail); + fileDlg.setFileMode(DFileDialog::Directory); + if (DFileDialog::Accepted == fileDlg.exec()) { d->importWidget->showWaitHint(); MusicSettings::setOption("base.play.last_import_path", fileDlg.directory().path()); - Q_EMIT importSelectFiles(fileDlg.selectedFiles()); + Q_EMIT importSelectFiles(fileDlg.selectedFiles(), nullptr); } } void MainFrame::onSelectImportFiles() { Q_D(const MainFrame); - QFileDialog fileDlg(this); + DFileDialog fileDlg(this); QString lastImportPath = d->getLastImportPath(); @@ -1026,19 +1507,80 @@ QString selfilter = tr("All music") + (" (%1)"); selfilter = selfilter.arg(Player::instance()->supportedSuffixList().join(" ")); - fileDlg.setViewMode(QFileDialog::Detail); - fileDlg.setFileMode(QFileDialog::ExistingFiles); - fileDlg.setOption(QFileDialog::HideNameFilterDetails); + fileDlg.setViewMode(DFileDialog::Detail); + fileDlg.setFileMode(DFileDialog::ExistingFiles); + fileDlg.setOption(DFileDialog::HideNameFilterDetails); fileDlg.setNameFilter(selfilter); fileDlg.selectNameFilter(selfilter); - if (QFileDialog::Accepted == fileDlg.exec()) { + if (DFileDialog::Accepted == fileDlg.exec()) { d->importWidget->showWaitHint(); MusicSettings::setOption("base.play.last_import_path", fileDlg.directory().path()); - Q_EMIT importSelectFiles(fileDlg.selectedFiles()); + Q_EMIT importSelectFiles(fileDlg.selectedFiles(), d->musicListWidget->curPlaylist()); } } +void MainFrame::slotTheme(int type) +{ + Q_D(MainFrame); + + d->setTheme(type); +} + +void MainFrame::changePicture() +{ + Q_D(MainFrame); + int curCount = d->playingCount % 4; + d->playingCount = curCount + 1; + QPixmap pixmap, albumPixmap, sidebarPixmap; + switch (curCount) { + case 0: + pixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music1.svg"); + albumPixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music_white_album_cover/music1.svg"); + sidebarPixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music_withe_sidebar/music1.svg"); + break; + case 1: + pixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music2.svg"); + albumPixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music_white_album_cover/music2.svg"); + sidebarPixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music_withe_sidebar/music2.svg"); + break; + case 2: + pixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music3.svg"); + albumPixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music_white_album_cover/music3.svg"); + sidebarPixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music_withe_sidebar/music3.svg"); + break; + case 3: + pixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music4.svg"); + albumPixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music_white_album_cover/music4.svg"); + sidebarPixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music_withe_sidebar/music4.svg"); + break; + default: + pixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music1.svg"); + albumPixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music_white_album_cover/music1.svg"); + sidebarPixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music_withe_sidebar/music1.svg"); + break; + } + d->musicListWidget->changePicture(pixmap, albumPixmap, sidebarPixmap); + d->playListWidget->changePicture(pixmap, sidebarPixmap, albumPixmap); +} + +void MainFrame::onViewShortcut() +{ + QRect rect = window()->geometry(); + QPoint pos(rect.x() + rect.width() / 2, rect.y() + rect.height() / 2); + Shortcut sc; + QStringList shortcutString; + QString param1 = "-j=" + sc.toStr(); + QString param2 = "-p=" + QString::number(pos.x()) + "," + QString::number(pos.y()); + shortcutString << "-b" << param1 << param2; + + QProcess *shortcutViewProc = new QProcess(this); + shortcutViewProc->startDetached("killall deepin-shortcut-viewer"); + shortcutViewProc->startDetached("deepin-shortcut-viewer", shortcutString); + + connect(shortcutViewProc, SIGNAL(finished(int)), shortcutViewProc, SLOT(deleteLater())); +} + bool MainFrame::eventFilter(QObject *obj, QEvent *e) { Q_D(const MainFrame); @@ -1063,8 +1605,11 @@ auto keystr = shortcut.value(1); auto sckey = static_cast(keystr.toInt()); - if (scmodifiers == keyModifiers && key == sckey && !ke->isAutoRepeat()) { -// qDebug() << "match " << optkey << ke->count() << ke->isAutoRepeat(); + if (scmodifiers != Qt::NoModifier && + scmodifiers == keyModifiers && + key == sckey + && !ke->isAutoRepeat()) { + //qDebug() << "match " << optkey << ke->count() << ke->isAutoRepeat(); Q_EMIT triggerShortcutAction(optkey); return true; } @@ -1075,10 +1620,11 @@ QMouseEvent *me = static_cast(e); if (obj->objectName() == this->objectName() || this->objectName() + "Window" == obj->objectName()) { QPoint mousePos = me->pos(); - auto geometry = d->playlistWidget->geometry().marginsAdded(QMargins(0, 0, 40, 40)); + auto geometry = d->footer->geometry().marginsAdded(QMargins(0, 0, 40, 40)); if (!geometry.contains(mousePos)) { DUtil::TimerSingleShot(50, [this]() { - this->d_func()->setPlaylistVisible(false); + //this->d_func()->setPlayListVisible(false); + this->d_func()->hidePlaylistView(); }); } } @@ -1088,7 +1634,7 @@ QMouseEvent *me = static_cast(e); if (obj->objectName() == this->objectName() || this->objectName() + "Window" == obj->objectName()) { QPoint mousePos = me->pos(); -// qDebug() << "lyricView checkHiddenSearch" << me->pos() << QCursor::pos() << obj; + // qDebug() << "lyricView checkHiddenSearch" << me->pos() << QCursor::pos() << obj; d->lyricWidget->checkHiddenSearch(mousePos); } } @@ -1097,7 +1643,6 @@ } void MainFrame::enterEvent(QEvent *e) { -// setCursor(QCursor(Qt::PointingHandCursor)); DMainWindow::enterEvent(e); } @@ -1116,6 +1661,7 @@ void MainFrame::closeEvent(QCloseEvent *event) { + Q_D(const MainFrame); auto askCloseAction = MusicSettings::value("base.close.ask_close_action").toBool(); if (askCloseAction) { CloseConfirmDialog ccd(this); @@ -1149,9 +1695,9 @@ void MainFrame::paintEvent(QPaintEvent *e) { - Q_D(MainFrame); + //Q_D(MainFrame); QPainter p(this); - p.drawImage(rect(), d->currentCoverImage); DMainWindow::paintEvent(e); } + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/mainframe.h deepin-music-6.0.1.54+ds.1/src/music-player/view/mainframe.h --- deepin-music-5.0.1+ds/src/music-player/view/mainframe.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/mainframe.h 2020-07-14 12:05:00.000000000 +0000 @@ -23,6 +23,7 @@ #include #include "DMainWindow" +#include "core/playlist.h" class Presenter; class MainFramePrivate; @@ -37,21 +38,30 @@ void postInitUI(); void binding(Presenter *presenter); - void focusMusicList(); + void bindSpeechConnect(Presenter *presenter); + + void bindEqualizerConnect(Presenter *presenter); + + void focusPlayList(); QString coverBackground() const; signals: void requitQuit(); void addPlaylist(bool); - void importSelectFiles(const QStringList &filelist); + void importSelectFiles(const QStringList &filelist, PlaylistPtr playlist); void triggerShortcutAction(const QString &optKey); + void fadeInOut(); + void exit(); + void savePosition(); public slots: void updateUI(); void setCoverBackground(QString coverBackground); void onSelectImportDirectory(); void onSelectImportFiles(); - + void slotTheme(int type); + void changePicture(); + void onViewShortcut(); protected: virtual void enterEvent(QEvent *event) Q_DECL_OVERRIDE; virtual bool eventFilter(QObject *obj, QEvent *e) Q_DECL_OVERRIDE; @@ -66,3 +76,4 @@ extern const QString s_PropertyViewname; extern const QString s_PropertyViewnameLyric; + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/musiclistdatawidget.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/musiclistdatawidget.cpp --- deepin-music-5.0.1+ds/src/music-player/view/musiclistdatawidget.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/musiclistdatawidget.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,1980 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "musiclistdatawidget.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "util/pinyinsearch.h" + +#include "widget/playlistview.h" +#include "widget/musiclistdataview.h" +#include "widget/ddropdown.h" +#include "widget/musicimagebutton.h" + +#include "util/pinyinsearch.h" + +#include "widget/playlistview.h" +#include "widget/musiclistdataview.h" +#include "widget/ddropdown.h" +#include "widget/musicimagebutton.h" +#include + +DWIDGET_USE_NAMESPACE + +class MusicListDataWidgetPrivate +{ +public: + MusicListDataWidgetPrivate(MusicListDataWidget *parent) : q_ptr(parent) {} + + void initData(PlaylistPtr playlist, bool selectFlag = false, QString searchStr = ""); + int updateInfo(); + void initConntion(); + void showEmptyHits(); + + DLabel *emptyHits = nullptr; + DLabel *emptySearchHits = nullptr; + ActionBar *actionBar = nullptr; + DLabel *titleLabel = nullptr; + DDropdown *albumDropdown = nullptr; + DDropdown *artistDropdown = nullptr; + DDropdown *musicDropdown = nullptr; + DDropdown *albumSearchDropdown = nullptr; + DDropdown *artistSearchDropdown = nullptr; + DDropdown *musicSearchDropdown = nullptr; + DPushButton *btPlayAll = nullptr; + DLabel *infoLabel = nullptr; + DToolButton *btIconMode = nullptr; + DToolButton *btlistMode = nullptr; + MusicListDataView *albumListView = nullptr; + MusicListDataView *artistListView = nullptr; + PlayListView *musicListView = nullptr; + PlayListView *songListView = nullptr; + MusicListDataView *singerListView = nullptr; + MusicListDataView *albListView = nullptr; + DTabWidget *tabWidget = nullptr; + QAction *customAction = nullptr; + PlaylistPtr curPlaylist = nullptr; + PlaylistPtr selectPlaylist = nullptr; + + bool updateFlag = false; + + MusicListDataWidget *q_ptr; + Q_DECLARE_PUBLIC(MusicListDataWidget) +}; + +int MusicListDataWidgetPrivate::updateInfo() +{ + if (updateFlag == false) { + + if (curPlaylist == nullptr) + return 0; + PlaylistPtr playlist = curPlaylist; + QString searchStr = playlist->searchStr(); + + bool chineseFlag = false; + for (auto ch : searchStr) { + if (DMusic::PinyinSearch::isChinese(ch)) { + chineseFlag = true; + break; + } + } + + int allCount = 0; + QFontMetrics titleFm(titleLabel->font()); + auto text = titleFm.elidedText(playlist->displayName(), Qt::ElideRight, 300); + titleLabel->setText(text); + titleLabel->setToolTip(playlist->displayName()); + if (playlist->id() == AlbumMusicListID) { + PlayMusicTypePtrList playMusicTypePtrList = playlist->playMusicTypePtrList(); + int musicCount = 0; + int musicListCount = 0; + for (auto action : playMusicTypePtrList) { + if (searchStr.isEmpty()) { + musicCount += action->playlistMeta.sortMetas.size(); + musicListCount++; + } else { + if (chineseFlag) { + if (action->name.contains(searchStr, Qt::CaseInsensitive)) { + musicCount += action->playlistMeta.sortMetas.size(); + musicListCount++; + } + } else { + if (searchStr.size() == 1) { + auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(action->name); + if (!curTextList.isEmpty() && curTextList.first().contains(searchStr, Qt::CaseInsensitive)) { + musicCount += action->playlistMeta.sortMetas.size(); + musicListCount++; + } + } else { + auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(action->name); + if (!curTextList.isEmpty() && curTextList.join("").contains(searchStr, Qt::CaseInsensitive)) { + musicCount += action->playlistMeta.sortMetas.size(); + musicListCount++; + } + } + } + } + } + QString infoStr; + if (musicCount == 0) { + infoStr = QString(" ") + MusicListDataWidget::tr("No songs"); + } else if (musicCount == 1) { + infoStr = QString(" ") + MusicListDataWidget::tr("1 album - 1 song"); + } else { + infoStr = QString(" ") + MusicListDataWidget::tr("%1 album - %2 songs").arg(musicListCount).arg(musicCount); + if (musicListCount == 1) { + infoStr = QString(" ") + MusicListDataWidget::tr("%1 album - %2 songs").arg(musicListCount).arg(musicCount); + } else { + infoStr = QString(" ") + MusicListDataWidget::tr("%1 albums - %2 songs").arg(musicListCount).arg(musicCount); + } + } + allCount = musicListCount; + infoLabel->setText(infoStr); + } else if (playlist->id() == ArtistMusicListID) { + PlayMusicTypePtrList playMusicTypePtrList = playlist->playMusicTypePtrList(); + int musicCount = 0; + int musicListCount = 0; + for (auto action : playMusicTypePtrList) { + if (searchStr.isEmpty()) { + musicCount += action->playlistMeta.sortMetas.size(); + musicListCount++; + } else { + if (chineseFlag) { + if (action->name.contains(searchStr, Qt::CaseInsensitive)) { + musicCount += action->playlistMeta.sortMetas.size(); + musicListCount++; + } + } else { + if (searchStr.size() == 1) { + auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(action->name); + if (!curTextList.isEmpty() && curTextList.first().contains(searchStr, Qt::CaseInsensitive)) { + musicCount += action->playlistMeta.sortMetas.size(); + musicListCount++; + } + } else { + auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(action->name); + if (!curTextList.isEmpty() && curTextList.join("").contains(searchStr, Qt::CaseInsensitive)) { + musicCount += action->playlistMeta.sortMetas.size(); + musicListCount++; + } + } + } + } + } + QString infoStr; + if (musicCount == 0) { + infoStr = QString(" ") + MusicListDataWidget::tr("No songs"); + } else if (musicCount == 1) { + infoStr = QString(" ") + MusicListDataWidget::tr("1 artist - 1 song"); + } else { + if (musicListCount == 1) { + infoStr = QString(" ") + MusicListDataWidget::tr("%1 artist - %2 songs").arg(musicListCount).arg(musicCount); + } else { + infoStr = QString(" ") + MusicListDataWidget::tr("%1 artists - %2 songs").arg(musicListCount).arg(musicCount); + } + } + allCount = musicListCount; + infoLabel->setText(infoStr); + } else { + QString infoStr; + int musicCount = 0; + for (auto action : playlist->allmusic()) { + if (searchStr.isEmpty()) { + musicCount ++; + } else { + if (chineseFlag) { + if (action->title.contains(searchStr, Qt::CaseInsensitive)) { + musicCount++; + } + } else { + if (searchStr.size() == 1) { + auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(action->title); + if (!curTextList.isEmpty() && curTextList.first().contains(searchStr, Qt::CaseInsensitive)) { + musicCount++; + } + } else { + auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(action->title); + if (!curTextList.isEmpty() && curTextList.join("").contains(searchStr, Qt::CaseInsensitive)) { + musicCount++; + } + } + } + } + } + if (musicCount == 0) { + infoStr = QString(" ") + MusicListDataWidget::tr("No songs"); + } else if (musicCount == 1) { + infoStr = QString(" ") + MusicListDataWidget::tr("1 song"); + } else { + infoStr = QString(" ") + MusicListDataWidget::tr("%1 songs").arg(musicCount); + } + allCount = musicCount; + infoLabel->setText(infoStr); + } + + return allCount; + } + return 0; +} + +void MusicListDataWidgetPrivate::initData(PlaylistPtr playlist, bool selectFlag, QString searchStr) +{ + //Q_Q(MusicListDataWidget); + + if (searchStr == "noSearchResults") { + actionBar->hide(); + albumListView->hide(); + artistListView->hide(); + musicListView->hide(); + tabWidget->hide(); + emptyHits->show(); + return; + } else { + emptyHits->hide(); + actionBar->show(); + } + + PlaylistPtr updatePlaylist = nullptr; + + if (playlist == nullptr) { + return; + } + curPlaylist = playlist; + + if (updateFlag == true) { + updatePlaylist = playlist; + } + + auto preSearchStr = playlist->searchStr(); + playlist->setSearchStr(searchStr); + + int allCount = updateInfo(); + + //DDropdown *t_curDropdown = nullptr; + if (playlist->id() == AlbumMusicListID) { + + updateFlag = false; + + artistListView->clearSelection(); + musicListView->clearSelection(); + + selectPlaylist = playlist; + + albumDropdown->show(); + artistDropdown->hide(); + musicDropdown->hide(); + + albumSearchDropdown->hide(); + artistSearchDropdown->hide(); + musicSearchDropdown->hide(); + + albumListView->show(); + artistListView->hide(); + musicListView->hide(); + tabWidget->hide(); + + //t_curDropdown = albumDropdown; + + if (albumListView->viewMode() == QListView::IconMode) { + btIconMode->setChecked(true); + btlistMode->setChecked(false); + } else { + btIconMode->setChecked(false); + btlistMode->setChecked(true); + } + + if (!selectFlag || albumListView->listSize() != allCount || preSearchStr != searchStr) + albumListView->onMusiclistChanged(playlist); + } else if (playlist->id() == ArtistMusicListID) { + + updateFlag = false; + + albumListView->clearSelection(); + musicListView->clearSelection(); + + selectPlaylist = playlist; + albumDropdown->hide(); + artistDropdown->show(); + musicDropdown->hide(); + + albumSearchDropdown->hide(); + artistSearchDropdown->hide(); + musicSearchDropdown->hide(); + + albumListView->hide(); + artistListView->show(); + musicListView->hide(); + tabWidget->hide(); + + //t_curDropdown = artistDropdown; + + if (artistListView->viewMode() == QListView::IconMode) { + btIconMode->setChecked(true); + btlistMode->setChecked(false); + } else { + btIconMode->setChecked(false); + btlistMode->setChecked(true); + } + if (!selectFlag || artistListView->listSize() != allCount || preSearchStr != searchStr) { + artistListView->onMusiclistChanged(playlist); + } + } else if (playlist->id() == MusicResultListID || playlist->id() == ArtistResultListID + || playlist->id() == AlbumResultListID) { + + albumDropdown->hide(); + artistDropdown->hide(); + musicDropdown->hide(); + musicSearchDropdown->show(); + + albumListView->hide(); + artistListView->hide(); + musicListView->hide(); + tabWidget->show(); + + if (updateFlag == true) { + if (playlist->id() == ArtistResultListID || playlist->id() == AlbumResultListID) { + musicSearchDropdown->hide(); + } + + if (updatePlaylist->id() == MusicResultListID) { + + if (songListView->viewMode() == QListView::IconMode) { + btIconMode->setChecked(true); + btlistMode->setChecked(false); + } else { + btIconMode->setChecked(false); + btlistMode->setChecked(true); + } + songListView->onMusiclistChanged(updatePlaylist); + + } else if (updatePlaylist->id() == ArtistResultListID) { + + if (singerListView->viewMode() == QListView::IconMode) { + btIconMode->setChecked(true); + btlistMode->setChecked(false); + } else { + btIconMode->setChecked(false); + btlistMode->setChecked(true); + } + + singerListView->onMusiclistChanged(updatePlaylist); + + } else if (updatePlaylist->id() == AlbumResultListID) { + + if (albListView->viewMode() == QListView::IconMode) { + btIconMode->setChecked(true); + btlistMode->setChecked(false); + } else { + btIconMode->setChecked(false); + btlistMode->setChecked(true); + } + + albListView->onMusiclistChanged(updatePlaylist); + } + } + + titleLabel->setText(MusicListDataWidget::tr("Search Results")); + + } else { + + updateFlag = false; + + albumListView->clearSelection(); + artistListView->clearSelection(); + + selectPlaylist = playlist; + albumDropdown->hide(); + artistDropdown->hide(); + musicDropdown->show(); + + albumSearchDropdown->hide(); + artistSearchDropdown->hide(); + musicSearchDropdown->hide(); + + albumListView->hide(); + artistListView->hide(); + musicListView->show(); + tabWidget->hide(); + + //t_curDropdown = musicDropdown; + + if (musicListView->viewMode() != (playlist->viewMode())) { + musicListView->setViewModeFlag(static_cast(playlist->viewMode())); + } + + if (musicListView->viewMode() == QListView::IconMode) { + btIconMode->setChecked(true); + btlistMode->setChecked(false); + } else { + btIconMode->setChecked(false); + btlistMode->setChecked(true); + } + musicListView->onMusiclistChanged(playlist); + } +} + +void MusicListDataWidgetPrivate::initConntion() +{ + Q_Q(MusicListDataWidget); + + q->connect(albumDropdown, &DDropdown::triggered, + q, [ = ](QAction * action) { + albumDropdown->setCurrentAction(action); + int t_sortType = action->data().toInt() == 0 ? 1 : 0; + albumListView->playlist()->changePlayMusicTypeOrderType(); + albumListView->playlist()->sortPlayMusicTypePtrListData(t_sortType); + Q_EMIT q->resort(albumListView->playlist(), action->data().value()); + }); + q->connect(artistDropdown, &DDropdown::triggered, + q, [ = ](QAction * action) { + artistDropdown->setCurrentAction(action); + int t_sortType = action->data().toInt() == 0 ? 1 : 0; + artistListView->playlist()->changePlayMusicTypeOrderType(); + artistListView->playlist()->sortPlayMusicTypePtrListData(t_sortType); + Q_EMIT q->resort(artistListView->playlist(), action->data().value()); + }); + q->connect(musicDropdown, &DDropdown::triggered, + q, [ = ](QAction * action) { + musicDropdown->setCurrentAction(action); + Q_EMIT q->resort(musicListView->playlist(), action->data().value()); + }); + + /*----------------albumSearchDropdown----------------*/ + q->connect(albumSearchDropdown, &DDropdown::triggered, + q, [ = ](QAction * action) { + albumSearchDropdown->setCurrentAction(action); + int t_sortType = action->data().toInt() == 0 ? 1 : 0; + albListView->playlist()->changePlayMusicTypeOrderType(); + albListView->playlist()->sortPlayMusicTypePtrListData(t_sortType); + Q_EMIT q->resort(albListView->playlist(), action->data().value()); + }); + q->connect(artistSearchDropdown, &DDropdown::triggered, + q, [ = ](QAction * action) { + artistSearchDropdown->setCurrentAction(action); + int t_sortType = action->data().toInt() == 0 ? 1 : 0; + singerListView->playlist()->changePlayMusicTypeOrderType(); + singerListView->playlist()->sortPlayMusicTypePtrListData(t_sortType); + Q_EMIT q->resort(singerListView->playlist(), action->data().value()); + }); + q->connect(musicSearchDropdown, &DDropdown::triggered, + q, [ = ](QAction * action) { + musicSearchDropdown->setCurrentAction(action); + Q_EMIT q->resort(songListView->playlist(), action->data().value()); + }); + + /*-------------btPlayAll--------------------*/ + q->connect(btPlayAll, &DPushButton::clicked, + q, [ = ](bool) { + if (albumListView->isVisible()) { + PlaylistPtr curPlayList = albumListView->playlist(); + + if (curPlayList) { + curPlayList->playMusicTypeToMeta(); + curPlayList->play(curPlayList->first()); + Q_EMIT q->playall(curPlayList); + } + } else if (artistListView->isVisible()) { + PlaylistPtr curPlayList = artistListView->playlist(); + + if (curPlayList) { + curPlayList->playMusicTypeToMeta(); + curPlayList->play(curPlayList->first()); + Q_EMIT q->playall(curPlayList); + } + } else if (songListView->isVisible()) { + if (songListView->playlist()) { + PlaylistPtr curPlayList = songListView->playlist(); + curPlayList->play(curPlayList->first()); + Q_EMIT q->playall(curPlayList); + } + } else if (singerListView->isVisible()) { + if (singerListView->playlist()) { + PlaylistPtr curPlayList = singerListView->playlist(); + curPlayList->playMusicTypeToMeta(); + curPlayList->play(curPlayList->first()); + Q_EMIT q->playall(curPlayList); + } + } else if (albListView->isVisible()) { + if (albListView->playlist()) { + PlaylistPtr curPlayList = albListView->playlist(); + curPlayList->playMusicTypeToMeta(); + curPlayList->play(curPlayList->first()); + Q_EMIT q->playall(curPlayList); + } + } else { + if (musicListView->playlist()) { + PlaylistPtr curPlayList = musicListView->playlist(); + curPlayList->play(curPlayList->first()); + Q_EMIT q->playall(curPlayList); + } + } + }); + + /*-----------------albumListView-----------------------*/ + + q->connect(albumListView, &MusicListDataView::requestCustomContextMenu, + q, [ = ](const QPoint & pos) { + Q_EMIT q->requestCustomContextMenu(pos, 2); + }); + + q->connect(albumListView, &MusicListDataView::playMedia, + q, [ = ](const MetaPtr meta) { + PlaylistPtr curPlayList = albumListView->playlist(); + curPlayList->play(meta); + Q_EMIT q->playMedia(albumListView->playlist(), meta); + }); + q->connect(albumListView, &MusicListDataView::resume, + q, [ = ](const MetaPtr meta) { + PlaylistPtr curPlayList = albumListView->playlist(); + Q_EMIT q->resume(albumListView->playlist(), meta); + }); + + q->connect(albumListView, &MusicListDataView::pause, + q, [ = ](PlaylistPtr playlist, const MetaPtr meta) { + Q_EMIT q->pause(playlist, meta); + }); + + q->connect(albumListView, &MusicListDataView::addToPlaylist, + q, [ = ](PlaylistPtr playlist, const MetaPtrList & metalist) { + Q_EMIT q->addToPlaylist(playlist, metalist); + }); + + q->connect(albumListView, &MusicListDataView::musiclistRemove, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->musiclistRemove(albumListView->playlist(), metalist); + }); + + q->connect(albumListView, &MusicListDataView::musiclistDelete, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->musiclistDelete(albumListView->playlist(), metalist); + }); + + q->connect(albumListView, &MusicListDataView::modeChanged, + q, [ = ](int mode) { + Q_EMIT q->modeChanged(mode); + }); + + q->connect(albumListView, &MusicListDataView::addMetasFavourite, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->addMetasFavourite(metalist); + }); + q->connect(albumListView, &MusicListDataView::removeMetasFavourite, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->removeMetasFavourite(metalist); + }); + + /*-----------------albListView-----------------------*/ + + q->connect(albListView, &MusicListDataView::requestCustomContextMenu, + q, [ = ](const QPoint & pos) { + Q_EMIT q->requestCustomContextMenu(pos, 5); + }); + + q->connect(albListView, &MusicListDataView::playMedia, + q, [ = ](const MetaPtr meta) { + PlaylistPtr curPlayList = albListView->playlist(); + curPlayList->play(meta); + Q_EMIT q->playMedia(albListView->playlist(), meta); + }); + q->connect(albListView, &MusicListDataView::resume, + q, [ = ](const MetaPtr meta) { + PlaylistPtr curPlayList = albListView->playlist(); + Q_EMIT q->resume(albListView->playlist(), meta); + }); + + q->connect(albListView, &MusicListDataView::pause, + q, [ = ](PlaylistPtr playlist, const MetaPtr meta) { + Q_EMIT q->pause(playlist, meta); + }); + + q->connect(albListView, &MusicListDataView::addToPlaylist, + q, [ = ](PlaylistPtr playlist, const MetaPtrList & metalist) { + Q_EMIT q->addToPlaylist(playlist, metalist); + }); + + q->connect(albListView, &MusicListDataView::musiclistRemove, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->musiclistRemove(albListView->playlist(), metalist); + }); + + q->connect(albListView, &MusicListDataView::musiclistDelete, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->musiclistDelete(albListView->playlist(), metalist); + }); + + q->connect(albListView, &MusicListDataView::modeChanged, + q, [ = ](int mode) { + Q_EMIT q->modeChanged(mode); + }); + + q->connect(albListView, &MusicListDataView::addMetasFavourite, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->addMetasFavourite(metalist); + }); + q->connect(albListView, &MusicListDataView::removeMetasFavourite, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->removeMetasFavourite(metalist); + }); + + /*------------------artistListView---------------------------*/ + + q->connect(artistListView, &MusicListDataView::requestCustomContextMenu, + q, [ = ](const QPoint & pos) { + Q_EMIT q->requestCustomContextMenu(pos, 3); + }); + + q->connect(artistListView, &MusicListDataView::playMedia, + q, [ = ](const MetaPtr meta) { + PlaylistPtr curPlayList = artistListView->playlist(); + curPlayList->play(meta); + Q_EMIT q->playMedia(artistListView->playlist(), meta); + }); + + q->connect(artistListView, &MusicListDataView::resume, + q, [ = ](const MetaPtr meta) { + PlaylistPtr curPlayList = artistListView->playlist(); + Q_EMIT q->resume(artistListView->playlist(), meta); + }); + + q->connect(artistListView, &MusicListDataView::pause, + q, [ = ](PlaylistPtr playlist, const MetaPtr meta) { + Q_EMIT q->pause(playlist, meta); + }); + + q->connect(artistListView, &MusicListDataView::addToPlaylist, + q, [ = ](PlaylistPtr playlist, const MetaPtrList & metalist) { + Q_EMIT q->addToPlaylist(playlist, metalist); + }); + + q->connect(artistListView, &MusicListDataView::musiclistRemove, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->musiclistRemove(artistListView->playlist(), metalist); + }); + + q->connect(artistListView, &MusicListDataView::musiclistDelete, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->musiclistDelete(artistListView->playlist(), metalist); + }); + + q->connect(artistListView, &MusicListDataView::modeChanged, + q, [ = ](int mode) { + Q_EMIT q->modeChanged(mode); + }); + + q->connect(artistListView, &MusicListDataView::addMetasFavourite, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->addMetasFavourite(metalist); + }); + q->connect(artistListView, &MusicListDataView::removeMetasFavourite, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->removeMetasFavourite(metalist); + }); + + /*------------------singerListView---------------------------*/ + + q->connect(singerListView, &MusicListDataView::requestCustomContextMenu, + q, [ = ](const QPoint & pos) { + Q_EMIT q->requestCustomContextMenu(pos, 6); + }); + + q->connect(singerListView, &MusicListDataView::playMedia, + q, [ = ](const MetaPtr meta) { + PlaylistPtr curPlayList = singerListView->playlist(); + curPlayList->play(meta); + Q_EMIT q->playMedia(singerListView->playlist(), meta); + }); + + q->connect(singerListView, &MusicListDataView::resume, + q, [ = ](const MetaPtr meta) { + PlaylistPtr curPlayList = singerListView->playlist(); + Q_EMIT q->resume(singerListView->playlist(), meta); + }); + + q->connect(singerListView, &MusicListDataView::pause, + q, [ = ](PlaylistPtr playlist, const MetaPtr meta) { + Q_EMIT q->pause(playlist, meta); + }); + + q->connect(singerListView, &MusicListDataView::addToPlaylist, + q, [ = ](PlaylistPtr playlist, const MetaPtrList & metalist) { + Q_EMIT q->addToPlaylist(playlist, metalist); + }); + + q->connect(singerListView, &MusicListDataView::musiclistRemove, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->musiclistRemove(singerListView->playlist(), metalist); + }); + + q->connect(singerListView, &MusicListDataView::musiclistDelete, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->musiclistDelete(singerListView->playlist(), metalist); + }); + + q->connect(singerListView, &MusicListDataView::modeChanged, + q, [ = ](int mode) { + Q_EMIT q->modeChanged(mode); + }); + + q->connect(singerListView, &MusicListDataView::addMetasFavourite, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->addMetasFavourite(metalist); + }); + q->connect(singerListView, &MusicListDataView::removeMetasFavourite, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->removeMetasFavourite(metalist); + }); + + /*-----------sing tabBarClicked--------------*/ + q->connect(tabWidget, &DTabWidget::tabBarClicked, + q, &MusicListDataWidget::resultTabwidget); + + q->connect(musicListView, &PlayListView::pause, + q, [ = ](const MetaPtr meta) { + Q_EMIT q->pause(musicListView->playlist(), meta); + }); + + q->connect(songListView, &PlayListView::pause, + q, [ = ](const MetaPtr meta) { + Q_EMIT q->pause(songListView->playlist(), meta); + }); + + /*-----------musicListView right click menu------*/ + + q->connect(musicListView, &PlayListView::playMedia, + q, [ = ](const MetaPtr meta) { + PlaylistPtr curPlayList = musicListView->playlist(); + curPlayList->play(meta); + Q_EMIT q->playMedia(musicListView->playlist(), meta); + }); + + q->connect(musicListView, &PlayListView::resume, + q, [ = ](const MetaPtr meta) { + PlaylistPtr curPlayList = musicListView->playlist(); + Q_EMIT q->resume(musicListView->playlist(), meta); + }); + + q->connect(musicListView, &PlayListView::pause, + q, [ = ](const MetaPtr meta) { + Q_EMIT q->pause(musicListView->playlist(), meta); + }); + + q->connect(musicListView, &PlayListView::requestCustomContextMenu, + q, [ = ](const QPoint & pos) { + Q_EMIT q->requestCustomContextMenu(pos, 1); + }); + q->connect(musicListView, &PlayListView::addToPlaylist, + q, [ = ](PlaylistPtr playlist, const MetaPtrList metalist) { + Q_EMIT q->addToPlaylist(playlist, metalist); + }); + q->connect(musicListView, &PlayListView::removeMusicList, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->musiclistRemove(musicListView->playlist(), metalist); + }); + q->connect(musicListView, &PlayListView::deleteMusicList, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->musiclistDelete(musicListView->playlist(), metalist); + }); + q->connect(musicListView, &PlayListView::showInfoDialog, + q, [ = ](const MetaPtr meta) { + Q_EMIT q->showInfoDialog(meta); + }); + q->connect(musicListView, &PlayListView::updateMetaCodec, + q, [ = ](const QString & preTitle, const QString & preArtist, const QString & preAlbum, const MetaPtr meta) { + Q_EMIT q->updateMetaCodec(preTitle, preArtist, preAlbum, meta); + }); + q->connect(musicListView, &PlayListView::addMetasFavourite, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->addMetasFavourite(metalist); + }); + q->connect(musicListView, &PlayListView::removeMetasFavourite, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->removeMetasFavourite(metalist); + }); + + q->connect(btIconMode, &DToolButton::clicked, + q, [ = ](bool) { + if (albumListView->isVisible()) { + albumListView->setViewModeFlag(QListView::IconMode); + } else if (artistListView->isVisible()) { + artistListView->setViewModeFlag(QListView::IconMode); + } else if (albListView->isVisible()) { + albListView->setViewModeFlag(QListView::IconMode); + } else if (singerListView->isVisible()) { + singerListView->setViewModeFlag(QListView::IconMode); + } else if (songListView->isVisible()) { + songListView->setViewModeFlag(QListView::IconMode); + } else { + musicListView->playlist()->setViewMode(1); + musicListView->setViewModeFlag(QListView::IconMode); + } + + btIconMode->setChecked(true); + btlistMode->setChecked(false); + + }); + q->connect(btlistMode, &DToolButton::clicked, + q, [ = ](bool) { + if (albumListView->isVisible()) { + albumListView->setViewModeFlag(QListView::ListMode); + } else if (artistListView->isVisible()) { + artistListView->setViewModeFlag(QListView::ListMode); + } else { + musicListView->playlist()->setViewMode(0); + musicListView->setViewModeFlag(QListView::ListMode); + } + if (albListView->isVisible()) { + albListView->setViewModeFlag(QListView::ListMode); + } else if (singerListView->isVisible()) { + singerListView->setViewModeFlag(QListView::ListMode); + } else if (songListView->isVisible()) { + songListView->setViewModeFlag(QListView::ListMode); + } + + btIconMode->setChecked(false); + btlistMode->setChecked(true); + }); + + /*-----------songListView right click menu------*/ + + q->connect(songListView, &PlayListView::playMedia, + q, [ = ](const MetaPtr meta) { + PlaylistPtr curPlayList = songListView->playlist(); + curPlayList->play(meta); + Q_EMIT q->playMedia(songListView->playlist(), meta); + }); + + q->connect(songListView, &PlayListView::resume, + q, [ = ](const MetaPtr meta) { + PlaylistPtr curPlayList = songListView->playlist(); + Q_EMIT q->resume(songListView->playlist(), meta); + }); + + q->connect(songListView, &PlayListView::pause, + q, [ = ](const MetaPtr meta) { + Q_EMIT q->pause(songListView->playlist(), meta); + }); + + q->connect(songListView, &PlayListView::requestCustomContextMenu, + q, [ = ](const QPoint & pos) { + Q_EMIT q->requestCustomContextMenu(pos, 4); + }); + q->connect(songListView, &PlayListView::addToPlaylist, + q, [ = ](PlaylistPtr playlist, const MetaPtrList metalist) { + Q_EMIT q->addToPlaylist(playlist, metalist); + }); + q->connect(songListView, &PlayListView::removeMusicList, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->musiclistRemove(songListView->playlist(), metalist); + }); + q->connect(songListView, &PlayListView::deleteMusicList, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->musiclistDelete(songListView->playlist(), metalist); + }); + q->connect(songListView, &PlayListView::showInfoDialog, + q, [ = ](const MetaPtr meta) { + Q_EMIT q->showInfoDialog(meta); + }); + q->connect(songListView, &PlayListView::updateMetaCodec, + q, [ = ](const QString & preTitle, const QString & preArtist, const QString & preAlbum, const MetaPtr meta) { + Q_EMIT q->updateMetaCodec(preTitle, preArtist, preAlbum, meta); + }); + q->connect(songListView, &PlayListView::addMetasFavourite, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->addMetasFavourite(metalist); + }); + q->connect(songListView, &PlayListView::removeMetasFavourite, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->removeMetasFavourite(metalist); + }); + + q->connect(btIconMode, &DToolButton::clicked, + q, [ = ](bool) { + if (albumListView->isVisible()) { + albumListView->setViewModeFlag(QListView::IconMode); + } else if (artistListView->isVisible()) { + artistListView->setViewModeFlag(QListView::IconMode); + } else { + if (songListView->playlist() == nullptr) { + return; + } + songListView->playlist()->setViewMode(1); + songListView->setViewModeFlag(QListView::IconMode); + } + btIconMode->setChecked(true); + btlistMode->setChecked(false); + }); + q->connect(btlistMode, &DToolButton::clicked, + q, [ = ](bool) { + if (albumListView->isVisible()) { + albumListView->setViewModeFlag(QListView::ListMode); + } else if (artistListView->isVisible()) { + artistListView->setViewModeFlag(QListView::ListMode); + } else { + if (songListView->playlist() == nullptr) { + return; + } + songListView->playlist()->setViewMode(0); + songListView->setViewModeFlag(QListView::ListMode); + } + btIconMode->setChecked(false); + btlistMode->setChecked(true); + }); +} + +void MusicListDataWidgetPrivate::showEmptyHits() +{ + if (curPlaylist.isNull() || curPlaylist->searchStr().isEmpty()) { + actionBar->setVisible(true); + emptyHits->setVisible(false); + emptySearchHits->setVisible(false); + return; + } + if (!curPlaylist.isNull() && curPlaylist->id() == AlbumMusicListID) { + auto t_rowCount = albumListView->rowCount(); + auto playlist = albumListView->playlist(); + if (playlist->searchStr().isEmpty()) { + emptyHits->setText(MusicListDataWidget::tr("No songs")); + } else { + emptyHits->setText(MusicListDataWidget::tr("No search results")); + } + bool empty = t_rowCount == 0 ? true : false; + actionBar->setVisible(!empty); + albumListView->setVisible(!empty); + artistListView->setVisible(false); + musicListView->setVisible(false); + emptyHits->setVisible(empty); + emptySearchHits->setVisible(empty && !playlist->searchStr().isEmpty()); + } else if (!curPlaylist.isNull() && curPlaylist->id() == ArtistMusicListID) { + auto t_rowCount = artistListView->rowCount(); + auto playlist = artistListView->playlist(); + if (playlist->searchStr().isEmpty()) { + emptyHits->setText(MusicListDataWidget::tr("No songs")); + } else { + emptyHits->setText(MusicListDataWidget::tr("No search results")); + } + bool empty = t_rowCount == 0 ? true : false; + actionBar->setVisible(!empty); + artistListView->setVisible(!empty); + albumListView->setVisible(false); + musicListView->setVisible(false); + emptyHits->setVisible(empty); + emptySearchHits->setVisible(empty && !playlist->searchStr().isEmpty()); + } else { + auto t_rowCount = musicListView->rowCount(); + auto playlist = musicListView->playlist(); + if (playlist->searchStr().isEmpty()) { + emptyHits->setText(MusicListDataWidget::tr("No songs")); + } else { + emptyHits->setText(MusicListDataWidget::tr("No search results")); + } + bool empty = t_rowCount == 0 ? true : false; + actionBar->setVisible(!empty); + artistListView->setVisible(false); + musicListView->setVisible(!empty); + emptyHits->setVisible(empty); + } +} + +MusicListDataWidget::MusicListDataWidget(QWidget *parent) : + DWidget(parent), d_ptr(new MusicListDataWidgetPrivate(this)) +{ + Q_D(MusicListDataWidget); + + setObjectName("MusicListDataWidget"); + setAcceptDrops(true); + + setAutoFillBackground(true); + auto palette = this->palette(); + QColor background("#FFFFFF"); + background.setAlphaF(0.1); + palette.setColor(DPalette::Background, background); + setPalette(palette); + + auto layout = new QVBoxLayout(this); + layout->setContentsMargins(0, 0, 8, 0); + layout->setSpacing(0); + + d->actionBar = new ActionBar; + d->actionBar->setFixedHeight(80); + d->actionBar->setObjectName("MusicListDataActionBar"); + + auto actionBarLayout = new QVBoxLayout(d->actionBar); + actionBarLayout->setContentsMargins(10, 3, 8, 0); + actionBarLayout->setSpacing(0); + + auto actionTileBarLayout = new QHBoxLayout(); + actionTileBarLayout->setContentsMargins(10, 3, 8, 0); + actionTileBarLayout->setSpacing(0); + + d->titleLabel = new DLabel; + auto titleFont = d->titleLabel->font(); + titleFont.setFamily("SourceHanSansSC"); + titleFont.setWeight(QFont::Medium); + titleFont.setPixelSize(24); + d->titleLabel->setFont(titleFont); + d->titleLabel->setFixedHeight(36); + d->titleLabel->setFixedWidth(300); + d->titleLabel->setObjectName("MusicListDataTitle"); + d->titleLabel->setText(tr("All Music")); + d->titleLabel->setForegroundRole(DPalette::BrightText); + + d->albumDropdown = new DDropdown; + d->albumDropdown->setFixedHeight(28); + d->albumDropdown->setMinimumWidth(130); + d->albumDropdown->setObjectName("MusicListAlbumDataSort"); + d->albumDropdown->addAction(tr("Time added"), QVariant::fromValue(Playlist::SortByAddTime)); + d->albumDropdown->addAction(tr("Album"), QVariant::fromValue(Playlist::SortByTitle)); + d->albumDropdown->setCurrentAction(); + d->albumDropdown->hide(); + + d->artistDropdown = new DDropdown; + d->artistDropdown->setFixedHeight(28); + d->artistDropdown->setMinimumWidth(130); + d->artistDropdown->setObjectName("MusicListArtistDataSort"); + d->artistDropdown->addAction(tr("Time added"), QVariant::fromValue(Playlist::SortByAddTime)); + d->artistDropdown->addAction(tr("Artist"), QVariant::fromValue(Playlist::SortByArtist)); + d->artistDropdown->setCurrentAction(); + d->artistDropdown->hide(); + + d->musicDropdown = new DDropdown; + d->musicDropdown->setFixedHeight(28); + d->musicDropdown->setMinimumWidth(130); + d->musicDropdown->setObjectName("MusicListMusicDataSort"); + d->musicDropdown->addAction(tr("Time added"), QVariant::fromValue(Playlist::SortByAddTime)); + d->musicDropdown->addAction(tr("Title"), QVariant::fromValue(Playlist::SortByTitle)); + d->musicDropdown->addAction(tr("Artist"), QVariant::fromValue(Playlist::SortByArtist)); + d->musicDropdown->addAction(tr("Album"), QVariant::fromValue(Playlist::SortByAblum)); + d->musicDropdown->setCurrentAction(); + /*-------New sorting function-----------*/ + d->albumSearchDropdown = new DDropdown; + d->albumSearchDropdown->setFixedHeight(28); + d->albumSearchDropdown->setMinimumWidth(130); + d->albumSearchDropdown->setObjectName("MusicListAlbumDataSort"); + d->albumSearchDropdown->addAction(tr("Time added"), QVariant::fromValue(Playlist::SortByAddTime)); + d->albumSearchDropdown->addAction(tr("Album"), QVariant::fromValue(Playlist::SortByTitle)); + d->albumSearchDropdown->setCurrentAction(); + d->albumSearchDropdown->hide(); + + d->artistSearchDropdown = new DDropdown; + d->artistSearchDropdown->setFixedHeight(28); + d->artistSearchDropdown->setMinimumWidth(130); + d->artistSearchDropdown->setObjectName("MusicListArtistDataSort"); + d->artistSearchDropdown->addAction(tr("Time added"), QVariant::fromValue(Playlist::SortByAddTime)); + d->artistSearchDropdown->addAction(tr("Artist"), QVariant::fromValue(Playlist::SortByArtist)); + d->artistSearchDropdown->setCurrentAction(); + d->artistSearchDropdown->hide(); + + d->musicSearchDropdown = new DDropdown; + d->musicSearchDropdown->setFixedHeight(28); + d->musicSearchDropdown->setMinimumWidth(130); + d->musicSearchDropdown->setObjectName("MusicListMusicDataSort"); + d->musicSearchDropdown->addAction(tr("Time added"), QVariant::fromValue(Playlist::SortByAddTime)); + d->musicSearchDropdown->addAction(tr("Title"), QVariant::fromValue(Playlist::SortByTitle)); + d->musicSearchDropdown->addAction(tr("Artist"), QVariant::fromValue(Playlist::SortByArtist)); + d->musicSearchDropdown->addAction(tr("Album"), QVariant::fromValue(Playlist::SortByAblum)); + d->musicSearchDropdown->setCurrentAction(); + d->musicSearchDropdown->hide(); + + actionTileBarLayout->addWidget(d->titleLabel, 0, Qt::AlignLeft | Qt::AlignBottom); + actionTileBarLayout->addStretch(); + + actionTileBarLayout->addWidget(d->albumDropdown, 0, Qt::AlignRight | Qt::AlignBottom); + actionTileBarLayout->addWidget(d->artistDropdown, 0, Qt::AlignRight | Qt::AlignBottom); + actionTileBarLayout->addWidget(d->musicDropdown, 0, Qt::AlignRight | Qt::AlignBottom); + + actionTileBarLayout->addWidget(d->albumSearchDropdown, 0, Qt::AlignRight | Qt::AlignBottom); + actionTileBarLayout->addWidget(d->artistSearchDropdown, 0, Qt::AlignRight | Qt::AlignBottom); + actionTileBarLayout->addWidget(d->musicSearchDropdown, 0, Qt::AlignRight | Qt::AlignBottom); + + auto actionInfoBarLayout = new QHBoxLayout(); + actionInfoBarLayout->setContentsMargins(10, 3, 8, 0); + actionInfoBarLayout->setSpacing(0); + + d->btPlayAll = new DPushButton; + auto playAllPalette = d->btPlayAll->palette(); + playAllPalette.setColor(DPalette::ButtonText, Qt::white); + playAllPalette.setColor(DPalette::Dark, QColor("#FD5E5E")); + playAllPalette.setColor(DPalette::Light, QColor("#ED5656")); + d->btPlayAll->setPalette(playAllPalette); + d->btPlayAll->setIcon(QIcon(":/mpimage/light/normal/play_all_normal.svg")); + d->btPlayAll->setObjectName("MusicListDataPlayAll"); + d->btPlayAll->setText(tr("Play All")); +// d->btPlayAll->setFixedWidth(93); + d->btPlayAll->setFixedHeight(30); + d->btPlayAll->setFocusPolicy(Qt::NoFocus); + d->btPlayAll->setIconSize(QSize(18, 18)); + auto btPlayAllFont = d->btPlayAll->font(); + btPlayAllFont.setFamily("SourceHanSansSC"); + btPlayAllFont.setWeight(QFont::Medium); +// btPlayAllFont.setPixelSize(13); + DFontSizeManager::instance()->bind(d->btPlayAll, DFontSizeManager::T8); + d->btPlayAll->setFont(btPlayAllFont); + + d->infoLabel = new DLabel; + d->infoLabel->setObjectName("MusicListDataTitle"); + d->infoLabel->setText(tr("All Music")); + d->infoLabel->setMinimumWidth(200); + d->infoLabel->setWordWrap(true); + d->infoLabel->setFont(btPlayAllFont); + auto infoLabelPalette = d->infoLabel->palette(); + QColor infoLabelColor = infoLabelPalette.color(DPalette::BrightText); + infoLabelColor.setAlphaF(0.7); + infoLabelPalette.setColor(DPalette::ButtonText, infoLabelColor); + d->infoLabel->setPalette(infoLabelPalette); + d->infoLabel->setForegroundRole(DPalette::ButtonText); + +// d->btIconMode = new MusicImageButton(":/mpimage/light/normal/picture_list_normal.svg", +// ":/mpimage/light/hover/picture_list_hover.svg", +// ":/mpimage/light/press/picture_list_press.svg", +// ":/mpimage/light/active/picture_list_active.svg"); + d->btIconMode = new DToolButton; + d->btIconMode->setFixedSize(36, 36); + d->btIconMode->setObjectName("MusicListDataWidgetIconMode"); + d->btIconMode->setCheckable(true); + d->btIconMode->setChecked(false); + +// d->btlistMode = new MusicImageButton(":/mpimage/light/normal/text_list_normal.svg", +// ":/mpimage/light/hover/text_list_hover.svg", +// ":/mpimage/light/press/text_list_press.svg", +// ":/mpimage/light/active/text_list_active.svg"); + d->btlistMode = new DToolButton; + d->btlistMode->setFixedSize(36, 36); + d->btlistMode->setObjectName("MusicListDataWidgetListMode"); + d->btlistMode->setCheckable(true); + d->btlistMode->setChecked(false); + +// auto framelayout = new QHBoxLayout(this); +// DFrame *t_frame = new DFrame(this); +// framelayout->addWidget(d->btIconMode, 0, Qt::AlignCenter); +// framelayout->addWidget(d->btlistMode, 0, Qt::AlignCenter); +// t_frame->setLayout(framelayout); + + actionInfoBarLayout->addWidget(d->btPlayAll, 0, Qt::AlignVCenter); + actionInfoBarLayout->addWidget(d->infoLabel, 100, Qt::AlignLeft | Qt::AlignVCenter); + actionInfoBarLayout->addStretch(); + actionInfoBarLayout->addWidget(d->btIconMode, 0, Qt::AlignCenter); + actionInfoBarLayout->addWidget(d->btlistMode, 0, Qt::AlignCenter); + /*----------------fix bug----------------------*/ + actionBarLayout->addLayout(actionTileBarLayout); + actionBarLayout->addLayout(actionInfoBarLayout); + + d->emptyHits = new DLabel(); + d->emptyHits->setObjectName("MusicListDataEmptyHits"); + d->emptyHits->hide(); + auto emptyHitsFont = d->emptyHits->font(); + emptyHitsFont.setFamily("SourceHanSansSC"); + emptyHitsFont.setPixelSize(20); + d->emptyHits->setFont(emptyHitsFont); + + d->emptyHits->setText(MusicListDataWidget::tr("No songs")); + d->emptyHits->setText(MusicListDataWidget::tr("No search results")); + + d->emptySearchHits = new DLabel(); + d->emptySearchHits->hide(); + auto emptySearchHitsFont = d->emptySearchHits->font(); + emptySearchHitsFont.setFamily("SourceHanSansSC"); + emptySearchHitsFont.setPixelSize(14); + d->emptySearchHits->setFont(emptySearchHitsFont); + + auto emptyLayout = new QVBoxLayout(); + emptyLayout->setContentsMargins(0, 0, 0, 0); + emptyLayout->setSpacing(10); + + emptyLayout->addStretch(100); + emptyLayout->addWidget(d->emptyHits, 0, Qt::AlignCenter); + emptyLayout->addWidget(d->emptySearchHits, 0, Qt::AlignCenter); + emptyLayout->addStretch(100); + + d->albumListView = new MusicListDataView; + d->artistListView = new MusicListDataView; + d->musicListView = new PlayListView(true); + d->musicListView->hide(); + + layout->setContentsMargins(0, 1, 0, 0); + + /*---------------tabWidget----------------*/ + d->tabWidget = new DTabWidget(); + d->songListView = new PlayListView(true); + d->singerListView = new MusicListDataView(); + d->albListView = new MusicListDataView(); + d->tabWidget->addTab(d->songListView, QString(tr("Songs"))); + d->tabWidget->addTab(d->singerListView, QString(tr("Artists"))); + d->tabWidget->addTab(d->albListView, QString(tr("Albums"))); + d->tabWidget->setDocumentMode(true); + d->tabWidget->hide(); + d->songListView->hide(); + d->singerListView->hide(); + d->albListView->hide(); + + layout->addWidget(d->actionBar, 0, Qt::AlignTop); + layout->addLayout(emptyLayout, 0); + layout->addSpacing(8); + layout->addWidget(d->albumListView, 100); + layout->addWidget(d->artistListView, 100); + layout->addWidget(d->musicListView, 100); + layout->addWidget(d->tabWidget, 100); + + d->initConntion(); +} + +MusicListDataWidget::~MusicListDataWidget() +{ +} + +void MusicListDataWidget::setCustomSortType(PlaylistPtr playlist) +{ + Q_D(MusicListDataWidget); + + DDropdown *t_curDropdown = nullptr; + if (playlist->id() == AlbumMusicListID) { + t_curDropdown = d->albumDropdown; + } else if (playlist->id() == ArtistMusicListID) { + t_curDropdown = d->artistDropdown; + } else { + t_curDropdown = d->musicDropdown; + } + t_curDropdown->setCurrentAction(nullptr); + t_curDropdown->setText(tr("Custom")); +} + +void MusicListDataWidget::resultTabwidget(int index) +{ + Q_D(MusicListDataWidget); + + d->tabWidget->setCurrentIndex(index); + + if (index == 0) { + + d->albumSearchDropdown->hide(); + d->artistSearchDropdown->hide(); + d->musicSearchDropdown->show(); + + if (d->songListView->viewMode() == QListView::IconMode) { + d->btIconMode->setChecked(true); + d->btlistMode->setChecked(false); + } else { + d->btIconMode->setChecked(false); + d->btlistMode->setChecked(true); + } + + tabwidgetInfo(MusicPlaylists); + + d->singerListView->clearSelection(); + d->albListView->clearSelection(); + + } else if (index == 1) { + + d->albumSearchDropdown->hide(); + d->artistSearchDropdown->show(); + d->musicSearchDropdown->hide(); + + if (d->singerListView->viewMode() == QListView::IconMode) { + d->btIconMode->setChecked(true); + d->btlistMode->setChecked(false); + } else { + d->btIconMode->setChecked(false); + d->btlistMode->setChecked(true); + } + + tabwidgetInfo(ArtistPlaylists); + + d->songListView->clearSelection(); + d->albListView->clearSelection(); + + } else if (index == 2) { + + d->albumSearchDropdown->show(); + d->artistSearchDropdown->hide(); + d->musicSearchDropdown->hide(); + + if (d->albListView->viewMode() == QListView::IconMode) { + d->btIconMode->setChecked(true); + d->btlistMode->setChecked(false); + } else { + d->btIconMode->setChecked(false); + d->btlistMode->setChecked(true); + } + + tabwidgetInfo(AlbumPlaylists); + + d->songListView->clearSelection(); + d->singerListView->clearSelection(); + } +} + +void MusicListDataWidget::tabwidgetInfo(PlaylistPtr infoPlaylist) +{ + Q_D(MusicListDataWidget); + + if (infoPlaylist == nullptr) { + return ; + } + + PlaylistPtr playlist = infoPlaylist; + QString searchStr = playlist->searchStr(); + + bool chineseFlag = false; + for (auto ch : searchStr) { + if (DMusic::PinyinSearch::isChinese(ch)) { + chineseFlag = true; + break; + } + } + + //int allCount = 0; + QFontMetrics titleFm(d->titleLabel->font()); + auto text = titleFm.elidedText(playlist->displayName(), Qt::ElideRight, 300); + d->titleLabel->setText(tr("Search Results")); + d->titleLabel->setToolTip(playlist->displayName()); + //DDropdown *t_curDropdown = nullptr; + if (playlist->id() == AlbumResultListID) { + + PlayMusicTypePtrList playMusicTypePtrList = playlist->playMusicTypePtrList(); + int musicCount = 0; + int musicListCount = 0; + for (auto action : playMusicTypePtrList) { + if (searchStr.isEmpty()) { + musicCount += action->playlistMeta.sortMetas.size(); + musicListCount++; + } else { + if (chineseFlag) { + if (action->name.contains(searchStr, Qt::CaseInsensitive)) { + musicCount += action->playlistMeta.sortMetas.size(); + musicListCount++; + } + } else { + if (searchStr.size() == 1) { + auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(action->name); + if (!curTextList.isEmpty() && curTextList.first().contains(searchStr, Qt::CaseInsensitive)) { + musicCount += action->playlistMeta.sortMetas.size(); + musicListCount++; + } + } else { + auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(action->name); + if (!curTextList.isEmpty() && curTextList.join("").contains(searchStr, Qt::CaseInsensitive)) { + musicCount += action->playlistMeta.sortMetas.size(); + musicListCount++; + } + } + } + } + } + QString infoStr; + if (musicCount == 0) { + infoStr = QString(" ") + MusicListDataWidget::tr("No songs"); + } else if (musicCount == 1) { + infoStr = QString(" ") + MusicListDataWidget::tr("1 album - 1 song"); + } else { + infoStr = QString(" ") + MusicListDataWidget::tr("%1 album - %2 songs").arg(musicListCount).arg(musicCount); + if (musicListCount == 1) { + infoStr = QString(" ") + MusicListDataWidget::tr("%1 album - %2 songs").arg(musicListCount).arg(musicCount); + } else { + infoStr = QString(" ") + MusicListDataWidget::tr("%1 albums - %2 songs").arg(musicListCount).arg(musicCount); + } + } + //allCount = musicListCount; + d->infoLabel->setText(infoStr); + } else if (playlist->id() == ArtistResultListID) { + PlayMusicTypePtrList playMusicTypePtrList = playlist->playMusicTypePtrList(); + int musicCount = 0; + int musicListCount = 0; + for (auto action : playMusicTypePtrList) { + if (searchStr.isEmpty()) { + musicCount += action->playlistMeta.sortMetas.size(); + musicListCount++; + } else { + if (chineseFlag) { + if (action->name.contains(searchStr, Qt::CaseInsensitive)) { + musicCount += action->playlistMeta.sortMetas.size(); + musicListCount++; + } + } else { + if (searchStr.size() == 1) { + auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(action->name); + if (!curTextList.isEmpty() && curTextList.first().contains(searchStr, Qt::CaseInsensitive)) { + musicCount += action->playlistMeta.sortMetas.size(); + musicListCount++; + } + } else { + auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(action->name); + if (!curTextList.isEmpty() && curTextList.join("").contains(searchStr, Qt::CaseInsensitive)) { + musicCount += action->playlistMeta.sortMetas.size(); + musicListCount++; + } + } + } + } + } + QString infoStr; + if (musicCount == 0) { + infoStr = QString(" ") + MusicListDataWidget::tr("No songs"); + } else if (musicCount == 1) { + infoStr = QString(" ") + MusicListDataWidget::tr("1 artist - 1 song"); + } else { + if (musicListCount == 1) { + infoStr = QString(" ") + MusicListDataWidget::tr("%1 artist - %2 songs").arg(musicListCount).arg(musicCount); + } else { + infoStr = QString(" ") + MusicListDataWidget::tr("%1 artists - %2 songs").arg(musicListCount).arg(musicCount); + } + } + //allCount = musicListCount; + d->infoLabel->setText(infoStr); + } else if (playlist->id() == MusicResultListID) { + QString infoStr; + int musicCount = 0; + for (auto action : playlist->allmusic()) { + if (searchStr.isEmpty()) { + musicCount ++; + } else { + if (chineseFlag) { + if (action->title.contains(searchStr, Qt::CaseInsensitive)) { + musicCount++; + } + } else { + if (searchStr.size() == 1) { + auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(action->title); + if (!curTextList.isEmpty() && curTextList.first().contains(searchStr, Qt::CaseInsensitive)) { + musicCount++; + } + } else { + auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(action->title); + if (!curTextList.isEmpty() && curTextList.join("").contains(searchStr, Qt::CaseInsensitive)) { + musicCount++; + } + } + } + } + } + + if (musicCount == 0) { + infoStr = QString(" ") + MusicListDataWidget::tr("No songs"); + } else if (musicCount == 1) { + infoStr = QString(" ") + MusicListDataWidget::tr("1 song"); + } else { + infoStr = QString(" ") + MusicListDataWidget::tr("%1 songs").arg(musicCount); + } + //allCount = musicCount; + d->infoLabel->setText(infoStr); + + } +} + + +PlaylistPtr MusicListDataWidget::curPlaylist() +{ + Q_D(MusicListDataWidget); + return d->curPlaylist; +} + +void MusicListDataWidget::onSearchText(QString str) +{ + Q_D(MusicListDataWidget); + if (d->curPlaylist.isNull()) { + qWarning() << "can not change to emptry playlist"; + return; + } + + d->initData(d->curPlaylist, false, str); +} + +void MusicListDataWidget::selectMusiclistChanged(PlaylistPtr playlist) +{ + if (playlist.isNull()) { + qWarning() << "can not change to emptry playlist"; + return; + } + + Q_D(MusicListDataWidget); + + playlist->setSearchStr(""); + + d->initData(playlist, true, ""); +} + +void MusicListDataWidget::onMusiclistChanged(PlaylistPtr playlist) +{ + if (playlist.isNull()) { + qWarning() << "can not change to emptry playlist"; + return; + } + + Q_D(MusicListDataWidget); + + playlist->setSearchStr(""); + d->initData(playlist); +} + +void MusicListDataWidget::onMusicListAdded(PlaylistPtr playlist, const MetaPtrList metalist) +{ + Q_D(MusicListDataWidget); + auto curPlayList = d->curPlaylist; + if (curPlayList == nullptr) { + d->initData(playlist); + } else { + if (curPlayList->id() == AlbumMusicListID || curPlayList->id() == ArtistMusicListID) { + d->initData(d->curPlaylist); + } else if (curPlayList->id() == playlist->id()) { + d->musicListView->onMusicListAdded(metalist); + d->updateInfo(); + } + } +} + +void MusicListDataWidget::onMusicListRemoved(PlaylistPtr playlist, const MetaPtrList metalist) +{ + Q_D(MusicListDataWidget); + + if (playlist->id() == "musicResult") { + + d->songListView->onMusicListRemoved(metalist); + + QString infoStr; + if (d->titleLabel->text() == MusicListDataWidget::tr("All Music")) { + infoStr = QString(" ") + MusicListDataWidget::tr("%1 songs").arg(d->musicListView->rowCount()); + d->infoLabel->setText(infoStr); + return; + } + infoStr = QString(" ") + MusicListDataWidget::tr("%1 songs").arg(d->songListView->rowCount()); + d->infoLabel->setText(infoStr); + d->titleLabel->setText(MusicListDataWidget::tr("Search Results")); + + } + + if (playlist != d->curPlaylist) { + if (playlist->id() == PlayMusicListID && playlist->allmusic().isEmpty()) { + d->albumListView->setPlaying(nullptr); + d->artistListView->setPlaying(nullptr); + d->musicListView->setPlaying(nullptr); + } + return; + } + + if (d->curPlaylist->id() == playlist->id()) { + + if (playlist->id() != AlbumMusicListID && playlist->id() != ArtistMusicListID && playlist->id() != AllMusicListID) { + d->updateInfo(); + if (playlist->id() == d->musicListView->playlist()->id()) + d->musicListView->onMusicListRemoved(metalist); + + } else { + + d->updateInfo(); + d->albumListView->updateList(); + d->artistListView->updateList(); + if (playlist->id() == d->musicListView->playlist()->id()) { + d->musicListView->onMusicListRemoved(metalist); + } + } + } + malloc_trim(0); +} + +void MusicListDataWidget::onMusiclistUpdate() +{ + Q_D(MusicListDataWidget); + d->initData(d->curPlaylist); + + int t_count = 0; + if (d->curPlaylist->id() == AlbumMusicListID) { + t_count = d->albumListView->playMusicTypePtrList().size(); + } else if (d->curPlaylist->id() == ArtistMusicListID) { + t_count = d->artistListView->playMusicTypePtrList().size(); + } else { + t_count = d->musicListView->playMetaPtrList().size(); + } + + if (t_count == 0 && !d->curPlaylist->searchStr().isEmpty()) { + d->emptyHits->setText(tr("No result found")); + d->albumListView->setVisible(false); + d->artistListView->setVisible(false); + d->musicListView->setVisible(false); + d->emptyHits->setVisible(true); + } else { + d->emptyHits->setText(""); + d->emptyHits->hide(); + } +} + +void MusicListDataWidget::onMusicPlayed(PlaylistPtr playlist, const MetaPtr Meta) +{ + Q_UNUSED(playlist) + Q_D(MusicListDataWidget); + d->albumListView->setPlaying(Meta); + d->artistListView->setPlaying(Meta); + d->musicListView->setPlaying(Meta); + d->albumListView->update(); + d->artistListView->update(); + d->musicListView->update(); + + d->songListView->setPlaying(Meta); + d->singerListView->setPlaying(Meta); + d->albListView->setPlaying(Meta); + d->songListView->update(); + d->singerListView->update(); + d->albListView->update(); +} + +void MusicListDataWidget::slotTheme(int type) +{ + Q_D(MusicListDataWidget); + QString rStr; + if (type == 1) { + rStr = "light"; + } else { + rStr = "dark"; + } + if (type == 1) { + auto palette = this->palette(); + QColor background("#FFFFFF"); + background.setAlphaF(0.1); + palette.setColor(DPalette::Background, background); + setPalette(palette); + + auto emptyHitsPalette = d->emptyHits->palette(); + QColor titleLabelPaletteColor("#000000"); + titleLabelPaletteColor.setAlphaF(0.3); + emptyHitsPalette.setColor(QPalette::WindowText, titleLabelPaletteColor); + d->emptyHits->setPalette(emptyHitsPalette); + d->emptyHits->setForegroundRole(QPalette::WindowText); + + d->emptySearchHits->setPalette(emptyHitsPalette); + d->emptySearchHits->setForegroundRole(QPalette::WindowText); + +// auto titleLabelPalette = d->infoLabel->palette(); +// titleLabelPalette.setColor(QPalette::WindowText, QColor("#000000")); +// d->titleLabel->setPalette(titleLabelPalette); +// d->titleLabel->setForegroundRole(QPalette::WindowText); + + auto playAllPalette = d->btPlayAll->palette(); + playAllPalette.setColor(DPalette::ButtonText, Qt::white); + playAllPalette.setColor(DPalette::Light, QColor("#FD5E5E")); + playAllPalette.setColor(DPalette::Dark, QColor("#ED5656")); + d->btPlayAll->setPalette(playAllPalette); + + auto infoLabelPalette = d->infoLabel->palette(); + QColor infoLabelColor = infoLabelPalette.color(DPalette::BrightText); + infoLabelColor.setAlphaF(0.7); + infoLabelPalette.setColor(DPalette::ButtonText, infoLabelColor); + d->infoLabel->setPalette(infoLabelPalette); + +// auto playAllPalette = d->btPlayAll->palette(); +// playAllPalette.setColor(DPalette::Dark, QColor("#FD5E5E")); +// playAllPalette.setColor(DPalette::Light, QColor("#ED5656")); +// d->btPlayAll->setPalette(palette); + } else { + auto palette = this->palette(); + QColor background("#252525"); + palette.setColor(DPalette::Background, background); + setPalette(palette); + + auto emptyHitsPalette = d->emptyHits->palette(); + QColor titleLabelPaletteColor("#C0C6D4"); + titleLabelPaletteColor.setAlphaF(0.4); + emptyHitsPalette.setColor(QPalette::WindowText, titleLabelPaletteColor); + d->emptyHits->setPalette(emptyHitsPalette); + d->emptyHits->setForegroundRole(QPalette::WindowText); + + d->emptySearchHits->setPalette(emptyHitsPalette); + d->emptySearchHits->setForegroundRole(QPalette::WindowText); + +// auto titleLabelPalette = d->infoLabel->palette(); +// titleLabelPalette.setColor(DPalette::WindowText, QColor("#FFFFFF")); +// d->titleLabel->setPalette(titleLabelPalette); +// d->titleLabel->setForegroundRole(DPalette::WindowText); + + auto playAllPalette = d->btPlayAll->palette(); + playAllPalette.setColor(DPalette::ButtonText, "#FFFFFF"); + playAllPalette.setColor(DPalette::Light, QColor("#DA2D2D")); + playAllPalette.setColor(DPalette::Dark, QColor("#A51B1B")); + d->btPlayAll->setPalette(playAllPalette); + + auto infoLabelPalette = d->infoLabel->palette(); + QColor infoLabelColor = infoLabelPalette.color(DPalette::BrightText); + infoLabelColor.setAlphaF(0.7); + infoLabelPalette.setColor(DPalette::ButtonText, infoLabelColor); + d->infoLabel->setPalette(infoLabelPalette); + +// auto playAllPalette = d->btPlayAll->palette(); +// playAllPalette.setColor(DPalette::Dark, QColor("#DA2D2D")); +// playAllPalette.setColor(DPalette::Light, QColor("#A51B1B")); +// d->btPlayAll->setPalette(palette); + } + +// d->btIconMode->setPropertyPic(QString(":/mpimage/%1/normal/picture_list_normal.svg").arg(rStr), +// QString(":/mpimage/%1/hover/picture_list_hover.svg").arg(rStr), +// QString(":/mpimage/%1/press/picture_list_press.svg").arg(rStr), +// QString(":/mpimage/%1/active/picture_list_active.svg").arg(rStr)); +// d->btlistMode->setPropertyPic(QString(":/mpimage/%1/normal/text_list_normal.svg").arg(rStr), +// QString(":/mpimage/%1/hover/text_list_hover.svg").arg(rStr), +// QString(":/mpimage/%1/press/text_list_press.svg").arg(rStr), +// QString(":/mpimage/%1/active/text_list_active.svg").arg(rStr)); + +// d->btIconMode->setIcon(QIcon(QString(":/mpimage/light/normal/picture_list_normal.svg"))); + d->btIconMode->setIcon(QIcon::fromTheme("picture_list_texts")); + d->btIconMode->setIconSize(QSize(36, 36)); +// d->btlistMode->setIcon(QIcon(QString(":/mpimage/light/normal/text_list_normal.svg"))); + d->btlistMode->setIcon(QIcon::fromTheme("text_list_texts")); + d->btlistMode->setIconSize(QSize(36, 36)); + d->albumListView->setThemeType(type); + d->artistListView->setThemeType(type); + d->musicListView->setThemeType(type); + /*----------tabwidget-------------*/ + d->songListView->setThemeType(type); + d->singerListView->setThemeType(type); + d->albListView->setThemeType(type); +} + +void MusicListDataWidget::changePicture(QPixmap pixmap, QPixmap sidebarPixmap, QPixmap albumPixmap) +{ + Q_D(MusicListDataWidget); + if (d->albumListView->isVisible()) { + d->albumListView->setPlayPixmap(pixmap, sidebarPixmap, albumPixmap); + } else if (d->artistListView->isVisible()) { + d->artistListView->setPlayPixmap(pixmap, sidebarPixmap, albumPixmap); + } else if (d->albListView->isVisible()) { + d->albListView->setPlayPixmap(pixmap, sidebarPixmap, albumPixmap); + } else if (d->singerListView->isVisible()) { + d->singerListView->setPlayPixmap(pixmap, sidebarPixmap, albumPixmap); + } else if (d->songListView->isVisible()) { + d->songListView->setPlayPixmap(pixmap, sidebarPixmap, albumPixmap); + } else { + d->musicListView->setPlayPixmap(pixmap, sidebarPixmap, albumPixmap); + } +} + +void MusicListDataWidget::retResult(QString searchText, QList resultlist) +{ + Q_D(MusicListDataWidget); + + PlaylistPtr retdata; + QString search = ""; + int CurIndex = 0; + bool flagMus = false; + bool flagArt = false; + bool flagAlb = false; + + if (searchText.isEmpty()) { + + d->initData(d->selectPlaylist, false, ""); + + } else { + + for (int i = 0; i < resultlist.size(); ++i) { + if (resultlist.at(i)->id() == MusicResultListID) { + retdata = resultlist.at(i); + + MusicPlaylists = resultlist.at(i); + flagMus = true; + + + if (d->songListView->viewMode() != (resultlist.at(i)->viewMode())) { + d->songListView->setViewModeFlag(static_cast(resultlist.at(i)->viewMode())); + } + if (d->songListView->viewMode() == QListView::IconMode) { + d->btIconMode->setChecked(true); + d->btlistMode->setChecked(false); + } else { + d->btIconMode->setChecked(false); + d->btlistMode->setChecked(true); + } + + d->songListView->onMusiclistChanged(resultlist.at(i)); + + } else if (resultlist.at(i)->id() == ArtistResultListID) { + ArtistPlaylists = resultlist.at(i); + retdata = resultlist.at(i); + flagArt = true; + + + if (d->singerListView->viewMode() != (resultlist.at(i)->viewMode())) { + d->singerListView->setViewModeFlag(static_cast(resultlist.at(i)->viewMode())); + } + if (d->singerListView->viewMode() == QListView::IconMode) { + d->btIconMode->setChecked(true); + d->btlistMode->setChecked(false); + } else { + d->btIconMode->setChecked(false); + d->btlistMode->setChecked(true); + } + d->singerListView->onMusiclistChanged(resultlist.at(i)); + + } else if (resultlist.at(i)->id() == AlbumResultListID) { + AlbumPlaylists = resultlist.at(i); + retdata = resultlist.at(i); + flagAlb = true; + + + if (d->albListView->viewMode() != (resultlist.at(i)->viewMode())) { + d->albListView->setViewModeFlag(static_cast(resultlist.at(i)->viewMode())); + } + if (d->albListView->viewMode() == QListView::IconMode) { + d->btIconMode->setChecked(true); + d->btlistMode->setChecked(false); + } else { + d->btIconMode->setChecked(false); + d->btlistMode->setChecked(true); + } + d->albListView->onMusiclistChanged(resultlist.at(i)); + } + } + + /*-------Circulation refresh--------*/ + for (int j = 0; j < 3; j++) { + d->tabWidget->setCurrentIndex(j); + } + + if (resultlist.first()->id() == MusicResultListID) { + CurIndex = 0; + + } else if (resultlist.first()->id() == ArtistResultListID) { + CurIndex = 1; + + } else if (resultlist.first()->id() == AlbumResultListID) { + CurIndex = 2; + } + + if (flagMus & flagArt & flagAlb) { + + d->tabWidget->setCurrentIndex(0); + + } + + /*---------Search without result------*/ + if (d->songListView->rowCount() == 0 && d->singerListView->rowCount() == 0 && d->albListView->rowCount() == 0) { + d->initData(retdata, false, "noSearchResults"); + return; + } + d->updateFlag = true; + + if (CurIndex == 0) { + d->initData(MusicPlaylists, false, search); + tabwidgetInfo(MusicPlaylists); + } + if (CurIndex == 1) { + d->initData(ArtistPlaylists, false, search); + tabwidgetInfo(ArtistPlaylists); + } + if (CurIndex == 2) { + d->initData(AlbumPlaylists, false, search); + tabwidgetInfo(AlbumPlaylists); + } + d->tabWidget->setCurrentIndex(CurIndex); + } +} + +void MusicListDataWidget::CloseSearch() +{ + Q_D(MusicListDataWidget); + + d->updateFlag = false; + d->initData(d->selectPlaylist, false, ""); +} + +void MusicListDataWidget::onCustomContextMenuRequest(const QPoint &pos, PlaylistPtr selectedlist, PlaylistPtr favlist, QList newlists, char type) +{ + Q_UNUSED(selectedlist) + Q_D(MusicListDataWidget); + if (type == 2) { + d->albumListView->showContextMenu(pos, d->musicListView->playlist(), favlist, newlists); + } else if (type == 3) { + d->artistListView->showContextMenu(pos, d->musicListView->playlist(), favlist, newlists); + } else if (type == 4) { + d->songListView->showContextMenu(pos, d->musicListView->playlist(), favlist, newlists); + } else if (type == 5) { + d->albListView->showContextMenu(pos, d->musicListView->playlist(), favlist, newlists); + + } else if (type == 6) { + d->singerListView->showContextMenu(pos, d->musicListView->playlist(), favlist, newlists); + + } else { + d->musicListView->showContextMenu(pos, d->musicListView->playlist(), favlist, newlists); + } +} + +void MusicListDataWidget::dragEnterEvent(QDragEnterEvent *event) +{ + DWidget::dragEnterEvent(event); + if (event->mimeData()->hasFormat("text/uri-list")) { + qDebug() << "acceptProposedAction" << event; + event->setDropAction(Qt::CopyAction); + event->acceptProposedAction(); + return; + } +} + +void MusicListDataWidget::dropEvent(QDropEvent *event) +{ + DWidget::dropEvent(event); + Q_D(MusicListDataWidget); + + if (!event->mimeData()->hasFormat("text/uri-list")) { + return; + } + + auto urls = event->mimeData()->urls(); + QStringList localpaths; + for (auto &url : urls) { + localpaths << url.toLocalFile(); + } + + if (!localpaths.isEmpty() && !d->curPlaylist.isNull()) { + Q_EMIT importSelectFiles(d->curPlaylist, localpaths); + } +} + + +ActionBar::ActionBar(QWidget *parent) +{ + Q_UNUSED(parent) + MoveFlag = false; +} + +void ActionBar::mouseReleaseEvent(QMouseEvent *event) +{ + MoveFlag = true; + DWidget::mouseReleaseEvent(event); +} + +void ActionBar::mousePressEvent(QMouseEvent *event) +{ + MoveFlag = false; + DWidget::mousePressEvent(event); +} +void ActionBar::mouseMoveEvent(QMouseEvent *event) +{ + if (MoveFlag) + DWidget::mousePressEvent(event); +} + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/musiclistdatawidget.h deepin-music-6.0.1.54+ds.1/src/music-player/view/musiclistdatawidget.h --- deepin-music-5.0.1+ds/src/music-player/view/musiclistdatawidget.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/musiclistdatawidget.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include + +#include "../core/playlist.h" + +DWIDGET_USE_NAMESPACE + +class ActionBar; +class MusicListDataWidgetPrivate; +class MusicListDataWidget : public DWidget +{ + Q_OBJECT +public: + explicit MusicListDataWidget(QWidget *parent = Q_NULLPTR); + ~MusicListDataWidget() override; + + void setCustomSortType(PlaylistPtr playlist); + void tabwidgetInfo(PlaylistPtr infoPlaylist); + PlaylistPtr curPlaylist(); + +public slots: + void onSearchText(QString str); + void selectMusiclistChanged(PlaylistPtr playlist); + void onMusiclistChanged(PlaylistPtr playlist); + void onMusicListAdded(PlaylistPtr playlist, const MetaPtrList metalist); + void onMusicListRemoved(PlaylistPtr playlist, const MetaPtrList metalist); + void onMusiclistUpdate(); + void onMusicPlayed(PlaylistPtr playlist, const MetaPtr); + void slotTheme(int type); + void changePicture(QPixmap pixmap, QPixmap sidebarPixmap, QPixmap albumPixmap); + void retResult(QString searchText, QList resultlist); + void resultTabwidget(int index); + + void CloseSearch(); + void onCustomContextMenuRequest(const QPoint &pos, + PlaylistPtr selectedlist, + PlaylistPtr favlist, + QListnewlists, + char type); + +signals: + void playall(PlaylistPtr playlist); + void resort(PlaylistPtr playlist, int sortType); + void playMedia(PlaylistPtr playlist, const MetaPtr meta); + void resume(PlaylistPtr playlist, const MetaPtr meta); + void pause(PlaylistPtr playlist, const MetaPtr meta); + void modeChanged(int); + void importSelectFiles(PlaylistPtr playlist, QStringList urllist); + + void requestCustomContextMenu(const QPoint &pos, char type); + void addToPlaylist(PlaylistPtr playlist, const MetaPtrList &metalist); + void musiclistRemove(PlaylistPtr playlist, const MetaPtrList &metalist); + void musiclistDelete(PlaylistPtr playlist, const MetaPtrList &metalist); + void showInfoDialog(const MetaPtr meta); + void updateMetaCodec(const QString &preTitle, const QString &preArtist, const QString &preAlbum, const MetaPtr meta); + void addMetasFavourite(const MetaPtrList &metalist); + void removeMetasFavourite(const MetaPtrList &metalist); + +protected: + virtual void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE; + virtual void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE; + +private: + PlaylistPtr MusicPlaylists; + PlaylistPtr ArtistPlaylists; + PlaylistPtr AlbumPlaylists; + + QScopedPointer d_ptr; + Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusicListDataWidget) +}; + +class ActionBar : public DWidget +{ + Q_OBJECT +public: + explicit ActionBar(QWidget *parent = Q_NULLPTR); + ~ActionBar() {} +private: + bool MoveFlag = false; + +protected: + //Filter the mousemoveevent + virtual void mouseReleaseEvent(QMouseEvent *event); + virtual void mousePressEvent(QMouseEvent *event); + virtual void mouseMoveEvent(QMouseEvent *event); +}; + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/musiclistscrollarea.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/musiclistscrollarea.cpp --- deepin-music-5.0.1+ds/src/music-player/view/musiclistscrollarea.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/musiclistscrollarea.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,183 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "musiclistscrollarea.h" + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +#include "../core/playlist.h" +#include "../core/musicsettings.h" +#include "widget/musiclistview.h" +#include "widget/musiclistviewitem.h" +#include "musiclistdatawidget.h" +#include "widget/musicimagebutton.h" +#include + +MusicListScrollArea::MusicListScrollArea(QWidget *parent) : DScrollArea(parent) +{ + setFrameShape(QFrame::NoFrame); + setFixedWidth(220); + setWidgetResizable(true); + + setAutoFillBackground(true); + auto leftFramePalette = palette(); + leftFramePalette.setColor(DPalette::Background, QColor("#FFFFFF")); + setPalette(leftFramePalette); + + QWidget *widget = new QWidget(this); + setWidget(widget); + + auto musicLayout = new QVBoxLayout(widget); + musicLayout->setContentsMargins(10, 5, 10, 5); + musicLayout->setSpacing(0); + + dataBaseLabel = new DLabel; + dataBaseLabel->setFixedHeight(40); + dataBaseLabel->setText(tr("Library")); + dataBaseLabel->setObjectName("MusicListScrollAreaDataBase"); + dataBaseLabel->setMargin(10); + auto dataBaseLabelFont = dataBaseLabel->font(); + dataBaseLabelFont.setFamily("SourceHanSansSC"); + dataBaseLabelFont.setWeight(QFont::Medium); + dataBaseLabelFont.setPixelSize(14); + dataBaseLabel->setFont(dataBaseLabelFont); + + customizeLabel = new DLabel; + customizeLabel->setFixedHeight(40); + customizeLabel->setText(tr("Playlists")); + customizeLabel->setObjectName("MusicListScrollAreaCustomizeLabel"); + customizeLabel->setMargin(10); + customizeLabel->setFont(dataBaseLabelFont); + + m_addListBtn = new MusicImageButton(":/mpimage/light/normal/add_normal.svg", + ":/mpimage/light/hover/add_hover.svg", + ":/mpimage/light/press/add_press.svg"); + m_addListBtn->setFixedSize(37, 37); + m_addListBtn->setFocusPolicy(Qt::NoFocus); + + auto customizeLayout = new QHBoxLayout(widget); + customizeLayout->setContentsMargins(0, 0, 5, 0); + customizeLayout->addWidget(customizeLabel, 100, Qt::AlignLeft); + customizeLayout->addStretch(); + customizeLayout->addWidget(m_addListBtn, 0, Qt::AlignBottom); + + m_dataBaseListview = new MusicListView; + m_dataBaseListview->setEditTriggers(QAbstractItemView::NoEditTriggers); + m_dataBaseListview->setFixedHeight(162); + m_customizeListview = new MusicListView; + musicLayout->setContentsMargins(0, 0, 0, 0); + + musicLayout->addWidget(dataBaseLabel, 0, Qt::AlignVCenter); + musicLayout->addWidget(m_dataBaseListview, 0, Qt::AlignTop); + musicLayout->addLayout(customizeLayout); + musicLayout->addWidget(m_customizeListview); + + int themeType = DGuiApplicationHelper::instance()->themeType(); + slotTheme(themeType); + + connect(verticalScrollBar(), &QScrollBar::rangeChanged, this, [=]() { + if (m_customizeListview->getSizeChangedFlag()) { + this->verticalScrollBar()->setValue(this->verticalScrollBar()->maximum()); + m_customizeListview->setSizeChangedFlag(false); + } + }); +} + +MusicListView *MusicListScrollArea::getDBMusicListView() +{ + return m_dataBaseListview; +} + +MusicListView *MusicListScrollArea::getCustomMusicListView() +{ + return m_customizeListview; +} + +MusicImageButton *MusicListScrollArea::getAddButton() +{ + return m_addListBtn; +} + +void MusicListScrollArea::slotTheme(int type) +{ + if (type == 0) + type = DGuiApplicationHelper::instance()->themeType(); + if (type == 1) { + DPalette leftFramePalette = palette(); + leftFramePalette.setColor(DPalette::Background, QColor("#FFFFFF")); + setPalette(leftFramePalette); + + DPalette dataBaseLabelPalette = dataBaseLabel->palette(); + QColor WindowTextColor("#757F92"); + WindowTextColor.setAlphaF(0.8); + dataBaseLabelPalette.setColor(DPalette::WindowText, WindowTextColor); + dataBaseLabel->setPalette(dataBaseLabelPalette); + customizeLabel->setPalette(dataBaseLabelPalette); + + m_addListBtn->setPropertyPic(":/mpimage/light/normal/add_normal.svg", + ":/mpimage/light/hover/add_hover.svg", + ":/mpimage/light/press/add_press.svg"); + } else { + auto leftFramePalette = palette(); + leftFramePalette.setColor(DPalette::Background, QColor("#232323")); + setPalette(leftFramePalette); + + DPalette dataBaseLabelPalette = dataBaseLabel->palette(); + QColor WindowTextColor("#C0C6D4"); + WindowTextColor.setAlphaF(0.8); + dataBaseLabelPalette.setColor(DPalette::WindowText, WindowTextColor); + dataBaseLabel->setPalette(dataBaseLabelPalette); + customizeLabel->setPalette(dataBaseLabelPalette); + + m_addListBtn->setPropertyPic(":/mpimage/dark/normal/add_normal.svg", + ":/mpimage/dark/hover/add_hover.svg", + ":/mpimage/dark/press/add_press.svg"); + } + + m_dataBaseListview->slotTheme(type); + m_customizeListview->slotTheme(type); +} + +void MusicListScrollArea::changePicture(QPixmap pixmap, QPixmap albumPixmap, QPixmap sidebarPixmap) +{ + Q_UNUSED(albumPixmap) + m_dataBaseListview->changePicture(pixmap, sidebarPixmap); + m_customizeListview->changePicture(pixmap, sidebarPixmap); +} + +void MusicListScrollArea::resizeEvent(QResizeEvent *event) +{ + m_customizeListview->adjustHeight(); + DScrollArea::resizeEvent(event); + sizeHint(); +} + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/musiclistscrollarea.h deepin-music-6.0.1.54+ds.1/src/music-player/view/musiclistscrollarea.h --- deepin-music-5.0.1+ds/src/music-player/view/musiclistscrollarea.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/musiclistscrollarea.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include + +DWIDGET_USE_NAMESPACE + +class MusicListView; +class MusicListDataWidget; +class MusicImageButton; + +class MusicListScrollArea : public DScrollArea +{ + Q_OBJECT +public: + explicit MusicListScrollArea(QWidget *parent = Q_NULLPTR); + + MusicListView *getDBMusicListView(); + MusicListView *getCustomMusicListView(); + MusicImageButton *getAddButton(); + +public slots: + void slotTheme(int type); + void changePicture(QPixmap pixmap, QPixmap albumPixmap, QPixmap sidebarPixmap); + +protected: + virtual void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; + +private: + MusicListView *m_dataBaseListview; + MusicListView *m_customizeListview; + MusicImageButton *m_addListBtn; + DLabel *dataBaseLabel; + DLabel *customizeLabel; +}; + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/musiclistwidget.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/musiclistwidget.cpp --- deepin-music-5.0.1+ds/src/music-player/view/musiclistwidget.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/musiclistwidget.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -22,334 +22,436 @@ #include "musiclistwidget.h" #include -#include + #include -#include -#include -#include -#include -#include -#include -#include +#include -#include +#include +#include +#include +#include +#include +#include +#include -#include "../core/music.h" #include "../core/playlist.h" +#include "../core/musicsettings.h" #include "widget/musiclistview.h" -#include "widget/ddropdown.h" - -DWIDGET_USE_NAMESPACE +#include "widget/musiclistviewitem.h" +#include "musiclistdatawidget.h" +#include "widget/musicimagebutton.h" +#include "musiclistscrollarea.h" -class MusicListWidgetPrivate +MusicListWidget::MusicListWidget(QWidget *parent) : DWidget(parent) { -public: - MusicListWidgetPrivate(MusicListWidget *parent) : q_ptr(parent) {} + setObjectName("MusicListWidget"); - void initData(PlaylistPtr playlist); - void initConntion(); - void showEmptyHits(bool empty); + setAutoFillBackground(true); + auto palette = this->palette(); + palette.setColor(DPalette::Background, QColor("#F8F8F8")); + setPalette(palette); - QLabel *emptyHits = nullptr; - QWidget *actionBar = nullptr; - QPushButton *btPlayAll = nullptr; - DDropdown *dropdown = nullptr; - MusicListView *musiclist = nullptr; - QAction *customAction = nullptr; + auto layout = new QHBoxLayout(this); + setFocusPolicy(Qt::ClickFocus); + layout->setContentsMargins(0, 0, 0, 0); + layout->setSpacing(0); - MusicListWidget *q_ptr; - Q_DECLARE_PUBLIC(MusicListWidget) -}; + leftFrame = new MusicListScrollArea; + leftFrame->setFixedWidth(220); + leftFrame->setAutoFillBackground(true); + auto leftFramePalette = leftFrame->palette(); + leftFramePalette.setColor(DPalette::Background, QColor("#FFFFFF")); + leftFrame->setPalette(leftFramePalette); + + m_addListBtn = leftFrame->getAddButton(); + + m_dataBaseListview = leftFrame->getDBMusicListView(); + m_customizeListview = leftFrame->getCustomMusicListView(); + m_dataListView = new MusicListDataWidget; + + layout->addWidget(leftFrame, 0); + layout->addWidget(m_dataListView, 100); + + int themeType = DGuiApplicationHelper::instance()->themeType(); + slotTheme(themeType); + + connect(this, &MusicListWidget::seaResult, + m_dataListView, &MusicListDataWidget::retResult); + + connect(this, &MusicListWidget::seaResult, this, [ = ]() { + m_customizeListview->clearSelected(); + m_customizeListview->closeAllPersistentEditor(); + m_dataBaseListview->clearSelected(); + m_dataBaseListview->closeAllPersistentEditor(); + }); -void MusicListWidgetPrivate::initData(PlaylistPtr playlist) -{ - Q_Q(MusicListWidget); - btPlayAll->setText(playlist->displayName()); - musiclist->onMusiclistChanged(playlist); + connect(this, &MusicListWidget::closeSearch, + m_dataListView, &MusicListDataWidget::CloseSearch); - if (playlist->sortType() == Playlist::SortByCustom) { - q->setCustomSortType(); - } else { - for (auto action : dropdown->actions()) { - if (action->data().toInt() == playlist->sortType()) { - dropdown->setCurrentAction(action); + connect(m_addListBtn, &DPushButton::clicked, this, [ = ](bool /*checked*/) { + qDebug() << "addPlaylist(true);"; + addFlag = true; + Q_EMIT this->addPlaylist(true); + }); + + connect(m_dataBaseListview, &MusicListView::pressed, + this, [ = ](const QModelIndex & index) { + auto curPtr = m_dataBaseListview->playlistPtr(index); + if (curPtr != nullptr) { + m_customizeListview->clearSelected(); + m_customizeListview->closeAllPersistentEditor(); + m_dataListView->selectMusiclistChanged(curPtr); + curPtr->setSearchStr(""); + Q_EMIT selectedPlaylistChange(curPtr); + } + m_dataBaseListview->setFocus(); + }); + connect(m_dataBaseListview, &MusicListView::currentChanged, + this, [ = ](const QModelIndex & current, const QModelIndex & previous) { + Q_UNUSED(previous) + auto curPtr = m_dataBaseListview->playlistPtr(current); + if (curPtr != nullptr) { + m_customizeListview->clearSelected(); + m_customizeListview->closeAllPersistentEditor(); + m_dataListView->selectMusiclistChanged(curPtr); + curPtr->setSearchStr(""); + Q_EMIT selectedPlaylistChange(curPtr); + } + m_dataBaseListview->setFocus(); + }); + connect(m_dataBaseListview, &MusicListView::customResort, + this, [ = ](const QStringList & uuids) { + + Q_EMIT this->customResort(uuids); + + }); + connect(m_dataBaseListview, &MusicListView::playall, + this, [ = ](PlaylistPtr playlist) { + if (playlist->playing() == nullptr) { + if (playlist->id() == AlbumMusicListID || playlist->id() == ArtistMusicListID) { + playlist->playMusicTypeToMeta(); + playlist->play(playlist->first()); } + Q_EMIT this->playall(playlist); + } else { + Q_EMIT this->resume(playlist, playlist->playing()); } - } - showEmptyHits(musiclist->model()->rowCount() == 0); -} -void MusicListWidgetPrivate::initConntion() -{ - Q_Q(MusicListWidget); + }); + connect(m_dataBaseListview, &MusicListView::pause, + this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { + Q_EMIT this->pause(playlist, meta); + }); + connect(m_dataBaseListview, &MusicListView::importSelectFiles, + this, [ = ](PlaylistPtr playlist, QStringList urllist) { + Q_EMIT this->importSelectFiles(playlist, urllist); + }); + connect(m_dataBaseListview, &MusicListView::addToPlaylist, + this, [ = ](PlaylistPtr playlist, const MetaPtrList metalist) { + Q_EMIT this->addToPlaylist(playlist, metalist); + }); + + connect(m_customizeListview, &MusicListView::pressed, + this, [ = ](const QModelIndex & index) { + auto curPtr = m_customizeListview->playlistPtr(index); + if (curPtr != nullptr) { + m_dataBaseListview->clearSelected(); + m_dataBaseListview->closeAllPersistentEditor(); + m_dataListView->selectMusiclistChanged(curPtr); - q->connect(dropdown, &DDropdown::triggered, - q, [ = ](QAction * action) { - dropdown->setCurrentAction(action); - Q_EMIT q->resort(musiclist->playlist(), action->data().value()); + curPtr->setSearchStr(""); + Q_EMIT selectedPlaylistChange(curPtr); + } + m_customizeListview->setFocus(); }); + connect(m_customizeListview, &MusicListView::currentChanged, + this, [ = ](const QModelIndex & current, const QModelIndex & previous) { + Q_UNUSED(previous) + auto curPtr = m_customizeListview->playlistPtr(current); + if (curPtr != nullptr) { + m_dataBaseListview->clearSelected(); + m_dataBaseListview->closeAllPersistentEditor(); + m_dataListView->selectMusiclistChanged(curPtr); - q->connect(btPlayAll, &QPushButton::clicked, - q, [ = ](bool) { - if (musiclist->playlist()) { - Q_EMIT q->playall(musiclist->playlist()); + curPtr->setSearchStr(""); + Q_EMIT selectedPlaylistChange(curPtr); } + m_customizeListview->setFocus(); }); + connect(m_customizeListview, &MusicListView::removeAllList, + this, [ = ](const MetaPtr meta) { + Q_UNUSED(meta) + auto current = m_dataBaseListview->item(2); + auto curPtr = m_dataBaseListview->playlistPtr(current); - q->connect(musiclist, &MusicListView::customSort, - q, [ = ]() { - q->setCustomSortType(); - Q_EMIT q->resort(musiclist->playlist(), Playlist::SortByCustom); + Q_EMIT this->playall(curPtr); + }); + connect(m_customizeListview, &MusicListView::customResort, + this, [ = ](const QStringList & uuids) { + Q_EMIT this->customResort(uuids); + }); + connect(m_customizeListview, &MusicListView::playall, + this, [ = ](PlaylistPtr playlist) { + if (playlist->playing() == nullptr) { + Q_EMIT this->playall(playlist); + } else { + Q_EMIT this->resume(playlist, playlist->playing()); + } + }); + connect(m_customizeListview, &MusicListView::displayNameChanged, + this, [ = ]() { + m_dataListView->onMusiclistUpdate(); + }); + connect(m_customizeListview, &MusicListView::pause, + this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { + Q_EMIT this->pause(playlist, meta); + }); + connect(m_customizeListview, &MusicListView::importSelectFiles, + this, [ = ](PlaylistPtr playlist, QStringList urllist) { + Q_EMIT this->importSelectFiles(playlist, urllist); + }); + connect(m_customizeListview, &MusicListView::addToPlaylist, + this, [ = ](PlaylistPtr playlist, const MetaPtrList metalist) { + Q_EMIT this->addToPlaylist(playlist, metalist); }); - q->connect(musiclist, &MusicListView::requestCustomContextMenu, - q, [ = ](const QPoint & pos) { - Q_EMIT q->requestCustomContextMenu(pos); + //musiclistdatawidget + connect(m_dataListView, &MusicListDataWidget::playall, + this, [ = ](PlaylistPtr playlist) { +// Q_EMIT this->selectPlaylist(playlist); + Q_EMIT this->playall(playlist); + }); + connect(m_dataListView, &MusicListDataWidget::playMedia, + this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { + Q_EMIT this->playMedia(playlist, meta); + }); + connect(m_dataListView, &MusicListDataWidget::resume, + this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { + Q_EMIT this->resume(playlist, meta); + }); + connect(m_dataListView, &MusicListDataWidget::pause, + this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { + Q_EMIT this->pause(playlist, meta); + }); + connect(m_dataListView, &MusicListDataWidget::resort, + this, [ = ](PlaylistPtr playlist, int sortType) { + Q_EMIT this->resort(playlist, sortType); + }); + connect(m_dataListView, &MusicListDataWidget::requestCustomContextMenu, + this, [ = ](const QPoint & pos, char type) { + Q_EMIT this->requestCustomContextMenu(pos, type); + }); + connect(m_dataListView, &MusicListDataWidget::addToPlaylist, + this, [ = ](PlaylistPtr playlist, const MetaPtrList metalist) { + Q_EMIT this->addToPlaylist(playlist, metalist); }); - q->connect(musiclist, &MusicListView::removeMusicList, - q, [ = ](const MetaPtrList & metalist) { - Q_EMIT q->musiclistRemove(musiclist->playlist(), metalist); + connect(m_dataListView, &MusicListDataWidget::musiclistRemove, + this, [ = ](PlaylistPtr playlist, const MetaPtrList & metalist) { + Q_EMIT this->musiclistRemove(playlist, metalist); }); - q->connect(musiclist, &MusicListView::deleteMusicList, - q, [ = ](const MetaPtrList & metalist) { - Q_EMIT q->musiclistDelete(musiclist->playlist(), metalist); + connect(m_dataListView, &MusicListDataWidget::musiclistDelete, + this, [ = ](PlaylistPtr playlist, const MetaPtrList & metalist) { + Q_EMIT this->musiclistDelete(playlist, metalist); }); - q->connect(musiclist, &MusicListView::addToPlaylist, - q, [ = ](PlaylistPtr playlist, const MetaPtrList metalist) { - Q_EMIT q->addToPlaylist(playlist, metalist); + connect(m_dataListView, &MusicListDataWidget::showInfoDialog, + this, [ = ](const MetaPtr meta) { + Q_EMIT this->showInfoDialog(meta); }); - q->connect(musiclist, &MusicListView::playMedia, - q, [ = ](const MetaPtr meta) { - Q_EMIT q->playMedia(musiclist->playlist(), meta); + connect(m_dataListView, &MusicListDataWidget::updateMetaCodec, + this, [ = ](const QString & preTitle, const QString & preArtist, const QString & preAlbum, const MetaPtr meta) { + Q_EMIT this->updateMetaCodec(preTitle, preArtist, preAlbum, meta); }); - q->connect(musiclist, &MusicListView::showInfoDialog, - q, [ = ](const MetaPtr meta) { - Q_EMIT q->showInfoDialog(meta); + connect(m_dataListView, &MusicListDataWidget::modeChanged, + this, [ = ](int mode) { + Q_EMIT this->modeChanged(mode); }); - q->connect(musiclist, &MusicListView::updateMetaCodec, - q, [ = ](const MetaPtr meta) { - Q_EMIT q->updateMetaCodec(meta); + connect(m_dataListView, &MusicListDataWidget::importSelectFiles, + this, [ = ](PlaylistPtr playlist, QStringList urllist) { + Q_EMIT this->importSelectFiles(playlist, urllist); + }); + connect(m_dataListView, &MusicListDataWidget::addMetasFavourite, + this, [ = ](const MetaPtrList & metalist) { + Q_EMIT addMetasFavourite(metalist); + }); + connect(m_dataListView, &MusicListDataWidget::removeMetasFavourite, + this, [ = ](const MetaPtrList & metalist) { + Q_EMIT removeMetasFavourite(metalist); }); } -void MusicListWidgetPrivate::showEmptyHits(bool empty) +PlaylistPtr MusicListWidget::curPlaylist() { - auto playlist = musiclist->playlist(); - if (playlist.isNull() || playlist->id() != SearchMusicListID) { - emptyHits->setText(MusicListWidget::tr("No Music")); - } else { - emptyHits->setText(MusicListWidget::tr("No result found")); - } - actionBar->setVisible(!empty); - musiclist->setVisible(!empty); - emptyHits->setVisible(empty); + PlaylistPtr curPlaylist = nullptr; + if (m_dataListView != nullptr) + curPlaylist = m_dataListView->curPlaylist(); + return curPlaylist; } -MusicListWidget::MusicListWidget(QWidget *parent) : - QFrame(parent), d_ptr(new MusicListWidgetPrivate(this)) +void MusicListWidget::onSearchText(QString str) { - Q_D(MusicListWidget); - - DThemeManager::instance()->registerWidget(this); - - setObjectName("MusicListWidget"); - setAcceptDrops(true); - - auto layout = new QVBoxLayout(this); - layout->setContentsMargins(0, 0, 0, 0); - layout->setSpacing(0); - - d->actionBar = new QFrame; - d->actionBar->setFixedHeight(40); - d->actionBar->setObjectName("MusicListActionBar"); - d->actionBar->hide(); - - auto actionBarLayout = new QHBoxLayout(d->actionBar); - actionBarLayout->setContentsMargins(10, 0, 8, 0); - actionBarLayout->setSpacing(0); - - d->btPlayAll = new QPushButton; - d->btPlayAll->setObjectName("MusicListPlayAll"); - d->btPlayAll->setText(tr("Play All")); - d->btPlayAll->setFixedHeight(28); - d->btPlayAll->setFocusPolicy(Qt::NoFocus); - - d->dropdown = new DDropdown; - d->dropdown->setFixedHeight(28); - d->dropdown->setMinimumWidth(130); - d->dropdown->setObjectName("MusicListSort"); - d->dropdown->addAction(tr("Time added"), QVariant::fromValue(Playlist::SortByAddTime)); - d->dropdown->addAction(tr("Title"), QVariant::fromValue(Playlist::SortByTitle)); - d->dropdown->addAction(tr("Artist"), QVariant::fromValue(Playlist::SortByArtist)); - d->dropdown->addAction(tr("Album name"), QVariant::fromValue(Playlist::SortByAblum)); -// d->customAction = d->dropdown->addAction(tr("Custom"), QVariant::fromValue(Playlist::SortByCustom)); -// d->customAction->setDisabled(true); - - d->emptyHits = new QLabel(); - d->emptyHits->setObjectName("MusicListEmptyHits"); - d->emptyHits->hide(); - - actionBarLayout->addWidget(d->btPlayAll, 0, Qt::AlignCenter); - actionBarLayout->addStretch(); - actionBarLayout->addWidget(d->dropdown, 0, Qt::AlignCenter); - - d->musiclist = new MusicListView; - d->musiclist->hide(); - - layout->addWidget(d->actionBar, 0, Qt::AlignTop); - layout->addWidget(d->musiclist, 100, Qt::AlignTop); - layout->addStretch(); - layout->addWidget(d->emptyHits, 0, Qt::AlignCenter); - layout->addStretch(); - - d->initConntion(); + m_dataListView->onSearchText(str); } -MusicListWidget::~MusicListWidget() -{ -} -void MusicListWidget::setCustomSortType() +void MusicListWidget::onMusicPlayed(PlaylistPtr playlist, const MetaPtr meta) { - Q_D(MusicListWidget); - d->dropdown->setCurrentAction(nullptr); - d->dropdown->setText(tr("Custom")); + m_dataListView->onMusicPlayed(playlist, meta); + onCurrentChanged(playlist); } -void MusicListWidget::dragEnterEvent(QDragEnterEvent *event) +void MusicListWidget::focusOutEvent(QFocusEvent *event) { - QFrame::dragEnterEvent(event); - if (event->mimeData()->hasFormat("text/uri-list")) { - qDebug() << "acceptProposedAction" << event; - event->setDropAction(Qt::CopyAction); - event->acceptProposedAction(); - return; + // TODO: monitor mouse position + QPoint mousePos = mapToParent(mapFromGlobal(QCursor::pos())); + if (!this->geometry().contains(mousePos)) { + if (event && event->reason() == Qt::MouseFocusReason) { + DUtil::TimerSingleShot(50, [this]() { + qDebug() << "self lost focus hide"; + Q_EMIT this->hidePlaylist(); + }); + } } + DWidget::focusOutEvent(event); } -void MusicListWidget::dropEvent(QDropEvent *event) +void MusicListWidget::keyPressEvent(QKeyEvent *event) { - QFrame::dropEvent(event); - Q_D(MusicListWidget); - - if (!event->mimeData()->hasFormat("text/uri-list")) { - return; - } - - auto urls = event->mimeData()->urls(); - QStringList localpaths; - for (auto &url : urls) { - localpaths << url.toLocalFile(); - } - - if (!localpaths.isEmpty() && !d->musiclist->playlist().isNull()) { - Q_EMIT importSelectFiles(d->musiclist->playlist(), localpaths); + if (event->key() == Qt::Key_Escape) { + m_dataBaseListview->closeAllPersistentEditor(); + m_dataBaseListview->clearSelection(); + m_dataBaseListview->setCurrentItem(nullptr); + m_customizeListview->closeAllPersistentEditor(); + m_customizeListview->clearSelection(); + m_customizeListview->setCurrentItem(nullptr); } + DWidget::keyPressEvent(event); } -void MusicListWidget::resizeEvent(QResizeEvent *event) +void MusicListWidget::onPlaylistAdded(PlaylistPtr playlist, bool newflag) { - Q_D(MusicListWidget); - QFrame::resizeEvent(event); - auto viewrect = QFrame::rect(); - auto viewsize = viewrect.marginsRemoved(contentsMargins()).size(); - d->musiclist->setFixedSize(viewsize.width(), viewsize.height() - 40); - d->emptyHits->setFixedSize(viewsize.width(), viewsize.height()); -} - -void MusicListWidget::onMusicPlayed(PlaylistPtr playlist, const MetaPtr meta) -{ - Q_D(MusicListWidget); - - if (playlist != d->musiclist->playlist() || meta.isNull()) { + if (playlist == nullptr) { return; } - - QModelIndex index = d->musiclist->findIndex(meta); - if (!index.isValid()) { + if (playlist->hide()) { return; } - auto selectedIndexes = d->musiclist->selectionModel()->selectedIndexes(); - if (selectedIndexes.size() > 1) { - d->musiclist->update(); - return; + if (playlist->id() == AlbumMusicListID || playlist->id() == ArtistMusicListID || + playlist->id() == AllMusicListID || playlist->id() == FavMusicListID ) { + m_dataBaseListview->addMusicList(playlist); + } else { + m_customizeListview->closeAllPersistentEditor(); + m_customizeListview->addMusicList(playlist, newflag); + addFlag = false; + } +// auto item = new MusicListViewItem(playlist); +// if (playlist->id() == AlbumMusicListID || playlist->id() == ArtistMusicListID || +// playlist->id() == AllMusicListID || playlist->id() == FavMusicListID ) { +// m_dataBaseListview->addItem(item); +// } else { +// m_customizeListview->addItem(item); +// if (addFlag) { +// m_customizeListview->clearSelection(); +// m_customizeListview->openPersistentEditor(item); +// } +// addFlag = false; +// } + if (playlist->playing()) + m_dataListView->onMusiclistChanged(playlist); +} + +void MusicListWidget::onCurrentChanged(PlaylistPtr playlist) +{ + if (playlist->id() != SearchMusicListID) { + if (playlist) { +// m_dataBaseListview->clearSelection(); +// m_customizeListview->clearSelection(); + } + for (int i = 0; i < m_dataBaseListview->count(); ++i) { + auto *item = m_dataBaseListview->item(i); + auto curPlaylist = m_dataBaseListview->playlistPtr(item); + if (playlist == curPlaylist) { + Q_EMIT selectedPlaylistChange(curPlaylist); + m_dataBaseListview->setCurPlaylist(item); + m_customizeListview->setCurPlaylist(nullptr); + } + } + for (int i = 0; i < m_customizeListview->count(); ++i) { + auto *item = m_customizeListview->item(i); + auto curPlaylist = m_customizeListview->playlistPtr(item); + if (playlist == curPlaylist) { + Q_EMIT selectedPlaylistChange(curPlaylist); + m_customizeListview->setCurPlaylist(item); + m_dataBaseListview->setCurPlaylist(nullptr); + } + } + } else { + onMusiclistUpdate(); } +} - d->musiclist->clearSelection(); - d->musiclist->setCurrentIndex(index); - d->musiclist->scrollTo(index); - d->musiclist->update(); +void MusicListWidget::onMusiclistChanged(PlaylistPtr playlist) +{ + m_dataListView->onMusiclistChanged(playlist); } -void MusicListWidget::onMusicPause(PlaylistPtr playlist, const MetaPtr meta) +void MusicListWidget::onMusicListAdded(PlaylistPtr playlist, const MetaPtrList metalist) { - Q_D(MusicListWidget); - if (playlist != d->musiclist->playlist() || meta.isNull()) { - return; - } - d->musiclist->update(); + Q_UNUSED(playlist) + Q_UNUSED(metalist) + m_dataListView->onMusicListAdded(playlist, metalist); } void MusicListWidget::onMusicListRemoved(PlaylistPtr playlist, const MetaPtrList metalist) { - Q_D(MusicListWidget); + Q_UNUSED(playlist) + Q_UNUSED(metalist) - if (playlist != d->musiclist->playlist()) { - return; + m_dataListView->onMusicListRemoved(playlist, metalist); + if (playlist->id() == PlayMusicListID && playlist->allmusic().isEmpty()) { +// m_dataBaseListview->setCurPlaylist(nullptr); +// m_customizeListview->setCurPlaylist(nullptr); } - d->musiclist->onMusicListRemoved(metalist); - d->showEmptyHits(d->musiclist->model()->rowCount() == 0); -} +// m_dataBaseListview->setCurPlaylist(nullptr); +// m_customizeListview->setCurPlaylist(nullptr); -void MusicListWidget::onMusicError(PlaylistPtr playlist, const MetaPtr meta, int error) -{ - Q_D(MusicListWidget); - Q_UNUSED(playlist); - d->musiclist->onMusicError(meta, error); } -void MusicListWidget::onMusicListAdded(PlaylistPtr playlist, const MetaPtrList metalist) +void MusicListWidget::onMusiclistUpdate() { - Q_D(MusicListWidget); - - if (playlist != d->musiclist->playlist()) { - return; - } - - d->musiclist->onMusicListAdded(metalist); - d->showEmptyHits(metalist.length() == 0); + m_dataListView->onMusiclistUpdate(); } -void MusicListWidget::onLocate(PlaylistPtr playlist, const MetaPtr meta) +void MusicListWidget::slotTheme(int type) { - Q_D(MusicListWidget); - if (d->musiclist->playlist() != playlist) { - d->initData(playlist); + if (type == 0) + type = DGuiApplicationHelper::instance()->themeType(); + if (type == 1) { + auto palette = this->palette(); + palette.setColor(DPalette::Background, QColor("#F8F8F8")); + setPalette(palette); + } else { + auto palette = this->palette(); + palette.setColor(DPalette::Background, QColor("#252525")); + setPalette(palette); } - d->musiclist->onLocate(meta); + + leftFrame->slotTheme(type); + m_dataListView->slotTheme(type); + m_dataBaseListview->slotTheme(type); + m_customizeListview->slotTheme(type); } -void MusicListWidget::onMusiclistChanged(PlaylistPtr playlist) +void MusicListWidget::changePicture(QPixmap pixmap, QPixmap albumPixmap, QPixmap sidebarPixmap) { - if (playlist.isNull()) { - qWarning() << "can not change to emptry playlist"; - return; - } - - Q_D(MusicListWidget); - - d->initData(playlist); + leftFrame->changePicture(pixmap, albumPixmap, sidebarPixmap); + m_dataListView->changePicture(pixmap, sidebarPixmap, albumPixmap); } -void MusicListWidget::onCustomContextMenuRequest(const QPoint &pos, - PlaylistPtr selectedlist, - PlaylistPtr favlist, - QList newlists) +void MusicListWidget::onCustomContextMenuRequest(const QPoint &pos, PlaylistPtr selectedlist, PlaylistPtr favlist, QList newlists, char type) { - Q_D(MusicListWidget); - d->musiclist->showContextMenu(pos, selectedlist, favlist, newlists); + m_dataListView->onCustomContextMenuRequest(pos, selectedlist, favlist, newlists, type); } diff -Nru deepin-music-5.0.1+ds/src/music-player/view/musiclistwidget.h deepin-music-6.0.1.54+ds.1/src/music-player/view/musiclistwidget.h --- deepin-music-5.0.1+ds/src/music-player/view/musiclistwidget.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/musiclistwidget.h 2020-07-14 12:05:00.000000000 +0000 @@ -21,54 +21,81 @@ #pragma once -#include +#include +#include #include "../core/playlist.h" -class MusicListWidgetPrivate; -class MusicListWidget : public QFrame +DWIDGET_USE_NAMESPACE + + +class MusicListView; +class MusicListDataWidget; +class MusicImageButton; +class MusicListScrollArea; + +class MusicListWidget : public DWidget { Q_OBJECT public: explicit MusicListWidget(QWidget *parent = Q_NULLPTR); - ~MusicListWidget(); + //void initData(QList playlists, PlaylistPtr last); - void setCustomSortType(); -public slots: - void onMusiclistChanged(PlaylistPtr playlist); - void onMusicPlayed(PlaylistPtr playlist, const MetaPtr info); - void onMusicPause(PlaylistPtr playlist, const MetaPtr meta); - void onMusicError(PlaylistPtr playlist, const MetaPtr meta, int error); - void onMusicListAdded(PlaylistPtr playlist, const MetaPtrList metalist); - void onMusicListRemoved(PlaylistPtr playlist, const MetaPtrList metalist); - void onLocate(PlaylistPtr playlist, const MetaPtr meta); - void onCustomContextMenuRequest(const QPoint &pos, - PlaylistPtr selectedlist, - PlaylistPtr favlist, - QListnewlists); + PlaylistPtr curPlaylist(); signals: + void addPlaylist(bool editmode); + void selectPlaylist(PlaylistPtr playlist); + void hidePlaylist(); void playall(PlaylistPtr playlist); - void resort(PlaylistPtr playlist, int sortType); + void customResort(const QStringList &uuids); void playMedia(PlaylistPtr playlist, const MetaPtr meta); - void showInfoDialog(const MetaPtr meta); - void updateMetaCodec(const MetaPtr meta); + void resume(PlaylistPtr playlist, const MetaPtr meta); + void pause(PlaylistPtr playlist, const MetaPtr meta); + void resort(PlaylistPtr playlist, int sortType); + void selectedPlaylistChange(PlaylistPtr playlist); + void importSelectFiles(PlaylistPtr playlist, QStringList urllist); - void requestCustomContextMenu(const QPoint &pos); + void requestCustomContextMenu(const QPoint &pos, char type); void addToPlaylist(PlaylistPtr playlist, const MetaPtrList &metalist); void musiclistRemove(PlaylistPtr playlist, const MetaPtrList &metalist); void musiclistDelete(PlaylistPtr playlist, const MetaPtrList &metalist); - void importSelectFiles(PlaylistPtr playlist, QStringList urllist); + void showInfoDialog(const MetaPtr meta); + void updateMetaCodec(const QString &preTitle, const QString &preArtist, const QString &preAlbum, const MetaPtr meta); + void modeChanged(int); + void addMetasFavourite(const MetaPtrList &metalist); + void removeMetasFavourite(const MetaPtrList &metalist); + void seaResult(QString searchText, QList resultlist); + void closeSearch(); + +public slots: + void onSearchText(QString str); + void onMusicPlayed(PlaylistPtr playlist, const MetaPtr); + void onPlaylistAdded(PlaylistPtr, bool newflag = false); + void onCurrentChanged(PlaylistPtr playlist); + void onMusiclistChanged(PlaylistPtr playlist); + void onMusicListAdded(PlaylistPtr playlist, const MetaPtrList metalist); + void onMusicListRemoved(PlaylistPtr playlist, const MetaPtrList metalist); + void onMusiclistUpdate(); + void slotTheme(int type); + void changePicture(QPixmap pixmap, QPixmap albumPixmap, QPixmap sidebarPixmap); + + void onCustomContextMenuRequest(const QPoint &pos, + PlaylistPtr selectedlist, + PlaylistPtr favlist, + QListnewlists, + char type); protected: - virtual void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE; -// virtual void dragMoveEvent(QDragMoveEvent *event) Q_DECL_OVERRIDE; -// virtual void dragLeaveEvent(QDragLeaveEvent *event) Q_DECL_OVERRIDE; - virtual void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE; - virtual void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; + virtual void focusOutEvent(QFocusEvent *event) Q_DECL_OVERRIDE; + virtual void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE; private: - QScopedPointer d_ptr; - Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusicListWidget) + MusicListView *m_dataBaseListview; + MusicListView *m_customizeListview; + MusicListDataWidget *m_dataListView; + MusicImageButton *m_addListBtn; + MusicListScrollArea *leftFrame; + bool addFlag = false; }; diff -Nru deepin-music-5.0.1+ds/src/music-player/view/musiclyricwidget.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/musiclyricwidget.cpp --- deepin-music-5.0.1+ds/src/music-player/view/musiclyricwidget.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/musiclyricwidget.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,443 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "musiclyricwidget.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "../core/util/lyric.h" +#include "../core/musicsettings.h" +#include "../core/metasearchservice.h" + +#include "widget/cover.h" +#include "widget/searchmetalist.h" +#include "widget/searchmetaitem.h" +#include "widget/searchlyricswidget.h" +#include "widget/lyriclabel.h" +#include "widget/musicimagebutton.h" +#include "musicsettings.h" +#include +#include +DGUI_USE_NAMESPACE + +//static const int LyricLineHeight = 40; +static const QString defaultLyric = "No Lyric"; + +class MUsicLyricWidgetPrivate +{ +public: + MUsicLyricWidgetPrivate(MUsicLyricWidget *parent): q_ptr(parent) {} + + MetaPtr activingMeta; + + Cover *m_cover = nullptr; + + SearchLyricsWidget *searchLyricsWidget = nullptr; + LyricLabel *lyricview = nullptr; + DLabel *nolyric = nullptr; + + MusicImageButton *serachbt = nullptr; + + QString defaultCover = ":/common/image/cover_max.svg"; + + bool serachflag = false; + + QImage backgroundimage; + + DBlurEffectWidget *backgroundW; + MUsicLyricWidget *q_ptr; + Q_DECLARE_PUBLIC(MUsicLyricWidget) +}; + +MUsicLyricWidget::MUsicLyricWidget(QWidget *parent) + : DWidget(parent), d_ptr(new MUsicLyricWidgetPrivate(this)) +{ + Q_D(MUsicLyricWidget); + + setAutoFillBackground(true); + auto palette = this->palette(); + palette.setColor(DPalette::Background, QColor("#F8F8F8")); + setPalette(palette); + + d->backgroundW = new DBlurEffectWidget(this); +// d->backgroundW->setBlurEnabled(true); +// d->backgroundW->setMode(DBlurEffectWidget::GaussianBlur); + + auto mainlayout = new QHBoxLayout(this); + mainlayout->setMargin(0); + mainlayout->setSpacing(0); + + auto layout = new QHBoxLayout(); + layout->setContentsMargins(20, 20, 20, 20); + + auto musicDir = QStandardPaths::standardLocations(QStandardPaths::MusicLocation); + d->searchLyricsWidget = new SearchLyricsWidget(musicDir.first()); + d->searchLyricsWidget->hide(); + + d->m_cover = new Cover; + d->m_cover->setFixedSize(200, 200); + d->m_cover->setObjectName("LyricCover"); + + m_leftLayout = new QHBoxLayout(); + m_leftLayout->setContentsMargins(120, 0, 140, 0); + m_leftLayout->addWidget(d->m_cover, Qt::AlignLeft | Qt::AlignVCenter); + m_leftLayout->addWidget(d->searchLyricsWidget); + + d->lyricview = new LyricLabel(false); + d->nolyric = new DLabel(); + d->nolyric->setAlignment(Qt::AlignCenter); + d->nolyric->setText(tr("No lyrics yet")); + QPalette nolyr = d->nolyric->palette(); + nolyr.setColor(QPalette::WindowText, QColor(85, 85, 85, 102)); + d->nolyric->setPalette(nolyr); + + auto searchlayout = new QVBoxLayout(); + d->serachbt = new MusicImageButton(":/mpimage/light/normal/search_normal.svg", + ":/mpimage/light/normal/search_normal.svg", + ":/mpimage/light/normal/search_normal.svg"); + d->serachbt->setProperty("typeName", true); + d->serachbt->setPropertyPic("typeName", false, ":/mpimage/light/normal/back_normal.svg", + ":/mpimage/light/normal/back_normal.svg", + ":/mpimage/light/normal/back_normal.svg"); + d->serachbt->setFixedSize(48, 48); + d->serachbt->hide(); + + searchlayout->addWidget(d->serachbt); + searchlayout->addStretch(); + searchlayout->setContentsMargins(58, 18, 34, 484); + + layout->addLayout(m_leftLayout, 0); + layout->addWidget(d->lyricview, 10); + layout->addWidget(d->nolyric, 10); + d->nolyric->hide(); + layout->addLayout(searchlayout, 0); + + d->backgroundW->setLayout(layout); + mainlayout->addWidget(d->backgroundW); +// bool themeFlag = false; +// int themeType = MusicSettings::value("base.play.theme").toInt(&themeFlag); +// if (!themeFlag) +// themeType = 1; + int themeType = DGuiApplicationHelper::instance()->themeType(); + slotTheme(themeType); + + connect(d->serachbt, &DPushButton::clicked, this, &MUsicLyricWidget::onsearchBt); + connect(d->searchLyricsWidget, &SearchLyricsWidget::lyricPath, this, &MUsicLyricWidget::slotonsearchresult); +} + +MUsicLyricWidget::~MUsicLyricWidget() +{ + +} + +void MUsicLyricWidget::updateUI() +{ + Q_D(MUsicLyricWidget); + d->m_cover->setCoverPixmap(QPixmap(d->defaultCover)); + QImage cover(d->defaultCover); + + //cut image + double windowScale = (width() * 1.0) / height(); + int imageWidth = static_cast(cover.height() * windowScale) ; + QImage coverImage; + if (imageWidth > cover.width()) { + int imageheight = static_cast(cover.width() / windowScale); + coverImage = cover.copy(0, (cover.height() - imageheight) / 2, cover.width(), imageheight); + } else { + int imageheight = cover.height(); + coverImage = cover.copy((cover.width() - imageWidth) / 2, 0, imageWidth, imageheight); + } + d->backgroundW->setSourceImage(coverImage); + d->backgroundimage = cover; +} + +QString MUsicLyricWidget::defaultCover() const +{ + Q_D(const MUsicLyricWidget); + return d->defaultCover; +} + +void MUsicLyricWidget::checkHiddenSearch(QPoint mousePos) +{ + Q_UNUSED(mousePos) + //Q_D(MUsicLyricWidget); + +} + +void MUsicLyricWidget::resizeEvent(QResizeEvent *event) +{ + Q_D(MUsicLyricWidget); + QImage cover(d->backgroundimage); + + //cut image + double windowScale = (width() * 1.0) / height(); + int imageWidth = static_cast(cover.height() * windowScale); + QImage coverImage; + if (imageWidth > cover.width()) { + int imageheight = static_cast(cover.width() / windowScale); + coverImage = cover.copy(0, (cover.height() - imageheight) / 2, cover.width(), imageheight); + } else { + int imageheight = cover.height(); + coverImage = cover.copy((cover.width() - imageWidth) / 2, 0, imageWidth, imageheight); + } + d->backgroundW->setSourceImage(coverImage); + d->backgroundW->update(); + QWidget::resizeEvent(event); +} + +void MUsicLyricWidget::mousePressEvent(QMouseEvent *event) +{ + Q_D(MUsicLyricWidget); + if (d->serachflag && !d->searchLyricsWidget->rect().contains(event->pos())) { + onsearchBt(); + } + QWidget::mousePressEvent(event); +} + +void MUsicLyricWidget::onMusicPlayed(PlaylistPtr playlist, const MetaPtr meta) +{ + Q_D(MUsicLyricWidget); + Q_UNUSED(playlist); + d->activingMeta = meta; + + QFileInfo fileInfo(meta->localPath); + QString lrcPath = fileInfo.dir().path() + QDir::separator() + fileInfo.completeBaseName() + ".lrc"; + QFile file(lrcPath); + if (!file.exists()) { + d->nolyric->show(); + d->lyricview->hide(); + } else { + d->nolyric->hide(); + d->lyricview->show(); + } + d->lyricview->getFromFile(lrcPath); + d->searchLyricsWidget->setSearchDir(fileInfo.dir().path() + QDir::separator()); + + QImage cover(d->defaultCover); + auto coverData = MetaSearchService::coverData(meta); + if (coverData.length() > 0) { + cover = QImage::fromData(coverData); + } + + d->m_cover->setCoverPixmap(QPixmap::fromImage(cover)); + d->m_cover->update(); + d->backgroundimage = cover; + //cut image + double windowScale = (width() * 1.0) / height(); + int imageWidth = static_cast(cover.height() * windowScale); + QImage coverImage; + if (imageWidth > cover.width()) { + int imageheight = static_cast(cover.width() / windowScale); + coverImage = cover.copy(0, (cover.height() - imageheight) / 2, cover.width(), imageheight); + } else { + int imageheight = cover.height(); + coverImage = cover.copy((cover.width() - imageWidth) / 2, 0, imageWidth, imageheight); + } + d->backgroundW->setSourceImage(coverImage); + d->backgroundW->update(); +} + +void MUsicLyricWidget::onMusicStop(PlaylistPtr playlist, const MetaPtr meta) +{ + Q_UNUSED(playlist) + Q_D(MUsicLyricWidget); + + QImage cover(d->defaultCover); + auto coverData = MetaSearchService::coverData(meta); + if (coverData.length() > 0) { + cover = QImage::fromData(coverData); + } + d->m_cover->setCoverPixmap(QPixmap::fromImage(cover)); + d->m_cover->update(); + + d->backgroundimage = cover; + //cut image + double windowScale = (width() * 1.0) / height(); + int imageWidth = static_cast(cover.height() * windowScale); + QImage coverImage; + if (imageWidth > cover.width()) { + int imageheight = static_cast(cover.width() / windowScale); + coverImage = cover.copy(0, (cover.height() - imageheight) / 2, cover.width(), imageheight); + } else { + int imageheight = cover.height(); + coverImage = cover.copy((cover.width() - imageWidth) / 2, 0, imageWidth, imageheight); + } + d->backgroundW->setSourceImage(coverImage); + d->backgroundW->update(); +} + +void MUsicLyricWidget::onProgressChanged(qint64 value, qint64 /*length*/) +{ + Q_D(MUsicLyricWidget); + + d->lyricview->postionChanged(value); +} + +void MUsicLyricWidget::onLyricChanged(const MetaPtr meta, const DMusic::SearchMeta &search, const QByteArray &lyricData) +{ + Q_UNUSED(search) + Q_UNUSED(lyricData) + Q_D(MUsicLyricWidget); + if (d->activingMeta != meta) { + return; + } +} + +void MUsicLyricWidget::onCoverChanged(const MetaPtr meta, const DMusic::SearchMeta &search, const QByteArray &coverData) +{ + Q_UNUSED(search) + Q_D(MUsicLyricWidget); + if (d->activingMeta != meta) { + return; + } + + QImage cover(d->defaultCover); + if (coverData.length() > 0) { + cover = QImage::fromData(coverData); + } + d->backgroundimage = cover; + d->m_cover->setCoverPixmap(QPixmap::fromImage(cover)); + d->m_cover->update(); + + //cut image + double windowScale = (width() * 1.0) / height(); + int imageWidth = static_cast(cover.height() * windowScale); + QImage coverImage; + if (imageWidth > cover.width()) { + int imageheight = static_cast(cover.width() / windowScale); + coverImage = cover.copy(0, (cover.height() - imageheight) / 2, cover.width(), imageheight); + } else { + int imageheight = cover.height(); + coverImage = cover.copy((cover.width() - imageWidth) / 2, 0, imageWidth, imageheight); + } + d->backgroundW->setSourceImage(coverImage); + d->backgroundW->update(); +} + +void MUsicLyricWidget::setDefaultCover(QString defaultCover) +{ + Q_D(MUsicLyricWidget); + d->defaultCover = defaultCover; +} + +void MUsicLyricWidget::onUpdateMetaCodec(const MetaPtr /*meta*/) +{ + //Q_D(MUsicLyricWidget); + +// if (d->m_playingMusic == meta) { +// d->m_playingMusic.title = meta.title; +// d->m_playingMusic.artist = meta.artist; +// d->m_playingMusic.album = meta.album; + // } +} + +void MUsicLyricWidget::onsearchBt() +{ + Q_D(MUsicLyricWidget); + d->serachflag = !d->serachflag; + if (d->serachflag) { + d->serachbt->setProperty("typeName", false); + d->m_cover->hide(); + d->searchLyricsWidget->show(); + if (d->activingMeta != nullptr) { + d->searchLyricsWidget->setDefault(d->activingMeta->title, d->activingMeta->artist); + } else { + d->searchLyricsWidget->setDefault("", ""); + } + + m_leftLayout->setContentsMargins(51, 21, 51, 19); + } else { + d->serachbt->setProperty("typeName", true); + d->m_cover->show(); + d->searchLyricsWidget->hide(); + m_leftLayout->setContentsMargins(120, 190, 140, 160); + } + d->serachbt->update(); +} + +void MUsicLyricWidget::slotonsearchresult(QString path) +{ + Q_D(MUsicLyricWidget); + d->lyricview->getFromFile(path); +} + +void MUsicLyricWidget::slotTheme(int type) +{ + Q_D(MUsicLyricWidget); + + if (type == 0) + type = DGuiApplicationHelper::instance()->themeType(); + QString rStr; + if (type == 1) { + rStr = "light"; + } else { + rStr = "dark"; + } + if (type == 1) { + auto palette = this->palette(); + palette.setColor(DPalette::Background, QColor("#F8F8F8")); + setPalette(palette); + + QColor backMaskColor(255, 255, 255, 140); + d->backgroundW->setMaskColor(backMaskColor); + } else { + auto palette = this->palette(); + palette.setColor(DPalette::Background, QColor("#252525")); + setPalette(palette); + + QColor backMaskColor(37, 37, 37, 140); + d->backgroundW->setMaskColor(backMaskColor); + } + d->serachbt->setPropertyPic(QString(":/mpimage/%1/normal/search_normal.svg").arg(rStr), + QString(":/mpimage/%1/normal/search_normal.svg").arg(rStr), + QString(":/mpimage/%1/normal/search_normal.svg").arg(rStr)); + + d->serachbt->setPropertyPic("typeName", false, QString(":/mpimage/%1/normal/back_normal.svg").arg(rStr), + QString(":/mpimage/%1/normal/back_normal.svg").arg(rStr), + QString(":/mpimage/%1/normal/back_normal.svg").arg(rStr)); + + d->searchLyricsWidget->setThemeType(type); + d->lyricview->slotTheme(type); +} + +void MUsicLyricWidget::onContextSearchFinished(const QString &context, const QList &metalist) +{ + //Q_D(MUsicLyricWidget); + + //TODO: check context + Q_UNUSED(context); + Q_UNUSED(metalist) +} + + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/musiclyricwidget.h deepin-music-6.0.1.54+ds.1/src/music-player/view/musiclyricwidget.h --- deepin-music-5.0.1+ds/src/music-player/view/musiclyricwidget.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/musiclyricwidget.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include + +#include + +#include +#include "core/playlist.h" + +DWIDGET_USE_NAMESPACE + +class MUsicLyricWidgetPrivate; +class MUsicLyricWidget : public DWidget +{ + Q_OBJECT + Q_PROPERTY(QString defaultCover READ defaultCover WRITE setDefaultCover) + +public: + explicit MUsicLyricWidget(QWidget *parent = Q_NULLPTR); + ~MUsicLyricWidget() override; + + void updateUI(); + QString defaultCover() const; + void checkHiddenSearch(QPoint mousePos); + +signals: + void toggleLyricView(); + void requestContextSearch(const QString &context); + void changeMetaCache(const MetaPtr meta, const DMusic::SearchMeta &search); + +public slots: + void onProgressChanged(qint64 value, qint64 length); + void onMusicPlayed(PlaylistPtr playlist, const MetaPtr meta); + void onMusicStop(PlaylistPtr, const MetaPtr); + + void onLyricChanged(const MetaPtr meta, + const DMusic::SearchMeta &search, + const QByteArray &lyricData); + void onCoverChanged(const MetaPtr meta, + const DMusic::SearchMeta &search, + const QByteArray &coverData); + + void onContextSearchFinished(const QString &context, + const QList &metalist); + + void setDefaultCover(QString defaultCover); + void onUpdateMetaCodec(const MetaPtr meta); + + void onsearchBt(); + void slotonsearchresult(QString path); + + void slotTheme(int type); + +protected: + virtual void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; + virtual void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + +private: + QHBoxLayout *m_leftLayout; + QScopedPointer d_ptr; + Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MUsicLyricWidget) +}; diff -Nru deepin-music-5.0.1+ds/src/music-player/view/playlistwidget.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/playlistwidget.cpp --- deepin-music-5.0.1+ds/src/music-player/view/playlistwidget.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/playlistwidget.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -22,207 +22,529 @@ #include "playlistwidget.h" #include +#include #include -#include -#include - -#include -#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include "../core/music.h" #include "../core/playlist.h" +#include "../core/musicsettings.h" +#include "../core/util/inotifyfiles.h" +#include "../core/util/threadpool.h" #include "widget/playlistview.h" -#include "widget/playlistitem.h" +#include "widget/ddropdown.h" DWIDGET_USE_NAMESPACE +DGUI_USE_NAMESPACE -PlaylistWidget::PlaylistWidget(QWidget *parent) : QFrame(parent) +class PlayListWidgetPrivate { - setObjectName("PlaylistWidget"); +public: + PlayListWidgetPrivate(PlayListWidget *parent) : q_ptr(parent) {} - auto layout = new QVBoxLayout(this); - setFocusPolicy(Qt::ClickFocus); - layout->setContentsMargins(0, 0, 0, 15); - layout->setSpacing(15); - - m_listview = new PlayListView; - - auto btAddFrame = new QFrame; - btAddFrame->setObjectName("PlaylistWidgetAddFrame"); - btAddFrame->setFocusPolicy(Qt::NoFocus); - auto btAddFameLayout = new QVBoxLayout(btAddFrame); - btAddFameLayout->setMargin(0); - - auto btAdd = new QPushButton(); - btAdd->setFixedSize(190, 36); - btAdd->setObjectName("PlaylistWidgetAdd"); - btAdd->setText("+ " + tr("New playlist")); - - QSizePolicy sp(QSizePolicy::Preferred, QSizePolicy::Preferred); - sp.setVerticalStretch(100); - m_listview->setSizePolicy(sp); - - layout->addWidget(m_listview, 0, Qt::AlignHCenter); - btAddFameLayout->addWidget(btAdd, 0, Qt::AlignBottom | Qt::AlignHCenter); - layout->addWidget(btAddFrame, 0, Qt::AlignHCenter | Qt::AlignBottom); - layout->addStretch(); - - DThemeManager::instance()->registerWidget(this); - - connect(btAdd, &QPushButton::clicked, this, [ = ](bool /*checked*/) { - qDebug() << "addPlaylist(true);"; - Q_EMIT this->addPlaylist(true); - }); - - connect(m_listview, &PlayListView::itemClicked, - this, [ = ](QListWidgetItem * item) { - this->setEnabled(false); - auto playlistItem = qobject_cast(m_listview->itemWidget(item)); - if (!playlistItem) { - qCritical() << "playlistItem is empty" << item << playlistItem; - return; - } - Q_EMIT this->selectPlaylist(playlistItem->data()); - DUtil::TimerSingleShot(500, [this]() { - this->setEnabled(true); - Q_EMIT this->hidePlaylist(); - }); - }); - connect(m_listview, &PlayListView::currentItemChanged, - this, [ = ](QListWidgetItem * current, QListWidgetItem * previous) { - auto itemWidget = qobject_cast(m_listview->itemWidget(previous)); - if (itemWidget) { - itemWidget->setActive(false); - } - itemWidget = qobject_cast(m_listview->itemWidget(current)); - if (itemWidget) { - itemWidget->setActive(true); + void initData(PlaylistPtr playlist); + void initConntion(); + void showEmptyHits(bool empty); + + DLabel *titleLabel = nullptr; + DLabel *infoLabel = nullptr; + DLabel *emptyHits = nullptr; + DWidget *actionBar = nullptr; + DPushButton *btClearAll = nullptr; + PlayListView *playListView = nullptr; + QAction *customAction = nullptr; + InotifyFiles inotifyFiles; + + PlayListWidget *q_ptr; + Q_DECLARE_PUBLIC(PlayListWidget) +}; + + +void PlayListWidgetPrivate::initData(PlaylistPtr playlist) +{ + Q_Q(PlayListWidget); + + if (playlist->id() != PlayMusicListID) + return; + + q->updateInfo(playlist); + + playListView->onMusiclistChanged(playlist); + + showEmptyHits(playListView->model()->rowCount() == 0); +} + +void PlayListWidgetPrivate::initConntion() +{ + Q_Q(PlayListWidget); + + q->connect(btClearAll, &DPushButton::clicked, + q, [ = ](bool) { + if (playListView->playlist()) { + Q_EMIT q->musiclistRemove(playListView->playlist(), playListView->playlist()->allmusic()); } }); - connect(m_listview, &PlayListView::customResort, - this, [ = ](const QStringList & uuids) { - Q_EMIT this->customResort(uuids); + + q->connect(playListView, &PlayListView::requestCustomContextMenu, + q, [ = ](const QPoint & pos) { + Q_EMIT q->requestCustomContextMenu(pos, 0); + }); + q->connect(playListView, &PlayListView::removeMusicList, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->musiclistRemove(playListView->playlist(), metalist); + q->updateInfo(playListView->playlist()); + }); + q->connect(playListView, &PlayListView::deleteMusicList, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->musiclistDelete(playListView->playlist(), metalist); + q->updateInfo(playListView->playlist()); + }); + q->connect(playListView, &PlayListView::addToPlaylist, + q, [ = ](PlaylistPtr playlist, const MetaPtrList metalist) { + Q_EMIT q->addToPlaylist(playlist, metalist); + q->updateInfo(playListView->playlist()); + }); + q->connect(playListView, &PlayListView::playMedia, + q, [ = ](const MetaPtr meta) { + Q_EMIT q->playMedia(playListView->playlist(), meta); + }); + q->connect(playListView, &PlayListView::resume, + q, [ = ](const MetaPtr meta) { + Q_EMIT q->resume(playListView->playlist(), meta); + }); + q->connect(playListView, &PlayListView::pause, + q, [ = ](const MetaPtr meta) { + Q_EMIT q->pause(playListView->playlist(), meta); + }); + q->connect(playListView, &PlayListView::showInfoDialog, + q, [ = ](const MetaPtr meta) { + Q_EMIT q->showInfoDialog(meta); + }); + q->connect(playListView, &PlayListView::updateMetaCodec, + q, [ = ](const QString & preTitle, const QString & preArtist, const QString & preAlbum, const MetaPtr meta) { + Q_EMIT q->updateMetaCodec(preTitle, preArtist, preAlbum, meta); + }); + q->connect(playListView, &PlayListView::addMetasFavourite, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->addMetasFavourite(metalist); + }); + q->connect(playListView, &PlayListView::removeMetasFavourite, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->removeMetasFavourite(metalist); + }); + + q->connect(&inotifyFiles, &InotifyFiles::fileChanged, + q, [ = ](const QStringList & files) { + auto allMetas = playListView->playlist()->allmusic(); + int allCount = allMetas.size(); + int missCount = 0; + + if (!allMetas.isEmpty()) { + MetaPtrList metalist; + for (auto file : files) { + for (int i = 0; i < allMetas.size(); i++) { + if (file == allMetas[i]->localPath) { + metalist.append(allMetas[i]); + missCount++; + allMetas.removeAt(i); + //break; + } + } + } + + if (allCount == missCount) { + if(allCount == 1) + Q_EMIT q->fileRemoved(playListView->playlist() ,metalist.at(0), 1); + else{ + for(MetaPtr meta : metalist) + { + if(meta == playListView->activingMeta()) + { + Q_EMIT q->fileRemoved(playListView->playlist() ,metalist.at(0), 1); + } + } + } + Q_EMIT q->musiclistRemove(playListView->playlist(), playListView->playlist()->allmusic()); + }else if (missCount > 0){ + /*************************************************************** + * stop current music + * *************************************************************/ + Q_EMIT q->musiclistRemove(playListView->playlist(), metalist); + /**************************************************************** + * emit file not found + * 1 = Player::ResourceError + * ***************************************************************/ + for(MetaPtr meta : metalist) + { + if(meta == playListView->activingMeta()) + { + Q_EMIT q->fileRemoved(playListView->playlist() ,metalist.at(0), 1); + } + } + } + + if (!metalist.isEmpty()) { + playListView->playlist()->removeMusicList(metalist); + } + + } + Q_EMIT q->musicFileMiss(); }); } -void PlaylistWidget::initData(QList playlists, PlaylistPtr last) +void PlayListWidgetPrivate::showEmptyHits(bool empty) { - if (playlists.length() <= 0) { - qCritical() << "playlist is empty"; + auto playlist = playListView->playlist(); + if (playlist.isNull() || playlist->id() != SearchMusicListID) { + emptyHits->setText(PlayListWidget::tr("No songs")); + } else { + emptyHits->setText(PlayListWidget::tr("No search results")); + } + playListView->setVisible(!empty); + emptyHits->setVisible(empty); +} + +PlayListWidget::PlayListWidget(QWidget *parent) : + DWidget(parent), d_ptr(new PlayListWidgetPrivate(this)) +{ + Q_D(PlayListWidget); + +// setFixedHeight(314); + setAcceptDrops(true); + + auto layout = new QHBoxLayout(this); + layout->setContentsMargins(0, 30, 0, 0); + layout->setSpacing(0); + + d->actionBar = new DWidget; + d->actionBar->setFixedWidth(200); + d->actionBar->setObjectName("PlayListActionBar"); + + auto actionBarLayout = new QVBoxLayout(d->actionBar); + actionBarLayout->setContentsMargins(36, 0, 8, 0); + actionBarLayout->setSpacing(0); + + d->titleLabel = new DLabel(); + //d->titleLabel->setFixedHeight(36); + auto titleFont = d->titleLabel->font(); + titleFont.setFamily("SourceHanSansSC"); + titleFont.setWeight(QFont::Medium); + titleFont.setPixelSize(24); + d->titleLabel->setFont(titleFont); + d->titleLabel->setMargin(4); + d->titleLabel->setText(tr("Play Queue")); + d->titleLabel->setForegroundRole(DPalette::BrightText); + + d->infoLabel = new DLabel(); + //d->infoLabel->setFixedHeight(25); + auto infoFont = d->infoLabel->font(); + infoFont.setFamily("SourceHanSansSC"); + infoFont.setWeight(QFont::Medium); + infoFont.setPixelSize(14); + d->infoLabel->setFont(infoFont); + d->infoLabel->setMargin(4); + auto infoLabelPalette = d->infoLabel->palette(); + QColor infoLabelColor = infoLabelPalette.color(DPalette::BrightText); + infoLabelColor.setAlphaF(0.5); + infoLabelPalette.setColor(DPalette::ButtonText, infoLabelColor); + d->infoLabel->setPalette(infoLabelPalette); + d->infoLabel->setForegroundRole(DPalette::ButtonText); + + d->btClearAll = new DPushButton; + d->btClearAll->setIcon(QIcon(":/mpimage/light/normal/clear_list_normal.svg")); + d->btClearAll->setFont(infoFont); + auto playAllPalette = d->btClearAll->palette(); + playAllPalette.setColor(DPalette::ButtonText, Qt::white); + playAllPalette.setColor(DPalette::Dark, QColor(Qt::darkGray)); + playAllPalette.setColor(DPalette::Light, QColor(Qt::darkGray)); + d->btClearAll->setPalette(playAllPalette); + d->btClearAll->setObjectName("PlayListPlayAll"); + d->btClearAll->setText(tr("Empty")); + d->btClearAll->setFocusPolicy(Qt::NoFocus); + d->btClearAll->setFixedHeight(30); + + d->emptyHits = new DLabel(this); + d->emptyHits->setObjectName("PlayListEmptyHits"); + d->emptyHits->hide(); + + actionBarLayout->addWidget(d->titleLabel); + actionBarLayout->addWidget(d->infoLabel); + actionBarLayout->addWidget(d->btClearAll, 0, Qt::AlignLeft); + actionBarLayout->addStretch(); + + d->playListView = new PlayListView(false); + d->playListView->hide(); + + layout->addWidget(d->actionBar); + layout->addWidget(d->playListView); + layout->addWidget(d->emptyHits, 0, Qt::AlignCenter); + + d->initConntion(); + + int themeType = DGuiApplicationHelper::instance()->themeType(); + slotTheme(themeType); + + d->inotifyFiles.start(); + ThreadPool::instance()->moveToNewThread(&d->inotifyFiles); +} + +PlayListWidget::~PlayListWidget() +{ +} + +void PlayListWidget::updateInfo(PlaylistPtr playlist) +{ + Q_D(PlayListWidget); + + QString infoStr; + int sortMetasSize = playlist->allmusic().size(); + //int sortMetasSize = d->playListView->rowCount(); + if (sortMetasSize == 0) { + infoStr = tr("No songs"); + } else if (sortMetasSize == 1) { + infoStr = tr("1 song"); + } else { + infoStr = tr("%1 songs").arg(sortMetasSize); + } + d->infoLabel->setText(infoStr); + + if (playlist.isNull() || playlist->id() != PlayMusicListID || playlist->allmusic().isEmpty()) return; + + d->inotifyFiles.clear(); + for (auto curMeta : playlist->allmusic()) { + d->inotifyFiles.addPath(curMeta->localPath); } - QListWidgetItem *current = nullptr; - for (auto &playlist : playlists) { - if (playlist->hide()) { - continue; - } +} - qDebug() << "init with" << playlist->id() << playlist->displayName(); +void PlayListWidget::setCurPlaylist(PlaylistPtr playlist) +{ + Q_D(PlayListWidget); + d->initData(playlist); +} - auto item = new QListWidgetItem; - m_listview->addItem(item); - m_listview->setItemWidget(item, new PlayListItem(playlist)); - - auto playlistItem = qobject_cast(m_listview->itemWidget(item)); - connect(playlistItem, &PlayListItem::remove, this, [ = ]() { - m_listview->removeItemWidget(item); - delete m_listview->takeItem(m_listview->row(item)); - // remote to firest - Q_ASSERT(m_listview->count() > 0); - m_listview->updateScrollbar(); - m_listview->setCurrentItem(m_listview->item(0)); - }); +PlaylistPtr PlayListWidget::curPlaylist() +{ + Q_D(PlayListWidget); + return d->playListView->playlist(); +} - connect(playlistItem, &PlayListItem::playall, - this, &PlaylistWidget::playall); +void PlayListWidget::dragEnterEvent(QDragEnterEvent *event) +{ + DWidget::dragEnterEvent(event); + if (event->mimeData()->hasFormat("text/uri-list")) { + qDebug() << "acceptProposedAction" << event; + event->setDropAction(Qt::CopyAction); + event->acceptProposedAction(); + return; + } +} - if (last->id() == playlist->id()) { - current = item; - } +void PlayListWidget::dropEvent(QDropEvent *event) +{ + DWidget::dropEvent(event); + Q_D(PlayListWidget); + if (!event->mimeData()->hasFormat("text/uri-list")) { + return; } - if (current) { - m_listview->setCurrentItem(current); - } else { - m_listview->setCurrentItem(m_listview->item(0)); + auto urls = event->mimeData()->urls(); + QStringList localpaths; + for (auto &url : urls) { + localpaths << url.toLocalFile(); + } + + if (!localpaths.isEmpty() && !d->playListView->playlist().isNull()) { + Q_EMIT importSelectFiles(d->playListView->playlist(), localpaths); } - m_listview->updateScrollbar(); } -void PlaylistWidget::onMusicPlayed(PlaylistPtr playlist, const MetaPtr) +void PlayListWidget::resizeEvent(QResizeEvent *event) { - for (int i = 0; i < m_listview->count(); ++i) { - QListWidgetItem *item = m_listview->item(i); - auto playlistItem = qobject_cast(m_listview->itemWidget(item)); - if (playlistItem->data()->id() == playlist->id()) { - playlistItem->setPlay(true); - } else { - playlistItem->setPlay(false); - } + //Q_D(PlayListWidget); + DWidget::resizeEvent(event); +} + +void PlayListWidget::onMusicPlayed(PlaylistPtr playlist, const MetaPtr meta) +{ + Q_D(PlayListWidget); + + if (d->playListView->rowCount() == 0 || playlist != d->playListView->playlist() || + playlist->allmusic().size() != d->playListView->rowCount() || + playlist->first()->hash != d->playListView->firstHash()) + d->initData(playlist); + + if (playlist != d->playListView->playlist() || meta.isNull()) { + return; } + + QModelIndex index = d->playListView->findIndex(meta); + if (!index.isValid()) { + return; + } + + auto selectedIndexes = d->playListView->selectionModel()->selectedIndexes(); + if (selectedIndexes.size() > 1) { + d->playListView->update(); + return; + } + + d->playListView->clearSelection(); + d->playListView->setCurrentIndex(index); + d->playListView->scrollTo(index); + d->playListView->update(); } -void PlaylistWidget::focusOutEvent(QFocusEvent *event) +void PlayListWidget::onMusicPause(PlaylistPtr playlist, const MetaPtr meta) { - // TODO: monitor mouse position - QPoint mousePos = mapToParent(mapFromGlobal(QCursor::pos())); -// qDebug() << mapFromGlobal(QCursor::pos()) << mousePos; -// qDebug() << event->reason(); - if (!this->geometry().contains(mousePos)) { - if (event && event->reason() == Qt::MouseFocusReason) { - DUtil::TimerSingleShot(50, [this]() { - qDebug() << "self lost focus hide"; - Q_EMIT this->hidePlaylist(); - }); - } + Q_D(PlayListWidget); + if (playlist != d->playListView->playlist() || meta.isNull()) { + return; } - QFrame::focusOutEvent(event); + d->playListView->update(); } -void PlaylistWidget::onPlaylistAdded(PlaylistPtr playlist) +void PlayListWidget::onMusicListRemoved(PlaylistPtr playlist, const MetaPtrList metalist) { - if (playlist->hide()) { + Q_D(PlayListWidget); + + if (playlist.isNull()) + return; + + if (playlist != d->playListView->playlist() && d->playListView->rowCount() != playlist->allmusic().size()) { return; } - auto item = new QListWidgetItem; - m_listview->addItem(item); - m_listview->setItemWidget(item, new PlayListItem(playlist)); + d->playListView->onMusicListRemoved(metalist); + d->showEmptyHits(d->playListView->model()->rowCount() == 0); + updateInfo(playlist); -// disable drag -// if (playlist->id() == AllMusicListID || playlist->id() == FavMusicListID) { -// item->setFlags(item->flags() & ~Qt::ItemIsDragEnabled); -// } -// qDebug() << "pppppppp" << item->flags(); +} - auto playlistItem = qobject_cast(m_listview->itemWidget(item)); - connect(playlistItem, &PlayListItem::remove, this, [ = ]() { - m_listview->removeItemWidget(item); - delete m_listview->takeItem(m_listview->row(item)); - }); +void PlayListWidget::onMusicError(PlaylistPtr playlist, const MetaPtr meta, int error) +{ + Q_D(PlayListWidget); + Q_UNUSED(playlist); + d->playListView->onMusicError(meta, error); +} + +void PlayListWidget::onMusicListAdded(PlaylistPtr playlist, const MetaPtrList metalist) +{ + Q_D(PlayListWidget); - connect(playlistItem, &PlayListItem::playall, - this, &PlaylistWidget::playall); + if (playlist->id() != PlayMusicListID) { + return; + } - m_listview->setCurrentItem(item); - m_listview->updateScrollbar(); + if (playlist != d->playListView->playlist() && d->playListView->rowCount() != playlist->allmusic().size()) { + return; + } +// MetaPtrList curMetalist; +// for (auto curMeta : metalist) { +// if (!playlist->contains(curMeta)) +// curMetalist.append(curMeta); +// } +// if (curMetalist.isEmpty()) +// return; + + d->playListView->onMusicListAdded(metalist); + d->showEmptyHits(metalist.length() == 0); + updateInfo(playlist); } -void PlaylistWidget::onCurrentChanged(PlaylistPtr playlist) +void PlayListWidget::onLocate(PlaylistPtr playlist, const MetaPtr meta) { - if (playlist) { - m_listview->setCurrentItem(nullptr); + Q_D(PlayListWidget); + if (d->playListView->playlist() != playlist) { + d->initData(playlist); } - for (int i = 0; i < m_listview->count(); ++i) { - QListWidgetItem *item = m_listview->item(i); - auto playlistItem = qobject_cast(m_listview->itemWidget(item)); - if (playlistItem->data()->id() == playlist->id()) { - m_listview->setCurrentItem(item); - playlistItem->setActive(true); - } else { - playlistItem->setActive(false); - } + d->playListView->onLocate(meta); +} + +void PlayListWidget::onMusiclistChanged(PlaylistPtr playlist) +{ + if (playlist.isNull()) { + qWarning() << "can not change to emptry playlist"; + return; + } + + Q_D(PlayListWidget); + + d->initData(playlist); +} + +void PlayListWidget::onCustomContextMenuRequest(const QPoint &pos, + PlaylistPtr selectedlist, + PlaylistPtr favlist, + QList newlists) +{ + Q_D(PlayListWidget); + d->playListView->showContextMenu(pos, selectedlist, favlist, newlists); +} + +void PlayListWidget::slotTheme(int type) +{ + Q_D(PlayListWidget); + if (type == 0) + type = DGuiApplicationHelper::instance()->themeType(); + if (type == 1) { +// auto titleLabelPalette = d->infoLabel->palette(); +// titleLabelPalette.setColor(DPalette::ButtonText, ("#000000")); +// d->titleLabel->setPalette(titleLabelPalette); +// d->titleLabel->setForegroundRole(DPalette::ButtonText); + + auto infoLabelPalette = d->infoLabel->palette(); + QColor infoLabelColor = infoLabelPalette.color(DPalette::BrightText); + infoLabelColor.setAlphaF(0.5); + infoLabelPalette.setColor(DPalette::ButtonText, infoLabelColor); + d->infoLabel->setPalette(infoLabelPalette); + + DPalette pl = d->btClearAll ->palette(); + pl.setColor(DPalette::ButtonText, QColor("#FFFFFF")); + pl.setColor(DPalette::Light, QColor("#646464")); + pl.setColor(DPalette::Dark, QColor("#5C5C5C")); + QColor sbcolor("#000000"); + sbcolor.setAlphaF(0.08); + pl.setColor(DPalette::Shadow, sbcolor); + d->btClearAll->setPalette(pl); + } else { +// auto titleLabelPalette = d->infoLabel->palette(); +// titleLabelPalette.setColor(DPalette::ButtonText, ("#FFFFFF")); +// d->titleLabel->setPalette(titleLabelPalette); +// d->titleLabel->setForegroundRole(DPalette::ButtonText); + + auto infoLabelPalette = d->infoLabel->palette(); + QColor infoLabelColor = infoLabelPalette.color(DPalette::BrightText); + infoLabelColor.setAlphaF(0.5); + infoLabelPalette.setColor(DPalette::ButtonText, infoLabelColor); + d->infoLabel->setPalette(infoLabelPalette); + + DPalette pl = d->btClearAll->palette(); + pl.setColor(DPalette::ButtonText, QColor("#FFFFFF")); + pl.setColor(DPalette::Light, QColor("#555454")); + pl.setColor(DPalette::Dark, QColor("#414141")); + QColor sbcolor("#000000"); + sbcolor.setAlphaF(0.08); + pl.setColor(DPalette::Shadow, sbcolor); + d->btClearAll->setPalette(pl); } + d->playListView->setThemeType(type); +} + +void PlayListWidget::changePicture(QPixmap pixmap, QPixmap sidebarPixmap, QPixmap albumPixmap) +{ + Q_D(PlayListWidget); + d->playListView->setPlayPixmap(pixmap, sidebarPixmap, albumPixmap); } diff -Nru deepin-music-5.0.1+ds/src/music-player/view/playlistwidget.h deepin-music-6.0.1.54+ds.1/src/music-player/view/playlistwidget.h --- deepin-music-5.0.1+ds/src/music-player/view/playlistwidget.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/playlistwidget.h 2020-07-14 12:05:00.000000000 +0000 @@ -21,34 +21,78 @@ #pragma once -#include +#include #include "../core/playlist.h" -class PlayListView; -class PlaylistWidget : public QFrame +DWIDGET_USE_NAMESPACE + +class PlayListWidgetPrivate; +class PlayListWidget : public DWidget { Q_OBJECT public: - explicit PlaylistWidget(QWidget *parent = Q_NULLPTR); - void initData(QList playlists, PlaylistPtr last); + explicit PlayListWidget(QWidget *parent = Q_NULLPTR); + ~PlayListWidget() override; -signals: - void addPlaylist(bool editmode); - void selectPlaylist(PlaylistPtr playlist); - void hidePlaylist(); - void playall(PlaylistPtr playlist); - void customResort(const QStringList &uuids); + void updateInfo(PlaylistPtr playlist); + void setCurPlaylist(PlaylistPtr playlist); + PlaylistPtr curPlaylist(); public slots: - void onMusicPlayed(PlaylistPtr playlist, const MetaPtr); - void onPlaylistAdded(PlaylistPtr); - void onCurrentChanged(PlaylistPtr playlist); + void onMusiclistChanged(PlaylistPtr playlist); + void onMusicPlayed(PlaylistPtr playlist, const MetaPtr info); + void onMusicPause(PlaylistPtr playlist, const MetaPtr meta); + void onMusicError(PlaylistPtr playlist, const MetaPtr meta, int error); + void onMusicListAdded(PlaylistPtr playlist, const MetaPtrList metalist); + void onMusicListRemoved(PlaylistPtr playlist, const MetaPtrList metalist); + void onLocate(PlaylistPtr playlist, const MetaPtr meta); + void onCustomContextMenuRequest(const QPoint &pos, + PlaylistPtr selectedlist, + PlaylistPtr favlist, + QListnewlists); + + void slotTheme(int type); + void changePicture(QPixmap pixmap, QPixmap sidebarPixmap, QPixmap albumPixmap); + +signals: + void playall(PlaylistPtr playlist); + void resort(PlaylistPtr playlist, int sortType); + void playMedia(PlaylistPtr playlist, const MetaPtr meta); + void resume(PlaylistPtr playlist, const MetaPtr meta); + void pause(PlaylistPtr playlist, const MetaPtr meta); + void showInfoDialog(const MetaPtr meta); + void updateMetaCodec(const QString &preTitle, const QString &preArtist, const QString &preAlbum, const MetaPtr meta); + + void requestCustomContextMenu(const QPoint &pos, char type); + void addToPlaylist(PlaylistPtr playlist, const MetaPtrList &metalist); + void musiclistRemove(PlaylistPtr playlist, const MetaPtrList &metalist); + void musiclistDelete(PlaylistPtr playlist, const MetaPtrList &metalist); + void importSelectFiles(PlaylistPtr playlist, QStringList urllist); + + void addMetasFavourite(const MetaPtrList &metalist); + void removeMetasFavourite(const MetaPtrList &metalist); + void musicFileMiss(); + void fileRemoved(PlaylistPtr playlist ,const MetaPtr meta ,int ); protected: - virtual void focusOutEvent(QFocusEvent *event) Q_DECL_OVERRIDE; + virtual void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE; +// virtual void dragMoveEvent(QDragMoveEvent *event) Q_DECL_OVERRIDE; +// virtual void dragLeaveEvent(QDragLeaveEvent *event) Q_DECL_OVERRIDE; + virtual void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE; + virtual void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; private: - PlayListView *m_listview; + QScopedPointer d_ptr; + Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), PlayListWidget) }; +extern const QString AlbumMusicListID; +extern const QString ArtistMusicListID; +extern const QString AllMusicListID; +extern const QString FavMusicListID; +extern const QString SearchMusicListID; +extern const QString PlayMusicListID; +extern const QString AlbumCandListID; +extern const QString MusicCandListID; +extern const QString ArtistCandListID; diff -Nru deepin-music-5.0.1+ds/src/music-player/view/shortcut.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/shortcut.cpp --- deepin-music-5.0.1+ds/src/music-player/view/shortcut.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/shortcut.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. + * + * Maintainer: Peng Hui + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "shortcut.h" +#include "./core/musicsettings.h" +#include +Shortcut::Shortcut(QObject *parent) : QObject(parent) +{ + ShortcutGroup group1; + ShortcutGroup group2; + ShortcutGroup group3; + ShortcutGroup group4; + + group1.groupName = tr("Play"); + group2.groupName = tr("Songs"); + group3.groupName = tr("Playlists"); + group4.groupName = tr("Settings"); + auto strPlayPause = MusicSettings::value("shortcuts.all.play_pause").toString(); + auto strPrevious = MusicSettings::value("shortcuts.all.previous").toString(); + auto strNext = MusicSettings::value("shortcuts.all.next").toString(); + auto strVolUP = MusicSettings::value("shortcuts.all.volume_up").toString(); + auto strVolDown = MusicSettings::value("shortcuts.all.volume_down").toString(); + group1.groupItems << + ShortcutItem(tr("Play/Pause"), strPlayPause.toUpper().compare("RETURN")==0?"Enter":strPlayPause) << + ShortcutItem(tr("Previous"), strPrevious.toUpper().compare("RETURN")==0?"Enter":strPrevious) << + ShortcutItem(tr("Next"), strNext.toUpper().compare("RETURN")==0?"Enter":strNext) << + ShortcutItem(tr("Volume Up"), strVolUP.toUpper().compare("RETURN")==0?"Enter":strVolUP) << + ShortcutItem(tr("Volume Down"), strVolDown.toUpper().compare("RETURN")==0?"Enter":strVolDown) << + ShortcutItem(tr("Mute"), "M"); + + group2.groupItems << + ShortcutItem(tr("Favorite"), "Ctrl+K") << + ShortcutItem(tr("Unfavorite"), "Ctrl+Shift+K") << + ShortcutItem(tr("Song info"), "Alt+Enter"); + + group3.groupItems << + ShortcutItem(tr("New playlist"), "Ctrl+Shift+N") << + ShortcutItem(tr("Add music"), "Ctrl+I") << + ShortcutItem(tr("Rename playlist"), "F2") << + ShortcutItem(tr("Remove from playlist"), "Delete"); + + group4.groupItems << + ShortcutItem(tr("Help"), "F1") << + ShortcutItem(tr("Display shortcuts"), "Ctrl+Shift+?"); + + m_shortcutGroups << group1 << group2 << group3 << group4; + + //convert to json object + QJsonArray jsonGroups; + for (auto scg : m_shortcutGroups) { + QJsonObject jsonGroup; + jsonGroup.insert("groupName", scg.groupName); + QJsonArray jsonGroupItems; + for (auto sci : scg.groupItems) { + QJsonObject jsonItem; + jsonItem.insert("name", sci.name); + jsonItem.insert("value", sci.value); + jsonGroupItems.append(jsonItem); + } + jsonGroup.insert("groupItems", jsonGroupItems); + jsonGroups.append(jsonGroup); + } + m_shortcutObj.insert("shortcut", jsonGroups); +} +QString Shortcut::toStr() +{ + QJsonDocument doc(m_shortcutObj); + return doc.toJson().data(); +} diff -Nru deepin-music-5.0.1+ds/src/music-player/view/shortcut.h deepin-music-6.0.1.54+ds.1/src/music-player/view/shortcut.h --- deepin-music-5.0.1+ds/src/music-player/view/shortcut.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/shortcut.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. + * + * Maintainer: Peng Hui + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef SHORTCUT_H +#define SHORTCUT_H + +#include +#include +#include +#include + +struct ShortcutItem { + QString name; + QString value; + ShortcutItem(QString n, QString v): name(n), value(v) {} +}; + +struct ShortcutGroup { + QString groupName; + QList groupItems; +}; + +class Shortcut : public QObject +{ + Q_OBJECT +public: + explicit Shortcut(QObject *parent = nullptr); + QString toStr(); + +private: + QJsonObject m_shortcutObj; + QList m_shortcutGroups; +}; + +#endif // SHORTCUT_H diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/closeconfirmdialog.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/closeconfirmdialog.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/closeconfirmdialog.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/closeconfirmdialog.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -22,13 +22,13 @@ #include "closeconfirmdialog.h" #include -#include -#include #include -#include #include -#include +#include +#include +#include +#include #include "core/musicsettings.h" @@ -39,8 +39,8 @@ public: CloseConfirmDialogPrivate(CloseConfirmDialog *parent) : q_ptr(parent) {} - QRadioButton *exitBt = Q_NULLPTR; - QCheckBox *remember = Q_NULLPTR; + DRadioButton *exitBt = Q_NULLPTR; + DCheckBox *remember = Q_NULLPTR; CloseConfirmDialog *q_ptr; Q_DECLARE_PUBLIC(CloseConfirmDialog) @@ -51,44 +51,64 @@ { Q_D(CloseConfirmDialog); - DThemeManager::instance()->registerWidget(this); - - auto contentFrame = new QFrame; + auto contentFrame = new DWidget; auto contentLayout = new QVBoxLayout(contentFrame); contentLayout->setSpacing(0); - contentLayout->setContentsMargins(4, 4, 4, 0); + contentLayout->setContentsMargins(0, 0, 0, 0); + +// auto groupLabel = new DLabel(tr("Please select your operation")); +// groupLabel->setObjectName("CloseConfirmDialogLabel"); - auto groupLabel = new QLabel(tr("Please select your operation")); - groupLabel->setObjectName("CloseConfirmDialogLabel"); +// auto groupLabelFont = groupLabel->font(); +// groupLabelFont.setFamily("SourceHanSansSC"); +// groupLabelFont.setWeight(QFont::Medium); +// groupLabelFont.setPixelSize(14); +// groupLabel->setFont(groupLabelFont); auto actionSelectionGroup = new QGroupBox(); - actionSelectionGroup->setContentsMargins(0, 0, 0, 0); + actionSelectionGroup->setContentsMargins(0, 0, 4, 0); actionSelectionGroup->setObjectName("CloseConfirmDialogSelectionGroup"); - d->exitBt = new QRadioButton(tr("Exit")); + d->exitBt = new DRadioButton(tr("Exit")); d->exitBt->setObjectName("CloseConfirmDialogExit"); - auto miniBt = new QRadioButton(tr("Minimize to system tray")); + auto miniBt = new DRadioButton(tr("Minimize to system tray")); miniBt->setObjectName("CloseConfirmDialogMini"); auto vbox = new QHBoxLayout; vbox->setContentsMargins(0, 0, 0, 0); vbox->addWidget(d->exitBt); vbox->addWidget(miniBt); - vbox->addStretch(1); actionSelectionGroup->setLayout(vbox); - d->remember = new QCheckBox(tr("Do not ask again")); + d->remember = new DCheckBox(tr("Do not ask again")); + + auto font = d->exitBt->font(); + font.setFamily("SourceHanSansSC"); + font.setWeight(QFont::Medium); + font.setPixelSize(14); + + d->exitBt->setFont(font); + miniBt->setFont(font); + d->remember->setFont(font); + +// contentLayout->addWidget(groupLabel, 0, Qt::AlignLeft); +// contentLayout->addSpacing(4); +// contentLayout->addWidget(actionSelectionGroup, 0, Qt::AlignLeft); +// contentLayout->addSpacing(6); +// contentLayout->addWidget(d->remember, 0, Qt::AlignLeft); + +// this->addContent(groupLabel, Qt::AlignLeft); + - contentLayout->addWidget(groupLabel, 0, Qt::AlignLeft); - contentLayout->addSpacing(4); - contentLayout->addWidget(actionSelectionGroup, 0, Qt::AlignLeft); - contentLayout->addSpacing(6); - contentLayout->addWidget(d->remember, 0, Qt::AlignLeft); + this->setTitle(tr("Please select your operation")); + this->addContent(d->exitBt, Qt::AlignLeft); + this->addContent(miniBt, Qt::AlignLeft); + this->addContent(d->remember, Qt::AlignLeft); - setIcon(QIcon(":/common/image/deepin-music.svg")); + setIcon(QIcon::fromTheme("deepin-music")); addContent(contentFrame); addButton(tr("Cancel"), false, ButtonNormal); - addButton(tr("OK"), true, ButtonRecommend); + addButton(tr("Confirm"), true, ButtonRecommend); d->remember->setChecked(!MusicSettings::value("base.close.ask_close_action").toBool()); if (QuitOnClose == MusicSettings::value("base.close.close_action").toInt()) { diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/closeconfirmdialog.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/closeconfirmdialog.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/closeconfirmdialog.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/closeconfirmdialog.h 2020-07-14 12:05:00.000000000 +0000 @@ -23,7 +23,8 @@ #include #include -#include + +#include class CloseConfirmDialogPrivate; class CloseConfirmDialog : public Dtk::Widget::DDialog diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/cover.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/cover.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/cover.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/cover.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -32,7 +32,7 @@ public: CoverPrivate(Cover *parent): q_ptr(parent) {} - int m_radius = 4; + int m_radius = 8; QColor m_borderColor; QColor m_shadowColor; QPixmap m_Background; @@ -49,8 +49,8 @@ Q_D(Cover); QWidget::setAttribute(Qt::WA_TranslucentBackground, true); - d->m_radius = 4; - d->m_borderColor = QColor(255, 0, 0, 152); + d->m_borderColor = QColor(0, 0, 0); + d->m_borderColor.setAlphaF(0.08); d->m_shadowColor = QColor(0, 255, 0, 126); // QGraphicsDropShadowEffect *bodyShadow = new QGraphicsDropShadowEffect; @@ -92,45 +92,56 @@ Q_D(const Cover); QPainter painter(this); - painter.setRenderHints(QPainter::Antialiasing | QPainter::HighQualityAntialiasing); + painter.setRenderHints(QPainter::Antialiasing | QPainter::HighQualityAntialiasing | QPainter::SmoothPixmapTransform); auto radius = d->m_radius; auto innerBorderColor = d->m_borderColor; - auto outerBorderColor = d->m_shadowColor; + //auto outerBorderColor = d->m_shadowColor; auto backgroundColor = QColor(255, 255, 255, 255); - auto penWidthf = borderPenWidth; + //auto penWidthf = borderPenWidth; // draw background - auto backgroundRect = QRectF(rect()).marginsRemoved(d->outterMargins); + //auto backgroundRect = QRectF(rect()).marginsRemoved(d->outterMargins); + auto backgroundRect = rect(); + QPainterPath backgroundPath; + backgroundPath.addRoundedRect(backgroundRect, radius, radius); + painter.setClipPath(backgroundPath); + painter.setPen(Qt::NoPen); if (d->m_Background.isNull()) { - QPainterPath backgroundPath; - backgroundPath.addRoundedRect(backgroundRect, radius, radius); painter.fillPath(backgroundPath, backgroundColor); } else { - painter.drawPixmap(backgroundRect.toRect(), d->m_Background); + painter.drawPixmap(backgroundRect, d->m_Background); } + painter.setBrush(Qt::NoBrush); + QPen BorderPen(innerBorderColor); + BorderPen.setWidthF(2); + painter.setPen(BorderPen); + painter.drawRoundedRect(backgroundRect, radius, radius); //画矩形 + + + return; // draw border - QPainterPath innerBorderPath; - QRectF borderRect = QRectF(rect()).marginsRemoved(d->outterMargins); - auto borderRadius = radius; - QMarginsF borderMargin(penWidthf / 2, penWidthf / 2, penWidthf / 2, penWidthf / 2); - borderRadius -= penWidthf / 2; - borderRect = borderRect.marginsRemoved(borderMargin); - innerBorderPath.addRoundedRect(borderRect, borderRadius, borderRadius); - QPen innerBorderPen(innerBorderColor); - innerBorderPen.setWidthF(penWidthf); - painter.strokePath(innerBorderPath, innerBorderPen); - - QPainterPath outerBorderPath; - borderRect = QRectF(rect()).marginsRemoved(d->outterMargins); - borderRadius = radius; - borderRadius += penWidthf / 2; - borderRect = borderRect.marginsAdded(borderMargin); - - outerBorderPath.addRoundedRect(borderRect, borderRadius, borderRadius); - QPen outerBorderPen(outerBorderColor); - outerBorderPen.setWidthF(penWidthf); - painter.strokePath(outerBorderPath, outerBorderPen); +// QPainterPath innerBorderPath; +// QRectF borderRect = QRectF(rect()).marginsRemoved(d->outterMargins); +// auto borderRadius = radius; +// QMarginsF borderMargin(penWidthf / 2, penWidthf / 2, penWidthf / 2, penWidthf / 2); +// borderRadius -= penWidthf / 2; +// borderRect = borderRect.marginsRemoved(borderMargin); +// innerBorderPath.addRoundedRect(borderRect, borderRadius, borderRadius); +// QPen innerBorderPen(innerBorderColor); +// innerBorderPen.setWidthF(penWidthf / 2); +// painter.strokePath(innerBorderPath, innerBorderPen); + +// QPainterPath outerBorderPath; +// borderRect = QRectF(rect()).marginsRemoved(d->outterMargins); +// borderRadius = radius; +// borderRadius += penWidthf / 2; +// borderRect = borderRect.marginsAdded(borderMargin); + +// outerBorderPath.addRoundedRect(borderRect, borderRadius, borderRadius); +// QPen outerBorderPen(outerBorderColor); +// outerBorderPen.setWidthF(penWidthf / 2); +// painter.strokePath(outerBorderPath, outerBorderPen); } void Cover::setCoverPixmap(const QPixmap &pixmap) diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/cover.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/cover.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/cover.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/cover.h 2020-07-14 12:05:00.000000000 +0000 @@ -33,7 +33,7 @@ public: explicit Cover(QWidget *parent = Q_NULLPTR); - ~Cover(); + ~Cover() override; int radius() const; QColor borderColor() const; diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/ddropdown.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/ddropdown.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/ddropdown.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/ddropdown.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -22,31 +22,28 @@ #include "ddropdown.h" #include -#include #include -#include #include -#include -#include - -DWIDGET_USE_NAMESPACE +#include +#include +#include class DDropdownPrivate { public: DDropdownPrivate(DDropdown *parent) : q_ptr(parent) {} - QMenu *menu = nullptr; - QLabel *text = nullptr; - QLabel *dropdown = nullptr; - QString status; + DMenu *menu = nullptr; + DLabel *text = nullptr; + DIconButton *dropdown = nullptr; + QString status; DDropdown *q_ptr; Q_DECLARE_PUBLIC(DDropdown) }; -DDropdown::DDropdown(QWidget *parent) : QFrame(parent), d_ptr(new DDropdownPrivate(this)) +DDropdown::DDropdown(QWidget *parent) : DWidget(parent), d_ptr(new DDropdownPrivate(this)) { Q_D(DDropdown); @@ -54,19 +51,34 @@ auto layout = new QHBoxLayout(this); layout->setContentsMargins(15, 0, 15, 0); - d->menu = new QMenu; - d->text = new QLabel("undefined"); + d->menu = new DMenu; + d->text = new DLabel("undefined"); + auto font = d->text->font(); + font.setFamily("SourceHanSansSC"); + font.setWeight(QFont::Normal); + font.setPixelSize(11); + d->text->setFont(font); d->text->setObjectName("DDropdownText"); - d->dropdown = new QLabel; + d->text->setForegroundRole(DPalette::BrightText); + d->dropdown = new DIconButton(DStyle::SP_ArrowDown, this); + d->dropdown->setIconSize(QSize(9, 9)); d->dropdown->setObjectName("DDropdownIcon"); - d->dropdown->setFixedSize(9, 5); + d->dropdown->setFixedSize(9, 9); + d->dropdown->setWindowModality(Qt::WindowModal); + DPalette pl = d->dropdown->palette(); + pl.setColor(DPalette::Light, QColor(Qt::transparent)); + pl.setColor(DPalette::Dark, QColor(Qt::transparent)); + QColor sbcolor("#000000"); + sbcolor.setAlphaF(0); + pl.setColor(DPalette::Shadow, sbcolor); + d->dropdown->setPalette(pl); layout->addStretch(); layout->addStretch(); layout->addWidget(d->text, 0, Qt::AlignCenter); layout->addWidget(d->dropdown, 0, Qt::AlignCenter); - connect(d->menu, &QMenu::triggered, this, [ = ](QAction * action) { + connect(d->menu, &DMenu::triggered, this, [ = ](QAction * action) { d->text->setText(action->text()); Q_EMIT this->triggered(action); }); @@ -79,7 +91,10 @@ d->menu->exec(); }); - DThemeManager::instance()->registerWidget(this); + connect(d->dropdown, &DIconButton::clicked, this, [ = ](bool checked) { + Q_UNUSED(checked) + Q_EMIT requestContextMenu(); + }); } DDropdown::~DDropdown() @@ -121,10 +136,22 @@ } } +void DDropdown::setCurrentAction(int index) +{ + Q_UNUSED(index) + Q_D(DDropdown); + if (!d->menu->actions().isEmpty()) { + setCurrentAction(d->menu->actions().first()); + } +} + QAction *DDropdown::addAction(const QString &item, const QVariant &var) { Q_D(DDropdown); auto action = d->menu->addAction(item); + auto font = action->font(); + font.setFamily("SourceHanSansSC"); + font.setWeight(QFont::Medium); action->setData(var); action->setCheckable(true); return action; @@ -139,20 +166,16 @@ void DDropdown::enterEvent(QEvent *event) { setStatus("hover"); - QFrame::enterEvent(event); + DWidget::enterEvent(event); - this->style()->unpolish(this); - this->style()->polish(this); update(); } void DDropdown::leaveEvent(QEvent *event) { setStatus(""); - QFrame::leaveEvent(event); + DWidget::leaveEvent(event); - this->style()->unpolish(this); - this->style()->polish(this); update(); } @@ -161,5 +184,5 @@ if (event->button() == Qt::LeftButton) { Q_EMIT requestContextMenu(); } - QFrame::mouseReleaseEvent(event); + DWidget::mouseReleaseEvent(event); } diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/ddropdown.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/ddropdown.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/ddropdown.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/ddropdown.h 2020-07-14 12:05:00.000000000 +0000 @@ -22,10 +22,12 @@ #pragma once #include -#include +#include + +DWIDGET_USE_NAMESPACE class DDropdownPrivate; -class DDropdown : public QFrame +class DDropdown : public DWidget { Q_OBJECT Q_PROPERTY(QString status READ status WRITE setStatus NOTIFY statusChanged) @@ -44,6 +46,7 @@ public slots: void setText(const QString &text); void setCurrentAction(QAction *action); + void setCurrentAction(int index = 0); QAction *addAction(const QString &item, const QVariant &var); void setStatus(QString status); diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/delegate/lyriclinedelegate.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/delegate/lyriclinedelegate.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/delegate/lyriclinedelegate.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/delegate/lyriclinedelegate.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -43,8 +43,8 @@ painter->setRenderHint(QPainter::Antialiasing); painter->setRenderHint(QPainter::HighQualityAntialiasing); - painter->fillRect(option.rect, option.palette.background()); - painter->setBrush(option.palette.foreground()); +// painter->fillRect(option.rect, option.palette.background()); +// painter->setBrush(option.palette.foreground()); // painter->setPen(Qt::blue); // painter->drawRect(option.rect); @@ -79,8 +79,8 @@ } QWidget *LyricLineDelegate::createEditor(QWidget *parent, - const QStyleOptionViewItem &option, - const QModelIndex &index) const + const QStyleOptionViewItem &option, + const QModelIndex &index) const { return QStyledItemDelegate::createEditor(parent, option, index); diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/delegate/musicinfoitemdelegate.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/delegate/musicinfoitemdelegate.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/delegate/musicinfoitemdelegate.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/delegate/musicinfoitemdelegate.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,441 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "musicinfoitemdelegate.h" +#include "musicinfoitemdelegate_p.h" + +#include +#include +#include +#include + +#include + +#include "../musiclistinfoview.h" +#include "core/medialibrary.h" + +DWIDGET_USE_NAMESPACE + +const int PlayItemLeftMargin = 15; +const int PlayItemRightMargin = 20; +const int PlayItemNumberMargin = 10; + +static inline int pixel2point(int pixel) +{ + return pixel * 96 / 72; +} + +inline int headerPointWidth(const QStyleOptionViewItem &option, const QModelIndex &index) +{ + QFont measuringFont(option.font); + QFontMetrics fm(measuringFont); + auto headerWith = fm.width(QString("%1").arg(index.row())); + return pixel2point(headerWith) + PlayItemLeftMargin + PlayItemNumberMargin; +} + +inline int tailPointWidth(const QStyleOptionViewItem &option) +{ + QFont measuringFont(option.font); + QFontMetrics fm(measuringFont); + return pixel2point(fm.width("00:00")) + PlayItemRightMargin; +} + +MusicInfoItemDelegatePrivate::MusicInfoItemDelegatePrivate(MusicInfoItemDelegate *parent): + QWidget(nullptr), q_ptr(parent) +{ +} + +QColor MusicInfoItemDelegatePrivate::textColor() const +{ + return m_textColor; +} +QColor MusicInfoItemDelegatePrivate::titleColor() const +{ + return m_numberColor; +} +QColor MusicInfoItemDelegatePrivate::highlightText() const +{ + return m_highlightText; +} +QColor MusicInfoItemDelegatePrivate::background() const +{ + return m_background; +} +QColor MusicInfoItemDelegatePrivate::alternateBackground() const +{ + return m_alternateBackground; +} +QColor MusicInfoItemDelegatePrivate::highlightedBackground() const +{ + return m_highlightedBackground; +} + +QString MusicInfoItemDelegatePrivate::playingIcon() const +{ + return m_aimationPrefix; +} + +QString MusicInfoItemDelegatePrivate::highlightPlayingIcon() const +{ + return m_highlightPlayingIcon; +} +void MusicInfoItemDelegatePrivate::setTextColor(QColor textColor) +{ + m_textColor = textColor; +} +void MusicInfoItemDelegatePrivate::setTitleColor(QColor numberColor) +{ + m_numberColor = numberColor; +} +void MusicInfoItemDelegatePrivate::setHighlightText(QColor highlightText) +{ + m_highlightText = highlightText; +} +void MusicInfoItemDelegatePrivate::setBackground(QColor background) +{ + m_background = background; +} +void MusicInfoItemDelegatePrivate::setAlternateBackground(QColor alternateBackground) +{ + m_alternateBackground = alternateBackground; +} +void MusicInfoItemDelegatePrivate::setHighlightedBackground(QColor highlightedBackground) +{ + m_highlightedBackground = highlightedBackground; +} + +void MusicInfoItemDelegatePrivate::setPlayingIcon(QString playingIcon) +{ + m_aimationPrefix = playingIcon; +} + +void MusicInfoItemDelegatePrivate::setHighlightPlayingIcon(QString highlightPlayingIcon) +{ + m_highlightPlayingIcon = highlightPlayingIcon; +} + +QColor MusicInfoItemDelegatePrivate::foreground(int col, const QStyleOptionViewItem &option) const +{ + if (option.state & QStyle::State_Selected) { + return highlightText(); + } + + auto emCol = static_cast(col); + switch (emCol) { + case MusicInfoItemDelegate::Number: + case MusicInfoItemDelegate::Length: + return textColor(); + case MusicInfoItemDelegate::Title: + return titleColor(); + default: + break; + } + return textColor(); +} + +inline int MusicInfoItemDelegatePrivate::timePropertyWidth(const QStyleOptionViewItem &option) const +{ + static auto width = tailPointWidth(option); + return width; +} + +static inline QFlags alignmentFlag(int col) +{ + auto emCol = static_cast(col); + switch (emCol) { + case MusicInfoItemDelegate::Number: + return Qt::AlignCenter; + case MusicInfoItemDelegate::Title: + return (Qt::AlignLeft | Qt::AlignVCenter); + case MusicInfoItemDelegate::Length: + return (Qt::AlignRight | Qt::AlignVCenter); + default: + break; + } + return (Qt::AlignLeft | Qt::AlignVCenter);; +} + +static inline QRect colRect(int col, const QStyleOptionViewItem &option) +{ + static auto tailwidth = tailPointWidth(option) + 20; + auto w = option.rect.width() - 0 - tailwidth; + + auto emCol = static_cast(col); + switch (emCol) { + case MusicInfoItemDelegate::Number: + return QRect(10, option.rect.y(), 40, option.rect.height()); + case MusicInfoItemDelegate::Title: + return QRect(50, option.rect.y(), w / 2 - 20, option.rect.height()); + case MusicInfoItemDelegate::Length: + return QRect(w, option.rect.y(), tailwidth - 20, option.rect.height()); + default: + break; + } + return option.rect.marginsRemoved(QMargins(0, 0, 0, 0)); +} + + +void MusicInfoItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, + const QModelIndex &index) const +{ + auto listview = qobject_cast(option.widget); + + //Q_D(const MusicInfoItemDelegate); + + painter->save(); + + QFont font11 = option.font; + font11.setFamily("SourceHanSansSC"); + font11.setWeight(QFont::Normal); + font11.setPixelSize(11); + QFont font14 = option.font; + font14.setFamily("SourceHanSansSC"); + font14.setWeight(QFont::Normal); + font14.setPixelSize(14); + + painter->setRenderHint(QPainter::Antialiasing); + painter->setRenderHint(QPainter::HighQualityAntialiasing); + + QColor baseColor("#FFFFFF"); + baseColor.setAlphaF(0.1); + QColor alternateBaseColor("#000000"); + alternateBaseColor.setAlphaF(0.02); + QColor selecteColor("#000000"); + selecteColor.setAlphaF(0.20); + if (listview->getThemeType() == 2) { + baseColor = QColor("#000000"); + baseColor.setAlphaF(0.05); + alternateBaseColor = QColor("#FFFFFF"); + alternateBaseColor.setAlphaF(0.05); + selecteColor = QColor("#FFFFFF"); + selecteColor.setAlphaF(0.20); + } + + auto hash = index.data().toString(); + auto meta = MediaLibrary::instance()->meta(hash); + if (meta.isNull()) { + QString msg = "can not find " + hash; + qWarning() << msg; + return; + } + + QColor nameColor("#090909"), otherColor("#797979"); + if (listview->getThemeType() == 2) { + nameColor = QColor("#C0C6D4"); + otherColor = QColor("#C0C6D4"); + } + + auto activeMeta = listview->playing(); + if (activeMeta == meta) { + nameColor = QColor("#2CA7F8"); + otherColor = QColor("#2CA7F8"); + otherColor.setAlphaF(0.5); + font14.setFamily("SourceHanSansSC"); + font14.setWeight(QFont::Medium); + } + + auto background = (index.row() % 2) == 1 ? baseColor : alternateBaseColor; + //auto background = baseColor; + + int lrWidth = 10; + if (!(option.state & QStyle::State_Selected) && !(option.state & QStyle::State_MouseOver) ) { + painter->save(); + painter->setPen(Qt::NoPen); + painter->setBrush(background); + //painter->drawRect(option.rect); + QRect selecteColorRect = option.rect.adjusted(lrWidth, 0, -lrWidth, 0); + painter->drawRoundedRect(selecteColorRect, 8, 8); + painter->restore(); + } + + if (option.state & QStyle::State_Selected) { + painter->save(); + painter->setPen(Qt::NoPen); +// QColor selectColor("#000000"); +// if (listview->getThemeType() == 2) { +// selectColor = QColor("#FFFFFF"); +// } +// selectColor.setAlphaF(0.2); + QColor selectColor(option.palette.highlight().color()); + painter->setBrush(selectColor); + QRect selecteColorRect = option.rect.adjusted(lrWidth, 0, -lrWidth, 0); + painter->drawRoundedRect(selecteColorRect, 8, 8); + painter->restore(); + + nameColor = option.palette.highlightedText().color(); + otherColor = option.palette.highlightedText().color(); + }/* else if ((index.row() % 2) == 0) { + painter->save(); + painter->setPen(Qt::NoPen); + painter->setBrush(alternateBaseColor); + QRect selecteColorRect = option.rect.adjusted(5, 0, -5, 0); + painter->drawRoundedRect(selecteColorRect, 8, 8); + painter->restore(); + }*/ + + if (option.state & QStyle::State_MouseOver) { + painter->save(); + painter->setPen(Qt::NoPen); + QColor hovertColor(option.palette.shadow().color()); + if (option.state & QStyle::State_Selected) + hovertColor.setAlphaF(0.2); + painter->setBrush(hovertColor); + QRect selecteColorRect = option.rect.adjusted(lrWidth, 0, -lrWidth, 0); + painter->drawRoundedRect(selecteColorRect, 8, 8); + painter->restore(); + } + + //painter->fillRect(option.rect, background); + + int rowCount = listview->model()->rowCount(); + auto rowCountSize = QString::number(rowCount).size(); + rowCountSize = qMax(rowCountSize, 2); + + for (int col = 0; col < 3; ++col) { + QColor brightTextColor(option.palette.highlight().color()); + auto flag = alignmentFlag(col); + auto rect = colRect(col, option); + switch (col) { + case Number: { + // Fixme: + painter->setPen(otherColor); + if (!meta.isNull() && meta->invalid) { + auto sz = QSizeF(15, 15); + auto icon = QIcon(":/mpimage/light/warning.svg").pixmap(sz.toSize()); + auto centerF = QRectF(rect).center(); + auto iconRect = QRectF(centerF.x() - sz.width() / 2, + centerF.y() - sz.height() / 2, + sz.width(), sz.height()); + painter->drawPixmap(iconRect, icon, QRectF()); + break; + } + + if (activeMeta == meta) { + auto icon = listview->getPlayPixmap(); + if (option.state & QStyle::State_Selected) { + icon = listview->getSidebarPixmap(); + } + qreal t_ratio = icon.devicePixelRatioF(); + QRect t_ratioRect; + t_ratioRect.setX(0); + t_ratioRect.setY(0); + t_ratioRect.setWidth(static_cast(icon.width() / t_ratio)); + t_ratioRect.setHeight(static_cast(icon.height() / t_ratio)); + auto centerF = QRectF(rect).center(); + auto iconRect = QRectF(centerF.x() - t_ratioRect.width() / 2, + centerF.y() - t_ratioRect.height() / 2, + t_ratioRect.width(), t_ratioRect.height()); + painter->drawPixmap(iconRect.toRect(), icon); + + } else { + painter->setFont(font11); + auto str = QString("%1").arg(index.row() + 1, rowCountSize, 10, QLatin1Char('0')); + QFont font(font11); + QFontMetrics fm(font); + auto text = fm.elidedText(str, Qt::ElideMiddle, rect.width()); + painter->drawText(rect, static_cast(flag), text); + } + break; + } + case Title: { + painter->setPen(nameColor); + painter->setFont(font14); + QFont font(font14); + QFontMetrics fm(font); + auto text = fm.elidedText(meta->title, Qt::ElideMiddle, rect.width()); + painter->drawText(rect, static_cast(flag), text); + break; + } + case Length: + painter->setPen(otherColor); + painter->setFont(font11); + painter->drawText(rect, static_cast(flag), DMusic::lengthString(meta->length)); + break; + default: + break; + } + } + painter->restore(); +} + +QSize MusicInfoItemDelegate::sizeHint(const QStyleOptionViewItem &option, + const QModelIndex &index) const +{ +// Q_D(const MusicInfoItemDelegate); + + auto baseSize = QStyledItemDelegate::sizeHint(option, index); + return QSize(baseSize.width() / 5, baseSize.height()); +// auto headerWidth = headerPointWidth(option, index); +// auto headerWidth = 17 + 10 + 10 + 4; +// auto tialWidth = d->timePropertyWidth(option); +// auto w = option.widget->width() - headerWidth - tialWidth; +// Q_ASSERT(w > 0); +// switch (index.column()) { +// case 0: +// return QSize(headerWidth, baseSize.height()); +// case 1: +// return QSize(w / 2, baseSize.height()); +// case 2: +// case 3: +// return QSize(w / 4, baseSize.height()); +// case 4: +// return QSize(tialWidth, baseSize.height()); +// } + +// return baseSize; +} + +QWidget *MusicInfoItemDelegate::createEditor(QWidget *parent, + const QStyleOptionViewItem &option, + const QModelIndex &index) const + +{ + return QStyledItemDelegate::createEditor(parent, option, index); +} + +void MusicInfoItemDelegate::setEditorData(QWidget *editor, + const QModelIndex &index) const +{ + QStyledItemDelegate::setEditorData(editor, index); +} + +void MusicInfoItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, + const QModelIndex &index) const +{ + QStyledItemDelegate::setModelData(editor, model, index); +} + +MusicInfoItemDelegate::MusicInfoItemDelegate(QWidget *parent) + : QStyledItemDelegate(parent), d_ptr(new MusicInfoItemDelegatePrivate(this)) +{ + +} + +MusicInfoItemDelegate::~MusicInfoItemDelegate() +{ +} + +void MusicInfoItemDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const +{ +// Q_D(const MusicInfoItemDelegate); + QStyledItemDelegate::initStyleOption(option, index); + option->state = option->state & ~QStyle::State_HasFocus; +} diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/delegate/musicinfoitemdelegate.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/delegate/musicinfoitemdelegate.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/delegate/musicinfoitemdelegate.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/delegate/musicinfoitemdelegate.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include + +DWIDGET_USE_NAMESPACE + +class MusicInfoItemDelegatePrivate; +class MusicInfoItemDelegate : public QStyledItemDelegate +{ + Q_OBJECT +public: + enum MusicColumn { + Number = 0, + Title, + Length, + }; + Q_ENUM(MusicColumn) + + enum MusicItemDataRole { + PlayStatusRole = Qt::UserRole + 100, + }; + Q_ENUM(MusicItemDataRole) + + enum PlayStatus { + Playing = 0x0098, + Strop, + }; + Q_ENUM(PlayStatus) + + MusicInfoItemDelegate(QWidget *parent = Q_NULLPTR); + ~MusicInfoItemDelegate(); + +public: + virtual void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const; + void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; + QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; + QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; + void setEditorData(QWidget *editor, const QModelIndex &index) const; + void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const; + +private: + QScopedPointer d_ptr; + Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusicInfoItemDelegate) +}; + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/delegate/musicinfoitemdelegate_p.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/delegate/musicinfoitemdelegate_p.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/delegate/musicinfoitemdelegate_p.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/delegate/musicinfoitemdelegate_p.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include + +class PictureSequenceView; +class QStyleOptionViewItem; +class MusicInfoItemDelegate; +class MusicInfoItemDelegatePrivate : public QWidget +{ + Q_OBJECT + Q_PROPERTY(QColor textColor READ textColor WRITE setTextColor) + Q_PROPERTY(QColor titleColor READ titleColor WRITE setTitleColor) + Q_PROPERTY(QColor highlightText READ highlightText WRITE setHighlightText) + Q_PROPERTY(QColor background READ background WRITE setBackground) + Q_PROPERTY(QColor alternateBackground READ alternateBackground WRITE setAlternateBackground) + Q_PROPERTY(QColor highlightedBackground READ highlightedBackground WRITE setHighlightedBackground) + Q_PROPERTY(QString playingIcon READ playingIcon WRITE setPlayingIcon) + Q_PROPERTY(QString highlightPlayingIcon READ highlightPlayingIcon WRITE setHighlightPlayingIcon) + +public: + int tialWidth = -1; + + explicit MusicInfoItemDelegatePrivate(MusicInfoItemDelegate *parent = nullptr); + + inline QColor foreground(int col, const QStyleOptionViewItem &option) const; + inline int timePropertyWidth(const QStyleOptionViewItem &option) const; + + QColor textColor() const; + QColor titleColor() const; + QColor highlightText() const; + QColor background() const; + QColor alternateBackground() const; + QColor highlightedBackground() const; + QString playingIcon() const; + QString highlightPlayingIcon() const; + +public slots: + void setTextColor(QColor textColor); + void setTitleColor(QColor titleColor); + void setHighlightText(QColor highlightText); + void setBackground(QColor background); + void setAlternateBackground(QColor alternateBackground); + void setHighlightedBackground(QColor highlightedBackground); + void setPlayingIcon(QString playingIcon); + void setHighlightPlayingIcon(QString highlightPlayingIcon); + +private: + QColor m_textColor; + QColor m_numberColor; + QColor m_highlightText; + QColor m_background; + QColor m_alternateBackground; + QColor m_highlightedBackground; + QString m_aimationPrefix = ":/mpimage/light/music1.svg"; + QString m_highlightPlayingIcon = ":/mpimage/light/music1.svg"; + + MusicInfoItemDelegate *q_ptr; + Q_DECLARE_PUBLIC(MusicInfoItemDelegate) +}; diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/delegate/musiclistdatadelegate.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/delegate/musiclistdatadelegate.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/delegate/musiclistdatadelegate.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/delegate/musiclistdatadelegate.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,711 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "musiclistdatadelegate.h" + +#include +#include +#include +#include +#include + +#include + +#include "../musiclistdataview.h" + +QT_BEGIN_NAMESPACE +extern Q_WIDGETS_EXPORT void qt_blurImage(QPainter *p, QImage &blurImage, qreal radius, bool quality, bool alphaOnly, int transposed = 0); +QT_END_NAMESPACE + +const int PlayItemRightMargin = 20; + +static inline int pixel2point(int pixel) +{ + return pixel * 96 / 72; +} + +class MusicListDataDelegatePrivate +{ +public: + explicit MusicListDataDelegatePrivate(MusicListDataDelegate *parent): q_ptr(parent) + { + shadowImg = shadowImg.copy(5, 5, shadowImg.width() - 10, shadowImg.height() - 10); + } + + QWidget *parentWidget; + QPixmap playing = DHiDPIHelper::loadNxPixmap(":/common/image/jumpto_playing_normal.svg"); +// QString playingIcon = ":/mpimage/light/music1.svg"; +// QString highlightPlayingIcon = ":/mpimage/light/music1.svg"; + QPixmap hoverPlayImg = DHiDPIHelper::loadNxPixmap(":/mpimage/dark/hover/play_hover.svg"); + QPixmap hoverSuspendImg = DHiDPIHelper::loadNxPixmap(":/mpimage/dark/hover/suspend_hover.svg"); + QPixmap shadowImg = DHiDPIHelper::loadNxPixmap(":/mpimage/light/shadow.svg"); + + MusicListDataDelegate *q_ptr; + bool containsMusic(QString uuid, MetaPtr playing, PlayMusicTypePtr currentList)const; + Q_DECLARE_PUBLIC(MusicListDataDelegate) +}; + + +bool MusicListDataDelegatePrivate::containsMusic(QString uuid, MetaPtr playing, PlayMusicTypePtr currentList)const +{ + + if (uuid == AlbumResultListID || uuid == AlbumMusicListID) { + if (playing->album == currentList->playlistMeta.metas.first()->album) { + return true; + } + } + if (uuid == ArtistResultListID || uuid == ArtistMusicListID) { + if (playing->artist == currentList->playlistMeta.metas.first()->artist) { + return true; + } + } + return false; +} + +void MusicListDataDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, + const QModelIndex &index) const +{ + Q_D(const MusicListDataDelegate); + + //QStyledItemDelegate::paint(painter, option, index); + + auto listview = qobject_cast(option.widget); + PlaylistPtr playlistPtr = listview->playlist(); + auto playMusicTypePtrList = listview->playMusicTypePtrList(); + if (index.row() >= playMusicTypePtrList.size()) { + return; + } + auto PlayMusicTypePtr = playMusicTypePtrList[index.row()]; + +// if (listview->playing() != nullptr && listview->playing()->album != PlayMusicTypePtr->name){ +// return +// } + + if (listview->viewMode() == QListView::IconMode) { + //QStyledItemDelegate::paint(painter, option, index); + painter->save(); + painter->setRenderHint(QPainter::Antialiasing); + painter->setRenderHint(QPainter::HighQualityAntialiasing); + painter->setRenderHint(QPainter::SmoothPixmapTransform); + + auto background = option.palette.background(); + + if (option.state & QStyle::State_Selected) { +// background = option.palette.highlight(); + } + + painter->fillRect(option.rect, background); + + //draw shadow +// int shadowBorderWidth = 10; +// QRect shadowRect = option.rect.adjusted(shadowBorderWidth, shadowBorderWidth, -shadowBorderWidth, -shadowBorderWidth);; +// QPainterPath roundRectShadowPath; +// roundRectShadowPath.addRoundRect(shadowRect, 10, 10); +// painter->save(); +// painter->setClipPath(roundRectShadowPath); +// painter->drawPixmap(shadowRect, d->shadowImg); +// painter->restore(); + + //绘制阴影 + QRect shadowRect(option.rect.x() - 10, option.rect.y(), 158, 158); + QPainterPath roundRectShadowPath; + roundRectShadowPath.addRoundRect(shadowRect, 8, 8); + painter->save(); + painter->setClipPath(roundRectShadowPath); + painter->drawPixmap(shadowRect, d_ptr->shadowImg); + painter->restore(); + + int borderWidth = 0; + QRect rect = option.rect.adjusted(borderWidth, borderWidth, -borderWidth, -borderWidth); + QPainterPath roundRectPath; + roundRectPath.addRoundRect(rect, 10, 10); + painter->setClipPath(roundRectPath); + + auto icon = option.icon; + auto value = index.data(Qt::DecorationRole); + if (value.type() == QVariant::Icon) { + icon = qvariant_cast(value); + } + + painter->drawPixmap(rect, icon.pixmap(rect.width(), rect.width())); + + + //draw border + painter->save(); + QColor borderPenColor("#000000"); + borderPenColor.setAlphaF(0.05); + QPen borderPen(borderPenColor); + borderPen.setWidthF(2); + painter->setPen(borderPen); + painter->drawRoundRect(rect/*.adjusted(1, 1, -1, 1)*/, 10, 10); + painter->restore(); + + bool playFlag = false; + if (PlayMusicTypePtr->extraName.isEmpty()) { + QColor fillColor(0, 0, 0); + fillColor.setAlphaF(0.3); + if (listview->getThemeType() == 2) { + fillColor = "#000000"; + fillColor.setAlphaF(0.3); + } + + if (listview->playing() != nullptr + && listview->playingState() + && d->containsMusic(listview->playlist()->id(), listview->playing(), PlayMusicTypePtr)) { + playFlag = true; + } + + QRect fillBlurRect(rect.x(), rect.y() + rect.height() - 36, rect.width(), 36); + int curFillSize = 36; + if (playFlag) { + fillBlurRect = QRect(rect.x(), rect.y() + rect.height() - 64, rect.width(), 70); + curFillSize = 64; + } + //设置模糊 + QImage t_image = icon.pixmap(rect.width(), rect.height()).toImage(); + qreal t_ratio = t_image.devicePixelRatioF(); + curFillSize = static_cast( curFillSize * t_ratio); + + t_image = t_image.copy(0, rect.height() - curFillSize, t_image.width(), curFillSize); + QTransform old_transform = painter->transform(); + painter->translate(fillBlurRect.topLeft()); + qt_blurImage(painter, t_image, 35, false, false); + painter->setTransform(old_transform); + //设置模糊 + painter->fillRect(fillBlurRect, fillColor); + + //draw playing + if (playFlag) { + if (option.state & QStyle::State_MouseOver) { + painter->drawPixmap(QRect(rect.x() + 60, rect.y() + 88, 40, 40), d->hoverSuspendImg); + } else { + painter->drawPixmap(QRect(rect.x() + 64, rect.y() + 96, 22, 18), listview->getAlbumPixmap()); + } + } + + QRect fillRect(rect.x(), rect.y() + rect.height() - 36, rect.width(), 36); + QFont font = option.font; + font.setFamily("SourceHanSansSC"); + font.setWeight(QFont::Normal); + font.setPixelSize(14); + painter->setFont(font); + QFontMetrics fm(font); + fillRect.adjust(8, 0, -7, 0); + auto text = fm.elidedText(PlayMusicTypePtr->name, Qt::ElideMiddle, fillRect.width()); + painter->setPen(Qt::white); + painter->drawText(fillRect, Qt::AlignLeft | Qt::AlignVCenter, text); + } else { + QColor fillColor(0, 0, 0); + fillColor.setAlphaF(0.3); + if (listview->getThemeType() == 2) { + fillColor = "#000000"; + fillColor.setAlphaF(0.3); + } + int startHeight = rect.y() + rect.height() - 46; + int fillAllHeight = 46; + int curFillSize = fillAllHeight; + QRect fillBlurRect(rect.x(), rect.y() + rect.height() - fillAllHeight, rect.width(), fillAllHeight); + + if (listview->playing() != nullptr + && listview->playingState() + && d->containsMusic(listview->playlist()->id(), listview->playing(), PlayMusicTypePtr)) { + playFlag = true; + } + + if (playFlag) { + fillBlurRect = QRect(rect.x(), rect.y() + rect.height() - 80, rect.width(), 86); + curFillSize = 80; + } + + //设置模糊 + QImage t_image = icon.pixmap(rect.width(), rect.height()).toImage(); + qreal t_ratio = t_image.devicePixelRatioF(); + curFillSize = static_cast( curFillSize * t_ratio); + + t_image = t_image.copy(0, rect.height() - curFillSize, t_image.width(), curFillSize); + QTransform old_transform = painter->transform(); + painter->translate(fillBlurRect.topLeft()); + qt_blurImage(painter, t_image, 35, false, false); + painter->setTransform(old_transform); + //设置模糊 + painter->fillRect(fillBlurRect, fillColor); + + //draw playing + if (playFlag) { + if (option.state & QStyle::State_MouseOver) { + painter->drawPixmap(QRect(rect.x() + 60, rect.y() + 88, 40, 40), d->hoverSuspendImg); + } else { + painter->drawPixmap(QRect(rect.x() + 64, rect.y() + 96, 22, 18), listview->getAlbumPixmap()); + } + } + + QRect fillRect(rect.x(), startHeight, rect.width(), fillAllHeight); + + QFont font = option.font; + font.setPixelSize(14); + painter->setFont(font); + QFontMetrics fm(font); + + QRect nameFillRect(rect.x(), startHeight + 2, rect.width(), fillAllHeight / 2); + nameFillRect.adjust(8, 0, -7, 0); + auto nameText = fm.elidedText(PlayMusicTypePtr->name, Qt::ElideMiddle, nameFillRect.width()); + painter->setPen(Qt::white); + painter->drawText(nameFillRect, Qt::AlignLeft | Qt::AlignTop, nameText); + + font.setPixelSize(10); + QFontMetrics extraNameFm(font); + painter->setFont(font); + QRect extraNameFillRect(rect.x(), startHeight + fillAllHeight / 2 + 1, rect.width(), fillAllHeight / 2); + extraNameFillRect.adjust(8, 0, -7, 0); + auto extraNameText = extraNameFm.elidedText(PlayMusicTypePtr->extraName, Qt::ElideMiddle, extraNameFillRect.width()); + painter->setPen(Qt::white); + painter->drawText(extraNameFillRect, Qt::AlignLeft | Qt::AlignTop, extraNameText); + } + + + QBrush t_fillBrush(QColor(128, 128, 128, 0)); + + QColor fillColor(0, 0, 0); + fillColor.setAlphaF(0.3); + if (listview->getThemeType() == 2) { + fillColor = "#000000"; + fillColor.setAlphaF(0.3); + } + + if (option.state & QStyle::State_Selected) { + t_fillBrush = QBrush(QColor(128, 128, 128, 90)); + } + + if ((option.state & QStyle::State_MouseOver) && !playFlag) { + if (!playlistPtr->playingStatus() || !playFlag ) { + QImage t_image = icon.pixmap(rect.width(), rect.height()).toImage(); + int t_ratio = static_cast(t_image.devicePixelRatioF()); + QRect t_imageRect(rect.width() / 2 - 25, rect.height() / 2 - 25, 50 * t_ratio, 50 * t_ratio); + t_image = t_image.copy(t_imageRect); + QRect t_hoverRect(rect.x() + 50, rect.y() + 36, 50 * t_ratio, 50 * t_ratio); + + QTransform old_transform = painter->transform(); + painter->translate(t_hoverRect.topLeft()); + + QPainterPath t_imageClipPath; + t_imageClipPath.addEllipse(QRect(0, 0, 50, 50)); + painter->setClipPath(t_imageClipPath); + + qt_blurImage(painter, t_image, 30, false, false); + painter->setTransform(old_transform); + painter->fillRect(t_hoverRect, fillColor); + + QPixmap t_hoverPlayImg(d->hoverPlayImg); + t_hoverPlayImg.setDevicePixelRatio(option.widget->devicePixelRatioF()); + // t_hoverRect.adjust(0, 0, -7 * t_ratio, -7 * t_ratio); + QRect t_pixMapRect(rect.x() + 53, rect.y() + 40, 43, 43); + QIcon icon(t_hoverPlayImg); + painter->drawPixmap(t_pixMapRect, t_hoverPlayImg); + } /*else { + QPixmap t_hoverPlayImg(d->hoverSuspendImg); + t_hoverPlayImg.setDevicePixelRatio(option.widget->devicePixelRatioF()); + // t_hoverRect.adjust(0, 0, -7 * t_ratio, -7 * t_ratio); + QRect t_pixMapRect(rect.x() + 53, rect.y() + 40, 43, 43); + QIcon icon(t_hoverPlayImg); + painter->drawPixmap(t_pixMapRect, t_hoverPlayImg); + }*/ + } + + painter->fillRect(option.rect, t_fillBrush); + + painter->restore(); + + } else { + painter->save(); + painter->setRenderHint(QPainter::Antialiasing); + painter->setRenderHint(QPainter::HighQualityAntialiasing); + + QColor baseColor("#FFFFFF"); + baseColor.setAlphaF(0.1); + QColor alternateBaseColor("#000000"); + alternateBaseColor.setAlphaF(0.02); + QColor selecteColor("#000000"); + selecteColor.setAlphaF(0.10); + if (listview->getThemeType() == 2) { + baseColor.setAlphaF(0.05); + alternateBaseColor.setAlphaF(0.05); + selecteColor = QColor("#FFFFFF"); + selecteColor.setAlphaF(0.20); + } + + auto background = (index.row() % 2) == 1 ? baseColor : alternateBaseColor; + //auto background = baseColor; + + int lrWidth = 10; + if (!(option.state & QStyle::State_Selected) && !(option.state & QStyle::State_MouseOver) ) { + painter->save(); + painter->setPen(Qt::NoPen); + painter->setBrush(background); + //painter->drawRect(option.rect); + QRect selecteColorRect = option.rect.adjusted(lrWidth, 0, -lrWidth, 0); + painter->drawRoundedRect(selecteColorRect, 8, 8); + painter->restore(); + //painter->fillRect(option.rect, background); + } + + if (option.state & QStyle::State_Selected) { + painter->save(); + painter->setPen(Qt::NoPen); +// QColor selectColor("#000000"); +// if (listview->getThemeType() == 2) { +// selectColor = QColor("#FFFFFF"); +// } +// selectColor.setAlphaF(0.2); + QColor selectColor(option.palette.highlight().color()); + painter->setBrush(selectColor); + QRect selecteColorRect = option.rect.adjusted(lrWidth, 0, -lrWidth, 0); + painter->drawRoundedRect(selecteColorRect, 8, 8); + painter->restore(); + }/* else if ((index.row() % 2) == 0) { + painter->save(); + painter->setPen(Qt::NoPen); + painter->setBrush(alternateBaseColor); + QRect selecteColorRect = option.rect.adjusted(5, 0, -5, 0); + painter->drawRoundedRect(selecteColorRect, 8, 8); + painter->restore(); + }*/ + + if (option.state & QStyle::State_MouseOver) { + painter->save(); + painter->setPen(Qt::NoPen); + QColor hovertColor(option.palette.shadow().color()); + if (option.state & QStyle::State_Selected) + hovertColor.setAlphaF(0.2); + painter->setBrush(hovertColor); + QRect selecteColorRect = option.rect.adjusted(lrWidth, 0, -lrWidth, 0); + painter->drawRoundedRect(selecteColorRect, 8, 8); + painter->restore(); + } + + QColor nameColor("#090909"), otherColor("#797979"); + otherColor.setAlphaF(0.5); + if (listview->getThemeType() == 2) { + nameColor = QColor("#C0C6D4"); + otherColor = QColor("#C0C6D4"); + otherColor.setAlphaF(0.5); + } + + if (PlayMusicTypePtr->extraName.isEmpty()) { + //QStyledItemDelegate::paint(painter, option, index); + + QFont font11 = option.font; + font11.setFamily("SourceHanSansSC"); + font11.setWeight(QFont::Normal); + font11.setPixelSize(11); + QFont font14 = option.font; + font14.setFamily("SourceHanSansSC"); + font14.setWeight(QFont::Normal); + font14.setPixelSize(14); + + QFontMetrics songsFm(font14); + auto tailwidth = pixel2point(songsFm.width("0000-00-00")) + PlayItemRightMargin + 20; + auto w = option.rect.width() - 0 - tailwidth; + + bool playingFlag = false; + if (listview->playing() != nullptr && (listview->playing()->artist == PlayMusicTypePtr->name + || (listview->playing()->artist.isEmpty() && !PlayMusicTypePtr->playlistMeta.metas.isEmpty() + && PlayMusicTypePtr->playlistMeta.metas.begin().value()->artist.isEmpty()))) { + if (option.state & QStyle::State_Selected) { + nameColor = option.palette.highlightedText().color(); + otherColor = option.palette.highlightedText().color(); + } else { + nameColor = QColor("#2CA7F8"); + otherColor = QColor("#2CA7F8"); + } + font14.setFamily("SourceHanSansSC"); + font14.setWeight(QFont::Medium); + playingFlag = true; + } else { + if (option.state & QStyle::State_Selected) { + nameColor = option.palette.highlightedText().color(); + otherColor = option.palette.highlightedText().color(); + } + } + //icon + if (playlistPtr->searchStr().isEmpty()) { + if (!playingFlag) { + QRect numRect(lrWidth + 10, option.rect.y() + 3, 32, 32); + auto icon = option.icon; + auto value = index.data(Qt::DecorationRole); + if (value.type() == QVariant::Icon) { + icon = qvariant_cast(value); + } + painter->save(); + QPainterPath clipPath; + clipPath.addEllipse(numRect.adjusted(4, 4, -4, -4)); + painter->setClipPath(clipPath); + painter->drawPixmap(numRect, icon.pixmap(numRect.width(), numRect.width())); + painter->restore(); + } else { + QRect numRect(lrWidth + 10, option.rect.y(), 40, option.rect.height()); + auto icon = listview->getPlayPixmap(); + if (option.state & QStyle::State_Selected) { + icon = listview->getSidebarPixmap(); + } + qreal t_ratio = icon.devicePixelRatioF(); + auto centerF = numRect.center(); + QRect t_ratioRect; + t_ratioRect.setX(0); + t_ratioRect.setY(0); + t_ratioRect.setWidth(static_cast(icon.width() / t_ratio)); + t_ratioRect.setHeight(static_cast(icon.height() / t_ratio)); + auto iconRect = QRectF(centerF.x() - t_ratioRect.width() / 2, + centerF.y() - t_ratioRect.height() / 2, + t_ratioRect.width(), t_ratioRect.height()); + painter->drawPixmap(iconRect.toRect(), icon); + } + + } else { + int rowCount = listview->model()->rowCount(); + auto rowCountSize = QString::number(rowCount).size(); + rowCountSize = qMax(rowCountSize, 2); + QFont measuringFont(font11); + painter->setPen(otherColor); + QRect numRect(lrWidth + 10, option.rect.y(), 40, option.rect.height()); + painter->setFont(font11); + auto str = QString("%1").arg(index.row() + 1, rowCountSize, 10, QLatin1Char('0')); + QFont font(font11); + QFontMetrics fm(font); + auto text = fm.elidedText(str, Qt::ElideMiddle, numRect.width()); + painter->drawText(numRect, Qt::AlignCenter, text); + } + + + painter->setPen(nameColor); + //name + QRect nameRect(59, option.rect.y(), w / 2 - 20, option.rect.height()); + painter->setFont(font14); + auto nameText = songsFm.elidedText(PlayMusicTypePtr->name, Qt::ElideMiddle, nameRect.width()); + painter->drawText(nameRect, Qt::AlignLeft | Qt::AlignVCenter, nameText); + + int sortMetasSize = PlayMusicTypePtr->playlistMeta.sortMetas.size(); + QString infoStr; + if (sortMetasSize == 0) { + infoStr = QString(" ") + tr("No songs"); + } else if (sortMetasSize == 1) { + infoStr = QString(" ") + tr("1 song"); + } else { + infoStr = QString(" ") + tr("%1 songs").arg(sortMetasSize); + } + + painter->setPen(otherColor); + painter->setFont(font11); + QRect rect(w, option.rect.y(), tailwidth - 20, option.rect.height()); + painter->drawText(rect, Qt::AlignRight | Qt::AlignVCenter, infoStr); + + } else { + QFont font11 = option.font; + font11.setFamily("SourceHanSansSC"); + font11.setWeight(QFont::Normal); + font11.setPixelSize(11); + QFont font14 = option.font; + font14.setFamily("SourceHanSansSC"); + font14.setWeight(QFont::Normal); + font14.setPixelSize(14); + + int rowCount = listview->model()->rowCount(); + auto rowCountSize = QString::number(rowCount).size(); + rowCountSize = qMax(rowCountSize, 2); + + QFontMetrics songsFm(font11); + auto tailwidth = pixel2point(songsFm.width("0000-00-00")) + PlayItemRightMargin + 20; + auto w = option.rect.width() - 0 - tailwidth; + + //num + if (listview->playing() != nullptr + && listview->playingState() + && (listview->playing()->album == PlayMusicTypePtr->name + || (listview->playing()->album.isEmpty() && !PlayMusicTypePtr->playlistMeta.metas.isEmpty() + && PlayMusicTypePtr->playlistMeta.metas.begin().value()->album.isEmpty()))) { + if (option.state & QStyle::State_Selected) { + nameColor = option.palette.highlightedText().color(); + otherColor = option.palette.highlightedText().color(); + } else { + nameColor = QColor("#2CA7F8"); + otherColor = QColor("#2CA7F8"); + } + font14.setFamily("SourceHanSansSC"); + font14.setWeight(QFont::Medium); + QRect numRect(lrWidth, option.rect.y(), 40, option.rect.height()); + auto icon = listview->getPlayPixmap(); + if (option.state & QStyle::State_Selected) { + icon = listview->getSidebarPixmap(); + } + qreal t_ratio = icon.devicePixelRatioF(); + auto centerF = numRect.center(); + QRect t_ratioRect; + t_ratioRect.setX(0); + t_ratioRect.setY(0); + t_ratioRect.setWidth(static_cast(icon.width() / t_ratio)); + t_ratioRect.setHeight(static_cast(icon.height() / t_ratio)); + auto iconRect = QRectF(centerF.x() - t_ratioRect.width() / 2, + centerF.y() - t_ratioRect.height() / 2, + t_ratioRect.width(), t_ratioRect.height()); + painter->drawPixmap(iconRect.toRect(), icon); + } else { + if (option.state & QStyle::State_Selected) { + nameColor = option.palette.highlightedText().color(); + otherColor = option.palette.highlightedText().color(); + } + + painter->setPen(otherColor); + QRect numRect(lrWidth, option.rect.y(), 40, option.rect.height()); + painter->setFont(font11); + auto str = QString("%1").arg(index.row() + 1, rowCountSize, 10, QLatin1Char('0')); + QFont font(font11); + QFontMetrics fm(font); + auto text = fm.elidedText(str, Qt::ElideMiddle, numRect.width()); + painter->drawText(numRect, Qt::AlignCenter, text); + } + + + //name + painter->setPen(nameColor); + QRect nameRect(50, option.rect.y(), w / 2 - 20, option.rect.height()); + painter->setFont(font14); + auto nameText = songsFm.elidedText(PlayMusicTypePtr->name, Qt::ElideMiddle, nameRect.width()); + painter->drawText(nameRect, Qt::AlignLeft | Qt::AlignVCenter, nameText); + + painter->setPen(otherColor); + //extraname + QRect extraRect(50 + w / 2, option.rect.y(), w / 4 - 20, option.rect.height()); + painter->setFont(font11); + auto extraText = songsFm.elidedText(PlayMusicTypePtr->extraName, Qt::ElideMiddle, extraRect.width()); + painter->drawText(extraRect, Qt::AlignLeft | Qt::AlignVCenter, extraText); + + //songs + int sortMetasSize = PlayMusicTypePtr->playlistMeta.sortMetas.size(); + QString infoStr; + if (sortMetasSize == 0) { + infoStr = QString(" ") + tr("No songs"); + } else if (sortMetasSize == 1) { + infoStr = QString(" ") + tr("1 song"); + } else { + infoStr = QString(" ") + tr("%1 songs").arg(sortMetasSize); + } + painter->save(); + QFont measuringFont(font11); + QRect songsRect(50 + w / 2 + w / 4, option.rect.y(), w / 4 - 20, option.rect.height()); + painter->drawText(songsRect, Qt::AlignLeft | Qt::AlignVCenter, infoStr); + painter->restore(); + + //day + QRect dayRect(w, option.rect.y(), tailwidth - 20, option.rect.height()); + painter->setFont(font11); + QString dayStr = QDateTime::fromMSecsSinceEpoch(PlayMusicTypePtr->timestamp / static_cast(1000)).toString("yyyy-MM-dd"); + painter->drawText(dayRect, Qt::AlignRight | Qt::AlignVCenter, dayStr); + } + + painter->restore(); + } +} + +QSize MusicListDataDelegate::sizeHint(const QStyleOptionViewItem &option, + const QModelIndex &index) const +{ + auto listview = qobject_cast(option.widget); + if (listview->viewMode() == QListView::IconMode) { + return QSize(150, 150); + } + return QStyledItemDelegate::sizeHint(option, index); +} + +QWidget *MusicListDataDelegate::createEditor(QWidget *parent, + const QStyleOptionViewItem &option, + const QModelIndex &index) const + +{ + return QStyledItemDelegate::createEditor(parent, option, index); +} + +void MusicListDataDelegate::setEditorData(QWidget *editor, + const QModelIndex &index) const +{ + + QStyledItemDelegate::setEditorData(editor, index); + +} + +void MusicListDataDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, + const QModelIndex &index) const +{ + QStyledItemDelegate::setModelData(editor, model, index); +} + +bool MusicListDataDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) +{ + auto listview = qobject_cast(option.widget); + int borderWidth = 10; + QRect rect = option.rect.adjusted(borderWidth, borderWidth, -borderWidth, -borderWidth); + if (index.isValid() && listview->viewMode() == QListView::IconMode && event->type() == QEvent::MouseButtonPress) { + if (!listview->playingState()) { + QRect t_hoverRect(rect.x() + 50, rect.y() + 36, 50, 50); + + QPainterPath t_imageClipPath; + t_imageClipPath.addEllipse(QRect(rect.x() + 50, rect.y() + 36, 50, 50)); + t_imageClipPath.closeSubpath(); + auto fillPolygon = t_imageClipPath.toFillPolygon(); + + QMouseEvent *pressEvent = static_cast(event); + QPointF pressPos = pressEvent->pos(); + + if (fillPolygon.containsPoint(pressPos, Qt::OddEvenFill)) + Q_EMIT hoverPress(index); + } else { + QRect t_hoverRect (rect.x() + 64, rect.y() + 96, 22, 18); + QPainterPath t_imageClipPath; + t_imageClipPath.addEllipse(QRect(rect.x() + 64, rect.y() + 96, 25, 25)); + t_imageClipPath.closeSubpath(); + auto fillPolygon = t_imageClipPath.toFillPolygon(); + + //QMouseEvent *pressEvent = static_cast(event); + //QPointF pressPos = pressEvent->pos(); + Q_EMIT hoverPress(index); + } + return false; + } + return QStyledItemDelegate::editorEvent(event, model, option, index); +} + + + +MusicListDataDelegate::MusicListDataDelegate(QWidget *parent): QStyledItemDelegate(parent), d_ptr(new MusicListDataDelegatePrivate(this)) +{ + Q_D(MusicListDataDelegate); + d->parentWidget = parent; + d->playing = d->playing.scaled(22, 18); +} + +MusicListDataDelegate::~MusicListDataDelegate() +{ + +} + +void MusicListDataDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const +{ + QStyledItemDelegate::initStyleOption(option, index); +} + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/delegate/musiclistdatadelegate.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/delegate/musiclistdatadelegate.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/delegate/musiclistdatadelegate.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/delegate/musiclistdatadelegate.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include + +class MusicListDataDelegatePrivate; +class MusicListDataDelegate : public QStyledItemDelegate +{ + Q_OBJECT + +public: + MusicListDataDelegate(QWidget *parent = Q_NULLPTR); + ~MusicListDataDelegate() override; + + virtual void initStyleOption(QStyleOptionViewItem *option, + const QModelIndex &index) const override; + + void paint(QPainter *painter, const QStyleOptionViewItem &option, + const QModelIndex &index) const override; + + QSize sizeHint(const QStyleOptionViewItem &option, + const QModelIndex &index) const override; + + QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, + const QModelIndex &index) const override; + + void setEditorData(QWidget *editor, const QModelIndex &index) const override; + + void setModelData(QWidget *editor, QAbstractItemModel *model, + const QModelIndex &index) const override; + +signals: + void hoverPress(const QModelIndex &index); + +protected: + bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) override; + +private: + QScopedPointer d_ptr; + Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusicListDataDelegate) +}; + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/delegate/musicsearchlistdelegate.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/delegate/musicsearchlistdelegate.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/delegate/musicsearchlistdelegate.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/delegate/musicsearchlistdelegate.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,340 @@ +/* + * Copyright (C) 2020 chengdu Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include "musicsearchlistdelegate.h" +#include "../musicsearchlistview.h" +#include "util/pinyinsearch.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace DMusic; +using namespace DMusic; +QT_BEGIN_NAMESPACE +extern Q_WIDGETS_EXPORT void qt_blurImage(QPainter *p, QImage &blurImage, qreal radius, bool quality, bool alphaOnly, int transposed = 0); +QT_END_NAMESPACE + +//static inline int pixel2point(int pixel) +//{ +// return pixel * 96 / 72; +//} + +//const int PlayItemRightMargin = 20; + +class MusicSearchListDelegatePrivate +{ +public: + explicit MusicSearchListDelegatePrivate(MusicSearchListDelegate *parent) + : q_ptr(parent) + { + + } + + QString playingIcon = ":/images/logo.svg"; + QString highlightPlayingIcon = ":/images/logo.svg"; + QPixmap shadowImg = DHiDPIHelper::loadNxPixmap(":/mpimage/light/shadow.svg"); + MusicSearchListDelegate *q_ptr; + Q_DECLARE_PUBLIC(MusicSearchListDelegate) +}; + +MusicSearchListDelegate::MusicSearchListDelegate(QWidget *parent) + : QStyledItemDelegate(parent) + , d_ptr(new MusicSearchListDelegatePrivate(this)) +{ + +} + +MusicSearchListDelegate::~MusicSearchListDelegate() +{ + +} + +void MusicSearchListDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const +{ + QStyledItemDelegate::initStyleOption(option, index); +} + +bool MusicSearchListDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) +{ + Q_UNUSED(event) + Q_UNUSED(model) + Q_UNUSED(option) + Q_UNUSED(index) + return true; +} + +void MusicSearchListDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + //Q_D(const MusicSearchListDelegate); + + /********************设置基础颜色***************************/ + QColor backColor("#FFFFFF"); + backColor.setAlphaF(0.2); + + //获取当前行信息 + auto listview = qobject_cast(option.widget); + PlaylistPtr playlistPtr = listview->playlist(); + QString searchText = listview->getSearchText(); + if (playlistPtr == nullptr) { + return; + } + auto playMusicTypePtrList = listview->playMusicTypePtrList(); + auto metaPtrList = listview->playMetaList(); + if (playlistPtr->id() == MusicCandListID) { + if (index.row() >= metaPtrList.size()) { + return; + } + } else { + if (index.row() >= playMusicTypePtrList.size()) { + return; + } + } + + QColor textColor; + QColor lightColor; + + //主题改变需要修改color + if (listview->getThemeType() == 2) { + textColor = QColor("#F8F8F8"); + } else { + textColor = QColor("#000000"); + } + + lightColor = QColor("#0082FF"); + + //绘制选中状态 + if (option.state & QStyle::State_MouseOver) { + // Q_EMIT this->SearchClear(); + + painter->save(); + painter->setPen(Qt::NoPen); + QColor hovertColor(option.palette.highlight().color()); + + textColor = QColor("#F8F8F8"); + lightColor = QColor("#F8F8F8"); + + if (option.state & QStyle::State_Selected) + hovertColor.setAlphaF(0.2); + painter->setBrush(hovertColor); + QRect selecteColorRect = option.rect.adjusted(0, 0, 0, 0); + painter->drawRoundedRect(selecteColorRect, 0, 0); + painter->restore(); + + emit SearchClear(); + } + //绘制上下键选中 + if (index.row() == listview->getIndexInt() + && listview->getIndexInt() >= 0) { + painter->save(); + painter->setPen(Qt::NoPen); + QColor hovertColor(option.palette.highlight().color()); +// lightColor = option.palette.highlightedText().color(); + textColor = QColor("#F8F8F8"); + lightColor = QColor("#F8F8F8"); + + if (option.state & QStyle::State_Selected) + hovertColor.setAlphaF(0.2); + painter->setBrush(hovertColor); + QRect selecteColorRect = option.rect.adjusted(0, 0, 0, 0); + painter->drawRoundedRect(selecteColorRect, 8, 8); + painter->restore(); + } + + painter->setRenderHint(QPainter::Antialiasing); + painter->setRenderHint(QPainter::HighQualityAntialiasing); + + /***********************设置字体***************************/ + QFont textFont = option.font; + textFont.setFamily("SourceHanSansSC"); + textFont.setWeight(QFont::Normal); + textFont.setPixelSize(14); + + if (playlistPtr->id() == MusicCandListID) { + auto metaPtr = metaPtrList[index.row()]; + + /***********************绘制文字***************************/ + QString mtext; + if (metaPtr->artist.size() == 0) { + mtext = metaPtr->title; + } else { + mtext = metaPtr->title + " - " + metaPtr->artist; + } + QFontMetricsF fontWidth(textFont); + mtext = fontWidth.elidedText(mtext, Qt::ElideMiddle, 280); + + QStyleOptionViewItem viewOption(option); + initStyleOption(&viewOption, index); + if (option.state.testFlag(QStyle::State_HasFocus)) + viewOption.state = viewOption.state ^ QStyle::State_HasFocus; + QStyle *pStyle = viewOption.widget ? viewOption.widget->style() : QApplication::style(); + viewOption.text = ""; + pStyle->drawControl(QStyle::CE_ItemViewItem, &viewOption, painter, viewOption.widget); + + + QTextDocument document; + document.setPlainText(mtext); + bool found = false; + QTextCursor highlight_cursor(&document); + QTextCursor cursor(&document); + + cursor.beginEditBlock(); + QTextCharFormat color_format(highlight_cursor.charFormat()); + color_format.setForeground(lightColor); + + /*-------------LineUnderCursor-------------*/ + QTextCursor testcursor(&document); + testcursor.select(QTextCursor::LineUnderCursor); + QTextCharFormat fmt; + fmt.setForeground(textColor); + testcursor.mergeCharFormat(fmt); + testcursor.clearSelection(); + testcursor.movePosition(QTextCursor::EndOfLine); + + while (!highlight_cursor.isNull() && !highlight_cursor.atEnd()) { + highlight_cursor = document.find(searchText, highlight_cursor); + if (!highlight_cursor.isNull()) { + if (!found) + found = true; + highlight_cursor.mergeCharFormat(color_format); + } + } + cursor.endEditBlock(); + + QAbstractTextDocumentLayout::PaintContext paintContext; + QRect textRect(32, option.rect.y(), 287, 24); + painter->save(); + painter->translate(textRect.topLeft()); + painter->setClipRect(textRect.translated(-textRect.topLeft())); + document.documentLayout()->draw(painter, paintContext); + painter->restore(); + + } else { + auto playMusicTypePtr = playMusicTypePtrList[index.row()]; + /***********************绘制图片***************************/ + QPixmap image; + image.loadFromData(playMusicTypePtr->icon); + painter->save(); + QRect imageRect(32, index.row() * 35 + 4, 24, 24); + if (playlistPtr->id() == ArtistCandListID) { + QPainterPath clipPath; + clipPath.addEllipse(imageRect.adjusted(0, 0, 0, 0)); + painter->setClipPath(clipPath); + } else { + QPainterPath clipPath; + clipPath.addRoundedRect(imageRect, 4, 4); + painter->setClipPath(clipPath); + } + painter->drawPixmap(imageRect, image); + painter->restore(); + + QString mtext = playMusicTypePtr->name; + QFontMetricsF fontWidth(textFont); + mtext = fontWidth.elidedText(mtext, Qt::ElideMiddle, 251); + QStyleOptionViewItem viewOption(option); + initStyleOption(&viewOption, index); + if (option.state.testFlag(QStyle::State_HasFocus)) + viewOption.state = viewOption.state ^ QStyle::State_HasFocus; + QStyle *pStyle = viewOption.widget ? viewOption.widget->style() : QApplication::style(); + viewOption.text = ""; + pStyle->drawControl(QStyle::CE_ItemViewItem, &viewOption, painter, viewOption.widget); + + QTextDocument document; + document.setPlainText(mtext); + bool found = false; + QTextCursor highlight_cursor(&document); + QTextCursor cursor(&document); + + cursor.beginEditBlock(); + QTextCharFormat color_format(highlight_cursor.charFormat()); + + color_format.setForeground(lightColor); + + /*-------------LineUnderCursor-------------*/ + QTextCursor testcursor(&document); + testcursor.select(QTextCursor::LineUnderCursor); + QTextCharFormat fmt; + fmt.setForeground(textColor); + testcursor.mergeCharFormat(fmt); + testcursor.clearSelection(); + testcursor.movePosition(QTextCursor::EndOfLine); + + while (!highlight_cursor.isNull() && !highlight_cursor.atEnd()) { + highlight_cursor = document.find(searchText, highlight_cursor); + if (!highlight_cursor.isNull()) { + if (!found) + found = true; + highlight_cursor.mergeCharFormat(color_format); + } + } + cursor.endEditBlock(); + + QAbstractTextDocumentLayout::PaintContext paintContext; + QRect textRect(61, option.rect.y(), 251, 24); + painter->save(); + painter->translate(textRect.topLeft()); + painter->setClipRect(textRect.translated(-textRect.topLeft())); + document.documentLayout()->draw(painter, paintContext); + painter->restore(); + } +} + +QSize MusicSearchListDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + Q_UNUSED(option) + Q_UNUSED(index) + return QSize(350, 34); +} + +QWidget *MusicSearchListDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + return QStyledItemDelegate::createEditor(parent, option, index); +} + +void MusicSearchListDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const +{ + QStyledItemDelegate::setEditorData(editor, index); +} + +void MusicSearchListDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const +{ + QStyledItemDelegate::setModelData(editor, model, index); +} + +QString MusicSearchListDelegate::getElidedText(QFont font, QString str, int MaxWidth) +{ + if (str.isEmpty()) { + return ""; + } + QFontMetrics fontWidth(font); + int width = fontWidth.width(str); + if (width >= MaxWidth) { + //右部显示省略号 + str = fontWidth.elidedText(str, Qt::ElideRight, MaxWidth); + } + //返回处理后的字符串 + return str; +} + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/delegate/musicsearchlistdelegate.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/delegate/musicsearchlistdelegate.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/delegate/musicsearchlistdelegate.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/delegate/musicsearchlistdelegate.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2020 chengdu Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include +#include +#include + +class MusicSearchListDelegatePrivate; +class MusicSearchListDelegate : public QStyledItemDelegate +{ + Q_OBJECT +public: + MusicSearchListDelegate(QWidget *parent = Q_NULLPTR); + ~MusicSearchListDelegate() override; + + +signals: + void SearchClear() const; + +protected: + virtual void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const override; + + bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) override; + + void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; + + QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override; + + QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override; + + void setEditorData(QWidget *editor, const QModelIndex &index) const override; + + void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override; +private: + QString getElidedText(QFont font, QString str, int MaxWidth); + QScopedPointer d_ptr; + Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusicSearchListDelegate) +}; diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/delegate/playitemdelegate.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/delegate/playitemdelegate.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/delegate/playitemdelegate.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/delegate/playitemdelegate.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,623 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "playitemdelegate.h" +#include "playitemdelegate_p.h" + +#include +#include +#include +#include + +#include + +#include + +#include "../playlistview.h" +#include "core/medialibrary.h" + +DWIDGET_USE_NAMESPACE + +const int PlayItemLeftMargin = 15; +const int PlayItemRightMargin = 20; +const int PlayItemNumberMargin = 10; + +//static inline QString numberString(int row, const QStyleOptionViewItem &option) +//{ +// auto listview = qobject_cast(option.widget); +// auto itemCount = listview->model()->rowCount(); +// auto itemCountString = QString("%1").arg(itemCount); +// return QString("%1").arg(int(row), itemCountString.length(), 10, QChar('0')); +//} + +static inline int pixel2point(int pixel) +{ + return pixel * 96 / 72; +} + +inline int headerPointWidth(const QStyleOptionViewItem &option, const QModelIndex &index) +{ + QFont measuringFont(option.font); + QFontMetrics fm(measuringFont); + auto headerWith = fm.width(QString("%1").arg(index.row())); + return pixel2point(headerWith) + PlayItemLeftMargin + PlayItemNumberMargin; +} + +inline int tailPointWidth(const QStyleOptionViewItem &option) +{ + QFont measuringFont(option.font); + QFontMetrics fm(measuringFont); + return pixel2point(fm.width("00:00")) + PlayItemRightMargin; +} + +PlayItemDelegatePrivate::PlayItemDelegatePrivate(PlayItemDelegate *parent): + QWidget(nullptr), q_ptr(parent) +{ + setObjectName("PlayItemStyleProxy"); + shadowImg = DHiDPIHelper::loadNxPixmap(":/mpimage/light/shadow.svg"); + shadowImg = shadowImg.copy(5, 5, shadowImg.width() - 10, shadowImg.height() - 10); +} + +QColor PlayItemDelegatePrivate::textColor() const +{ + return m_textColor; +} +QColor PlayItemDelegatePrivate::titleColor() const +{ + return m_numberColor; +} +QColor PlayItemDelegatePrivate::highlightText() const +{ + return m_highlightText; +} +QColor PlayItemDelegatePrivate::background() const +{ + return m_background; +} +QColor PlayItemDelegatePrivate::alternateBackground() const +{ + return m_alternateBackground; +} +QColor PlayItemDelegatePrivate::highlightedBackground() const +{ + return m_highlightedBackground; +} + +QString PlayItemDelegatePrivate::playingIcon() const +{ + return m_aimationPrefix; +} + +QString PlayItemDelegatePrivate::highlightPlayingIcon() const +{ + return m_highlightPlayingIcon; +} +void PlayItemDelegatePrivate::setTextColor(QColor textColor) +{ + m_textColor = textColor; +} +void PlayItemDelegatePrivate::setTitleColor(QColor numberColor) +{ + m_numberColor = numberColor; +} +void PlayItemDelegatePrivate::setHighlightText(QColor highlightText) +{ + m_highlightText = highlightText; +} +void PlayItemDelegatePrivate::setBackground(QColor background) +{ + m_background = background; +} +void PlayItemDelegatePrivate::setAlternateBackground(QColor alternateBackground) +{ + m_alternateBackground = alternateBackground; +} +void PlayItemDelegatePrivate::setHighlightedBackground(QColor highlightedBackground) +{ + m_highlightedBackground = highlightedBackground; +} + +void PlayItemDelegatePrivate::setPlayingIcon(QString playingIcon) +{ + m_aimationPrefix = playingIcon; +} + +void PlayItemDelegatePrivate::setHighlightPlayingIcon(QString highlightPlayingIcon) +{ + m_highlightPlayingIcon = highlightPlayingIcon; +} + +QColor PlayItemDelegatePrivate::foreground(int col, const QStyleOptionViewItem &option) const +{ + if (option.state & QStyle::State_Selected) { + return highlightText(); + } + + auto emCol = static_cast(col); + switch (emCol) { + case PlayItemDelegate::Number: + case PlayItemDelegate::Artist: + case PlayItemDelegate::Album: + case PlayItemDelegate::Length: + return textColor(); + case PlayItemDelegate::Title: + return titleColor(); + case PlayItemDelegate::ColumnButt: + break; + } + return textColor(); +} + +inline int PlayItemDelegatePrivate::timePropertyWidth(const QStyleOptionViewItem &option) const +{ + static auto width = tailPointWidth(option); + return width; +} + +static inline QFlags alignmentFlag(int col) +{ + auto emCol = static_cast(col); + switch (emCol) { + case PlayItemDelegate::Number: + return Qt::AlignCenter; + case PlayItemDelegate::Title: + case PlayItemDelegate::Artist: + case PlayItemDelegate::Album: + return (Qt::AlignLeft | Qt::AlignVCenter); + case PlayItemDelegate::Length: + return (Qt::AlignRight | Qt::AlignVCenter); + case PlayItemDelegate::ColumnButt: + break; + } + return (Qt::AlignLeft | Qt::AlignVCenter);; +} + +static inline QRect colRect(int col, const QStyleOptionViewItem &option) +{ + static auto tailwidth = tailPointWidth(option) + 20; + auto w = option.rect.width() - 0 - tailwidth; + + auto emCol = static_cast(col); + switch (emCol) { + case PlayItemDelegate::Number: + return QRect(10, option.rect.y(), 40, option.rect.height()); + case PlayItemDelegate::Title: + return QRect(50, option.rect.y(), w / 2 - 20, option.rect.height()); + case PlayItemDelegate::Artist: + return QRect(50 + w / 2, option.rect.y(), w / 4 - 20, option.rect.height()); + case PlayItemDelegate::Album: + return QRect(50 + w / 2 + w / 4, option.rect.y(), w / 4 - 20, option.rect.height()); + case PlayItemDelegate::Length: + return QRect(w, option.rect.y(), tailwidth - 20, option.rect.height()); + case PlayItemDelegate::ColumnButt: + break; + } + return option.rect.marginsRemoved(QMargins(0, 0, 0, 0)); +} + + +void PlayItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, + const QModelIndex &index) const +{ + auto listview = qobject_cast(option.widget); + if (listview->viewMode() == QListView::IconMode) { + //QStyledItemDelegate::paint(painter, option, index); + + auto hash = index.data().toString(); + auto meta = MediaLibrary::instance()->meta(hash); + if(meta.isNull()) + return; + + painter->save(); + painter->setRenderHint(QPainter::Antialiasing); + painter->setRenderHint(QPainter::HighQualityAntialiasing); + painter->setRenderHint(QPainter::SmoothPixmapTransform); + + auto background = option.palette.background(); + + if (option.state & QStyle::State_Selected) { +// background = option.palette.highlight(); + } + + painter->fillRect(option.rect, background); + + //绘制阴影 + QRect shadowRect(option.rect.x() - 10, option.rect.y(), 168, 158); + QPainterPath roundRectShadowPath; + roundRectShadowPath.addRoundRect(shadowRect, 8, 8); + painter->save(); + painter->setClipPath(roundRectShadowPath); + painter->drawPixmap(shadowRect, d_ptr->shadowImg); + painter->restore(); + + //绘制圆角框 + QRect rect(option.rect.x(), option.rect.y(), 150, 200); + QPainterPath roundRectPath; + roundRectPath.addRoundRect(rect, 10, 10); + painter->setClipPath(roundRectPath); + + //绘制专辑图片 + auto icon = option.icon; + auto value = index.data(Qt::DecorationRole); + if (value.type() == QVariant::Icon) { + icon = qvariant_cast(value); + } + QRect pixmapRect(option.rect.x(), option.rect.y(), 150, 150); + painter->save(); + QPainterPath roundPixmapRectPath; + roundPixmapRectPath.addRoundRect(pixmapRect, 10, 10); + painter->setClipPath(roundPixmapRectPath); + painter->drawPixmap(pixmapRect, icon.pixmap(option.rect.width(), option.rect.width())); + + //绘制图片上添加描边 + painter->save(); + QColor borderPenColor("#000000"); + borderPenColor.setAlphaF(0.05); + QPen borderPen(borderPenColor); + borderPen.setWidthF(2); + painter->setPen(borderPen); + painter->drawRoundRect(pixmapRect/*.adjusted(1, 1, -1, 1)*/, 10, 10); + painter->restore(); + + painter->restore(); + + int startHeight = option.rect.y() + 159; + int fillAllHeight = 34; + + //设置信息字体大小 + QFont font = option.font; + font.setFamily("SourceHanSansSC"); + font.setWeight(QFont::Normal); + font.setPixelSize(13); + painter->setFont(font); + QFontMetrics fm(font); + QColor nameColor = "#000000"; + if (listview->getThemeType() == 2) { + nameColor = "#C0C6D4"; + } + painter->setPen(nameColor); + QRect nameFillRect(option.rect.x(), startHeight - 5, option.rect.width(), fm.height()); + nameFillRect.adjust(8, 0, -7, 0); + auto nameText = fm.elidedText(meta->title, Qt::ElideRight, 125); + painter->drawText(nameFillRect, Qt::AlignLeft | Qt::AlignTop, nameText); + + font.setPixelSize(11); + QFontMetrics extraNameFm(font); + painter->setFont(font); + nameColor.setAlphaF(0.6); + painter->setPen(nameColor); + QRect extraNameFillRect(option.rect.x(), startHeight + fillAllHeight / 2, 99, fm.height()); + extraNameFillRect.adjust(8, 0, -7, 0); + auto extraNameText = extraNameFm.elidedText(meta->artist, Qt::ElideRight, 84); + painter->drawText(extraNameFillRect, Qt::AlignLeft | Qt::AlignTop, extraNameText); + + //draw time + QRect timeFillRect(option.rect.x() + 102, startHeight + 17, 38, 16); + painter->save(); + QColor timeFillColor("#232323"); + timeFillColor.setAlphaF(0.3); + if (listview->getThemeType() == 2) { + timeFillColor = "#DCDCDC"; + timeFillColor.setAlphaF(0.3); + } + painter->setPen(Qt::NoPen); + painter->setBrush(timeFillColor); + painter->drawRoundedRect(timeFillRect, 8, 8); + painter->restore(); + + font.setPixelSize(10); + painter->setFont(font); + QColor timedColor = Qt::white; + if (listview->getThemeType() == 2) { + timedColor = "#C0C6D4"; + } + painter->setPen(timedColor); + auto timeText = fm.elidedText(DMusic::lengthString(meta->length), Qt::ElideRight, 38); + painter->drawText(timeFillRect, Qt::AlignHCenter | Qt::AlignTop, timeText); + + QBrush t_fillBrush(QColor(128, 128, 128, 0)); + if (option.state & QStyle::State_Selected) { + t_fillBrush = QBrush(QColor(128, 128, 128, 90)); + } + painter->save(); + painter->setClipPath(roundPixmapRectPath); + painter->fillRect(pixmapRect, t_fillBrush); + painter->restore(); + + painter->restore(); + + return; + } + + //Q_D(const PlayItemDelegate); + + painter->save(); + + QFont font11 = option.font; + font11.setFamily("SourceHanSansSC"); + font11.setWeight(QFont::Normal); + font11.setPixelSize(11); + QFont font14 = option.font; + font14.setFamily("SourceHanSansSC"); + font14.setWeight(QFont::Normal); + font14.setPixelSize(14); + + painter->setRenderHint(QPainter::Antialiasing); + painter->setRenderHint(QPainter::HighQualityAntialiasing); + painter->setRenderHint(QPainter::SmoothPixmapTransform); + + QColor baseColor("#FFFFFF"); + baseColor.setAlphaF(0.1); + QColor alternateBaseColor("#000000"); + alternateBaseColor.setAlphaF(0.02); + QColor selecteColor("#000000"); + selecteColor.setAlphaF(0.20); + if (listview->getThemeType() == 2) { + baseColor.setAlphaF(0.05); + alternateBaseColor.setAlphaF(0.05); + selecteColor = QColor("#FFFFFF"); + selecteColor.setAlphaF(0.20); + } + + auto background = (index.row() % 2) == 1 ? baseColor : alternateBaseColor; + //auto background = baseColor; + + int lrWidth = 10; + if (!(option.state & QStyle::State_Selected) && !(option.state & QStyle::State_MouseOver) ) { + painter->save(); + painter->setPen(Qt::NoPen); + painter->setBrush(background); + //painter->drawRect(option.rect); + QRect selecteColorRect = option.rect.adjusted(lrWidth, 0, -lrWidth, 0); + painter->drawRoundedRect(selecteColorRect, 8, 8); + painter->restore(); + } + + QColor nameColor("#090909"), otherColor("#000000"); + otherColor.setAlphaF(0.5); + if (listview->getThemeType() == 2) { + nameColor = QColor("#C0C6D4"); + otherColor = QColor("#C0C6D4"); + otherColor.setAlphaF(0.6); + } + + auto hash = index.data().toString(); + auto meta = MediaLibrary::instance()->meta(hash); + if (meta.isNull()) { + QString msg = "can not find " + hash; + qWarning() << msg; + return; +// qFatal(msg.toStdString().c_str()); + } + + auto activeMeta = listview->activingMeta(); + if (activeMeta == meta) { + nameColor = QColor("#2CA7F8"); + otherColor = QColor("#2CA7F8"); + font14.setFamily("SourceHanSansSC"); + font14.setWeight(QFont::Medium); + } + + if (option.state & QStyle::State_Selected) { + painter->save(); + painter->setPen(Qt::NoPen); +// QColor selectColor("#000000"); +// if (listview->getThemeType() == 2) { +// selectColor = QColor("#FFFFFF"); +// } +// selectColor.setAlphaF(0.2); + QColor selectColor(option.palette.highlight().color()); + painter->setBrush(selectColor); + QRect selecteColorRect = option.rect.adjusted(lrWidth, 0, -lrWidth, 0); + painter->drawRoundedRect(selecteColorRect, 8, 8); + painter->restore(); + + nameColor = option.palette.highlightedText().color(); + otherColor = option.palette.highlightedText().color(); + }/* else if ((index.row() % 2) == 0) { + painter->save(); + painter->setPen(Qt::NoPen); + painter->setBrush(alternateBaseColor); + QRect selecteColorRect = option.rect.adjusted(5, 0, -5, 0); + painter->drawRoundedRect(selecteColorRect, 8, 8); + painter->restore(); + }*/ + + if (option.state & QStyle::State_MouseOver) { + painter->save(); + painter->setPen(Qt::NoPen); + QColor hovertColor(option.palette.shadow().color()); + if (option.state & QStyle::State_Selected) + hovertColor.setAlphaF(0.2); + painter->setBrush(hovertColor); + QRect selecteColorRect = option.rect.adjusted(lrWidth, 0, -lrWidth, 0); + painter->drawRoundedRect(selecteColorRect, 8, 8); + painter->restore(); + } + + int rowCount = listview->model()->rowCount(); + auto rowCountSize = QString::number(rowCount).size(); + rowCountSize = qMax(rowCountSize, 2); + + for (int col = 0; col < ColumnButt; ++col) { + auto flag = alignmentFlag(col); + auto rect = colRect(col, option); + switch (col) { + case Number: { + painter->setPen(otherColor); + auto *listview = qobject_cast(const_cast(option.widget)); + // Fixme: + if (!meta.isNull() && meta->invalid) { + auto sz = QSizeF(15, 15); + auto icon = QIcon(":/mpimage/light/warning.svg").pixmap(sz.toSize()); + auto centerF = QRectF(rect).center(); + auto iconRect = QRectF(centerF.x() - sz.width() / 2, + centerF.y() - sz.height() / 2, + sz.width(), sz.height()); + painter->drawPixmap(iconRect, icon, QRectF()); + break; + } + + if (activeMeta == meta) { + auto icon = listview->getPlayPixmap(); + if (option.state & QStyle::State_Selected) { + icon = listview->getAlbumPixmap(); + } + auto centerF = QRectF(rect).center(); + qreal t_ratio = icon.devicePixelRatioF(); + QRect t_ratioRect; + t_ratioRect.setX(0); + t_ratioRect.setY(0); + t_ratioRect.setWidth(static_cast(icon.width() / t_ratio)); + t_ratioRect.setHeight(static_cast(icon.height() / t_ratio)); + auto iconRect = QRectF(centerF.x() - t_ratioRect.width() / 2, + centerF.y() - t_ratioRect.height() / 2, + t_ratioRect.width(), t_ratioRect.height()); + painter->drawPixmap(iconRect.toRect(), icon); + + } else { + painter->setFont(font11); + auto str = QString("%1").arg(index.row() + 1, rowCountSize, 10, QLatin1Char('0')); + QFont font(font11); + QFontMetrics fm(font); + auto text = fm.elidedText(str, Qt::ElideMiddle, rect.width()); + painter->drawText(rect, static_cast(flag), text); + } + break; + } + case Title: { + painter->setPen(nameColor); + painter->setFont(font14); + QFont font(font14); + QFontMetrics fm(font); + auto text = fm.elidedText(meta->title, Qt::ElideMiddle, rect.width()); + painter->drawText(rect, static_cast(flag), text); + break; + } + case Artist: { + painter->setPen(otherColor); + painter->setFont(font11); + auto str = meta->artist.isEmpty() ? + PlayListView::tr("Unknown artist") : + meta->artist; + QFont font(font11); + QFontMetrics fm(font); + auto text = fm.elidedText(str, Qt::ElideMiddle, rect.width()); + painter->drawText(rect, static_cast(flag), text); + break; + } + case Album: { + painter->setPen(otherColor); + painter->setFont(font11); + auto str = meta->album.isEmpty() ? + PlayListView::tr("Unknown album") : + meta->album; + QFont font(font11); + QFontMetrics fm(font); + auto text = fm.elidedText(str, Qt::ElideMiddle, rect.width()); + painter->drawText(rect, static_cast(flag), text); + break; + } + case Length: + painter->setPen(otherColor); + painter->setFont(font11); + painter->drawText(rect, static_cast(flag), DMusic::lengthString(meta->length)); + break; + default: + break; + } + } + painter->restore(); +} + +QSize PlayItemDelegate::sizeHint(const QStyleOptionViewItem &option, + const QModelIndex &index) const +{ + //Q_D(const PlayItemDelegate); + auto listview = qobject_cast(option.widget); + if (listview->viewMode() == QListView::IconMode) { + return QSize(150, 200); + } + return QStyledItemDelegate::sizeHint(option, index); + +// auto listview = qobject_cast(option.widget); +// if (listview->viewMode() == QListView::IconMode) { +// return QStyledItemDelegate::sizeHint(option, index); +// } + +// auto baseSize = QStyledItemDelegate::sizeHint(option, index); +// return QSize(baseSize.width() / 5, baseSize.height()); +//// auto headerWidth = headerPointWidth(option, index); +// auto headerWidth = 17 + 10 + 10 + 4; +// auto tialWidth = d->timePropertyWidth(option); +// auto w = option.widget->width() - headerWidth - tialWidth; +// Q_ASSERT(w > 0); +// switch (index.column()) { +// case 0: +// return QSize(headerWidth, baseSize.height()); +// case 1: +// return QSize(w / 2, baseSize.height()); +// case 2: +// case 3: +// return QSize(w / 4, baseSize.height()); +// case 4: +// return QSize(tialWidth, baseSize.height()); +// } + +// return baseSize; +} + +QWidget *PlayItemDelegate::createEditor(QWidget *parent, + const QStyleOptionViewItem &option, + const QModelIndex &index) const + +{ + return QStyledItemDelegate::createEditor(parent, option, index); +} + +void PlayItemDelegate::setEditorData(QWidget *editor, + const QModelIndex &index) const +{ + QStyledItemDelegate::setEditorData(editor, index); +} + +void PlayItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, + const QModelIndex &index) const +{ + QStyledItemDelegate::setModelData(editor, model, index); +} + +PlayItemDelegate::PlayItemDelegate(QWidget *parent) + : QStyledItemDelegate(parent), d_ptr(new PlayItemDelegatePrivate(this)) +{ + +} + +PlayItemDelegate::~PlayItemDelegate() +{ +} + +void PlayItemDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const +{ +// Q_D(const PlayItemDelegate); + QStyledItemDelegate::initStyleOption(option, index); + option->state = option->state & ~QStyle::State_HasFocus; +} diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/delegate/playitemdelegate.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/delegate/playitemdelegate.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/delegate/playitemdelegate.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/delegate/playitemdelegate.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include + +DWIDGET_USE_NAMESPACE + +class PlayItemDelegatePrivate; +class PlayItemDelegate : public QStyledItemDelegate +{ + Q_OBJECT +public: + enum MusicColumn { + Number = 0, + Title, + Artist, + Album, + Length, + + ColumnButt, + }; + Q_ENUM(MusicColumn) + + enum MusicItemDataRole { + PlayStatusRole = Qt::UserRole + 100, + }; + Q_ENUM(MusicItemDataRole) + + enum PlayStatus { + Playing = 0x0098, + Strop, + }; + Q_ENUM(PlayStatus) + + PlayItemDelegate(QWidget *parent = Q_NULLPTR); + ~PlayItemDelegate(); + +public: + virtual void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const; + void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; + QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; + QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; + void setEditorData(QWidget *editor, const QModelIndex &index) const; + void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const; + +private: + QScopedPointer d_ptr; + Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), PlayItemDelegate) +}; + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/delegate/playitemdelegate_p.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/delegate/playitemdelegate_p.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/delegate/playitemdelegate_p.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/delegate/playitemdelegate_p.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include + +class PictureSequenceView; +class QStyleOptionViewItem; +class PlayItemDelegate; +class PlayItemDelegatePrivate : public QWidget +{ + Q_OBJECT + Q_PROPERTY(QColor textColor READ textColor WRITE setTextColor) + Q_PROPERTY(QColor titleColor READ titleColor WRITE setTitleColor) + Q_PROPERTY(QColor highlightText READ highlightText WRITE setHighlightText) + Q_PROPERTY(QColor background READ background WRITE setBackground) + Q_PROPERTY(QColor alternateBackground READ alternateBackground WRITE setAlternateBackground) + Q_PROPERTY(QColor highlightedBackground READ highlightedBackground WRITE setHighlightedBackground) + Q_PROPERTY(QString playingIcon READ playingIcon WRITE setPlayingIcon) + Q_PROPERTY(QString highlightPlayingIcon READ highlightPlayingIcon WRITE setHighlightPlayingIcon) + +public: + int tialWidth = -1; + + explicit PlayItemDelegatePrivate(PlayItemDelegate *parent = nullptr); + + inline QColor foreground(int col, const QStyleOptionViewItem &option) const; + inline int timePropertyWidth(const QStyleOptionViewItem &option) const; + + QColor textColor() const; + QColor titleColor() const; + QColor highlightText() const; + QColor background() const; + QColor alternateBackground() const; + QColor highlightedBackground() const; + QString playingIcon() const; + QString highlightPlayingIcon() const; + +public slots: + void setTextColor(QColor textColor); + void setTitleColor(QColor titleColor); + void setHighlightText(QColor highlightText); + void setBackground(QColor background); + void setAlternateBackground(QColor alternateBackground); + void setHighlightedBackground(QColor highlightedBackground); + void setPlayingIcon(QString playingIcon); + void setHighlightPlayingIcon(QString highlightPlayingIcon); + +private: + QColor m_textColor; + QColor m_numberColor; + QColor m_highlightText; + QColor m_background; + QColor m_alternateBackground; + QColor m_highlightedBackground; + QString m_aimationPrefix = ":/mpimage/light/music1.svg"; + QString m_highlightPlayingIcon = ":/mpimage/light/music1.svg"; + QPixmap shadowImg; + + PlayItemDelegate *q_ptr; + Q_DECLARE_PUBLIC(PlayItemDelegate) +}; diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/dequalizerdialog.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/dequalizerdialog.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/dequalizerdialog.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/dequalizerdialog.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,734 @@ +#include "dequalizerdialog.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + + +class CustomTabStyle : public QProxyStyle +{ +public: + QSize sizeFromContents(ContentsType type, const QStyleOption *option, + const QSize &size, const QWidget *widget) const + { + QSize s = QProxyStyle::sizeFromContents(type, option, size, widget); + if (type == QStyle::CT_TabBarTab) { + s.transpose(); + s.rwidth() = 144; // 设置每个tabBar中item的大小 + s.rheight() = 30; + } + return s; + } + + void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const + { + if (element == CE_TabBarTabLabel) { + if (const QStyleOptionTab *tab = qstyleoption_cast(option)) { + + if (tab->state & QStyle::State_Selected) { + painter->save(); + painter->setPen(0x89cfff); + painter->setBrush(QBrush(0x89cfff)); + painter->restore(); + } + QTextOption option; + option.setAlignment(Qt::AlignCenter); + if (tab->state & QStyle::State_Selected) { + painter->setPen(0xf8fcff); + } else { + painter->setPen(0x5d5d5d); + } + + painter->drawText(tab->rect, tab->text, option); + return; + } + } + + if (element == CE_TabBarTab) { + QProxyStyle::drawControl(element, option, painter, widget); + } + } +}; + +DWIDGET_USE_NAMESPACE +class DequalizerDialogPrivate +{ +public: + DequalizerDialogPrivate(DequalizerDialog *parent) : q_ptr(parent) {} + void readConfig(); + void initUI(); + void SliderOneEntry(DSlider *slider, int value); + +private: + DTitlebar *mtitlebar = nullptr; + DSwitchButton *mswitchBtn = nullptr; + DComboBox *mcombox = nullptr; + DPushButton *saveBtn = nullptr; + + DLabel *mtitleLabel = nullptr; + DLabel *mswitchLabel = nullptr; + DLabel *lb_baud_pre = nullptr; + DLabel *lb_baud_60 = nullptr; + DLabel *lb_baud_170 = nullptr; + DLabel *lb_baud_310 = nullptr; + DLabel *lb_baud_600 = nullptr; + DLabel *lb_baud_1K = nullptr; + DLabel *lb_baud_3K = nullptr; + DLabel *lb_baud_6K = nullptr; + DLabel *lb_baud_12K = nullptr; + DLabel *lb_baud_14K = nullptr; + DLabel *lb_baud_16K = nullptr; + + DSlider *slider_pre = nullptr; + DSlider *slider_60 = nullptr; + DSlider *slider_170 = nullptr; + DSlider *slider_310 = nullptr; + DSlider *slider_600 = nullptr; + DSlider *slider_1K = nullptr; + DSlider *slider_3K = nullptr; + DSlider *slider_6K = nullptr; + DSlider *slider_12K = nullptr; + DSlider *slider_14K = nullptr; + DSlider *slider_16K = nullptr; + DPushButton *btn_default = nullptr; + DFloatingMessage *saveMessage = nullptr; + + QStringList effect_type = { DequalizerDialog::tr("Custom") + , DequalizerDialog::tr("Monophony") + , DequalizerDialog::tr("Classical") + , DequalizerDialog::tr("Club") + , DequalizerDialog::tr("Dance") + , DequalizerDialog::tr("Full Bass") + , DequalizerDialog::tr("Full Bass and Treble") + , DequalizerDialog::tr("Full Treble") + , DequalizerDialog::tr("Headphones") + , DequalizerDialog::tr("Hall") + , DequalizerDialog::tr("Live") + , DequalizerDialog::tr("Party") + , DequalizerDialog::tr("Pop") + , DequalizerDialog::tr("Reggae") + , DequalizerDialog::tr("Rock") + , DequalizerDialog::tr("Ska") + , DequalizerDialog::tr("Soft") + , DequalizerDialog::tr("Soft Rock") + , DequalizerDialog::tr("Techno") + }; + QList BaudList; + + MusicSettings *settings = nullptr; + + + bool switchflag = false; + bool changeflag = false; + int curEffect = 0; + + int flat_bauds[11] = {12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + int Classical_bauds[11] = {12, 0, 0, 0, 0, 0, 0, -7, -7, -7, -9}; + int Club_bauds[11] = {6, 0, 0, 8, 5, 5, 5, 3, 0, 0, 0}; + int Dance_bauds[11] = {5, 9, 7, 2, 0, 0, -5, -7, -7, 0, 0}; + int Full_bass_bauds[11] = {5, -8, 9, 9, 5, 1, -4, -8, -10, -11, -11}; + int Full_bass_and_treble_bauds[11] = {4, 7, 5, 0, -7, -4, 1, 8, 11, 12, 12}; + int Full_treble_bauds[11] = {3, -9, -9, -9, -4, 2, 11, 16, 16, 16, 16}; + int Headphones_bauds[11] = {4, 4, 11, 5, -3, -2, 1, 4, 9, 12, 14}; + int Large_Hall_bauds[11] = {5, 10, 10, 5, 5, 0, -4, -4, -4, 0, 0}; + int Live_bauds[11] = {7, -4, 0, 4, 5, 5, 5, 4, 2, 2, 2}; + int Party_bauds[11] = {6, 7, 7, 0, 0, 0, 0, 0, 0, 7, 7}; + int Pop_bauds[11] = {6, -1, 4, 7, 8, 5, 0, -2, -2, -1, -1}; + int Reggae_bauds[11] = {8, 0, 0, 0, -5, 0, 6, 6, 0, 0, 0}; + int Rock_bauds[11] = {5, 8, 4, -5, -8, -3, 4, 8, 11, 11, 11}; + int Ska_bauds[11] = {6, -2, -4, -4, 0, 4, 5, 8, 9, 11, 9}; + int Soft_bauds[11] = {5, 4, 1, 0, -2, 0, 4, 8, 9, 11, 12}; + int Soft_rock_bauds[11] = {7, 4, 4, 2, 0, -4, -5, -3, 0, 2, 8}; + int Techno_bauds[11] = {5, 8, 5, 0, -5, -4, 0, 8, 9, 9, 8}; + + QList AllbaudTypes; + //slidergroup + DBlurEffectWidget *slWidget = nullptr; + DequalizerDialog *q_ptr; + + Q_DECLARE_PUBLIC(DequalizerDialog) +}; + +//开机后默认参数设置 +void DequalizerDialogPrivate::readConfig() +{ +// Q_Q(DequalizerDialog); + switchflag = settings->value("equalizer.all.switch").toBool(); + curEffect = settings->value("equalizer.all.curEffect").toInt(); + +} + +void DequalizerDialogPrivate::initUI() +{ + Q_Q(DequalizerDialog); + + q->resize(720, 463); + + QFont font; + font.setFamily("SourceHanSansSC"); + font.setWeight(QFont::Normal); + font.setPixelSize(17); + mtitleLabel = new DLabel(DequalizerDialog::tr("Equalizer")); + mtitleLabel->resize(51, 25); + mtitleLabel->setFont(font); + + mswitchLabel = new DLabel; + mswitchLabel->resize(14, 20); + if (switchflag) { + mswitchLabel->setText(DequalizerDialog::tr("ON")); + } else { + mswitchLabel->setText(DequalizerDialog::tr("OFF")); + } + + mswitchBtn = new DSwitchButton(q); + mswitchBtn->resize(50, 20); +// //设置底色 +// DPalette sw; +// sw.setColor(DPalette::Button,QColor("#000000")); +// mswitchBtn->setPalette(sw); + + mcombox = new DComboBox(q); + mcombox->setMinimumSize(240, 36); + mcombox->addItems(effect_type); + + + saveBtn = new DPushButton(q); + saveBtn->setMinimumSize(110, 36); + saveBtn->setText(DequalizerDialog::tr("Save")); + + lb_baud_pre = new DLabel(q); + lb_baud_pre->setMaximumWidth(20); + lb_baud_pre->setMinimumHeight(22); + lb_baud_pre->setAlignment(Qt::AlignCenter); + slider_pre = new DSlider(Qt::Vertical); + slider_pre->setObjectName("baud_pre"); + slider_pre->setMinimum(-20); + slider_pre->setMaximum(20); + slider_pre->setPageStep(1); + auto lb_preamplifier = new DLabel(DequalizerDialog::tr("Preamplifier")); + lb_preamplifier->setAlignment(Qt::AlignCenter); + + lb_baud_60 = new DLabel(q); + lb_baud_60->setMaximumWidth(20); + lb_baud_60->setMinimumHeight(22); + lb_baud_60->setAlignment(Qt::AlignCenter); + slider_60 = new DSlider(Qt::Vertical); + slider_60->setObjectName("baud_60"); + slider_60->setMinimum(-20); + slider_60->setMaximum(20); + slider_60->setPageStep(1); + auto lb_60 = new DLabel("60"); + + lb_baud_170 = new DLabel(q); + lb_baud_170->setMaximumWidth(20); + lb_baud_170->setMinimumHeight(22); + lb_baud_170->setAlignment(Qt::AlignCenter); + slider_170 = new DSlider(Qt::Vertical); + slider_170->setObjectName("baud_170"); + slider_170->setMinimum(-20); + slider_170->setMaximum(20); + slider_170->setPageStep(1); + auto lb_170 = new DLabel("170"); + + lb_baud_310 = new DLabel(q); + lb_baud_310->setMaximumWidth(20); + lb_baud_310->setMinimumHeight(22); + lb_baud_310->setAlignment(Qt::AlignCenter); + slider_310 = new DSlider(Qt::Vertical); + slider_310->setObjectName("baud_310"); + slider_310->setMinimum(-20); + slider_310->setMaximum(20); + slider_310->setPageStep(1); + auto lb_310 = new DLabel("310"); + + lb_baud_600 = new DLabel(q); + lb_baud_600->setMaximumWidth(20); + lb_baud_600->setMinimumHeight(22); + lb_baud_600->setAlignment(Qt::AlignCenter); + slider_600 = new DSlider(Qt::Vertical); + slider_600->setObjectName("baud_600"); + slider_600->setMinimum(-20); + slider_600->setMaximum(20); + slider_600->setPageStep(1); + auto lb_600 = new DLabel("600"); + + lb_baud_1K = new DLabel(q); + lb_baud_1K->setMaximumWidth(20); + lb_baud_1K->setMinimumHeight(22); + lb_baud_1K->setAlignment(Qt::AlignCenter); + slider_1K = new DSlider(Qt::Vertical); + slider_1K->setObjectName("baud_1K"); + slider_1K->setMinimum(-20); + slider_1K->setMaximum(20); + slider_1K->setPageStep(1); + auto lb_1K = new DLabel("1K"); + + lb_baud_3K = new DLabel(q); + lb_baud_3K->setMaximumWidth(20); + lb_baud_3K->setMinimumHeight(22); + lb_baud_3K->setAlignment(Qt::AlignCenter); + slider_3K = new DSlider(Qt::Vertical); + slider_3K->setObjectName("baud_3K"); + slider_3K->setMinimum(-20); + slider_3K->setMaximum(20); + slider_3K->setPageStep(1); + auto lb_3K = new DLabel("3K"); + + lb_baud_6K = new DLabel(q); + lb_baud_6K->setMaximumWidth(20); + lb_baud_6K->setMinimumHeight(22); + lb_baud_6K->setAlignment(Qt::AlignCenter); + slider_6K = new DSlider(Qt::Vertical); + slider_6K->setObjectName("baud_6K"); + slider_6K->setMinimum(-20); + slider_6K->setMaximum(20); + slider_6K->setPageStep(1); + auto lb_6K = new DLabel("6K"); + + lb_baud_12K = new DLabel(q); + lb_baud_12K->setMaximumWidth(20); + lb_baud_12K->setMinimumHeight(22); + lb_baud_12K->setAlignment(Qt::AlignCenter); + slider_12K = new DSlider(Qt::Vertical); + slider_12K->setObjectName("baud_12K"); + slider_12K->setMinimum(-20); + slider_12K->setMaximum(20); + slider_12K->setPageStep(1); + auto lb_12K = new DLabel("12K"); + + lb_baud_14K = new DLabel(q); + lb_baud_14K->setMaximumWidth(20); + lb_baud_14K->setMinimumHeight(22); + lb_baud_14K->setAlignment(Qt::AlignCenter); + slider_14K = new DSlider(Qt::Vertical); + slider_14K->setObjectName("baud_14K"); + slider_14K->setMinimum(-20); + slider_14K->setMaximum(20); + slider_14K->setPageStep(1); + auto lb_14K = new DLabel("14K"); + + lb_baud_16K = new DLabel(q); + lb_baud_16K->setMaximumWidth(20); + lb_baud_16K->setMinimumHeight(22); + lb_baud_16K->setAlignment(Qt::AlignCenter); + slider_16K = new DSlider(Qt::Vertical); + slider_16K->setObjectName("baud_16K"); + slider_16K->setMinimum(-20); + slider_16K->setMaximum(20); + slider_16K->setPageStep(1); + auto lb_16K = new DLabel("16K"); + + btn_default = new DPushButton(DequalizerDialog::tr("Restore Defaults")); + btn_default->setMinimumSize(240, 36); + + auto vlayout0 = new QVBoxLayout; + auto vlayout1 = new QVBoxLayout; + auto vlayout2 = new QVBoxLayout; + auto vlayout3 = new QVBoxLayout; + auto vlayout4 = new QVBoxLayout; + auto vlayout5 = new QVBoxLayout; + auto vlayout6 = new QVBoxLayout; + auto vlayout7 = new QVBoxLayout; + auto vlayout8 = new QVBoxLayout; + auto vlayout9 = new QVBoxLayout; + auto vlayout10 = new QVBoxLayout; + + vlayout0->addWidget(lb_baud_pre); + vlayout0->addWidget(slider_pre); + vlayout0->addWidget(lb_preamplifier); + + vlayout1->addWidget(lb_baud_60); + vlayout1->addWidget(slider_60); + vlayout1->addWidget(lb_60); + + vlayout2->addWidget(lb_baud_170); + vlayout2->addWidget(slider_170); + vlayout2->addWidget(lb_170); + + vlayout3->addWidget(lb_baud_310); + vlayout3->addWidget(slider_310); + vlayout3->addWidget(lb_310); + + vlayout4->addWidget(lb_baud_600); + vlayout4->addWidget(slider_600); + vlayout4->addWidget(lb_600); + + vlayout5->addWidget(lb_baud_1K); + vlayout5->addWidget(slider_1K); + vlayout5->addWidget(lb_1K); + + vlayout6->addWidget(lb_baud_3K); + vlayout6->addWidget(slider_3K); + vlayout6->addWidget(lb_3K); + + vlayout7->addWidget(lb_baud_6K); + vlayout7->addWidget(slider_6K); + vlayout7->addWidget(lb_6K); + + vlayout8->addWidget(lb_baud_12K); + vlayout8->addWidget(slider_12K); + vlayout8->addWidget(lb_12K); + + vlayout9->addWidget(lb_baud_14K); + vlayout9->addWidget(slider_14K); + vlayout9->addWidget(lb_14K); + + vlayout10->addWidget(lb_baud_16K); + vlayout10->addWidget(slider_16K); + vlayout10->addWidget(lb_16K); + + auto hlayout = new QHBoxLayout; + hlayout->addLayout(vlayout0); + hlayout->addLayout(vlayout1); + hlayout->addLayout(vlayout2); + hlayout->addLayout(vlayout3); + hlayout->addLayout(vlayout4); + hlayout->addLayout(vlayout5); + hlayout->addLayout(vlayout6); + hlayout->addLayout(vlayout7); + hlayout->addLayout(vlayout8); + hlayout->addLayout(vlayout9); + hlayout->addLayout(vlayout10); + hlayout->setSpacing(5); + + slWidget = new DBlurEffectWidget; + slWidget->setBlurRectXRadius(8); + slWidget->setBlurRectYRadius(8); + slWidget->setRadius(8); + slWidget->setBlurEnabled(true); + slWidget->setMode(DBlurEffectWidget::GaussianBlur); + slWidget->setMinimumWidth(517); + slWidget->setMinimumHeight(264); + slWidget->setLayout(hlayout); + slWidget->setContentsMargins(10, 10, 9, 20); + + auto vlay = new QVBoxLayout; + //第一行 + vlay->addWidget(mtitleLabel); + //第二行 + auto hlay = new QHBoxLayout; + hlay->addWidget(mswitchLabel, Qt::AlignLeft); + hlay->addWidget(mswitchBtn, Qt::AlignLeft); + hlay->addWidget(mcombox, 20, Qt::AlignCenter); + hlay->addWidget(saveBtn, Qt::AlignRight); + + //第三行 + vlay->addLayout(hlay); + vlay->addStretch(2); + vlay->addWidget(slWidget); + vlay->addWidget(btn_default, 0, Qt::AlignCenter); + vlay->setContentsMargins(20, 10, 20, 20); + + //均衡器页面 + auto mequalizer = new DWidget(q); + mequalizer->resize(537, 393); + mequalizer->setLayout(vlay); + + auto mtabwidget = new DTabWidget; + mtabwidget->setTabPosition(QTabWidget::West); + mtabwidget->setAutoFillBackground(true); + mtabwidget->setDocumentMode(true); + mtabwidget->resize(720, 463); + mtabwidget->addTab(mequalizer, DequalizerDialog::tr("Equalizer")); + mtabwidget->tabBar()->setStyle(new CustomTabStyle); + mtabwidget->tabBar()->setContentsMargins(10, 0, 10, 0); + + auto mTitlebar = new DTitlebar(q); + mTitlebar->setTitle(""); + mTitlebar->resize(720, 50); + + //垂直布局TabWidget和TitleBar + auto mlayout = new QVBoxLayout; + mlayout->addWidget(mTitlebar); + mlayout->addWidget(mtabwidget); + mlayout->setSpacing(0); + mlayout->setMargin(0); + q->setLayout(mlayout); + + AllbaudTypes.append(flat_bauds); + AllbaudTypes.append(Classical_bauds); + AllbaudTypes.append(Club_bauds); + AllbaudTypes.append(Dance_bauds); + AllbaudTypes.append(Full_bass_bauds); + AllbaudTypes.append(Full_bass_and_treble_bauds); + AllbaudTypes.append(Full_treble_bauds); + AllbaudTypes.append(Headphones_bauds); + AllbaudTypes.append(Large_Hall_bauds); + AllbaudTypes.append(Live_bauds); + AllbaudTypes.append(Party_bauds); + AllbaudTypes.append(Pop_bauds); + AllbaudTypes.append(Reggae_bauds); + AllbaudTypes.append(Rock_bauds); + AllbaudTypes.append(Ska_bauds); + AllbaudTypes.append(Soft_bauds); + AllbaudTypes.append(Soft_rock_bauds); + AllbaudTypes.append(Techno_bauds); + + mswitchBtn->setChecked(switchflag); + mcombox->setEnabled(switchflag); + saveBtn->setEnabled(switchflag); + + for (DSlider *slider : q->findChildren()) { + slider->setAttribute(Qt::WA_Hover, true); //开启悬停事件 + slider->installEventFilter(q); //安装事件过滤器 + slider->setEnabled(switchflag); + } + if (curEffect != 0) { + q->showCurMode(AllbaudTypes.at(curEffect - 1)); + mcombox->setCurrentIndex(curEffect); + } else { + q->showCustom(); + } +} + +void DequalizerDialogPrivate::SliderOneEntry(DSlider *slider, int value) +{ + Q_Q(DequalizerDialog); + q->selectSlider(slider, QString::number(value)); + if (slider == slider_pre) { + Q_EMIT q->setEqualizerpre(value); + } else { + int bandIndex = -1; + if (slider == slider_60) { + bandIndex = 0; + } else if (slider == slider_170) { + bandIndex = 1; + } else if (slider == slider_310) { + bandIndex = 2; + } else if (slider == slider_600) { + bandIndex = 3; + } else if (slider == slider_1K) { + bandIndex = 4; + } else if (slider == slider_3K) { + bandIndex = 5; + } else if (slider == slider_6K) { + bandIndex = 6; + } else if (slider == slider_12K) { + bandIndex = 7; + } else if (slider == slider_14K) { + bandIndex = 8; + } else if (slider == slider_16K) { + bandIndex = 9; + } + if (bandIndex == -1) { + return; + } + Q_EMIT q->setEqualizerbauds(bandIndex, value); + } +} + + +DequalizerDialog::DequalizerDialog(QWidget *parent): + DAbstractDialog(parent), d_ptr(new DequalizerDialogPrivate(this)) +{ + Q_D(DequalizerDialog); + d->readConfig(); + d->initUI(); + initConnection(); + QFont font; + font.setPixelSize(13); + QFontMetrics fm(font); + d->saveMessage = new DFloatingMessage(DFloatingMessage::TransientType, this); + d->saveMessage->setFont(font); + d->saveMessage->setIcon(QIcon(":/common/image/notify_success_new.svg")); + d->saveMessage->setMessage(tr("Sound Effects Saved")); + int Minwid = fm.width(tr("Sound Effects Saved")) + 70; + d->saveMessage->setMinimumSize(Minwid, 60); + d->saveMessage->setDuration(2000); + d->saveMessage->move(width() / 2 - 80, height() - 70); + d->saveMessage->hide(); +} + +DequalizerDialog::~DequalizerDialog() +{ + Q_D(DequalizerDialog); + delete d->saveMessage; +} + +void DequalizerDialog::initConnection() +{ + Q_D(DequalizerDialog); + + connect(d->mswitchBtn, &DSwitchButton::checkedChanged, this, &DequalizerDialog::checkedChanged); + + for (DSlider *slider : findChildren()) { + connect(slider, &DSlider::sliderReleased, [ = ]() { + d->changeflag = true; + if (d->mcombox->currentIndex() != 0) { + d->mcombox->setCurrentIndex(0); + } + int value = slider->value(); + d->SliderOneEntry(slider, value); + }); + + connect(slider, &DSlider::valueChanged, [ = ](int value) { + d->saveBtn->setEnabled(true); + selectSlider(slider, QString::number(value)); + if (!d->changeflag) { + return ; + } + d->SliderOneEntry(slider, value); + }); + } + + connect(d->saveBtn, &DPushButton::clicked, [ = ]() { + for (DSlider *slider : findChildren()) { + d->settings->setOption("equalizer.all." + slider->objectName(), slider->value()); + } + d->settings->setOption("equalizer.all.curEffect", 0); + d->saveMessage->show(); + }); + + connect(d->mcombox, QOverload::of(&DComboBox::currentIndexChanged), + this, [ = ](int index) { + if (index == 0) { + showCustom(); + } else { + d->changeflag = false; + showCurMode(d->AllbaudTypes.at(index - 1)); + Q_EMIT setEqualizerIndex(index); + d->settings->setOption("equalizer.all.curEffect", index); + } + }); + connect(d->btn_default, &DPushButton::clicked, this, &DequalizerDialog::setDefaultClicked); + +} +//显示自定义模式 +void DequalizerDialog::showCustom() +{ + Q_D(DequalizerDialog); + if (d->changeflag) { + return; + } + for (DSlider *slider : findChildren()) { + int indexbaud = d->settings->value("equalizer.all." + slider->objectName()).toInt(); + slider->setValue(indexbaud); + selectSlider(slider, ""); + } + d->settings->setOption("equalizer.all.curEffect", 0); +} + +//显示非自定义模式 +void DequalizerDialog::showCurMode(int *Allbauds) +{ + Q_D(DequalizerDialog); + if (Allbauds == nullptr) { + return; + } + int i = 0; + for (DSlider *slider : findChildren()) { + if (d->mswitchBtn->isChecked()) { + slider->setEnabled(true); + } + slider->setValue(Allbauds[i]); + selectSlider(slider, ""); + i++; + } + d->saveBtn->setEnabled(false); +} + +//开关 +void DequalizerDialog::checkedChanged(bool checked) +{ + Q_D(DequalizerDialog); + for (DSlider *slider : findChildren()) { + slider->setEnabled(checked); + } + d->mswitchLabel->setText(tr("OFF")); + if (checked) { + d->mswitchLabel->setText(tr("ON")); + //flat; + showCurMode(d->flat_bauds); + d->mcombox->setCurrentIndex(1); + Q_EMIT setEqualizerIndex(1); + d->settings->setOption("equalizer.all.curEffect", 1); + } else { + Q_EMIT setEqualizerIndex(1); + d->settings->setOption("equalizer.all.curEffect", 1); + } + d->mcombox->setEnabled(checked); + d->saveBtn->setEnabled(false); +// Q_EMIT setEqualizerEnable(checked); + d->settings->setOption("equalizer.all.switch", checked); +} + +//恢复默认 +void DequalizerDialog::setDefaultClicked() +{ + Q_D(DequalizerDialog); + if (d->mswitchBtn->isChecked()) { + showCurMode(d->flat_bauds); + d->mswitchBtn->setChecked(false); + d->mcombox->setCurrentIndex(1); +// Q_EMIT setEqualizerEnable(false); + d->settings->setOption("equalizer.all.curEffect", 1); + for (DSlider *slider : findChildren()) { + if (slider == d->slider_pre) { + d->settings->setOption("equalizer.all." + slider->objectName(), 12); + } else { + d->settings->setOption("equalizer.all." + slider->objectName(), 0); + } + } + } +} +void DequalizerDialog::selectSlider(QObject *obj, QString SliderVal) +{ + Q_D(DequalizerDialog); + if (obj == d->slider_pre) { + d->lb_baud_pre->setText(SliderVal); + } else if (obj == d->slider_60) { + d->lb_baud_60->setText(SliderVal); + } else if (obj == d->slider_170) { + d->lb_baud_170->setText(SliderVal); + } else if (obj == d->slider_310) { + d->lb_baud_310->setText(SliderVal); + } else if (obj == d->slider_600) { + d->lb_baud_600->setText(SliderVal); + } else if (obj == d->slider_1K) { + d->lb_baud_1K->setText(SliderVal); + } else if (obj == d->slider_3K) { + d->lb_baud_3K->setText(SliderVal); + } else if (obj == d->slider_6K) { + d->lb_baud_6K->setText(SliderVal); + } else if (obj == d->slider_12K) { + d->lb_baud_12K->setText(SliderVal); + } else if (obj == d->slider_14K) { + d->lb_baud_14K->setText(SliderVal); + } else if (obj == d->slider_16K) { + d->lb_baud_16K->setText(SliderVal); + } +} + +bool DequalizerDialog::eventFilter(QObject *obj, QEvent *event) +{ + Q_D(DequalizerDialog); + for (DSlider *slider : findChildren()) { + if (obj == slider) { + if (event->type() == QEvent::HoverEnter) { + selectSlider(slider, QString::number(slider->value())); + return true; + } + if (event->type() == QEvent::HoverLeave) { + selectSlider(slider, ""); + return true; + } + } + } + return QWidget::eventFilter(obj, event); +} diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/dequalizerdialog.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/dequalizerdialog.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/dequalizerdialog.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/dequalizerdialog.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,37 @@ +#ifndef DEQUALIZERDIALOG_H +#define DEQUALIZERDIALOG_H +#include +#include +#include "../core/musicsettings.h" +#include "vlc/Equalizer.h" + +class DequalizerDialogPrivate; +class DequalizerDialog: public Dtk::Widget::DAbstractDialog +{ + Q_OBJECT +public: + explicit DequalizerDialog(QWidget *parent = Q_NULLPTR); + ~DequalizerDialog(); + + void initConnection(); + void showCustom(); + void showCurMode(int *Allbauds); + +signals: + void setEqualizerEnable(bool enabled); + void setEqualizerIndex(int curIndex); + void setEqualizerpre(int val); + void setEqualizerbauds(int index, int val); + +public Q_SLOTS: + void checkedChanged(bool checked); + void setDefaultClicked(); + +private: + void selectSlider(QObject *obj, QString val); + bool eventFilter(QObject *obj, QEvent *event); + QScopedPointer d_ptr; + Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), DequalizerDialog) +}; + +#endif // DEQUALIZERDIALOG_H diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/filter.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/filter.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/filter.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/filter.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -26,7 +26,7 @@ #include #include #include -#include +#include #include #include #include diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/filter.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/filter.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/filter.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/filter.h 2020-07-14 12:05:00.000000000 +0000 @@ -28,7 +28,7 @@ { Q_OBJECT public: - explicit HoverFilter(QObject *parent = 0); + explicit HoverFilter(QObject *parent = nullptr); bool eventFilter(QObject *obj, QEvent *event); }; @@ -36,7 +36,7 @@ { Q_OBJECT public: - explicit HoverShadowFilter(QObject *parent = 0); + explicit HoverShadowFilter(QObject *parent = nullptr); bool eventFilter(QObject *obj, QEvent *event); }; @@ -46,7 +46,7 @@ { Q_OBJECT public: - HintFilter(QObject *parent = 0); + HintFilter(QObject *parent = nullptr); ~HintFilter(); void hideAll(); diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/infodialog.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/infodialog.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/infodialog.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/infodialog.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -22,20 +22,29 @@ #include "infodialog.h" #include -#include #include #include -#include +#include +#include +#include #include #include "dplatformwindowhandle.h" #include "dblureffectwidget.h" +#include +#include +#include +#include +#include +#include +#include #include -#include #include "../../core/metasearchservice.h" #include "../helper/widgethellper.h" +#include "cover.h" +#include "musicimagebutton.h" DWIDGET_USE_NAMESPACE @@ -51,12 +60,18 @@ void updateLabelSize(); // DBlurEffectWidget *bgBlurWidget = nullptr; - QFrame *infoGridFrame = nullptr; - QLabel *cover = nullptr; - QLabel *title = nullptr; - QList valueList; - + DFrame *infoGridFrame = nullptr; + Cover *cover = nullptr; + DLabel *title = nullptr; + DWindowCloseButton *closeBt = nullptr; + DLabel *basicinfo = nullptr; + QList valueList; + QList keyList; + int frameHeight = 0; InfoDialog *q_ptr; + MetaPtr meta = nullptr; + bool DoubleElements = false; + bool isExPand = true; Q_DECLARE_PUBLIC(InfoDialog) }; @@ -64,54 +79,71 @@ { Q_Q(InfoDialog); + meta = MetaPtr(new MediaMeta); q->setObjectName("InfoDialog"); - q->setFixedWidth(320); -// q->setWindowFlags(q->windowFlags() | Qt::WindowStaysOnTopHint); + q->setFixedSize(320, 500); + q->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); auto layout = new QVBoxLayout(q); layout->setSpacing(0); - layout->setMargin(5); + layout->setContentsMargins(10, 50, 10, 10); - auto closeBt = new DImageButton; - closeBt->setObjectName("InfoClose"); - closeBt->setFixedSize(27, 23); + closeBt = new DWindowCloseButton( q); + closeBt->setFocusPolicy(Qt::NoFocus); + closeBt->setFixedSize(50, 50); + closeBt->setIconSize(QSize(50, 50)); + closeBt->move(q->width() - 50, 0); - cover = new QLabel; + cover = new Cover(q); cover->setContentsMargins(0, 0, 0, 0); cover->setObjectName("InfoCover"); cover->setFixedSize(CoverSize, CoverSize); - - title = new QLabel; + cover->move(89, 60); + title = new DLabel(q); title->setObjectName("InfoTitle"); - title->setFixedWidth(300); + title->setFixedWidth(290); + title->setAlignment(Qt::AlignCenter); title->setWordWrap(true); + title->setForegroundRole(DPalette::BrightText); + title->move(10, 212); - auto split = new QLabel(); - split->setObjectName("InfoSplit"); - split->setFixedSize(300, 1); - - infoGridFrame = new QFrame; + infoGridFrame = new DFrame(q); + infoGridFrame->setFocusPolicy(Qt::NoFocus); + infoGridFrame->setLineWidth(0); + infoGridFrame->setFrameRounded(true); infoGridFrame->setMaximumWidth(300); infoGridFrame->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + DPalette pl = infoGridFrame->palette(); + QColor windowColor("#FFFFFF"); + windowColor.setAlphaF(0.7); + pl.setColor(DPalette::Window, windowColor); + QColor sbcolor("#000000"); + sbcolor.setAlphaF(0.05); + pl.setColor(DPalette::Shadow, sbcolor); + infoGridFrame->setPalette(pl); - layout->addWidget(closeBt, 0, Qt::AlignTop | Qt::AlignRight); - layout->addSpacing(43); + layout->addSpacing(10); layout->addWidget(cover, 0, Qt::AlignCenter); - layout->addSpacing(13); - layout->addWidget(title, 0, Qt::AlignCenter); - layout->addSpacing(19); - layout->addWidget(split, 0, Qt::AlignCenter); layout->addSpacing(10); - layout->addWidget(infoGridFrame, 0, Qt::AlignCenter); + layout->addWidget(title, 0, Qt::AlignCenter); layout->addSpacing(10); - layout->addStretch(); + layout->addWidget(infoGridFrame); + + basicinfo = new DLabel(" " + InfoDialog::tr("Basic info"),q); + + basicinfo->setForegroundRole(DPalette::Text); + basicinfo->setFixedWidth(300); + + auto infoLayout = new QVBoxLayout(infoGridFrame); + infoLayout->setSpacing(0); + infoLayout->setMargin(0); auto infogridLayout = new QGridLayout(infoGridFrame); - infogridLayout->setMargin(0); - infogridLayout->setHorizontalSpacing(5); + infogridLayout->setMargin(10); + infogridLayout->setHorizontalSpacing(10); infogridLayout->setVerticalSpacing(5); - infogridLayout->setColumnStretch(0, 10); - infogridLayout->setColumnStretch(1, 100); + infogridLayout->setColumnStretch(0, 60); + infogridLayout->setColumnStretch(1, 260); QStringList infoKeys; infoKeys << InfoDialog::tr("Title:") << InfoDialog::tr("Artist:") @@ -120,46 +152,61 @@ << InfoDialog::tr("Path:"); for (int i = 0; i < infoKeys.length(); ++i) { - auto infoKey = new QLabel(infoKeys.value(i)); + auto infoKey = new DLabel(infoKeys.value(i)); +// auto infoFont = infoKey->font(); +// infoFont.setPointSize(8); +// infoKey->setFont(infoFont); infoKey->setObjectName("InfoKey"); - infoKey->setMinimumHeight(18); +// infoKey->setMinimumHeight(18); + infoKey->setForegroundRole(DPalette::WindowText); + infoKey->setAlignment(Qt::AlignLeft | Qt::AlignTop); + DFontSizeManager::instance()->bind(infoKey, DFontSizeManager::T8); + keyList << infoKey; - auto infoValue = new QLabel(); + auto infoValue = new DLabel(q); +// infoValue->setFont(infoFont); infoValue->setWordWrap(true); infoValue->setObjectName("InfoValue"); - infoValue->setMinimumHeight(18); +// infoValue->setMinimumHeight(28); infoValue->setMinimumWidth(200); - infoValue->setMaximumWidth(220); + infoValue->setMaximumWidth(260); + infoValue->setAlignment(Qt::AlignLeft | Qt::AlignTop); infoValue->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + infoValue->setForegroundRole(DPalette::WindowText); + DFontSizeManager::instance()->bind(infoValue, DFontSizeManager::T8); valueList << infoValue; infogridLayout->addWidget(infoKey); infogridLayout->addWidget(infoValue); } + infoLayout->addWidget(basicinfo); + infoLayout->addLayout(infogridLayout); - q->connect(closeBt, &DWindowCloseButton::clicked, q, &DAbstractDialog::hide); - -// if (qApp->isDXcbPlatform()) { -// bgBlurWidget = new DBlurEffectWidget(q); -// bgBlurWidget->setMaskColor(QColor(255, 255, 255)); -// bgBlurWidget->lower(); -// bgBlurWidget->setBlendMode(DBlurEffectWidget::BehindWindowBlend); -// bgBlurWidget->setVisible(DPlatformWindowHandle::hasBlurWindow()); - -// DPlatformWindowHandle::connectWindowManagerChangedSignal(q, [ = ] { -// bgBlurWidget->setVisible(DPlatformWindowHandle::hasBlurWindow()); -// }); -// } - + q->connect(closeBt, &MusicImageButton::clicked, q, &DAbstractDialog::hide); + q->connect(qApp, &QGuiApplication::fontChanged, q, [ = ](const QFont &font) { + QFontMetrics fm(font); + for (int i = 0; i < keyList.size();i++) { + + int w = keyList.at(0)->width(); + int value_w = 300 - w; + valueList.at(i)->setFixedWidth(value_w - 20); + } + if ( meta->size > 1.0){ + q->updateInfo(meta); + } + }); + q->updateInfo(meta); } + void InfoDialogPrivate::updateLabelSize() { Q_Q(InfoDialog); + title->adjustSize(); auto h = 0; for (auto label : valueList) { - label->adjustSize(); - h += label->size().height() + 6; +// label->adjustSize(); + h += label->size().height() + 6 + 6; } infoGridFrame->setFixedHeight(h); infoGridFrame->adjustSize(); @@ -170,7 +217,6 @@ : DAbstractDialog(parent), d_ptr(new InfoDialogPrivate(this)) { Q_D(InfoDialog); - DThemeManager::instance()->registerWidget(this); d->initUI(); } @@ -181,14 +227,14 @@ void InfoDialog::resizeEvent(QResizeEvent *event) { -// Q_D(InfoDialog); + //Q_D(InfoDialog); Dtk::Widget::DAbstractDialog::resizeEvent(event); -// d->bgBlurWidget->resize(this->size()); } void InfoDialog::updateInfo(const MetaPtr meta) { Q_D(InfoDialog); + d->meta = meta; QString artist = meta->artist.isEmpty() ? tr("Unknown artist") : meta->artist; QString album = meta->album.isEmpty() ? tr("Unknown album") : meta->album; QStringList infoValues; @@ -197,22 +243,120 @@ << meta->localPath; for (int i = 0; i < d->valueList.length(); ++i) { - d->valueList.value(i)->setText(infoValues.value(i)); + if (i != d->valueList.length() - 1) { + QString str = geteElidedText(d->valueList.value(i)->font(), infoValues.value(i), d->valueList.value(i)->width()); + d->valueList.value(i)->setText(str); + QFontMetrics fontWidth(d->valueList.value(i)->font()); + QRect rec = fontWidth.boundingRect( d->valueList.value(i)->text()); + d->valueList.value(i)->setFixedHeight(rec.height()); + } else { + QFontMetrics fontWidth(d->valueList.value(i)->font()); + int width = fontWidth.width(infoValues.value(i)); //计算字符串宽度 + if (width >= d->valueList.value(i)->width()) { //当字符串宽度大于最大宽度时进行转换 + //两行 + d->DoubleElements = true; + QString str = geteElidedText(d->valueList.value(i)->font(), infoValues.value(i), d->valueList.value(i)->width() * 3 / 2); + d->valueList.value(i)->setText(str); + QRect rec = fontWidth.boundingRect( d->valueList.value(i)->text()); + d->valueList.value(i)->setFixedHeight(2 * rec.height()); + + } else { + d->DoubleElements = false; + //QString str = geteElidedText(d->valueList.value(i)->font(), infoValues.value(i), d->valueList.value(i)->width() / 2); + d->valueList.value(i)->setText(infoValues.value(i)); + QRect rec = fontWidth.boundingRect( d->valueList.value(i)->text()); + d->valueList.value(i)->setFixedHeight( rec.height()); + } + } + + QFileInfo fileInfo(meta->localPath); + QString titleStr(meta->title + "-" + meta->artist + "." + fileInfo.suffix()); + titleStr = geteElidedText(d->title->font(), titleStr, d->title->width()); + d->title->setText(titleStr); + + auto pixmapSize = static_cast(CoverSize * d->cover->devicePixelRatioF()); + auto coverPixmap = QIcon(":/common/image/info_cover.svg").pixmap(QSize(pixmapSize, pixmapSize)); + QImage cover = coverPixmap.toImage(); + auto coverData = MetaSearchService::coverData(meta); + if (coverData.length() > 0) { + cover = QImage::fromData(coverData); + } + coverPixmap = QPixmap::fromImage(WidgetHelper::cropRect(cover, QSize(pixmapSize, pixmapSize))); + coverPixmap.setDevicePixelRatio(d->cover->devicePixelRatioF()); + d->cover->setCoverPixmap(coverPixmap); + d->cover->update(); + d->updateLabelSize(); + + d->title->setFocus(); } - d->title->setText(meta->title); + int h = 0;//one Label Height + for (int i = 0;i < d->valueList.size(); i++) { + h = d->valueList.value(i)->height(); + if(h != 0) + break; + } + int title_height = d->title->height(); + int grideframe_height = d->infoGridFrame->height(); + int total = title_height + grideframe_height + 192 + 70; + if (d->DoubleElements) { + setFixedHeight(total + h); + } else { + setFixedHeight(total + 22); + } +} - auto pixmapSize = static_cast(CoverSize * d->cover->devicePixelRatioF()); - auto coverPixmap = QIcon(":/common/image/info_cover.svg").pixmap(QSize(pixmapSize, pixmapSize)); - QImage cover = coverPixmap.toImage(); - auto coverData = MetaSearchService::coverData(meta); - if (coverData.length() > 0) { - cover = QImage::fromData(coverData); +void InfoDialog::setThemeType(int type) +{ + Q_D(InfoDialog); + QString rStr; + if (type == 1) { + rStr = "light"; + + DPalette framePl = this->palette(); + QColor frameColor("#F7F7F7"); + frameColor.setAlphaF(0.8); + framePl.setColor(DPalette::Window, frameColor); + this->setBackgroundRole(DPalette::Window); + + DPalette pl = d->infoGridFrame->palette(); + QColor windowColor("#FFFFFF"); + windowColor.setAlphaF(0.7); + pl.setColor(DPalette::Window, windowColor); + + QColor sbcolor("#000000"); + sbcolor.setAlphaF(0.05); + pl.setColor(DPalette::Shadow, sbcolor); + d->infoGridFrame->setPalette(pl); + d->infoGridFrame->setBackgroundRole(DPalette::Window); + } else { + rStr = "dark"; + + DPalette framePl = this->palette(); + QColor frameColor("#191919"); + frameColor.setAlphaF(0.8); + framePl.setColor(DPalette::Window, frameColor); + this->setBackgroundRole(DPalette::Window); + + + DPalette pl = d->infoGridFrame->palette(); + QColor windowColor("#282828"); + //windowColor.setAlphaF(0.05); + pl.setColor(DPalette::Window, windowColor); + QColor sbcolor("#FFFFFF"); + sbcolor.setAlphaF(0.1); + pl.setColor(DPalette::Shadow, sbcolor); + d->infoGridFrame->setPalette(pl); + d->infoGridFrame->setBackgroundRole(DPalette::Window); } - coverPixmap = QPixmap::fromImage(WidgetHelper::cropRect(cover, QSize(pixmapSize, pixmapSize))); - coverPixmap.setDevicePixelRatio(d->cover->devicePixelRatioF()); - d->cover->setPixmap(coverPixmap); - d->updateLabelSize(); +} - d->title->setFocus(); +QString InfoDialog::geteElidedText(QFont font, QString str, int MaxWidth) +{ + QFontMetrics fontWidth(font); + int width = fontWidth.width(str) + 10; //计算字符串宽度,+10提前进入省略,避免右边遮挡 + if (width >= MaxWidth) { //当字符串宽度大于最大宽度时进行转换 + str = fontWidth.elidedText(str, Qt::ElideMiddle, MaxWidth); //中间显示省略号 + } + return str; } diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/infodialog.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/infodialog.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/infodialog.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/infodialog.h 2020-07-14 12:05:00.000000000 +0000 @@ -21,7 +21,7 @@ #pragma once -#include +#include #include class InfoDialogPrivate; @@ -31,11 +31,16 @@ public: explicit InfoDialog(QWidget *parent = Q_NULLPTR); - ~InfoDialog(); + ~InfoDialog() override; void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; void updateInfo(const MetaPtr meta); + void setThemeType(int type); + void expand(bool expand); +private: + QString geteElidedText(QFont font, QString str, int MaxWidth); + private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), InfoDialog) diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/label.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/label.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/label.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/label.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -22,12 +22,12 @@ #include "label.h" Label::Label(QWidget *parent) - : Label("", parent) + : DLabel("", parent) { } Label::Label(const QString &text, QWidget *parent): - QLabel(text, parent) + DLabel(text, parent) { } diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/label.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/label.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/label.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/label.h 2020-07-14 12:05:00.000000000 +0000 @@ -21,15 +21,17 @@ #pragma once -#include +#include -class Label : public QLabel +DWIDGET_USE_NAMESPACE + +class Label : public DLabel { Q_OBJECT public: explicit Label(QWidget *parent = Q_NULLPTR); explicit Label(const QString &text, QWidget *parent = Q_NULLPTR); - ~Label(); + ~Label() override; signals: void clicked(bool); diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/listview.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/listview.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/listview.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/listview.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -21,7 +21,7 @@ #include "listview.h" -#include +#include class ListViewPrivate { @@ -30,7 +30,7 @@ void checkScrollbarSize(); - QScrollBar *vscrollBar = nullptr; + DScrollBar *vscrollBar = nullptr; ListView *q_ptr; Q_DECLARE_PUBLIC(ListView) @@ -59,16 +59,16 @@ } ListView::ListView(QWidget *parent) : - QListView(parent), d_ptr(new ListViewPrivate(this)) + DListView(parent), d_ptr(new ListViewPrivate(this)) { Q_D(ListView); - d->vscrollBar = new QScrollBar(this); + d->vscrollBar = new DScrollBar(this); d->vscrollBar->setObjectName("MusicListViewScrollBar"); d->vscrollBar->setOrientation(Qt::Vertical); d->vscrollBar->raise(); - connect(d->vscrollBar, &QScrollBar::valueChanged, + connect(d->vscrollBar, &DScrollBar::valueChanged, this, [ = ](int value) { verticalScrollBar()->setValue(value); }); diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/listview.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/listview.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/listview.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/listview.h 2020-07-14 12:05:00.000000000 +0000 @@ -22,15 +22,17 @@ #pragma once #include -#include +#include + +DWIDGET_USE_NAMESPACE class ListViewPrivate; -class ListView : public QListView +class ListView : public DListView { Q_OBJECT public: explicit ListView(QWidget *parent = Q_NULLPTR); - ~ListView(); + ~ListView() override; protected: void updateScrollbar(); diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/lyriclabel.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/lyriclabel.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/lyriclabel.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/lyriclabel.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,431 @@ +#include "lyriclabel.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "../../core/util/musiclyric.h" +#include "../../core/musicsettings.h" +#include "musicsettings.h" +#define WHEEL_SCROLL_OFFSET 50000.0 + +#include + +DGUI_USE_NAMESPACE + +LyricLabel::LyricLabel(bool touch, QWidget *parent) + : AbstractWheelWidget(touch, parent) +{ + lyric = new MusicLyric(); + lyricFont = new QFont(); + lyricFont->setFamily("SourceHanSansSC"); + lyricFont->setWeight(QFont::Normal); + lyricFont->setPixelSize(14); + lyricNormal = new QColor("#526A7F"); + lyricHighlight = new QColor("#000000"); + connect(this, SIGNAL(changeTo(int)), this, SLOT(changeToEvent(int))); + + m_FadeFlag = MusicSettings::value("base.play.fade_in_out").toBool(); + /* MyMenu *menu = new MyMenu(this); + QAction *selectLyric = new QAction("关联本地歌词", menu); + QAction *fontSelect = new QAction("字体设置", menu); + connect(fontSelect, SIGNAL(triggered(bool)), this, SLOT(changeFont())); + // QAction *colorNormal = new QAction("普通颜色", menu); + QAction *colorNormal = new QAction("pp", menu); + connect(colorNormal, SIGNAL(triggered(bool)), this, SLOT(changeNormalColor())); + QAction *colorHighLight = new QAction("高亮颜色", menu); + connect(colorHighLight, SIGNAL(triggered(bool)), this, SLOT(changeHightLightColor())); + menu->addAction(selectLyric); + menu->addSeparator(); + menu->addAction(fontSelect); + menu->addAction(colorNormal); + menu->addAction(colorHighLight); + connect(this, SIGNAL(rightClicked()), menu, SLOT(menuVisiable()));*/ + //setMinimumWidth(600); +} + +void LyricLabel::getFromFile(QString dir) +{ + lyric->getFromFile(dir); + this->update(); +} + +void LyricLabel::paintItem(QPainter *painter, int index, const QRect &rect) +{ + if (index == this->m_currentItem) { + painter->setPen(*lyricHighlight); + QFont font(*lyricFont); + font.setPixelSize(font.pixelSize() + 1); + painter->setFont(font); + QPoint leftpos = rect.bottomLeft(); + leftpos.setY(static_cast( leftpos.y() + rect.height() / 2.0 + 5)); + QPoint rightpos = rect.bottomRight(); + rightpos.setY(leftpos.y()); + rightpos.setX(rightpos.x() - 3); + leftpos.setY(leftpos.y() - 3); + rightpos.setY(rightpos.y() - 3); + //leftpos.setY(leftpos.y() - rect.height() / 2); + //rightpos.setY(rightpos.y() - rect.height() / 2); + painter->save(); + QPointF triangle1[3] = {QPointF(leftpos.x(), leftpos.y() * 1.0 + 4.5), QPointF(leftpos.x(), leftpos.y() * 1.0 - 4.5), QPointF(leftpos.x() + 9, leftpos.y())}; //1 + QPointF triangle2[3] = {QPointF(rightpos.x(), rightpos.y() * 1.0 + 4.5), QPointF(rightpos.x(), rightpos.y() * 1.0 - 4.5), QPointF(rightpos.x() - 9, rightpos.y())}; //1 + + painter->setRenderHint(QPainter::Antialiasing, true); + + QColor normalcolor = *lyricHighlight; + normalcolor.setAlphaF(0.5); + QPen pen(normalcolor, 1, Qt::SolidLine, Qt::SquareCap, Qt::RoundJoin); + + painter->setBrush(normalcolor); + + painter->setPen(pen); + + painter->drawPolygon(triangle1, 3); //2 + painter->drawPolygon(triangle2, 3); //2 + + painter->drawLine(leftpos.x() + 23, leftpos.y(), rightpos.x() - 23, rightpos.y()); + painter->restore(); + } else { + QPen pen = painter->pen(); + QColor color = pen.color(); + color.setRed(lyricNormal->red()); + color.setGreen(lyricNormal->green()); + color.setBlue(lyricNormal->blue()); + painter->setPen(color); + painter->setFont(*lyricFont); + } + QFontMetrics fm(*lyricFont); + QString lricstr = lyric->getLineAt(index); + QPoint tleftpos = rect.topLeft(); + if (fm.width(lricstr) > rect.width() - 100) { + + QString str1, str2; + for (int i = 0; i < lricstr.count(); i++) { + str1.append(lricstr.at(i)); + if (fm.width(str1) > rect.width() - 100) { + str1.chop(1); + break; + } + } + str2 = lricstr.remove(str1); + + painter->drawText(QRect(tleftpos.x(), tleftpos.y(), rect.width(), rect.height() / 2), Qt::AlignCenter, str1); + painter->drawText(QRect(tleftpos.x(), tleftpos.y() + rect.height() / 2, rect.width(), rect.height() / 2), Qt::AlignCenter, str2); + + } else { + painter->drawText(QRect(tleftpos.x(), tleftpos.y(), rect.width(), rect.height() / 2), Qt::AlignCenter, lyric->getLineAt(index)); + } + +} + +int LyricLabel::itemHeight() const +{ + QFontMetrics fm(*lyricFont); + //qDebug() << "itemheight" << fm.height()*2.8; + //return fm.height() * 1.4; + return static_cast( fm.height() * 2.8); + //return 45; +} + +int LyricLabel::itemCount() const +{ + return lyric->getCount(); +} + +void LyricLabel::postionChanged(qint64 pos) +{ + if (this->isScrolled) return; + pos = pos + 500; //歌词滚动需要500ms + int index = lyric->getIndex(pos); + if (index != m_currentItem) + this->scrollTo(index); +} + +void LyricLabel::setPostion(qint64 pos) +{ + int index = lyric->getIndex(pos); + this->setCurrentIndex(index); +} + +void LyricLabel::slotTheme(int type) +{ + m_themetype = type; + if (type == 1) { + QColor normalcolor = "#000000"; + normalcolor.setAlphaF(0.5); + *lyricNormal = normalcolor; + *lyricHighlight = QColor("#000000"); + } else { + *lyricNormal = QColor("#C0C6D4"); + *lyricHighlight = QColor("#FFFFFF"); + } + update(); +} + +void LyricLabel::changeToEvent(int index) +{ + emit changeTo(lyric->getPostion(index)); +} + +void LyricLabel::changeFont() +{ + bool flag; + *lyricFont = QFontDialog::getFont(&flag, *lyricFont, this); + if (flag) { + // the user clicked OK and font is set to the font the user selected + } else { + // the user canceled the dialog; font is set to the initial value + lyricFont = new QFont("宋体", 12, QFont::Bold); + } +} + +void LyricLabel::changeNormalColor() +{ + *lyricNormal = QColorDialog::getColor(*lyricNormal, this); +} + +void LyricLabel::changeHightLightColor() +{ + *lyricHighlight = QColorDialog::getColor(*lyricHighlight, this); +} + +void LyricLabel::contextMenuEvent(QContextMenuEvent *event) +{ + Q_UNUSED(event) + emit rightClicked(); +} + +void LyricLabel::enterEvent(QEvent *e) +{ + Q_UNUSED(e) + emit mouseEnter(); +} + +AbstractWheelWidget::AbstractWheelWidget(bool touch, QWidget *parent) + : QWidget(parent), m_currentItem(0), m_itemOffset(0) +{ +// ![0] + QScroller::grabGesture(this, touch ? QScroller::TouchGesture : QScroller::LeftMouseButtonGesture); +// ![0] + this->isScrolled = false; + this->dosignal = true; +} + +AbstractWheelWidget::~AbstractWheelWidget() +{ } + +int AbstractWheelWidget::currentIndex() const +{ + return m_currentItem; +} + +void AbstractWheelWidget::setCurrentIndex(int index) +{ + if (index >= 0 && index < itemCount()) { + m_currentItem = index; + m_itemOffset = 0; + update(); + } +} + +bool AbstractWheelWidget::event(QEvent *e) +{ + switch (e->type()) { +// ![1] + case QEvent::ScrollPrepare: { + // We set the snap positions as late as possible so that we are sure + // we get the correct itemHeight + QScroller *scroller = QScroller::scroller(this); + scroller->setSnapPositionsY( WHEEL_SCROLL_OFFSET, itemHeight() ); + + QScrollPrepareEvent *se = static_cast(e); + se->setViewportSize(QSizeF(size())); + // we claim a huge scrolling area and a huge content position and + // hope that the user doesn't notice that the scroll area is restricted + se->setContentPosRange(QRectF(0.0, 0.0, 0.0, WHEEL_SCROLL_OFFSET * 2)); + se->setContentPos(QPointF(0.0, WHEEL_SCROLL_OFFSET + m_currentItem * itemHeight() + m_itemOffset)); + se->accept(); + return true; + } +// ![1] +// ![2] + case QEvent::Scroll: { + QScrollEvent *se = static_cast(e); + if (dosignal) { + + if (se->scrollState() == QScrollEvent::ScrollStarted) { + qDebug() << "start scroll lyric" << endl; + this->isScrolled = true; + } + } + if (se->scrollState() == QScrollEvent::ScrollFinished) { + + if (dosignal) { + qDebug() << "滚动到第" << m_currentItem << endl; + emit changeTo(this->m_currentItem); + } + this->isScrolled = false; + dosignal = true; + } + + qreal y = se->contentPos().y(); + int iy = static_cast(y - WHEEL_SCROLL_OFFSET); + int ih = itemHeight(); + +// ![2] +// ![3] + // -- calculate the current item position and offset and redraw the widget + int ic = itemCount(); + if (ic > 0) { + m_currentItem = iy / ih; + //m_currentItem = iy / ih % ic; + m_itemOffset = iy % ih; + + // take care when scrolling backwards. Modulo returns negative numbers + /* + if (m_itemOffset < 0) { + m_itemOffset += ih; + m_currentItem--; + } + */ + //if (m_currentItem < 0) + //m_currentItem += ic; + //m_currentItem = 0; + if (m_currentItem >= ic) m_currentItem = ic - 1; + } + // -- repaint + update(); + + se->accept(); + return true; +// ![3] + } + case QEvent::MouseButtonPress: + return true; + default: + return QWidget::event(e); + } +// return true; +} + +void AbstractWheelWidget::paintEvent(QPaintEvent *event) +{ + Q_UNUSED( event ); + + // -- first calculate size and position. + int w = width(); + int h = height(); + + QPainter painter(this); + DPalette palette = this->palette(); + DPalette::ColorGroup colorGroup = isEnabled() ? DPalette::Active : DPalette::Disabled; + + // linear gradient brush + QLinearGradient grad(0.5, 0, 0.5, 1.0); + grad.setColorAt(0, palette.color(colorGroup, DPalette::ButtonText)); + grad.setColorAt(0.2, palette.color(colorGroup, DPalette::Button)); + grad.setColorAt(0.8, palette.color(colorGroup, DPalette::Button)); + grad.setColorAt(1.0, palette.color(colorGroup, DPalette::ButtonText)); + grad.setCoordinateMode( QGradient::ObjectBoundingMode ); + QBrush gBrush( grad ); + /* + // paint a border and background + painter.setPen(palette.color(colorGroup, QPalette::ButtonText)); + painter.setBrush(gBrush); + // painter.setBrushOrigin( QPointF( 0.0, 0.0 ) ); + //painter.drawRect( 0, 0, w-1, h-1 ); + + // paint inner border + painter.setPen(palette.color(colorGroup, QPalette::Button)); + painter.setBrush(Qt::NoBrush); + //painter.drawRect( 1, 1, w-3, h-3 ); + */ + // paint the items + painter.setClipRect( QRect( 3, 3, w - 6, h - 6 ) ); + painter.setPen(palette.color(colorGroup, QPalette::ButtonText)); + + int iH = itemHeight(); + int iC = itemCount(); + if (iC > 0) { + + m_itemOffset = m_itemOffset % iH; + + for (int i = -h / 2 / iH; i <= h / 2 / iH + 1; i++) { + + int itemNum = m_currentItem + i; + /* + while (itemNum < 0) + itemNum += iC; + while (itemNum >= iC) + itemNum -= iC; + */ + if (itemNum >= 0 && itemNum < iC) { + int len = h / 2 / iH; + /*线性衰减的方法 + int t = len-abs(i); + t = (t+8)*255/(len+8); + */ + //抛物线衰减的方法 + int t = abs(i); + t = 255 - t * t * 220 / len / len - 35; //220是255-y得到,y为边界透明度 + if (t < 0) t = 0; + //qDebug() << "a值:" << t << endl; + if (m_themetype == 1) { + if (m_FadeFlag) { + painter.setPen(QColor(255, 255, 255, t)); + } else { + painter.setPen(QColor(255, 255, 255, 255)); + } + } else { + if (m_FadeFlag) { + painter.setPen(QColor(0, 0, 0, t)); + } else { + painter.setPen(QColor("#FFFFFF")); + } + } + paintItem(&painter, itemNum, QRect(6, h / 2 + i * iH - m_itemOffset - iH / 2, w - 6, iH )); + } + } + } + /* + // draw a transparent bar over the center + QColor highlight = palette.color(colorGroup, QPalette::Highlight); + highlight.setAlpha(150); + + QLinearGradient grad2(0.5, 0, 0.5, 1.0); + grad2.setColorAt(0, highlight); + grad2.setColorAt(1.0, highlight.lighter()); + grad2.setCoordinateMode( QGradient::ObjectBoundingMode ); + QBrush gBrush2( grad2 ); + + QLinearGradient grad3(0.5, 0, 0.5, 1.0); + grad3.setColorAt(0, highlight); + grad3.setColorAt(1.0, highlight.darker()); + grad3.setCoordinateMode( QGradient::ObjectBoundingMode ); + QBrush gBrush3( grad3 ); + + painter.fillRect( QRect( 0, h/2 - iH/2, w, iH/2 ), gBrush2 ); + painter.fillRect( QRect( 0, h/2, w, iH/2 ), gBrush3 ); + */ +} + +/*! + Rotates the wheel widget to a given index. + You can also give an index greater than itemCount or less than zero in which + case the wheel widget will scroll in the given direction and end up with + (index % itemCount) +*/ +void AbstractWheelWidget::scrollTo(int index) +{ + this->dosignal = false; + setCurrentIndex(index); +// QScroller *scroller = QScroller::scroller(this); +// scroller->scrollTo(QPointF(0, WHEEL_SCROLL_OFFSET + index * itemHeight()), 500); +} diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/lyriclabel.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/lyriclabel.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/lyriclabel.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/lyriclabel.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,86 @@ +#ifndef LYRICLABEL_H +#define LYRICLABEL_H + +#include + +DWIDGET_USE_NAMESPACE + +class AbstractWheelWidget : public DWidget +{ + Q_OBJECT + +public: + AbstractWheelWidget(bool touch, QWidget *parent = nullptr); + virtual ~AbstractWheelWidget(); + + int currentIndex() const; + void setCurrentIndex(int index); + + bool event(QEvent *); + void paintEvent(QPaintEvent *e); + virtual void paintItem(QPainter *painter, int index, const QRect &rect) = 0; + + virtual int itemHeight() const = 0; + virtual int itemCount() const = 0; + +public slots: + void scrollTo(int index); + +signals: + void stopped(int index); + void changeTo(int index); + +protected: + int m_currentItem; + int m_itemOffset; + qreal m_lastY; + bool isScrolled; + bool dosignal; + bool m_FadeFlag = false; + int m_themetype = 1; +}; + +class MusicLyric; +class QFont; + +class LyricLabel : public AbstractWheelWidget +{ + Q_OBJECT + +public: + LyricLabel(bool touch, QWidget *parent = nullptr); + + + void getFromFile(QString dir); + void paintItem(QPainter *painter, int index, const QRect &rect); + + int itemHeight() const; + int itemCount() const; + +signals: + void changeTo(qint64 pos); + void rightClicked(); + void mouseEnter(); + +public slots: + void postionChanged(qint64 pos); + void setPostion(qint64 pos); + void slotTheme(int type); +protected slots: + void changeToEvent(int index); + void changeFont(); + void changeNormalColor(); + void changeHightLightColor(); + +protected: + void contextMenuEvent(QContextMenuEvent *event);//右击事件 + void enterEvent(QEvent *e); + +protected: + MusicLyric *lyric; + QFont *lyricFont; + QColor *lyricNormal; + QColor *lyricHighlight; +}; + +#endif // LYRICLABEL_H diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/lyricview.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/lyricview.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/lyricview.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/lyricview.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -24,11 +24,10 @@ #include #include #include -#include #include #include -#include +#include #include "delegate/lyriclinedelegate.h" @@ -48,10 +47,9 @@ }; LyricView::LyricView(QWidget *parent) : - QListView(parent), d_ptr(new LyricViewPrivate(this)) + DListView(parent), d_ptr(new LyricViewPrivate(this)) { Q_D(LyricView); - DThemeManager::instance()->registerWidget(this); d->delegate = new LyricLineDelegate(this); setItemDelegate(d->delegate); @@ -64,7 +62,7 @@ setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setEditTriggers(QAbstractItemView::NoEditTriggers); - setFlow(QListView::TopToBottom); + //setFlow(QListView::TopToBottom); connect(d->viewTimer, &QTimer::timeout, diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/lyricview.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/lyricview.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/lyricview.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/lyricview.h 2020-07-14 12:05:00.000000000 +0000 @@ -22,15 +22,17 @@ #pragma once #include -#include +#include + +DWIDGET_USE_NAMESPACE class LyricViewPrivate; -class LyricView : public QListView +class LyricView : public DListView { Q_OBJECT public: explicit LyricView(QWidget *parent = Q_NULLPTR); - ~LyricView(); + ~LyricView() override; bool viewMode() const; int optical() const; diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/modebuttom.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/modebuttom.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/modebuttom.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/modebuttom.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -22,8 +22,14 @@ #include "modebuttom.h" #include +#include -ModeButton::ModeButton(QWidget *parent) : QPushButton(parent) +#include +#include + +DGUI_USE_NAMESPACE + +ModeButton::ModeButton(QWidget *parent) : DPushButton(parent) { m_mode = 0; connect(this, &ModeButton::clicked, this, [ = ]() { @@ -32,18 +38,21 @@ } setMode((m_mode + 1) % m_modeIcons.length()); - this->style()->unpolish(this); - this->style()->polish(this); this->update(); }); + + auto pl = this->palette(); + QColor sbcolor("#000000"); + sbcolor.setAlphaF(0.05); + pl.setColor(DPalette::Shadow, sbcolor); + setPalette(pl); } -void ModeButton::setModeIcons(const QStringList &modeIcons) +void ModeButton::setModeIcons(const QStringList &modeIcons, const QStringList &pressIcons) { m_modeIcons = modeIcons; + m_pressIcons = pressIcons; m_mode = 0; - this->style()->unpolish(this); - this->style()->polish(this); this->update(); } @@ -52,6 +61,11 @@ return m_mode; } +void ModeButton::setTransparent(bool flag) +{ + transparent = flag; +} + void ModeButton::setMode(int mode) { if (m_mode == mode) { @@ -59,9 +73,75 @@ } m_mode = mode; - this->style()->unpolish(this); - this->style()->polish(this); this->update(); Q_EMIT modeChanged(mode); } + +void ModeButton::paintEvent(QPaintEvent *event) +{ + if (!transparent) { + DPushButton::paintEvent(event); + } + + QString curPicPath = m_modeIcons[m_mode]; + if (status == 1 && m_mode >= 0 && m_mode <= m_pressIcons.size()) { + curPicPath = m_pressIcons[m_mode]; + } + +// QPixmap pixmap = DHiDPIHelper::loadNxPixmap(curPicPath); +//// pixmap.setDevicePixelRatio(devicePixelRatioF()); + +// QPainter painter(this); +// painter.save(); +// painter.setRenderHint(QPainter::Antialiasing); +// painter.setRenderHint(QPainter::HighQualityAntialiasing); +// painter.setRenderHint(QPainter::SmoothPixmapTransform); + +// int pixmapWidth = pixmap.rect().width(); +// int pixmapHeight = pixmap.rect().height(); +// QRect pixmapRect((rect().width() - pixmapWidth) / 2, (rect().height() - pixmapHeight) / 2, pixmapWidth, pixmapHeight); +// pixmapRect = pixmapRect.intersected(rect()); +// painter.drawPixmap(pixmapRect, pixmap, QRect(0, 0, pixmapWidth, pixmapHeight)); + +// painter.restore(); +// QIcon icon; +// icon.addFile(curPicPath); + +// this->setIconSize(QSize(36, 36)); +// this->setIcon(icon); + + DPushButton::paintEvent(event); + + QPixmap pixmap = DHiDPIHelper::loadNxPixmap(curPicPath); + + QPainter painter(this); + painter.save(); + painter.setRenderHint(QPainter::Antialiasing); + painter.setRenderHint(QPainter::HighQualityAntialiasing); + painter.setRenderHint(QPainter::SmoothPixmapTransform); + + int pixmapWidth = static_cast( pixmap.rect().width() / devicePixelRatioF()); + int pixmapHeight = static_cast(pixmap.rect().height() / devicePixelRatioF()); + QRect pixmapRect((rect().width() - pixmapWidth) / 2, (rect().height() - pixmapHeight) / 2, pixmapWidth, pixmapHeight); + pixmapRect = pixmapRect.intersected(rect()); +// painter.drawPixmap(pixmapRect, pixmap, QRect(0, 0, pixmapWidth, pixmapHeight)); + + QIcon icon; + icon.addFile(curPicPath); + icon.paint(&painter, pixmapRect); + + painter.restore(); +} + +void ModeButton::mousePressEvent(QMouseEvent *event) +{ + status = 1; + DPushButton::mousePressEvent(event); +} + +void ModeButton::mouseReleaseEvent(QMouseEvent *event) +{ + status = 0; + DPushButton::mouseReleaseEvent(event); +} diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/modebuttom.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/modebuttom.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/modebuttom.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/modebuttom.h 2020-07-14 12:05:00.000000000 +0000 @@ -22,9 +22,11 @@ #ifndef MODEBUTTOM_H #define MODEBUTTOM_H -#include +#include -class ModeButton : public QPushButton +DWIDGET_USE_NAMESPACE + +class ModeButton : public DPushButton { Q_OBJECT Q_PROPERTY(int mode READ mode WRITE setMode NOTIFY modeChanged) @@ -32,17 +34,26 @@ public: explicit ModeButton(QWidget *parent = Q_NULLPTR); - void setModeIcons(const QStringList &modeIcons); + void setModeIcons(const QStringList &modeIcons, const QStringList &pressIcons = QStringList()); int mode() const; + void setTransparent(bool flag); signals: void modeChanged(int mode); public slots: void setMode(int mode); +protected: + void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; + void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + private: + char status = 0; int m_mode; + bool transparent = true; QStringList m_modeIcons; + QStringList m_pressIcons; }; #endif // MODEBUTTOM_H diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/model/musiclistdatamodel.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/model/musiclistdatamodel.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/model/musiclistdatamodel.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/model/musiclistdatamodel.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "musiclistdatamodel.h" + +#include +#include "core/medialibrary.h" + +class MusicListDataModelPrivate +{ +public: + MusicListDataModelPrivate(MusicListDataModel *parent) : q_ptr(parent) {} + + PlaylistPtr playlist; + + MusicListDataModel *q_ptr; + Q_DECLARE_PUBLIC(MusicListDataModel) +}; + +MusicListDataModel::MusicListDataModel(QObject *parent) : + QStandardItemModel(parent), d_ptr(new MusicListDataModelPrivate(this)) +{ + +} + +MusicListDataModel::MusicListDataModel(int rows, int columns, QObject *parent): + QStandardItemModel(rows, columns, parent), d_ptr(new MusicListDataModelPrivate(this)) +{ + +} + +MusicListDataModel::~MusicListDataModel() +{ + +} + +PlaylistPtr MusicListDataModel::playlist() const +{ + Q_D(const MusicListDataModel); + return d->playlist; +} + +void MusicListDataModel::setPlaylist(PlaylistPtr playlist) +{ + Q_D(MusicListDataModel); + d->playlist = playlist; +} + +bool MusicListDataModel::setData(const QModelIndex &index, const QVariant &value, int role) +{ + return QStandardItemModel::setData(index, value, role); +} + +Qt::DropActions MusicListDataModel::supportedDropActions() const +{ + return Qt::CopyAction | Qt::MoveAction; +} + +Qt::ItemFlags MusicListDataModel::flags(const QModelIndex &index) const +{ + Qt::ItemFlags defaultFlags = QAbstractItemModel::flags(index); + if (index.isValid()) { + return Qt::ItemIsDragEnabled | defaultFlags; + } else { + return Qt::ItemIsDropEnabled | defaultFlags; + } +} diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/model/musiclistdatamodel.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/model/musiclistdatamodel.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/model/musiclistdatamodel.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/model/musiclistdatamodel.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include + +#include +#include "core/playlist.h" + +class MusicListDataModelPrivate; +class MusicListDataModel : public QStandardItemModel +{ + Q_OBJECT +public: + explicit MusicListDataModel(QObject *parent = nullptr); + MusicListDataModel(int rows, int columns, QObject *parent = Q_NULLPTR); + ~MusicListDataModel() override; + + PlaylistPtr playlist() const; + void setPlaylist(PlaylistPtr playlist); + + virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE; + virtual Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE; + virtual Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE; + +private: + QScopedPointer d_ptr; + Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusicListDataModel) +}; + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/model/musiclistinfomodel.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/model/musiclistinfomodel.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/model/musiclistinfomodel.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/model/musiclistinfomodel.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,143 @@ +/* + * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "musiclistinfomodel.h" + +#include +#include "core/medialibrary.h" + +class MusiclistInfomodelPrivate +{ +public: + MusiclistInfomodelPrivate(MusiclistInfomodel *parent) : q_ptr(parent) {} + + PlaylistPtr playlist; + + MusiclistInfomodel *q_ptr; + Q_DECLARE_PUBLIC(MusiclistInfomodel) +}; + +MusiclistInfomodel::MusiclistInfomodel(QObject *parent) : + QStandardItemModel(parent), d_ptr(new MusiclistInfomodelPrivate(this)) +{ + +} + +MusiclistInfomodel::MusiclistInfomodel(int rows, int columns, QObject *parent): + QStandardItemModel(rows, columns, parent), d_ptr(new MusiclistInfomodelPrivate(this)) +{ + +} + +MusiclistInfomodel::~MusiclistInfomodel() +{ + +} + +PlaylistPtr MusiclistInfomodel::playlist() const +{ + Q_D(const MusiclistInfomodel); + return d->playlist; +} + +void MusiclistInfomodel::setPlaylist(PlaylistPtr playlist) +{ + Q_D(MusiclistInfomodel); + d->playlist = playlist; +} + +QModelIndex MusiclistInfomodel::findIndex(const MetaPtr meta) +{ + if (meta.isNull()) + return QModelIndex(); + Q_ASSERT(!meta.isNull()); + Q_D(MusiclistInfomodel); + + if (!d->playlist.isNull()) { + auto row = d->playlist->index(meta->hash); + auto itemIndex = this->index(row, 0); + + auto itemHash = data(itemIndex).toString(); + if (itemHash == meta->hash) { + return itemIndex; + } + + // qCritical() << "search index failed" << meta->hash << itemHash; + + for (int i = 0; i < rowCount(); ++i) { + itemIndex = index(i, 0); + auto itemHash = data(itemIndex).toString(); + if (itemHash == meta->hash) { + return itemIndex; + } + } + } + + return QModelIndex(); +} + +bool MusiclistInfomodel::setData(const QModelIndex &index, const QVariant &value, int role) +{ + return QStandardItemModel::setData(index, value, role); +} + +MetaPtr MusiclistInfomodel::meta(const QModelIndex &index, int role) const +{ + auto hash = this->data(index, role).toString(); + return MediaLibrary::instance()->meta(hash); +} + +//#include + +//bool MusiclistInfomodel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) +//{ +// if (action == Qt::IgnoreAction) +// return true; + +// if (!data->hasFormat("text/uri-list")) +// return false; + +// if (column > 0) +// return false; + +// int beginRow; + +// if (row != -1) +// beginRow = row; +// else if (parent.isValid()) +// beginRow = parent.row(); +//} + +Qt::DropActions MusiclistInfomodel::supportedDropActions() const +{ +// return QAbstractItemModel::supportedDropActions(); + return /*Qt::CopyAction | */Qt::MoveAction; +} + +Qt::ItemFlags MusiclistInfomodel::flags(const QModelIndex &index) const +{ + Qt::ItemFlags defaultFlags = QAbstractItemModel::flags(index); + if (index.isValid()) { + return Qt::ItemIsDragEnabled | defaultFlags; + } else { + return Qt::ItemIsDropEnabled | defaultFlags; + } +} diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/model/musiclistinfomodel.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/model/musiclistinfomodel.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/model/musiclistinfomodel.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/model/musiclistinfomodel.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include + +#include +#include "core/playlist.h" + +class MusiclistInfomodelPrivate; +class MusiclistInfomodel : public QStandardItemModel +{ + Q_OBJECT +public: + explicit MusiclistInfomodel(QObject *parent = nullptr); + MusiclistInfomodel(int rows, int columns, QObject *parent = Q_NULLPTR); + ~MusiclistInfomodel() override; + + PlaylistPtr playlist() const; + void setPlaylist(PlaylistPtr playlist); + + MetaPtr meta(const QModelIndex &index, int role = Qt::DisplayRole) const; + QMap hashIndexs(); + QModelIndex findIndex(const MetaPtr meta); + + virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE; + virtual Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE; + virtual Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE; + +private: + QScopedPointer d_ptr; + Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusiclistInfomodel) +}; + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/model/musiclistmodel.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/model/musiclistmodel.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/model/musiclistmodel.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/model/musiclistmodel.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -22,15 +22,12 @@ #include "musiclistmodel.h" #include -#include "core/medialibrary.h" class MusiclistModelPrivate { public: MusiclistModelPrivate(MusiclistModel *parent) : q_ptr(parent) {} - PlaylistPtr playlist; - MusiclistModel *q_ptr; Q_DECLARE_PUBLIC(MusiclistModel) }; @@ -41,98 +38,28 @@ } -MusiclistModel::MusiclistModel(int rows, int columns, QObject *parent): - QStandardItemModel(rows, columns, parent), d_ptr(new MusiclistModelPrivate(this)) -{ - -} - MusiclistModel::~MusiclistModel() { } -PlaylistPtr MusiclistModel::playlist() const -{ - Q_D(const MusiclistModel); - return d->playlist; -} - -void MusiclistModel::setPlaylist(PlaylistPtr playlist) -{ - Q_D(MusiclistModel); - d->playlist = playlist; -} - -QModelIndex MusiclistModel::findIndex(const MetaPtr meta) -{ - Q_ASSERT(!meta.isNull()); - Q_D(MusiclistModel); - - auto row = d->playlist->index(meta->hash); - auto itemIndex = this->index(row, 0); - - auto itemHash = data(itemIndex).toString(); - if (itemHash == meta->hash) { - return itemIndex; - } - - qCritical() << "search index failed" << meta->hash << itemHash; - - for (int i = 0; i < rowCount(); ++i) { - itemIndex = index(i, 0); - auto itemHash = data(itemIndex).toString(); - if (itemHash == meta->hash) { - return itemIndex; - } - } - return QModelIndex(); -} - bool MusiclistModel::setData(const QModelIndex &index, const QVariant &value, int role) { return QStandardItemModel::setData(index, value, role); } -MetaPtr MusiclistModel::meta(const QModelIndex &index, int role) const -{ - auto hash = this->data(index, role).toString(); - return MediaLibrary::instance()->meta(hash); -} - -//#include - -//bool MusiclistModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) -//{ -// if (action == Qt::IgnoreAction) -// return true; - -// if (!data->hasFormat("text/uri-list")) -// return false; - -// if (column > 0) -// return false; - -// int beginRow; - -// if (row != -1) -// beginRow = row; -// else if (parent.isValid()) -// beginRow = parent.row(); -//} - Qt::DropActions MusiclistModel::supportedDropActions() const { -// return QAbstractItemModel::supportedDropActions(); - return Qt::CopyAction | Qt::MoveAction; + return Qt::CopyAction; } Qt::ItemFlags MusiclistModel::flags(const QModelIndex &index) const { - Qt::ItemFlags defaultFlags = QAbstractItemModel::flags(index); - if (index.isValid()) { - return Qt::ItemIsDragEnabled | defaultFlags; - } else { + Qt::ItemFlags defaultFlags = QStandardItemModel::flags(index); + + if (index.isValid()) return Qt::ItemIsDropEnabled | defaultFlags; - } + else + return defaultFlags; } + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/model/musiclistmodel.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/model/musiclistmodel.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/model/musiclistmodel.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/model/musiclistmodel.h 2020-07-14 12:05:00.000000000 +0000 @@ -24,34 +24,14 @@ #include #include -#include -#include "core/playlist.h" - class MusiclistModelPrivate; class MusiclistModel : public QStandardItemModel { Q_OBJECT public: - explicit MusiclistModel(QObject *parent = 0); - MusiclistModel(int rows, int columns, QObject *parent = Q_NULLPTR); - ~MusiclistModel(); - - PlaylistPtr playlist() const; - void setPlaylist(PlaylistPtr playlist); - - MetaPtr meta(const QModelIndex &index, int role = Qt::DisplayRole) const; - QMap hashIndexs(); - QModelIndex findIndex(const MetaPtr meta); - -// Q_INVOKABLE virtual QModelIndex index(int row, int column, -// const QModelIndex &parent = QModelIndex()) const = 0; -// Q_INVOKABLE virtual QModelIndex parent(const QModelIndex &child) const = 0; + explicit MusiclistModel(QObject *parent = nullptr); + ~MusiclistModel() override; -// Q_INVOKABLE virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const; -// Q_INVOKABLE virtual int rowCount(const QModelIndex &parent = QModelIndex()) const = 0; -// Q_INVOKABLE virtual int columnCount(const QModelIndex &parent = QModelIndex()) const = 0; -// Q_INVOKABLE virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const; -// bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE; virtual Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE; virtual Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE; diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/model/musicsearchlistmodel.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/model/musicsearchlistmodel.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/model/musicsearchlistmodel.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/model/musicsearchlistmodel.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2020 chengdu Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include "musicsearchlistmodel.h" +#include + +class MusicSearchListModelPrivate +{ +public: + MusicSearchListModelPrivate(MusicSearchListModel *parent) : q_ptr(parent) {} + + PlaylistPtr playlist; + + MusicSearchListModel *q_ptr; + Q_DECLARE_PUBLIC(MusicSearchListModel) +}; + +MusicSearchListModel::MusicSearchListModel(QObject *parent) : + QStandardItemModel(parent), d_ptr(new MusicSearchListModelPrivate(this)) +{ + +} + +MusicSearchListModel::MusicSearchListModel(int rows, int columns, QObject *parent): + QStandardItemModel(rows, columns, parent), d_ptr(new MusicSearchListModelPrivate(this)) +{ + +} + +MusicSearchListModel::~MusicSearchListModel() +{ + +} + +PlaylistPtr MusicSearchListModel::playlist() const +{ + Q_D(const MusicSearchListModel); + return d->playlist; +} + +void MusicSearchListModel::setPlaylist(PlaylistPtr playlist) +{ +// qDebug()<<"set playlist:"; + Q_D(MusicSearchListModel); + d->playlist = playlist; +// qDebug() << "playlist size:" << playlist->playMusicTypePtrList().size(); + for (auto meta : playlist->playMusicTypePtrList()) { +// qDebug() << "playlist:" << meta->name; + } +} + +bool MusicSearchListModel::setData(const QModelIndex &index, const QVariant &value, int role) +{ + return QStandardItemModel::setData(index, value, role); +} + +Qt::DropActions MusicSearchListModel::supportedDropActions() const +{ + return Qt::CopyAction | Qt::MoveAction; +} + +Qt::ItemFlags MusicSearchListModel::flags(const QModelIndex &index) const +{ + Qt::ItemFlags defaultFlags = QAbstractItemModel::flags(index); + if (index.isValid()) { + return Qt::ItemIsDragEnabled | defaultFlags; + } else { + return Qt::ItemIsDropEnabled | defaultFlags; + } +} diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/model/musicsearchlistmodel.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/model/musicsearchlistmodel.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/model/musicsearchlistmodel.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/model/musicsearchlistmodel.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2020 chengdu Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#pragma once + +#include "core/playlist.h" + +#include +#include + +class MusicSearchListModelPrivate; +class MusicSearchListModel : public QStandardItemModel +{ + Q_OBJECT +public: + explicit MusicSearchListModel(QObject *parent = nullptr); + MusicSearchListModel(int rows, int columns, QObject *parent = Q_NULLPTR); + ~MusicSearchListModel() override; + + PlaylistPtr playlist() const; + void setPlaylist(PlaylistPtr playlist); + + virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE; + virtual Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE; + virtual Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE; + +private: + QScopedPointer d_ptr; + Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusicSearchListModel) +}; + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/model/playlistmodel.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/model/playlistmodel.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/model/playlistmodel.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/model/playlistmodel.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "playlistmodel.h" + +#include +#include "core/medialibrary.h" + +class PlaylistModelPrivate +{ +public: + PlaylistModelPrivate(PlaylistModel *parent) : q_ptr(parent) {} + + PlaylistPtr playlist; + + PlaylistModel *q_ptr; + Q_DECLARE_PUBLIC(PlaylistModel) +}; + +PlaylistModel::PlaylistModel(QObject *parent) : + QStandardItemModel(parent), d_ptr(new PlaylistModelPrivate(this)) +{ + +} + +PlaylistModel::PlaylistModel(int rows, int columns, QObject *parent): + QStandardItemModel(rows, columns, parent), d_ptr(new PlaylistModelPrivate(this)) +{ + +} + +PlaylistModel::~PlaylistModel() +{ + +} + +PlaylistPtr PlaylistModel::playlist() const +{ + Q_D(const PlaylistModel); + return d->playlist; +} + +void PlaylistModel::setPlaylist(PlaylistPtr playlist) +{ + Q_D(PlaylistModel); + d->playlist = playlist; +} + +QModelIndex PlaylistModel::findIndex(const MetaPtr meta) +{ + Q_ASSERT(!meta.isNull()); + Q_D(PlaylistModel); + + if (!d->playlist.isNull()) { + auto row = d->playlist->index(meta->hash); + auto itemIndex = this->index(row, 0); + + auto itemHash = data(itemIndex).toString(); + if (itemHash == meta->hash) { + return itemIndex; + } + + qCritical() << "search index failed" << meta->hash << itemHash; + + for (int i = 0; i < rowCount(); ++i) { + itemIndex = index(i, 0); + auto itemHash = data(itemIndex).toString(); + if (itemHash == meta->hash) { + return itemIndex; + } + } + } + + return QModelIndex(); +} + +bool PlaylistModel::setData(const QModelIndex &index, const QVariant &value, int role) +{ + return QStandardItemModel::setData(index, value, role); +} + +MetaPtr PlaylistModel::meta(const QModelIndex &index, int role) const +{ + auto hash = this->data(index, role).toString(); + return MediaLibrary::instance()->meta(hash); +} + +Qt::DropActions PlaylistModel::supportedDropActions() const +{ +// return QAbstractItemModel::supportedDropActions(); + return /*Qt::CopyAction | */Qt::IgnoreAction; +} + +Qt::ItemFlags PlaylistModel::flags(const QModelIndex &index) const +{ + Qt::ItemFlags defaultFlags = QAbstractItemModel::flags(index); + return Qt::ItemIsDragEnabled | defaultFlags; +// if (index.isValid()) { +// return Qt::ItemIsDragEnabled | defaultFlags; +// } else { +// return Qt::ItemIsDropEnabled | defaultFlags; +// } +} diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/model/playlistmodel.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/model/playlistmodel.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/model/playlistmodel.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/model/playlistmodel.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include + +#include +#include "core/playlist.h" + +class PlaylistModelPrivate; +class PlaylistModel : public QStandardItemModel +{ + Q_OBJECT +public: + explicit PlaylistModel(QObject *parent = nullptr); + PlaylistModel(int rows, int columns, QObject *parent = Q_NULLPTR); + ~PlaylistModel() override; + + PlaylistPtr playlist() const; + void setPlaylist(PlaylistPtr playlist); + + MetaPtr meta(const QModelIndex &index, int role = Qt::DisplayRole) const; + QMap hashIndexs(); + QModelIndex findIndex(const MetaPtr meta); + +// Q_INVOKABLE virtual QModelIndex index(int row, int column, +// const QModelIndex &parent = QModelIndex()) const = 0; +// Q_INVOKABLE virtual QModelIndex parent(const QModelIndex &child) const = 0; + +// Q_INVOKABLE virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const; +// Q_INVOKABLE virtual int rowCount(const QModelIndex &parent = QModelIndex()) const = 0; +// Q_INVOKABLE virtual int columnCount(const QModelIndex &parent = QModelIndex()) const = 0; +// Q_INVOKABLE virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const; +// bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); + virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE; + virtual Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE; + virtual Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE; + +private: + QScopedPointer d_ptr; + Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), PlaylistModel) +}; + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/musicboxbutton.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musicboxbutton.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/musicboxbutton.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musicboxbutton.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,301 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: yub.wang + * + * Maintainer: yub.wang + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "musicboxbutton.h" +#include +#include + +#include +#include + +DGUI_USE_NAMESPACE +MusicBoxButton::MusicBoxButton(const QString &text, QWidget *parent) + : DButtonBoxButton(text, parent) +{ +} + +MusicBoxButton::MusicBoxButton(const QString &text, const QString &normalPic, const QString &hoverPic, + const QString &pressPic, const QString &checkedPic, QWidget *parent) + : DButtonBoxButton (text, parent) +{ + defaultPicPath.normalPicPath = normalPic; + defaultPicPath.hoverPicPath = hoverPic; + defaultPicPath.pressPicPath = pressPic; + defaultPicPath.checkedPicPath = checkedPic; + + auto pl = this->palette(); + QColor sbcolor("#000000"); + sbcolor.setAlphaF(0.05); + pl.setColor(DPalette::Shadow, sbcolor); + setPalette(pl); + QIcon icon; + icon.addFile(normalPic); + + this->setIconSize(QSize(36, 36)); + this->setIcon(icon); +} + +void MusicBoxButton::setPropertyPic(QString propertyName, const QVariant &value, + const QString &normalPic, const QString &hoverPic, const QString &pressPic, const QString &checkedPic) +{ + MusicPicPathInfo curPicPath; + curPicPath.normalPicPath = normalPic; + curPicPath.hoverPicPath = hoverPic; + curPicPath.pressPicPath = pressPic; + curPicPath.checkedPicPath = checkedPic; + + if (propertyPicPaths.first == propertyName && propertyPicPaths.second.contains(value)) { + propertyPicPaths.second[value] = curPicPath; + } else { + QMap curPicPathInfo; + curPicPathInfo.insert(value, curPicPath); + propertyPicPaths.first = propertyName; + propertyPicPaths.second = curPicPathInfo; + } + QIcon icon; + icon.addFile(normalPic); + + this->setIconSize(QSize(36, 36)); + this->setIcon(icon); +} + +void MusicBoxButton::setPropertyPic(const QString &normalPic, const QString &hoverPic, const QString &pressPic, const QString &checkedPic) +{ + defaultPicPath.normalPicPath = normalPic; + defaultPicPath.hoverPicPath = hoverPic; + defaultPicPath.pressPicPath = pressPic; + defaultPicPath.checkedPicPath = checkedPic; + QIcon icon; + icon.addFile(normalPic); + + this->setIconSize(QSize(36, 36)); + this->setIcon(icon); +} + +void MusicBoxButton::setTransparent(bool flag) +{ + transparent = flag; +} + +void MusicBoxButton::setAutoChecked(bool flag) +{ + autoChecked = flag; +} + + + +void MusicBoxButton::enterEvent(QEvent *event) +{ + status = 1; + QString curPicPath = defaultPicPath.normalPicPath; + if (propertyPicPaths.first.isEmpty() || !propertyPicPaths.second.contains(property(propertyPicPaths.first.toStdString().data()))) { + QString curPropertyPicPathStr; + if (isChecked() && !defaultPicPath.checkedPicPath.isEmpty()) { + curPropertyPicPathStr = defaultPicPath.checkedPicPath; + } else { + if (status == 1 && !defaultPicPath.hoverPicPath.isEmpty()) { + curPropertyPicPathStr = defaultPicPath.hoverPicPath; + } else if (status == 2 && !defaultPicPath.pressPicPath.isEmpty()) { + curPropertyPicPathStr = defaultPicPath.pressPicPath; + } + } + + if (!curPropertyPicPathStr.isEmpty()) { + curPicPath = curPropertyPicPathStr; + } + } else { + QVariant value = property(propertyPicPaths.first.toStdString().data()); + MusicPicPathInfo curPropertyPicPath = propertyPicPaths.second[value]; + QString curPropertyPicPathStr; + if (isChecked() && !defaultPicPath.checkedPicPath.isEmpty()) { + curPropertyPicPathStr = curPropertyPicPath.checkedPicPath; + } else { + if (status == 1 && !defaultPicPath.hoverPicPath.isEmpty()) { + curPropertyPicPathStr = curPropertyPicPath.hoverPicPath; + } else if (status == 2 && !defaultPicPath.pressPicPath.isEmpty()) { + curPropertyPicPathStr = curPropertyPicPath.pressPicPath; + } else { + curPropertyPicPathStr = curPropertyPicPath.normalPicPath; + } + } + if (!curPropertyPicPathStr.isEmpty()) { + curPicPath = curPropertyPicPathStr; + } + } + + + QIcon icon; + icon.addFile(curPicPath); + + this->setIconSize(QSize(36, 36)); + this->setIcon(icon); + DButtonBoxButton::enterEvent(event); + if (autoChecked) { + setChecked(true); + } +} + +void MusicBoxButton::leaveEvent(QEvent *event) +{ + status = 0; + QString curPicPath = defaultPicPath.normalPicPath; + if (propertyPicPaths.first.isEmpty() || !propertyPicPaths.second.contains(property(propertyPicPaths.first.toStdString().data()))) { + QString curPropertyPicPathStr; + if (isChecked() && !defaultPicPath.checkedPicPath.isEmpty()) { + curPropertyPicPathStr = defaultPicPath.checkedPicPath; + } else { + if (status == 1 && !defaultPicPath.hoverPicPath.isEmpty()) { + curPropertyPicPathStr = defaultPicPath.hoverPicPath; + } else if (status == 2 && !defaultPicPath.pressPicPath.isEmpty()) { + curPropertyPicPathStr = defaultPicPath.pressPicPath; + } + } + + if (!curPropertyPicPathStr.isEmpty()) { + curPicPath = curPropertyPicPathStr; + } + } else { + QVariant value = property(propertyPicPaths.first.toStdString().data()); + MusicPicPathInfo curPropertyPicPath = propertyPicPaths.second[value]; + QString curPropertyPicPathStr; + if (isChecked() && !defaultPicPath.checkedPicPath.isEmpty()) { + curPropertyPicPathStr = curPropertyPicPath.checkedPicPath; + } else { + if (status == 1 && !defaultPicPath.hoverPicPath.isEmpty()) { + curPropertyPicPathStr = curPropertyPicPath.hoverPicPath; + } else if (status == 2 && !defaultPicPath.pressPicPath.isEmpty()) { + curPropertyPicPathStr = curPropertyPicPath.pressPicPath; + } else { + curPropertyPicPathStr = curPropertyPicPath.normalPicPath; + } + } + if (!curPropertyPicPathStr.isEmpty()) { + curPicPath = curPropertyPicPathStr; + } + } + + + QIcon icon; + icon.addFile(curPicPath); + + this->setIconSize(QSize(36, 36)); + this->setIcon(icon); + DButtonBoxButton::leaveEvent(event); + if (autoChecked) { + setChecked(false); + } +} + +void MusicBoxButton::mousePressEvent(QMouseEvent *event) +{ + status = 2; + QString curPicPath = defaultPicPath.normalPicPath; + if (propertyPicPaths.first.isEmpty() || !propertyPicPaths.second.contains(property(propertyPicPaths.first.toStdString().data()))) { + QString curPropertyPicPathStr; + if (isChecked() && !defaultPicPath.checkedPicPath.isEmpty()) { + curPropertyPicPathStr = defaultPicPath.checkedPicPath; + } else { + if (status == 1 && !defaultPicPath.hoverPicPath.isEmpty()) { + curPropertyPicPathStr = defaultPicPath.hoverPicPath; + } else if (status == 2 && !defaultPicPath.pressPicPath.isEmpty()) { + curPropertyPicPathStr = defaultPicPath.pressPicPath; + } + } + + if (!curPropertyPicPathStr.isEmpty()) { + curPicPath = curPropertyPicPathStr; + } + } else { + QVariant value = property(propertyPicPaths.first.toStdString().data()); + MusicPicPathInfo curPropertyPicPath = propertyPicPaths.second[value]; + QString curPropertyPicPathStr; + if (isChecked() && !defaultPicPath.checkedPicPath.isEmpty()) { + curPropertyPicPathStr = curPropertyPicPath.checkedPicPath; + } else { + if (status == 1 && !defaultPicPath.hoverPicPath.isEmpty()) { + curPropertyPicPathStr = curPropertyPicPath.hoverPicPath; + } else if (status == 2 && !defaultPicPath.pressPicPath.isEmpty()) { + curPropertyPicPathStr = curPropertyPicPath.pressPicPath; + } else { + curPropertyPicPathStr = curPropertyPicPath.normalPicPath; + } + } + if (!curPropertyPicPathStr.isEmpty()) { + curPicPath = curPropertyPicPathStr; + } + } + + + QIcon icon; + icon.addFile(curPicPath); + + this->setIconSize(QSize(36, 36)); + this->setIcon(icon); + DButtonBoxButton::mousePressEvent(event); +} + +void MusicBoxButton::mouseReleaseEvent(QMouseEvent *event) +{ + status = 0; + QString curPicPath = defaultPicPath.normalPicPath; + if (propertyPicPaths.first.isEmpty() || !propertyPicPaths.second.contains(property(propertyPicPaths.first.toStdString().data()))) { + QString curPropertyPicPathStr; + if (isChecked() && !defaultPicPath.checkedPicPath.isEmpty()) { + curPropertyPicPathStr = defaultPicPath.checkedPicPath; + } else { + if (status == 1 && !defaultPicPath.hoverPicPath.isEmpty()) { + curPropertyPicPathStr = defaultPicPath.hoverPicPath; + } else if (status == 2 && !defaultPicPath.pressPicPath.isEmpty()) { + curPropertyPicPathStr = defaultPicPath.pressPicPath; + } + } + + if (!curPropertyPicPathStr.isEmpty()) { + curPicPath = curPropertyPicPathStr; + } + } else { + QVariant value = property(propertyPicPaths.first.toStdString().data()); + MusicPicPathInfo curPropertyPicPath = propertyPicPaths.second[value]; + QString curPropertyPicPathStr; + if (isChecked() && !defaultPicPath.checkedPicPath.isEmpty()) { + curPropertyPicPathStr = curPropertyPicPath.checkedPicPath; + } else { + if (status == 1 && !defaultPicPath.hoverPicPath.isEmpty()) { + curPropertyPicPathStr = curPropertyPicPath.hoverPicPath; + } else if (status == 2 && !defaultPicPath.pressPicPath.isEmpty()) { + curPropertyPicPathStr = curPropertyPicPath.pressPicPath; + } else { + curPropertyPicPathStr = curPropertyPicPath.normalPicPath; + } + } + if (!curPropertyPicPathStr.isEmpty()) { + curPicPath = curPropertyPicPathStr; + } + } + + + QIcon icon; + icon.addFile(curPicPath); + + this->setIconSize(QSize(36, 36)); + this->setIcon(icon); + DButtonBoxButton::mouseReleaseEvent(event); +} diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/musicboxbutton.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musicboxbutton.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/musicboxbutton.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musicboxbutton.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: yub.wang + * + * Maintainer: yub.wang + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#ifndef MUSICBOXBUTTON_H +#define MUSICBOXBUTTON_H +#pragma once + +#include +#include +#include + +#include +#include + +DWIDGET_USE_NAMESPACE + +class MusicBoxButton : public DButtonBoxButton +{ + struct MusicPicPathInfo { + QString normalPicPath; + QString hoverPicPath; + QString pressPicPath; + QString checkedPicPath; + }; + + Q_OBJECT +public: + explicit MusicBoxButton(const QString &text, QWidget *parent = Q_NULLPTR); + + MusicBoxButton(const QString &text, const QString &normalPic, const QString &hoverPic, + const QString &pressPic, const QString &checkedPic = QString(), QWidget *parent = nullptr); + + void setPropertyPic(QString propertyName, const QVariant &value, const QString &normalPic, const QString &hoverPic, + const QString &pressPic, const QString &checkedPic = QString()); + void setPropertyPic(const QString &normalPic, const QString &hoverPic, + const QString &pressPic, const QString &checkedPic = QString()); + + void setTransparent(bool flag); + void setAutoChecked(bool flag); + +protected: + //void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; + void enterEvent(QEvent *event) Q_DECL_OVERRIDE; + void leaveEvent(QEvent *event) Q_DECL_OVERRIDE; + void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + +private: + char status = 0; + bool autoChecked = false; + MusicPicPathInfo defaultPicPath; + bool transparent = true; + QPair > propertyPicPaths; +}; + + +#endif // MUSICBOXBUTTON_H + + + + + + + + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/musiciconbutton.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiciconbutton.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/musiciconbutton.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiciconbutton.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,194 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: yub.wang + * + * Maintainer: yub.wang + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "musiciconbutton.h" + +#include +#include + +#include +#include + +DGUI_USE_NAMESPACE + +MusicIconButton::MusicIconButton(QWidget *parent) + : DPushButton(parent) +{ +} + +MusicIconButton::MusicIconButton(const QString &normalPic, const QString &hoverPic, + const QString &pressPic, const QString &checkedPic, QWidget *parent) + : DPushButton (parent) +{ + defaultPicPath.normalPicPath = normalPic; + defaultPicPath.hoverPicPath = hoverPic; + defaultPicPath.pressPicPath = pressPic; + defaultPicPath.checkedPicPath = checkedPic; + + auto pl = this->palette(); + QColor sbcolor("#000000"); + sbcolor.setAlphaF(0.05); + pl.setColor(DPalette::Shadow, sbcolor); + setPalette(pl); +} + +void MusicIconButton::setPropertyPic(QString propertyName, const QVariant &value, + const QString &normalPic, const QString &hoverPic, const QString &pressPic, const QString &checkedPic) +{ + MusicPicPathInfo curPicPath; + curPicPath.normalPicPath = normalPic; + curPicPath.hoverPicPath = hoverPic; + curPicPath.pressPicPath = pressPic; + curPicPath.checkedPicPath = checkedPic; + + if (propertyPicPaths.first == propertyName) { + propertyPicPaths.second[value] = curPicPath; + } else { + QMap curPicPathInfo; + curPicPathInfo.insert(value, curPicPath); + propertyPicPaths.first = propertyName; + propertyPicPaths.second = curPicPathInfo; + } +} + +void MusicIconButton::setPropertyPic(const QString &normalPic, const QString &hoverPic, const QString &pressPic, const QString &checkedPic) +{ + defaultPicPath.normalPicPath = normalPic; + defaultPicPath.hoverPicPath = hoverPic; + defaultPicPath.pressPicPath = pressPic; + defaultPicPath.checkedPicPath = checkedPic; +} + +void MusicIconButton::setTransparent(bool flag) +{ + transparent = flag; +} + +void MusicIconButton::setAutoChecked(bool flag) +{ + autoChecked = flag; +} + +void MusicIconButton::paintEvent(QPaintEvent *event) +{ + if (!transparent) { + DPushButton::paintEvent(event); + } + + QString curPicPath = defaultPicPath.normalPicPath; + if (propertyPicPaths.first.isEmpty() || !propertyPicPaths.second.contains(property(propertyPicPaths.first.toStdString().data()))) { + QString curPropertyPicPathStr; + if (isChecked() && !defaultPicPath.checkedPicPath.isEmpty()) { + curPropertyPicPathStr = defaultPicPath.checkedPicPath; + } else { + if (status == 1 && !defaultPicPath.hoverPicPath.isEmpty()) { + curPropertyPicPathStr = defaultPicPath.hoverPicPath; + } else if (status == 2 && !defaultPicPath.pressPicPath.isEmpty()) { + curPropertyPicPathStr = defaultPicPath.pressPicPath; + } + } + + if (!curPropertyPicPathStr.isEmpty()) { + curPicPath = curPropertyPicPathStr; + } + } else { + QVariant value = property(propertyPicPaths.first.toStdString().data()); + MusicPicPathInfo curPropertyPicPath = propertyPicPaths.second[value]; + QString curPropertyPicPathStr; + if (isChecked() && !defaultPicPath.checkedPicPath.isEmpty()) { + curPropertyPicPathStr = curPropertyPicPath.checkedPicPath; + } else { + if (status == 1 && !defaultPicPath.hoverPicPath.isEmpty()) { + curPropertyPicPathStr = curPropertyPicPath.hoverPicPath; + } else if (status == 2 && !defaultPicPath.pressPicPath.isEmpty()) { + curPropertyPicPathStr = curPropertyPicPath.pressPicPath; + } else { + curPropertyPicPathStr = curPropertyPicPath.normalPicPath; + } + } + if (!curPropertyPicPathStr.isEmpty()) { + curPicPath = curPropertyPicPathStr; + } + } + + +// QIcon icon; +// icon.addFile(curPicPath); + +// this->setIconSize(QSize(36, 36)); +// this->setIcon(icon); + + DPushButton::paintEvent(event); + + QPixmap pixmap = DHiDPIHelper::loadNxPixmap(curPicPath); + if (pixmap.isNull()) { + pixmap = DHiDPIHelper::loadNxPixmap(defaultPicPath.normalPicPath); + curPicPath = defaultPicPath.normalPicPath; + } + + QPainter painter(this); + painter.save(); + painter.setRenderHint(QPainter::Antialiasing); + painter.setRenderHint(QPainter::HighQualityAntialiasing); + painter.setRenderHint(QPainter::SmoothPixmapTransform); + + int pixmapWidth = static_cast(pixmap.rect().width() / devicePixelRatioF()); + int pixmapHeight = static_cast(pixmap.rect().height() / devicePixelRatioF()); + QRect pixmapRect((rect().width() - pixmapWidth) / 2, (rect().height() - pixmapHeight) / 2, pixmapWidth, pixmapHeight); + pixmapRect = pixmapRect.intersected(rect()); +// painter.drawPixmap(pixmapRect, pixmap, QRect(0, 0, pixmapWidth, pixmapHeight)); + + QIcon icon; + icon.addFile(curPicPath); + icon.paint(&painter, pixmapRect); + + painter.restore(); +} + +void MusicIconButton::enterEvent(QEvent *event) +{ + status = 1; + DPushButton::enterEvent(event); + if (autoChecked) { + setChecked(true); + } +} + +void MusicIconButton::leaveEvent(QEvent *event) +{ + status = 0; + DPushButton::leaveEvent(event); + if (autoChecked) { + setChecked(false); + } +} + +void MusicIconButton::mousePressEvent(QMouseEvent *event) +{ + status = 2; + DPushButton::mousePressEvent(event); +} + +void MusicIconButton::mouseReleaseEvent(QMouseEvent *event) +{ + status = 0; + DPushButton::mouseReleaseEvent(event); +} diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/musiciconbutton.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiciconbutton.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/musiciconbutton.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiciconbutton.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: yub.wang + * + * Maintainer: yub.wang + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef MUSICICONBUTTON_H +#define MUSICICONBUTTON_H +#pragma once + +#include +#include +#include + +#include + +DWIDGET_USE_NAMESPACE + +class MusicIconButton : public DPushButton +{ + struct MusicPicPathInfo { + QString normalPicPath; + QString hoverPicPath; + QString pressPicPath; + QString checkedPicPath; + }; + + Q_OBJECT +public: + explicit MusicIconButton(QWidget *parent = Q_NULLPTR); + + MusicIconButton(const QString &normalPic, const QString &hoverPic, + const QString &pressPic, const QString &checkedPic = QString(), QWidget *parent = nullptr); + + void setPropertyPic(QString propertyName, const QVariant &value, const QString &normalPic, const QString &hoverPic, + const QString &pressPic, const QString &checkedPic = QString()); + void setPropertyPic(const QString &normalPic, const QString &hoverPic, + const QString &pressPic, const QString &checkedPic = QString()); + + void setTransparent(bool flag); + void setAutoChecked(bool flag); + +protected: + void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; + void enterEvent(QEvent *event) Q_DECL_OVERRIDE; + void leaveEvent(QEvent *event) Q_DECL_OVERRIDE; + void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + +private: + char status = 0; + bool autoChecked = false; + MusicPicPathInfo defaultPicPath; + bool transparent = true; + QPair > propertyPicPaths; +}; + +#endif // MUSICICONBUTTON_H + + + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/musicimagebutton.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musicimagebutton.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/musicimagebutton.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musicimagebutton.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,181 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: yub.wang + * + * Maintainer: yub.wang + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "musicimagebutton.h" + +#include +#include + +#include +#include + +DGUI_USE_NAMESPACE + +MusicImageButton::MusicImageButton(QWidget *parent) + : DPushButton(parent) +{ +} + +MusicImageButton::MusicImageButton(const QString &normalPic, const QString &hoverPic, + const QString &pressPic, const QString &checkedPic, QWidget *parent) + : DPushButton (parent) +{ + defaultPicPath.normalPicPath = normalPic; + defaultPicPath.hoverPicPath = hoverPic; + defaultPicPath.pressPicPath = pressPic; + defaultPicPath.checkedPicPath = checkedPic; + + auto pl = this->palette(); + QColor sbcolor("#000000"); + sbcolor.setAlphaF(0.05); + pl.setColor(DPalette::Shadow, sbcolor); + setPalette(pl); +} + +void MusicImageButton::setPropertyPic(QString propertyName, const QVariant &value, + const QString &normalPic, const QString &hoverPic, const QString &pressPic, const QString &checkedPic) +{ + MusicPicPathInfo curPicPath; + curPicPath.normalPicPath = normalPic; + curPicPath.hoverPicPath = hoverPic; + curPicPath.pressPicPath = pressPic; + curPicPath.checkedPicPath = checkedPic; + + if (propertyPicPaths.first == propertyName) { + propertyPicPaths.second[value] = curPicPath; + } else { + QMap curPicPathInfo; + curPicPathInfo.insert(value, curPicPath); + propertyPicPaths.first = propertyName; + propertyPicPaths.second = curPicPathInfo; + } +} + +void MusicImageButton::setPropertyPic(const QString &normalPic, const QString &hoverPic, const QString &pressPic, const QString &checkedPic) +{ + defaultPicPath.normalPicPath = normalPic; + defaultPicPath.hoverPicPath = hoverPic; + defaultPicPath.pressPicPath = pressPic; + defaultPicPath.checkedPicPath = checkedPic; +} + +void MusicImageButton::setTransparent(bool flag) +{ + transparent = flag; +} + +void MusicImageButton::setAutoChecked(bool flag) +{ + autoChecked = flag; +} + +void MusicImageButton::paintEvent(QPaintEvent *event) +{ + if (!transparent) { + DPushButton::paintEvent(event); + } + + QString curPicPath = defaultPicPath.normalPicPath; + if (propertyPicPaths.first.isEmpty() || !propertyPicPaths.second.contains(property(propertyPicPaths.first.toStdString().data()))) { + QString curPropertyPicPathStr; + if (isChecked() && !defaultPicPath.checkedPicPath.isEmpty()) { + curPropertyPicPathStr = defaultPicPath.checkedPicPath; + } else { + if (status == 1 && !defaultPicPath.hoverPicPath.isEmpty()) { + curPropertyPicPathStr = defaultPicPath.hoverPicPath; + } else if (status == 2 && !defaultPicPath.pressPicPath.isEmpty()) { + curPropertyPicPathStr = defaultPicPath.pressPicPath; + } + } + + if (!curPropertyPicPathStr.isEmpty()) { + curPicPath = curPropertyPicPathStr; + } + } else { + QVariant value = property(propertyPicPaths.first.toStdString().data()); + MusicPicPathInfo curPropertyPicPath = propertyPicPaths.second[value]; + QString curPropertyPicPathStr; + if (isChecked() && !defaultPicPath.checkedPicPath.isEmpty()) { + curPropertyPicPathStr = curPropertyPicPath.checkedPicPath; + } else { + if (status == 1 && !defaultPicPath.hoverPicPath.isEmpty()) { + curPropertyPicPathStr = curPropertyPicPath.hoverPicPath; + } else if (status == 2 && !defaultPicPath.pressPicPath.isEmpty()) { + curPropertyPicPathStr = curPropertyPicPath.pressPicPath; + } else { + curPropertyPicPathStr = curPropertyPicPath.normalPicPath; + } + } + if (!curPropertyPicPathStr.isEmpty()) { + curPicPath = curPropertyPicPathStr; + } + } + QPixmap pixmap = DHiDPIHelper::loadNxPixmap(curPicPath); + if (pixmap.isNull()) { + pixmap = DHiDPIHelper::loadNxPixmap(defaultPicPath.normalPicPath); + } + + + pixmap.setDevicePixelRatio(devicePixelRatioF()); + QPainter painter(this); + painter.save(); + painter.setRenderHint(QPainter::Antialiasing); + painter.setRenderHint(QPainter::HighQualityAntialiasing); + painter.setRenderHint(QPainter::SmoothPixmapTransform); + + int pixmapWidth = pixmap.rect().width(); + int pixmapHeight = pixmap.rect().height(); + QRect pixmapRect((rect().width() - pixmapWidth) / 2, (rect().height() - pixmapHeight) / 2, pixmapWidth, pixmapHeight); + pixmapRect = pixmapRect.intersected(rect()); + painter.drawPixmap(pixmapRect, pixmap, QRect(0, 0, pixmapWidth, pixmapHeight)); + + painter.restore(); +} + +void MusicImageButton::enterEvent(QEvent *event) +{ + status = 1; + DPushButton::enterEvent(event); + if (autoChecked) { + setChecked(true); + } +} + +void MusicImageButton::leaveEvent(QEvent *event) +{ + status = 0; + DPushButton::leaveEvent(event); + if (autoChecked) { + setChecked(false); + } +} + +void MusicImageButton::mousePressEvent(QMouseEvent *event) +{ + status = 2; + DPushButton::mousePressEvent(event); +} + +void MusicImageButton::mouseReleaseEvent(QMouseEvent *event) +{ + status = 0; + DPushButton::mouseReleaseEvent(event); +} diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/musicimagebutton.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musicimagebutton.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/musicimagebutton.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musicimagebutton.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: yub.wang + * + * Maintainer: yub.wang + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include +#include + +#include + +DWIDGET_USE_NAMESPACE + +class MusicImageButton : public DPushButton +{ + struct MusicPicPathInfo { + QString normalPicPath; + QString hoverPicPath; + QString pressPicPath; + QString checkedPicPath; + }; + + Q_OBJECT +public: + explicit MusicImageButton(QWidget *parent = Q_NULLPTR); + + MusicImageButton(const QString &normalPic, const QString &hoverPic, + const QString &pressPic, const QString &checkedPic = QString(), QWidget *parent = nullptr); + + void setPropertyPic(QString propertyName, const QVariant &value, const QString &normalPic, const QString &hoverPic, + const QString &pressPic, const QString &checkedPic = QString()); + void setPropertyPic(const QString &normalPic, const QString &hoverPic, + const QString &pressPic, const QString &checkedPic = QString()); + + void setTransparent(bool flag); + void setAutoChecked(bool flag); + +protected: + void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; + void enterEvent(QEvent *event) Q_DECL_OVERRIDE; + void leaveEvent(QEvent *event) Q_DECL_OVERRIDE; + void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + +private: + char status = 0; + bool autoChecked = false; + MusicPicPathInfo defaultPicPath; + bool transparent = true; + QPair > propertyPicPaths; +}; diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/musiclistdataview.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiclistdataview.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/musiclistdataview.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiclistdataview.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,442 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "musiclistdataview.h" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "util/pinyinsearch.h" + +#include "../../core/metasearchservice.h" +#include "../helper/widgethellper.h" + +#include "delegate/musiclistdatadelegate.h" +#include "model/musiclistdatamodel.h" +#include "musiclistdialog.h" + +DWIDGET_USE_NAMESPACE + +class MusicListDataViewPrivate +{ +public: + MusicListDataViewPrivate(MusicListDataView *parent): q_ptr(parent) {} + + void addPlayMusicTypePtr(const PlayMusicTypePtr TypePtr); + + MusicListDataModel *model = nullptr; + MusicListDataDelegate *delegate = nullptr; + QString defaultCover = ":/common/image/cover_max.svg"; + MetaPtr playing = nullptr; + MetaPtr hoverin = nullptr; + + int themeType = 1; + + MusicListDialog *musciListDialog = nullptr; + PlayMusicTypePtrList curPlayMusicTypePtrList; + QPixmap playingPixmap = QPixmap(":/mpimage/light/music1.svg"); + QPixmap sidebarPixmap = QPixmap(":/mpimage/light/music_withe_sidebar/music1.svg"); + QPixmap albumPixmap = QPixmap(":/mpimage/light/music_white_album_cover/music1.svg"); + MusicListDataView *q_ptr; + Q_DECLARE_PUBLIC(MusicListDataView) +}; + + +void MusicListDataViewPrivate::addPlayMusicTypePtr(const PlayMusicTypePtr TypePtr) +{ + QStandardItem *newItem = new QStandardItem; + QIcon icon(defaultCover); + if (!TypePtr->icon.isEmpty()) { + icon = QIcon(QPixmap::fromImage(QImage::fromData(TypePtr->icon).scaled(170, 170, Qt::IgnoreAspectRatio, Qt::SmoothTransformation))); + } + newItem->setIcon(icon); + model->appendRow(newItem); + + auto row = model->rowCount() - 1; + QModelIndex index = model->index(row, 0, QModelIndex()); + model->setData(index, TypePtr->name); +} + + +MusicListDataView::MusicListDataView(QWidget *parent) + : DListView(parent), d_ptr(new MusicListDataViewPrivate(this)) +{ + Q_D(MusicListDataView); + + setObjectName("MusicListDataView"); + + d->model = new MusicListDataModel(0, 1, this); + setModel(d->model); + + d->delegate = new MusicListDataDelegate; + setItemDelegate(d->delegate); + setViewportMargins(0, 0, 8, 0); + + setUniformItemSizes(true); + + setViewModeFlag(QListView::ListMode); + setResizeMode(QListView::Adjust); + setMovement(QListView::Static); + setLayoutMode(QListView::Batched); + setBatchSize(2000); + + //setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + + d->musciListDialog = new MusicListDialog(this); + + + connect(this, &MusicListDataView::doubleClicked, + this, [ = ](const QModelIndex & index) { + PlaylistPtr curPlaylist = d->model->playlist(); + + auto playMusicTypePtrList = curPlaylist->playMusicTypePtrList(); + if (index.row() >= playMusicTypePtrList.size()) { + return; + } + + auto PlayMusicTypePtr = playMusicTypePtrList[index.row()]; + d->musciListDialog->setPlayMusicData(curPlaylist, PlayMusicTypePtr); + d->musciListDialog->setPlaying(playing()); + d->musciListDialog->exec(); + }); + + connect(d->delegate, &MusicListDataDelegate::hoverPress, this, [ = ](const QModelIndex & index) { + PlaylistPtr curPlaylist = d->model->playlist(); + auto playMusicTypePtrList = curPlaylist->playMusicTypePtrList(); + if (index.row() >= playMusicTypePtrList.size()) { + return; + } + auto PlayMusicTypePtr = playMusicTypePtrList[index.row()]; + playlist()->playMusicTypeToMeta(PlayMusicTypePtr->name); + + if (curPlaylist->id() == ArtistResultListID + || curPlaylist->id() == ArtistMusicListID) { + if (this->playing() == nullptr || + this->playing()->artist != PlayMusicTypePtr->playlistMeta.metas.first()->artist) { + auto curtMeta = playlist()->first(); + Q_EMIT playMedia(curtMeta); + setPlaying(curtMeta); + } else { + auto curtMeta = playlist()->playing(); + + if (curtMeta.isNull() && !playlist()->isEmpty()) { + curtMeta = playlist()->first(); + setPlaying(curtMeta); + } + + if (!playlist()->playingStatus()) { + Q_EMIT resume(curtMeta); + } else { + Q_EMIT pause(curPlaylist, curtMeta); + } + } + } + if (curPlaylist->id() == AlbumMusicListID + || curPlaylist->id() == AlbumResultListID) { + if (this->playing() == nullptr || + this->playing()->album != PlayMusicTypePtr->playlistMeta.metas.first()->album) { + auto curtMeta = playlist()->first(); + Q_EMIT playMedia(curtMeta); + setPlaying(curtMeta); + } else { + auto curtMeta = playlist()->playing(); + + if (curtMeta.isNull() && !playlist()->isEmpty()) { + curtMeta = playlist()->first(); + setPlaying(curtMeta); + } + if (!playlist()->playingStatus()) { + Q_EMIT resume(curtMeta); + } else { + Q_EMIT pause(curPlaylist, curtMeta); + } + } + } + }); + + connect(d->musciListDialog, &MusicListDialog::requestCustomContextMenu, + this, [ = ](const QPoint & pos) { + Q_EMIT requestCustomContextMenu(pos); + }); + + connect(d->musciListDialog, &MusicListDialog::playMedia, + this, [ = ](const MetaPtr meta) { + Q_EMIT playMedia(meta); + }); + + connect(d->musciListDialog, &MusicListDialog::resume, + this, [ = ](const MetaPtr meta) { + Q_EMIT resume(meta); + }); + + connect(d->musciListDialog, &MusicListDialog::addToPlaylist, + this, [ = ](PlaylistPtr playlist, const MetaPtrList & metalist) { + Q_EMIT addToPlaylist(playlist, metalist); + }); + + connect(d->musciListDialog, &MusicListDialog::musiclistRemove, + this, [ = ](const MetaPtrList & metalist) { + Q_EMIT musiclistRemove(metalist); + }); + + connect(d->musciListDialog, &MusicListDialog::musiclistDelete, + this, [ = ](const MetaPtrList & metalist) { + Q_EMIT musiclistDelete(metalist); + }); + + connect(d->musciListDialog, &MusicListDialog::modeChanged, + this, [ = ](int mode) { + Q_EMIT modeChanged(mode); + }); + + connect(d->musciListDialog, &MusicListDialog::pause, + this, [ = ](const MetaPtr meta) { + Q_EMIT pause(playlist(), meta); + }); + + connect(d->musciListDialog, &MusicListDialog::addMetasFavourite, + this, [ = ](const MetaPtrList & metalist) { + Q_EMIT addMetasFavourite(metalist); + }); + + connect(d->musciListDialog, &MusicListDialog::removeMetasFavourite, + this, [ = ](const MetaPtrList & metalist) { + Q_EMIT removeMetasFavourite(metalist); + }); + + setSelectionMode(QListView::ExtendedSelection); + setSelectionBehavior(QAbstractItemView::SelectRows); +} + +MusicListDataView::~MusicListDataView() +{ + +} + +PlaylistPtr MusicListDataView::playlist() const +{ + Q_D(const MusicListDataView); + return d->model->playlist(); +} + +int MusicListDataView::rowCount() +{ + Q_D(const MusicListDataView); + return d->model->rowCount(); +} + +int MusicListDataView::listSize() +{ + Q_D(MusicListDataView); + return d->curPlayMusicTypePtrList.size(); +} + +void MusicListDataView::setViewModeFlag(QListView::ViewMode mode) +{ + + if (mode == QListView::IconMode) { + setIconSize(QSize(150, 150)); + setGridSize(QSize(-1, -1)); + setViewportMargins(-10, -13, -35, 10); + setSpacing(20); + } else { + setIconSize(QSize(36, 36)); + setGridSize(QSize(-1, -1)); + setViewportMargins(0, 0, 8, 0); + setSpacing(0); + } + setViewMode(mode); +} + +void MusicListDataView::setPlaying(const MetaPtr meta) +{ + Q_D(MusicListDataView); + d->playing = meta; + d->musciListDialog->setPlaying(playing()); +} + +MetaPtr MusicListDataView::playing() const +{ + Q_D(const MusicListDataView); + return d->playing; +} + +MetaPtr MusicListDataView::hoverin() const +{ + Q_D(const MusicListDataView); + return d->hoverin; +} + +bool MusicListDataView::playingState() const +{ + return playlist()->playingStatus(); +} + +void MusicListDataView::showContextMenu(const QPoint &pos, PlaylistPtr selectedPlaylist, PlaylistPtr favPlaylist, QList newPlaylists) +{ + Q_D(const MusicListDataView); + d->musciListDialog->showContextMenu(pos, selectedPlaylist, favPlaylist, newPlaylists); +} + +PlayMusicTypePtrList MusicListDataView::playMusicTypePtrList() const +{ + Q_D(const MusicListDataView); + return d->curPlayMusicTypePtrList; +} + +void MusicListDataView::setThemeType(int type) +{ + Q_D(MusicListDataView); + d->themeType = type; + d->musciListDialog->setThemeType(type); +} + +int MusicListDataView::getThemeType() const +{ + Q_D(const MusicListDataView); + return d->themeType; +} + +void MusicListDataView::setPlayPixmap(QPixmap pixmap, QPixmap sidebarPixmap, QPixmap albumPixmap) +{ + Q_D(MusicListDataView); + d->playingPixmap = pixmap; + d->sidebarPixmap = sidebarPixmap; + d->albumPixmap = albumPixmap; + if (d->musciListDialog->isVisible()) + d->musciListDialog->setPlayPixmap(pixmap, sidebarPixmap); + update(); +} + +QPixmap MusicListDataView::getPlayPixmap() const +{ + Q_D(const MusicListDataView); + return d->playingPixmap; +} + +QPixmap MusicListDataView::getSidebarPixmap() const +{ + Q_D(const MusicListDataView); + return d->sidebarPixmap; +} + +QPixmap MusicListDataView::getAlbumPixmap() const +{ + Q_D(const MusicListDataView); + return d->albumPixmap; +} + +void MusicListDataView::updateList() +{ + Q_D(MusicListDataView); + PlaylistPtr playlist = d->model->playlist(); + if (playlist.isNull()) { + qWarning() << "can not change to emptry playlist"; + return; + } + + QVector allStr; + for (auto meta : playlist->playMusicTypePtrList()) { + allStr.append(meta->name); + } + + for (int i = d->model->rowCount() - 1; i >= 0; --i) { + auto index = d->model->index(i, 0); + auto itemName = d->model->data(index).toString(); + if (!allStr.contains(itemName)) { + d->curPlayMusicTypePtrList.removeAt(i); + d->model->removeRow(i); + } + } +} + +void MusicListDataView::mouseMoveEvent(QMouseEvent *event) +{ + Q_UNUSED(event) +} + +void MusicListDataView::onMusiclistChanged(PlaylistPtr playlist) +{ + Q_D(MusicListDataView); + + if (playlist.isNull()) { + qWarning() << "can not change to emptry playlist"; + d->model->removeRows(0, d->model->rowCount()); + d->model->setPlaylist(nullptr); + d->curPlayMusicTypePtrList.clear(); + return; + } + + setUpdatesEnabled(false); + d->model->removeRows(0, d->model->rowCount()); + + QString searchStr = playlist->searchStr(); + bool chineseFlag = false; + for (auto ch : searchStr) { + if (DMusic::PinyinSearch::isChinese(ch)) { + chineseFlag = true; + break; + } + } + d->curPlayMusicTypePtrList.clear(); + for (auto meta : playlist->playMusicTypePtrList()) { + if (searchStr.isEmpty()) { + d->addPlayMusicTypePtr(meta); + d->curPlayMusicTypePtrList.append(meta); + } else { + if (chineseFlag) { + if (meta->name.contains(searchStr, Qt::CaseInsensitive)) { + d->addPlayMusicTypePtr(meta); + d->curPlayMusicTypePtrList.append(meta); + } + } else { + if (playlist->searchStr().size() == 1) { + auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(meta->name); + if (!curTextList.isEmpty() && curTextList.first().contains(searchStr, Qt::CaseInsensitive)) { + d->addPlayMusicTypePtr(meta); + d->curPlayMusicTypePtrList.append(meta); + } + } else { + auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(meta->name); + if (!curTextList.isEmpty() && curTextList.join("").contains(searchStr, Qt::CaseInsensitive)) { + d->addPlayMusicTypePtr(meta); + d->curPlayMusicTypePtrList.append(meta); + } + } + } + } + } + + d->model->setPlaylist(playlist); + setUpdatesEnabled(true); + + //updateScrollbar(); +} diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/musiclistdataview.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiclistdataview.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/musiclistdataview.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiclistdataview.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include + +#include "../../core/playlist.h" + +DWIDGET_USE_NAMESPACE + +class MusicListDataViewPrivate; +class MusicListDataView : public DListView +{ + Q_OBJECT +public: + explicit MusicListDataView(QWidget *parent = Q_NULLPTR); + ~MusicListDataView() override; + + PlaylistPtr playlist() const; + + int rowCount(); + + int listSize(); + + void setViewModeFlag(QListView::ViewMode mode); + void setPlaying(const MetaPtr); + MetaPtr playing() const; + MetaPtr hoverin() const; + bool playingState()const; + + void showContextMenu(const QPoint &pos, + PlaylistPtr selectedPlaylist, + PlaylistPtr favPlaylist, + QList newPlaylists); + + PlayMusicTypePtrList playMusicTypePtrList() const; + + void setThemeType(int type); + int getThemeType() const; + + void setPlayPixmap(QPixmap pixmap, QPixmap sidebarPixmap, QPixmap albumPixmap); + QPixmap getPlayPixmap() const; + QPixmap getSidebarPixmap() const; + QPixmap getAlbumPixmap() const; + + void updateList(); + +signals: + void requestCustomContextMenu(const QPoint &pos); + void playMedia(const MetaPtr meta); + void resume(const MetaPtr meta); + void pause(PlaylistPtr playlist, const MetaPtr meta); + void addToPlaylist(PlaylistPtr playlist, const MetaPtrList &metalist); + void musiclistRemove(const MetaPtrList &metalist); + void musiclistDelete(const MetaPtrList &metalist); + void modeChanged(int); + void addMetasFavourite(const MetaPtrList &metalist); + void removeMetasFavourite(const MetaPtrList &metalist); + +protected: + virtual void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + +public: + void onMusiclistChanged(PlaylistPtr playlist); + +private: + QScopedPointer d_ptr; + Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusicListDataView) +}; diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/musiclistdialog.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiclistdialog.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/musiclistdialog.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiclistdialog.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,465 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "musiclistdialog.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "musiclistinfoview.h" +#include "musicimagebutton.h" +#include "infodialog.h" +#include "musictitleimage.h" + +DWIDGET_USE_NAMESPACE + +class MusicListDialogPrivate +{ +public: + MusicListDialogPrivate(MusicListDialog *parent) : q_ptr(parent) {} + + void initUI(); + void initConnection(); + + MusicTitleImageWidget *titleFrame = nullptr; + DLabel *titleLabel = nullptr; + DLabel *infoLabel = nullptr; + DPushButton *btPlayAll = nullptr; + DPushButton *btRandomPlay = nullptr; + InfoDialog *infoDialog = nullptr; + MusicImageButton *closeBt = nullptr; + MusicListInfoView *musicListInfoView = nullptr; + + MusicListDialog *q_ptr; + Q_DECLARE_PUBLIC(MusicListDialog) +}; + +void MusicListDialogPrivate::initUI() +{ + Q_Q(MusicListDialog); + + q->setAutoFillBackground(true); + auto palette = q->palette(); + QColor BackgroundColor("#F8F8F8"); + palette.setColor(DPalette::Window, BackgroundColor); + q->setPalette(palette); + + auto layout = new QVBoxLayout(q); + layout->setSpacing(0); + layout->setContentsMargins(0, 10, 0, 0); + + titleFrame = new MusicTitleImageWidget; + titleFrame->setFixedSize(480, 130); + QPixmap pixmap = DHiDPIHelper::loadNxPixmap(":/common/image/cover_max.svg"); + pixmap = pixmap.scaled(480, 130, Qt::KeepAspectRatioByExpanding); + titleFrame->setPixmap(pixmap); + + auto closeLayout = new QHBoxLayout(titleFrame); + closeLayout->setSpacing(0); + closeLayout->setContentsMargins(0, 5, 5, 0); + + auto titleLayout = new QVBoxLayout(titleFrame); + titleLayout->setSpacing(0); + titleLayout->setContentsMargins(28, 10, 0, 18); + + closeBt = new MusicImageButton(":/mpimage/light/normal/close_round normal.svg", + ":/mpimage/light/hover/close_round hover.svg", + ":/mpimage/light/press/close_round press.svg"); + closeBt->setFixedSize(24, 24); + closeBt->setFocusPolicy(Qt::NoFocus); +// closeBt = new DImageButton; +// closeBt->setNormalPic(":/mpimage/light/normal/close_round normal.svg"); +// closeBt->setHoverPic(":/mpimage/light/hover/close_round hover.svg"); +// closeBt->setPressPic(":/mpimage/light/press/close_round press.svg"); +// closeBt->setObjectName("InfoClose"); +// closeBt->setBaseSize(24, 24); + + titleLabel = new DLabel(); + titleLabel->setForegroundRole(DPalette::BrightText); + + infoLabel = new DLabel(); + infoLabel->setForegroundRole(DPalette::BrightText); + + + auto btLayout = new QHBoxLayout(titleFrame); + btLayout->setSpacing(0); + btLayout->setContentsMargins(0, 0, 0, 0); + + btPlayAll = new DPushButton; + auto btPlayAllFont = btPlayAll->font(); + btPlayAllFont.setPixelSize(14); + btPlayAll->setFont(btPlayAllFont); + auto playAllPalette = btPlayAll->palette(); + playAllPalette.setColor(DPalette::ButtonText, Qt::white); + playAllPalette.setColor(DPalette::Dark, QColor(Qt::red)); + playAllPalette.setColor(DPalette::Light, QColor(Qt::red)); + btPlayAll->setPalette(playAllPalette); + btPlayAll->setIcon(QIcon(":/mpimage/light/normal/play_all_normal.svg")); + btPlayAll->setText(MusicListDialog::tr("Play All")); + btPlayAll->setFixedHeight(30); + btPlayAll->setFocusPolicy(Qt::NoFocus); + btPlayAll->setIconSize(QSize(18, 18)); + + btRandomPlay = new DPushButton; + btRandomPlay->setFont(btPlayAllFont); + auto randomPlayPalette = btRandomPlay->palette(); + randomPlayPalette.setColor(DPalette::ButtonText, Qt::white); + randomPlayPalette.setColor(DPalette::Dark, QColor(Qt::darkGray)); + randomPlayPalette.setColor(DPalette::Light, QColor(Qt::darkGray)); + btRandomPlay->setPalette(randomPlayPalette); + btRandomPlay->setIcon(QIcon(":/mpimage/light/normal/random_play_normal.svg")); + btRandomPlay->setText(MusicListDialog::tr("Shuffle")); + btRandomPlay->setFixedHeight(30); + btRandomPlay->setFocusPolicy(Qt::NoFocus); + btRandomPlay->setIconSize(QSize(18, 18)); + + btLayout->addWidget(btPlayAll); + btLayout->addSpacing(10); + btLayout->addWidget(btRandomPlay); + btLayout->addStretch(100); + +// titleLayout->addWidget(closeBt, 0, Qt::AlignTop | Qt::AlignRight); + titleLayout->addWidget(titleLabel, 0, Qt::AlignTop); + titleLayout->addWidget(infoLabel, 0, Qt::AlignTop); + titleLayout->addLayout(btLayout, Qt::AlignTop); + + closeLayout->addLayout(titleLayout); + closeLayout->addWidget(closeBt, 0, Qt::AlignTop | Qt::AlignRight); + + musicListInfoView = new MusicListInfoView; +// DPalette pa = musicListInfoView->palette(); +// pa.setColor(DPalette::Base, pa.window().color()); +// musicListInfoView->setFrameShape(QFrame::NoFrame); +// musicListInfoView->setPalette(pa); +// musicListInfoView->setAutoFillBackground(true); + //musicListInfoView->setFixedWidth(479); + + layout->addWidget(titleFrame, 0, Qt::AlignTop | Qt::AlignCenter); + layout->addWidget(musicListInfoView); + + infoDialog = new InfoDialog(q); + infoDialog->hide(); + + q->connect(closeBt, &MusicImageButton::pressed, q, &DAbstractDialog::close); +} + +void MusicListDialogPrivate::initConnection() +{ + Q_Q(MusicListDialog); + + q->connect(musicListInfoView, &MusicListInfoView::requestCustomContextMenu, + q, [ = ](const QPoint & pos) { + Q_EMIT q->requestCustomContextMenu(pos); + }); + + q->connect(btPlayAll, &DPushButton::clicked, + q, [ = ]() { + musicListInfoView->playlist()->playMusicTypeToMeta(musicListInfoView->curName(), musicListInfoView->allMetaNames()); + auto curtMeta = musicListInfoView->firstMeta(); + if (curtMeta != nullptr) { + Q_EMIT q->playMedia(curtMeta); + Q_EMIT q->modeChanged(0); + } + }); + + q->connect(btRandomPlay, &DPushButton::clicked, + q, [ = ]() { + musicListInfoView->playlist()->playMusicTypeToMeta(musicListInfoView->curName()); + if (musicListInfoView->playlist()->first() != nullptr) { + + auto curPlayList = musicListInfoView->playlist(); + bool invalidFlag = true; + for (auto curMata : curPlayList->allmusic()) { + if (!curMata->invalid) { + invalidFlag = false; + break; + } else { + if (QFile::exists(curMata->localPath)) { + invalidFlag = false; + break; + } + } + } + if (!invalidFlag) { + auto cutMeta = musicListInfoView->playlist()->playing(); + if (cutMeta == nullptr) { + cutMeta = musicListInfoView->playlist()->first(); + } + while (true) { + cutMeta = musicListInfoView->playlist()->shuffleNext(cutMeta); + if (!cutMeta->invalid) + break; + else { + if (QFile::exists(cutMeta->localPath)) { + break; + } + } + } + + Q_EMIT q->playMedia(cutMeta); + Q_EMIT q->modeChanged(2); + } + } + }); + + q->connect(musicListInfoView, &MusicListInfoView::resume, + q, [ = ](const MetaPtr meta) { + Q_EMIT q->resume(meta); + }); + + q->connect(musicListInfoView, &MusicListInfoView::playMedia, + q, [ = ](const MetaPtr meta) { + musicListInfoView->playlist()->playMusicTypeToMeta(musicListInfoView->curName()); + Q_EMIT q->playMedia(meta); + musicListInfoView->update(); + }); + + q->connect(musicListInfoView, &MusicListInfoView::removeMusicList, + q, [ = ](const MetaPtrList & metalist) { + QString name = musicListInfoView->curName(); + auto playlist = musicListInfoView->playlist(); + for (auto meta : metalist) { + for (auto TypePtr : playlist->playMusicTypePtrList()) { + if (TypePtr->name == name) { + if (TypePtr->playlistMeta.metas.contains(meta->hash)) { + TypePtr->playlistMeta.metas.remove(meta->hash); + } + } + } + } + musicListInfoView->onMusiclistChanged(playlist, name); + + Q_EMIT q->musiclistRemove(metalist); + }); + q->connect(musicListInfoView, &MusicListInfoView::deleteMusicList, + q, [ = ](const MetaPtrList & metalist) { + QString name = musicListInfoView->curName(); + auto playlist = musicListInfoView->playlist(); + for (auto meta : metalist) { + for (auto TypePtr : playlist->playMusicTypePtrList()) { + if (TypePtr->name == name) { + if (TypePtr->playlistMeta.metas.contains(meta->hash)) { + TypePtr->playlistMeta.metas.remove(meta->hash); + } + } + } + } + musicListInfoView->onMusiclistChanged(playlist, name); + + Q_EMIT q->musiclistDelete(metalist); + }); + q->connect(musicListInfoView, &MusicListInfoView::addToPlaylist, + q, [ = ](PlaylistPtr playlist, const MetaPtrList metalist) { + Q_EMIT q->addToPlaylist(playlist, metalist); + }); + + q->connect(musicListInfoView, &MusicListInfoView::showInfoDialog, + q, [ = ](const MetaPtr meta) { + infoDialog->show(); + infoDialog->updateInfo(meta); + }); + + q->connect(musicListInfoView, &MusicListInfoView::pause, + q, [ = ](const MetaPtr meta) { + Q_EMIT q->pause(meta); + }); + q->connect(musicListInfoView, &MusicListInfoView::addMetasFavourite, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->addMetasFavourite(metalist); + }); + q->connect(musicListInfoView, &MusicListInfoView::removeMetasFavourite, + q, [ = ](const MetaPtrList & metalist) { + Q_EMIT q->removeMetasFavourite(metalist); + }); +} + +MusicListDialog::MusicListDialog(QWidget *parent) + : DAbstractDialog(parent), d_ptr(new MusicListDialogPrivate(this)) +{ + Q_D(MusicListDialog); + resize(500, 500); + + d->initUI(); + d->initConnection(); +} + +MusicListDialog::~MusicListDialog() +{ + +} + +void MusicListDialog::setPlayMusicData(PlaylistPtr playlist, PlayMusicTypePtr playMusicType) +{ + Q_D(MusicListDialog); + + d->titleLabel->setText(playMusicType->name); + auto titleFont = d->titleLabel->font(); + auto infoFont = d->infoLabel->font(); + if (!playMusicType->extraName.isEmpty()) { + titleFont.setPixelSize(24); + infoFont.setPixelSize(18); + d->infoLabel->setText(playMusicType->extraName); + } else { + titleFont.setPixelSize(36); + d->infoLabel->hide(); + } + d->titleLabel->setFont(titleFont); + d->infoLabel->setFont(infoFont); + + QString name = playMusicType->name; + for (auto meta : playlist->playMusicTypePtrList()) { + if (meta->name == name) { + if (!meta->icon.isEmpty()) { + QPixmap pixmap = QPixmap::fromImage(QImage::fromData(meta->icon)); + pixmap = pixmap.scaled(480, 130, Qt::KeepAspectRatioByExpanding); + d->titleFrame->setPixmap(pixmap); + } else { + QPixmap pixmap = DHiDPIHelper::loadNxPixmap(":/common/image/cover_max.svg"); + pixmap = pixmap.scaled(480, 130, Qt::KeepAspectRatioByExpanding); + d->titleFrame->setPixmap(pixmap); + } + break; + } + } + + d->musicListInfoView->onMusiclistChanged(playlist, name); +} + +void MusicListDialog::setPlaying(const MetaPtr Meta) +{ + Q_D(MusicListDialog); + d->musicListInfoView->setPlaying(Meta); +} + +void MusicListDialog::showContextMenu(const QPoint &pos, PlaylistPtr selectedPlaylist, PlaylistPtr favPlaylist, QList newPlaylists) +{ + Q_D(MusicListDialog); + d->musicListInfoView->showContextMenu(pos, selectedPlaylist, favPlaylist, newPlaylists); +} + +void MusicListDialog::setThemeType(int type) +{ + Q_D(MusicListDialog); + if (type == 1) { + auto palette = this->palette(); + QColor BackgroundColor("#F8F8F8"); + palette.setColor(DPalette::Background, BackgroundColor); + setPalette(palette); + +// d->closeBt->setNormalPic(":/mpimage/light/normal/close_round normal.svg"); +// d->closeBt->setHoverPic(":/mpimage/light/hover/close_round hover.svg"); +// d->closeBt->setPressPic(":/mpimage/light/press/close_round press.svg"); + + +// auto titleLabelPl = d->titleLabel->palette(); +// titleLabelPl.setColor(DPalette::WindowText, Qt::black); +// d->titleLabel->setPalette(titleLabelPl); + +// auto infoLabelPl = d->infoLabel->palette(); +// infoLabelPl.setColor(DPalette::WindowText, Qt::black); +// d->infoLabel->setPalette(infoLabelPl); + + auto playAllPalette = d->btPlayAll->palette(); + playAllPalette.setColor(DPalette::ButtonText, Qt::white); + playAllPalette.setColor(DPalette::Dark, QColor("#FD5E5E")); + playAllPalette.setColor(DPalette::Light, QColor("#FD5E5E")); + QColor sbcolor("#F82C47"); + sbcolor.setAlphaF(0.4); + playAllPalette.setColor(DPalette::Shadow, sbcolor); + d->btPlayAll->setPalette(playAllPalette); + + auto randomPlayPalette = d->btRandomPlay->palette(); + randomPlayPalette.setColor(DPalette::ButtonText, Qt::white); + randomPlayPalette.setColor(DPalette::Dark, QColor("#646464")); + randomPlayPalette.setColor(DPalette::Light, QColor("#5C5C5C")); + QColor randombcolor("#000000"); + randombcolor.setAlphaF(0.2); + randomPlayPalette.setColor(DPalette::Shadow, randombcolor); + d->btRandomPlay->setPalette(randomPlayPalette); + } else { + auto palette = this->palette(); + QColor BackgroundColor("#252525"); + palette.setColor(DPalette::Background, BackgroundColor); + setPalette(palette); + +// d->closeBt->setNormalPic(":/mpimage/dark/close_round/close_normal_dark.svg"); +// d->closeBt->setHoverPic(":/mpimage/dark/close_round/close_hover_dark.svg"); +// d->closeBt->setPressPic(":/mpimage/dark/close_round/close_press.svg"); + +// auto titleLabelPl = d->titleLabel->palette(); +// titleLabelPl.setColor(DPalette::WindowText, Qt::white); +// d->titleLabel->setPalette(titleLabelPl); + +// auto infoLabelPl = d->infoLabel->palette(); +// infoLabelPl.setColor(DPalette::WindowText, Qt::white); +// d->infoLabel->setPalette(infoLabelPl); + + auto playAllPalette = d->btPlayAll->palette(); + playAllPalette.setColor(DPalette::ButtonText, "#FFFFFF"); + playAllPalette.setColor(DPalette::Dark, QColor("#DA2D2D")); + playAllPalette.setColor(DPalette::Light, QColor("#A51B1B")); + QColor sbcolor("#C10A0A"); + sbcolor.setAlphaF(0.5); + playAllPalette.setColor(DPalette::Shadow, sbcolor); + d->btPlayAll->setPalette(playAllPalette); + + auto randomPlayPalette = d->btRandomPlay->palette(); + randomPlayPalette.setColor(DPalette::ButtonText, "#FFFFFF"); + randomPlayPalette.setColor(DPalette::Dark, QColor("#555454")); + randomPlayPalette.setColor(DPalette::Light, QColor("#414141")); +// QColor randombcolor("#FFFFFF"); +// randombcolor.setAlphaF(0.08); +// randomPlayPalette.setColor(DPalette::Shadow, randombcolor); + d->btRandomPlay->setPalette(randomPlayPalette); + } + QString rStr; + if (type == 1) { + rStr = "light"; + } else { + rStr = "dark"; + } +// d->closeBt->setPixmap(QPixmap(QString(":/mpimage/light/normal/close_round normal.svg").arg(rStr))); +// d->closeBt->setNormalPic(":/mpimage/light/normal/close_round normal.svg"); +// d->closeBt->setHoverPic(":/mpimage/light/hover/close_round hover.svg"); +// d->closeBt->setPressPic(":/mpimage/light/press/close_round press.svg"); + d->btPlayAll->setIcon(QIcon(QString(":/mpimage/light/normal/play_all_normal.svg").arg(rStr))); + d->btRandomPlay->setIcon(QIcon(QString(":/mpimage/light/normal/random_play_normal.svg").arg(rStr))); + d->titleFrame->setThemeType(type); + d->musicListInfoView->setThemeType(type); + d->infoDialog->setThemeType(type); +} + +void MusicListDialog::setPlayPixmap(QPixmap pixmap, QPixmap sidebarPixmap) +{ + Q_D(MusicListDialog); + d->musicListInfoView->setPlayPixmap(pixmap, sidebarPixmap); + update(); +} diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/musiclistdialog.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiclistdialog.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/musiclistdialog.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiclistdialog.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include + +#include "../core/playlist.h" + +DWIDGET_USE_NAMESPACE + +class MusicListDialogPrivate; +class MusicListDialog : public DAbstractDialog +{ + Q_OBJECT + +public: + explicit MusicListDialog(QWidget *parent = Q_NULLPTR); + ~MusicListDialog(); + + void setPlayMusicData(PlaylistPtr playlist, PlayMusicTypePtr playMusicType); + void setPlaying(const MetaPtr); + + void showContextMenu(const QPoint &pos, + PlaylistPtr selectedPlaylist, + PlaylistPtr favPlaylist, + QList newPlaylists); + + void setThemeType(int type); + void setPlayPixmap(QPixmap pixmap, QPixmap sidebarPixmap); + +signals: + void requestCustomContextMenu(const QPoint &pos); + void playMedia(const MetaPtr meta); + void resume(const MetaPtr meta); + void addToPlaylist(PlaylistPtr playlist, const MetaPtrList &metalist); + void musiclistRemove(const MetaPtrList &metalist); + void musiclistDelete(const MetaPtrList &metalist); + void modeChanged(int); + void pause(const MetaPtr meta); + void addMetasFavourite(const MetaPtrList &metalist); + void removeMetasFavourite(const MetaPtrList &metalist); + +private: + QScopedPointer d_ptr; + Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusicListDialog) +}; + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/musiclistinfoview.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiclistinfoview.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/musiclistinfoview.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiclistinfoview.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,739 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "musiclistinfoview.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "../../core/metasearchservice.h" +#include "../helper/widgethellper.h" + +#include "delegate/musicinfoitemdelegate.h" +#include "model/musiclistinfomodel.h" + +DWIDGET_USE_NAMESPACE + +class MusicListInfoViewPrivate +{ +public: + MusicListInfoViewPrivate(MusicListInfoView *parent): q_ptr(parent) {} + + void addMedia(const MetaPtr meta); + void removeSelection(QItemSelectionModel *selection); + + MusiclistInfomodel *model = nullptr; + MusicInfoItemDelegate *delegate = nullptr; + int themeType = 1; + + QString curName = ""; + + MetaPtr playing = nullptr; + QPixmap playingPixmap = QPixmap(":/mpimage/light/music1.svg"); + QPixmap sidebarPixmap = QPixmap(":/mpimage/light/music_withe_sidebar/music1.svg"); + + MusicListInfoView *q_ptr; + Q_DECLARE_PUBLIC(MusicListInfoView) +}; + +MusicListInfoView::MusicListInfoView(QWidget *parent) + : QListView(parent), d_ptr(new MusicListInfoViewPrivate(this)) +{ + Q_D(MusicListInfoView); + + setFrameShape(QFrame::NoFrame); + + setAutoFillBackground(true); + auto palette = this->palette(); + QColor BackgroundColor("#FFFFFF"); + palette.setColor(DPalette::Background, BackgroundColor); + setPalette(palette); + setIconSize(QSize(36, 36)); +// setGridSize( QSize(36, 36) ); + d->model = new MusiclistInfomodel(0, 1, this); + setModel(d->model); + + d->delegate = new MusicInfoItemDelegate; + setItemDelegate(d->delegate); + + setDragEnabled(true); + viewport()->setAcceptDrops(true); + setDropIndicatorShown(true); + setDragDropOverwriteMode(false); + //setVerticalScrollMode(QAbstractItemView::ScrollPerItem); + //setHorizontalScrollMode(QAbstractItemView::ScrollPerItem); + setDefaultDropAction(Qt::MoveAction); + setDragDropMode(QAbstractItemView::NoDragDrop); + setResizeMode(QListView::Adjust); + setMovement(QListView::Free); + setLayoutMode(QListView::Batched); + + setSelectionMode(QListView::ExtendedSelection); + setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + //setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setEditTriggers(QAbstractItemView::NoEditTriggers); + setSelectionBehavior(QAbstractItemView::SelectRows); + setContextMenuPolicy(Qt::CustomContextMenu); + connect(this, &MusicListInfoView::customContextMenuRequested, + this, &MusicListInfoView::requestCustomContextMenu); + + connect(this, &MusicListInfoView::doubleClicked, + this, [ = ](const QModelIndex & index) { + MetaPtr meta = d->model->meta(index); + if (meta == playlist()->playing()) { + Q_EMIT resume(meta); + } else { + Q_EMIT playMedia(meta); + } + }); +} + +MusicListInfoView::~MusicListInfoView() +{ + +} + +MetaPtr MusicListInfoView::activingMeta() const +{ + Q_D(const MusicListInfoView); + + if (d->model->playlist().isNull()) { + return MetaPtr(); + } + + return d->model->playlist()->playing(); +} + +MetaPtr MusicListInfoView::firstMeta() const +{ + Q_D(const MusicListInfoView); + MetaPtr curMeta = nullptr; + for (int i = 0; i < d->model->rowCount(); ++i) { + auto index = d->model->index(i, 0); + MetaPtr meta = d->model->meta(index); + if (!meta->invalid) { + curMeta = meta; + break; + } else { + if (QFile::exists(meta->localPath)) { + curMeta = meta; + break; + } + } + } + return curMeta; +} + +PlaylistPtr MusicListInfoView::playlist() const +{ + Q_D(const MusicListInfoView); + return d->model->playlist(); +} + +QModelIndex MusicListInfoView::findIndex(const MetaPtr meta) +{ + Q_ASSERT(!meta.isNull()); + Q_D(MusicListInfoView); + + return d->model->findIndex(meta); +} + +QString MusicListInfoView::curName() const +{ + Q_D(const MusicListInfoView); + return d->curName; +} + +void MusicListInfoView::setPlaying(const MetaPtr meta) +{ + Q_D(MusicListInfoView); + d->playing = meta; + update(); +} + +MetaPtr MusicListInfoView::playing() const +{ + Q_D(const MusicListInfoView); + return d->playing; +} + +void MusicListInfoView::setThemeType(int type) +{ + Q_D(MusicListInfoView); + d->themeType = type; +} + +int MusicListInfoView::getThemeType() const +{ + Q_D(const MusicListInfoView); + return d->themeType; +} + +void MusicListInfoView::setPlayPixmap(QPixmap pixmap, QPixmap sidebarPixmap) +{ + Q_D(MusicListInfoView); + d->playingPixmap = pixmap; + d->sidebarPixmap = sidebarPixmap; + auto index = d->model->findIndex(d->playing); + if (index.isValid()) + update(index); + + viewport()->update(); +} + +QPixmap MusicListInfoView::getPlayPixmap() const +{ + Q_D(const MusicListInfoView); + return d->playingPixmap; +} + +QPixmap MusicListInfoView::getSidebarPixmap() const +{ + Q_D(const MusicListInfoView); + return d->sidebarPixmap; +} + +QStringList MusicListInfoView::allMetaNames() const +{ + Q_D(const MusicListInfoView); + QStringList allMetaNames; + for (int i = 0; i < d->model->rowCount(); ++i) { + auto index = d->model->index(i, 0); + auto hash = d->model->data(index).toString(); + if (!hash.isEmpty()) { + allMetaNames.append(hash); + } + } + return allMetaNames; +} + +void MusicListInfoView::onMusicListRemoved(const MetaPtrList metalist) +{ + Q_D(MusicListInfoView); + + setAutoScroll(false); + for (auto meta : metalist) { + if (meta.isNull()) { + continue; + } + + for (int i = 0; i < d->model->rowCount(); ++i) { + auto index = d->model->index(i, 0); + auto itemHash = d->model->data(index).toString(); + if (itemHash == meta->hash) { + d->model->removeRow(i); + } + } + } + //updateScrollbar(); + setAutoScroll(true); +} + +void MusicListInfoView::onMusicError(const MetaPtr meta, int /*error*/) +{ + Q_ASSERT(!meta.isNull()); +// Q_D(MusicListInfoView); + +// qDebug() << error; +// QModelIndex index = findIndex(meta); + +// auto indexData = index.data().value(); +// indexData.invalid = (error != 0); +// d->m_model->setData(index, QVariant::fromValue(indexData)); + + update(); +} + +void MusicListInfoView::onMusicListAdded(const MetaPtrList metalist) +{ + Q_D(MusicListInfoView); + for (auto meta : metalist) { + d->addMedia(meta); + } +} + +void MusicListInfoView::onLocate(const MetaPtr meta) +{ + QModelIndex index = findIndex(meta); + if (!index.isValid()) { + return; + } + + clearSelection(); + + auto viewRect = QRect(QPoint(0, 0), size()); + if (!viewRect.intersects(visualRect(index))) { + scrollTo(index, MusicListInfoView::PositionAtCenter); + } + setCurrentIndex(index); +} + +void MusicListInfoView::onMusiclistChanged(PlaylistPtr playlist, const QString name) +{ + Q_D(MusicListInfoView); + + if (playlist.isNull()) { + qWarning() << "can not change to emptry playlist"; + return; + } + + d->curName = name; + + d->model->removeRows(0, d->model->rowCount()); + for (auto TypePtr : playlist->playMusicTypePtrList()) { + if (TypePtr->name == name) { + for (auto metaHash : TypePtr->playlistMeta.sortMetas) { + if (TypePtr->playlistMeta.metas.contains(metaHash)) + d->addMedia(TypePtr->playlistMeta.metas[metaHash]); + } + } + } + + d->model->setPlaylist(playlist); + //updateScrollbar(); +} + +void MusicListInfoView::keyPressEvent(QKeyEvent *event) +{ + Q_D(MusicListInfoView); + switch (event->modifiers()) { + case Qt::NoModifier: + switch (event->key()) { + case Qt::Key_Delete: + QItemSelectionModel *selection = this->selectionModel(); + d->removeSelection(selection); + break; + } + break; + case Qt::ShiftModifier: + switch (event->key()) { + case Qt::Key_Delete: + break; + } + break; + case Qt::AltModifier: + switch (event->key()) { + case Qt::Key_Return: + QItemSelectionModel *selection = this->selectionModel(); + if (selection->selectedRows().length() <= 0) { + return; + } + auto index = selection->selectedRows().first(); + auto meta = d->model->meta(index); + Q_EMIT showInfoDialog(meta); + break; + } + break; + case Qt::ControlModifier: + switch (event->key()) { + case Qt::Key_K: + QItemSelectionModel *selection = this->selectionModel(); + if (selection->selectedRows().length() > 0) { + MetaPtrList metalist; + for (auto index : selection->selectedRows()) { + auto meta = d->model->meta(index); + metalist << meta; + } + if (!metalist.isEmpty()) + Q_EMIT addMetasFavourite(metalist); + } + break; + } + break; + case Qt::ControlModifier | Qt::ShiftModifier: + switch (event->key()) { + case Qt::Key_K: + QItemSelectionModel *selection = this->selectionModel(); + if (selection->selectedRows().length() > 0) { + MetaPtrList metalist; + for (auto index : selection->selectedRows()) { + auto meta = d->model->meta(index); + metalist << meta; + } + if (!metalist.isEmpty()) + Q_EMIT removeMetasFavourite(metalist); + } + break; + } + break; + default: + break; + } + + QAbstractItemView::keyPressEvent(event); +} + +void MusicListInfoView::keyboardSearch(const QString &search) +{ + Q_UNUSED(search); +// Disable keyborad serach +// qDebug() << search; +// QAbstractItemView::keyboardSearch(search); +} + +void MusicListInfoViewPrivate::addMedia(const MetaPtr meta) +{ + if (meta == nullptr) { + return; + } + QStandardItem *newItem = new QStandardItem; + QPixmap cover(":/common/image/cover_max.svg"); + auto coverData = MetaSearchService::coverData(meta); + if (coverData.length() > 0) { + cover = QPixmap::fromImage(QImage::fromData(coverData)); + } + QIcon icon = QIcon(cover); + newItem->setIcon(icon); + model->appendRow(newItem); + + auto row = model->rowCount() - 1; + QModelIndex index = model->index(row, 0, QModelIndex()); + model->setData(index, meta->hash); +} + +void MusicListInfoViewPrivate::removeSelection(QItemSelectionModel *selection) +{ + Q_ASSERT(selection != nullptr); + Q_Q(MusicListInfoView); + + MetaPtrList metalist; + for (auto index : selection->selectedRows()) { + auto meta = model->meta(index); + metalist << meta; + } + Q_EMIT q->removeMusicList(metalist); +} + +void MusicListInfoView::showContextMenu(const QPoint &pos, + PlaylistPtr selectedPlaylist, + PlaylistPtr favPlaylist, + QList newPlaylists) +{ + Q_D(MusicListInfoView); + QItemSelectionModel *selection = this->selectionModel(); + + if (selection->selectedRows().length() <= 0) { + return; + } + + QPoint globalPos = this->mapToGlobal(pos); + + DMenu playlistMenu; + auto newvar = QVariant::fromValue(PlaylistPtr()); + + PlaylistPtr curPlaylist = nullptr; + for (auto playlist : newPlaylists) { + if (playlist->id() == PlayMusicListID) { + curPlaylist = playlist; + auto act = playlistMenu.addAction(tr("Play queue")); + act->setData(QVariant::fromValue(curPlaylist)); + playlistMenu.addSeparator(); + break; + } + } + + if (selectedPlaylist != favPlaylist) { + auto act = playlistMenu.addAction(favPlaylist->displayName()); + act->setData(QVariant::fromValue(favPlaylist)); + bool flag = true; + for (auto &index : selection->selectedRows()) { + auto meta = d->model->meta(index); + if (!favPlaylist->contains(meta)) { + flag = false; + } + } + if (flag == true) { + act->setEnabled(false); + } else { + act->setEnabled(true); + } + playlistMenu.addSeparator(); + } + + auto createPlaylist = playlistMenu.addAction(tr("Add to new playlist")); +// auto font = createPlaylist->font(); +// font.setWeight(QFont::DemiBold); +// createPlaylist->setFont(font); + createPlaylist->setData(newvar); + playlistMenu.addSeparator(); + + for (auto playlist : newPlaylists) { + if (playlist == nullptr) + continue; + if (playlist->id() == PlayMusicListID) { + curPlaylist = playlist; + continue; + } + QFont font(playlistMenu.font()); + QFontMetrics fm(font); + auto text = fm.elidedText(QString(playlist->displayName().replace("&", "&&")), + Qt::ElideMiddle, 160); + auto act = playlistMenu.addAction(text); + act->setData(QVariant::fromValue(playlist)); + } + + playlistMenu.addSeparator(); + + connect(&playlistMenu, &DMenu::triggered, this, [ = ](QAction * action) { + auto playlist = action->data().value(); + qDebug() << playlist; + MetaPtrList metalist; + for (auto &index : selection->selectedRows()) { + auto meta = d->model->meta(index); + if (!meta.isNull()) { + metalist << meta; + } + } + Q_EMIT addToPlaylist(playlist, metalist); + }); + + bool singleSelect = (1 == selection->selectedRows().length()); + + DMenu myMenu; + QAction *playAction = nullptr; + QAction *pauseAction = nullptr; + if (singleSelect) { + auto meta = d->model->meta(selection->selectedRows().first()); + if (d->model->playlist()->playingStatus() && d->playing == meta) { + pauseAction = myMenu.addAction(tr("Pause")); + } else { + playAction = myMenu.addAction(tr("Play")); + } + } + myMenu.addAction(tr("Add to playlist"))->setMenu(&playlistMenu); + myMenu.addSeparator(); + + QAction *displayAction = nullptr; + if (singleSelect) { + displayAction = myMenu.addAction(tr("Display in file manager")); + } + + auto removeAction = myMenu.addAction(tr("Remove from playlist")); + auto deleteAction = myMenu.addAction(tr("Delete from local disk")); + + QAction *songAction = nullptr; + + DMenu textCodecMenu; + if (singleSelect) { + auto index = selection->selectedRows().first(); + auto meta = d->model->meta(index); + QList codecList = DMusic::detectMetaEncodings(meta); +// codecList << "utf-8" ; + for (auto codec : codecList) { + auto act = textCodecMenu.addAction(codec); + act->setData(QVariant::fromValue(codec)); + } + +// if (codecList.length() > 1) { +// myMenu.addSeparator(); +// myMenu.addAction(tr("Encoding"))->setMenu(&textCodecMenu); +// } + + myMenu.addSeparator(); + songAction = myMenu.addAction(tr("Song info")); + + connect(&textCodecMenu, &DMenu::triggered, this, [ = ](QAction * action) { + auto codec = action->data().toByteArray(); + meta->updateCodec(codec); + Q_EMIT updateMetaCodec(meta); + }); + } + + if (playAction) { + connect(playAction, &QAction::triggered, this, [ = ](bool) { + auto index = selection->selectedRows().first(); + if (d->model->meta(index) == playlist()->playing()) { + Q_EMIT resume(d->model->meta(index)); + } else { + Q_EMIT playMedia(d->model->meta(index)); + } + }); + } + + if (pauseAction) { + connect(pauseAction, &QAction::triggered, this, [ = ](bool) { + auto index = selection->selectedRows().first(); + Q_EMIT pause(d->model->meta(index)); + }); + } + + if (displayAction) { + connect(displayAction, &QAction::triggered, this, [ = ](bool) { + auto index = selection->selectedRows().first(); + auto meta = d->model->meta(index); + auto dirUrl = QUrl::fromLocalFile(meta->localPath); + Dtk::Widget::DDesktopServices::showFileItem(dirUrl); + }); + } + + if (removeAction) { + connect(removeAction, &QAction::triggered, this, [ = ](bool) { + MetaPtrList metalist; + for (auto index : selection->selectedRows()) { + auto meta = d->model->meta(index); + metalist << meta; + } + if (metalist.isEmpty()) + return ; + + Dtk::Widget::DDialog warnDlg(this); + warnDlg.setTextFormat(Qt::RichText); + warnDlg.addButton(tr("Cancel"), true, Dtk::Widget::DDialog::ButtonNormal); + int deleteFlag = warnDlg.addButton(tr("Remove"), false, Dtk::Widget::DDialog::ButtonWarning); + + if (1 == metalist.length()) { + auto meta = metalist.first(); + warnDlg.setMessage(QString(tr("Are you sure you want to remove %1?")).arg(meta->title)); + } else { + warnDlg.setMessage(QString(tr("Are you sure you want to remove the selected %1 songs?").arg(metalist.length()))); + } + + warnDlg.setIcon(QIcon::fromTheme("deepin-music")); + if (deleteFlag == warnDlg.exec()) { + d->removeSelection(selection); + } + }); + } + + if (deleteAction) { + connect(deleteAction, &QAction::triggered, this, [ = ](bool) { + //bool containsCue = false; + MetaPtrList metalist; + for (auto index : selection->selectedRows()) { + auto meta = d->model->meta(index); + if (!meta->cuePath.isEmpty()) { + //containsCue = true; + } + metalist << meta; + } + + Dtk::Widget::DDialog warnDlg(this); + warnDlg.setTextFormat(Qt::RichText); + warnDlg.addButton(tr("Cancel"), true, Dtk::Widget::DDialog::ButtonWarning); + warnDlg.addButton(tr("Delete"), false, Dtk::Widget::DDialog::ButtonNormal); + + auto cover = QImage(QString(":/common/image/del_notify.svg")); + if (1 == metalist.length()) { + auto meta = metalist.first(); + auto coverData = MetaSearchService::coverData(meta); + if (coverData.length() > 0) { + cover = QImage::fromData(coverData); + } + warnDlg.setMessage(QString(tr("Are you sure you want to delete %1?")).arg(meta->title)); + } else { +// warnDlg.setTitle(QString(tr("Are you sure you want to delete the selected %1 songs?")).arg(metalist.length())); + DLabel *t_titleLabel = new DLabel(this); + t_titleLabel->setForegroundRole(DPalette::TextTitle); + DLabel *t_infoLabel = new DLabel(this); + t_infoLabel->setForegroundRole(DPalette::TextTips); + t_titleLabel->setText(tr("Are you sure you want to delete the selected %1 songs?").arg(metalist.length())); + t_infoLabel->setText(tr("The song files contained will also be deleted")); + warnDlg.addContent(t_titleLabel, Qt::AlignHCenter); + warnDlg.addContent(t_infoLabel, Qt::AlignHCenter); + warnDlg.addSpacing(20); + } +#if 0 + if (containsCue && false) { +// warnDlg.setTitle(tr("Are you sure you want to delete the selected %1 songs?").arg(metalist.length())); +// warnDlg.setMessage(tr("The song files contained will also be deleted")); + DLabel *t_titleLabel = new DLabel(this); + t_titleLabel->setForegroundRole(DPalette::TextTitle); + DLabel *t_infoLabel = new DLabel(this); + t_infoLabel->setForegroundRole(DPalette::TextTips); + t_titleLabel->setText(tr("Are you sure you want to delete the selected %1 songs?").arg(metalist.length())); + t_infoLabel->setText(tr("The song files contained will also be deleted")); + warnDlg.addContent(t_titleLabel, Qt::AlignHCenter); + warnDlg.addContent(t_infoLabel, Qt::AlignHCenter); + warnDlg.addSpacing(20); + } +#endif + auto coverPixmap = QPixmap::fromImage(WidgetHelper::cropRect(cover, QSize(64, 64))); + + warnDlg.setIcon(QIcon::fromTheme("deepin-music")); + if (1 == warnDlg.exec()) { + Q_EMIT deleteMusicList(metalist); + } + }); + } + + if (songAction) { + connect(songAction, &QAction::triggered, this, [ = ](bool) { + auto index = selection->selectedRows().first(); + auto meta = d->model->meta(index); + Q_EMIT showInfoDialog(meta); + }); + } + + myMenu.exec(globalPos); +} + +void MusicListInfoView::dragEnterEvent(QDragEnterEvent *event) +{ + QListView::dragEnterEvent(event); +} + +void MusicListInfoView::startDrag(Qt::DropActions supportedActions) +{ + Q_D(MusicListInfoView); + + MetaPtrList list; + for (auto index : selectionModel()->selectedIndexes()) { + list << d->model->meta(index); + } + + setAutoScroll(false); + QListView::startDrag(supportedActions); + setAutoScroll(true); + + QMap hashIndexs; + for (int i = 0; i < d->model->rowCount(); ++i) { + auto index = d->model->index(i, 0); + auto hash = d->model->data(index).toString(); + Q_ASSERT(!hash.isEmpty()); + hashIndexs.insert(hash, i); + } + d->model->playlist()->saveSort(hashIndexs); + Q_EMIT customSort(); + + QItemSelection selection; + for (auto meta : list) { + if (!meta.isNull()) { + auto index = this->findIndex(meta); + selection.append(QItemSelectionRange(index)); + } + } + if (!selection.isEmpty()) { + selectionModel()->select(selection, QItemSelectionModel::Select); + } +} + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/musiclistinfoview.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiclistinfoview.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/musiclistinfoview.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiclistinfoview.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include + +#include "../../core/playlist.h" + +DWIDGET_USE_NAMESPACE + +class MusicListInfoViewPrivate; +class MusicListInfoView : public QListView +{ + Q_OBJECT +public: + explicit MusicListInfoView(QWidget *parent = Q_NULLPTR); + ~MusicListInfoView() override; + + MetaPtr activingMeta() const; + MetaPtr firstMeta() const; + PlaylistPtr playlist() const; + QModelIndex findIndex(const MetaPtr meta); + QString curName() const; + void setPlaying(const MetaPtr meta); + MetaPtr playing() const; + + void setThemeType(int type); + int getThemeType() const; + + void setPlayPixmap(QPixmap pixmap, QPixmap sidebarPixmap); + QPixmap getPlayPixmap() const; + QPixmap getSidebarPixmap() const; + + QStringList allMetaNames() const; + +signals: + void addToPlaylist(PlaylistPtr playlist, const MetaPtrList &metalist); + void removeMusicList(const MetaPtrList &metalist); + void deleteMusicList(const MetaPtrList &metalist); + void playMedia(const MetaPtr meta); + void resume(const MetaPtr meta); + void updateMetaCodec(const MetaPtr meta); + void showInfoDialog(const MetaPtr meta); + void requestCustomContextMenu(const QPoint &pos); + void customSort(); + void pause(const MetaPtr meta); + void addMetasFavourite(const MetaPtrList &metalist); + void removeMetasFavourite(const MetaPtrList &metalist); + +public: + void onMusiclistChanged(PlaylistPtr playlist, const QString name); + void onMusicListAdded(const MetaPtrList metalist); + void onMusicListRemoved(const MetaPtrList metalist); + void onMusicError(const MetaPtr meta, int error); + void onLocate(const MetaPtr meta); + void showContextMenu(const QPoint &pos, + PlaylistPtr selectedPlaylist, + PlaylistPtr favPlaylist, + QList newPlaylists); + +protected: + virtual void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE; + virtual void startDrag(Qt::DropActions supportedActions) Q_DECL_OVERRIDE; + virtual void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE; + virtual void keyboardSearch(const QString &search) Q_DECL_OVERRIDE; + +private: + QScopedPointer d_ptr; + Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusicListInfoView) + +}; diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/musiclistitem.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiclistitem.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/musiclistitem.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiclistitem.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,205 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "musiclistitem.h" + +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include "core/playlist.h" + +static int LineEditWidth = 105; + +MusicListItem::MusicListItem(PlaylistPtr playlist, QWidget *parent) : DFrame(parent) +{ + m_data = playlist; + Q_ASSERT(playlist); + + setObjectName("MusicListItem"); + + auto layout = new QHBoxLayout(this); + layout->setContentsMargins(10, 0, 10, 0); + layout->setSpacing(0); + + auto interFrame = new DFrame; + interFrame->setObjectName("MusicListInterFrame"); + + auto interLayout = new QHBoxLayout(interFrame); + interLayout->setContentsMargins(0, 0, 0, 0); + interLayout->setSpacing(0); + + auto icon = new DLabel; + icon->setObjectName("MusicListIcon"); + icon->setFixedSize(24, 24); + icon->setProperty("iconName", playlist->icon()); + + m_titleedit = new DLineEdit; + m_titleedit->setObjectName("MusicListTitle"); + m_titleedit->setFixedHeight(24); + m_titleedit->setMaximumWidth(160); + m_titleedit->lineEdit()->setMaxLength(255); + m_titleedit->lineEdit()->setMaxLength(40); + m_titleedit->setProperty("EditValue", playlist->displayName()); + + m_titleedit->setDisabled(true); + if (playlist->readonly()) { + m_titleedit->lineEdit()->setReadOnly(true); + } + + if (playlist->editmode()) { + m_titleedit->setEnabled(true); + QTimer::singleShot(200, this, [ = ] { + m_titleedit->setFocus(); + m_titleedit->lineEdit()->setCursorPosition(0); + m_titleedit->lineEdit()->setSelection(0, m_titleedit->text().length()); + }); + } + + interLayout->addWidget(icon, 0, Qt::AlignCenter); + interLayout->addSpacing(10); + interLayout->addWidget(m_titleedit, 0, Qt::AlignRight); + interLayout->addStretch(); + + layout->addWidget(interFrame); + + setFixedHeight(56); + setFixedWidth(220); + + interLayout->addSpacing(5); + + + // TODO: wtf + QFont font(m_titleedit->font()); + font.setPixelSize(12); + QFontMetrics fm(font); + m_titleedit->setText(fm.elidedText(QString(playlist->displayName()), + Qt::ElideMiddle, LineEditWidth)); + + connect(m_titleedit, &DLineEdit::editingFinished, + this, [ = ] { + if (m_titleedit->text().isEmpty()) + { + m_titleedit->setText(m_titleedit->property("EditValue").toString()); + } else + { + Q_EMIT this->rename(m_titleedit->text()); + m_titleedit->setProperty("EditValue", m_titleedit->text()); + } + + QFont font(m_titleedit->font()); + font.setPixelSize(12); + QFontMetrics fm(font); + m_titleedit->setText(fm.elidedText(QString(m_titleedit->text()), + Qt::ElideMiddle, LineEditWidth)); + + m_titleedit->setEnabled(false); + }); + + connect(m_titleedit, &DLineEdit::returnPressed, + this, [ = ] { + m_titleedit->blockSignals(true); + this->setFocus(); + m_titleedit->blockSignals(false); + }); + + connect(this, &MusicListItem::rename, + m_data.data(), &Playlist::setDisplayName); + connect(this, &MusicListItem::remove, + m_data.data(), &Playlist::removed); +} + +void MusicListItem::setActive(bool active) +{ + QString prefix; + if (active) { + m_titleedit->setProperty("status", "active"); + } else { + m_titleedit->setProperty("status", ""); + } + this->update(); +} + +void MusicListItem::setPlay(bool isPaly) +{ + if (isPaly) { + } else { + } +} + +void MusicListItem::mouseDoubleClickEvent(QMouseEvent *event) +{ +// DFrame::mouseDoubleClickEvent(event); + + auto lineeditMousePos = m_titleedit->mapFromParent(event->pos()); + if (!m_titleedit->rect().contains(lineeditMousePos)) { + return; + } + + if (m_titleedit->lineEdit()->isReadOnly()) { + return; + } + + QTimer::singleShot(0, this, [ = ] { +// m_titleedit->setEnabled(true); +// m_titleedit->setFocus(); +// m_titleedit->setCursorPosition(m_titleedit->text().length()); + }); +} + +void MusicListItem::onDelete() +{ + QString message = QString(tr("Are you sure you want to delete this playlist?")); + + DDialog warnDlg(this); + warnDlg.setIcon(QIcon::fromTheme("deepin-music")); + warnDlg.setTextFormat(Qt::AutoText); + warnDlg.setTitle(message); + warnDlg.addButton(tr("Cancel"), false, Dtk::Widget::DDialog::ButtonNormal); + warnDlg.addButton(tr("Delete"), true, Dtk::Widget::DDialog::ButtonWarning); + + if (0 == warnDlg.exec()) { + return; + } + Q_EMIT this->remove(); +} + +void MusicListItem::onRename() +{ + QTimer::singleShot(1, this, [ = ] { + auto value = m_titleedit->property("EditValue").toString(); + qDebug() << value; + m_titleedit->setText(value); + m_titleedit->setEnabled(true); + m_titleedit->setFocus(); + m_titleedit->lineEdit()->setCursorPosition(0); + m_titleedit->lineEdit()->setSelection(0, m_titleedit->text().length()); + }); +} + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/musiclistitem.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiclistitem.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/musiclistitem.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiclistitem.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include + +#include + +#include "../../core/playlist.h" + +DWIDGET_USE_NAMESPACE + +class MusicListItem : public DFrame +{ + Q_OBJECT + Q_PROPERTY(QString playingIcon READ playingIcon WRITE setPlayingIcon) + Q_PROPERTY(QString highlightPlayingIcon READ highlightPlayingIcon WRITE setHighlightPlayingIcon) +public: + explicit MusicListItem(PlaylistPtr playlist, QWidget *parent = Q_NULLPTR); + inline PlaylistPtr data() + { + return m_data; + } + + void setActive(bool active); + void setPlay(bool isPaly); + + void mouseDoubleClickEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + + QString playingIcon() const + { + return m_playingIcon; + } + + QString highlightPlayingIcon() const + { + return m_highlightPlayingIcon; + } + +signals: + void rename(const QString &newNameA); + void remove(); + void playall(PlaylistPtr playlist); + +public slots: + void onDelete(); + void onRename(); + + void setPlayingIcon(QString playingIcon) + { + m_playingIcon = playingIcon; + } + + void setHighlightPlayingIcon(QString highlightPlayingIcon) + { + m_highlightPlayingIcon = highlightPlayingIcon; + } + +private: +// Dtk::Widget::DPictureSequenceView *playingAnimation; + DLineEdit *m_titleedit = nullptr; + PlaylistPtr m_data; + QString m_playingIcon; + QString m_highlightPlayingIcon; +}; diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/musiclistview.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiclistview.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/musiclistview.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiclistview.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -22,89 +22,151 @@ #include "musiclistview.h" #include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include -#include -#include -#include +#include +#include +#include +#include +#include + +#include "musiclistviewitem.h" +#include "./model/musiclistmodel.h" +#include "playlistview.h" + +DGUI_USE_NAMESPACE + +MusicListView::MusicListView(QWidget *parent) : DListView(parent) +{ + model = new MusiclistModel(this); + setModel(model); + delegate = new DStyledItemDelegate(this); + //delegate->setBackgroundType(DStyledItemDelegate::NoBackground); + auto delegateMargins = delegate->margins(); + delegateMargins.setLeft(18); + delegate->setMargins(delegateMargins); + setItemDelegate(delegate); + + setViewportMargins(8, 0, 8, 0); + + playingPixmap = QPixmap(":/mpimage/light/music1.svg"); + albumPixmap = QPixmap(":/mpimage/light/music_withe_sidebar/music1.svg"); + defaultPixmap = QPixmap(":/mpimage/light/music_withe_sidebar/music1.svg"); + auto font = this->font(); + font.setFamily("SourceHanSansSC"); + font.setWeight(QFont::Medium); + font.setPixelSize(14); + setFont(font); + + setIconSize( QSize(20, 20) ); + setItemSize(QSize(40, 40)); + + setFrameShape(QFrame::NoFrame); + + DPalette pa = DApplicationHelper::instance()->palette(this); + pa.setColor(DPalette::ItemBackground, Qt::transparent); + DApplicationHelper::instance()->setPalette(this, pa); -#include "../../core/metasearchservice.h" -#include "../helper/widgethellper.h" - -#include "delegate/musicitemdelegate.h" -#include "model/musiclistmodel.h" - -DWIDGET_USE_NAMESPACE - -class MusicListViewPrivate -{ -public: - MusicListViewPrivate(MusicListView *parent): q_ptr(parent) {} - - void addMedia(const MetaPtr meta); - void removeSelection(QItemSelectionModel *selection); - - MusiclistModel *model = nullptr; - MusicItemDelegate *delegate = nullptr; - - MusicListView *q_ptr; - Q_DECLARE_PUBLIC(MusicListView) -}; + setAcceptDrops(true); + setDropIndicatorShown(true); + setSelectionMode(QListView::SingleSelection); + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); -MusicListView::MusicListView(QWidget *parent) - : ListView(parent), d_ptr(new MusicListViewPrivate(this)) -{ - Q_D(MusicListView); + setContextMenuPolicy(Qt::CustomContextMenu); + connect(this, &MusicListView::customContextMenuRequested, + this, &MusicListView::showContextMenu); - DThemeManager::instance()->registerWidget(this); + connect(this, &MusicListView::pressed, + this, [ = ]() { + closeAllPersistentEditor(); + }); - setObjectName("MusicListView"); + connect(model, &QStandardItemModel::itemChanged, + this, &MusicListView::onRename); + connect(this, &MusicListView::currentChanged, + this, [ = ](const QModelIndex & current, const QModelIndex & previous) { + Q_UNUSED(previous) + if (current.row() < 0 || current.row() >= allPlaylists.size()) { + this->clearSelected(); + return ; + } + if (state() != EditingState) { + auto curStandardItem = dynamic_cast(model->itemFromIndex(current)); + curStandardItem->setIcon(QIcon::fromTheme("music_famousballad")); + } - d->model = new MusiclistModel(0, 1, this); - setModel(d->model); + auto playlistPtr = allPlaylists[current.row()]; + QString rStr; + if (m_type == 1) { + rStr = "light"; + } else { + rStr = "dark"; + } + for (int i = 0; i < model->rowCount(); i++) { + auto curIndex = model->index(i, 0); + auto curStandardItem = dynamic_cast(model->itemFromIndex(curIndex)); + auto curItemRow = curStandardItem->row(); + if (curItemRow < 0 || curItemRow >= allPlaylists.size()) + continue; + auto playlist = allPlaylists[curItemRow]; + if (!playlist->playing().isNull()) { + auto curItem = dynamic_cast(curStandardItem); + //delete + QIcon playingIcon(playingPixmap); + playingIcon.actualSize(QSize(20, 20)); + DViewItemActionList actionList = curItem->actionList(Qt::RightEdge); + if (!actionList.isEmpty()) { + actionList.first()->setIcon(playingIcon); + } else { + DViewItemActionList actionList; + auto viewItemAction = new DViewItemAction(Qt::AlignCenter); + viewItemAction->setIcon(playingIcon); + actionList.append(viewItemAction); + curItem->setActionList(Qt::RightEdge, actionList); + } + } + QString typeStr; + if (current == curIndex) { + typeStr = "active"; - d->delegate = new MusicItemDelegate; - setItemDelegate(d->delegate); + } else { + typeStr = "normal"; + } + QIcon icon = QIcon(QString(":/mpimage/%1/normal/music_famousballad.svg").arg(rStr)); + if (playlist->id() == AlbumMusicListID) { + // icon = QIcon(QString(":/mpimage/%1/normal/album_normal.svg").arg(rStr)); + icon = QIcon::fromTheme("music_album"); + } else if (playlist->id() == ArtistMusicListID) { + // icon = QIcon(QString(":/mpimage/%1/normal/singer_normal.svg").arg(rStr)); + icon = QIcon::fromTheme("music_singer"); + } else if (playlist->id() == AllMusicListID) { + // icon = QIcon(QString(":/mpimage/%1/normal/all_music_normal.svg").arg(rStr)); + icon = QIcon::fromTheme("music_allmusic"); + } else if (playlist->id() == FavMusicListID) { + // icon = QIcon(QString(":/mpimage/%1/normal/my_collection_normal.svg").arg(rStr)); + icon = QIcon::fromTheme("music_mycollection"); + } else { + // icon = QIcon(QString(":/mpimage/%1/normal/famous_ballad_normal.svg").arg(rStr)); + icon = QIcon::fromTheme("music_famousballad"); + } + curStandardItem->setIcon(icon); + } - setDragEnabled(true); - viewport()->setAcceptDrops(true); - setDropIndicatorShown(true); - setDragDropOverwriteMode(false); - setVerticalScrollMode(QAbstractItemView::ScrollPerItem); - setHorizontalScrollMode(QAbstractItemView::ScrollPerItem); - setDefaultDropAction(Qt::MoveAction); - setDragDropMode(QAbstractItemView::InternalMove); - setMovement(QListView::Free); +#if 1 + /*------Refresh play state--------*/ + changePicture(defaultPixmap, defaultPixmap); +#endif - setSelectionMode(QListView::ExtendedSelection); - setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - setEditTriggers(QAbstractItemView::NoEditTriggers); - setSelectionBehavior(QAbstractItemView::SelectRows); - setContextMenuPolicy(Qt::CustomContextMenu); - connect(this, &MusicListView::customContextMenuRequested, - this, &MusicListView::requestCustomContextMenu); + }); - connect(this, &MusicListView::doubleClicked, + connect(this, &MusicListView::triggerEdit, this, [ = ](const QModelIndex & index) { - MetaPtr meta = d->model->meta(index); - Q_EMIT playMedia(meta); + if (DGuiApplicationHelper::instance()->themeType() == 1) { + auto curStandardItem = dynamic_cast(model->itemFromIndex(index)); + curStandardItem->setIcon(QIcon(QString(":/mpimage/light/normal/famous_ballad_normal.svg"))); + } }); - - // For debug -// connect(selectionModel(), &QItemSelectionModel::selectionChanged, -// this, [ = ](const QItemSelection & /*selected*/, const QItemSelection & deselected) { -// if (!deselected.isEmpty()) { -// qDebug() << "cancel" << deselected; -// } -// }); } MusicListView::~MusicListView() @@ -112,383 +174,554 @@ } -MetaPtr MusicListView::activingMeta() const +void MusicListView::addMusicList(PlaylistPtr playlist, bool addFlag) { - Q_D(const MusicListView); + if (playlist == nullptr) + return; + QString rStr; + if (m_type == 1) { + rStr = "light"; + } else { + rStr = "dark"; + } + QIcon icon = QIcon(QString(":/mpimage/%1/normal/music_famousballad.svg").arg(rStr)); + if (playlist->id() == AlbumMusicListID) { +// icon = QIcon(QString(":/mpimage/%1/normal/album_normal.svg").arg(rStr)); + icon = QIcon::fromTheme("music_album"); + } else if (playlist->id() == ArtistMusicListID) { +// icon = QIcon(QString(":/mpimage/%1/normal/singer_normal.svg").arg(rStr)); + icon = QIcon::fromTheme("music_singer"); + } else if (playlist->id() == AllMusicListID) { +// icon = QIcon(QString(":/mpimage/%1/normal/all_music_normal.svg").arg(rStr)); + icon = QIcon::fromTheme("music_allmusic"); + } else if (playlist->id() == FavMusicListID) { +// icon = QIcon(QString(":/mpimage/%1/normal/my_collection_normal.svg").arg(rStr)); + icon = QIcon::fromTheme("music_mycollection"); + } else { +// icon = QIcon(QString(":/mpimage/%1/normal/famous_ballad_normal.svg").arg(rStr)); + icon = QIcon::fromTheme("music_famousballad"); + } + + allPlaylists.append(playlist); + QString displayName; + if (playlist->id() == FavMusicListID) { + displayName = tr("My Favorites"); + } else { + displayName = playlist->displayName(); + } + auto item = new DStandardItem(icon, displayName); + auto itemFont = item->font(); + itemFont.setPixelSize(14); + item->setFont(itemFont); + if (m_type == 1) { + item->setForeground(QColor("#414D68")); + } else { + item->setForeground(QColor("#C0C6D4")); + } + model->appendRow(item); + adjustHeight(); + if (addFlag) { + setCurrentItem(item); + edit(model->index(item->row(), 0)); + scrollToBottom(); + m_sizeChangedFlag = true; + } +} + +QStandardItem *MusicListView::item(int row, int column) const +{ + return model->item(row, column); +} + +void MusicListView::setCurrentItem(QStandardItem *item) +{ + setCurrentIndex(model->indexFromItem(item)); +} + +PlaylistPtr MusicListView::playlistPtr(const QModelIndex &index) +{ + PlaylistPtr ptr = nullptr; + if (index.row() >= 0 && index.row() < allPlaylists.size()) + ptr = allPlaylists[index.row()]; + return ptr; +} + +PlaylistPtr MusicListView::playlistPtr(QStandardItem *item) +{ + PlaylistPtr ptr = nullptr; + if (item->row() < allPlaylists.size()) + ptr = allPlaylists[item->row()]; + return ptr; +} + +void MusicListView::setCurPlaylist(QStandardItem *item) +{ + auto curItem = dynamic_cast(item); + playingItem = curItem; + if (curItem) { + QIcon playingIcon(playingPixmap); + playingIcon.actualSize(QSize(20, 20)); + + DViewItemActionList itemActionList = curItem->actionList(Qt::RightEdge); + if (!itemActionList.isEmpty()) { + itemActionList.first()->setIcon(playingIcon); + } else { + DViewItemActionList actionList; + + /*----------delegate QSize-----------*/ + auto viewItemAction = new DViewItemAction(Qt::AlignCenter, QSize(20, 20)); + viewItemAction->setIcon(playingIcon); + actionList.append(viewItemAction); + curItem->setActionList(Qt::RightEdge, actionList); + } - if (d->model->playlist().isNull()) { - return MetaPtr(); } - - return d->model->playlist()->playing(); -} - -PlaylistPtr MusicListView::playlist() const -{ - Q_D(const MusicListView); - return d->model->playlist(); + DViewItemActionList clearActionList; + QIcon playingIcon; + playingIcon.actualSize(QSize(20, 20)); + auto viewItemAction = new DViewItemAction(Qt::AlignCenter); + viewItemAction->setIcon(playingIcon); + clearActionList.append(viewItemAction); + for (int i = 0; i < model->rowCount(); i++) { + auto curStandardItem = dynamic_cast(model->itemFromIndex(model->index(i, 0))); + if (curStandardItem != nullptr && curStandardItem != curItem) { + DViewItemActionList actionList = curStandardItem->actionList(Qt::RightEdge); + if (!actionList.isEmpty()) { + actionList.first()->setIcon(playingIcon); + } + } + } + //setCurrentItem(item); + update(); } -QModelIndex MusicListView::findIndex(const MetaPtr meta) +void MusicListView::closeAllPersistentEditor() { - Q_ASSERT(!meta.isNull()); - Q_D(MusicListView); - - return d->model->findIndex(meta); + for (int i = 0; i < model->rowCount(); i++) { + auto item = model->index(i, 0); + if (this->isPersistentEditorOpen(item)) + closePersistentEditor(item); + } } -void MusicListView::onMusicListRemoved(const MetaPtrList metalist) +void MusicListView::clearSelected() { - Q_D(MusicListView); - - setAutoScroll(false); - for (auto meta : metalist) { - if (meta.isNull()) { + clearSelection(); + setCurrentItem(nullptr); + QString rStr; + if (m_type == 1) { + rStr = "light"; + } else { + rStr = "dark"; + } + QString typeStr = "normal"; + for (int i = 0; i < model->rowCount(); i++) { + auto curIndex = model->index(i, 0); + auto curStandardItem = dynamic_cast(model->itemFromIndex(curIndex)); + auto curItemRow = curStandardItem->row(); + if (curItemRow < 0 || curItemRow >= allPlaylists.size()) continue; + auto playlist = allPlaylists[curItemRow]; + QIcon icon = QIcon(QString(":/mpimage/%1/normal/music_famousballad.svg").arg(rStr)); + if (playlist->id() == AlbumMusicListID) { + // icon = QIcon(QString(":/mpimage/%1/normal/album_normal.svg").arg(rStr)); + icon = QIcon::fromTheme("music_album"); + } else if (playlist->id() == ArtistMusicListID) { + // icon = QIcon(QString(":/mpimage/%1/normal/singer_normal.svg").arg(rStr)); + icon = QIcon::fromTheme("music_singer"); + } else if (playlist->id() == AllMusicListID) { + // icon = QIcon(QString(":/mpimage/%1/normal/all_music_normal.svg").arg(rStr)); + icon = QIcon::fromTheme("music_allmusic"); + } else if (playlist->id() == FavMusicListID) { + // icon = QIcon(QString(":/mpimage/%1/normal/my_collection_normal.svg").arg(rStr)); + icon = QIcon::fromTheme("music_mycollection"); + } else { + // icon = QIcon(QString(":/mpimage/%1/normal/famous_ballad_normal.svg").arg(rStr)); + icon = QIcon::fromTheme("music_famousballad"); } + curStandardItem->setIcon(icon); - for (int i = 0; i < d->model->rowCount(); ++i) { - auto index = d->model->index(i, 0); - auto itemHash = d->model->data(index).toString(); - if (itemHash == meta->hash) { - d->model->removeRow(i); + } + if (playingItem != nullptr && playingItem->rowCount() > 0) { + auto curItem = dynamic_cast(playingItem); + if (curItem != nullptr) { + //delete + QIcon playingIcon(playingPixmap); + playingIcon.actualSize(QSize(20, 20)); + DViewItemActionList actionList = curItem->actionList(Qt::RightEdge); + if (!actionList.isEmpty()) { + actionList.first()->setIcon(playingIcon); + } else { + DViewItemActionList actionList; + auto viewItemAction = new DViewItemAction(Qt::AlignCenter); + viewItemAction->setIcon(playingIcon); + actionList.append(viewItemAction); + curItem->setActionList(Qt::RightEdge, actionList); } } } - updateScrollbar(); - setAutoScroll(true); } -void MusicListView::onMusicError(const MetaPtr meta, int /*error*/) +void MusicListView::changePicture(QPixmap pixmap, QPixmap albumPixmap) { - Q_ASSERT(!meta.isNull()); -// Q_D(MusicListView); + this->playingPixmap = pixmap; + this->albumPixmap = albumPixmap; + QPixmap curPixmap = pixmap; -// qDebug() << error; -// QModelIndex index = findIndex(meta); -// auto indexData = index.data().value(); -// indexData.invalid = (error != 0); -// d->m_model->setData(index, QVariant::fromValue(indexData)); + auto indexes = this->selectedIndexes(); + if (!indexes.isEmpty() && playingItem != nullptr) { + if (indexes[0].row() >= 0 && indexes[0].row() < allPlaylists.count()) { + auto mdata = allPlaylists.at(indexes[0].row()); + if (mdata->playing() != nullptr) + curPixmap = albumPixmap; + } - update(); -} + } + if (playingItem != nullptr ) { + auto curItem = dynamic_cast(playingItem); + //delete + QIcon playingIcon(curPixmap); + playingIcon.actualSize(QSize(20, 20)); + DViewItemActionList actionList = curItem->actionList(Qt::RightEdge); + if (!actionList.isEmpty()) { + actionList.first()->setIcon(playingIcon); + } else { + DViewItemActionList actionList; + auto viewItemAction = new DViewItemAction(Qt::AlignCenter); + viewItemAction->setIcon(playingIcon); + actionList.append(viewItemAction); + curItem->setActionList(Qt::RightEdge, actionList); -void MusicListView::onMusicListAdded(const MetaPtrList metalist) -{ - Q_D(MusicListView); - for (auto meta : metalist) { - d->addMedia(meta); + } + update(); } - updateScrollbar(); } -void MusicListView::onLocate(const MetaPtr meta) +void MusicListView::adjustHeight() { - QModelIndex index = findIndex(meta); - if (!index.isValid()) { - return; - } - - clearSelection(); + setMinimumHeight(model->rowCount() * 40); +} - auto viewRect = QRect(QPoint(0, 0), size()); - if (!viewRect.intersects(visualRect(index))) { - scrollTo(index, MusicListView::PositionAtCenter); - } - setCurrentIndex(index); +void MusicListView::setSizeChangedFlag(bool flag) +{ + m_sizeChangedFlag = flag; } -void MusicListView::onMusiclistChanged(PlaylistPtr playlist) +bool MusicListView::getSizeChangedFlag() { - Q_D(MusicListView); + return m_sizeChangedFlag; +} - if (playlist.isNull()) { - qWarning() << "can not change to emptry playlist"; - return; - } +//void MusicListView::startDrag(Qt::DropActions supportedActions) +//{ +// DListWidget::startDrag(supportedActions); +// qDebug() << "drag end"; - d->model->removeRows(0, d->model->rowCount()); - for (auto meta : playlist->allmusic()) { -// qDebug() << meta->hash << meta->title; - d->addMedia(meta); - } +// QStringList uuids; - d->model->setPlaylist(playlist); - updateScrollbar(); +// for (int i = 0; i < this->count(); ++i) { +// QListWidgetItem *item = this->item(i); +// MusicListViewItem *playlistItem = dynamic_cast(item); +// uuids << playlistItem->data()->id(); +// } +// Q_EMIT customResort(uuids); +//} + +void MusicListView::mousePressEvent(QMouseEvent *event) +{ + // for (int i = 0; i < count(); i++) { + // auto itemIndex = model->index(i, 0); + // if (this->isPersistentEditorOpen(itemIndex)) { + // auto item = model->itemFromIndex(itemIndex); + // onRename(item); + // closePersistentEditor(itemIndex); + // } + // } + DListView::mousePressEvent(event); } void MusicListView::keyPressEvent(QKeyEvent *event) { - Q_D(MusicListView); - switch (event->modifiers()) { - case Qt::NoModifier: - switch (event->key()) { - case Qt::Key_Delete: - QItemSelectionModel *selection = this->selectionModel(); - d->removeSelection(selection); - break; + DListView::keyPressEvent(event); + if (event->key() == Qt::Key_Delete) { + auto indexes = this->selectedIndexes(); + if (indexes.size() != 1) { + return; } - break; - case Qt::ShiftModifier: - switch (event->key()) { - case Qt::Key_Delete: - break; + auto item = model->itemFromIndex(indexes.first()); + if (!item) { + return; + } + auto m_data = allPlaylists[item->row()]; + if (!m_data) { + return; } - break; - default: break; - } - QAbstractItemView::keyPressEvent(event); -} + if (m_data->id() != AllMusicListID && m_data->id() != AlbumMusicListID && + m_data->id() != ArtistMusicListID && m_data->id() != FavMusicListID) { + QString message = QString(tr("Are you sure you want to delete this playlist?")); + + DDialog warnDlg(this); + warnDlg.setIcon(QIcon::fromTheme("deepin-music")); + warnDlg.setTextFormat(Qt::AutoText); + warnDlg.setTitle(message); + warnDlg.addSpacing(20); + warnDlg.addButton(tr("Cancel"), false, Dtk::Widget::DDialog::ButtonNormal); + warnDlg.addButton(tr("Delete"), true, Dtk::Widget::DDialog::ButtonWarning); + if (1 == warnDlg.exec()) { + int t_index = item->row(); + model->removeRow(item->row()); + allPlaylists.removeAt(t_index); + if (item == playingItem) + playingItem = nullptr; + + //delete model->takeItem(item->row()); + Q_EMIT m_data->removed(); + if (m_data->playing() != nullptr || allPlaylists.isEmpty()) + Q_EMIT removeAllList(m_data->playing()); -void MusicListView::keyboardSearch(const QString &search) -{ - Q_UNUSED(search); -// Disable keyborad serach -// qDebug() << search; -// QAbstractItemView::keyboardSearch(search); + adjustHeight(); + } + } + } else if (event->key() == Qt::Key_Up || event->key() == Qt::Key_Down) { + auto indexes = this->selectedIndexes(); + if (indexes.size() != 1) { + return; + } + scrollTo(indexes.first()); + } } -void MusicListViewPrivate::addMedia(const MetaPtr meta) +void MusicListView::dragEnterEvent(QDragEnterEvent *event) { - QStandardItem *newItem = new QStandardItem; - model->appendRow(newItem); - - auto row = model->rowCount() - 1; - QModelIndex index = model->index(row, 0, QModelIndex()); - model->setData(index, meta->hash); + auto t_formats = event->mimeData()->formats(); + qDebug() << t_formats; + if (event->mimeData()->hasFormat("text/uri-list") || event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) { + qDebug() << "acceptProposedAction" << event; + event->setDropAction(Qt::CopyAction); + event->acceptProposedAction(); + } } -void MusicListViewPrivate::removeSelection(QItemSelectionModel *selection) +void MusicListView::dragMoveEvent(QDragMoveEvent *event) { - Q_ASSERT(selection != nullptr); - Q_Q(MusicListView); - - MetaPtrList metalist; - for (auto index : selection->selectedRows()) { - auto meta = model->meta(index); - metalist << meta; + auto index = indexAt(event->pos()); + if (index.isValid() && (event->mimeData()->hasFormat("text/uri-list") || event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist"))) { + qDebug() << "acceptProposedAction" << event; + event->setDropAction(Qt::CopyAction); + event->acceptProposedAction(); + } else { + DListView::dragMoveEvent(event); } - Q_EMIT q->removeMusicList(metalist); } -void MusicListView::showContextMenu(const QPoint &pos, - PlaylistPtr selectedPlaylist, - PlaylistPtr favPlaylist, - QList newPlaylists) +void MusicListView::dropEvent(QDropEvent *event) { - Q_D(MusicListView); - QItemSelectionModel *selection = this->selectionModel(); - - if (selection->selectedRows().length() <= 0) { + auto index = indexAt(event->pos()); + if (!index.isValid()) return; - } - - QPoint globalPos = this->mapToGlobal(pos); - - QMenu playlistMenu; - playlistMenu.setStyle(QStyleFactory::create("dlight")); - - auto newvar = QVariant::fromValue(PlaylistPtr()); - - auto createPlaylist = playlistMenu.addAction(tr("New playlist")); - createPlaylist->setData(newvar); - createPlaylist->setIcon(QIcon(":/light/image/plus.svg")); - - playlistMenu.addSeparator(); - if (selectedPlaylist != favPlaylist) { - auto act = playlistMenu.addAction(favPlaylist->displayName()); - act->setData(QVariant::fromValue(favPlaylist)); + auto t_playlistPtr = playlistPtr(index); + if (t_playlistPtr == nullptr || (!event->mimeData()->hasFormat("text/uri-list") && !event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist"))) { + return; } - for (auto playlist : newPlaylists) { - QFont font(playlistMenu.font()); - QFontMetrics fm(font); - auto text = fm.elidedText(QString(playlist->displayName().replace("&", "&&")), - Qt::ElideMiddle, 160); - auto act = playlistMenu.addAction(text); - act->setData(QVariant::fromValue(playlist)); - } + if (event->mimeData()->hasFormat("text/uri-list")) { + auto urls = event->mimeData()->urls(); + QStringList localpaths; + for (auto &url : urls) { + localpaths << url.toLocalFile(); + } - connect(&playlistMenu, &QMenu::triggered, this, [ = ](QAction * action) { - auto playlist = action->data().value(); - qDebug() << playlist; - MetaPtrList metalist; - for (auto &index : selection->selectedRows()) { - auto meta = d->model->meta(index); - if (!meta.isNull()) { - metalist << meta; + if (!localpaths.isEmpty()) { + Q_EMIT importSelectFiles(t_playlistPtr, localpaths); + } + } else { + auto *source = qobject_cast(event->source()); + if (source != nullptr) { + MetaPtrList metalist; + for (auto index : source->selectionModel()->selectedIndexes()) { + if (index.row() >= 0 && index.row() < source->playMetaPtrList().size()) { + auto meta = source->playMetaPtrList()[index.row()]; + metalist.append(meta); + } } + + if (!metalist.isEmpty()) + Q_EMIT addToPlaylist(t_playlistPtr, metalist); } - Q_EMIT addToPlaylist(playlist, metalist); - }); + } - bool singleSelect = (1 == selection->selectedRows().length()); + DListView::dropEvent(event); +} - QMenu myMenu; - myMenu.setStyle(QStyleFactory::create("dlight")); +void MusicListView::showContextMenu(const QPoint &pos) +{ + auto index = indexAt(pos); + if (!index.isValid()) + return; - QAction *playAction = nullptr; - if (singleSelect) { - playAction = myMenu.addAction(tr("Play")); + auto item = model->itemFromIndex(index); + if (!item) { + return; } - myMenu.addAction(tr("Add to playlist"))->setMenu(&playlistMenu); - myMenu.addSeparator(); - - QAction *displayAction = nullptr; - if (singleSelect) { - displayAction = myMenu.addAction(tr("Display in file manager")); + auto m_data = allPlaylists[item->row()]; + if (!m_data) { + return; } - auto removeAction = myMenu.addAction(tr("Remove from playlist")); - auto deleteAction = myMenu.addAction(tr("Delete from local disk")); + QPoint globalPos = this->mapToGlobal(pos); - QAction *songAction = nullptr; + DMenu *menu = new DMenu(this) ; + QAction *playact = nullptr; + QAction *pauseact = nullptr; + + if (m_data->playingStatus() && m_data->playing() != nullptr) { + pauseact = menu->addAction(tr("Pause")); + pauseact->setDisabled(0 == m_data->length()); + } else { + playact = menu->addAction(tr("Play")); + playact->setDisabled(0 == m_data->length()); + } + + if (m_data->id() != AllMusicListID && m_data->id() != AlbumMusicListID && + m_data->id() != ArtistMusicListID && m_data->id() != FavMusicListID) { + menu->addAction(tr("Rename")); + menu->addAction(tr("Delete")); + } + if (m_data->id() == AlbumMusicListID || m_data->id() == ArtistMusicListID) { + if (playact != nullptr) + playact->setDisabled(m_data->playMusicTypePtrList().size() == 0); + if (pauseact != nullptr) + pauseact->setDisabled(m_data->playMusicTypePtrList().size() == 0); + } - QMenu textCodecMenu; - textCodecMenu.setStyle(QStyleFactory::create("dlight")); + connect(menu, &DMenu::triggered, this, [ = ](QAction * action) { - if (singleSelect) { - auto index = selection->selectedRows().first(); - auto meta = d->model->meta(index); - QList codecList = DMusic::detectMetaEncodings(meta); -// codecList << "utf-8" ; - for (auto codec : codecList) { - auto act = textCodecMenu.addAction(codec); - act->setData(QVariant::fromValue(codec)); + if (action->text() == tr("Play")) { + Q_EMIT playall(m_data); } - - if (codecList.length() > 1) { - myMenu.addSeparator(); - myMenu.addAction(tr("Encoding"))->setMenu(&textCodecMenu); + if (action->text() == tr("Pause")) { + Q_EMIT pause(m_data, m_data->playing()); } + if (action->text() == tr("Rename")) { + edit(index); + } + if (action->text() == tr("Delete")) { + QString message = QString(tr("Are you sure you want to delete this playlist?")); - myMenu.addSeparator(); - songAction = myMenu.addAction(tr("Song info")); - - connect(&textCodecMenu, &QMenu::triggered, this, [ = ](QAction * action) { - auto codec = action->data().toByteArray(); - meta->updateCodec(codec); - Q_EMIT updateMetaCodec(meta); - }); - } - - if (playAction) { - connect(playAction, &QAction::triggered, this, [ = ](bool) { - auto index = selection->selectedRows().first(); - Q_EMIT playMedia(d->model->meta(index)); - }); - } - - if (displayAction) { - connect(displayAction, &QAction::triggered, this, [ = ](bool) { - auto index = selection->selectedRows().first(); - auto meta = d->model->meta(index); - auto dirUrl = QUrl::fromLocalFile(meta->localPath); - Dtk::Widget::DDesktopServices::showFileItem(dirUrl); - }); - } - - if (removeAction) { - connect(removeAction, &QAction::triggered, this, [ = ](bool) { - d->removeSelection(selection); - }); - } + DDialog warnDlg(this); + warnDlg.setIcon(QIcon::fromTheme("deepin-music")); + warnDlg.setTextFormat(Qt::AutoText); + warnDlg.setTitle(message); + warnDlg.addSpacing(20); + warnDlg.addButton(tr("Cancel"), false, Dtk::Widget::DDialog::ButtonNormal); + warnDlg.addButton(tr("Delete"), true, Dtk::Widget::DDialog::ButtonWarning); + if (1 == warnDlg.exec()) { + int t_index = item->row(); + model->removeRow(item->row()); + allPlaylists.removeAt(t_index); + if (item == playingItem) + playingItem = nullptr; + + //delete model->takeItem(item->row()); + Q_EMIT m_data->removed(); + if (m_data->playing() != nullptr || allPlaylists.isEmpty()) + Q_EMIT removeAllList(m_data->playing()); - if (deleteAction) { - connect(deleteAction, &QAction::triggered, this, [ = ](bool) { - bool containsCue = false; - MetaPtrList metalist; - for (auto index : selection->selectedRows()) { - auto meta = d->model->meta(index); - if (!meta->cuePath.isEmpty()) { - containsCue = true; - } - metalist << meta; + adjustHeight(); } + } + }); - Dtk::Widget::DDialog warnDlg(this); - warnDlg.setStyle(QStyleFactory::create("dlight")); - warnDlg.setTextFormat(Qt::RichText); - warnDlg.addButton(tr("Cancel"), true, Dtk::Widget::DDialog::ButtonWarning); - warnDlg.addButton(tr("Delete"), false, Dtk::Widget::DDialog::ButtonNormal); - - auto cover = QImage(QString(":/common/image/del_notify.svg")); - if (1 == metalist.length()) { - auto meta = metalist.first(); - auto coverData = MetaSearchService::coverData(meta); - if (coverData.length() > 0) { - cover = QImage::fromData(coverData); - } - warnDlg.setMessage(QString(tr("Are you sure you want to delete %1?")).arg(meta->title)); + menu->exec(globalPos); +} +void MusicListView::slotTheme(int type) +{ + m_type = type; + QString rStr; + if (type == 1) { + rStr = "light"; + } else { + rStr = "dark"; + } + for (int i = 0; i < model->rowCount(); i++) { + for (int i = 0; i < model->rowCount(); i++) { + auto curIndex = model->index(i, 0); + auto curStandardItem = dynamic_cast(model->itemFromIndex(curIndex)); + auto curItemRow = curStandardItem->row(); + if (curItemRow < 0 || curItemRow >= allPlaylists.size()) + continue; + auto playlist = allPlaylists[curStandardItem->row()]; + + QIcon icon = QIcon(QString(":/mpimage/%1/normal/music_famousballad.svg").arg(rStr)); + if (playlist->id() == AlbumMusicListID) { + // icon = QIcon(QString(":/mpimage/%1/normal/album_normal.svg").arg(rStr)); + icon = QIcon::fromTheme("music_album"); + } else if (playlist->id() == ArtistMusicListID) { + // icon = QIcon(QString(":/mpimage/%1/normal/singer_normal.svg").arg(rStr)); + icon = QIcon::fromTheme("music_singer"); + } else if (playlist->id() == AllMusicListID) { + // icon = QIcon(QString(":/mpimage/%1/normal/all_music_normal.svg").arg(rStr)); + icon = QIcon::fromTheme("music_allmusic"); + } else if (playlist->id() == FavMusicListID) { + // icon = QIcon(QString(":/mpimage/%1/normal/my_collection_normal.svg").arg(rStr)); + icon = QIcon::fromTheme("music_mycollection"); } else { - warnDlg.setMessage(QString(tr("Are you sure you want to delete the selected %1 songs?")).arg(metalist.length())); - } - - if (containsCue) { - warnDlg.setTitle(tr("Are you sure you want to delete the selected %1 songs?").arg(metalist.length())); - warnDlg.setMessage(tr("Deleting the current song will also delete the song files contained")); + // icon = QIcon(QString(":/mpimage/%1/normal/famous_ballad_normal.svg").arg(rStr)); + icon = QIcon::fromTheme("music_famousballad"); } - auto coverPixmap = QPixmap::fromImage(WidgetHelper::cropRect(cover, QSize(64, 64))); - - warnDlg.setIcon(QIcon(coverPixmap)); - if (0 == warnDlg.exec()) { - return; + curStandardItem->setIcon(icon); + if (m_type == 1) { + curStandardItem->setForeground(QColor("#414D68")); + } else { + curStandardItem->setForeground(QColor("#C0C6D4")); } - Q_EMIT deleteMusicList(metalist); - }); - } - - if (songAction) { - connect(songAction, &QAction::triggered, this, [ = ](bool) { - auto index = selection->selectedRows().first(); - auto meta = d->model->meta(index); - Q_EMIT showInfoDialog(meta); - }); + } } - myMenu.exec(globalPos); } -void MusicListView::dragEnterEvent(QDragEnterEvent *event) +void MusicListView::onRename(QStandardItem *item) { - ListView::dragEnterEvent(event); + auto curItemRow = item->row(); + if (curItemRow < 0 || curItemRow >= allPlaylists.size()) + return; + auto playlistPtr = allPlaylists[item->row()]; + if (playlistPtr->displayName() != item->text()) { + if (item->text().isEmpty()) { + item->setText(playlistPtr->displayName()); + } else { + bool existFlag = false; + for (int i = 0; i < count(); i++) { + auto curItem = model->itemFromIndex(model->index(i, 0)); + if (curItem == item) + continue; + if (item->text() == curItem->text()) { + existFlag = true; + } + } + if (existFlag) { + item->setText(playlistPtr->displayName()); + } else { + playlistPtr->setDisplayName(item->text()); + Q_EMIT playlistPtr->displayNameChanged(item->text()); + Q_EMIT displayNameChanged(); + } + } + } } -void MusicListView::startDrag(Qt::DropActions supportedActions) +void MusicListView::closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint) { - Q_D(MusicListView); - - MetaPtrList list; - for (auto index : selectionModel()->selectedIndexes()) { - list << d->model->meta(index); - } - - setAutoScroll(false); - ListView::startDrag(supportedActions); - setAutoScroll(true); - - QMap hashIndexs; - for (int i = 0; i < d->model->rowCount(); ++i) { - auto index = d->model->index(i, 0); - auto hash = d->model->data(index).toString(); - Q_ASSERT(!hash.isEmpty()); - hashIndexs.insert(hash, i); + DListView::closeEditor(editor, hint); + auto current = currentIndex(); + if (current.row() < 0 || current.row() >= allPlaylists.size()) { + this->clearSelected(); + return ; } - d->model->playlist()->saveSort(hashIndexs); - Q_EMIT customSort(); - QItemSelection selection; - for (auto meta : list) { - if (!meta.isNull()) { - auto index = this->findIndex(meta); - selection.append(QItemSelectionRange(index)); - } - } - if (!selection.isEmpty()) { - selectionModel()->select(selection, QItemSelectionModel::Select); - } + auto curStandardItem = dynamic_cast(model->itemFromIndex(current)); + curStandardItem->setIcon(QIcon::fromTheme("music_famousballad")); } - diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/musiclistview.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiclistview.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/musiclistview.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiclistview.h 2020-07-14 12:05:00.000000000 +0000 @@ -21,51 +21,76 @@ #pragma once -#include "listview.h" +#include #include "../../core/playlist.h" -class MusicListViewPrivate; -class MusicListView : public ListView +DWIDGET_USE_NAMESPACE + +class MusicListView : public DListView { Q_OBJECT public: explicit MusicListView(QWidget *parent = Q_NULLPTR); - ~MusicListView(); + ~MusicListView() override; + + void showContextMenu(const QPoint &pos); + + void addMusicList(PlaylistPtr playlist, bool addFlag = false); + + QStandardItem *item(int row, int column = 0) const; + void setCurrentItem ( QStandardItem *item ); + + PlaylistPtr playlistPtr(const QModelIndex &index); + PlaylistPtr playlistPtr(QStandardItem *item); + + void setCurPlaylist(QStandardItem *item); + + void closeAllPersistentEditor(); + void clearSelected(); - MetaPtr activingMeta() const; - PlaylistPtr playlist() const; - QModelIndex findIndex(const MetaPtr meta); + void changePicture(QPixmap pixmap, QPixmap albumPixmap); + + void adjustHeight(); + + void setSizeChangedFlag(bool flag); + bool getSizeChangedFlag(); + +public slots: + void slotTheme(int type); + void onRename(QStandardItem *item); + void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint) Q_DECL_OVERRIDE; signals: + void playall(PlaylistPtr playlist); + void customResort(const QStringList &uuids); + void displayNameChanged(); + void pause(PlaylistPtr playlist, const MetaPtr meta); + void removeAllList(const MetaPtr meta); + void importSelectFiles(PlaylistPtr playlist, QStringList urllist); void addToPlaylist(PlaylistPtr playlist, const MetaPtrList &metalist); - void removeMusicList(const MetaPtrList &metalist); - void deleteMusicList(const MetaPtrList &metalist); - void playMedia(const MetaPtr meta); - void updateMetaCodec(const MetaPtr meta); - void showInfoDialog(const MetaPtr meta); - void requestCustomContextMenu(const QPoint &pos); - void customSort(); -public: - void onMusiclistChanged(PlaylistPtr playlist); - void onMusicListAdded(const MetaPtrList metalist); - void onMusicListRemoved(const MetaPtrList metalist); - void onMusicError(const MetaPtr meta, int error); - void onLocate(const MetaPtr meta); - void showContextMenu(const QPoint &pos, - PlaylistPtr selectedPlaylist, - PlaylistPtr favPlaylist, - QList newPlaylists); + void currentChanged(const QModelIndex ¤t, const QModelIndex &previous) Q_DECL_OVERRIDE; protected: - virtual void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE; - virtual void startDrag(Qt::DropActions supportedActions) Q_DECL_OVERRIDE; - virtual void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE; - virtual void keyboardSearch(const QString &search) Q_DECL_OVERRIDE; +// virtual void startDrag(Qt::DropActions supportedActions) Q_DECL_OVERRIDE; + void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; -private: - QScopedPointer d_ptr; - Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusicListView) + void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE; + void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE; + void dragMoveEvent(QDragMoveEvent *event) Q_DECL_OVERRIDE; + void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE; +private: + QList allPlaylists; + QStandardItemModel *model = nullptr; + DStyledItemDelegate *delegate = nullptr; + QStandardItem *playingItem = nullptr; + //QStandardItem *m_currentitem = nullptr; + QPixmap playingPixmap; + QPixmap albumPixmap; + QPixmap defaultPixmap; + int m_type = 1; + bool m_sizeChangedFlag = false; }; + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/musiclistviewitem.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiclistviewitem.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/musiclistviewitem.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiclistviewitem.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "musiclistviewitem.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include "core/playlist.h" + + +MusicListViewItem::MusicListViewItem(PlaylistPtr playlist, QListWidget *parent) : QListWidgetItem(parent) +{ + m_data = playlist; + Q_ASSERT(playlist); + + QIcon icon(":/mpimage/light/normal/famous_ballad_normal.svg"); + if (playlist->id() == AlbumMusicListID) { + icon = QIcon(":/mpimage/light/normal/album_normal.svg"); + } else if (playlist->id() == ArtistMusicListID) { + icon = QIcon(":/mpimage/light/normal/singer_normal.svg"); + } else if (playlist->id() == AllMusicListID) { + icon = QIcon(":/mpimage/light/normal/all_music_normal.svg"); + } else if (playlist->id() == FavMusicListID) { + icon = QIcon(":/mpimage/light/normal/my_collection_normal.svg"); + } else { + icon = QIcon(":/mpimage/light/normal/famous_ballad_normal.svg"); + } + setIcon(icon); + + setText(playlist->displayName()); +} + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/musiclistviewitem.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiclistviewitem.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/musiclistviewitem.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musiclistviewitem.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include + +#include "../../core/playlist.h" + +class MusicListViewItem : public QListWidgetItem +{ +public: + explicit MusicListViewItem(PlaylistPtr playlist, QListWidget *parent = Q_NULLPTR); + inline PlaylistPtr data() + { + return m_data; + } + +private: + PlaylistPtr m_data; +}; diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/musicpixmapbutton.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musicpixmapbutton.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/musicpixmapbutton.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musicpixmapbutton.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: yub.wang + * + * Maintainer: yub.wang + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "musicpixmapbutton.h" + +#include +#include +#include + +MusicPixmapButton::MusicPixmapButton(QWidget *parent) + : DPushButton(parent) +{ +} + +void MusicPixmapButton::paintEvent(QPaintEvent *event) +{ + Q_UNUSED(event) + QPainter painter(this); + painter.save(); + painter.setRenderHint(QPainter::Antialiasing); + painter.setRenderHint(QPainter::HighQualityAntialiasing); + painter.setRenderHint(QPainter::SmoothPixmapTransform); + + QPixmap pixmap = icon().pixmap(rect().width(), rect().height()); + //pixmap.setDevicePixelRatio(devicePixelRatioF()); + + QPainterPath backgroundPath; + backgroundPath.addRoundedRect(rect(), 8, 8); + painter.setClipPath(backgroundPath); + painter.drawPixmap(rect(), pixmap); + + painter.setBrush(Qt::NoBrush); + QColor BorderColor("000000"); + BorderColor.setAlphaF(0.08); + QPen BorderPen(BorderColor); + BorderPen.setWidthF(2); + painter.setPen(BorderPen); + painter.drawRoundedRect(rect(), 8, 8); //画矩形 + + painter.restore(); +} + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/musicpixmapbutton.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musicpixmapbutton.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/musicpixmapbutton.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musicpixmapbutton.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: yub.wang + * + * Maintainer: yub.wang + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include + +DWIDGET_USE_NAMESPACE + +class MusicPixmapButton : public DPushButton +{ + Q_OBJECT +public: + explicit MusicPixmapButton(QWidget *parent = Q_NULLPTR); + +protected: + void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; + +}; diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/musicsearchlistview.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musicsearchlistview.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/musicsearchlistview.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musicsearchlistview.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,299 @@ +/* + * Copyright (C) 2020 chengdu Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "musicsearchlistview.h" +#include "model/musicsearchlistmodel.h" +#include "delegate/musicsearchlistdelegate.h" + +#include +#include "util/pinyinsearch.h" + +DWIDGET_USE_NAMESPACE + +class MusicSearchListviewPrivate +{ +public: + MusicSearchListviewPrivate(MusicSearchListview *parent): q_ptr(parent) {} + void addItem(const QString str); + + MusicSearchListModel *model = nullptr; + MusicSearchListDelegate *delegate = nullptr; + PlaylistPtr playList = nullptr; + QString searchText = ""; + PlayMusicTypePtrList searchMusicTypePtrList; + MetaPtrList searchMetaPtrPtrList; + int themeType = 1; + int m_CurrentIndex = 0; + QString defaultCover = ":/images/logo.svg"; + QPixmap playingPixmap = QPixmap(":/images/logo.svg"); + QPixmap sidebarPixmap = QPixmap(":/images/logo.svg"); + QPixmap albumPixmap = QPixmap(":/images/logo.svg"); + MusicSearchListview *q_ptr; + Q_DECLARE_PUBLIC(MusicSearchListview) +}; + +void MusicSearchListviewPrivate::addItem(const QString str) +{ + QStandardItem *newItem = new QStandardItem; + model->appendRow(newItem); + + auto row = model->rowCount() - 1; + QModelIndex index = model->index(row, 0, QModelIndex()); + model->setData(index, str); +} + + +MusicSearchListview::MusicSearchListview(QWidget *parent) + : DListView(parent), d_ptr(new MusicSearchListviewPrivate(this)) +{ + Q_D(MusicSearchListview); + + d->model = new MusicSearchListModel (3, 3, this); + setModel(d->model); + d->delegate = new MusicSearchListDelegate; + setItemDelegate(d->delegate); + setViewportMargins(0, 0, 8, 0); + + setUniformItemSizes(true); + + setViewModeFlag(QListView::ListMode); + setResizeMode( QListView::Adjust ); + setMovement( QListView::Static ); + setLayoutMode(QListView::Batched); + setBatchSize(2000); + + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + + connect(d->delegate, &MusicSearchListDelegate::SearchClear, this, &MusicSearchListview::SearchClear); +} + + +MusicSearchListview::~MusicSearchListview() +{ + +} + +PlaylistPtr MusicSearchListview::playlist() const +{ + Q_D(const MusicSearchListview); + return d->model->playlist(); +} + +int MusicSearchListview::rowCount() +{ + Q_D(const MusicSearchListview); + return d->model->rowCount(); +} + +int MusicSearchListview::listSize() +{ + Q_D(MusicSearchListview); + return d->searchMusicTypePtrList.size(); +} + +int MusicSearchListview::getIndexInt()const +{ + Q_D(const MusicSearchListview); + return d->m_CurrentIndex; +} + +void MusicSearchListview::onMusiclistChanged(QString text, PlaylistPtr playlist) +{ + Q_D(MusicSearchListview); + + if (playlist.isNull()) { + qWarning() << "can not change to emptry playlist"; + return; + } + d->searchText = text; + setUpdatesEnabled(false); + d->model->removeRows(0, d->model->rowCount()); + + QString searchStr = playlist->searchStr(); + bool chineseFlag = false; + for (auto ch : searchStr) { + if (DMusic::PinyinSearch::isChinese(ch)) { + chineseFlag = true; + break; + } + } + if (playlist->id() == MusicCandListID) { + d->searchMetaPtrPtrList.clear(); + for (auto meta : playlist->allmusic()) { + d->addItem(meta->title + "-" + meta->artist); + d->searchMetaPtrPtrList.append(meta); + } + } else { + d->searchMusicTypePtrList.clear(); + for (auto meta : playlist->playMusicTypePtrList()) { + if (searchStr.isEmpty()) { + d->addItem(meta->name); + d->searchMusicTypePtrList.append(meta); + } else { + if (chineseFlag) { + if (meta->name.contains(searchStr, Qt::CaseInsensitive)) { + d->addItem(meta->name); + d->searchMusicTypePtrList.append(meta); + } + } else { + if (playlist->searchStr().size() == 1) { + auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(meta->name); + if (!curTextList.isEmpty() && curTextList.first().contains(searchStr, Qt::CaseInsensitive)) { + d->addItem(meta->name); + d->searchMusicTypePtrList.append(meta); + } + } else { + auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(meta->name); + if (!curTextList.isEmpty() && curTextList.join("").contains(searchStr, Qt::CaseInsensitive)) { + d->addItem(meta->name); + d->searchMusicTypePtrList.append(meta); + } + } + } + } + } + + } + d->model->setPlaylist(playlist); + setUpdatesEnabled(true); +} + +MetaPtrList MusicSearchListview::playMetaList() const +{ + Q_D(const MusicSearchListview); + return d->searchMetaPtrPtrList; +} + +PlayMusicTypePtrList MusicSearchListview::playMusicTypePtrList() const +{ + Q_D(const MusicSearchListview); + return d->searchMusicTypePtrList; +} + +void MusicSearchListview::setThemeType(int type) +{ + Q_D(MusicSearchListview); + d->themeType = type; +} + +int MusicSearchListview::getThemeType() const +{ + Q_D(const MusicSearchListview); + return d->themeType; +} + +QString MusicSearchListview::getSearchText()const +{ + Q_D(const MusicSearchListview); + return d->searchText; +} + +void MusicSearchListview::setCurrentIndexInt(int row) +{ + Q_D(MusicSearchListview); + d->m_CurrentIndex = row; +} + +void MusicSearchListview::setPlayPixmap(QPixmap pixmap, QPixmap sidebarPixmap, QPixmap albumPixmap) +{ + Q_D(MusicSearchListview); + d->playingPixmap = pixmap; + d->sidebarPixmap = sidebarPixmap; + d->albumPixmap = albumPixmap; + update(); +} + +QPixmap MusicSearchListview::getPlayPixmap() const +{ + Q_D(const MusicSearchListview); + return d->playingPixmap; +} + +QPixmap MusicSearchListview::getSidebarPixmap() const +{ + Q_D(const MusicSearchListview); + return d->sidebarPixmap; +} + +QPixmap MusicSearchListview::getAlbumPixmap() const +{ + Q_D(const MusicSearchListview); + return d->albumPixmap; +} + +void MusicSearchListview::updateList() +{ + //更新model数据 + Q_D(MusicSearchListview); + PlaylistPtr playlist = d->model->playlist(); + if (playlist.isNull()) { + qWarning() << "can not change to emptry playlist"; + return; + } + + QVector allStr; + for (auto meta : playlist->playMusicTypePtrList()) { + allStr.append(meta->name); + } + + for (int i = d->model->rowCount() - 1; i >= 0; --i) { + auto index = d->model->index(i, 0); + auto itemName = d->model->data(index).toString(); + if (!allStr.contains(itemName)) { + d->searchMusicTypePtrList.removeAt(i); + d->model->removeRow(i); + } + } +} + +void MusicSearchListview::keyChoice() +{ + Q_D(MusicSearchListview); + qDebug() << "cle down" << endl; + + QModelIndex indexFromList = d->model->index(1, 0);//取model + this->setCurrentIndex(indexFromList); +} + + +void MusicSearchListview::setViewModeFlag(QListView::ViewMode mode) +{ + if (mode == QListView::IconMode) { + setIconSize( QSize(170, 170) ); + setGridSize( QSize(170, 170) ); + } else { + setIconSize( QSize(36, 36) ); + setGridSize( QSize(-1, -1) ); + } + setViewMode(mode); +} + +void MusicSearchListview::SearchClear() +{ + Q_EMIT this->sigSearchClear(); +} + + +void MusicSearchListview::mouseMoveEvent(QMouseEvent *event) +{ + Q_UNUSED(event) + qDebug() << "MusicSearchListview::mouseMoveEvent"; +} diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/musicsearchlistview.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musicsearchlistview.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/musicsearchlistview.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musicsearchlistview.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2020 chengdu Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#pragma once + +#include "../../core/playlist.h" + +#include + +DWIDGET_USE_NAMESPACE + +class MusicSearchListviewPrivate; +class MusicSearchListview: public DListView +{ + Q_OBJECT +public: + explicit MusicSearchListview(QWidget *parent = Q_NULLPTR); + ~MusicSearchListview() override; + + PlaylistPtr playlist() const; + int rowCount(); + int listSize(); + int getIndexInt()const; + void onMusiclistChanged(QString text, PlaylistPtr playlist); + MetaPtrList playMetaList() const; + PlayMusicTypePtrList playMusicTypePtrList() const; + + void setThemeType(int type); + int getThemeType() const; + QString getSearchText()const; + + void setCurrentIndexInt(int row); + + void setPlayPixmap(QPixmap pixmap, QPixmap sidebarPixmap, QPixmap albumPixmap); + QPixmap getPlayPixmap() const; + QPixmap getSidebarPixmap() const; + QPixmap getAlbumPixmap() const; + void updateList(); + void keyChoice(); + + void setViewModeFlag(QListView::ViewMode mode); + + +signals: + void sigSearchClear(); + +public slots: + void SearchClear(); + + + +protected: + virtual void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + +private: + QScopedPointer d_ptr; + Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusicSearchListview) +}; + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/musictitleimage.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musictitleimage.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/musictitleimage.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musictitleimage.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "musictitleimage.h" + +#include + +MusicTitleImageWidget::MusicTitleImageWidget(QWidget *parent) + : DWidget( parent) +{ +} + +MusicTitleImageWidget::~MusicTitleImageWidget() +{ +} + +void MusicTitleImageWidget::setPixmap(QPixmap pixmap) +{ + image = pixmap; +} + +void MusicTitleImageWidget::setThemeType(int type) +{ + this->type = type; +} + +void MusicTitleImageWidget::paintEvent(QPaintEvent *event) +{ + Q_UNUSED(event) + QPainter painter(this); + painter.setRenderHints(QPainter::Antialiasing | QPainter::HighQualityAntialiasing | QPainter::SmoothPixmapTransform); + + QRect rect = this->rect(); + QPainterPath path; + int cornerSize = 20; + int arcR = cornerSize / 2; + path.moveTo(rect.left() + arcR, rect.top()); + path.arcTo(rect.left(), rect.top(), cornerSize, cornerSize, 90.0, 90.0); + + path.lineTo(rect.left(), rect.bottom()); + path.lineTo(rect.right(), rect.bottom()); + + path.lineTo(rect.right(), rect.top() + arcR); + path.arcTo(rect.right() - cornerSize, rect.top(), cornerSize, cornerSize, 0.0, 90.0); + + path.lineTo(rect.top(), rect.left()); +// QPainterPath path; +// path.addRoundRect(rect, 10, 10); + + painter.save(); + painter.setClipPath(path); + + double windowScale = (width() * 1.0) / height(); + int imageWidth = static_cast(image.height() * windowScale); + QPixmap coverImage; + if (imageWidth > image.width()) { + int imageheight = static_cast(image.width() / windowScale); + coverImage = image.copy(0, (image.height() - imageheight) / 2, image.width(), imageheight); + } else { + int imageheight = image.height(); + coverImage = image.copy((image.width() - imageWidth) / 2, 0, imageWidth, imageheight); + } + painter.drawPixmap(rect, coverImage); + + QColor fillColor("#FFFFFF"); + if (type != 1) { + fillColor = QColor("#000000"); + } + fillColor.setAlphaF(0.6); + painter.setBrush(fillColor); + + QColor penColor("#000000"); + penColor.setAlphaF(0.08); + QPen pen(penColor, 2); + painter.setPen(pen); +// painter.drawRoundRect(rect, 10, 10); + painter.drawPath(path); + + painter.restore(); +} + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/musictitleimage.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musictitleimage.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/musictitleimage.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/musictitleimage.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. + * + * Author: Iceyer + * + * Maintainer: Iceyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include + +DWIDGET_USE_NAMESPACE + +class MusicTitleImageWidget : public DWidget +{ + Q_OBJECT +public: + explicit MusicTitleImageWidget(QWidget *parent = Q_NULLPTR); + ~MusicTitleImageWidget() override; + + void setPixmap(QPixmap pixmap); + +public slots: + void setThemeType(int type); + +protected: + virtual void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; + +private: + QPixmap image; + int type = 1; +}; diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/playlistview.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/playlistview.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/playlistview.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/playlistview.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -22,80 +22,101 @@ #include "playlistview.h" #include -#include -#include +#include +#include +#include +#include #include +#include +#include -#include +#include +#include +#include +#include -#include "playlistitem.h" +#include "util/pinyinsearch.h" + +#include "../../core/metasearchservice.h" +#include "../helper/widgethellper.h" + +#include "delegate/playitemdelegate.h" +#include "model/playlistmodel.h" DWIDGET_USE_NAMESPACE class PlayListViewPrivate { public: - PlayListViewPrivate(PlayListView *parent) : q_ptr(parent) {} + PlayListViewPrivate(PlayListView *parent): q_ptr(parent) {} - void checkScrollbarSize(); + void addMedia(const MetaPtr meta); + void removeSelection(QItemSelectionModel *selection); - QScrollBar *vscrollBar = nullptr; + PlaylistModel *model = nullptr; + PlayItemDelegate *delegate = nullptr; + int themeType = 1; + MetaPtr playing = nullptr; + bool searchFlag = true; + + MetaPtrList playMetaPtrList; + QPixmap playingPixmap = QPixmap(":/mpimage/light/music1.svg"); + QPixmap sidebarPixmap = QPixmap(":/mpimage/light/music_withe_sidebar/music1.svg"); + QPixmap albumPixmap = QPixmap(":/mpimage/light/music_white_album_cover/music1.svg"); PlayListView *q_ptr; Q_DECLARE_PUBLIC(PlayListView) }; -void PlayListViewPrivate::checkScrollbarSize() -{ - Q_Q(PlayListView); - - auto itemCount = q->model()->rowCount(); - auto size = q->size(); - auto scrollBarWidth = 8; - auto itemHeight = 56; - vscrollBar->resize(scrollBarWidth, size.height() - 2); - vscrollBar->move(size.width() - scrollBarWidth, 0); - vscrollBar->setSingleStep(1); - vscrollBar->setPageStep(size.height() / itemHeight); - - if (itemCount > size.height() / itemHeight) { - vscrollBar->show(); - vscrollBar->setMaximum(itemCount - size.height() / itemHeight); - } else { - vscrollBar->hide(); - vscrollBar->setMaximum(0); - } -} - -PlayListView::PlayListView(QWidget *parent) : QListWidget(parent), d_ptr(new PlayListViewPrivate(this)) +PlayListView::PlayListView(bool searchFlag, QWidget *parent) + : DListView(parent), d_ptr(new PlayListViewPrivate(this)) { Q_D(PlayListView); setObjectName("PlayListView"); - DThemeManager::instance()->registerWidget(this); + + d->searchFlag = searchFlag; + d->model = new PlaylistModel(0, 1, this); + setModel(d->model); + + d->delegate = new PlayItemDelegate; + setItemDelegate(d->delegate); + + setUniformItemSizes(true); setDragEnabled(true); - viewport()->setAcceptDrops(true); + //viewport()->setAcceptDrops(true); setDropIndicatorShown(true); + setDragDropOverwriteMode(false); + //setVerticalScrollMode(QAbstractItemView::ScrollPerItem); + //setHorizontalScrollMode(QAbstractItemView::ScrollPerItem); setDefaultDropAction(Qt::MoveAction); setDragDropMode(QAbstractItemView::DragOnly); + setDragEnabled(true); + setMovement(QListView::Free); - setSelectionMode(QListView::SingleSelection); - setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - - d->vscrollBar = new QScrollBar(this); - d->vscrollBar->setObjectName("MusicListViewScrollBar"); - d->vscrollBar->setOrientation(Qt::Vertical); - d->vscrollBar->raise(); + setViewModeFlag(QListView::ListMode); + setResizeMode(QListView::Adjust); + setLayoutMode(QListView::Batched); + setBatchSize(2000); + setSelectionMode(QListView::ExtendedSelection); + //setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setEditTriggers(QAbstractItemView::NoEditTriggers); + setSelectionBehavior(QAbstractItemView::SelectRows); setContextMenuPolicy(Qt::CustomContextMenu); connect(this, &PlayListView::customContextMenuRequested, - this, &PlayListView::showContextMenu); + this, &PlayListView::requestCustomContextMenu); - connect(d->vscrollBar, &QScrollBar::valueChanged, - this, [ = ](int value) { - verticalScrollBar()->setValue(value); + connect(this, &PlayListView::doubleClicked, + this, [ = ](const QModelIndex & index) { + MetaPtr meta = d->model->meta(index); + if (meta == playlist()->playing()) { + Q_EMIT resume(meta); + } else { + Q_EMIT playMedia(meta); + } }); } @@ -104,105 +125,741 @@ } -void PlayListView::wheelEvent(QWheelEvent *event) +MetaPtr PlayListView::activingMeta() const +{ + Q_D(const PlayListView); + + if (d->model->playlist().isNull()) { + return MetaPtr(); + } + + if (d->playing == nullptr) { + return d->model->playlist()->playing(); + } else { + return d->playing; + } +} + +PlaylistPtr PlayListView::playlist() const { + Q_D(const PlayListView); + return d->model->playlist(); +} + +QModelIndex PlayListView::findIndex(const MetaPtr meta) +{ + Q_ASSERT(!meta.isNull()); Q_D(PlayListView); - QListWidget::wheelEvent(event); - d->vscrollBar->setSliderPosition(verticalScrollBar()->sliderPosition()); + + return d->model->findIndex(meta); } -void PlayListView::resizeEvent(QResizeEvent *event) +void PlayListView::setPlaying(const MetaPtr meta) { Q_D(PlayListView); - QListWidget::resizeEvent(event); - d->checkScrollbarSize(); + d->playing = meta; } -void PlayListView::startDrag(Qt::DropActions supportedActions) +void PlayListView::setViewModeFlag(QListView::ViewMode mode) { - QListWidget::startDrag(supportedActions); - qDebug() << "drag end"; + if (mode == QListView::IconMode) { + setIconSize(QSize(150, 150)); + setGridSize(QSize(-1, -1)); + setSpacing(20); + setViewportMargins(-10, -10, -35, 10); + } else { + setIconSize(QSize(36, 36)); + setGridSize(QSize(-1, -1)); + setSpacing(0); + setViewportMargins(0, 0, 8, 0); + } + setViewMode(mode); +} - QStringList uuids; +MetaPtrList PlayListView::playMetaPtrList() const +{ + Q_D(const PlayListView); + return d->playMetaPtrList; +} - for (int i = 0; i < this->count(); ++i) { - QListWidgetItem *item = this->item(i); - auto playlistItem = qobject_cast(this->itemWidget(item)); - uuids << playlistItem->data()->id(); - } - Q_EMIT customResort(uuids); +void PlayListView::setThemeType(int type) +{ + Q_D(PlayListView); + d->themeType = type; +} + +int PlayListView::getThemeType() const +{ + Q_D(const PlayListView); + return d->themeType; } -void PlayListView::updateScrollbar() +void PlayListView::setPlayPixmap(QPixmap pixmap, QPixmap sidebarPixmap, QPixmap albumPixmap) { Q_D(PlayListView); - d->checkScrollbarSize(); + d->playingPixmap = pixmap; + d->sidebarPixmap = sidebarPixmap; + d->albumPixmap = albumPixmap; + update(); +} + +QPixmap PlayListView::getPlayPixmap() const +{ + Q_D(const PlayListView); + return d->playingPixmap; } +QPixmap PlayListView::getSidebarPixmap() const +{ + Q_D(const PlayListView); + return d->sidebarPixmap; +} -void PlayListView::showContextMenu(const QPoint &pos) +QPixmap PlayListView::getAlbumPixmap() const { - //find parent - auto playlistWidget = this->parentWidget(); - for (int i = 0; i < 10; ++i) { - if (!playlistWidget) { - break; + Q_D(const PlayListView); + return d->sidebarPixmap; +} + +int PlayListView::rowCount() +{ + Q_D(const PlayListView); + return d->model->rowCount(); +} + +QString PlayListView::firstHash() +{ + Q_D(const PlayListView); + QString hashStr; + + if (d->model->rowCount() > 0) { + auto index = d->model->index(0, 0); + hashStr = d->model->data(index).toString(); + } + + return hashStr; +} + +void PlayListView::onMusicListRemoved(const MetaPtrList metalist) +{ + Q_D(PlayListView); + + setAutoScroll(false); + //d->model->blockSignals(true); + for (auto meta : metalist) { + if (meta.isNull()) { + continue; } - if (playlistWidget->objectName() == "PlaylistWidget") { - break; + for (int i = 0; i < d->model->rowCount(); ++i) { + auto index = d->model->index(i, 0); + auto itemHash = d->model->data(index).toString(); + if (itemHash == meta->hash) { + d->model->removeRow(i); + } } - playlistWidget = playlistWidget->parentWidget(); } + //d->model->blockSignals(false); + //updateScrollbar(); + setAutoScroll(true); +} - if (playlistWidget && !playlistWidget->isEnabled()) { - return; +void PlayListView::onMusicError(const MetaPtr meta, int /*error*/) +{ + if (meta == nullptr) { + return ; } - // get select - auto items = this->selectedItems(); - if (items.length() != 1) { - return; + update(); +} + +void PlayListView::onMusicListAdded(const MetaPtrList metalist) +{ + Q_D(PlayListView); + setUpdatesEnabled(false); + setAutoScroll(false); + for (auto meta : metalist) { + d->addMedia(meta); } + setAutoScroll(true); + setUpdatesEnabled(true); + //updateScrollbar(); +} - auto item = qobject_cast(itemWidget(items.first())); - if (!item) { +void PlayListView::onLocate(const MetaPtr meta) +{ + if (meta == nullptr) + return; + QModelIndex index = findIndex(meta); + if (!index.isValid()) { return; } - auto m_data = item->data(); - if (!m_data) { + + clearSelection(); + + auto viewRect = QRect(QPoint(0, 0), size()); + if (!viewRect.intersects(visualRect(index))) { + scrollTo(index, PlayListView::PositionAtCenter); + } + setCurrentIndex(index); +} + +void PlayListView::onMusiclistChanged(PlaylistPtr playlist) +{ + Q_D(PlayListView); + + if (playlist.isNull()) { + qWarning() << "can not change to emptry playlist"; + d->model->removeRows(0, d->model->rowCount()); + d->playMetaPtrList.clear(); + d->model->setPlaylist(nullptr); return; } + if (playlist->searchStr().isEmpty() && playlist == d->model->playlist() + && playlist->allmusic().size() == rowCount()) { + bool flag = true; + auto allMusic = playlist->allmusic(); + for (int i = 0; i < allMusic.size(); ++i) { + auto curIndex = d->model->index(i, 0); + if (!curIndex.isValid() || allMusic[i]->hash != d->model->data(d->model->index(i, 0)).toString()) { + flag = false; + break; + } + } + if (flag) + return; + } + + setUpdatesEnabled(false); + setModel(nullptr); + d->model->removeRows(0, d->model->rowCount()); + d->playMetaPtrList.clear(); + + QString searchStr = playlist->searchStr(); + if (!d->searchFlag) + searchStr.clear(); + bool chineseFlag = false; + for (auto ch : searchStr) { + if (DMusic::PinyinSearch::isChinese(ch)) { + chineseFlag = true; + break; + } + } + + for (auto meta : playlist->allmusic()) { + if (searchStr.isEmpty()) { + d->addMedia(meta); + d->playMetaPtrList.append(meta); + } else { + if (chineseFlag) { + if (meta->title.contains(searchStr, Qt::CaseInsensitive)) { + d->addMedia(meta); + d->playMetaPtrList.append(meta); + } + } else { + if (playlist->searchStr().size() == 1) { + auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(meta->title); + if (!curTextList.isEmpty() && curTextList.first().contains(searchStr, Qt::CaseInsensitive)) { + d->addMedia(meta); + d->playMetaPtrList.append(meta); + } + } else { + auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(meta->title); + if (!curTextList.isEmpty() && curTextList.join("").contains(searchStr, Qt::CaseInsensitive)) { + d->addMedia(meta); + d->playMetaPtrList.append(meta); + } + } + } + } + } + setUpdatesEnabled(true); + setModel(d->model); + + d->model->setPlaylist(playlist); + //updateScrollbar(); +} + +void PlayListView::keyPressEvent(QKeyEvent *event) +{ + Q_D(PlayListView); + switch (event->modifiers()) { + case Qt::NoModifier: + switch (event->key()) { + case Qt::Key_Delete: { + QItemSelectionModel *selection = this->selectionModel(); + d->removeSelection(selection); + } + break; + case Qt::Key_Return: { + QItemSelectionModel *selection = this->selectionModel(); + if (!selection->selectedRows().isEmpty()) { + auto index = selection->selectedRows().first(); + if (d->model->meta(index) == playlist()->playing()) { + Q_EMIT resume(d->model->meta(index)); + } else { + Q_EMIT playMedia(d->model->meta(index)); + } + } + } + break; + } + break; + case Qt::ShiftModifier: + switch (event->key()) { + case Qt::Key_Delete: + break; + } + break; + case Qt::AltModifier: + switch (event->key()) { + case Qt::Key_Return: + QItemSelectionModel *selection = this->selectionModel(); + if (selection->selectedRows().length() <= 0) { + return; + } + auto index = selection->selectedRows().first(); + auto meta = d->model->meta(index); + Q_EMIT showInfoDialog(meta); + break; + } + break; + case Qt::ControlModifier: + switch (event->key()) { + case Qt::Key_K: + QItemSelectionModel *selection = this->selectionModel(); + if (selection->selectedRows().length() > 0) { + MetaPtrList metalist; + for (auto index : selection->selectedRows()) { + auto meta = d->model->meta(index); + metalist << meta; + } + if (!metalist.isEmpty()) + Q_EMIT addMetasFavourite(metalist); + } + break; + } + break; + case Qt::ControlModifier | Qt::ShiftModifier: + switch (event->key()) { + case Qt::Key_K: + QItemSelectionModel *selection = this->selectionModel(); + if (selection->selectedRows().length() > 0) { + MetaPtrList metalist; + for (auto index : selection->selectedRows()) { + auto meta = d->model->meta(index); + metalist << meta; + } + if (!metalist.isEmpty()) + Q_EMIT removeMetasFavourite(metalist); + } + break; + } + break; + default: + break; + } - auto itemPos = item->mapFromParent(pos); - if (!item->rect().contains(itemPos)) { + QAbstractItemView::keyPressEvent(event); +} + +void PlayListView::keyboardSearch(const QString &search) +{ + Q_UNUSED(search); +// Disable keyborad serach +// qDebug() << search; +// QAbstractItemView::keyboardSearch(search); +} + +void PlayListViewPrivate::addMedia(const MetaPtr meta) +{ + for (int i = 0; i < model->rowCount(); ++i) { + auto hash = model->data(model->index(i, 0)).toString(); + if (hash == meta->hash) + return; + } + QStandardItem *newItem = new QStandardItem; + QPixmap cover(":/common/image/cover_max.svg"); + auto coverData = MetaSearchService::coverData(meta); + if (coverData.length() > 0) { + cover = QPixmap::fromImage(QImage::fromData(coverData)); + } + if (cover.width() > 160 || cover.height() > 160) + cover = cover.scaled(QSize(160, 160)); + QIcon icon = QIcon(cover); + newItem->setIcon(icon); + model->appendRow(newItem); + + auto row = model->rowCount() - 1; + QModelIndex index = model->index(row, 0, QModelIndex()); + model->setData(index, meta->hash); +} + +void PlayListViewPrivate::removeSelection(QItemSelectionModel *selection) +{ + Q_ASSERT(selection != nullptr); + Q_Q(PlayListView); + + MetaPtrList metalist; + for (auto index : selection->selectedRows()) { + auto meta = model->meta(index); + metalist << meta; + } + Q_EMIT q->removeMusicList(metalist); +} + +void PlayListView::showContextMenu(const QPoint &pos, + PlaylistPtr selectedPlaylist, + PlaylistPtr favPlaylist, + QList newPlaylists) +{ + + Q_D(PlayListView); + QItemSelectionModel *selection = this->selectionModel(); + + if (selection->selectedRows().length() <= 0) { return; } QPoint globalPos = this->mapToGlobal(pos); - QMenu menu; - menu.setStyle(QStyleFactory::create("dlight")); - auto playact = menu.addAction(tr("Play")); - playact->setDisabled(0 == m_data->length()); + DMenu playlistMenu; + auto newvar = QVariant::fromValue(PlaylistPtr()); - if (m_data->id() != AllMusicListID && m_data->id() != FavMusicListID) { - menu.addAction(tr("Rename")); - menu.addAction(tr("Delete")); + PlaylistPtr curPlaylist = nullptr; + for (auto playlist : newPlaylists) { + if (playlist->id() == PlayMusicListID) { + curPlaylist = playlist; + auto act = playlistMenu.addAction(tr("Play queue")); + act->setData(QVariant::fromValue(curPlaylist)); + playlistMenu.addSeparator(); + break; + } } - - connect(&menu, &QMenu::triggered, this, [ = ](QAction * action) { - if (action->text() == tr("Play")) { - Q_EMIT item->playall(m_data); + if (selectedPlaylist != favPlaylist || this->playlist()->id() == tr("musicResult")) { +// auto act = playlistMenu.addAction(favPlaylist->displayName()); + auto act = playlistMenu.addAction(tr("My favorites")); + bool flag = true; + for (auto &index : selection->selectedRows()) { + auto meta = d->model->meta(index); + if (!favPlaylist->contains(meta)) { + flag = false; + } + } + if (flag == true) { + act->setEnabled(false); + } else { + act->setEnabled(true); + } + act->setData(QVariant::fromValue(favPlaylist)); + playlistMenu.addSeparator(); + } + auto createPlaylist = playlistMenu.addAction(tr("Add to new playlist")); +// auto font = createPlaylist->font(); +// font.setWeight(QFont::DemiBold); +// createPlaylist->setFont(font); + createPlaylist->setData(newvar); + playlistMenu.addSeparator(); + + for (auto playlist : newPlaylists) { + if (playlist == nullptr) { + continue; } - if (action->text() == tr("Rename")) { - item->onRename(); + if (playlist->id() == PlayMusicListID) { + curPlaylist = playlist; + continue; } - if (action->text() == tr("Delete")) { - item->onDelete(); + QFont font(playlistMenu.font()); + QFontMetrics fm(font); + + auto text = fm.elidedText(QString(playlist->displayName().replace("&", "&&")), + Qt::ElideMiddle, 160); + auto act = playlistMenu.addAction(text); + act->setData(QVariant::fromValue(playlist)); + } + + playlistMenu.addSeparator(); + + connect(&playlistMenu, &DMenu::triggered, this, [ = ](QAction * action) { + auto playlist = action->data().value(); + qDebug() << playlist; + MetaPtrList metalist; + for (auto &index : selection->selectedRows()) { + auto meta = d->model->meta(index); + if (!meta.isNull()) { + metalist << meta; + } } + Q_EMIT addToPlaylist(playlist, metalist); }); - menu.exec(globalPos); + bool singleSelect = (1 == selection->selectedRows().length()); + + DMenu myMenu; + QAction *playAction = nullptr; + QAction *pauseAction = nullptr; + if (singleSelect) { + + auto activeMeta = activingMeta(); + auto meta = d->model->meta(selection->selectedRows().first()); + + if (d->model->playlist()->playingStatus() && activeMeta == meta) { + + if (rowCount() == 1 && meta->invalid) { + playAction = myMenu.addAction(tr("Play")); + if (meta->invalid) + playAction->setEnabled(false); + } else { + + pauseAction = myMenu.addAction(tr("Pause")); + if (meta->invalid) + pauseAction->setEnabled(false); + } + } else { + playAction = myMenu.addAction(tr("Play")); + if (meta->invalid) + playAction->setEnabled(false); + } + } + + myMenu.addAction(tr("Add to playlist"))->setMenu(&playlistMenu); + myMenu.addSeparator(); + + QAction *displayAction = nullptr; + if (singleSelect) { + displayAction = myMenu.addAction(tr("Display in file manager")); + } + + auto removeAction = myMenu.addAction(tr("Remove from play queue")); + auto deleteAction = myMenu.addAction(tr("Delete from local disk")); + + QAction *songAction = nullptr; + + DMenu textCodecMenu; + if (singleSelect) { + auto index = selection->selectedRows().first(); + auto meta = d->model->meta(index); + QList codecList = DMusic::detectMetaEncodings(meta); + + if (!codecList.contains("UTF-8")) { + codecList.push_front("UTF-8"); + } + if (QLocale::system().name() == "zh_CN") { + if (codecList.contains("GB18030")) { + codecList.removeAll("GB18030"); + } + + if (!codecList.isEmpty()) { + codecList.push_front("GB18030"); + } + } + + for (auto codec : codecList) { + + auto act = textCodecMenu.addAction(codec); + + act->setCheckable(true); + + if (codec == meta->codec) { + act->setChecked(true); + } + + act->setData(QVariant::fromValue(codec)); + } + + if (codecList.length() > 1) { + myMenu.addSeparator(); + myMenu.addAction(tr("Encoding"))->setMenu(&textCodecMenu); + } + + myMenu.addSeparator(); + songAction = myMenu.addAction(tr("Song info")); + + connect(&textCodecMenu, &DMenu::triggered, this, [ = ](QAction * action) { + auto codec = action->data().toByteArray(); + + auto preTitle = meta->title; + auto preArtist = meta->artist; + auto preAlbum = meta->album; + + meta->updateCodec(codec); + meta->codec = codec; + + if (preTitle != meta->title || preArtist != meta->artist || preAlbum != meta->album) + Q_EMIT updateMetaCodec(preTitle, preArtist, preAlbum, meta); + }); + } + + if (playAction) { + connect(playAction, &QAction::triggered, this, [ = ](bool) { + auto index = selection->selectedRows().first(); + if (d->model->meta(index) == playlist()->playing()) { + Q_EMIT resume(d->model->meta(index)); + } else { + Q_EMIT playMedia(d->model->meta(index)); + } + }); + } + + if (pauseAction) { + connect(pauseAction, &QAction::triggered, this, [ = ](bool) { + auto index = selection->selectedRows().first(); + Q_EMIT pause(d->model->meta(index)); + }); + } + + if (displayAction) { + connect(displayAction, &QAction::triggered, this, [ = ](bool) { + auto index = selection->selectedRows().first(); + auto meta = d->model->meta(index); + auto dirUrl = QUrl::fromLocalFile(meta->localPath); + Dtk::Widget::DDesktopServices::showFileItem(dirUrl); + }); + } + + if (removeAction) { + connect(removeAction, &QAction::triggered, this, [ = ](bool) { + MetaPtrList metalist; + for (auto index : selection->selectedRows()) { + auto meta = d->model->meta(index); + metalist << meta; + } + if (metalist.isEmpty()) + return ; + + Dtk::Widget::DDialog warnDlg(this); + warnDlg.setTextFormat(Qt::RichText); + warnDlg.addButton(tr("Cancel"), true, Dtk::Widget::DDialog::ButtonNormal); + int deleteFlag = warnDlg.addButton(tr("Remove"), false, Dtk::Widget::DDialog::ButtonWarning); + + if (1 == metalist.length()) { + auto meta = metalist.first(); + warnDlg.setMessage(QString(tr("Are you sure you want to remove %1?")).arg(meta->title)); + } else { + warnDlg.setMessage(QString(tr("Are you sure you want to remove the selected %1 songs?").arg(metalist.length()))); + } + + warnDlg.setIcon(QIcon::fromTheme("deepin-music")); + if (deleteFlag == warnDlg.exec()) { + d->removeSelection(selection); + } + }); + } + + if (deleteAction) { + connect(deleteAction, &QAction::triggered, this, [ = ](bool) { + bool containsCue = false; + MetaPtrList metalist; + for (auto index : selection->selectedRows()) { + auto meta = d->model->meta(index); + if (!meta->cuePath.isEmpty()) { + containsCue = true; + } + metalist << meta; + } + + Dtk::Widget::DDialog warnDlg(this); + warnDlg.setTextFormat(Qt::RichText); + warnDlg.addButton(tr("Cancel"), true, Dtk::Widget::DDialog::ButtonNormal); + int deleteFlag = warnDlg.addButton(tr("Delete"), false, Dtk::Widget::DDialog::ButtonWarning); + + auto cover = QImage(QString(":/common/image/del_notify.svg")); + if (1 == metalist.length()) { + auto meta = metalist.first(); + auto coverData = MetaSearchService::coverData(meta); + if (coverData.length() > 0) { + cover = QImage::fromData(coverData); + } + warnDlg.setMessage(QString(tr("Are you sure you want to delete %1?")).arg(meta->title)); + } else { +// warnDlg.setTitle(QString(tr("Are you sure you want to delete the selected %1 songs?")).arg(metalist.length())); + DLabel *t_titleLabel = new DLabel(this); + t_titleLabel->setForegroundRole(DPalette::TextTitle); + DLabel *t_infoLabel = new DLabel(this); + t_infoLabel->setForegroundRole(DPalette::TextTips); + t_titleLabel->setText(tr("Are you sure you want to delete the selected %1 songs?").arg(metalist.length())); + t_infoLabel->setText(tr("The song files contained will also be deleted")); + warnDlg.addContent(t_titleLabel, Qt::AlignHCenter); + warnDlg.addContent(t_infoLabel, Qt::AlignHCenter); + warnDlg.addSpacing(20); + } + + if (containsCue && false) { + DLabel *t_titleLabel = new DLabel(this); + t_titleLabel->setForegroundRole(DPalette::TextTitle); + DLabel *t_infoLabel = new DLabel(this); + t_infoLabel->setForegroundRole(DPalette::TextTips); + t_titleLabel->setText(tr("Are you sure you want to delete the selected %1 songs?").arg(metalist.length())); + t_infoLabel->setText(tr("The song files contained will also be deleted")); + warnDlg.addContent(t_titleLabel, Qt::AlignHCenter); + warnDlg.addContent(t_infoLabel, Qt::AlignHCenter); + warnDlg.addSpacing(20); + } + auto coverPixmap = QPixmap::fromImage(WidgetHelper::cropRect(cover, QSize(64, 64))); + + warnDlg.setIcon(QIcon::fromTheme("deepin-music")); + if (deleteFlag == warnDlg.exec()) { + Q_EMIT deleteMusicList(metalist); + } + }); + } + + if (songAction) { + connect(songAction, &QAction::triggered, this, [ = ](bool) { + auto index = selection->selectedRows().first(); + auto meta = d->model->meta(index); + Q_EMIT showInfoDialog(meta); + }); + } + + myMenu.exec(globalPos); +} + +void PlayListView::mouseMoveEvent(QMouseEvent *event) +{ + DListView::mouseMoveEvent(event); +} + +void PlayListView::dragEnterEvent(QDragEnterEvent *event) +{ + DListView::dragEnterEvent(event); +} + +void PlayListView::startDrag(Qt::DropActions supportedActions) +{ + Q_D(PlayListView); + + MetaPtrList list; + for (auto index : selectionModel()->selectedIndexes()) { + list << d->model->meta(index); + } + + if (!selectionModel()->selectedIndexes().isEmpty()) + scrollTo(selectionModel()->selectedIndexes().first()); + setAutoScroll(false); + DListView::startDrag(supportedActions); + setAutoScroll(true); + + QMap hashIndexs; + for (int i = 0; i < d->model->rowCount(); ++i) { + auto index = d->model->index(i, 0); + auto hash = d->model->data(index).toString(); + Q_ASSERT(!hash.isEmpty()); + hashIndexs.insert(hash, i); + } + d->model->playlist()->saveSort(hashIndexs); + Q_EMIT customSort(); + + QItemSelection selection; + for (auto meta : list) { + if (!meta.isNull()) { + auto index = this->findIndex(meta); + selection.append(QItemSelectionRange(index)); + } + } + if (!selection.isEmpty()) { + selectionModel()->select(selection, QItemSelectionModel::Select); + } } + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/playlistview.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/playlistview.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/playlistview.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/playlistview.h 2020-07-14 12:05:00.000000000 +0000 @@ -21,29 +21,75 @@ #pragma once -#include -#include +#include + +#include "../../core/playlist.h" + +DWIDGET_USE_NAMESPACE class PlayListViewPrivate; -class PlayListView : public QListWidget +class PlayListView : public DListView { Q_OBJECT public: - explicit PlayListView(QWidget *parent = Q_NULLPTR); - ~PlayListView(); + explicit PlayListView(bool searchFlag, QWidget *parent = Q_NULLPTR); + ~PlayListView() override; + + MetaPtr activingMeta() const; + PlaylistPtr playlist() const; + QModelIndex findIndex(const MetaPtr meta); + void setPlaying(const MetaPtr meta); + + void setViewModeFlag(QListView::ViewMode mode); + + MetaPtrList playMetaPtrList() const; + + void setThemeType(int type); + int getThemeType() const; + + void setPlayPixmap(QPixmap pixmap, QPixmap sidebarPixmap, QPixmap albumPixmap); + QPixmap getPlayPixmap() const; + QPixmap getSidebarPixmap() const; + QPixmap getAlbumPixmap() const; + + int rowCount(); + QString firstHash(); - void updateScrollbar(); - void showContextMenu(const QPoint &pos); signals: - void customResort(const QStringList &uuids); + void addToPlaylist(PlaylistPtr playlist, const MetaPtrList &metalist); + void removeMusicList(const MetaPtrList &metalist); + void deleteMusicList(const MetaPtrList &metalist); + void playMedia(const MetaPtr meta); + void resume(const MetaPtr meta); + void pause(const MetaPtr meta); + void updateMetaCodec(const QString &preTitle, const QString &preArtist, const QString &preAlbum, const MetaPtr meta); + void showInfoDialog(const MetaPtr meta); + void requestCustomContextMenu(const QPoint &pos); + void customSort(); + void addMetasFavourite(const MetaPtrList &metalist); + void removeMetasFavourite(const MetaPtrList &metalist); + +public: + void onMusiclistChanged(PlaylistPtr playlist); + void onMusicListAdded(const MetaPtrList metalist); + void onMusicListRemoved(const MetaPtrList metalist); + void onMusicError(const MetaPtr meta, int error); + void onLocate(const MetaPtr meta); + void showContextMenu(const QPoint &pos, + PlaylistPtr selectedPlaylist, + PlaylistPtr favPlaylist, + QList newPlaylists); protected: - virtual void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE; - virtual void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; + virtual void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + virtual void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE; virtual void startDrag(Qt::DropActions supportedActions) Q_DECL_OVERRIDE; + virtual void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE; + virtual void keyboardSearch(const QString &search) Q_DECL_OVERRIDE; private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), PlayListView) + }; diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/pushbutton.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/pushbutton.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/pushbutton.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/pushbutton.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -23,13 +23,13 @@ #include -PushButton::PushButton(QWidget *parent) : QPushButton(parent) +PushButton::PushButton(QWidget *parent) : DPushButton(parent) { } void PushButton::enterEvent(QEvent *event) { - QPushButton::enterEvent(event); + DPushButton::enterEvent(event); Q_EMIT entered(); } diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/pushbutton.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/pushbutton.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/pushbutton.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/pushbutton.h 2020-07-14 12:05:00.000000000 +0000 @@ -22,9 +22,11 @@ #ifndef PUSHBUTTON_H #define PUSHBUTTON_H -#include +#include -class PushButton : public QPushButton +DWIDGET_USE_NAMESPACE + +class PushButton : public DPushButton { Q_OBJECT public: diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/searchedit.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/searchedit.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/searchedit.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/searchedit.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -25,7 +25,8 @@ #include #include -#include + +#include "util/pinyinsearch.h" #include "../../core/mediadatabase.h" #include "../../core/music.h" @@ -35,68 +36,92 @@ SearchEdit::SearchEdit(QWidget *parent) : DSearchEdit(parent) { - // Why qss not work if not call show - show(); - DThemeManager::instance()->registerWidget(this, QStringList() << "viewname"); - connect(this, &SearchEdit::focusOut, - this, &SearchEdit::onFocusOut); -// connect(this, &SearchEdit::focusIn, -// this, &SearchEdit::onFocusIn); + auto textFont = font(); + textFont.setPixelSize(14); + setFont(textFont); + + lineEdit()->setFocusPolicy(Qt::ClickFocus); connect(this, &SearchEdit::textChanged, this, &SearchEdit::onTextChanged); connect(this, &SearchEdit::returnPressed, this, &SearchEdit::onReturnPressed); -// connect(this, &SearchEdit::editingFinished, -// this, &SearchEdit::onReturnPressed); + connect(this, &SearchEdit::focusChanged, + this, [ = ](bool onFocus) { + if (!onFocus) { + m_result->hide(); + } else { + onTextChanged(); + } + }); + connect(this, &SearchEdit::cursorPositionChanged, + this, [ = ](int index1, int index2) { + if (index1 > 0 && index2 == 0) { +// clearEdit(); + Q_EMIT searchAborted(); + } + }); } void SearchEdit::setResultWidget(SearchResult *result) { m_result = result; + m_result->hide(); + m_result->move(this->x(), this->y() + 50); + connect(m_result, &SearchResult::searchText, + this, [ = ](const QString & id, const QString & text) { + onFocusOut(); + setText(text); + onFocusOut(); + Q_EMIT this->searchText(id, text); + }); - connect(m_result, &SearchResult::locateMusic, - this, [ = ](const QString & hash) { -// onFocusOut(); - Q_EMIT this->locateMusic(hash); + connect(m_result, &SearchResult::searchText2, + this, [ = ](const QString & id, const QString & text) { + searchText2(id, text); }); - connect(m_result, &SearchResult::searchText, - this, [ = ](const QString & text) { -// onFocusOut(); - Q_EMIT this->searchText(text); + connect(m_result, &SearchResult::searchText3, + this, [ = ](const QString & id, const QString & text) { + searchText3(id, text); }); } void SearchEdit::keyPressEvent(QKeyEvent *event) { + //输入框中上下按键操作 if (event->key() == Qt::Key_Up) { m_result->selectUp(); } if (event->key() == Qt::Key_Down) { m_result->selectDown(); } - - // TODO: event fiter here tab cap by line edit -// if (event->key() == Qt::Key_Backtab) { -// m_result->selectUp(); -// event->accept(); -// return; -// } -// if (event->key() == Qt::Key_Tab) { -// m_result->selectDown(); -// event->accept(); -// return; -// } DSearchEdit::keyPressEvent(event); } +void SearchEdit::searchText2(QString id, QString text) +{ + m_CurrentId = id; + m_Text = text; + setText(m_Text); + Q_EMIT this->searchText(m_CurrentId, QString(m_Text).remove("\r").remove("\n")); +} + +void SearchEdit::searchText3(QString id, QString text) +{ + m_CurrentId = id; + m_Text = text; + setText(m_Text); +} + void SearchEdit::onFocusIn() { -// m_result->adjustSize(); -// auto pos = this->mapToGlobal(QPoint(0, this->height() + 2)); -// m_result->show(); -// m_result->move(pos); + setText(""); + m_CurrentId = ""; + m_result->adjustSize(); + auto pos = this->mapToGlobal(QPoint(0, this->height() + 2)); + m_result->show(); + m_result->move(pos); } void SearchEdit::onFocusOut() @@ -109,45 +134,61 @@ void SearchEdit::onTextChanged() { - auto text = QString(this->text()).remove(" ").remove("\r").remove("\n"); - if (text.length() >= 2) { - auto resultList = MediaDatabase::searchMediaTitle(text, 10); - QStringList titleList; - QStringList hashList; - - for (auto &meta : resultList) { - titleList << meta->title; - hashList << meta->hash; - } - - auto searchtext = QString(this->text()).remove("\r").remove("\n"); - m_result->setFixedWidth(this->width() + 40); - m_result->setSearchString(searchtext); - m_result->setResultList(titleList, hashList); + auto text = QString(this->text()).remove("\r").remove("\n"); - m_result->autoResize(); + if (this->text().size() == 0) { + m_result->hide(); + m_LastText = ""; + return; + } + if (m_Text == this->text()) { + return; + } + m_CurrentId = ""; + if (m_LastText == text) { + return; + } + m_LastText = text; + if (text.length() >= 1) { + m_result->setSearchString(text); m_result->show(); // parent is MainFrame - m_result->move(parentWidget()->rect().width() / 2 - 80, 40 - 4); + QRect rect = this->rect(); + QPoint bottomLeft = rect.bottomLeft(); + bottomLeft = mapTo(parentWidget()->parentWidget(), bottomLeft); + m_result->setFixedWidth(width()); + m_result->move(bottomLeft.x(), bottomLeft.y() + 5); m_result->setFocusPolicy(Qt::StrongFocus); m_result->raise(); } else { onFocusOut(); } + if (text.size() != 0) { + Q_EMIT this->searchCand(text); + } } void SearchEdit::onReturnPressed() { - auto text = QString(this->text()).remove(" "); - if (text.isEmpty()) { + if (!m_result->currentStr().isEmpty()) + setText(m_result->currentStr()); + auto text = QString(this->text()).remove("\r").remove("\n"); + if (text.length() == 0) return; + int i = text.size(); + for (; i > 0; i--) { + QChar index = text.back(); + if (index == ' ') { + text.remove(text.size() - 1, 1); + } else { + break; + } } - onFocusOut(); - - if (m_result->isSelected()) { - m_result->onReturnPressed(); + if (m_CurrentId.size() == 0) { + Q_EMIT this->searchText("", text); } else { - Q_EMIT this->searchText(this->text()); + Q_EMIT this->searchText(m_CurrentId, QString(m_Text).remove("\r").remove("\n")); } } + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/searchedit.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/searchedit.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/searchedit.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/searchedit.h 2020-07-14 12:05:00.000000000 +0000 @@ -21,7 +21,9 @@ #pragma once -#include +#include + +#include "../core/playlist.h" class SearchResult; class SearchEdit : public Dtk::Widget::DSearchEdit @@ -30,11 +32,17 @@ public: explicit SearchEdit(QWidget *parent = Q_NULLPTR); + PlaylistPtr curPlaylistPtr() + { + return playlist; + } + public: void setResultWidget(SearchResult *); signals: - void searchText(const QString &text); + void searchText(const QString &id, const QString &text); + void searchCand (const QString &text); void locateMusic(const QString &hash); public slots: @@ -47,5 +55,11 @@ virtual void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE; private: + void searchText2(QString id, QString text); + void searchText3(QString id, QString text); SearchResult *m_result = nullptr; + PlaylistPtr playlist = nullptr; + QString m_CurrentId; + QString m_Text; + QString m_LastText; }; diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/searchlyricswidget.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/searchlyricswidget.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/searchlyricswidget.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/searchlyricswidget.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,376 @@ +#include "searchlyricswidget.h" + +#include + +#include +#include +#include +#include + +#include + +#include "util/musiclyric.h" +#include +#include "musicsettings.h" +DGUI_USE_NAMESPACE + +SearchLyricsWidget::SearchLyricsWidget(QString path, QWidget *parent) + : DFloatingWidget(parent), + m_search(new DPushButton), + m_listWidget(new DListWidget), + m_keyWord(new DLineEdit), + m_singer(new DLineEdit), + m_path(path), + m_group(new QButtonGroup) +{ + initUI(); + initConnection(); +} + +void SearchLyricsWidget::setDefault(QString song, QString singer) +{ + m_keyWord->lineEdit()->setText(song); + m_singer->lineEdit()->setText(singer); +} + +void SearchLyricsWidget::setThemeType(int type) +{ + if (type == 1) { + DPalette WidgetPl = palette(); + WidgetPl.setColor(DPalette::Background, QColor("#FFFFFF")); + setPalette(WidgetPl); + setBackgroundRole(DPalette::Background); + DPalette pl = m_search->palette(); + pl.setColor(DPalette::ButtonText, QColor("#414D68")); + pl.setColor(DPalette::Light, QColor("#E6E6E6")); + pl.setColor(DPalette::Dark, QColor("#E3E3E3")); + QColor sbcolor("#000000"); + sbcolor.setAlphaF(0.08); + pl.setColor(DPalette::Shadow, sbcolor); + m_search->setPalette(pl); + + DPalette pa = m_title->palette(); + pa.setColor(DPalette::WindowText, "#001A2E"); + m_title->setPalette(pa); + m_title->setForegroundRole(DPalette::WindowText); + + DPalette listWidgetPl = m_listWidget->palette(); + listWidgetPl.setColor(DPalette::Background, QColor("#FFFFFF")); + m_listWidget->setPalette(listWidgetPl); + } else { + DPalette WidgetPl = palette(); + QColor tcolor = "#FFFFFF"; + tcolor.setAlphaF(0.05); + WidgetPl.setColor(DPalette::Background, tcolor); + setPalette(WidgetPl); + setBackgroundRole(DPalette::Background); + + DPalette pl = m_search->palette(); + pl.setColor(DPalette::ButtonText, QColor("#C0C6D4")); + pl.setColor(DPalette::Light, QColor("#484848")); + pl.setColor(DPalette::Dark, QColor("#414141")); + QColor sbcolor("#000000"); + sbcolor.setAlphaF(0.08); + pl.setColor(DPalette::Shadow, sbcolor); + m_search->setPalette(pl); + + + DPalette pa = m_title->palette(); + pa.setColor(DPalette::WindowText, "#FFFFFF"); + m_title->setPalette(pa); + m_title->setForegroundRole(DPalette::WindowText); + + DPalette listWidgetPl = m_listWidget->palette(); + listWidgetPl.setColor(DPalette::Background, tcolor); + m_listWidget->setPalette(listWidgetPl); + } + searchLyrics(); +} + +void SearchLyricsWidget::initUI() +{ + setFixedWidth(370); + + DPalette WidgetPl = palette(); + WidgetPl.setColor(DPalette::Background, QColor("#FFFFFF")); + setPalette(WidgetPl); + + auto layout = new QVBoxLayout(this); + layout->setSpacing(0); + layout->setMargin(0); + layout->setContentsMargins(10, 10, 10, 6); + m_title = new DLabel; + QFont font; + font.setFamily("SourceHanSansSC-Bold"); + font.setPixelSize(17); + m_title->setFont(font); + m_title->setText(tr("Find Lyrics")); + m_title->setAlignment(Qt::AlignCenter | Qt::AlignVCenter); + m_title->setFixedHeight(30); + DPalette pa = m_title->palette(); + pa.setColor(DPalette::WindowText, "#001A2E"); + m_title->setPalette(pa); + m_title->setForegroundRole(DPalette::WindowText); + + m_keyWord->setClearButtonEnabled(false); + m_singer->setClearButtonEnabled(false); + m_keyWord->lineEdit()->setPlaceholderText(tr("Title")); + m_singer->lineEdit()->setPlaceholderText(tr("Artist")); + m_keyWord->setFixedHeight(36); + m_singer->setFixedHeight(36); + m_search->setText(tr("Search")); + m_search->setFixedHeight(36); + + DPalette pl = m_search->palette(); + pl.setColor(DPalette::ButtonText, QColor("#414D68")); + pl.setColor(DPalette::Light, QColor("#E6E6E6")); + pl.setColor(DPalette::Dark, QColor("#E3E3E3")); + QColor sbcolor("#000000"); + sbcolor.setAlphaF(0.08); + pl.setColor(DPalette::Shadow, sbcolor); + m_search->setPalette(pl); + // m_search->setFlat(true); + connect(m_search, &DPushButton::clicked, this, &SearchLyricsWidget::searchLyrics); + + layout->addWidget(m_title); + layout->addSpacing(10); + layout->addWidget(m_keyWord); + layout->addSpacing(10); + layout->addWidget(m_singer); + layout->addSpacing(20); + layout->addWidget(m_search); + layout->addSpacing(30); + layout->addWidget(m_listWidget); + m_listWidget->setFrameShape(QListWidget::NoFrame); + m_listWidget->setContentsMargins(0, 0, 0, 0); + + setLayout(layout); + + connect(m_listWidget, &DListWidget::clicked, this, &SearchLyricsWidget::mySelection); + connect(m_group, static_cast(&QButtonGroup::buttonClicked), + [ = ](int id) { + mySelectionIndex(id); + }); +} + +void SearchLyricsWidget::initConnection() +{ + connect(m_keyWord, &DLineEdit::textChanged, this, &SearchLyricsWidget::slottextChanged); + connect(m_singer, &DLineEdit::textChanged, this, &SearchLyricsWidget::slottextChanged); + slottextChanged(""); +} + +void SearchLyricsWidget::createList() +{ + for (int i = 0; i < m_lyricList.size(); ++i) { + QListWidgetItem *listItem = new QListWidgetItem; + listItem->setSizeHint(QSize(330, 64)); + m_listWidget->addItem(listItem); + DWidget *frame = new DWidget; + frame->setFixedSize(330, 64); + + // DPalette framepl = frame->palette(); + //framepl.setColor(DPalette::Window, DPalette::Window); + //frame->setPalette(framepl); + + DLabel *lyricNmae = new DLabel(frame); + DLabel *singerName = new DLabel(frame); + DLabel *duration = new DLabel(frame); + +// bool themeFlag = false; +// int themeType = MusicSettings::value("base.play.theme").toInt(&themeFlag); +// if (!themeFlag) +// themeType = 1; + int themeType = DGuiApplicationHelper::instance()->themeType(); + if (themeType == 1) { + DPalette lyricNamepl = lyricNmae->palette(); + lyricNamepl.setColor(DPalette::WindowText, QColor("#414D68")); + lyricNmae->setPalette(lyricNamepl); + lyricNmae->setForegroundRole(DPalette::WindowText); + + DPalette singerNamepl = singerName->palette(); + singerNamepl.setColor(DPalette::WindowText, QColor("#526A7F")); + singerName->setPalette(singerNamepl); + singerName->setForegroundRole(DPalette::WindowText); + duration->setPalette(singerNamepl); + duration->setForegroundRole(DPalette::WindowText); + } else { + DPalette lyricNamepl = lyricNmae->palette(); + lyricNamepl.setColor(DPalette::WindowText, QColor("#C0C6D4")); + lyricNmae->setPalette(lyricNamepl); + lyricNmae->setForegroundRole(DPalette::WindowText); + + DPalette singerNamepl = singerName->palette(); + singerNamepl.setColor(DPalette::WindowText, QColor("#6D7C88")); + singerName->setPalette(singerNamepl); + singerName->setForegroundRole(DPalette::WindowText); + duration->setPalette(singerNamepl); + duration->setForegroundRole(DPalette::WindowText); + } + + + lyricNmae->setText(m_lyricList[i].lyricsName); + QFont font; + font.setFamily("SourceHanSansSC"); + font.setWeight(QFont::Medium); + font.setPixelSize(14); + lyricNmae->setFont(font); + singerName->setText(m_lyricList[i].singerName); + QFont font2; + font2.setFamily("SourceHanSansSC"); + font2.setWeight(QFont::Medium); + font2.setPixelSize(12); + singerName->setFont(font2); + duration->setText(m_lyricList[i].duration); + QFont font1; + font1.setFamily("SourceHanSansSC"); + font1.setWeight(QFont::Medium); + font1.setPixelSize(12); + duration->setFont(font1); + + lyricNmae->move(15, 11); + singerName->move(15, 35); + duration->move(269, 23); + DPalette pl = frame->palette(); + pl.setColor(DPalette::Background, QColor(0, 0, 0, 7/*0.03 * 255*/)); + frame->setPalette(pl); + + DCheckBox *checkBox = new DCheckBox(frame); + checkBox->setText(""); + checkBox->setFixedSize(16, 16); + checkBox->move(300, 24); + m_group->addButton(checkBox, i); + m_listWidget->setItemWidget(listItem, frame); + } +} + +void SearchLyricsWidget::searchLyrics() +{ + if (m_singer->text().isEmpty() && m_keyWord->text().isEmpty()) + return; + m_lyricList.clear(); + m_listWidget->clear(); + QList buttonList = m_group->buttons(); + for (int i = 0; i < buttonList.size(); ++i) + m_group->removeButton(buttonList.at(i)); + QDir dir(m_path); + if (!dir.exists()) + return; + + //查看路径中后缀为.lrc格式的文件 + QStringList filters; + filters << QString("*.lrc"); + dir.setFilter(QDir::Files | QDir::NoSymLinks); //设置类型过滤器,只为文件格式 + dir.setNameFilters(filters); //设置文件名称过滤器,只为filters格式 + + //统计lrc格式的文件个数 + int dir_count = static_cast(dir.count()); + if (dir_count <= 0) + return; + + for (int i = 0; i < dir_count; ++i) { + MusicLyric lyc; + bool right = false; + int singerIndex = -1; + if (!lyc.getHeadFromFile(m_path + dir[i])) + continue; + if (m_keyWord->text() != "") { + QString ti = lyc.getLineAt(0); + if (ti.indexOf(m_keyWord->text()) != -1) { + if (m_singer->text() != "") { + QString ar; + for (int i = 0; i < 5; ++i) { + ar = lyc.getLineAt(i); + if (ar.indexOf(m_singer->text()) != -1) { + right = true; + singerIndex = i; + } + } + } else { + right = true; + } + } + } else { + if (m_singer->text() != "") { + QString ar; + for (int i = 0; i < 5; ++i) { + ar = lyc.getLineAt(i); + if (ar.indexOf(m_singer->text()) != -1) { + right = true; + singerIndex = i; + } + } + } + } + if (right) { + lyric lycr; + QString nameLine = lyc.getLineAt(0); + if (nameLine.indexOf("[") != -1 && nameLine.indexOf("]") != -1 && nameLine.indexOf("ti") != -1) { + QString name = nameLine.split(":").last(); + name.chop(2); + lycr.lyricsName = name; + } else { + lycr.lyricsName = nameLine; + } + + if (singerIndex != -1) { + QString singerLine = lyc.getLineAt(singerIndex); + if (singerLine.indexOf("[") != -1 && singerLine.indexOf("]") != -1 && singerLine.indexOf("ar") != -1) { + QString name = singerLine.split(":").last(); + name.chop(2); + lycr.singerName = name; + } else { + lycr.singerName = singerLine; + } + } else { + for (int i = 0; i < 5; ++i) { + QString singerLine = lyc.getLineAt(i); + if (singerLine.indexOf("[ar:") != -1) { + QString name = singerLine.split(":").last(); + name.chop(2); + lycr.singerName = name; + } + } + } + lycr.path = m_path + QDir::separator() + dir[i]; + bool endTime = true; + int lineCount = lyc.getCount() - 1; + while (endTime) { + QString timeLine = lyc.getLineAt(lineCount); + if (timeLine.indexOf("[") == -1 || timeLine.indexOf("]") == -1) { + --lineCount; + continue; + } + QString time = timeLine.mid(timeLine.lastIndexOf("[") + 1, timeLine.lastIndexOf("]") - timeLine.lastIndexOf("[") - 1); + time = time.left(5); + lycr.duration = time; + endTime = false; + } + m_lyricList.push_back(lycr); + } + } + createList(); +} + +void SearchLyricsWidget::mySelection(QModelIndex index) +{ + QString path = m_lyricList[index.row()].path; + emit lyricPath(path); +} + +void SearchLyricsWidget::mySelectionIndex(int index) +{ + QString path = m_lyricList[index].path; + emit lyricPath(path); +} + +void SearchLyricsWidget::slottextChanged(const QString &str) +{ + Q_UNUSED(str) + if (m_keyWord->lineEdit()->text().isEmpty() && m_singer->lineEdit()->text().isEmpty()) { + m_search->setEnabled(false); + } else { + m_search->setEnabled(true); + } + +} diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/searchlyricswidget.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/searchlyricswidget.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/searchlyricswidget.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/searchlyricswidget.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,74 @@ +#ifndef SEARCHLYRICSWIDGET_H +#define SEARCHLYRICSWIDGET_H + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "mediameta.h" + +DGUI_USE_NAMESPACE +DWIDGET_USE_NAMESPACE + +struct lyric { + QString lyricsName; + QString singerName; + QString duration; + QString path; + lyric() + { + lyricsName = "null"; + singerName = "null"; + duration = "null"; + } +}; + +class SearchLyricsWidget : public DFloatingWidget +{ + Q_OBJECT + +public: + SearchLyricsWidget(QString path, QWidget *parent = nullptr); + + void setSearchDir(QString dir) + { + m_path = dir; + } + void setDefault(QString song, QString singer); + + void setThemeType(int type); + +public slots: + void searchLyrics(); + +private slots: + void mySelection(QModelIndex index); + void mySelectionIndex(int index); + void slottextChanged(const QString &str); +signals: + //点击歌词列表item传出歌词路径 + void lyricPath(QString path); + void checkBoxClicked(int index); +private: + //第一个linedit歌曲名,第二个歌手名 + void initUI(); + void initConnection(); + void createList(); + DLabel *m_title; + DPushButton *m_search; + DListWidget *m_listWidget; + DLineEdit *m_keyWord; + DLineEdit *m_singer; + QString m_path; + QButtonGroup *m_group; + QVector m_lyricList; +}; + +#endif // SEARCHLYRICSWIDGET_H diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/searchmetaitem.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/searchmetaitem.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/searchmetaitem.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/searchmetaitem.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -22,37 +22,33 @@ #include "searchmetaitem.h" #include #include -#include #include -#include -#include -#include - -DWIDGET_USE_NAMESPACE +#include +#include class SearchMetaItemPrivate { public: SearchMetaItemPrivate(SearchMetaItem *parent) : q_ptr(parent) {} - QLabel *metaTitle = nullptr; - QLabel *metaArtist = nullptr; - QLabel *metaLength = nullptr; - QLabel *checkedBt = nullptr; + DLabel *metaTitle = nullptr; + DLabel *metaArtist = nullptr; + DLabel *metaLength = nullptr; + DLabel *checkedBt = nullptr; SearchMetaItem *q_ptr; Q_DECLARE_PUBLIC(SearchMetaItem) }; -SearchMetaItem::SearchMetaItem(QWidget *parent) : QFrame(parent), d_ptr(new SearchMetaItemPrivate(this)) +SearchMetaItem::SearchMetaItem(QWidget *parent) : DFrame(parent), d_ptr(new SearchMetaItemPrivate(this)) { Q_D(SearchMetaItem); setObjectName("SearchMetaItem"); auto layout = new QHBoxLayout(this); layout->setContentsMargins(10, 0, 10, 0); - auto interFrame = new QFrame(); + auto interFrame = new DFrame(); interFrame->setObjectName("SearchMetaItemInterFrame"); auto interLayout = new QHBoxLayout(interFrame); interLayout->setMargin(0); @@ -61,19 +57,19 @@ metaInfoLayout->setContentsMargins(10, 10, 10, 10); metaInfoLayout->setSpacing(5); - d->metaTitle = new QLabel; + d->metaTitle = new DLabel; d->metaTitle->setObjectName("SearchMetaItemTitle"); - d->metaArtist = new QLabel; + d->metaArtist = new DLabel; d->metaArtist->setObjectName("SearchMetaItemArtist"); metaInfoLayout->addWidget(d->metaTitle); metaInfoLayout->addWidget(d->metaArtist); - d->checkedBt = new QLabel; + d->checkedBt = new DLabel; d->checkedBt->setObjectName("SearchMetaItemCheck"); d->checkedBt->setFixedSize(16, 16); - d->metaLength = new QLabel; + d->metaLength = new DLabel; d->metaLength->setObjectName("SearchMetaItemLength"); interLayout->addLayout(metaInfoLayout); @@ -82,7 +78,6 @@ interLayout->addWidget(d->metaLength); layout->addWidget(interFrame); - DThemeManager::instance()->registerWidget(this); } SearchMetaItem::~SearchMetaItem() @@ -101,7 +96,5 @@ { Q_D(SearchMetaItem); d->checkedBt->setProperty("active", check); - d->checkedBt->style()->unpolish(d->checkedBt); - d->checkedBt->style()->polish(d->checkedBt); d->checkedBt->update(); } diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/searchmetaitem.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/searchmetaitem.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/searchmetaitem.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/searchmetaitem.h 2020-07-14 12:05:00.000000000 +0000 @@ -22,21 +22,23 @@ #pragma once #include -#include +#include #include #include "../../core/playlist.h" +DWIDGET_USE_NAMESPACE + class SearchMetaItemPrivate; -class SearchMetaItem : public QFrame +class SearchMetaItem : public DFrame { Q_OBJECT public: explicit SearchMetaItem(QWidget *parent = Q_NULLPTR); ~SearchMetaItem(); - void initUI(const DMusic::SearchMeta& meta); + void initUI(const DMusic::SearchMeta &meta); void setChecked(bool check); signals: diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/searchmetalist.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/searchmetalist.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/searchmetalist.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/searchmetalist.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -21,10 +21,6 @@ #include "searchmetalist.h" -#include - -DWIDGET_USE_NAMESPACE - class SearchMetaListPrivate { public: @@ -34,13 +30,12 @@ Q_DECLARE_PUBLIC(SearchMetaList) }; -SearchMetaList::SearchMetaList(QWidget *parent) : QListWidget(parent), d_ptr(new SearchMetaListPrivate(this)) +SearchMetaList::SearchMetaList(QWidget *parent) : DListWidget(parent), d_ptr(new SearchMetaListPrivate(this)) { setObjectName("SearchMetaList"); setSelectionMode(QListView::SingleSelection); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - DThemeManager::instance()->registerWidget(this); } SearchMetaList::~SearchMetaList() diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/searchmetalist.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/searchmetalist.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/searchmetalist.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/searchmetalist.h 2020-07-14 12:05:00.000000000 +0000 @@ -22,10 +22,12 @@ #pragma once #include -#include +#include + +DWIDGET_USE_NAMESPACE class SearchMetaListPrivate; -class SearchMetaList : public QListWidget +class SearchMetaList : public DListWidget { Q_OBJECT public: diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/searchresult.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/searchresult.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/searchresult.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/searchresult.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -20,181 +20,411 @@ */ #include "searchresult.h" +#include "musicsearchlistview.h" #include -#include -#include -#include +#include #include -#include -#include -#include +#include +#include #include "pushbutton.h" -SearchResult::SearchResult(QWidget *parent) : QFrame(parent) -{ - DThemeManager::instance()->registerWidget(this); - auto vlayout = new QVBoxLayout(); - setLayout(vlayout); - vlayout->setContentsMargins(0, 4, 0, 3); +SearchResult::SearchResult(QWidget *parent) : DBlurEffectWidget(parent) +{ + QFont labelFont("SourceHanSansSC"); + labelFont.setPointSize(DFontSizeManager::T9); + QPalette labelPalette; + labelPalette.setColor(QPalette::WindowText, QColor("#414D68 ")); + //设置圆角 + setBlurRectXRadius(18); + setBlurRectYRadius(18); + setRadius(30); + setBlurEnabled(true); + setMode(DBlurEffectWidget::GaussianBlur); + + vlayout1 = new QVBoxLayout(); + vlayout2 = new QVBoxLayout(); + vlayout3 = new QVBoxLayout(); + vlayout = new QVBoxLayout(); + + vlayout->setContentsMargins(0, 0, 0, 0); + vlayout1->setSpacing(2); + vlayout2->setSpacing(2); + vlayout3->setSpacing(2); vlayout->setSpacing(0); + setLayout(vlayout); - m_searchResult = new QListView; - m_searchResult->setMouseTracking(true); - m_searchResult->setObjectName("SearchResultList"); - m_searchResult->setSelectionMode(QListView::SingleSelection); - m_searchResult->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - m_searchResult->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - m_searchResult->setFocusPolicy(Qt::NoFocus); - - m_doSearchButton = new PushButton; - m_doSearchButton->setCheckable(true); - m_doSearchButton->setObjectName("SearchResultAction"); - m_doSearchButton->setFixedHeight(25); - m_doSearchButton->setText(tr("Search \"%1\" in Deepin Music")); - m_model = new QStringListModel; - - QStringList a; - a << "1 Music Result" << "2 Music Result"; - a << "3 Music Result" << "4 Music Result"; - a << "5 Music Result" << "6 Music Result"; - a << "7 Music Result" << "8 Music Result"; - a << "9 Music Result" << "10 Music Result"; - - m_model->setStringList(a); - m_searchResult->setModel(m_model); - - vlayout->addWidget(m_searchResult, 0, Qt::AlignHCenter | Qt::AlignTop); - vlayout->addSpacing(1); - vlayout->addWidget(m_doSearchButton, 0, Qt::AlignHCenter | Qt::AlignVCenter); - vlayout->addSpacing(1); - - this->setMinimumHeight(25); - m_searchResult->setMinimumHeight(25); - m_searchResult->adjustSize(); - - auto *bodyShadow = new QGraphicsDropShadowEffect; - bodyShadow->setBlurRadius(9.0); - bodyShadow->setColor(QColor(0, 0, 0, 0.15 * 255)); - bodyShadow->setOffset(0, 4.0); -// this->setGraphicsEffect(bodyShadow); - - connect(m_searchResult, &QListView::clicked, - this, [ = ](const QModelIndex & index) { - auto hashlist = m_model->property("hashlist").toStringList(); - Q_EMIT locateMusic(hashlist.value(index.row())); - }); - connect(m_searchResult, &QListView::entered, - this, [ = ](const QModelIndex & index) { - m_searchResult->setCurrentIndex(index); - m_doSearchButton->setChecked(false); - }); - - connect(m_doSearchButton, &PushButton::pressed, - this, [ = ]() { - auto str = m_model->property("searchString").toString(); - Q_EMIT searchText(str); - }); - connect(m_doSearchButton, &PushButton::entered, - this, [ = ]() { - m_searchResult->setCurrentIndex(QModelIndex()); - m_doSearchButton->setChecked(true); - }); + //音乐 + m_MusicLabel = new DLabel(tr("Music"), this); + m_MusicLabel->setFont(labelFont); + m_MusicLabel->setPalette(labelPalette); + m_MusicLabel->setContentsMargins(32, 8, 0, 4); + m_MusicLabel->adjustSize(); + + m_MusicView = new MusicSearchListview(this); + m_MusicView->setObjectName("SearchMusicView"); + m_MusicView->setMinimumWidth(380); + + + //分割线1 + s_ArtistLine = new DHorizontalLine; + s_ArtistLine->setFixedSize(380, 20); + s_ArtistLine->setContentsMargins(-32, 0, 0, 0); + s_ArtistLine->setLineWidth(2); + + //演唱者 + m_ArtistLabel = new DLabel(tr("Artists"), this); + m_ArtistLabel->setFont(labelFont); + m_ArtistLabel->setPalette(labelPalette); + m_ArtistLabel->setContentsMargins(32, 0, 0, 8); + m_ArtistLabel->adjustSize(); + + m_ArtistView = new MusicSearchListview(this); + m_ArtistView->setObjectName("SearchArtistView"); + m_ArtistView->setMinimumWidth(380); + + //分割线2 + s_AblumLine = new DHorizontalLine; + s_AblumLine->setFixedSize(380, 20); + s_AblumLine->setLineWidth(2); + + //专辑 + m_AblumLabel = new DLabel(tr("Albums"), this); + m_AblumLabel->setFont(labelFont); + m_AblumLabel->setPalette(labelPalette); + m_AblumLabel->setContentsMargins(32, 0, 0, 8); + m_AblumLabel->adjustSize(); + + m_AlbumView = new MusicSearchListview(this); + m_AlbumView->setObjectName("SearchAlbumView"); + m_AlbumView->setMinimumWidth(380); + + vlayout1->addWidget(m_MusicLabel); + vlayout1->addWidget(m_MusicView); + vlayout2->addWidget(m_ArtistLabel); + vlayout2->addWidget(m_ArtistView); + vlayout3->addWidget(m_AblumLabel); + vlayout3->addWidget(m_AlbumView); + vlayout->addLayout(vlayout1); + vlayout->addWidget(s_ArtistLine); + vlayout->addLayout(vlayout2); + vlayout->addWidget(s_AblumLine); + vlayout->addLayout(vlayout3); + + + int themeType = DGuiApplicationHelper::instance()->themeType(); + slotTheme(themeType); + connect(m_MusicView, &MusicSearchListview::clicked, this, &SearchResult::itemClicked); + connect(m_ArtistView, &MusicSearchListview::clicked, this, &SearchResult::itemClicked); + connect(m_AlbumView, &MusicSearchListview::clicked, this, &SearchResult::itemClicked); + + connect(m_MusicView, &MusicSearchListview::sigSearchClear, this, &SearchResult::clearKeyState); + connect(m_ArtistView, &MusicSearchListview::sigSearchClear, this, &SearchResult::clearKeyState); + connect(m_AlbumView, &MusicSearchListview::sigSearchClear, this, &SearchResult::clearKeyState); } void SearchResult::autoResize() { - m_searchResult->setFixedHeight(m_model->rowCount() * (25) + 2); - m_searchResult->setFixedWidth(this->size().width() - 2); - m_doSearchButton->setFixedWidth(this->size().width() - 2); - - qDebug() << m_doSearchButton->rect() << m_searchResult->rect(); - this->setFixedHeight(m_searchResult->height() + 25 + 8 + 3); - m_searchResult->setVisible(!(0 == m_model->rowCount())); - this->adjustSize(); - qDebug() << this->height(); - m_searchResult->raise(); -} + int rowCount = m_MusicView->rowCount(); -void SearchResult::setSearchString(const QString &str) -{ - m_model->setProperty("searchString", str); + int musicHeight = 0; + int artistHeight = 0; + int ablumHeight = 0; + + m_MusicView->setFixedHeight(rowCount * 34); + m_MusicView->adjustSize(); + m_MusicView->raise(); + musicHeight = (rowCount == 0 ? 0 : (rowCount + 1) * 34); + + rowCount = m_ArtistView->rowCount(); + m_ArtistView->setFixedHeight(rowCount * 34); + m_ArtistView->adjustSize(); + m_ArtistView->raise(); + artistHeight = (rowCount == 0 ? 0 : (rowCount + 1) * 34); + + rowCount = m_AlbumView->rowCount(); + m_AlbumView->setFixedHeight(rowCount * 34); + m_AlbumView->adjustSize(); + m_AlbumView->raise(); + ablumHeight = (rowCount == 0 ? 0 : (rowCount + 1) * 34); + + + if (m_MusicView->rowCount() == 0) { + m_MusicLabel->hide(); + m_MusicView->hide(); + s_ArtistLine->hide(); + s_AblumLine->hide(); + } else { + m_MusicLabel->show(); + m_MusicView->show(); + s_ArtistLine->show(); + s_AblumLine->show(); + } - auto searchHits = QString(tr("Search \"%1\" in Deepin Music")).arg(str); - m_doSearchButton->setText(searchHits); -} -void SearchResult::setResultList(const QStringList &titlelist, const QStringList &hashlist) -{ - m_model->setStringList(titlelist); - m_model->setProperty("hashlist", hashlist); + if (m_ArtistView->rowCount() == 0) { + m_ArtistLabel->hide(); + m_ArtistView->hide(); + s_ArtistLine->hide(); + } else { + m_ArtistLabel->show(); + m_ArtistView->show(); + s_AblumLine->show(); + } + + + if (m_AlbumView->rowCount() == 0) { + m_AblumLabel->hide(); + m_AlbumView->hide(); + s_AblumLine->hide(); + } else { + m_AblumLabel->show(); + m_AlbumView->show(); + } + + if (m_MusicView->rowCount() == 0 + && m_ArtistView->rowCount() == 0 + && m_AlbumView->rowCount() == 0) { + hide(); + } + + setFixedHeight(musicHeight + + artistHeight + + ablumHeight + + 10 + ); } -bool SearchResult::isSelected() +void SearchResult::setSearchString(const QString &str) { - return m_doSearchButton->isChecked() || (m_searchResult->currentIndex().row() >= 0); + m_MusicView->setProperty("searchString", str); } void SearchResult::selectUp() { - if (0 == m_model->rowCount()) { - m_doSearchButton->setChecked(true); + if (m_Count == 0) { + return; } - if (m_doSearchButton->isChecked()) { - m_doSearchButton->setChecked(false); - QModelIndex indexOfTheCellIWant = m_model->index(m_model->rowCount() - 1, 0); - m_searchResult->setCurrentIndex(indexOfTheCellIWant); - } else { - auto newSelectedRow = m_searchResult->currentIndex().row() - 1; - if (newSelectedRow < 0) { - m_searchResult->setCurrentIndex(QModelIndex()); - m_doSearchButton->setChecked(true); - return; - } - QModelIndex indexOfTheCellIWant = m_model->index(newSelectedRow, 0); - m_searchResult->setCurrentIndex(indexOfTheCellIWant); + if (m_CurrentIndex < 0) { + return; } + m_CurrentIndex --; + if (m_CurrentIndex < m_MusicView->rowCount()) { + m_MusicView->setCurrentIndexInt(m_CurrentIndex); + m_ArtistView->setCurrentIndexInt(-1); + m_AlbumView->setCurrentIndexInt(-1); + } else if (m_CurrentIndex >= m_MusicView->rowCount() - 1 + && m_CurrentIndex < (m_MusicView->rowCount() + m_ArtistView->rowCount())) { + m_ArtistView->setCurrentIndexInt(m_CurrentIndex + - m_MusicView->rowCount()); + m_MusicView->setCurrentIndexInt(-1); + m_AlbumView->setCurrentIndexInt(-1); + } else { + m_AlbumView->setCurrentIndexInt(m_CurrentIndex + - m_MusicView->rowCount() + - m_ArtistView->rowCount()); + m_MusicView->setCurrentIndexInt(-1); + m_ArtistView->setCurrentIndexInt(-1); + } + + m_MusicView->update(); + m_ArtistView->update(); + m_AlbumView->update(); + + getSearchStr(); } void SearchResult::selectDown() { - if (0 == m_model->rowCount()) { - m_doSearchButton->setChecked(true); + if (m_Count == 0) { + return; + } + if (m_CurrentIndex >= m_Count - 1) { + return; + } + + m_CurrentIndex ++; + + if (m_CurrentIndex < m_MusicView->rowCount()) { + m_MusicView->setCurrentIndexInt(m_CurrentIndex); + + m_ArtistView->setCurrentIndexInt(-1); + m_AlbumView->setCurrentIndexInt(-1); + + } else if (m_CurrentIndex >= m_MusicView->rowCount() - 1 + && m_CurrentIndex < (m_MusicView->rowCount() + m_ArtistView->rowCount())) { + + m_ArtistView->setCurrentIndexInt(m_CurrentIndex + - m_MusicView->rowCount()); + + m_MusicView->setCurrentIndexInt(-1); + m_AlbumView->setCurrentIndexInt(-1); + + } else { + m_AlbumView->setCurrentIndexInt(m_CurrentIndex + - m_MusicView->rowCount() + - m_ArtistView->rowCount()); + + m_MusicView->setCurrentIndexInt(-1); + m_ArtistView->setCurrentIndexInt(-1); + + m_MusicView->clearSelection(); + m_ArtistView->clearSelection(); } - if (m_doSearchButton->isChecked()) { - m_doSearchButton->setChecked(false); - QModelIndex indexOfTheCellIWant = m_model->index(0, 0); - m_searchResult->setCurrentIndex(indexOfTheCellIWant); - } else { - auto newSelectedRow = m_searchResult->currentIndex().row() + 1; - if (newSelectedRow >= m_model->rowCount()) { - m_searchResult->setCurrentIndex(QModelIndex()); - m_doSearchButton->setChecked(true); - return; - } - QModelIndex indexOfTheCellIWant = m_model->index(newSelectedRow, 0); - m_searchResult->setCurrentIndex(indexOfTheCellIWant); + m_MusicView->update(); + m_ArtistView->update(); + m_AlbumView->update(); + + getSearchStr(); +} + +QString SearchResult::currentStr() +{ + QString str; + + return str; +} + +void SearchResult::paintEvent(QPaintEvent *event) +{ + QPainter painter(this); + painter.setRenderHint(QPainter::Antialiasing); // 反锯齿; + + if (m_Theme == 2) { + painter.setBrush(QColor("#252525")); + painter.setPen(QPen(QColor("#454545"), 1)); + } else { + + painter.setBrush(QColor("#f8f8f8")); + painter.setPen(QPen(QColor("#E3E3E3"), 1)); } + + QRect rect = this->rect(); + rect.setWidth(rect.width()); + rect.setHeight(rect.height()); + painter.drawRoundedRect(rect, 18, 18); + + QWidget::paintEvent(event); } void SearchResult::leaveEvent(QEvent *event) { - m_searchResult->setCurrentIndex(QModelIndex()); - m_doSearchButton->setChecked(false); - QFrame::leaveEvent(event); + m_MusicView->setCurrentIndexInt(-1); + DBlurEffectWidget::leaveEvent(event); } void SearchResult::onReturnPressed() { - if (m_doSearchButton->isChecked()) { - Q_EMIT this->searchText(m_model->property("searchString").toString()); + // auto hashlist = m_MusicModel->property("hashlist").toStringList(); + // auto selectedRow = m_MusicView->currentIndex().row(); + // Q_EMIT locateMusic(hashlist.value(selectedRow)); +} + +void SearchResult::selectPlaylist(PlaylistPtr playlistPtr) +{ + playlist = playlistPtr; +} + +void SearchResult::onSearchCand(QString text, PlaylistPtr playlistPtr) +{ + m_CurrentIndex = -1; + if (playlistPtr->id() == MusicCandListID) { + m_MusicView->onMusiclistChanged(text, playlistPtr); + } + if (playlistPtr->id() == AlbumCandListID) { + m_AlbumView->onMusiclistChanged(text, playlistPtr); + } + if (playlistPtr->id() == ArtistCandListID) { + m_ArtistView->onMusiclistChanged(text, playlistPtr); + } + m_MusicView->setCurrentIndexInt(-1); + m_AlbumView->setCurrentIndexInt(-1); + m_ArtistView->setCurrentIndexInt(-1); + m_Count = m_MusicView->rowCount() + + m_AlbumView->rowCount() + + m_ArtistView->rowCount(); + autoResize(); +} + +void SearchResult::slotTheme(int type) +{ + QPalette labelPalette; + if (type == 2) { + labelPalette.setColor(QPalette::Text, QColor("#FFF0F5 ")); } else { - auto hashlist = m_model->property("hashlist").toStringList(); - auto selectedRow = m_searchResult->currentIndex().row(); - Q_EMIT locateMusic(hashlist.value(selectedRow)); + labelPalette.setColor(QPalette::Text, QColor("#414D68 ")); } + m_Theme = type; + m_MusicLabel->setPalette(labelPalette); + m_ArtistLabel->setPalette(labelPalette); + m_AblumLabel->setPalette(labelPalette); + m_MusicView->setThemeType(type); + m_AlbumView->setThemeType(type); + m_ArtistView->setThemeType(type); } + +void SearchResult::itemClicked(QModelIndex index) +{ + PlaylistPtr playList = dynamic_cast(index.model()->parent())->playlist(); + QString currentId = playList->id(); + int row = index.row(); + qDebug() << "鼠标选中行:" << row; + if (currentId == MusicCandListID) { + Q_EMIT this->searchText2(MusicResultListID, playList->allmusic().at(row)->title); + } + if (currentId == AlbumCandListID) { + Q_EMIT this->searchText2(AlbumResultListID, playList->playMusicTypePtrList().at(row)->name); + } + if (currentId == ArtistCandListID) { + Q_EMIT this->searchText2(ArtistResultListID, playList->playMusicTypePtrList().at(row)->name); + } + +} + +//键盘上下选择结果 +void SearchResult::getSearchStr() +{ + if (m_CurrentIndex < 0) { + return; + } + QString text; + QString id; + if (m_CurrentIndex < m_MusicView->rowCount()) { + text = m_MusicView->playlist()->allmusic().at(m_CurrentIndex)->title; + qDebug() << "当前选中歌曲:" << text; + id = MusicResultListID; + } else if (m_CurrentIndex >= m_MusicView->rowCount() - 1 + && m_CurrentIndex < (m_MusicView->rowCount() + m_ArtistView->rowCount())) { + text = m_ArtistView->playlist()->playMusicTypePtrList().at(m_CurrentIndex - m_MusicView->rowCount())->name; + qDebug() << "当前选中歌手:" << text; + id = ArtistResultListID; + } else if (m_CurrentIndex >= m_MusicView->rowCount() + m_ArtistView->rowCount() - 1 + && m_CurrentIndex < (m_MusicView->rowCount() + m_ArtistView->rowCount() + m_AlbumView->rowCount())) { + text = m_AlbumView->playlist()->playMusicTypePtrList().at(m_CurrentIndex - m_MusicView->rowCount() - m_ArtistView->rowCount())->name; + qDebug() << "当前选中专辑:" << text; + id = AlbumResultListID; + } else { + Q_EMIT this->searchText3("", ""); + return; + } + + Q_EMIT this->searchText3(id, text); +} + +void SearchResult::clearKeyState() +{ + m_MusicView->setCurrentIndexInt(-1); + m_AlbumView->setCurrentIndexInt(-1); + m_ArtistView->setCurrentIndexInt(-1); + + m_MusicView->update(); + m_ArtistView->update(); + m_AlbumView->update(); +} + + + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/searchresult.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/searchresult.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/searchresult.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/searchresult.h 2020-07-14 12:05:00.000000000 +0000 @@ -25,13 +25,20 @@ #include DWIDGET_USE_NAMESPACE -#include +#include +#include +#include +#include +#include +#include +#include +#include "../core/playlist.h" -class QListView; class PushButton; class QStringListModel; +class MusicSearchListview; -class SearchResult : public QFrame +class SearchResult : public DBlurEffectWidget { Q_OBJECT public: @@ -39,24 +46,62 @@ void autoResize(); void setSearchString(const QString &str); - void setResultList(const QStringList &titlelist, const QStringList &hashlist); - bool isSelected(); void selectUp(); void selectDown(); + QString currentStr(); + +public: + void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; virtual void leaveEvent(QEvent *event) Q_DECL_OVERRIDE; + signals: void locateMusic(const QString &hash); - void searchText(const QString &text); + void searchText(const QString id, const QString &text); + void searchText2(const QString id, const QString &text); + void searchText3(const QString id, const QString &text); public slots: void onReturnPressed(); + void selectPlaylist(PlaylistPtr playlistPtr); + void onSearchCand(QString text, PlaylistPtr playlistPtr); + void slotTheme(int type); + void itemClicked(QModelIndex); + void getSearchStr(); + void clearKeyState(); private: - QListView *m_searchResult = nullptr; - PushButton *m_doSearchButton = nullptr; - QStringListModel *m_model = nullptr; + DLabel *m_MusicLabel; + DLabel *m_ArtistLabel; + DLabel *m_AblumLabel; + + DHorizontalLine *s_ArtistLine; + DHorizontalLine *s_AblumLine; + + PlaylistPtr playlist = nullptr; + + MusicSearchListview *m_MusicView = nullptr; + MusicSearchListview *m_ArtistView = nullptr; + MusicSearchListview *m_AlbumView = nullptr; + int m_CurrentIndex = -1; + int m_Count = 0; + int m_Theme = 0; + QVBoxLayout *vlayout = nullptr; + QVBoxLayout *vlayout1 = nullptr; + QVBoxLayout *vlayout2 = nullptr; + QVBoxLayout *vlayout3 = nullptr; }; + +extern const QString AlbumMusicListID; +extern const QString ArtistMusicListID; +extern const QString AllMusicListID; +extern const QString FavMusicListID; +extern const QString SearchMusicListID; +extern const QString PlayMusicListID; +extern const QString AlbumCandListID; +extern const QString MusicCandListID; +extern const QString ArtistCandListID; + #endif // SEARCHRESULTLIST_H diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/settingsdialog.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/settingsdialog.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/settingsdialog.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/settingsdialog.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -24,7 +24,7 @@ void GenerateSettingTranslate() { auto base_close_quit_action_text0 = QObject::tr("Minimize to system tray"); - auto base_close_quit_action_text1 = QObject::tr("Exit Deepin Music"); + auto base_close_quit_action_text1 = QObject::tr("Exit Music"); auto base_play_auto_play_text = QObject::tr("Autoplay"); auto base_play_fade_in_out_text = QObject::tr("Enable fade in/out"); auto base_play_remember_progress_text = QObject::tr("Remember playback position"); diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/slider.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/slider.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/slider.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/slider.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -24,13 +24,8 @@ #include #include -#include #include -#include - -DWIDGET_USE_NAMESPACE - class SliderPrivate { public: @@ -46,17 +41,10 @@ }; Slider::Slider(Qt::Orientation orientation, QWidget *parent) : - QSlider(orientation, parent), dd_ptr(new SliderPrivate(this)) + DSlider(orientation, parent), dd_ptr(new SliderPrivate(this)) { Q_D(Slider); - d->themeTemplate = DThemeManager::instance()->getQssForWidget(this); - - connect(DThemeManager::instance(), &DThemeManager::themeChanged, - this, [ = ]() { - d->themeTemplate = DThemeManager::instance()->getQssForWidget(this); - }); - connect(this, &Slider::hoverd, this, [ = ](bool hovered) { if (d->currentAnimation) { d->currentAnimation->stop(); @@ -71,10 +59,8 @@ connect(d->currentAnimation, &QVariantAnimation::valueChanged, this, [ = ](const QVariant & value) { - setStyleSheet(d->updateQSS(value.toReal())); - - style()->unpolish(this); - style()->polish(this); + //setStyleSheet(d->updateQSS(value.toReal())); + d->updateQSS(value.toReal()); }); d->currentAnimation->start(); }); @@ -88,28 +74,29 @@ void Slider::resizeEvent(QResizeEvent *event) { Q_D(Slider); - QSlider::resizeEvent(event); + DSlider::resizeEvent(event); if (!d->currentAnimation) { - setStyleSheet(d->updateQSS(0)); + //setStyleSheet(d->updateQSS(0)); + d->updateQSS(0); } } void Slider::mouseReleaseEvent(QMouseEvent *event) { this->blockSignals(false); - QSlider::mouseReleaseEvent(event); + DSlider::mouseReleaseEvent(event); Q_EMIT valueAccpet(value()); } void Slider::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton - || event->button() == Qt::MiddleButton - || event->button() == Qt::RightButton) { + || event->button() == Qt::MiddleButton + || event->button() == Qt::RightButton) { if (orientation() == Qt::Vertical) { - setSliderPosition(minimum() + ((maximum() - minimum()) * (height() - event->y())) / height()) ; + setValue(minimum() + ((maximum() - minimum()) * (height() - event->y())) / height()) ; } else { - setSliderPosition(minimum() + ((maximum() - minimum()) * (event->x())) / (width())); + setValue(minimum() + ((maximum() - minimum()) * (event->x())) / (width())); } } this->blockSignals(true); @@ -125,21 +112,21 @@ } auto value = (event->x() - this->x()) * valueRange / this->width(); - setSliderPosition(value); + setValue(value); } void Slider::enterEvent(QEvent *event) { setProperty("hover", true); Q_EMIT hoverd(true); - QSlider::enterEvent(event); + DSlider::enterEvent(event); } void Slider::leaveEvent(QEvent *event) { setProperty("hover", false); Q_EMIT hoverd(false); - QSlider::leaveEvent(event); + DSlider::leaveEvent(event); } void Slider::wheelEvent(QWheelEvent *e) diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/slider.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/slider.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/slider.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/slider.h 2020-07-14 12:05:00.000000000 +0000 @@ -22,10 +22,12 @@ #pragma once #include -#include +#include + +DWIDGET_USE_NAMESPACE class SliderPrivate; -class Slider : public QSlider +class Slider : public DSlider { Q_OBJECT public: diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/soundvolume.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/soundvolume.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/soundvolume.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/soundvolume.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -26,11 +26,12 @@ #include #include #include +#include +#include #include -#include - -#include +#include +#include #include "core/player.h" @@ -42,11 +43,14 @@ SoundVolumePrivate(SoundVolume *parent) : q_ptr(parent) {} SoundVolume *q_ptr; - QSlider *volSlider = nullptr; + DLabel *lblPersent; + DSlider *volSlider = nullptr; QBrush background; QColor borderColor = QColor(0, 0, 0, 255 * 2 / 10); - int radius = 4; + + int radius = 20; bool mouseIn = false; + int sThemeType = 0; Q_DECLARE_PUBLIC(SoundVolume) }; @@ -57,22 +61,37 @@ setObjectName("SoundVolume"); setProperty("_dm_keep_on_click", true); - setFixedSize(40, 106); + setFixedSize(62, 201); auto layout = new QVBoxLayout(this); - layout->setContentsMargins(0, 5, 0, 11); + layout->setContentsMargins(2, 16, 0, 31); layout->setSpacing(0); - d->volSlider = new QSlider(Qt::Vertical); + d->lblPersent = new DLabel(this); + auto titleFont = d->lblPersent->font(); + titleFont.setFamily("SourceHanSansSC"); + titleFont.setWeight(QFont::Medium); + titleFont.setPixelSize(14); + d->lblPersent->setFont(titleFont); + d->lblPersent->setText("100%"); + + d->volSlider = new DSlider(Qt::Vertical); d->volSlider->setMinimum(0); d->volSlider->setMaximum(100); - d->volSlider->setSingleStep(Player::VolumeStep); + d->volSlider->slider()->setSingleStep(Player::VolumeStep); d->volSlider->setValue(50); - d->volSlider->setFixedHeight(90); + d->volSlider->slider()->setFixedHeight(126); + d->volSlider->setFixedWidth(24); + d->volSlider->setIconSize(QSize(15, 15)); + d->volSlider->setMouseWheelEnabled(true); +// d->volSlider->setRightIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/light/normal/volume_add_normal.svg")); +// d->volSlider->setLeftIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/light/normal/volume_lessen_normal.svg")); layout->addStretch(); - layout->addWidget(d->volSlider, 0, Qt::AlignCenter); + + layout->addWidget(d->lblPersent, 0, Qt::AlignTop | Qt::AlignHCenter); + layout->addWidget(d->volSlider, 1, Qt::AlignCenter); layout->addStretch(); - setFixedSize(24, 106); + setFixedSize(62, 201); auto *bodyShadow = new QGraphicsDropShadowEffect; bodyShadow->setBlurRadius(10.0); @@ -80,9 +99,7 @@ bodyShadow->setOffset(0, 2.0); this->setGraphicsEffect(bodyShadow); - DThemeManager::instance()->registerWidget(this); - - connect(d->volSlider, &QSlider::valueChanged, + connect(d->volSlider, &DSlider::valueChanged, this, &SoundVolume::volumeChanged); } @@ -148,6 +165,7 @@ void SoundVolume::onVolumeChanged(int volume) { Q_D(SoundVolume); + d->lblPersent->setText(QString::number(volume) + QString("%")); d->volSlider->blockSignals(true); d->volSlider->setValue(volume); d->volSlider->blockSignals(false); @@ -178,12 +196,16 @@ void SoundVolume::wheelEvent(QWheelEvent *event) { QWidget::wheelEvent(event); -// Q_D(SoundVolume); -// if (event->angleDelta().y() > 0) { -// d->volSlider->setValue(d->volSlider->value() + 5); -// } else { -// d->volSlider->setValue(d->volSlider->value() - 5); -// } + + /* + Q_D(SoundVolume); + if (event->angleDelta().y() > 0) { + d->volSlider->setValue(d->volSlider->value() + 5); + } else { + d->volSlider->setValue(d->volSlider->value() - 5); + } + */ + } void SoundVolume::paintEvent(QPaintEvent * /*event*/) @@ -193,13 +215,15 @@ painter.setRenderHints(QPainter::Antialiasing | QPainter::HighQualityAntialiasing); QPainterPath path; + auto palette = this->palette(); + auto penWidthf = 1.0; - auto background = d->background; + auto background = palette.background(); auto borderColor = d->borderColor; const qreal radius = d->radius;; - const qreal triHeight = 6; - const qreal triWidth = 8; + const qreal triHeight = 12; + const qreal triWidth = 16; const qreal height = this->height() - triHeight; const qreal width = this->width(); @@ -228,13 +252,36 @@ path.arcTo(topRightRect, 180.0, -90.0); path.lineTo(radius, 0.0); - // FIXME: light: white -// painter.fillPath(path, QColor(49, 49, 49)); - painter.fillPath(path, background); + /* + FIXME: light: white + painter.fillPath(path, QColor(49, 49, 49)); + FIXME: light: QColor(0, 0, 0, 51) + QPen pen(QColor(0, 0, 0, 0.1 * 255)); + */ + + if (d->sThemeType == 2) { + painter.fillPath(path, QColor(43, 43, 43)); + + } else { + painter.fillPath(path, background); + } - // FIXME: light: QColor(0, 0, 0, 51) -// QPen pen(QColor(0, 0, 0, 0.1 * 255)); QPen pen(borderColor); pen.setWidth(penWidthf); - painter.strokePath(path, pen); + //painter.strokePath(path, pen); +} +void SoundVolume::slotTheme(int type) +{ + Q_D(SoundVolume); + + d->sThemeType = type; + + QString rStr; + if (type == 1) { + rStr = "light"; + } else { + rStr = "dark"; + } +// d->volSlider->setRightIcon(DHiDPIHelper::loadNxPixmap(QString(":/mpimage/%1/normal/volume_add_normal.svg").arg(rStr))); + } diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/soundvolume.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/soundvolume.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/soundvolume.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/soundvolume.h 2020-07-14 12:05:00.000000000 +0000 @@ -22,7 +22,7 @@ #pragma once #include -#include +#include class SoundVolumePrivate; class SoundVolume : public QWidget @@ -33,7 +33,7 @@ Q_PROPERTY(QColor borderColor READ borderColor WRITE setBorderColor) public: explicit SoundVolume(QWidget *parent = nullptr); - ~SoundVolume(); + ~SoundVolume() override; int volume() const; int radius() const; @@ -50,6 +50,7 @@ void setRadius(int radius); void setBorderColor(QColor borderColor); + void slotTheme(int type); protected: virtual void showEvent(QShowEvent *event) Q_DECL_OVERRIDE; virtual void enterEvent(QEvent *event) Q_DECL_OVERRIDE; diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/titlebarwidget.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/titlebarwidget.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/titlebarwidget.cpp 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/titlebarwidget.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -22,17 +22,16 @@ #include "titlebarwidget.h" #include -#include #include -#include #include #include #include #include #include -#include -#include +#include +#include +#include #include "searchedit.h" @@ -46,73 +45,58 @@ void fixSearchPosition(); SearchEdit *search = nullptr; - QPushButton *btBack = nullptr; TitlebarWidget *q_ptr; Q_DECLARE_PUBLIC(TitlebarWidget) }; TitlebarWidget::TitlebarWidget(QWidget *parent) : - QFrame(parent), d_ptr(new TitlebarWidgetPrivate(this)) + DWidget(parent), d_ptr(new TitlebarWidgetPrivate(this)) { Q_D(TitlebarWidget); setFocusPolicy(Qt::NoFocus); setObjectName("TitlebarWidget"); - DThemeManager::instance()->registerWidget(this, QStringList({"viewname"})); + auto layout = new QHBoxLayout(); + layout->setContentsMargins(0, 0, 0, 0); - auto layout = new QHBoxLayout(this); - layout->setContentsMargins(5, 5, 10, 5); + //auto leftWidget = new DWidget; + // leftWidget->setObjectName("TitleLeft"); + // leftWidget->setFixedWidth(100); + //auto leftLayout = new QHBoxLayout(leftWidget); + //leftLayout->setSpacing(10); + //leftLayout->setMargin(0); + + //auto iconLabel = new DLabel; + //iconLabel->setObjectName("TitleIcon"); + //iconLabel->setFixedSize(32, 32); - auto leftWidget = new QFrame; - leftWidget->setObjectName("TitleLeft"); - leftWidget->setFixedWidth(148); - auto leftLayout = new QHBoxLayout(leftWidget); - leftLayout->setSpacing(10); - leftLayout->setMargin(0); - - auto iconLabel = new QLabel; - iconLabel->setObjectName("TitleIcon"); - iconLabel->setFixedSize(24, 24); - - d->btBack = new QPushButton; - d->btBack->setObjectName("TitleBack"); - d->btBack->setFixedSize(24, 24); - d->btBack->hide(); - - leftLayout->addWidget(iconLabel, 0, Qt::AlignCenter); - leftLayout->addWidget(d->btBack, 0, Qt::AlignCenter); - leftLayout->addStretch(); + //leftLayout->addWidget(iconLabel, 0, Qt::AlignCenter); + //leftLayout->addStretch(); d->search = new SearchEdit(this); d->search->setObjectName("TitleSearch"); - d->search->setFixedSize(278, 26); +// d->search->setFixedSize(354, 40); + d->search->setFixedWidth(354); d->search->setPlaceHolder(tr("Search")); d->search->clear(); - auto rightWidget = new QFrame; - rightWidget->setObjectName("TitleLeft"); - rightWidget->setFixedWidth(1); - - layout->addWidget(leftWidget, 0, Qt::AlignCenter); - layout->addStretch(); - layout->addWidget(d->search, 0, Qt::AlignCenter); - layout->addStretch(); - layout->addWidget(rightWidget, 0, Qt::AlignCenter); + //auto rightWidget = new DWidget; + // rightWidget->setObjectName("TitleLeft"); + //rightWidget->setFixedWidth(1); + + //layout->addWidget(leftWidget, 0, Qt::AlignCenter); + //layout->addStretch(); + layout->addWidget(d->search, Qt::AlignCenter); + setLayout(layout); + //layout->addStretch(); + //layout->addWidget(rightWidget, 0, Qt::AlignCenter); connect(d->search, &SearchEdit::locateMusic, this, &TitlebarWidget::locateMusicInAllMusiclist); - connect(d->search, &SearchEdit::searchText, this, &TitlebarWidget::search); - connect(d->btBack, &QPushButton::clicked, this, &TitlebarWidget::searchExited); - - connect(this, &TitlebarWidget::search, this, [ = ]() { - d->btBack->show(); -// d->fixSearchPosition(); - }); - connect(this, &TitlebarWidget::searchExited, this, [ = ]() { - d->btBack->hide(); - clearSearch(); -// d->fixSearchPosition(); - }); + connect(d->search, &SearchEdit::searchText, this, &TitlebarWidget::searchText); + connect(d->search, &SearchEdit::searchCand, this, &TitlebarWidget::searchCand); +// connect(d->search, &SearchEdit::searchAborted, this, &TitlebarWidget::searchExited); + connect(d->search, &SearchEdit::searchAborted, this, &TitlebarWidget::onSearchAborted); } TitlebarWidget::~TitlebarWidget() @@ -121,8 +105,7 @@ void TitlebarWidget::exitSearch() { - Q_D(TitlebarWidget); - d->btBack->hide(); + //Q_D(TitlebarWidget); clearSearch(); } @@ -154,19 +137,43 @@ d->search->setProperty("viewname", viewname); } +void TitlebarWidget::setEditStatus() +{ + Q_D(TitlebarWidget); + d->search->lineEdit()->setFocus(); +} + +void TitlebarWidget::selectPlaylist(PlaylistPtr playlistPtr) +{ + Q_D(TitlebarWidget); + if (playlistPtr != d->search->curPlaylistPtr()) { +// d->search->selectPlaylist(playlistPtr); +// d->search->clear(); + d->search->clearEdit(); + } +} + +void TitlebarWidget::onSearchAborted() +{ + Q_D(TitlebarWidget); + if (d->search->text().size() == 0) { + emit searchExited(); + } +} + void TitlebarWidget::resizeEvent(QResizeEvent *event) { // Q_D(TitlebarWidget); - QFrame::resizeEvent(event); + DWidget::resizeEvent(event); } void TitlebarWidgetPrivate::fixSearchPosition() { - Q_Q(TitlebarWidget); - auto fixSize = QPoint(search->width() / 2, search->height() / 2); - auto fixPos = q->geometry().center() - fixSize; - search->setGeometry(fixPos.x(), fixPos.y(), - search->width(), search->height()); + //Q_Q(TitlebarWidget); + //auto fixSize = QPoint(search->width() / 2, search->height() / 2); + // auto fixPos = q->geometry().center() - fixSize; + // search->setGeometry(fixPos.x(), fixPos.y(), + // search->width(), search->height()); - qDebug() << fixPos << search->size() << search->parent(); + //qDebug() << fixPos << search->size() << search->parent(); } diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/titlebarwidget.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/titlebarwidget.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/titlebarwidget.h 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/titlebarwidget.h 2020-07-14 12:05:00.000000000 +0000 @@ -21,25 +21,36 @@ #pragma once -#include +#include + +#include "../core/playlist.h" + +DWIDGET_USE_NAMESPACE class SearchResult; class TitlebarWidgetPrivate; -class TitlebarWidget : public QFrame +class TitlebarWidget : public DWidget { Q_OBJECT public: explicit TitlebarWidget(QWidget *parent = Q_NULLPTR); - ~TitlebarWidget(); + ~TitlebarWidget() override; void exitSearch(); void clearSearch(); void setSearchEnable(bool enable = true); void setResultWidget(SearchResult *); void setViewname(const QString &viewname); + + void setEditStatus(); + +public slots: + void selectPlaylist(PlaylistPtr playlistPtr); + void onSearchAborted(); signals: void searchExited(); - void search(const QString &text); + void searchText(const QString &id, const QString &text); + void searchCand(const QString &text);//查询候选 void locateMusicInAllMusiclist(const QString &hash); protected: diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/tooltips.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/tooltips.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/tooltips.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/tooltips.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,325 @@ +/* + * (c) 2017, Deepin Technology Co., Ltd. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU 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 + * is provided AS IS, WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, and + * NON-INFRINGEMENT. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the + * OpenSSL library under certain conditions as described in each + * individual source file, and distribute linked combinations + * including the two. + * You must obey the GNU General Public License in all respects + * for all of the code used other than OpenSSL. If you modify + * file(s) with this exception, you may extend this exception to your + * version of the file(s), but you are not obligated to do so. If you + * do not wish to do so, delete this exception statement from your + * version. If you delete this exception statement from all source + * files in the program, then also delete it here. + */ +#include "tooltips.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +DWIDGET_USE_NAMESPACE +class ToolTipsPrivate +{ +public: + ToolTipsPrivate(ToolTips *parent) : q_ptr(parent) {} + + void setBackgroundImage(const QPixmap &srcPixmap); + + QBrush background; + int radius = 8; + int shadowWidth = 20; + QMargins shadowMargins = QMargins(20, 20, 20, 20); + QColor borderColor = QColor(0, 0, 0, 51/*0.2 * 255*/); + + DLabel *textLable = nullptr; + QFrame *m_interFrame = nullptr; + + + ToolTips *q_ptr; + Q_DECLARE_PUBLIC(ToolTips) +}; + + +ToolTips::ToolTips(const QString &text, QWidget *parent) + : QFrame(parent), d_ptr(new ToolTipsPrivate(this)) +{ + DThemeManager::instance()->registerWidget(this); + Q_D(ToolTips); + + setAttribute(Qt::WA_DeleteOnClose); +// setWindowFlags(Qt::ToolTip | Qt::CustomizeWindowHint); + setAttribute(Qt::WA_TranslucentBackground); +// setMaximumWidth(_fontMinWidth); + setObjectName("ToolTips"); + setContentsMargins(0, 0, 0, 0); + + auto layout = new QHBoxLayout(this); + layout->setContentsMargins(7, 4, 7, 4); + layout->setSpacing(0); + + d->m_interFrame = new QFrame(this); + d->m_interFrame->setContentsMargins(0, 0, 0, 0); + auto interlayout = new QHBoxLayout(d->m_interFrame); + interlayout->setContentsMargins(0, 0, 0, 0); + interlayout->setSpacing(5); +// auto iconLabel = new QLabel; +// iconLabel->setObjectName("TipIcon"); +// iconLabel->setFixedSize(icon.size()); +// if (icon.isNull()) { +// iconLabel->hide(); +// } else { +// iconLabel->setPixmap(icon); +// } + + d->textLable = new DLabel(text); + d->textLable->setObjectName("TipText"); + d->textLable->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); +// d->textLable->setMaximumWidth(this->width()); + d->textLable->setWordWrap(false); + DFontSizeManager::instance()->bind(d->textLable, DFontSizeManager::T8); + d->textLable->setForegroundRole(DPalette::ToolTipText); +// DPalette pa_name = DApplicationHelper::instance()->palette(d->textLable); +// pa_name.setBrush(DPalette::Text, pa_name.color(DPalette::ToolTipText)); +// pa_name.setBrush(DPalette::ToolTipText, pa_name.color(DPalette::ToolTipText)); +// d->textLable->setForegroundRole(DPalette::Text); +// d->textLable->setForegroundRole(DPalette::ToolTipText); +// d->textLable->setPalette(pa_name); + +// interlayout->addWidget(iconLabel, 0, Qt::AlignVCenter); + interlayout->addWidget(d->textLable, 0, Qt::AlignVCenter); + layout->addWidget(d->m_interFrame, 0, Qt::AlignVCenter); + + adjustSize(); + + auto *bodyShadow = new QGraphicsDropShadowEffect; + bodyShadow->setBlurRadius(10.0); + bodyShadow->setColor(QColor(0, 0, 0, 25/*0.1 * 255*/)); + bodyShadow->setOffset(0, 2.0); +// this->setGraphicsEffect(bodyShadow); + hide(); +// d->textLable->hide(); + + //setFixedHeight(32); +} + +ToolTips::~ToolTips() +{ + +} + +void ToolTips::enterEvent(QEvent *e) +{ + Q_UNUSED(e) + hide(); +} + +QBrush ToolTips::background() const +{ + Q_D(const ToolTips); + return d->background; +} + +void ToolTips::setText(const QString text) +{ + Q_D(const ToolTips); + d->textLable->setText(text); + m_strText = text; + update(); +} + +int ToolTips::radius() const +{ + Q_D(const ToolTips); + return d->radius; +} + +QColor ToolTips::borderColor() const +{ + Q_D(const ToolTips); + return d->borderColor; +} + +void ToolTips::setBackground(QBrush background) +{ + Q_D(ToolTips); + d->background = background; +} + +void ToolTips::setRadius(int radius) +{ + Q_D(ToolTips); + d->radius = radius; +} + +void ToolTips::setBorderColor(QColor borderColor) +{ + Q_D(ToolTips); + d->borderColor = borderColor; +} + +void ToolTips::pop(QPoint center) +{ + //Q_D(ToolTips); + this->show(); + center = center - QPoint(width() / 2, height() / 2); + this->move(center); + +// auto topOpacity = new QGraphicsOpacityEffect(d->m_interFrame); +// topOpacity->setOpacity(1); +// d->m_interFrame->setGraphicsEffect(topOpacity); + +// QPropertyAnimation *animation4 = new QPropertyAnimation(topOpacity, "opacity"); +//// animation4->setEasingCurve(QEasingCurve::InCubic); +// animation4->setDuration(2000); +// animation4->setStartValue(0); +// animation4->setKeyValueAt(0.25, 1); +// animation4->setKeyValueAt(0.5, 1); +// animation4->setKeyValueAt(0.75, 1); +// animation4->setEndValue(0); +// animation4->start(); +// animation4->connect(animation4, &QPropertyAnimation::finished, +// animation4, &QPropertyAnimation::deleteLater); +// animation4->connect(animation4, &QPropertyAnimation::finished, +// this, [ = ]() { +// d->m_interFrame->setGraphicsEffect(nullptr); +// this->hide(); +// }); +} + +#ifdef _OLD +void ToolTips::paintEvent(QPaintEvent *) +{ + Q_D(ToolTips); +// QFrame::paintEvent(e); +// return; + bool outer = true; + + QPainter painter(this); + painter.setRenderHints(QPainter::Antialiasing | QPainter::HighQualityAntialiasing); + auto radius = d->radius; + auto penWidthf = 1.0; +// auto background = d->background; + const QPalette pal = QGuiApplication::palette();//this->palette(); + QColor background = pal.color(QPalette::ToolTipBase); + DPalette pa_name = DApplicationHelper::instance()->palette(d->textLable); + pa_name.setBrush(DPalette::Text, pa_name.color(DPalette::ToolTipText)); + pa_name.setBrush(DPalette::ToolTipText, pa_name.color(DPalette::ToolTipText)); + d->textLable->setForegroundRole(DPalette::Text); + d->textLable->setForegroundRole(DPalette::ToolTipText); + d->textLable->setPalette(pa_name); + auto borderColor = d->borderColor; + auto margin = 2.0; + auto shadowMargins = QMarginsF(margin, margin, margin, margin); + +// QPainterPath frame; +// frame.addRect(rect().marginsRemoved(QMargins(1, 1, 1, 1))); +// painter.strokePath(frame, QPen(Qt::red)); + + // draw background + auto backgroundRect = QRectF(rect()).marginsRemoved(shadowMargins); + QPainterPath backgroundPath; + backgroundPath.addRoundedRect(backgroundRect, radius, radius); + painter.fillPath(backgroundPath, background); + + // draw border + QPainterPath borderPath; + QRectF borderRect = QRectF(rect()); + auto borderRadius = radius; + QMarginsF borderMargin(penWidthf / 2, penWidthf / 2, penWidthf / 2, penWidthf / 2); + if (outer) { + borderRadius += penWidthf / 2; + borderRect = borderRect.marginsAdded(borderMargin).marginsRemoved(shadowMargins); + } else { + borderRadius -= penWidthf / 2; + borderRect = borderRect.marginsRemoved(borderMargin).marginsRemoved(shadowMargins); + } + borderPath.addRoundedRect(borderRect, borderRadius, borderRadius); + QPen borderPen(borderColor); + borderPen.setWidthF(penWidthf); + painter.strokePath(borderPath, borderPen); +} + +} +#else +void ToolTips::paintEvent(QPaintEvent *) +{ + Q_D(ToolTips); + QPainter pt(this); + pt.setRenderHint(QPainter::Antialiasing); + +// connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, [=]{ +// DPalette pa_name = DApplicationHelper::instance()->palette(d->textLable); +// pa_name.setBrush(DPalette::Text, pa_name.color(DPalette::ToolTipText)); +// pa_name.setBrush(DPalette::ToolTipText, pa_name.color(DPalette::ToolTipText)); +// d->textLable->setForegroundRole(DPalette::Text); +// d->textLable->setForegroundRole(DPalette::ToolTipText); +// d->textLable->setPalette(pa_name); +// }); + + if (DGuiApplicationHelper::LightType == DGuiApplicationHelper::instance()->themeType()) { + pt.setPen(QColor(0, 0, 0, 10)); + pt.setBrush(QBrush(QColor(247, 247, 247, 220))); + } else if (DGuiApplicationHelper::DarkType == DGuiApplicationHelper::instance()->themeType()) { + pt.setPen(QColor(255, 255, 255, 10)); + pt.setBrush(QBrush(QColor(42, 42, 42, 220))); + } else { + pt.setPen(QColor(0, 0, 0, 10)); + pt.setBrush(QBrush(QColor(247, 247, 247, 220))); + } + + QRect rect = this->rect(); + rect.setWidth(rect.width() - 1); + rect.setHeight(rect.height() - 1); + QPainterPath painterPath; + painterPath.addRoundedRect(rect, d->radius, d->radius); + pt.drawPath(painterPath); + +} +#endif + +void ToolTips::resizeEvent(QResizeEvent *ev) +{ +// resetSize(); +// update(); + return QWidget::resizeEvent(ev); +} + +void ToolTips::resetSize(const int maxWidth) +{ + Q_D(ToolTips); + QFont font = DFontSizeManager::instance()->get(DFontSizeManager::T8); + QFontMetrics fm(font); + auto w = fm.boundingRect(d->textLable->text()).width(); + + if (w >= maxWidth - 14) { + d->textLable->setWordWrap(true); + this->setFixedWidth(maxWidth); + d->textLable->setFixedWidth(maxWidth - 14); + } +} + + diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/tooltips.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/tooltips.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/tooltips.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/tooltips.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,50 @@ +#ifndef TOOLTIPS_H +#define TOOLTIPS_H +#include +#include +#include +#include +#include +#include +#include + +class ToolTipsPrivate; +class ToolTips : public QFrame +{ + Q_OBJECT + Q_PROPERTY(int radius READ radius WRITE setRadius) + Q_PROPERTY(QBrush background READ background WRITE setBackground) + Q_PROPERTY(QColor borderColor READ borderColor WRITE setBorderColor) +public: + explicit ToolTips(const QString &text, + QWidget *parent = nullptr); + ~ToolTips() override; + + void pop(QPoint center); + + int radius() const; + QColor borderColor() const; + QBrush background() const; + +public slots: + void setText(const QString text); + void setBackground(QBrush background); + void setRadius(int radius); + void setBorderColor(QColor borderColor); + +protected: + virtual void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE; + void enterEvent(QEvent *e) override; + virtual void resizeEvent(QResizeEvent *ev) Q_DECL_OVERRIDE; + +public: + void resetSize(const int maxWidth); + +private: + QScopedPointer d_ptr; + Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), ToolTips) + QString m_strText; +}; + + +#endif // TOOLTIPS_H diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/waveform.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/waveform.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/waveform.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/waveform.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,577 @@ +/* -*- Mode: C++; indent-tabs-mode: nil; tab-width: 4 -*- + * -*- coding: utf-8 -*- + * + * Copyright (C) 2011 ~ 2018 Deepin, Inc. + * 2011 ~ 2018 Wang Yong + * + * Author: Wang Yong + * Maintainer: Wang Yong + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "waveform.h" +#include "waveformscale.h" +#include "core/util/fft.h" + +const int Waveform::SAMPLE_DURATION = 30; +const int Waveform::WAVE_WIDTH = 2; +const int Waveform::WAVE_DURATION = 4; + +Waveform::Waveform(Qt::Orientation orientation, QWidget *widget, QWidget *parent) : DSlider(orientation, parent), mainWindow(widget) +{ + QSizePolicy sp(QSizePolicy::Preferred, QSizePolicy::Preferred); + setSizePolicy(sp); + setFixedHeight(40); + maxSampleNum = 16; + slider()->hide(); + + waveformScale = new WaveformScale(mainWindow); + waveformScale->setAttribute(Qt::WA_TransparentForMouseEvents, true); + waveformScale->hide(); +} + +void Waveform::paintEvent(QPaintEvent *) +{ + QPainter painter(this); + painter.setRenderHint(QPainter::Antialiasing, true); + + painter.save(); + painter.setPen(Qt::NoPen); + qreal devicePixelRatio = qApp->devicePixelRatio(); + if (devicePixelRatio > 1.0) { + painter.setClipRect(QRect(rect().x(), rect().y(), rect().width() - 1, rect().height())); + } else { + painter.setClipRect(QRect(rect().x(), rect().y(), rect().width(), rect().height())); + } + + int volume = 0; + double curWidth = rect().width() * (value() * 1.0) / (maximum() - minimum()); + //draw left + QColor fillColor(Qt::black); + if (themeType == 2) + fillColor = QColor("#FFFFFF"); + painter.save(); + if (devicePixelRatio > 1.0) { + painter.setClipRect(QRect(rect().x(), rect().y(), static_cast(curWidth - 1), rect().height())); + } else { + painter.setClipRect(QRect(rect().x(), rect().y(), static_cast(curWidth), rect().height())); + } + for (int i = 0; i < sampleList.size(); i++) { + volume = static_cast(sampleList[i] * rect().height()); +// if (volume == 0) { +// QPainterPath path; +// path.addRect(QRectF(rect().x() + i * WAVE_DURATION, rect().y() + (rect().height() - 1), WAVE_DURATION, 1)); +// painter.fillPath(path, fillColor); +// } else { + if (volume == 0) { + volume = 1; + } + QRect sampleRect(rect().x() + i * WAVE_DURATION, rect().y() + (rect().height() - 1), WAVE_WIDTH, -qAbs(volume)); + painter.fillRect(sampleRect, fillColor); +// } + } + if (sampleList.size() < curWidth / WAVE_DURATION) { + QPainterPath path; + path.addRect(QRectF(rect().x() + sampleList.size() * WAVE_DURATION, + rect().y() + (rect().height() - 1), + curWidth - (sampleList.size() * WAVE_DURATION), + 1)); + painter.fillPath(path, fillColor); + } + painter.restore(); + + //draw right + fillColor = QColor("#000000"); + if (themeType == 2) + fillColor = QColor("#FFFFFF"); + fillColor.setAlphaF(0.2); + painter.save(); + if (devicePixelRatio > 1.0) { + painter.setClipRect(QRect(rect().x() + static_cast(curWidth - 1), rect().y(), + rect().width() - static_cast(curWidth - 1), rect().height())); + } else { + painter.setClipRect(QRect(rect().x() + static_cast(curWidth), rect().y(), + rect().width() - static_cast(curWidth), rect().height())); + } + for (int i = 0; i < sampleList.size(); i++) { + volume = static_cast(sampleList[i] * rect().height()); +// if (volume == 0) { +// QPainterPath path; +// path.addRect(QRectF(rect().x() + i * WAVE_DURATION, rect().y() + (rect().height() - 1), WAVE_DURATION, 1)); +// painter.fillPath(path, fillColor); +// } else { + if (volume == 0) { + volume = 1; + } + QRect sampleRect(rect().x() + i * WAVE_DURATION, rect().y() + (rect().height() - 1), WAVE_WIDTH, -qAbs(volume)); + painter.fillRect(sampleRect, fillColor); +// } + } + if (sampleList.size() < rect().width() / WAVE_DURATION) { + fillColor = Qt::darkGray; + QPainterPath path; + path.addRect(QRectF(rect().x() + sampleList.size() * WAVE_DURATION, + rect().y() + (rect().height() - 1), + rect().width() - (sampleList.size() * WAVE_DURATION), + 1)); + painter.fillPath(path, fillColor); + } + painter.restore(); + + painter.restore(); +} + +void Waveform::clearWave() +{ + sampleList.clear(); +} + +void Waveform::onAudioBuffer(const QVector &allData, const QString &hash) +{ + metaHash = hash; + QVector t_allData; + if (!allData.isEmpty()) { + float max = allData.first(); + for (auto data : allData) { + if (max < data) + max = data; + } + for (int i = 0; i < allData.size(); ++i) { + t_allData.append(qAbs(allData[i] / max)); + } + } + reciveSampleList = t_allData; + spectrumFlag = false; + updateAudioBuffer(); +} + +void Waveform::onAudioBufferProbed(const QAudioBuffer &buffer) +{ + spectrumFlag = true; + for (auto value : getBufferLevels(buffer)) { + reciveSampleList.push_front(static_cast(value)); + break; + } + if (reciveSampleList.size() > maxSampleNum) + reciveSampleList.pop_back(); + + powerSpectrum(); + update(); + +// if (width() > maxSampleNum) +// maxSampleNum = width(); +// if (reciveSampleList.size() == maxSampleNum) { +// sampleList = reciveSampleList; +// reciveSampleList.clear(); +// } + +// updateScaleSize(); +// update(); +} + +// returns the audio level for each channel +QVector Waveform::getBufferLevels(const QAudioBuffer &buffer) +{ + QVector values; + + if (!buffer.format().isValid() || buffer.format().byteOrder() != QAudioFormat::LittleEndian) + return values; + + if (buffer.format().codec() != "audio/pcm") + return values; + + int channelCount = buffer.format().channelCount(); + values.fill(0, channelCount); + qreal peak_value = Waveform::getPeakValue(buffer.format()); + if (qFuzzyCompare(peak_value, qreal(0))) + return values; + + switch (buffer.format().sampleType()) { + case QAudioFormat::Unknown: + case QAudioFormat::UnSignedInt: + if (buffer.format().sampleSize() == 32) + values = Waveform::getBufferLevels(buffer.constData(), buffer.frameCount(), channelCount); + if (buffer.format().sampleSize() == 16) + values = Waveform::getBufferLevels(buffer.constData(), buffer.frameCount(), channelCount); + if (buffer.format().sampleSize() == 8) + values = Waveform::getBufferLevels(buffer.constData(), buffer.frameCount(), channelCount); + for (int i = 0; i < values.size(); ++i) + values[i] = qAbs(values.at(i) - peak_value / 2) / (peak_value / 2); + break; + case QAudioFormat::Float: + if (buffer.format().sampleSize() == 32) { + values = Waveform::getBufferLevels(buffer.constData(), buffer.frameCount(), channelCount); + for (int i = 0; i < values.size(); ++i) + values[i] /= peak_value; + } + break; + case QAudioFormat::SignedInt: + if (buffer.format().sampleSize() == 32) + values = Waveform::getBufferLevels(buffer.constData(), buffer.frameCount(), channelCount); + if (buffer.format().sampleSize() == 16) + values = Waveform::getBufferLevels(buffer.constData(), buffer.frameCount(), channelCount); + if (buffer.format().sampleSize() == 8) + values = Waveform::getBufferLevels(buffer.constData(), buffer.frameCount(), channelCount); + for (int i = 0; i < values.size(); ++i) + values[i] /= peak_value; + break; + } + + return values; +} + +template +QVector Waveform::getBufferLevels(const T *buffer, int frames, int channels) +{ + QVector max_values; + max_values.fill(0, channels); + + for (int i = 0; i < frames; ++i) { + for (int j = 0; j < channels; ++j) { + qreal value = qAbs(qreal(buffer[i * channels + j])); + if (value > max_values.at(j)) + max_values.replace(j, value); + } + } + + return max_values; +} + +// This function returns the maximum possible sample value for a given audio format +qreal Waveform::getPeakValue(const QAudioFormat &format) +{ + // Note: Only the most common sample formats are supported + if (!format.isValid()) + return qreal(0); + + if (format.codec() != "audio/pcm") + return qreal(0); + + switch (format.sampleType()) { + case QAudioFormat::Unknown: + break; + case QAudioFormat::Float: + if (format.sampleSize() != 32) // other sample formats are not supported + return qreal(0); + return qreal(1.00003); + case QAudioFormat::SignedInt: + if (format.sampleSize() == 32) + return qreal(INT_MAX); + if (format.sampleSize() == 16) + return qreal(SHRT_MAX); + if (format.sampleSize() == 8) + return qreal(CHAR_MAX); + break; + case QAudioFormat::UnSignedInt: + if (format.sampleSize() == 32) + return qreal(UINT_MAX); + if (format.sampleSize() == 16) + return qreal(USHRT_MAX); + if (format.sampleSize() == 8) + return qreal(UCHAR_MAX); + break; + } + + return qreal(0); +} + +void Waveform::mouseReleaseEvent(QMouseEvent *event) +{ + this->blockSignals(false); + DSlider::mouseReleaseEvent(event); + Q_EMIT valueAccpet(value()); + updateScaleSize(); +} + +void Waveform::mousePressEvent(QMouseEvent *event) +{ + if (event->button() == Qt::LeftButton + || event->button() == Qt::MiddleButton + || event->button() == Qt::RightButton) { + if (orientation() == Qt::Vertical) { + setValue(minimum() + ((maximum() - minimum()) * (height() - event->y())) / height()) ; + } else { + setValue(minimum() + ((maximum() - minimum()) * (event->x())) / (width())); + } + } + updateScaleSize(); + this->blockSignals(true); +} + +void Waveform::mouseMoveEvent(QMouseEvent *event) +{ + auto viewRange = this->width(); + + if (0 == viewRange) { + return; + } + + auto value = minimum() + ((maximum() - minimum()) * (event->x())) / (width()); + setValue(value); + updateScaleSize(); +} + +void Waveform::onProgressChanged(qint64 value, qint64 duration, qint64 coefficient) +{ + if (IsShowwaveformScale) + waveformScale->show(); + auto length = maximum() - minimum(); + Q_ASSERT(length != 0); + + /*------curCoefficient-------*/ + curCoefficient = coefficient; + + auto progress = 0; + if (0 != duration) { + progress = static_cast(length * value / duration); + } + + if (signalsBlocked()) { + return; + } + + curValue = value; + allDuration = duration; + + blockSignals(true); + setValue(progress); + + blockSignals(false); + update(); + updateScaleSize(); +} + +void Waveform::updateScaleSize() +{ + auto waveScaleWidth = waveformScale->width(); + double curWidth = rect().width() * (value() * 1.0) / (maximum() - minimum()); + curValue = static_cast(allDuration * (value() * 1.0) / (maximum() - minimum())); + + auto wavePos = mapToParent(QPoint(static_cast(curWidth - waveScaleWidth / 2), 0)); + wavePos.ry() = -35; + wavePos = (static_cast(parent())->mapToGlobal(wavePos)); + wavePos = mainWindow->mapFromGlobal(wavePos); + + waveformScale->move(wavePos.x(), wavePos.y()); + waveformScale->setValue(curValue * curCoefficient); + + waveformScale->update(); +} + +void Waveform::setThemeType(int type) +{ + themeType = type; +} + +void Waveform::clearBufferAudio(const QString &hash) +{ + if (hash.isEmpty() || hash != metaHash) { + reciveSampleList.clear(); + sampleList.clear(); + metaHash.clear(); + } +} + +void Waveform::hidewaveformScale() +{ + waveformScale->hide(); +} + +void Waveform::enterEvent(QEvent *event) +{ + IsShowwaveformScale = true; + updateScaleSize(); + waveformScale->show(); + waveformScale->raise(); + + DSlider::enterEvent(event); +} + +void Waveform::leaveEvent(QEvent *event) +{ + IsShowwaveformScale = false; + waveformScale->hide(); + DSlider::leaveEvent(event); +} + +void Waveform::resizeEvent(QResizeEvent *event) +{ + DSlider::resizeEvent(event); + if (!spectrumFlag) + updateAudioBuffer(); + else + powerSpectrum(); +} + +void Waveform::updateAudioBuffer() +{ + if (reciveSampleList.isEmpty()) { + sampleList.clear(); + return; + } + QVector curSampleListX; + float singleWidth = width() / float(reciveSampleList.size() - 1); + for (int i = 0; i < reciveSampleList.size(); i++) { + curSampleListX.append(i * singleWidth); + } + QVector endSampleListX, endSampleListY; + spline(curSampleListX, reciveSampleList, endSampleListX, sampleList, width() / WAVE_DURATION + 1); + update(); +} + +bool Waveform::powerSpectrum() +{ + sampleList.clear(); + if (reciveSampleList.size() != maxSampleNum) + return false; + + complex *sample; + + sample = new complex[maxSampleNum]; + for (int i = 0; i < maxSampleNum; i++) + sample[i] = complex(reciveSampleList[i]/* / 32768.0*/, 0); + + int log2N = static_cast(log2(maxSampleNum - 1) + 1); + int sign = -1; + + CFFT::process(sample, log2N, sign); + + QVector curSampleListX, curSampleListY; + for (int i = 0; i < maxSampleNum; i++) { + curSampleListY.append(abs(sample[i]) / static_cast(sqrt(2)) / 2); + if (curSampleListY[i] < 0 || curSampleListY[i] > 1) + curSampleListY[i] = 0; + } + curSampleListY = curSampleListY.mid(curSampleListY.size() / 2 - 3, 7); + int singleWidth = width() / (curSampleListY.size() - 1); + for (int i = 0; i < curSampleListY.size(); i++) { + curSampleListX.append(i * singleWidth); + } + + QVector endSampleListX, endSampleListY; + spline(curSampleListX, curSampleListY, endSampleListX, sampleList, width() / WAVE_DURATION + 1); + delete [] sample; + return true; +} + +void Waveform::spline(QVector &x, QVector &y, QVector &vx, QVector &vy, int pnt) +{ + vx.clear(); + vy.clear(); + + QVector tx = x; + QVector ty = y; + + for (int i = 1; i < x.size();) { + if (fabs(x[i] - x[i - 1]) < 0.01f) { + x.erase(x.begin() + i); + y.erase(y.begin() + i); + continue; + } + + i ++; + } + + int N = x.size(); + if (N != y.size()) return; + + if (N == 1) { + vx = x; + vy = y; + return; + } + + if (N == 2) { + x.insert(x.begin() + 1, (x[0] + x[1]) / 2); + y.insert(y.begin() + 1, (y[0] + y[1]) / 2); + } + + QVector h; + h.resize(N - 1); + for (int i = 0; i < N - 1; i ++) h[i] = x[i + 1] - x[i]; + + QVector M; + M.resize(N); + M[0] = 0; + M[N - 1] = 0; + for (int i = 1; i < N - 1; i ++) M[i] = 6 * ((y[i + 1] - y[i]) / h[i] - (y[i] - y[ i - 1]) / h[i - 1]); + + QVector > A; + A.resize(N); + for (int i = 0; i < N; i ++) A[i].resize(3); + + A[0][0] = 1; + A[N - 1][2] = 1; + + for (int i = 1; i < N - 1; i ++) { + A[i][0] = h[i - 1]; + A[i][1] = 2 * (h[i - 1] + h[i]); + A[i][2] = h[i]; + } + + QVector C; + C.resize(N); + C[0] = A[0][1] / A[0][0]; + for (int i = 1; i < N; i ++) C[i] = A[i][2] / (A[i][1] - C[i - 1] * A[i][0]); + + QVector D; + D.resize(N); + D[0] = M[0] / A[0][0]; + for (int i = 1; i < N; i ++) D[i] = (M[i] - D[i - 1] * A[i][0]) / (A[i][1] - C[i - 1] * A[i][0]); + + QVector m; + m.resize(N); + m[N - 1] = 0; + + for (int i = N - 2; i >= 0; i --) m[i] = D[i] - C[i] * m[i + 1]; + + QVector a, b, c, d; + a.resize(N - 1); + b.resize(N - 1); + c.resize(N - 1); + d.resize(N - 1); + for (int i = 0; i < N - 1; i ++) { + a[i] = y[i]; + b[i] = (y[ i + 1] - y[i]) / h[i] - h[i] * m[i] / 2 - h[i] * (m[i + 1] - m[i]) / 6; + c[i] = m[i] / 2; + d[i] = (m[i + 1] - m[i]) / (6 * h[i]); + } + + vx.resize(pnt); + vy.resize(pnt); + + int index = 0; + for (int i = 0; i < (pnt - 1); i ++) { + vx[i] = i * (x[N - 1] - x[0]) / (pnt - 1) + x[0]; + + while (vx[i] > x[index + 1]) { + index ++; + } + float fx = vx[i] - x[index]; + + vy[i] = a[index] + b[index] * fx + c[index] * fx * fx + d[index] * fx * fx * fx; + } + x = tx; + y = ty; +} diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/waveform.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/waveform.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/waveform.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/waveform.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,97 @@ +/* -*- Mode: C++; indent-tabs-mode: nil; tab-width: 4 -*- + * -*- coding: utf-8 -*- + * + * Copyright (C) 2011 ~ 2018 Deepin, Inc. + * 2011 ~ 2018 Wang Yong + * + * Author: Wang Yong + * Maintainer: Wang Yong + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef WAVEFORM_H +#define WAVEFORM_H + +#include + +DWIDGET_USE_NAMESPACE + +class QAudioBuffer; +class QAudioFormat; +class WaveformScale; + +class Waveform : public DSlider +{ + Q_OBJECT + + static const int SAMPLE_DURATION; + static const int WAVE_WIDTH; + static const int WAVE_DURATION; + +public: + Waveform(Qt::Orientation orientation, QWidget *widget, QWidget *parent = nullptr); + + static qreal getPeakValue(const QAudioFormat &format); + static QVector getBufferLevels(const QAudioBuffer &buffer); + + template + static QVector getBufferLevels(const T *buffer, int frames, int channels); + + void clearWave(); + + void updateScaleSize(); + void setThemeType(int type); + + void clearBufferAudio(const QString &hash); + void hidewaveformScale(); + +Q_SIGNALS: + void valueAccpet(int value); + +public slots: + void onAudioBufferProbed(const QAudioBuffer &buffer); + void onProgressChanged(qint64 value, qint64 duration, qint64 coefficient); + void onAudioBuffer(const QVector &allData, const QString &hash); + +protected: + void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; + void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void enterEvent(QEvent *event) Q_DECL_OVERRIDE; + void leaveEvent(QEvent *event) Q_DECL_OVERRIDE; + void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; + +private: + void updateAudioBuffer(); + bool powerSpectrum(); + void spline(QVector &x, QVector &y, QVector &vx, QVector &vy, int pnt); + +private: + QWidget *mainWindow; + QVector sampleList; + QVector reciveSampleList; + int maxSampleNum; + qint64 curValue = 0; + qint64 allDuration = 1; + qint64 curCoefficient = 1; + int themeType = 1; + WaveformScale *waveformScale; + bool spectrumFlag = true; + QString metaHash; + bool IsShowwaveformScale = false; +}; + +#endif diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/waveformscale.cpp deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/waveformscale.cpp --- deepin-music-5.0.1+ds/src/music-player/view/widget/waveformscale.cpp 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/waveformscale.cpp 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,88 @@ +/* -*- Mode: C++; indent-tabs-mode: nil; tab-width: 4 -*- + * -*- coding: utf-8 -*- + * + * Copyright (C) 2011 ~ 2018 Deepin, Inc. + * 2011 ~ 2018 Wang Yong + * + * Author: Wang Yong + * Maintainer: Wang Yong + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "waveformscale.h" + +#include +#include +#include +#include + +#include + +const int WaveformScale::WAVE_WIDTH = 2; +const int WaveformScale::WAVE_TEXTHEIGHT = 25; +const int WaveformScale::WAVE_TEXTWIDTH = 38; + +WaveformScale::WaveformScale(QWidget *parent) : DFrame(parent) +{ + setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); + setFixedSize(56, 105); + setObjectName("WaveformScale"); +} + +void WaveformScale::setValue(qint64 value) +{ + curValue = value; + update(); +} + +void WaveformScale::paintEvent(QPaintEvent *) +{ + QPainter painter(this); + painter.setRenderHint(QPainter::Antialiasing, true); + painter.setPen(Qt::NoPen); + + //draw line + painter.setBrush(QColor("#FF8A00")); + QRectF lineRect(rect().center().x() - WAVE_WIDTH / 2, WAVE_TEXTHEIGHT, WAVE_WIDTH, rect().height() - WAVE_TEXTHEIGHT - 20); + painter.drawRect(lineRect); + + painter.setBrush(QColor("#0081FF")); + //draw top + int t_textWidth = WAVE_TEXTWIDTH; + QRect t_textRect(rect().center().x() - t_textWidth / 2, 0, t_textWidth, 20); + QPainterPath painterPath; + painterPath.addRoundRect(t_textRect, 40, 80); + QPolygonF topPoly; + topPoly.append(QPointF(rect().center().x() - 5, 20)); + topPoly.append(QPointF(rect().center().x() + 5, 20)); + topPoly.append(QPointF(rect().center().x(), 25)); + painterPath.addPolygon(topPoly); + painter.drawPath(painterPath); + + //draw bottom + QPolygonF bottomPoly; + bottomPoly.append(QPointF(rect().center().x(), rect().height() - 20)); + bottomPoly.append(QPointF(rect().center().x() - 5, rect().height() - 10)); + bottomPoly.append(QPointF(rect().center().x() + 5, rect().height() - 10)); + painter.drawPolygon(bottomPoly); + + painter.setPen(Qt::white); + auto font = painter.font(); + font.setFamily("SourceHanSansSC"); + font.setWeight(QFont::Normal); + font.setPixelSize(12); + painter.setFont(font); + painter.drawText(t_textRect, Qt::AlignCenter, DMusic::lengthString(curValue)); +} diff -Nru deepin-music-5.0.1+ds/src/music-player/view/widget/waveformscale.h deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/waveformscale.h --- deepin-music-5.0.1+ds/src/music-player/view/widget/waveformscale.h 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/music-player/view/widget/waveformscale.h 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,50 @@ +/* -*- Mode: C++; indent-tabs-mode: nil; tab-width: 4 -*- + * -*- coding: utf-8 -*- + * + * Copyright (C) 2011 ~ 2018 Deepin, Inc. + * 2011 ~ 2018 Wang Yong + * + * Author: Wang Yong + * Maintainer: Wang Yong + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include + +DWIDGET_USE_NAMESPACE + +class WaveformScale : public DFrame +{ + Q_OBJECT + + static const int WAVE_WIDTH; + static const int WAVE_TEXTHEIGHT; + static const int WAVE_TEXTWIDTH; + +public: + WaveformScale(QWidget *parent = nullptr); + + void setValue(qint64 value); + +protected: + void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; + +private: + QString timeStr; + qint64 curValue = 0; +}; + diff -Nru deepin-music-5.0.1+ds/src/src.pro deepin-music-6.0.1.54+ds.1/src/src.pro --- deepin-music-5.0.1+ds/src/src.pro 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/src/src.pro 2020-07-14 12:05:00.000000000 +0000 @@ -1,6 +1,10 @@ TEMPLATE = subdirs CONFIG = ordered +isEmpty(PREFIX){ + PREFIX = /usr +} + SUBDIRS += vendor SUBDIRS += libdmusic \ music-player \ diff -Nru deepin-music-5.0.1+ds/.transifexrc deepin-music-6.0.1.54+ds.1/.transifexrc --- deepin-music-5.0.1+ds/.transifexrc 1970-01-01 00:00:00.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/.transifexrc 2020-07-14 12:05:00.000000000 +0000 @@ -0,0 +1,6 @@ +[https://www.transifex.com] +api_hostname = https://api.transifex.com +hostname = https://www.transifex.com +password = 1/fed29a347a3f79abfe438d15d1af9dceac2ba39d +username = api + diff -Nru deepin-music-5.0.1+ds/.tx/config deepin-music-6.0.1.54+ds.1/.tx/config --- deepin-music-5.0.1+ds/.tx/config 2020-01-17 19:42:12.000000000 +0000 +++ deepin-music-6.0.1.54+ds.1/.tx/config 2020-07-14 12:05:00.000000000 +0000 @@ -5,8 +5,8 @@ [deepin-music.deepin-music] file_filter = src/music-player/translations/deepin-music_.ts -source_file = src/music-player/translations/deepin-music.ts -source_lang = en +source_file = src/music-player/translations/deepin-music_en_US.ts +source_lang = en_US type = QT [deepin-music.deepin-music-desktop-ts]