diff -Nru lollypop-1.4.7.r90.g765cf1b3/.buildconfig lollypop-1.4.16.r6.ga09712088/.buildconfig --- lollypop-1.4.7.r90.g765cf1b3/.buildconfig 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/.buildconfig 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -[default] -name=Default -runtime=host -config-opts= -run-opts= -prefix=/usr/local -app-id= -postbuild= -prebuild= -default=true diff -Nru lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-artists-list-symbolic.svg lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-artists-list-symbolic.svg --- lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-artists-list-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-artists-list-symbolic.svg 2021-02-25 23:00:18.000000000 +0000 @@ -0,0 +1,3 @@ + + + diff -Nru lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-equalizer-symbolic.svg lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-equalizer-symbolic.svg --- lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-equalizer-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-equalizer-symbolic.svg 2021-02-25 23:00:18.000000000 +0000 @@ -0,0 +1,132 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-play-queue-symbolic.svg lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-play-queue-symbolic.svg --- lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-play-queue-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-play-queue-symbolic.svg 2021-02-25 23:00:18.000000000 +0000 @@ -0,0 +1,3 @@ + + + diff -Nru lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-sidebar-symbolic.svg lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-sidebar-symbolic.svg --- lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-sidebar-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-sidebar-symbolic.svg 2021-02-25 23:00:18.000000000 +0000 @@ -0,0 +1,6 @@ + + + + + + diff -Nru lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-spotify-symbolic.svg lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-spotify-symbolic.svg --- lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-spotify-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-spotify-symbolic.svg 2021-02-25 23:00:18.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-suggestions-symbolic.svg lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-suggestions-symbolic.svg --- lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-suggestions-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-suggestions-symbolic.svg 2021-02-25 23:00:18.000000000 +0000 @@ -0,0 +1,6 @@ + + + + + + diff -Nru lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-tag-list-symbolic.svg lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-tag-list-symbolic.svg --- lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-tag-list-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-tag-list-symbolic.svg 2021-02-25 23:00:18.000000000 +0000 @@ -0,0 +1,3 @@ + + + diff -Nru lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-tag-symbolic.svg lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-tag-symbolic.svg --- lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-tag-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-tag-symbolic.svg 2021-02-25 23:00:18.000000000 +0000 @@ -0,0 +1,35 @@ + + + Gnome Symbolic Icon Theme + + + + + image/svg+xml + + Gnome Symbolic Icon Theme + + + + + tag-symbolic + + diff -Nru lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-unplayed-albums-symbolic.svg lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-unplayed-albums-symbolic.svg --- lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-unplayed-albums-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/actions/org.gnome.Lollypop-unplayed-albums-symbolic.svg 2021-02-25 23:00:18.000000000 +0000 @@ -0,0 +1,3 @@ + + + diff -Nru lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-artists-list-symbolic.svg lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-artists-list-symbolic.svg --- lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-artists-list-symbolic.svg 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-artists-list-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ - - - diff -Nru lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-equalizer-symbolic.svg lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-equalizer-symbolic.svg --- lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-equalizer-symbolic.svg 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-equalizer-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,132 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-gradio-symbolic.svg lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-gradio-symbolic.svg --- lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-gradio-symbolic.svg 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-gradio-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff -Nru lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-play-queue-symbolic.svg lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-play-queue-symbolic.svg --- lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-play-queue-symbolic.svg 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-play-queue-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ - - - diff -Nru lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-sidebar-symbolic.svg lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-sidebar-symbolic.svg --- lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-sidebar-symbolic.svg 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-sidebar-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ - - - - - - diff -Nru lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-spotify-symbolic.svg lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-spotify-symbolic.svg --- lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-spotify-symbolic.svg 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-spotify-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-suggestions-symbolic.svg lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-suggestions-symbolic.svg --- lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-suggestions-symbolic.svg 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-suggestions-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ - - - - - - diff -Nru lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-tag-list-symbolic.svg lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-tag-list-symbolic.svg --- lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-tag-list-symbolic.svg 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-tag-list-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ - - - diff -Nru lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-tag-symbolic.svg lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-tag-symbolic.svg --- lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-tag-symbolic.svg 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-tag-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,35 +0,0 @@ - - - Gnome Symbolic Icon Theme - - - - - image/svg+xml - - Gnome Symbolic Icon Theme - - - - - tag-symbolic - - diff -Nru lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-unplayed-albums-symbolic.svg lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-unplayed-albums-symbolic.svg --- lollypop-1.4.7.r90.g765cf1b3/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-unplayed-albums-symbolic.svg 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/data/icons/hicolor/scalable/apps/org.gnome.Lollypop-unplayed-albums-symbolic.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ - - - diff -Nru lollypop-1.4.7.r90.g765cf1b3/data/lollypop.gresource.xml lollypop-1.4.16.r6.ga09712088/data/lollypop.gresource.xml --- lollypop-1.4.7.r90.g765cf1b3/data/lollypop.gresource.xml 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/data/lollypop.gresource.xml 2021-02-25 23:00:18.000000000 +0000 @@ -21,7 +21,6 @@ SmartPlaylistWidget.ui ToolbarEnd.ui TuneinPopover.ui - TypeAhead.ui AboutDialog.ui diff -Nru lollypop-1.4.7.r90.g765cf1b3/data/org.gnome.Lollypop.appdata.xml.in lollypop-1.4.16.r6.ga09712088/data/org.gnome.Lollypop.appdata.xml.in --- lollypop-1.4.7.r90.g765cf1b3/data/org.gnome.Lollypop.appdata.xml.in 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/data/org.gnome.Lollypop.appdata.xml.in 2021-02-25 23:00:18.000000000 +0000 @@ -17,7 +17,7 @@ - + diff -Nru lollypop-1.4.7.r90.g765cf1b3/data/org.gnome.Lollypop.gschema.xml lollypop-1.4.16.r6.ga09712088/data/org.gnome.Lollypop.gschema.xml --- lollypop-1.4.7.r90.g765cf1b3/data/org.gnome.Lollypop.gschema.xml 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/data/org.gnome.Lollypop.gschema.xml 2021-02-25 23:00:18.000000000 +0000 @@ -365,17 +365,17 @@ - 'album' + 'none' ReplayGain state - 3.0 + 0 ReplayGain value in dB Between -15 and 15 - true + false Applies signal compression/limiting to raw audio data It performs strict hard limiting with soft-knee characteristics, using a threshold of -6 dB diff -Nru lollypop-1.4.7.r90.g765cf1b3/data/TypeAhead.ui lollypop-1.4.16.r6.ga09712088/data/TypeAhead.ui --- lollypop-1.4.7.r90.g765cf1b3/data/TypeAhead.ui 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/data/TypeAhead.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,102 +0,0 @@ - - - - - - True - False - go-up-symbolic - - - True - False - go-down-symbolic - - - True - False - window-close-symbolic - - - True - False - 5 - 5 - 5 - 5 - - - True - False - center - center - True - - - True - True - edit-find-symbolic - False - False - - - - - - - 0 - 0 - - - - - True - True - True - image1 - - - 1 - 0 - - - - - True - True - True - image2 - - - 2 - 0 - - - - - - False - True - 0 - - - - - True - True - True - end - center - image3 - - - - False - True - 1 - - - - diff -Nru lollypop-1.4.7.r90.g765cf1b3/debian/changelog lollypop-1.4.16.r6.ga09712088/debian/changelog --- lollypop-1.4.7.r90.g765cf1b3/debian/changelog 2020-12-28 23:00:17.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/debian/changelog 2021-02-25 23:00:24.000000000 +0000 @@ -1,5 +1,5 @@ -lollypop (1.4.7.r90.g765cf1b3-1~focal) focal; urgency=medium +lollypop (1.4.16.r6.ga09712088-1~focal) focal; urgency=medium - * 1.4.7.r90.g765cf1b3-1 + * 1.4.16.r6.ga09712088-1 - -- Tue, 29 Dec 2020 00:00:17 +0100 + -- Fri, 26 Feb 2021 00:00:24 +0100 diff -Nru lollypop-1.4.7.r90.g765cf1b3/.gitignore lollypop-1.4.16.r6.ga09712088/.gitignore --- lollypop-1.4.7.r90.g765cf1b3/.gitignore 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/.gitignore 2021-02-25 23:00:18.000000000 +0000 @@ -7,6 +7,7 @@ /*.rej /*.tab.c /*~ +/.buildconfig /.*.sw[nop] /.deps /.dirstamp @@ -83,5 +84,6 @@ /flatpak/*.flatpak /flatpak/.flatpak-builder /_build +/local /builddir .vscode/ diff -Nru lollypop-1.4.7.r90.g765cf1b3/.gitlab-ci.yml lollypop-1.4.16.r6.ga09712088/.gitlab-ci.yml --- lollypop-1.4.7.r90.g765cf1b3/.gitlab-ci.yml 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/.gitlab-ci.yml 2021-02-25 23:00:18.000000000 +0000 @@ -5,9 +5,10 @@ GIT_SUBMODULE_STRATEGY: recursive flatpak: + image: 'registry.gitlab.gnome.org/gnome/gnome-runtime-images/gnome:3.38' variables: MANIFEST_PATH: "org.gnome.Lollypop.json" FLATPAK_MODULE: "lollypop" - RUNTIME_REPO: "https://nightly.gnome.org/gnome-nightly.flatpakrepo" + RUNTIME_REPO: "https://flathub.org/repo/flathub.flatpakrepo" APP_ID: "org.gnome.Lollypop" extends: .flatpak diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/application_actions.py lollypop-1.4.16.r6.ga09712088/lollypop/application_actions.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/application_actions.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/application_actions.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/application_cmdline.py lollypop-1.4.16.r6.ga09712088/lollypop/application_cmdline.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/application_cmdline.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/application_cmdline.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -106,12 +106,15 @@ @param app as Gio.Application @param options as GLib.VariantDict """ - if options.contains("version"): - print(self.__version) - exit(0) - self.register(None) - if self.get_is_remote(): - Gdk.notify_startup_complete() + try: + if options.contains("version"): + print(self.__version) + exit(0) + self.register(None) + if self.get_is_remote(): + Gdk.notify_startup_complete() + except Exception as e: + Logger.error("Application::__on_handle_local_options(): %s", e) return -1 def __on_command_line(self, app, app_cmd_line): diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/application.py lollypop-1.4.16.r6.ga09712088/lollypop/application.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/application.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/application.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -60,17 +60,19 @@ - Create main window """ - def __init__(self, version, data_dir): + def __init__(self, version, data_dir, app_id): """ Create application @param version as str @param data_dir as str + @param app_id as str """ Gtk.Application.__init__( self, - application_id="org.gnome.Lollypop", + application_id=app_id, flags=Gio.ApplicationFlags.HANDLES_COMMAND_LINE) ApplicationCmdline.__init__(self, version) + self.__app_id = app_id self.__data_dir = data_dir self.set_property("register-session", True) signal(SIGINT, lambda a, b: self.quit()) @@ -83,16 +85,11 @@ GLib.setenv("PULSE_PROP_media.role", "music", True) GLib.setenv("PULSE_PROP_application.icon_name", "org.gnome.Lollypop", True) - # Ideally, we will be able to delete this once Flatpak has a solution - # for SSL certificate management inside of applications. + # Flatpak hacks if GLib.file_test("/app", GLib.FileTest.EXISTS): - paths = ["/etc/ssl/certs/ca-certificates.crt", - "/etc/pki/tls/cert.pem", - "/etc/ssl/cert.pem"] - for path in paths: - if GLib.file_test(path, GLib.FileTest.EXISTS): - GLib.setenv("SSL_CERT_FILE", path, True) - break + # Set /tmp for GLib, /tmp not accessible in flatpak + tmp = GLib.environ_getenv(GLib.get_environ(), "XDG_RUNTIME_DIR") + GLib.setenv("TMPDIR", "%s/app/org.gnome.Lollypop" % tmp, True) self.cursors = {} self.shown_sidebar_tooltip = False self.__window = None @@ -134,6 +131,15 @@ styleContext = Gtk.StyleContext() styleContext.add_provider_for_screen(screen, cssProvider, Gtk.STYLE_PROVIDER_PRIORITY_USER) + # Devel version, load devel theme + if self.__app_id is None: + css = "*:selected{ background-color: red; }" + cssProvider = Gtk.CssProvider() + cssProvider.load_from_data(css.encode("utf-8")) + screen = Gdk.Screen.get_default() + styleContext = Gtk.StyleContext() + styleContext.add_provider_for_screen( + screen, cssProvider, Gtk.STYLE_PROVIDER_PRIORITY_USER + 1) self.db = Database() self.cache = CacheDatabase() self.playlists = Playlists() diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/app_notification.py lollypop-1.4.16.r6.ga09712088/lollypop/app_notification.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/app_notification.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/app_notification.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -18,12 +18,13 @@ Show a notification to user with a button connected to an action """ - def __init__(self, message, button_labels, actions): + def __init__(self, message, button_labels, actions, timeout=None): """ Init notification @param message as str @param button_label as [str] @param action as [callback] + @param timeout as int """ Gtk.Revealer.__init__(self) widget = Gtk.Grid() @@ -48,6 +49,8 @@ self.add(widget) self.set_property("halign", Gtk.Align.CENTER) self.set_property("valign", Gtk.Align.START) + if timeout is not None: + GLib.timeout_add(timeout, self.destroy) ####################### # PRIVATE # diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/artwork_album.py lollypop-1.4.16.r6.ga09712088/lollypop/artwork_album.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/artwork_album.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/artwork_album.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -397,7 +397,7 @@ art_uri = "%s/%s" % (album.uri, self.__favorite) art_uri = self.add_extension(art_uri) # Save cover to tags - if save_to_tags: + if save_to_tags and data is not None: helper = TaskHelper() helper.run(self.__add_to_tags, album, data) # We need to remove favorite if exists diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/artwork_artist.py lollypop-1.4.16.r6.ga09712088/lollypop/artwork_artist.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/artwork_artist.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/artwork_artist.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/artwork_downloader_album.py lollypop-1.4.16.r6.ga09712088/lollypop/artwork_downloader_album.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/artwork_downloader_album.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/artwork_downloader_album.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/artwork_downloader_artist.py lollypop-1.4.16.r6.ga09712088/lollypop/artwork_downloader_artist.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/artwork_downloader_artist.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/artwork_downloader_artist.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/artwork_downloader.py lollypop-1.4.16.r6.ga09712088/lollypop/artwork_downloader.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/artwork_downloader.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/artwork_downloader.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/artwork_manager.py lollypop-1.4.16.r6.ga09712088/lollypop/artwork_manager.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/artwork_manager.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/artwork_manager.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/artwork.py lollypop-1.4.16.r6.ga09712088/lollypop/artwork.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/artwork.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/artwork.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -34,18 +34,19 @@ ArtworkManager.__init__(self) create_dir(CACHE_PATH) - def add_to_cache(self, name, surface, prefix): + def add_to_cache(self, name, surface, prefix, scale_factor): """ Add artwork to cache @param name as str @param surface as cairo.Surface @param prefix as str + @param scale_factor as int @thread safe """ try: encoded = md5(name.encode("utf-8")).hexdigest() - width = surface.get_width() - height = surface.get_height() + width = surface.get_width() * scale_factor + height = surface.get_height() * scale_factor cache_path = "%s/@%s@%s_%s_%s" % (CACHE_PATH, prefix, encoded, diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/assistant_flatpak.py lollypop-1.4.16.r6.ga09712088/lollypop/assistant_flatpak.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/assistant_flatpak.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/assistant_flatpak.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/assistant_google.py lollypop-1.4.16.r6.ga09712088/lollypop/assistant_google.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/assistant_google.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/assistant_google.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/assistant_lastfm.py lollypop-1.4.16.r6.ga09712088/lollypop/assistant_lastfm.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/assistant_lastfm.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/assistant_lastfm.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/assistant_musicbrainz.py lollypop-1.4.16.r6.ga09712088/lollypop/assistant_musicbrainz.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/assistant_musicbrainz.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/assistant_musicbrainz.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/assistant.py lollypop-1.4.16.r6.ga09712088/lollypop/assistant.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/assistant.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/assistant.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/codecs.py lollypop-1.4.16.r6.ga09712088/lollypop/codecs.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/codecs.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/codecs.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/collection_item.py lollypop-1.4.16.r6.ga09712088/lollypop/collection_item.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/collection_item.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/collection_item.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/collection_scanner.py lollypop-1.4.16.r6.ga09712088/lollypop/collection_scanner.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/collection_scanner.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/collection_scanner.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # Copyright (c) 2019 Jordi Romera # 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 @@ -131,7 +131,8 @@ self.__pending_new_artist_ids.remove(artist_id) item.lp_album_id = get_lollypop_album_id(item.album_name, - item.album_artists) + item.album_artists, + item.year) Logger.debug("CollectionScanner::save_track(): Add album: " "%s, %s" % (item.album_name, item.album_artist_ids)) (item.new_album, item.album_id) = self.add_album( @@ -230,7 +231,8 @@ self.__pending_new_artist_ids.remove(artist_id) # Update lp_album_id lp_album_id = get_lollypop_album_id(item.album_name, - item.album_artists) + item.album_artists, + item.year) if lp_album_id != item.lp_album_id: App().album_art.move(item.lp_album_id, lp_album_id) App().albums.set_lp_album_id(item.album_id, lp_album_id) @@ -331,7 +333,7 @@ App().window.container.progress.add(self) App().window.container.progress.set_fraction(0, self) self.__progress_fraction = 0 - notification = AppNotification(_("Resetting database"), [], []) + notification = AppNotification(_("Resetting database"), [], [], 10000) notification.show() App().window.container.add_overlay(notification) notification.set_reveal_child(True) @@ -557,6 +559,8 @@ except Exception as e: Logger.warning("CollectionScanner::__scan(): %s", e) SqlCursor.remove(App().db) + App().settings.set_value("flatpak-access-migration", + GLib.Variant("b", True)) def __scan_to_handle(self, uri): """ @@ -770,8 +774,10 @@ discnumber = self.get_discnumber(tags) discname = self.get_discname(tags) tracknumber = self.get_tracknumber(tags, name) - if track_rate == 0: - track_rate = self.get_popm(tags) + # We have popm in tags, override history one + tag_track_rate = self.get_popm(tags) + if tag_track_rate > 0: + track_rate = tag_track_rate if album_mtime == 0: album_mtime = track_mtime bpm = self.get_bpm(tags) @@ -868,5 +874,3 @@ assistant.set_position(Gtk.WindowPosition.CENTER_ON_PARENT) assistant.set_transient_for(App().window) GLib.timeout_add(1000, assistant.show) - App().settings.set_value("flatpak-access-migration", - GLib.Variant("b", True)) diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/container_filter.py lollypop-1.4.16.r6.ga09712088/lollypop/container_filter.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/container_filter.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/container_filter.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/container_history.py lollypop-1.4.16.r6.ga09712088/lollypop/container_history.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/container_history.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/container_history.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/container_lists.py lollypop-1.4.16.r6.ga09712088/lollypop/container_lists.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/container_lists.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/container_lists.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/container_notification.py lollypop-1.4.16.r6.ga09712088/lollypop/container_notification.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/container_notification.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/container_notification.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/container_playlists.py lollypop-1.4.16.r6.ga09712088/lollypop/container_playlists.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/container_playlists.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/container_playlists.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/container.py lollypop-1.4.16.r6.ga09712088/lollypop/container.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/container.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/container.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -58,6 +58,7 @@ """ self.__widget = Handy.Leaflet() self.__widget.show() + self.__widget.connect("notify::folded", self.__on_folded) self.__sub_widget = Handy.Leaflet() self.__sub_widget.show() self.__focused_view = None @@ -127,6 +128,7 @@ """ if self._stack.history.count > 0: self._stack.go_back() + self.set_focused_view(self._stack.get_visible_child()) elif self.__sub_widget.get_folded() and\ self.__sub_widget.get_visible_child() != self.left_list: self.__sub_widget.set_visible_child(self.left_list) @@ -210,6 +212,13 @@ ############ # PRIVATE # ############ + def __on_folded(self, *ignore): + """ + Reload main view if needed + """ + if not App().window.folded and self.view is None: + self.show_view(self.sidebar.selected_ids) + def __on_search_activate(self, action, variant): """ @param action as Gio.SimpleAction diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/container_scanner.py lollypop-1.4.16.r6.ga09712088/lollypop/container_scanner.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/container_scanner.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/container_scanner.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/container_stack.py lollypop-1.4.16.r6.ga09712088/lollypop/container_stack.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/container_stack.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/container_stack.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/container_views.py lollypop-1.4.16.r6.ga09712088/lollypop/container_views.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/container_views.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/container_views.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/database_albums.py lollypop-1.4.16.r6.ga09712088/lollypop/database_albums.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/database_albums.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/database_albums.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -15,7 +15,7 @@ from random import shuffle from lollypop.sqlcursor import SqlCursor -from lollypop.define import App, Type, OrderBy, StorageType +from lollypop.define import App, Type, OrderBy, StorageType, LovedFlags from lollypop.logger import Logger from lollypop.utils import remove_static, make_subrequest @@ -693,13 +693,16 @@ @return [int] """ with SqlCursor(self.__db) as sql: + filters = (storage_type,) request = "SELECT DISTINCT albums.rowid\ FROM albums\ WHERE rate>=4 AND storage_type & ?" if not skipped: - request += " AND loved != -1 " + request += " AND not loved & ?" + filters += (LovedFlags.SKIPPED,) request += "ORDER BY popularity DESC LIMIT ?" - result = sql.execute(request, (storage_type, limit)) + filters += (limit,) + result = sql.execute(request, filters) return list(itertools.chain(*result)) def get_populars(self, storage_type, skipped, limit): @@ -711,13 +714,15 @@ @return [int] """ with SqlCursor(self.__db) as sql: + filters = (storage_type,) request = "SELECT DISTINCT albums.rowid FROM albums\ WHERE popularity!=0 AND storage_type & ?" if not skipped: - request += " AND loved != -1 " + request += " AND not loved & ?" + filters += (LovedFlags.SKIPPED,) request += "ORDER BY popularity DESC LIMIT ?" - result = sql.execute(request, - (storage_type, limit)) + filters += (limit,) + result = sql.execute(request, filters) return list(itertools.chain(*result)) def get_populars_at_the_moment(self, storage_type, skipped, limit): @@ -729,15 +734,18 @@ @return [int] """ with SqlCursor(self.__db) as sql: + filters = (storage_type,) request = "SELECT DISTINCT albums.rowid\ FROM albums, albums_timed_popularity\ WHERE albums.storage_type & ? AND\ albums.rowid = albums_timed_popularity.album_id" if not skipped: - request += " AND loved != -1 " + request += " AND not loved & ?" + filters += (LovedFlags.SKIPPED,) request += "ORDER BY albums_timed_popularity.popularity DESC\ LIMIT ?" - result = sql.execute(request, (storage_type, limit)) + filters += (limit,) + result = sql.execute(request, filters) album_ids = list(itertools.chain(*result)) if album_ids: return album_ids @@ -752,9 +760,9 @@ with SqlCursor(self.__db) as sql: request = "SELECT albums.rowid\ FROM albums\ - WHERE loved=1 AND\ + WHERE loved & ? AND\ storage_type & ? ORDER BY popularity DESC" - result = sql.execute(request, (storage_type,)) + result = sql.execute(request, (LovedFlags.LOVED, storage_type,)) return list(itertools.chain(*result)) def get_recents(self, storage_type, skipped, limit): @@ -766,12 +774,15 @@ @return [int] """ with SqlCursor(self.__db) as sql: + filters = (storage_type,) request = "SELECT DISTINCT albums.rowid FROM albums\ WHERE albums.storage_type & ?" if not skipped: - request += " AND loved != -1 " + request += " AND not loved & ?" + filters += (LovedFlags.SKIPPED,) request += "ORDER BY mtime DESC LIMIT ?" - result = sql.execute(request, (storage_type, limit)) + filters += (limit,) + result = sql.execute(request, filters) return list(itertools.chain(*result)) def get_randoms_by_albums(self, storage_type, genre_id, skipped, limit): @@ -785,23 +796,27 @@ """ with SqlCursor(self.__db) as sql: if genre_id is not None: - filter = (storage_type, genre_id, limit) + filters = (storage_type, genre_id) request = "SELECT DISTINCT albums.rowid\ FROM albums, album_genres\ WHERE albums.storage_type & ? AND\ album_genres.album_id = albums.rowid AND\ album_genres.genre_id = ?" if not skipped: - request += " AND loved != -1 " + request += " AND not loved & ?" + filters += (LovedFlags.SKIPPED,) request += "ORDER BY random() LIMIT ?" + filters += (limit,) else: - filter = (storage_type, limit) + filters = (storage_type,) request = "SELECT DISTINCT rowid FROM albums\ WHERE storage_type & ?" if not skipped: - request += " AND loved != -1 " + request += " AND not loved & ?" + filters += (LovedFlags.SKIPPED,) request += "ORDER BY random() LIMIT ?" - result = sql.execute(request, filter) + filters += (limit,) + result = sql.execute(request, filters) albums = list(itertools.chain(*result)) return albums @@ -816,7 +831,7 @@ """ with SqlCursor(self.__db) as sql: if genre_id is not None: - filter = (storage_type, genre_id, limit * 2, limit) + filters = (storage_type, genre_id) request = "SELECT rowid, artist_id FROM (\ SELECT albums.rowid, album_artists.artist_id\ FROM albums, album_genres, album_artists\ @@ -825,22 +840,26 @@ album_genres.album_id = albums.rowid AND\ album_genres.genre_id = ?" if not skipped: - request += " AND loved != -1 " + request += " AND not loved & ?" + filters += (LovedFlags.SKIPPED,) + filters += (limit * 2, limit) request += "ORDER BY random() LIMIT ?)\ GROUP BY artist_id ORDER BY random() LIMIT ?" else: - filter = (storage_type, limit * 2, limit) + filters = (storage_type,) request = "SELECT rowid, artist_id FROM (\ SELECT albums.rowid, album_artists.artist_id\ FROM albums, album_artists\ WHERE albums.rowid = album_artists.album_id AND\ albums.storage_type & ?" if not skipped: - request += " AND loved != -1 " + request += " AND not loved & ?" + filters += (LovedFlags.SKIPPED,) + filters += (limit * 2, limit) request += "ORDER BY random() LIMIT ?)\ GROUP BY artist_id ORDER BY random() LIMIT ?" album_ids = [] - for (album_id, artist_id) in sql.execute(request, filter): + for (album_id, artist_id) in sql.execute(request, filters): album_ids.append(album_id) return album_ids @@ -945,14 +964,15 @@ "OR", len(artist_ids)) if not skipped: - request += " AND tracks.loved != -1" + request += " AND not tracks.loved & ?" + filters += (LovedFlags.SKIPPED,) request += " ORDER BY discnumber, tracknumber, tracks.name" result = sql.execute(request, filters) return list(itertools.chain(*result)) def get_tracks_count(self, album_id, genre_ids, artist_ids): """ - Get tracks ids for album + Get tracks count for album @param album_id as int @param genre_ids as [int] @param artist_ids as [int] @@ -1048,15 +1068,17 @@ result = [] # Get albums for all artists if not artist_ids and not genre_ids: + filters = (storage_type,) request = "SELECT DISTINCT albums.rowid\ FROM albums, album_artists, artists\ WHERE albums.rowid = album_artists.album_id AND\ albums.storage_type & ? AND\ artists.rowid = album_artists.artist_id" if not skipped: - request += " AND albums.loved != -1" + request += " AND not albums.loved & ?" + filters += (LovedFlags.SKIPPED,) request += order - result = sql.execute(request, (storage_type,)) + result = sql.execute(request, filters) # Get albums for genres elif not artist_ids: filters = (storage_type,) @@ -1071,7 +1093,8 @@ "OR", len(genre_ids)) if not skipped: - request += " AND albums.loved != -1" + request += " AND not albums.loved & ?" + filters += (LovedFlags.SKIPPED,) request += order result = sql.execute(request, filters) # Get albums for artist @@ -1087,7 +1110,8 @@ "OR", len(artist_ids)) if not skipped: - request += " AND albums.loved != -1" + request += " AND not albums.loved & ?" + filters += (LovedFlags.SKIPPED,) request += order result = sql.execute(request, filters) # Get albums for artist id and genre id @@ -1109,7 +1133,8 @@ "OR", len(genre_ids)) if not skipped: - request += " AND albums.loved != -1" + request += " AND not albums.loved & ?" + filters += (LovedFlags.SKIPPED,) request += order result = sql.execute(request, filters) return list(itertools.chain(*result)) @@ -1135,7 +1160,8 @@ AND album_artists.artist_id=?\ AND album_artists.album_id=albums.rowid" if not skipped: - request += " AND albums.loved != -1" + request += " AND not albums.loved & ?" + filters += (LovedFlags.SKIPPED,) request += order result = sql.execute(request, filters) # Get compilation for genre id @@ -1146,14 +1172,14 @@ FROM albums, album_genres, album_artists\ WHERE album_genres.album_id=albums.rowid\ AND albums.storage_type & ?\ - AND albums.loved != -1\ AND album_artists.album_id=albums.rowid\ AND album_artists.artist_id=? AND" request += make_subrequest("album_genres.genre_id=?", "OR", len(genre_ids)) if not skipped: - request += " AND albums.loved != -1" + request += " AND not albums.loved & ?" + filters += (LovedFlags.SKIPPED,) request += order result = sql.execute(request, filters) return list(itertools.chain(*result)) @@ -1242,13 +1268,16 @@ @return album ids as [int] """ with SqlCursor(self.__db) as sql: + filters = (storage_type,) request = "SELECT album_id FROM tracks, albums\ WHERE albums.storage_type & ? AND albums.rowid=album_id" if not skipped: - request += " AND albums.loved != -1" + request += " AND not albums.loved & ?" + filters += (LovedFlags.SKIPPED,) request += " GROUP BY album_id\ ORDER BY SUM(ltime)/COUNT(ltime), random() LIMIT ?" - result = sql.execute(request, (storage_type, limit)) + filters += (limit,) + result = sql.execute(request, filters) return list(itertools.chain(*result)) def search(self, searched, storage_type): diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/database_artists.py lollypop-1.4.16.r6.ga09712088/lollypop/database_artists.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/database_artists.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/database_artists.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -14,7 +14,7 @@ import itertools from lollypop.sqlcursor import SqlCursor -from lollypop.define import App, Type, StorageType, OrderBy +from lollypop.define import App, Type, StorageType, OrderBy, LovedFlags from lollypop.utils import get_default_storage_type, make_subrequest from lollypop.utils import format_artist_name, remove_static @@ -243,10 +243,11 @@ WHERE album_artists.artist_id=artists.rowid\ AND album_artists.album_id=albums.rowid\ AND albums.storage_type & ?\ - AND albums.loved != -1\ + AND not albums.loved & ?\ ORDER BY random() LIMIT ?\ COLLATE NOCASE COLLATE LOCALIZED" - result = sql.execute(request, (storage_type, limit)) + result = sql.execute( + request, (storage_type, LovedFlags.SKIPPED, limit)) return [(row[0], row[1], row[2]) for row in result] def get_ids(self, genre_ids, storage_type): @@ -379,7 +380,8 @@ "OR", len(genre_ids)) if not skipped: - request += " AND albums.loved != -1" + filters += (LovedFlags.SKIPPED,) + request += " AND not albums.loved & ?" request += order result = sql.execute(request, filters) return list(itertools.chain(*result)) diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/database_cache.py lollypop-1.4.16.r6.ga09712088/lollypop/database_cache.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/database_cache.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/database_cache.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/database_genres.py lollypop-1.4.16.r6.ga09712088/lollypop/database_genres.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/database_genres.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/database_genres.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -13,7 +13,7 @@ import itertools from lollypop.sqlcursor import SqlCursor -from lollypop.define import App, Type, OrderBy +from lollypop.define import App, Type, OrderBy, LovedFlags from lollypop.utils import get_network_available, sql_escape @@ -104,6 +104,7 @@ albums.name\ COLLATE NOCASE COLLATE LOCALIZED" with SqlCursor(self.__db) as sql: + filters = () request = "SELECT albums.rowid\ FROM albums, album_genres, genres,\ album_artists, artists\ @@ -114,9 +115,10 @@ if not get_network_available(): request += " AND albums.synced!=%s" % Type.NONE if ignore: - request += " AND albums.loved != -1" + request += " AND not albums.loved & ?" + filters += (LovedFlags.SKIPPED,) request += order - result = sql.execute(request) + result = sql.execute(request, filters) return list(itertools.chain(*result)) def get(self): diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/database_history.py lollypop-1.4.16.r6.ga09712088/lollypop/database_history.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/database_history.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/database_history.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/database.py lollypop-1.4.16.r6.ga09712088/lollypop/database.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/database.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/database.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/database_tracks.py lollypop-1.4.16.r6.ga09712088/lollypop/database_tracks.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/database_tracks.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/database_tracks.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -15,7 +15,7 @@ import itertools from lollypop.sqlcursor import SqlCursor -from lollypop.define import App, StorageType, Type +from lollypop.define import App, StorageType, Type, LovedFlags from lollypop.utils import noaccents, make_subrequest @@ -107,12 +107,14 @@ @return track ids as [int] """ with SqlCursor(self.__db) as sql: + filters = (storage_type,) request = "SELECT rowid FROM tracks\ WHERE storage_type & ?" if not skipped: - request += " AND loved != -1 " + request += " AND not loved &? " + filters += (LovedFlags.SKIPPED,) request += " ORDER BY album_id" - result = sql.execute(request, (storage_type,)) + result = sql.execute(request, filters) return list(itertools.chain(*result)) def get_ids_for_name(self, name): @@ -602,10 +604,10 @@ @return [int] """ with SqlCursor(self.__db) as sql: - filters = (storage_type,) + filters = (LovedFlags.LOVED, storage_type) request = "SELECT tracks.rowid\ FROM tracks, album_artists, artists\ - WHERE loved=1 AND\ + WHERE loved=? AND\ artists.rowid=album_artists.artist_id AND\ tracks.album_id=album_artists.album_id AND\ storage_type & ?" @@ -615,7 +617,7 @@ request += make_subrequest("album_artists.artist_id=?", "OR", len(artist_ids)) - request += "ORDER BY artists.name" + request += " ORDER BY artists.name" result = sql.execute(request, filters) return list(itertools.chain(*result)) @@ -643,7 +645,8 @@ "OR", len(artist_ids)) if not skipped: - request += " AND loved != -1 " + request += " AND not loved &? " + filters += (LovedFlags.SKIPPED,) filters += (limit,) request += " ORDER BY popularity DESC LIMIT ?" result = sql.execute(request, filters) @@ -664,7 +667,8 @@ "OR", len(artist_ids)) if not skipped: - request += " AND loved != -1 " + request += " AND not loved &? " + filters += (LovedFlags.SKIPPED,) filters += (limit,) request += " ORDER BY popularity DESC LIMIT ?" result = sql.execute(request, filters) @@ -753,12 +757,15 @@ @return tracks as [int] """ with SqlCursor(self.__db) as sql: + filters = (storage_type,) request = "SELECT tracks.rowid FROM tracks\ WHERE ltime!=0 AND storage_type & ?" if not skipped: - request += " AND loved != -1 " + request += " AND not loved &? " + filters += (LovedFlags.SKIPPED,) request += " ORDER BY ltime DESC LIMIT ?" - result = sql.execute(request, (storage_type, limit)) + filters += (limit,) + result = sql.execute(request, filters) return list(itertools.chain(*result)) def get_skipped(self, storage_type): @@ -769,8 +776,8 @@ """ with SqlCursor(self.__db) as sql: request = "SELECT rowid FROM tracks\ - WHERE loved=-1 AND storage_type & ?" - result = sql.execute(request, (storage_type,)) + WHERE loved & ? AND storage_type & ?" + result = sql.execute(request, (LovedFlags.SKIPPED, storage_type)) return list(itertools.chain(*result)) def get_randoms(self, genre_ids, storage_type, skipped, limit): @@ -789,7 +796,8 @@ request += ",track_genres" request += " WHERE storage_type & ? " if not skipped: - request += " AND loved != -1 " + request += " AND not loved &? " + filters += (LovedFlags.SKIPPED,) if genre_ids: request += "AND tracks.rowid=track_genres.track_id" filters += tuple(genre_ids) @@ -841,25 +849,28 @@ return v[0] return 0 - def get_year_for_album(self, album_id, disc_number): + def get_year_for_album(self, album_id, disc_number=None): """ Get album year based on tracks Use most used year by tracks @param album_id as int - @param disc_number as int + @param disc_number as int/None @return int """ with SqlCursor(self.__db) as sql: - result = sql.execute("SELECT year, COUNT(year) AS occurrence\ - FROM tracks\ - WHERE tracks.album_id=? AND\ - tracks.discnumber=?\ - GROUP BY year\ - ORDER BY occurrence DESC\ - LIMIT 1", (album_id, disc_number)) - v = result.fetchone() - if v is not None: - return v[0] + filters = (album_id,) + request = "SELECT year, COUNT(year) AS occurrence FROM tracks\ + WHERE tracks.album_id=?" + if disc_number is not None: + filters += (disc_number,) + request += " AND tracks.discnumber=?" + request += " GROUP BY year\ + ORDER BY occurrence DESC" + result = sql.execute(request, filters) + v = list(result) + # Ignore album with multiple original date + if len(v) == 1: + return v[0][0] return None def get_ltime(self, track_id): @@ -929,18 +940,20 @@ COLLATE NOCASE COLLATE LOCALIZED LIMIT ?" request = "SELECT DISTINCT tracks.album_id,\ discnumber,\ - discname\ + discname,\ + albums.year\ FROM albums, tracks, album_artists, artists\ WHERE albums.rowid=album_artists.album_id AND\ artists.rowid=album_artists.artist_id AND\ tracks.album_id=albums.rowid AND\ tracks.year=? AND albums.storage_type & ?" - filter = (year, storage_type, limit) + filters = (year, storage_type, limit) if not skipped: - request += " AND albums.loved != -1" + request += " AND not albums.loved &? " + filters += (LovedFlags.SKIPPED,) request += " GROUP BY tracks.album_id" request += order - result = sql.execute(request, filter) + result = sql.execute(request, filters) return list(result) def get_compilations_by_disc_for_year(self, year, storage_type, @@ -958,19 +971,21 @@ COLLATE NOCASE COLLATE LOCALIZED LIMIT ?" request = "SELECT DISTINCT tracks.album_id,\ discnumber,\ - discname\ + discname,\ + albums.year\ FROM albums, album_artists, tracks\ WHERE album_artists.artist_id=?\ AND album_artists.album_id=albums.rowid\ AND tracks.album_id=albums.rowid\ AND albums.storage_type & ?\ AND tracks.year=?" - filter = (Type.COMPILATIONS, storage_type, year, limit) + filters = (Type.COMPILATIONS, storage_type, year, limit) if not skipped: - request += " AND albums.loved != -1" + request += " AND not albums.loved &? " + filters += (LovedFlags.SKIPPED,) request += " GROUP BY tracks.album_id" request += order - result = sql.execute(request, filter) + result = sql.execute(request, filters) return list(result) def set_lp_track_id(self, track_id, lp_track_id): diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/database_upgrade.py lollypop-1.4.16.r6.ga09712088/lollypop/database_upgrade.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/database_upgrade.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/database_upgrade.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -173,7 +173,8 @@ 44: self.__upgrade_44, 45: self.__upgrade_45, 46: self.__upgrade_46, - 47: self.__upgrade_47 + 47: self.__upgrade_47, + 48: self.__upgrade_48, } ####################### @@ -824,3 +825,15 @@ """ from lollypop.art import clean_all_cache clean_all_cache() + + def __upgrade_48(self, db): + """ + Convert loved to new flags + """ + with SqlCursor(db, True) as sql: + sql.execute("UPDATE tracks set loved=2 where loved=1") + sql.execute("UPDATE tracks set loved=1 where loved=0") + sql.execute("UPDATE tracks set loved=4 where loved=-1") + sql.execute("UPDATE albums set loved=2 where loved=1") + sql.execute("UPDATE albums set loved=1 where loved=0") + sql.execute("UPDATE albums set loved=4 where loved=-1") diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/define.py lollypop-1.4.16.r6.ga09712088/lollypop/define.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/define.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/define.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -64,6 +64,12 @@ ALL = 4 +class LovedFlags: + NONE = 1 << 0 + LOVED = 1 << 1 + SKIPPED = 1 << 2 + + class GstPlayFlags: GST_PLAY_FLAG_VIDEO = 1 << 0 # We want video output GST_PLAY_FLAG_AUDIO = 1 << 1 # We want audio output @@ -157,7 +163,7 @@ NONE = 1 << 0 PLAY = 1 << 1 LOVED = 1 << 2 - SKIP = 1 << 3 + SKIPPED = 1 << 3 LOADING = 1 << 4 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/dialog_apps.py lollypop-1.4.16.r6.ga09712088/lollypop/dialog_apps.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/dialog_apps.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/dialog_apps.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/dialog_settings.py lollypop-1.4.16.r6.ga09712088/lollypop/dialog_settings.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/dialog_settings.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/dialog_settings.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -95,8 +95,8 @@ passwords_helper.get("LIBREFM", self.__on_get_password, builder.get_object("librefm_button")) builder.connect_signals(self) - self.__multi_press = Gtk.EventControllerKey.new(self.__settings_dialog) - self.__multi_press.connect("key-released", self.__on_key_released) + self.__controller = Gtk.EventControllerKey.new(self.__settings_dialog) + self.__controller.connect("key-released", self.__on_key_released) def show(self): """ @@ -149,6 +149,10 @@ setting = widget.get_name() value = widget.get_active() App().settings.set_enum(setting, value) + if setting == "replay-gain": + for plugin in App().player.plugins: + plugin.build_audiofilter() + App().player.reload_track() def _on_clean_artwork_cache_clicked(self, button): """ diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/fastscroll.py lollypop-1.4.16.r6.ga09712088/lollypop/fastscroll.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/fastscroll.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/fastscroll.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/fullscreen.py lollypop-1.4.16.r6.ga09712088/lollypop/fullscreen.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/fullscreen.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/fullscreen.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -53,18 +53,8 @@ self.__signal1_id = self.__signal2_id = None self.__background_id = None self.set_decorated(False) - # Calculate cover size - screen = Gdk.Screen.get_default() - monitor = screen.get_monitor_at_window(App().main_window.get_window()) - geometry = screen.get_monitor_geometry(monitor) - art_size_fs = ArtSize.FULLSCREEN / self.get_scale_factor() - font_size_fs = 30 / self.get_scale_factor() - if geometry.width > geometry.height: - art_size = int(art_size_fs * geometry.height / 1080) - font_size = int(font_size_fs * geometry.height / 1080) - else: - art_size = int(art_size_fs * geometry.width / 1920) - font_size = int(font_size_fs * geometry.width / 1920) + art_size = ArtSize.FULLSCREEN + font_size = 30 builder = Gtk.Builder() builder.add_from_resource("/org/gnome/Lollypop/FullScreen.ui") builder.connect_signals(self) diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_adaptive.py lollypop-1.4.16.r6.ga09712088/lollypop/helper_adaptive.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_adaptive.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/helper_adaptive.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_art.py lollypop-1.4.16.r6.ga09712088/lollypop/helper_art.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_art.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/helper_art.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_dnd.py lollypop-1.4.16.r6.ga09712088/lollypop/helper_dnd.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_dnd.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/helper_dnd.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -13,6 +13,7 @@ from gi.repository import Gdk, Gtk, GLib, GObject from lollypop.objects_album import Album +from lollypop.define import App from lollypop.utils import set_cursor_type from lollypop.widgets_row_album import AlbumRow from lollypop.widgets_row_track import TrackRow @@ -83,6 +84,11 @@ self.__listbox.remove(next) else: children.pop(0) + for album_row in self.__listbox.get_children(): + if album_row.album.id == App().player.current_track.album.id: + for track_row in album_row.children: + if track_row.track.id == App().player.current_track.id: + App().player._current_track = track_row.track GLib.timeout_add(100, self.emit, "dnd-finished") def __do_drag_and_drop(self, src_rows, dest_row, direction): diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_filtering.py lollypop-1.4.16.r6.ga09712088/lollypop/helper_filtering.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_filtering.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/helper_filtering.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_gestures.py lollypop-1.4.16.r6.ga09712088/lollypop/helper_gestures.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_gestures.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/helper_gestures.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_horizontal_scrolling.py lollypop-1.4.16.r6.ga09712088/lollypop/helper_horizontal_scrolling.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_horizontal_scrolling.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/helper_horizontal_scrolling.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_lyrics.py lollypop-1.4.16.r6.ga09712088/lollypop/helper_lyrics.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_lyrics.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/helper_lyrics.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_passwords.py lollypop-1.4.16.r6.ga09712088/lollypop/helper_passwords.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_passwords.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/helper_passwords.py 2021-02-25 23:00:18.000000000 +0000 @@ -26,9 +26,9 @@ """ Init helper """ - self.__secret = None - Secret.Service.get(Secret.ServiceFlags.LOAD_COLLECTIONS, None, - self.__on_get_secret) + # Initial password lookup, prevent a lock issue in Flatpak backend + if GLib.file_test("/app", GLib.FileTest.EXISTS): + self.get_token("LASTFM") def get_token(self, service): """ @@ -36,7 +36,6 @@ @param service as str """ try: - secret = Secret.Service.get_sync(Secret.ServiceFlags.NONE) SecretSchema = { "service": Secret.SchemaAttributeType.STRING } @@ -46,15 +45,9 @@ schema = Secret.Schema.new("org.gnome.Lollypop", Secret.SchemaFlags.NONE, SecretSchema) - items = secret.search_sync(schema, SecretAttributes, - Secret.SearchFlags.UNLOCK | - Secret.SearchFlags.LOAD_SECRETS, - None) - if items: - items[0].load_secret_sync(None) - value = items[0].get_secret() - if value is not None: - return value.get_text() + password = Secret.password_lookup_sync(schema, SecretAttributes, + None) + return password except Exception as e: Logger.error("PasswordsHelper::get_token(): %s" % e) return None @@ -67,7 +60,6 @@ @param args """ try: - self.__wait_for_secret(self.get, service, callback, *args) SecretSchema = { "service": Secret.SchemaAttributeType.STRING } @@ -77,14 +69,15 @@ schema = Secret.Schema.new("org.gnome.Lollypop", Secret.SchemaFlags.NONE, SecretSchema) - self.__secret.search(schema, SecretAttributes, - Secret.SearchFlags.UNLOCK | - Secret.SearchFlags.LOAD_SECRETS, - None, - self.__on_secret_search, - service, - callback, - *args) + Secret.password_search(schema, + SecretAttributes, + Secret.SearchFlags.UNLOCK | + Secret.SearchFlags.LOAD_SECRETS, + None, + self.__on_secret_search, + service, + callback, + *args) except Exception as e: Logger.warning("PasswordsHelper::get(): %s" % e) @@ -97,12 +90,6 @@ @param callback as function """ try: - self.__wait_for_secret(self.store, - service, - login, - password, - callback, - *args) schema_string = "org.gnome.Lollypop: %s@%s" % (service, login) SecretSchema = { "service": Secret.SchemaAttributeType.STRING, @@ -132,7 +119,6 @@ @param callback as function """ try: - self.__wait_for_secret(self.clear, service, callback, *args) SecretSchema = { "service": Secret.SchemaAttributeType.STRING } @@ -142,45 +128,28 @@ schema = Secret.Schema.new("org.gnome.Lollypop", Secret.SchemaFlags.NONE, SecretSchema) - self.__secret.search(schema, - SecretAttributes, - Secret.SearchFlags.UNLOCK | - Secret.SearchFlags.LOAD_SECRETS, - None, - self.__on_clear_search, - callback, - *args) + Secret.password_clear(schema, + SecretAttributes, + None, + self.__on_clear_search, + callback, + *args) except Exception as e: Logger.warning("PasswordsHelper::clear(): %s" % e) ####################### # PRIVATE # ####################### - def __wait_for_secret(self, call, *args): - """ - Wait for secret - @param call as function to call - @param args - @raise exception if waiting - """ - # Wait for secret - if self.__secret is None: - GLib.timeout_add(250, call, *args) - raise Exception("Waiting Secret service") - elif self.__secret == -1: - raise Exception("Error waiting for Secret service") - def __on_clear_search(self, source, result, callback=None, *args): """ Clear passwords @param source as GObject.Object @param result as Gio.AsyncResult + @param callback as function """ try: if result is not None: - items = source.search_finish(result) - for item in items: - item.delete(None, None) + Secret.password_clear_finish(result) if callback is not None: callback(*args) except Exception as e: @@ -197,10 +166,10 @@ """ try: if result is not None: - items = source.search_finish(result) + items = Secret.password_search_finish(result) for item in items: attributes = item.get_attributes() - secret = item.get_secret() + secret = item.retrieve_secret_sync() callback(attributes, secret.get().decode('utf-8'), service, @@ -212,15 +181,3 @@ except Exception as e: Logger.error("PasswordsHelper::__on_secret_search(): %s" % e) callback(None, None, service, *args) - - def __on_get_secret(self, source, result): - """ - Store secret proxy - @param source as GObject.Object - @param result as Gio.AsyncResult - """ - try: - self.__secret = source.get_finish(result) - except Exception as e: - self.__secret = -1 - Logger.error("PasswordsHelper::__on_get_secret(): %s" % e) diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_signals.py lollypop-1.4.16.r6.ga09712088/lollypop/helper_signals.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_signals.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/helper_signals.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_size_allocation.py lollypop-1.4.16.r6.ga09712088/lollypop/helper_size_allocation.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_size_allocation.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/helper_size_allocation.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_task.py lollypop-1.4.16.r6.ga09712088/lollypop/helper_task.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_task.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/helper_task.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_web_base.py lollypop-1.4.16.r6.ga09712088/lollypop/helper_web_base.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_web_base.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/helper_web_base.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_web_invidious.py lollypop-1.4.16.r6.ga09712088/lollypop/helper_web_invidious.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_web_invidious.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/helper_web_invidious.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_web.py lollypop-1.4.16.r6.ga09712088/lollypop/helper_web.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_web.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/helper_web.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_web_wikipedia.py lollypop-1.4.16.r6.ga09712088/lollypop/helper_web_wikipedia.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_web_wikipedia.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/helper_web_wikipedia.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_web_youtube.py lollypop-1.4.16.r6.ga09712088/lollypop/helper_web_youtube.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/helper_web_youtube.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/helper_web_youtube.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/information_downloader.py lollypop-1.4.16.r6.ga09712088/lollypop/information_downloader.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/information_downloader.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/information_downloader.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/information_store.py lollypop-1.4.16.r6.ga09712088/lollypop/information_store.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/information_store.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/information_store.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/inotify.py lollypop-1.4.16.r6.ga09712088/lollypop/inotify.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/inotify.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/inotify.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/list.py lollypop-1.4.16.r6.ga09712088/lollypop/list.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/list.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/list.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/localized.py lollypop-1.4.16.r6.ga09712088/lollypop/localized.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/localized.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/localized.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_actions.py lollypop-1.4.16.r6.ga09712088/lollypop/menu_actions.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_actions.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/menu_actions.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -38,7 +38,8 @@ else: self.__object = Track(object.id) self.__set_save_action() - if self.__object.storage_type & StorageType.COLLECTION: + if self.__object.storage_type & StorageType.COLLECTION and\ + not GLib.file_test("/app", GLib.FileTest.EXISTS): self.__set_open_action() ####################### diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_application.py lollypop-1.4.16.r6.ga09712088/lollypop/menu_application.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_application.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/menu_application.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_artist.py lollypop-1.4.16.r6.ga09712088/lollypop/menu_artist.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_artist.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/menu_artist.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_artwork.py lollypop-1.4.16.r6.ga09712088/lollypop/menu_artwork.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_artwork.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/menu_artwork.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # Copyright (c) 2020 CodedOre # 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 @@ -54,7 +54,7 @@ emit_signal(self, "hidden", True) @property - def section_name(self): + def section(self): return None @property diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_current_albums.py lollypop-1.4.16.r6.ga09712088/lollypop/menu_current_albums.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_current_albums.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/menu_current_albums.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_decade.py lollypop-1.4.16.r6.ga09712088/lollypop/menu_decade.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_decade.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/menu_decade.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_genre.py lollypop-1.4.16.r6.ga09712088/lollypop/menu_genre.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_genre.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/menu_genre.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_header.py lollypop-1.4.16.r6.ga09712088/lollypop/menu_header.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_header.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/menu_header.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_objects.py lollypop-1.4.16.r6.ga09712088/lollypop/menu_objects.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_objects.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/menu_objects.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_playback.py lollypop-1.4.16.r6.ga09712088/lollypop/menu_playback.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_playback.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/menu_playback.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -14,7 +14,7 @@ from gettext import gettext as _ -from lollypop.define import App, ViewType, Type +from lollypop.define import App, ViewType, Type, LovedFlags from lollypop.utils_album import tracks_to_albums from lollypop.utils import get_default_storage_type, emit_signal from lollypop.utils import get_network_available @@ -283,6 +283,7 @@ menu_item.set_attribute_value("close", GLib.Variant("b", True)) self.append_item(menu_item) self._set_playback_actions() + self.__set_skipped_action() if get_network_available("SPOTIFY") or\ get_network_available("LASTFM") or\ get_network_available("DEEZER"): @@ -325,6 +326,42 @@ ####################### # PRIVATE # ####################### + def __set_skipped_action(self): + """ + Set skipped action + """ + album_ids = App().albums.get_ids([], [self.__artist_id], + self.__storage_type, False) + skipped = True + for album_id in album_ids: + album = Album(album_id) + if not album.loved & LovedFlags.SKIPPED: + skipped = False + break + action = Gio.SimpleAction.new_stateful( + "skip-artist", + None, + GLib.Variant.new_boolean(skipped)) + App().add_action(action) + action.connect("change-state", self.__on_loved_change_state) + self.append(_("Ignored"), "app.skip-artist") + + def __on_loved_change_state(self, action, state): + """ + Update Skipped state + @param action as Gio.SimpleAction + @param state as bool + """ + action.set_state(state) + album_ids = App().albums.get_ids([], [self.__artist_id], + self.__storage_type, False) + for album_id in album_ids: + album = Album(album_id) + if state: + album.set_loved(album.loved | LovedFlags.SKIPPED) + else: + album.set_loved(album.loved & ~LovedFlags.SKIPPED) + def __on_play_action_activate(self, action, variant): """ Play albums @@ -519,6 +556,14 @@ menu_item.set_attribute_value("close", GLib.Variant("b", True)) self.append_item(menu_item) self._set_playback_actions() + action = Gio.SimpleAction.new_stateful( + "skip-album", + None, + GLib.Variant.new_boolean( + self.__album.loved & LovedFlags.SKIPPED)) + App().add_action(action) + action.connect("change-state", self.__on_loved_change_state) + self.append(_("Ignored"), "app.skip-album") if get_network_available("SPOTIFY") or\ get_network_available("LASTFM") or\ get_network_available("DEEZER"): @@ -559,11 +604,23 @@ ####################### # PRIVATE # ####################### + def __on_loved_change_state(self, action, state): + """ + Update Skipped state + @param action as Gio.SimpleAction + @param state as bool + """ + action.set_state(state) + if state: + self.__album.set_loved(self.__album.loved | LovedFlags.SKIPPED) + else: + self.__album.set_loved(self.__album.loved & ~LovedFlags.SKIPPED) + def __on_play_action_activate(self, action, variant): """ Play album - @param Gio.SimpleAction - @param GLib.Variant + @param action as Gio.SimpleAction + @param variant as GLib.Variant """ App().player.play_album(self.__album.clone(True)) @@ -585,6 +642,14 @@ self._set_playback_actions() self.__set_queue_actions() self.__set_stop_after_action() + action = Gio.SimpleAction.new_stateful( + "skip-track", + None, + GLib.Variant.new_boolean( + self.__track.loved & LovedFlags.SKIPPED)) + App().add_action(action) + action.connect("change-state", self.__on_loved_change_state) + self.append(_("Ignored"), "app.skip-track") @property def in_player(self): @@ -693,3 +758,15 @@ """ App().player.remove_from_queue(self.__track.id, False) emit_signal(App().player, "queue-changed") + + def __on_loved_change_state(self, action, state): + """ + Update Skipped state + @param action as Gio.SimpleAction + @param state as bool + """ + action.set_state(state) + if state: + self.__track.set_loved(self.__track.loved | LovedFlags.SKIPPED) + else: + self.__track.set_loved(self.__track.loved & ~LovedFlags.SKIPPED) diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_playlist.py lollypop-1.4.16.r6.ga09712088/lollypop/menu_playlist.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_playlist.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/menu_playlist.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_playlists.py lollypop-1.4.16.r6.ga09712088/lollypop/menu_playlists.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_playlists.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/menu_playlists.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_search.py lollypop-1.4.16.r6.ga09712088/lollypop/menu_search.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_search.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/menu_search.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_selectionlist.py lollypop-1.4.16.r6.ga09712088/lollypop/menu_selectionlist.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_selectionlist.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/menu_selectionlist.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_similars.py lollypop-1.4.16.r6.ga09712088/lollypop/menu_similars.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_similars.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/menu_similars.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_suggestions.py lollypop-1.4.16.r6.ga09712088/lollypop/menu_suggestions.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_suggestions.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/menu_suggestions.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_sync.py lollypop-1.4.16.r6.ga09712088/lollypop/menu_sync.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/menu_sync.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/menu_sync.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/miniplayer.py lollypop-1.4.16.r6.ga09712088/lollypop/miniplayer.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/miniplayer.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/miniplayer.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/mpris.py lollypop-1.4.16.r6.ga09712088/lollypop/mpris.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/mpris.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/mpris.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # Copyright (c) 2016 Gaurav Narula # Copyright (c) 2016 Felipe Borges # Copyright (c) 2013 Arnel A. Borja diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/notification.py lollypop-1.4.16.r6.ga09712088/lollypop/notification.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/notification.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/notification.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/objects_album.py lollypop-1.4.16.r6.ga09712088/lollypop/objects_album.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/objects_album.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/objects_album.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # Copyright (c) 2015 Jean-Philippe Braun # 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 @@ -13,7 +13,7 @@ from hashlib import md5 -from lollypop.define import App, StorageType, ScanUpdate +from lollypop.define import App, StorageType, ScanUpdate, Type from lollypop.objects_track import Track from lollypop.objects import Base from lollypop.utils import emit_signal @@ -140,6 +140,7 @@ self.__name = None self.__skipped = skipped self.__disc_number = None + self.__original_year = Type.NONE self.__tracks_storage_type = self.storage_type # Use artist ids from db else if artist_ids: @@ -176,15 +177,9 @@ Set album disc @param disc_number as int """ + self.__original_year = Type.NONE self.__disc_number = disc_number - def set_year(self, year): - """ - Set album year to value - @param year as int - """ - self._year = year - def set_tracks(self, tracks, clone=True): """ Set album tracks, do not disable clone if you know self is already @@ -355,7 +350,8 @@ @return album """ album = Album(self.id, self.genre_ids, self.artist_ids, skipped) - album.set_tracks(self.tracks) + if skipped: + album.set_tracks(self.tracks) return album def set_storage_type(self, storage_type): @@ -371,6 +367,28 @@ """ self.__skipped = True + def merge_discs(self): + """ + Merge album discs + @return Disc + """ + self.__original_year = None + tracks = self.tracks + disc = Disc(self, 0, self.__tracks_storage_type, self.__skipped) + disc.set_tracks(tracks) + self.__discs = [disc] + + @property + def original_year(self): + """ + Get disc original year + @return int/None + """ + if self.__original_year == Type.NONE: + self.__original_year = App().tracks.get_year_for_album( + self.id, self.__disc_number) + return self.__original_year + @property def collection_item(self): """ @@ -458,16 +476,6 @@ self.__tracks = tracks return tracks - def merge_discs(self): - """ - Merge album discs - @return Disc - """ - tracks = self.tracks - disc = Disc(self, 0, self.__tracks_storage_type, self.__skipped) - disc.set_tracks(tracks) - self.__discs = [disc] - @property def discs(self): """ diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/objects.py lollypop-1.4.16.r6.ga09712088/lollypop/objects.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/objects.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/objects.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # Copyright (c) 2015 Jean-Philippe Braun # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/objects_track.py lollypop-1.4.16.r6.ga09712088/lollypop/objects_track.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/objects_track.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/objects_track.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # Copyright (c) 2015 Jean-Philippe Braun # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/player_albums.py lollypop-1.4.16.r6.ga09712088/lollypop/player_albums.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/player_albums.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/player_albums.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/player_auto_random.py lollypop-1.4.16.r6.ga09712088/lollypop/player_auto_random.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/player_auto_random.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/player_auto_random.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # Copyright (c) 2020 David Mandelberg # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/player_auto_similar.py lollypop-1.4.16.r6.ga09712088/lollypop/player_auto_similar.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/player_auto_similar.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/player_auto_similar.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/player_bin.py lollypop-1.4.16.r6.ga09712088/lollypop/player_bin.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/player_bin.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/player_bin.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/player_linear.py lollypop-1.4.16.r6.ga09712088/lollypop/player_linear.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/player_linear.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/player_linear.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/player_plugins.py lollypop-1.4.16.r6.ga09712088/lollypop/player_plugins.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/player_plugins.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/player_plugins.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # Copyright (C) 2010 Jonathan Matthew (replay gain code) # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/player.py lollypop-1.4.16.r6.ga09712088/lollypop/player.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/player.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/player.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/player_queue.py lollypop-1.4.16.r6.ga09712088/lollypop/player_queue.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/player_queue.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/player_queue.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/player_shuffle.py lollypop-1.4.16.r6.ga09712088/lollypop/player_shuffle.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/player_shuffle.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/player_shuffle.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/player_transitions.py lollypop-1.4.16.r6.ga09712088/lollypop/player_transitions.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/player_transitions.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/player_transitions.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/playlists.py lollypop-1.4.16.r6.ga09712088/lollypop/playlists.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/playlists.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/playlists.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -412,6 +412,7 @@ "sync-internal-ids").get_string() try: data = json.loads(internal_ids) + data.keys() except: data = {} synced_ids = [] @@ -439,6 +440,7 @@ "sync-internal-ids").get_string() try: data = json.loads(internal_ids) + data.keys() except: data = {} synced_ids = [] @@ -494,6 +496,7 @@ "sync-internal-ids").get_string() try: data = json.loads(internal_ids) + data.keys() except: data = {} data[str(playlist_id)] = synced diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/pop_devices.py lollypop-1.4.16.r6.ga09712088/lollypop/pop_devices.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/pop_devices.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/pop_devices.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/pop_information.py lollypop-1.4.16.r6.ga09712088/lollypop/pop_information.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/pop_information.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/pop_information.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/progressbar.py lollypop-1.4.16.r6.ga09712088/lollypop/progressbar.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/progressbar.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/progressbar.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/search_local.py lollypop-1.4.16.r6.ga09712088/lollypop/search_local.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/search_local.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/search_local.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/search.py lollypop-1.4.16.r6.ga09712088/lollypop/search.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/search.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/search.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/selectionlist.py lollypop-1.4.16.r6.ga09712088/lollypop/selectionlist.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/selectionlist.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/selectionlist.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -243,9 +243,6 @@ emit_signal(self, "populated") -# TODO: There is no reason today to share a common class for sidebar and lists -# Code cleanup needed, will simplify things! -# Historical because previously, sidebar was a sidebar + a list class SelectionList(LazyLoadingView, GesturesHelper): """ A list for artists/genres diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/settings.py lollypop-1.4.16.r6.ga09712088/lollypop/settings.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/settings.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/settings.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/shown.py lollypop-1.4.16.r6.ga09712088/lollypop/shown.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/shown.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/shown.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/similars_deezer.py lollypop-1.4.16.r6.ga09712088/lollypop/similars_deezer.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/similars_deezer.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/similars_deezer.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/similars_lastfm.py lollypop-1.4.16.r6.ga09712088/lollypop/similars_lastfm.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/similars_lastfm.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/similars_lastfm.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/similars_local.py lollypop-1.4.16.r6.ga09712088/lollypop/similars_local.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/similars_local.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/similars_local.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/similars.py lollypop-1.4.16.r6.ga09712088/lollypop/similars.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/similars.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/similars.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/similars_spotify.py lollypop-1.4.16.r6.ga09712088/lollypop/similars_spotify.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/similars_spotify.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/similars_spotify.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/sync_mtp.py lollypop-1.4.16.r6.ga09712088/lollypop/sync_mtp.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/sync_mtp.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/sync_mtp.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -91,6 +91,7 @@ stream.get_output_stream().write_all(jsondb.encode("utf-8")) tmpfile.copy(dbfile, Gio.FileCopyFlags.OVERWRITE, None, None) stream.close() + tmpfile.delete(None) except Exception as e: Logger.error("MtpSyncDb::__save(): %s", e) @@ -247,7 +248,7 @@ album_ids = App().albums.get_synced_ids(0) album_ids += App().albums.get_synced_ids(index) for album_id in album_ids: - album = Album(album_id) + album = Album(album_id, skipped=False) tracks += album.tracks # New tracks for playlists playlist_ids = App().playlists.get_synced_ids(0) @@ -294,7 +295,7 @@ emit_signal(self, "sync-progress", self.__done / self.__total + 2) except Exception as e: - Logger.error("MtpSync::__sync(): %s" % e) + Logger.error("MtpSync::sync(): %s" % e) finally: Logger.info("Save sync db") if not self.__cancellable.is_cancelled(): @@ -524,8 +525,8 @@ Logger.debug("MtpSync::__copy_file(): %s -> %s" % (src_uri, dst_uri)) if convertion_needed: - convert_uri = "file:///tmp/lollypop_convert" - convert_file = Gio.File.new_for_uri(convert_uri) + path = "{}/lollypop_convert".format(GLib.get_tmp_dir()) + convert_file = Gio.File.new_for_path(path) pipeline = self.__convert(src, convert_file) # Check if encoding is finished if pipeline is not None: diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/tag_frame_lang.py lollypop-1.4.16.r6.ga09712088/lollypop/tag_frame_lang.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/tag_frame_lang.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/tag_frame_lang.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/tag_frame.py lollypop-1.4.16.r6.ga09712088/lollypop/tag_frame.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/tag_frame.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/tag_frame.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/tag_frame_text.py lollypop-1.4.16.r6.ga09712088/lollypop/tag_frame_text.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/tag_frame_text.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/tag_frame_text.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/tagreader.py lollypop-1.4.16.r6.ga09712088/lollypop/tagreader.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/tagreader.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/tagreader.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -32,12 +32,7 @@ """ Init tag reader """ - self.init_discoverer() - def init_discoverer(self): - """ - Init discover - """ self._discoverer = GstPbutils.Discoverer.new(10 * Gst.SECOND) def get_info(self, uri): @@ -56,6 +51,15 @@ Scanner tag reader """ + __STRING = ["title", "artist", "composer", "conductor", + "musicbrainz-albumid", "musicbrainz-trackid", + "musicbrainz-artistid", "musicbrainz-albumartistid", + "version", "performer", "artist-sortname", + "album-artist-sortname", "interpreted-by", "album-artist", + "album", "genre", "lyrics", "publisher"] + __INT = ["album-disc-number", "track-number"] + __DOUBLE = ["beats-per-minute"] + def __init__(self): """ Init tag reader @@ -71,9 +75,8 @@ """ if tags is None: return GLib.path_get_basename(filepath) - (exists, title) = tags.get_string_index("title", 0) - # We need to check tag is not just spaces - if not exists or not title.strip(" "): + title = self.__get(tags, ["title"]) + if not title: title = GLib.path_get_basename(filepath) return title @@ -85,13 +88,7 @@ """ if tags is None: return _("Unknown") - artists = [] - for i in range(tags.get_tag_size("artist")): - (exists, read) = tags.get_string_index("artist", i) - # We need to check tag is not just spaces - if exists and read.strip(" "): - artists.append(read) - return "; ".join(artists) + return self.__get(tags, ["artist"]) def get_composers(self, tags): """ @@ -101,13 +98,7 @@ """ if tags is None: return _("Unknown") - composers = [] - for i in range(tags.get_tag_size("composer")): - (exists, read) = tags.get_string_index("composer", i) - # We need to check tag is not just spaces - if exists and read.strip(" "): - composers.append(read) - return "; ".join(composers) + return self.__get(tags, ["composer"]) def get_conductors(self, tags): """ @@ -117,13 +108,7 @@ """ if tags is None: return _("Unknown") - conductors = [] - for i in range(tags.get_tag_size("conductor")): - (exists, read) = tags.get_string_index("conductor", i) - # We need to check tag is not just spaces - if exists and read.strip(" "): - conductors.append(read) - return "; ".join(conductors) + return self.__get(tags, ["conductor"]) def get_mb_id(self, tags, name): """ @@ -134,8 +119,7 @@ """ if tags is None or not name: return "" - (exists, mbid) = tags.get_string_index("musicbrainz-" + name, 0) - return mbid or "" + return self.__get(tags, ["musicbrainz-" + name]) def get_mb_album_id(self, tags): """ @@ -177,8 +161,7 @@ """ if tags is None: return "" - (exists, version) = tags.get_string_index("version", 0) - return version or "" + return self.__get(tags, ["version"]) def get_performers(self, tags): """ @@ -188,13 +171,7 @@ """ if tags is None: return _("Unknown") - performers = [] - for i in range(tags.get_tag_size("performer")): - (exists, read) = tags.get_string_index("performer", i) - # We need to check tag is not just spaces - if exists and read.strip(" "): - performers.append(read) - return "; ".join(performers) + return self.__get(tags, ["performer"]) def get_artist_sortnames(self, tags): """ @@ -204,13 +181,7 @@ """ if tags is None: return "" - sortnames = [] - for i in range(tags.get_tag_size("artist-sortname")): - (exists, read) = tags.get_string_index("artist-sortname", i) - # We need to check tag is not just spaces - if exists and read.strip(" "): - sortnames.append(read) - return "; ".join(sortnames) + return self.__get(tags, ["artist-sortname"]) def get_album_artist_sortnames(self, tags): """ @@ -220,13 +191,7 @@ """ if tags is None: return "" - sortnames = [] - for i in range(tags.get_tag_size("album-artist-sortname")): - (exists, read) = tags.get_string_index("album-artist-sortname", i) - # We need to check tag is not just spaces - if exists and read.strip(" "): - sortnames.append(read) - return "; ".join(sortnames) + return self.__get(tags, ["album-artist-sortname"]) def get_remixers(self, tags): """ @@ -236,19 +201,10 @@ """ if tags is None: return _("Unknown") - remixers = [] - for i in range(tags.get_tag_size("interpreted-by")): - (exists, read) = tags.get_string_index("interpreted-by", i) - # We need to check tag is not just spaces - if exists and read.strip(" "): - remixers.append(read) + remixers = self.__get(tags, ["interpreted-by"]) if not remixers: - for i in range(tags.get_tag_size("extended-comment")): - (exists, read) = tags.get_string_index("extended-comment", i) - if exists and read.startswith("REMIXER="): - remixer = read[8:] - remixers.append(remixer) - return "; ".join(remixers) + remixers = self.__get_extended(tags, ["REMIXER"]) + return remixers def get_album_artists(self, tags): """ @@ -258,13 +214,7 @@ """ if tags is None: return _("Unknown") - artists = [] - for i in range(tags.get_tag_size("album-artist")): - (exists, read) = tags.get_string_index("album-artist", i) - # We need to check tag is not just spaces - if exists and read.strip(" "): - artists.append(read) - return "; ".join(artists) + return self.__get(tags, ["album-artist"]) def get_album_name(self, tags): """ @@ -274,11 +224,10 @@ """ if tags is None: return _("Unknown") - (exists, album_name) = tags.get_string_index("album", 0) - # We need to check tag is not just spaces - if not exists or not album_name.strip(" "): - album_name = _("Unknown") - return album_name + album = self.__get(tags, ["album"]) + if not album: + album = _("Unknown") + return album def get_genres(self, tags): """ @@ -288,15 +237,10 @@ """ if tags is None: return _("Unknown") - genres = [] - for i in range(tags.get_tag_size("genre")): - (exists, read) = tags.get_string_index("genre", i) - # We need to check tag is not just spaces - if exists and read.strip(" "): - genres.append(read) + genres = self.__get(tags, ["genre"]) if not genres: - return _("Unknown") - return "; ".join(genres) + genres = _("Unknown") + return genres def get_discname(self, tags): """ @@ -304,18 +248,7 @@ @param tags as Gst.TagList @return disc name as str """ - if tags is None: - return "" - discname = "" - for i in range(tags.get_tag_size("extended-comment")): - (exists, read) = tags.get_string_index("extended-comment", i) - if exists and read.startswith("PART"): - discname = "=".join(read.split("=")[1:]) - break - if exists and read.startswith("DISCSUBTITLE"): - discname = "=".join(read.split("=")[1:]) - break - return discname + return self.__get_extended(tags, ['PART', 'DISCSUBTITLE']) def get_discnumber(self, tags): """ @@ -325,8 +258,8 @@ """ if tags is None: return 0 - (exists, discnumber) = tags.get_uint_index("album-disc-number", 0) - if not exists: + discnumber = self.__get(tags, ["album-disc-number"]) + if not discnumber: discnumber = 0 return discnumber @@ -338,35 +271,14 @@ """ if tags is None: return False - size = tags.get_tag_size("private-id3v2-frame") - for i in range(0, size): - (exists, sample) = tags.get_sample_index( - "private-id3v2-frame", - i) - if not exists: - continue - (exists, m) = sample.get_buffer().map(Gst.MapFlags.READ) - if not exists: - continue - # Gstreamer 1.18 API breakage - try: - bytes = m.data.tobytes() - except: - bytes = m.data - frame = FrameTextTag(bytes) - if frame.key == "TCMP": - string = frame.string - if not string: - Logger.debug(tags.to_string()) - return string and string[-1] == "1" - size = tags.get_tag_size("extended-comment") - for i in range(0, size): - (exists, sample) = tags.get_string_index( - "extended-comment", - i) - if not exists or not sample.startswith("COMPILATION="): - continue - return sample[12] + try: + compilation = self.__get_private_string(tags, "TCMP", False) + if not compilation: + compilation = self.__get_extended(tags, ["COMPILATION"]) + if compilation: + return bool(compilation) + except Exception as e: + Logger.error("TagReader::get_compilation(): %s" % e) return False def get_tracknumber(self, tags, filename): @@ -377,10 +289,10 @@ @return track number as int """ if tags is not None: - (exists, tracknumber) = tags.get_uint_index("track-number", 0) + tracknumber = self.__get(tags, ["track-number"]) else: - (exists, tracknumber) = (False, 0) - if not exists: + tracknumber = None + if not tracknumber: # Guess from filename m = match("^([0-9]*)[ ]*-", filename) if m: @@ -436,45 +348,21 @@ @return year and timestamp (int, int) """ def get_id3(): + date_string = self.__get_private_string(tags, "TDOR", False) try: - size = tags.get_tag_size("private-id3v2-frame") - for i in range(0, size): - (exists, sample) = tags.get_sample_index( - "private-id3v2-frame", - i) - if not exists: - continue - (exists, m) = sample.get_buffer().map(Gst.MapFlags.READ) - if not exists: - continue - # Gstreamer 1.18 API breakage - try: - bytes = m.data.tobytes() - except: - bytes = m.data - frame = FrameTextTag(bytes) - if frame.key == "TDOR": - if not frame.string: - Logger.debug(tags.to_string()) - date = get_iso_date_from_string(frame.string) - datetime = GLib.DateTime.new_from_iso8601(date, None) - return (datetime.get_year(), datetime.to_unix()) + date = get_iso_date_from_string(date_string) + datetime = GLib.DateTime.new_from_iso8601(date, None) + return (datetime.get_year(), datetime.to_unix()) except: pass return (None, None) def get_ogg(): try: - size = tags.get_tag_size("extended-comment") - for i in range(0, size): - (exists, sample) = tags.get_string_index( - "extended-comment", - i) - if not exists or not sample.startswith("ORIGINALDATE="): - continue - date = get_iso_date_from_string(sample[13:]) - datetime = GLib.DateTime.new_from_iso8601(date, None) - return (datetime.get_year(), datetime.to_unix()) + date_string = self.__get_extended(tags, ['ORIGINALDATE']) + date = get_iso_date_from_string(date_string) + datetime = GLib.DateTime.new_from_iso8601(date, None) + return (datetime.get_year(), datetime.to_unix()) except: pass return (None, None) @@ -492,14 +380,10 @@ @param tags as Gst.TagList @return int/None """ - try: - if tags is not None: - (exists, bpm) = tags.get_double_index("beats-per-minute", 0) - if exists: - return bpm - except: - pass - return None + bpm = self.__get(tags, ["beats-per-minute"]) + if not bpm: + bpm = None + return bpm def get_popm(self, tags): """ @@ -524,57 +408,21 @@ bytes = m.data.tobytes() except: bytes = m.data - if bytes[0:4] == b"POPM": - # Get tag - """ - Location of rating for common media players: - - Plain POPM is located in bytes[11] - - Media Monkey is located in bytes[19] and - we are searching bytes[10:40] for "no@email" - - WinAMP is located in bytes[28] and we are searching - bytes[10:40] for "rating@winamp.com" - - Windows Media Player is located in bytes[40] and - we are searching bytes[10:40] for - "Windows Media Player 9 Series" - - MusicBee is located in bytes[19] and - we are searching bytes[10:40] for - "MusicBee" - """ - if bytes.find(b"Windows Media Player 9 Series") >= 0: - location = 40 - Logger.debug( - "Rating type: Windows Media Player Location:" - " %s Rating: %s", location, bytes[location]) - elif bytes.find(b"rating@winamp.com") >= 0: - location = 28 - Logger.debug( - "Rating type: WinAMP Location: %s Rating: %s", - location, bytes[location]) - elif bytes.find(b"no@email") >= 0: - location = 19 - Logger.debug( - "Rating type: MediaMonkey Location: %s Rating: %s", - location, bytes[location]) - elif bytes.find(b"MusicBee") >= 0: - location = 19 - Logger.debug( - "Rating type: MusicBee Location: %s Rating: %s", - location, bytes[location]) - else: - location = 11 - Logger.debug( - "Rating type: none Location: %s Rating: %s", - location, bytes[location]) - popm = bytes[location] + + if len(bytes) > 4 and bytes[0:4] == b"POPM": + try: + popm = bytes.split(b"\x00")[6][0] + except: + popm = 0 if popm == 0: value = 0 - elif popm == 1: + elif popm >= 1 and popm < 64: value = 1 - elif popm == 64: + elif popm >= 64 and popm < 128: value = 2 - elif popm == 128: + elif popm >= 128 and popm < 196: value = 3 - elif popm == 196: + elif popm >= 196 and popm < 255: value = 4 elif popm == 255: value = 5 @@ -591,61 +439,14 @@ @parma tags as Gst.TagList @return lyrics as str """ - def decode_lyrics(bytes): - try: - frame = FrameLangTag(bytes) - if frame.key == "USLT": - return frame.string - except Exception as e: - Logger.warning("TagReader::get_lyrics(): %s", e) - return None - def get_mp4(): - try: - (exists, sample) = tags.get_string_index("lyrics", 0) - if exists: - return sample - except Exception as e: - Logger.error("TagReader::get_mp4(): %s" % e) - return "" + return self.__get(tags, ["lyrics"]) def get_id3(): - try: - size = tags.get_tag_size("private-id3v2-frame") - for i in range(0, size): - (exists, sample) = tags.get_sample_index( - "private-id3v2-frame", - i) - if not exists: - continue - (exists, m) = sample.get_buffer().map(Gst.MapFlags.READ) - if not exists: - continue - # Gstreamer 1.18 API breakage - try: - bytes = m.data.tobytes() - except: - bytes = m.data - string = decode_lyrics(bytes) - if string is not None: - return string - except Exception as e: - Logger.error("TagReader::get_id3(): %s" % e) - return "" + return self.__get_private_string(tags, "USLT", True) def get_ogg(): - try: - size = tags.get_tag_size("extended-comment") - for i in range(0, size): - (exists, sample) = tags.get_string_index( - "extended-comment", - i) - if not exists or not sample.startswith("LYRICS="): - continue - return sample[7:] - except Exception as e: - Logger.error("TagReader::get_ogg(): %s" % e) - return "" + return self.__get_extended(tags, ["LYRICS"]) if tags is None: return "" @@ -671,36 +472,21 @@ lyrics.append((decodeUnicode(l, encoding), int.from_bytes(t[1:4], "big"))) except Exception as e: - Logger.warning("TagReader::get_synced_lyrics1(): %s", e) + Logger.warning( + "TagReader::get_synced_lyrics.decode_lyrics(): %s", e) return lyrics def get_id3(): try: - size = tags.get_tag_size("private-id3v2-frame") - for i in range(0, size): - (exists, sample) = tags.get_sample_index( - "private-id3v2-frame", - i) - if not exists: - continue - (exists, m) = sample.get_buffer().map(Gst.MapFlags.READ) - if not exists: - continue - # Gstreamer 1.18 API breakage - try: - bytes = m.data.tobytes() - except: - bytes = m.data - prefix = (bytes[0:4]) - if prefix not in [b"SYLT"]: - continue - frame = bytes[10:] + b = self.__get_private_bytes(tags, "SYLT") + if b: + frame = b[10:] encoding = frame[0:1] string = decode_lyrics(frame.split(b"\n"), encoding) if string is not None: return string except Exception as e: - Logger.error("TagReader::get_synced_lyrics2(): %s" % e) + Logger.warning("TagReader::get_synced_lyrics.get_id3(): %s", e) return "" if tags is None: @@ -824,3 +610,106 @@ ####################### # PRIVATE # ####################### + def __get_extended(self, tags, keys): + """ + Return tag from tags following keys + @param tags as Gst.TagList + @param keys as [str] + @return Tag as str + """ + if tags is None: + return "" + items = [] + try: + for i in range(tags.get_tag_size("extended-comment")): + (exists, read) = tags.get_string_index("extended-comment", i) + for key in keys: + if exists and read.startswith(key + "="): + items.append("".join(read.split("=")[1:])) + except Exception as e: + Logger.error("TagReader::__get_extended(): %s", e) + return ";".join(items) + + def __get(self, tags, keys): + """ + Return tag from tags following keys + Only handles string/uint/double + @param tags as Gst.TagList + @param keys as [str] + @return Tag as str/int/double. Empty string if does not exist + """ + if tags is None: + return "" + items = [] + try: + for key in keys: + for i in range(tags.get_tag_size(key)): + if key in self.__STRING: + (exists, read) = tags.get_string_index(key, i) + if exists and read.strip(" "): + items.append(read) + elif key in self.__INT: + (exists, read) = tags.get_uint_index(key, i) + if exists: + return read + elif key in self.__DOUBLE: + (exists, read) = tags.get_double_index(key, i) + if exists: + return read + else: + Logger.error("Missing key" % key) + except Exception as e: + Logger.error("TagReader::__get(): %s", e) + return ";".join(items) + + def __get_private_bytes(self, tags, key): + """ + Get key from private frame + @param tags as Gst.TagList + @param key as str + @return frame as bytes + """ + try: + size = tags.get_tag_size("private-id3v2-frame") + encoded_key = key.encode("utf-8") + for i in range(0, size): + (exists, sample) = tags.get_sample_index( + "private-id3v2-frame", + i) + if not exists: + continue + (exists, m) = sample.get_buffer().map(Gst.MapFlags.READ) + if not exists: + continue + # Gstreamer 1.18 API breakage + try: + b = m.data.tobytes() + except: + b = m.data + + if b[0:len(encoded_key)] != encoded_key: + continue + return b + except Exception as e: + Logger.error("TagReader::__get_private_bytes(): %s" % e) + return b"" + + def __get_private_string(self, tags, key, lang): + """ + Get key from private frame + @param tags as Gst.TagList + @param key as str + @param lang as bool + @return Tag as str + """ + try: + b = self.__get_private_bytes(tags, key) + if lang: + frame = FrameLangTag(b) + else: + frame = FrameTextTag(b) + if frame.key == key: + return frame.string + except Exception as e: + Logger.error("TagReader::__get_private(): %s" % e) + return "" diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/toolbar_end.py lollypop-1.4.16.r6.ga09712088/lollypop/toolbar_end.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/toolbar_end.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/toolbar_end.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/toolbar_info.py lollypop-1.4.16.r6.ga09712088/lollypop/toolbar_info.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/toolbar_info.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/toolbar_info.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/toolbar_playback.py lollypop-1.4.16.r6.ga09712088/lollypop/toolbar_playback.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/toolbar_playback.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/toolbar_playback.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/toolbar.py lollypop-1.4.16.r6.ga09712088/lollypop/toolbar.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/toolbar.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/toolbar.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -10,7 +10,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -from gi.repository import Gtk, GLib, Handy +from gi.repository import GLib, Handy from lollypop.define import App, Size from lollypop.toolbar_playback import ToolbarPlayback @@ -33,7 +33,7 @@ Init toolbar @param window as Window """ - Gtk.HeaderBar.__init__(self) + Handy.HeaderBar.__init__(self) SizeAllocationHelper.__init__(self) self.__width = Size.MINI self.__timeout_id = None diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/toolbar_title.py lollypop-1.4.16.r6.ga09712088/lollypop/toolbar_title.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/toolbar_title.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/toolbar_title.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/utils_album.py lollypop-1.4.16.r6.ga09712088/lollypop/utils_album.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/utils_album.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/utils_album.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/utils_artist.py lollypop-1.4.16.r6.ga09712088/lollypop/utils_artist.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/utils_artist.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/utils_artist.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/utils_file.py lollypop-1.4.16.r6.ga09712088/lollypop/utils_file.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/utils_file.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/utils_file.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/utils.py lollypop-1.4.16.r6.ga09712088/lollypop/utils.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/utils.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/utils.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -253,13 +253,18 @@ c.isdigit() or c in ignore]).rstrip() -def get_lollypop_album_id(name, artists): +def get_lollypop_album_id(name, artists, year=None): """ Calculate Lollypop album id @param name as str @param artists as [str] + @param year as int/None """ - name = "%s_%s" % (sql_escape(" ".join(artists)), sql_escape(name)) + if year is None: + name = "%s_%s" % (sql_escape(" ".join(artists)), sql_escape(name)) + else: + name = "%s_%s_%s" % ( + sql_escape(" ".join(artists)), sql_escape(name), year) return md5(name.encode("utf-8")).hexdigest() diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_album.py lollypop-1.4.16.r6.ga09712088/lollypop/view_album.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_album.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_album.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -48,8 +48,6 @@ return [ (App().scanner, "scan-finished", "_on_scan_finished"), (App().scanner, "updated", "_on_collection_updated"), - (App().player, "current-changed", "_on_current_changed"), - (App().player, "duration-changed", "_on_duration_changed"), ] def populate(self): @@ -144,23 +142,6 @@ if scan_update == ScanUpdate.REMOVED: App().window.container.go_back() - def _on_current_changed(self, player): - """ - Update children state - @param player as Player - """ - if self.__tracks_view is not None: - self.__tracks_view.set_playing_indicator() - - def _on_duration_changed(self, player, track_id): - """ - Update track duration - @param player as Player - @param track_id as int - """ - if self.__tracks_view is not None: - self.__tracks_view.update_duration(track_id) - ####################### # PRIVATE # ####################### @@ -186,7 +167,7 @@ self.__grid.add(others_box) self.__others_boxes.append(others_box) else: - self.__tracks_view.populate() + GLib.idle_add(self.__tracks_view.populate) def __on_track_selected(self, view, selected): """ diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_albums_box.py lollypop-1.4.16.r6.ga09712088/lollypop/view_albums_box.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_albums_box.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_albums_box.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -263,11 +263,10 @@ def play_album(status, child): child.artwork.get_style_context().remove_class("load-animation") - child.data.reset_tracks() - App().player.play_album(child.data.clone(True)) + App().player.play_album(child.data.clone(False)) if child.data.storage_type & StorageType.COLLECTION: - App().player.play_album(child.data.clone(True)) + App().player.play_album(child.data.clone(False)) else: child.artwork.get_style_context().add_class("load-animation") cancellable = Gio.Cancellable.new() @@ -371,11 +370,10 @@ def on_load(items): FlowBoxView.populate(self, items) - def get_album(album_id, disc_number, disc_name, year): + def get_album(album_id, disc_number, disc_name, album_year, year): album = Album(album_id, [Type.YEARS], []) - if disc_name != "": + if year != album_year: album.set_disc_number(disc_number) - album.set_year(year) return album def load(): @@ -385,7 +383,7 @@ year, self.storage_type, True) items += App().tracks.get_albums_by_disc_for_year( year, self.storage_type, True) - albums += [get_album(item[0], item[1], item[2], year) + albums += [get_album(item[0], item[1], item[2], item[3], year) for item in items] return albums @@ -424,7 +422,12 @@ @property def args(self): - return None + """ + Get default args for __class__ + @return {} + """ + return {"index": self.__index, + "view_type": self.view_type & ~ViewType.SMALL} ####################### # PROTECTED # diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_albums_line.py lollypop-1.4.16.r6.ga09712088/lollypop/view_albums_line.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_albums_line.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_albums_line.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_albums_list.py lollypop-1.4.16.r6.ga09712088/lollypop/view_albums_list.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_albums_list.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_albums_list.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -55,7 +55,6 @@ self.__dnd_helper.connect("dnd-insert", self.__on_dnd_insert) return [ (App().player, "current-changed", "_on_current_changed"), - (App().player, "duration-changed", "_on_duration_changed"), (App().album_art, "album-artwork-changed", "_on_artwork_changed") ] @@ -185,7 +184,7 @@ @param player as Player """ for child in self._box.get_children(): - child.set_playing_indicator() + child.set_selection() def _on_artwork_changed(self, artwork, album_id): """ @@ -197,15 +196,6 @@ if child.album.id == album_id: child.set_artwork() - def _on_duration_changed(self, player, track_id): - """ - Update track duration - @param player as Player - @param track_id as int - """ - for child in self.children: - child.tracks_view.update_duration(track_id) - def _on_primary_long_press_gesture(self, x, y): """ Show row menu diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_artist_list.py lollypop-1.4.16.r6.ga09712088/lollypop/view_artist_list.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_artist_list.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_artist_list.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -73,7 +73,6 @@ SizeAllocationHelper.__init__(self) return [ (App().player, "current-changed", "_on_current_changed"), - (App().player, "duration-changed", "_on_duration_changed"), ] def populate(self): @@ -180,17 +179,6 @@ for child in self.__boxes[i].get_children(): child.set_selection() - def _on_duration_changed(self, player, track_id): - """ - Update track duration - @param player as Player - @param track_id as int - """ - boxes_count = len(self.__boxes) - for i in range(0, boxes_count): - for child in self.__boxes[i].get_children(): - child.set_duration(track_id) - ####################### # PRIVATE # ####################### diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_artists_line.py lollypop-1.4.16.r6.ga09712088/lollypop/view_artists_line.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_artists_line.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_artists_line.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_artists_rounded.py lollypop-1.4.16.r6.ga09712088/lollypop/view_artists_rounded.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_artists_rounded.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_artists_rounded.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_current_albums.py lollypop-1.4.16.r6.ga09712088/lollypop/view_current_albums.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_current_albums.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_current_albums.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -153,13 +153,13 @@ def _on_playback_removed(self, player, album): """ - Add album + Remove row @param player as Player @param album as Album """ for child in self.children: if child.album == album: - child.destroy() + self._box.remove(child) break if not self.children: self.show_placeholder(True) @@ -194,6 +194,7 @@ if App().player.next_track.id != track.id: App().player.next() row.album.remove_track(track) + App().player.update_next_prev() emit_signal(App().player, "playback-updated", row.album) if not row.children: row.destroy() diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_decades_box.py lollypop-1.4.16.r6.ga09712088/lollypop/view_decades_box.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_decades_box.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_decades_box.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_equalizer.py lollypop-1.4.16.r6.ga09712088/lollypop/view_equalizer.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_equalizer.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_equalizer.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_flowbox.py lollypop-1.4.16.r6.ga09712088/lollypop/view_flowbox.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_flowbox.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_flowbox.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_genres_box.py lollypop-1.4.16.r6.ga09712088/lollypop/view_genres_box.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_genres_box.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_genres_box.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_information.py lollypop-1.4.16.r6.ga09712088/lollypop/view_information.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_information.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_information.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -21,7 +21,6 @@ from lollypop.information_store import InformationStore from lollypop.view_albums_list import AlbumsListView from lollypop.view import View -from lollypop.utils import get_network_available from lollypop.utils import get_default_storage_type from lollypop.widgets_banner_information import InformationBannerWidget from lollypop.helper_signals import SignalsHelper, signals_map @@ -231,18 +230,15 @@ @param status as bool """ if status: - if get_network_available("WIKIPEDIA"): - from lollypop.helper_web_wikipedia import WikipediaHelper - wikipedia = WikipediaHelper() - self.__label.hide() - self.__listbox.show() - self.__stack.set_visible_child(self.__listbox) - App().task_helper.run( - wikipedia.get_search_list, - self.__artist_name, - callback=(self.__on_wikipedia_search_list,)) - else: - self.__banner.button.toggled() + from lollypop.helper_web_wikipedia import WikipediaHelper + wikipedia = WikipediaHelper() + self.__label.hide() + self.__listbox.show() + self.__stack.set_visible_child(self.__listbox) + App().task_helper.run( + wikipedia.get_search_list, + self.__artist_name, + callback=(self.__on_wikipedia_search_list,)) else: self.__show_main_widget() diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_information_stack.py lollypop-1.4.16.r6.ga09712088/lollypop/view_information_stack.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_information_stack.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_information_stack.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_lazyloading.py lollypop-1.4.16.r6.ga09712088/lollypop/view_lazyloading.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_lazyloading.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_lazyloading.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -13,7 +13,6 @@ from gi.repository import GLib, GObject from time import time -import gc from lollypop.define import LoadingState, App from lollypop.logger import Logger @@ -180,7 +179,6 @@ else: GLib.idle_add( App().window.container.type_ahead.entry.grab_focus) - gc.collect() Logger.debug("LazyLoadingView::lazy_loading(): %s", time() - self.__start_time) diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_lyrics.py lollypop-1.4.16.r6.ga09712088/lollypop/view_lyrics.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_lyrics.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_lyrics.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_menu.py lollypop-1.4.16.r6.ga09712088/lollypop/view_menu.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_menu.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_menu.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_playlists_manager.py lollypop-1.4.16.r6.ga09712088/lollypop/view_playlists_manager.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_playlists_manager.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_playlists_manager.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_playlist_smart.py lollypop-1.4.16.r6.ga09712088/lollypop/view_playlist_smart.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_playlist_smart.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_playlist_smart.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_playlists.py lollypop-1.4.16.r6.ga09712088/lollypop/view_playlists.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_playlists.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_playlists.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -168,15 +168,6 @@ albums.append(album_row.album) App().player.play_track_for_albums(track, albums) - def _on_row_destroy(self, row): - """ - Remove album from playback - @param row as AlbumRow - """ - App().playlists.remove_tracks(self.__playlist_id, - row.album.tracks, - True) - def _on_track_removed(self, row, track): """ @param row as AlbumRow diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view.py lollypop-1.4.16.r6.ga09712088/lollypop/view.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_search.py lollypop-1.4.16.r6.ga09712088/lollypop/view_search.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_search.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_search.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_suggestions.py lollypop-1.4.16.r6.ga09712088/lollypop/view_suggestions.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_suggestions.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_suggestions.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_tracks_album.py lollypop-1.4.16.r6.ga09712088/lollypop/view_tracks_album.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_tracks_album.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_tracks_album.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -15,10 +15,10 @@ from gettext import gettext as _ from lollypop.widgets_row_track import TrackRow +from lollypop.widgets_label import LabelWidget from lollypop.objects_album import Album -from lollypop.logger import Logger -from lollypop.utils import set_cursor_type, emit_signal -from lollypop.define import App, ViewType +from lollypop.utils import emit_signal +from lollypop.define import App, ViewType, LovedFlags from lollypop.view_tracks import TracksView @@ -36,6 +36,8 @@ TracksView.__init__(self, view_type) self.__album = album self.__discs_to_load = [] + self.__disc_labels = {} + self.__show_disc_header = False self.__populated = False self.__show_tag_tracknumber = App().settings.get_value( "show-tag-tracknumber") @@ -58,6 +60,7 @@ tracks[:mid_tracks])) items.append((self._tracks_widget_right[disc_number], tracks[mid_tracks:])) + self.__set_disc_header(disc_number) self.__load_disc(items, disc_number) else: self.__populated = True @@ -107,44 +110,20 @@ if child.track == track: child.destroy() - def set_playing_indicator(self): - """ - Set playing indicator - """ - try: - for disc in self.__album.discs: - self._tracks_widget_left[disc.number].update_playing( - App().player.current_track.id) - self._tracks_widget_right[disc.number].update_playing( - App().player.current_track.id) - except Exception as e: - Logger.error("TrackView::set_playing_indicator(): %s" % e) - - def update_duration(self, track_id): - """ - Update track duration - @param track_id as int - """ - try: - for disc in self.__album.discs: - number = disc.number - self._tracks_widget_left[number].update_duration(track_id) - self._tracks_widget_right[number].update_duration(track_id) - except Exception as e: - Logger.error("TrackView::update_duration(): %s" % e) - @property def children(self): """ Return all rows @return [Gtk.ListBoxRow] """ + self._init() rows = [] for disc in self.__album.discs: - for widget in [ - self._tracks_widget_left[disc.number], - self._tracks_widget_right[disc.number] - ]: + if disc.number in self._tracks_widget_left.keys(): + widget = self._tracks_widget_left[disc.number] + rows += widget.get_children() + if disc.number in self._tracks_widget_right.keys(): + widget = self._tracks_widget_right[disc.number] rows += widget.get_children() return rows @@ -189,6 +168,7 @@ for disc in self.__album.discs: self._add_disc_container(disc.number) self.__discs_to_load = list(self.__album.discs) + self.__show_disc_header = len(self.__discs_to_load) > 1 def _add_tracks(self, widget, tracks, position=0): """ @@ -227,43 +207,17 @@ # ---------Label--------- # # | Column 1 | Column 2 | # ########################### - show_label = len(self.__album.discs) > 1 for disc in self.__album.discs: - if show_label: - disc_names = self.__album.disc_names(disc.number) - if disc_names: - label_str = ", ".join(disc_names) - elif show_label: - label_str = _("Disc %s") % disc.number - disc_year = App().tracks.get_year_for_album( - self.__album.id, disc.number) - if disc_year != self.__album.year: - markup = "%s (%s)" - markup = markup % (GLib.markup_escape_text(label_str), - disc_year) - else: - markup = GLib.markup_escape_text(label_str) - label = Gtk.Label.new() - label.set_ellipsize(Pango.EllipsizeMode.END) - label.set_markup(markup) - label.set_property("halign", Gtk.Align.START) - label.get_style_context().add_class("dim-label") - label.show() - eventbox = Gtk.EventBox() - eventbox.connect("realize", set_cursor_type) - eventbox.set_tooltip_text(_("Play")) - eventbox.connect("button-press-event", - self.__on_disc_button_press_event, - disc) - eventbox.add(label) - eventbox.show() - if orientation == Gtk.Orientation.VERTICAL: - self._responsive_widget.attach( - eventbox, 0, idx, 1, 1) - else: - self._responsive_widget.attach( - eventbox, 0, idx, 2, 1) - idx += 1 + if disc.number not in self._tracks_widget_left.keys(): + continue + label = self.__get_disc_label(disc.number) + if orientation == Gtk.Orientation.VERTICAL: + self._responsive_widget.attach( + label, 0, idx, 1, 1) + else: + self._responsive_widget.attach( + label, 0, idx, 2, 1) + idx += 1 if orientation == Gtk.Orientation.VERTICAL: self._responsive_widget.attach( self._tracks_widget_left[disc.number], @@ -297,13 +251,6 @@ if self.__album.is_web: TracksView._on_loading_changed(self, player, status, track) - def __on_track_row_removed(self, row): - """ - Pass signal - @param row as TrackRow - """ - emit_signal(self, "track-removed", row) - def _on_activated(self, widget, track): """ Handle playback if album or pass signal @@ -313,14 +260,11 @@ if self.view_type & (ViewType.ALBUM | ViewType.ARTIST): tracks = [] for child in self.children: - if child.track.loved != -1 or track.id == child.track.id: + if not child.track.loved & LovedFlags.SKIPPED or\ + track.id == child.track.id: tracks.append(child.track) child.set_state_flags(Gtk.StateFlags.NORMAL, True) - # Do not update album list if in party or album already available - playback_track = App().player.track_in_playback(track) - if playback_track is not None: - App().player.load(playback_track) - elif not App().player.is_party: + if not App().player.is_party: album = Album(track.album.id, [], []) album.set_tracks(tracks) if not App().settings.get_value("append-albums"): @@ -352,6 +296,47 @@ ####################### # PRIVATE # ####################### + def __get_disc_label(self, disc_number): + """ + Get disc label widget + @param disc_number as int + @return Gtk.Label + """ + if disc_number in self.__disc_labels.keys(): + label = self.__disc_labels[disc_number] + else: + label = LabelWidget() + label.set_ellipsize(Pango.EllipsizeMode.END) + label.set_property("halign", Gtk.Align.START) + label.get_style_context().add_class("dim-label") + label.connect("clicked", self.__on_label_clicked, disc_number) + label.set_tooltip_text(_("Play")) + self.__disc_labels[disc_number] = label + return label + + def __set_disc_header(self, disc_number): + """ + Set disc header + @param disc_number as int + """ + if self.__show_disc_header: + label = self.__get_disc_label(disc_number) + disc_names = self.__album.disc_names(disc_number) + if disc_names: + label_str = ", ".join(disc_names) + else: + label_str = _("Disc %s") % disc_number + disc_year = App().tracks.get_year_for_album( + self.__album.id, disc_number) + if disc_year != self.__album.year: + markup = "%s (%s)" + markup = markup % (GLib.markup_escape_text(label_str), + disc_year) + else: + markup = GLib.markup_escape_text(label_str) + label.set_markup(markup) + label.show() + def __load_disc(self, items, disc_number, position=0): """ Load discs @@ -368,13 +353,19 @@ else: emit_signal(self, "populated") - def __on_disc_button_press_event(self, button, event, disc): + def __on_track_row_removed(self, row): + """ + Pass signal + @param row as TrackRow + """ + emit_signal(self, "track-removed", row) + + def __on_label_clicked(self, label, disc_number): """ Add disc to playback - @param button as Gtk.Button - @param event as Gdk.ButtonEvent - @param disc as Disc + @param label as LabelWidget + @param disc_number as int """ - album = Album(disc.album.id) - album.set_tracks(disc.tracks) + album = self.__album.clone(False) + album.set_disc_number(disc_number) App().player.play_album(album) diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_tracks.py lollypop-1.4.16.r6.ga09712088/lollypop/view_tracks.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_tracks.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_tracks.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -50,7 +50,9 @@ self.__orientation = None self.connect("realize", self.__on_realize) return [ - (App().player, "loading-changed", "_on_loading_changed") + (App().player, "loading-changed", "_on_loading_changed"), + (App().player, "current-changed", "_on_current_changed"), + (App().player, "duration-changed", "_on_duration_changed"), ] def get_current_ordinate(self, parent): @@ -64,19 +66,6 @@ return child.translate_coordinates(parent, 0, 0)[1] return None - def set_playing_indicator(self): - """ - Set playing indicator - """ - pass - - def update_duration(self, track_id): - """ - Update track duration - @param track_id as int - """ - pass - @property def children(self): """ @@ -226,6 +215,29 @@ def _on_activated(self, widget, track): pass + def _on_current_changed(self, player): + """ + Update children state + @param player as Player + """ + for key in self._tracks_widget_left.keys(): + self._tracks_widget_left[key].update_playing( + App().player.current_track.id) + for key in self._tracks_widget_right.keys(): + self._tracks_widget_right[key].update_playing( + App().player.current_track.id) + + def _on_duration_changed(self, player, track_id): + """ + Update track duration + @param player as Player + @param track_id as int + """ + for key in self._tracks_widget_left.keys(): + self._tracks_widget_left[key].update_duration(track_id) + for key in self._tracks_widget_right.keys(): + self._tracks_widget_right[key].update_duration(track_id) + ####################### # PRIVATE # ####################### diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_tracks_queue.py lollypop-1.4.16.r6.ga09712088/lollypop/view_tracks_queue.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_tracks_queue.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_tracks_queue.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/view_tracks_search.py lollypop-1.4.16.r6.ga09712088/lollypop/view_tracks_search.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/view_tracks_search.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/view_tracks_search.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_album.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_album.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_album.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_album.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -38,6 +38,7 @@ Gtk.Grid.__init__(self) self.set_orientation(Gtk.Orientation.VERTICAL) self.__tracks_view = None + self.__revealer = None self.__view_type = view_type self.__storage_type = storage_type self.__album = album @@ -50,23 +51,25 @@ """ Populate widget """ - self.__revealer = Gtk.Revealer.new() - self.__revealer.show() - self.__banner = AlbumBannerWidget(self.__album, self.__storage_type, - self.__view_type) - self.__banner.show() - self.__banner.connect("populated", self.__on_banner_populated) - self.__banner.populate() - self.add(self.__banner) - self.add(self.__revealer) - self.__gesture = GesturesHelper(self.__banner, - primary_press_callback=self._on_press) - self.get_style_context().add_class("album-banner") - if App().settings.get_value("show-artist-tracks"): - self.__revealer.set_transition_type( - Gtk.RevealerTransitionType.NONE) - self.__populate() - self.set_selection() + if self.__revealer is None: + self.__revealer = Gtk.Revealer.new() + self.__revealer.show() + self.__banner = AlbumBannerWidget(self.__album, + self.__storage_type, + self.__view_type) + self.__banner.show() + self.__banner.connect("populated", self.__on_banner_populated) + self.__banner.populate() + self.add(self.__banner) + self.add(self.__revealer) + self.__gesture = GesturesHelper( + self.__banner, primary_press_callback=self._on_press) + self.get_style_context().add_class("album-banner") + if App().settings.get_value("show-artist-tracks"): + self.__revealer.set_transition_type( + Gtk.RevealerTransitionType.NONE) + self.__populate() + self.set_selection() def reveal_child(self): """ @@ -85,8 +88,6 @@ self.set_state_flags(Gtk.StateFlags.SELECTED, False) else: self.unset_state_flags(Gtk.StateFlags.SELECTED) - if self.__tracks_view is not None: - self.__tracks_view.set_playing_indicator() def set_duration(self, track_id): """ @@ -105,6 +106,8 @@ Get banner @return BannerWidget """ + if self.__revealer is None: + self.populate() return self.__banner @property @@ -147,6 +150,7 @@ Get filtered children @return [Gtk.Widget] """ + filtered = [] if self.__tracks_view is None: self.__populate() filtered = self.__tracks_view.children @@ -179,10 +183,7 @@ """ Populate the view with album """ - def reveal(ignore, update_duration): - if update_duration: - self.get_style_context().remove_class("load-animation") - self.__banner.update_duration() + def init_tracks_view(): if self.__tracks_view is None: self.__tracks_view = AlbumTracksView(self.__album, self.__view_type) @@ -195,8 +196,14 @@ self.__tracks_view.connect("selected", self.__on_track_selected) self.__revealer.add(self.__tracks_view) + + def reveal(ignore, update_duration): + if update_duration: + self.get_style_context().remove_class("load-animation") + self.__banner.update_duration() self.__revealer.set_reveal_child( not self.__revealer.get_reveal_child()) + init_tracks_view() if self.__album.tracks: reveal(None, False) else: diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_albums_decade.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_albums_decade.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_albums_decade.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_albums_decade.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_albums_genre.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_albums_genre.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_albums_genre.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_albums_genre.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_album_simple.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_album_simple.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_album_simple.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_album_simple.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_albums_rounded.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_albums_rounded.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_albums_rounded.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_albums_rounded.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -114,9 +114,10 @@ (0, 2), (1, 2), (2, 2)] while album_pixbufs: pixbuf = album_pixbufs.pop(0) - newpix = pixbuf.scale_simple(self.__cover_size, - self.__cover_size, - GdkPixbuf.InterpType.NEAREST) + newpix = pixbuf.scale_simple( + self.__cover_size * self._scale_factor, + self.__cover_size * self._scale_factor, + GdkPixbuf.InterpType.NEAREST) album_scaled_pixbufs.append(newpix) if len(album_scaled_pixbufs) == 0: @@ -157,7 +158,10 @@ rounded = get_round_surface( surface, self._scale_factor, self._art_size / 4) self._artwork.set_from_surface(rounded) - App().art.add_to_cache(self.artwork_name, rounded, "ROUNDED") + App().art.add_to_cache(self.artwork_name, + rounded, + "ROUNDED", + self._scale_factor) emit_signal(self, "populated") def __draw_surface(self, surface, ctx, positions, diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_artist_rounded.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_artist_rounded.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_artist_rounded.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_artist_rounded.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_artwork_album.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_artwork_album.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_artwork_album.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_artwork_album.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_artwork_artist.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_artwork_artist.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_artwork_artist.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_artwork_artist.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_artwork.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_artwork.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_artwork.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_artwork.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_banner_album.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_banner_album.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_banner_album.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_banner_album.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -10,18 +10,20 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -from gi.repository import Gtk, Pango +from gi.repository import Gtk, Pango, GLib + +from gettext import gettext as _ from lollypop.define import App, ArtSize, Type, ViewType from lollypop.define import ArtBehaviour, MARGIN_MEDIUM, MARGIN, MARGIN_SMALL from lollypop.widgets_rating import RatingWidget from lollypop.widgets_loved import LovedWidget +from lollypop.widgets_label import LabelWidget from lollypop.widgets_cover import EditCoverWidget, CoverWidget from lollypop.widgets_banner import BannerWidget from lollypop.utils import get_human_duration, on_query_tooltip -from lollypop.utils import set_cursor_type, popup_widget, emit_signal +from lollypop.utils import popup_widget, emit_signal from lollypop.helper_signals import SignalsHelper, signals_map -from lollypop.helper_gestures import GesturesHelper class AlbumBannerWidget(BannerWidget, SignalsHelper): @@ -74,15 +76,12 @@ self.__middle_box.set_valign(Gtk.Align.CENTER) self.__middle_box.set_hexpand(True) self.__bottom_box.set_vexpand(True) - self.__year_eventbox = Gtk.EventBox.new() - self.__year_eventbox.set_hexpand(True) - self.__year_eventbox.set_halign(Gtk.Align.END) - self.__year_label = Gtk.Label.new() + self.__year_label = LabelWidget() + self.__year_label.connect("clicked", self.__on_year_clicked) + self.__year_label.set_justify(Gtk.Justification.RIGHT) self.__year_label.get_style_context().add_class("dim-label") - self.__year_eventbox.add(self.__year_label) - self.__year_eventbox.connect("realize", set_cursor_type) - self.__gesture_year = GesturesHelper( - self.__year_eventbox, primary_press_callback=self._on_year_press) + self.__year_label.set_halign(Gtk.Align.END) + self.__year_label.set_hexpand(True) self.__play_button = Gtk.Button.new_from_icon_name( "media-playback-start-symbolic", Gtk.IconSize.BUTTON) self.__add_button = Gtk.Button.new_from_icon_name( @@ -99,29 +98,26 @@ self.__title_label.set_ellipsize(Pango.EllipsizeMode.END) self.__title_label.set_halign(Gtk.Align.START) self.__title_label.set_xalign(0) - self.__artist_label = Gtk.Label.new() - self.__artist_eventbox = Gtk.EventBox.new() - self.__artist_eventbox.set_valign(Gtk.Align.START) - self.__artist_eventbox.add(self.__artist_label) - self.__artist_eventbox.connect("realize", set_cursor_type) + self.__artist_label = LabelWidget() + self.__artist_label.show() + self.__artist_label.connect("clicked", self.__on_artist_clicked) + self.__artist_label.set_valign(Gtk.Align.START) + self.__artist_label.set_halign(Gtk.Align.START) self.__artist_label.connect("query-tooltip", on_query_tooltip) self.__artist_label.set_ellipsize(Pango.EllipsizeMode.END) - self.__artist_label.set_halign(Gtk.Align.START) self.__artist_label.set_xalign(0) - self.__gesture_artist = GesturesHelper( - self.__artist_eventbox, - primary_press_callback=self._on_artist_press) self.__duration_label = Gtk.Label.new() self.__duration_label.get_style_context().add_class("dim-label") - self.__top_box.pack_end(self.__year_eventbox, False, True, 0) + self.__top_box.pack_end(self.__year_label, False, True, 0) self.__middle_box.add(self.__play_button) self.__middle_box.add(self.__add_button) self.__middle_box.add(self.__menu_button) self.__middle_box.get_style_context().add_class("linked") self.__bottom_box.pack_end(self.__duration_label, False, True, 0) self.__labels_box.add(self.__title_label) - self.__labels_box.add(self.__artist_eventbox) + self.__labels_box.add(self.__artist_label) self.__widget.attach(self.__top_box, 2, 0, 1, 1) + self.__set_album_year(True) self.__widget.attach(self.__middle_box, 2, 1, 1, 1) self.__widget.attach(self.__bottom_box, 1, 2, 2, 1) self.__widget.attach(self.__labels_box, 1, 0, 1, 2) @@ -146,9 +142,6 @@ self.__cover_widget.connect("populated", self.__on_cover_populated) self.__cover_widget.show() - if self.__album.year is not None: - self.__year_label.set_label(str(self.__album.year)) - self.__year_label.show() human_duration = get_human_duration(self.__album.duration) self.__duration_label.set_text(human_duration) self.__widget.attach(self.__cover_widget, 0, 0, 1, 3) @@ -227,25 +220,6 @@ """ self.__update_add_button() - def _on_year_press(self, x, y, event): - """ - Show year view - @param x as int - @param y as int - @param event as Gdk.EventButton - """ - App().window.container.show_view([Type.YEARS], [self.__album.year]) - - def _on_artist_press(self, x, y, event): - """ - Show artist view - @param x as int - @param y as int - @param event as Gdk.EventButton - """ - App().window.container.show_view([Type.ARTISTS], - self.__album.artist_ids) - ####################### # PRIVATE # ####################### @@ -255,6 +229,28 @@ else: self.__artwork_popup.destroy() + def __set_album_year(self, full): + """ + Set album year + @param full as int + """ + if self.__album.year is not None: + album_year = GLib.markup_escape_text( + "%s" % self.__album.year) + markup = None + if full and self.__album.original_year is not None: + original_year = GLib.markup_escape_text( + "%s" % self.__album.original_year) + if original_year != album_year: + original_str = _("Released on %s") % original_year + markup = \ + "%s\n%s" %\ + (album_year, original_str) + if markup is None: + markup = album_year + self.__year_label.set_markup(markup) + self.__year_label.show() + def __set_artwork(self): """ Set artwork on banner @@ -277,11 +273,13 @@ self.__widget.remove(self.__top_box) self.__widget.attach(self.__top_box, 1, 1, 1, 1) self.__widget.attach(self.__labels_box, 1, 0, 2, 1) + self.__set_album_year(False) elif self.__widget.get_child_at(1, 0) == self.__labels_box: self.__widget.remove(self.__labels_box) self.__widget.remove(self.__top_box) self.__widget.attach(self.__top_box, 2, 0, 1, 1) self.__widget.attach(self.__labels_box, 1, 0, 1, 2) + self.__set_album_year(True) def __update_add_button(self): """ @@ -371,13 +369,15 @@ Play album @param button as Gtk.Button """ - App().player.play_album(self.__album.clone(False)) + selected = button.get_state_flags() & Gtk.StateFlags.SELECTED + App().player.play_album(self.__album.clone(selected)) def __on_add_button_clicked(self, button): """ Add/Remove album @param button as Gtk.Button """ + selected = button.get_state_flags() & Gtk.StateFlags.SELECTED add = self.__add_button.get_image().get_icon_name()[0] ==\ "list-add-symbolic" albums = App().player.get_albums_for_id(self.__album.id) @@ -395,4 +395,19 @@ break emit_signal(App().player, "playback-updated", album) else: - App().player.add_album(self.__album.clone(False)) + App().player.add_album(self.__album.clone(selected)) + + def __on_year_clicked(self, label): + """ + Show year view + @param label as LabelWidget + """ + App().window.container.show_view([Type.YEARS], [self.__album.year]) + + def __on_artist_clicked(self, label): + """ + Show artist view + @param label as LabelWidget + """ + App().window.container.show_view([Type.ARTISTS], + self.__album.artist_ids) diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_banner_artist.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_banner_artist.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_banner_artist.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_banner_artist.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_banner_current_albums.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_banner_current_albums.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_banner_current_albums.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_banner_current_albums.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_banner_flowbox.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_banner_flowbox.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_banner_flowbox.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_banner_flowbox.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_banner_information.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_banner_information.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_banner_information.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_banner_information.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -12,7 +12,7 @@ from gi.repository import Gtk, GLib, GObject -from lollypop.utils import emit_signal, on_query_tooltip +from lollypop.utils import emit_signal, on_query_tooltip, get_network_available from lollypop.define import App, ArtSize, ArtBehaviour, ViewType from lollypop.widgets_banner import BannerWidget from lollypop.helper_signals import SignalsHelper, signals_map @@ -51,6 +51,8 @@ self._overlay.add_overlay(self.__widget) self._overlay.set_overlay_pass_through(self.__widget, True) self.__set_internal_size() + if not get_network_available("WIKIPEDIA"): + self.__button.set_sensitive(False) return [ (App().window.container.widget, "notify::folded", "_on_container_folded"), @@ -96,7 +98,8 @@ Emit search signal @param button as Gtk.ToggleButton """ - emit_signal(self, "search", button.get_active()) + if get_network_available("WIKIPEDIA"): + emit_signal(self, "search", button.get_active()) ####################### # PRIVATE # diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_banner_lyrics.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_banner_lyrics.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_banner_lyrics.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_banner_lyrics.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_banner_playlist.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_banner_playlist.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_banner_playlist.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_banner_playlist.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -17,6 +17,7 @@ from lollypop.utils import get_human_duration, popup_widget from lollypop.utils_album import tracks_to_albums from lollypop.define import App, ArtSize, ViewType +from lollypop.objects_track import Track from lollypop.widgets_banner import BannerWidget from lollypop.helper_signals import SignalsHelper, signals_map @@ -126,14 +127,15 @@ Play playlist shuffled @param button as Gtk.Button """ - tracks = [] + track_ids = [] for album_row in self.__view.children: for track in album_row.album.tracks: - tracks.append(track) - if tracks: - shuffle(tracks) - albums = tracks_to_albums(tracks) - App().player.play_track_for_albums(tracks[0], albums) + track_ids.append(track.id) + if track_ids: + shuffle(track_ids) + albums = tracks_to_albums( + [Track(track_id) for track_id in track_ids]) + App().player.play_track_for_albums(albums[0].tracks[0], albums) def _on_menu_button_clicked(self, button): """ diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_banner_playlists.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_banner_playlists.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_banner_playlists.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_banner_playlists.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_banner.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_banner.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_banner.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_banner.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_banner_search.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_banner_search.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_banner_search.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_banner_search.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_banner_today.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_banner_today.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_banner_today.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_banner_today.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_combobox.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_combobox.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_combobox.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_combobox.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_cover.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_cover.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_cover.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_cover.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_device.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_device.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_device.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_device.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # Copyright (C) 2010 Jonathan Matthew (replay gain code) # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_equalizer.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_equalizer.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_equalizer.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_equalizer.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # Copyright (C) 2010 Jonathan Matthew (replay gain code) # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_flowbox_rounded.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_flowbox_rounded.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_flowbox_rounded.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_flowbox_rounded.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_indicator.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_indicator.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_indicator.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_indicator.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_label.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_label.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_label.py 1970-01-01 00:00:00.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_label.py 2021-02-25 23:00:18.000000000 +0000 @@ -0,0 +1,57 @@ +# Copyright (c) 2014-2021 Cedric Bellegarde +# 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 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 . + +from gi.repository import Gtk, GObject + +from lollypop.helper_gestures import GesturesHelper +from lollypop.utils import set_cursor_type + + +class LabelWidget(Gtk.EventBox): + """ + A clickable label + """ + + __gsignals__ = { + "clicked": (GObject.SignalFlags.RUN_FIRST, None, ()), + } + + __LABEL_ATTRS = ["set_label", "set_markup", "set_xalign", "set_ellipsize", + "get_style_context", "set_justify"] + + def __init__(self): + """ + Init label + """ + Gtk.EventBox.__init__(self) + self.__label = Gtk.Label.new() + self.__label.show() + self.add(self.__label) + self.__gesture = GesturesHelper( + self, primary_press_callback=self._on_press) + self.connect("realize", set_cursor_type) + + def __getattr__(self, attr): + """ + Get wanted attr + @param attr as str + """ + if attr in self.__LABEL_ATTRS: + return getattr(self.__label, attr) + else: + return getattr(Gtk.EventBox, attr) + +####################### +# PROTECTED # +####################### + def _on_press(self, x, y, event): + self.emit("clicked") diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_listbox.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_listbox.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_listbox.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_listbox.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_loved.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_loved.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_loved.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_loved.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -14,7 +14,7 @@ from gettext import gettext as _ -from lollypop.define import App, Type +from lollypop.define import App, Type, LovedFlags from lollypop.objects_track import Track @@ -57,10 +57,10 @@ @param widget as Gtk.EventBox @param event as Gdk.Event """ - if self.__object.loved < 1: - loved = self.__object.loved + 1 + if self.__object.loved & LovedFlags.LOVED: + loved = LovedFlags.NONE else: - loved = Type.NONE + loved = LovedFlags.LOVED self.__set_artwork(loved) def _on_leave_notify_event(self, widget, event): @@ -77,10 +77,10 @@ @param widget as Gtk.EventBox @param event as Gdk.Event """ - if self.__object.loved < 1: - loved = self.__object.loved + 1 + if self.__object.loved & LovedFlags.LOVED: + loved = LovedFlags.NONE else: - loved = Type.NONE + loved = LovedFlags.LOVED self.__object.set_loved(loved) if isinstance(self.__object, Track): # Clear loved playlist artwork cache @@ -89,7 +89,7 @@ name = App().playlists.get_name(Type.SKIPPED) App().art.remove_from_cache("playlist_" + name, "ROUNDED") # Update state on Last.fm - status = True if loved == 1 else False + status = True if loved & LovedFlags.LOVED else False for scrobbler in App().ws_director.scrobblers: scrobbler.set_loved(self.__object, status) self.__set_artwork(self.__object.loved) @@ -98,23 +98,18 @@ ####################### # PRIVATE # ####################### - def __set_artwork(self, status): + def __set_artwork(self, flags): """ Set artwork base on object status - @param status as int + @param flags as int """ - if status == 0: - self.set_tooltip_text(_("Allow playback")) - self.__artwork.set_opacity(0.2) - self.__artwork.set_from_icon_name("emblem-favorite-symbolic", - self.__icon_size) - elif status == 1: + if flags & LovedFlags.LOVED: self.set_tooltip_text(_("Like")) self.__artwork.set_opacity(0.8) self.__artwork.set_from_icon_name("emblem-favorite-symbolic", self.__icon_size) else: - self.set_tooltip_text(_("Disallow playback")) - self.__artwork.set_opacity(0.8) - self.__artwork.set_from_icon_name("media-skip-forward-symbolic", + self.set_tooltip_text(_("Allow playback")) + self.__artwork.set_opacity(0.2) + self.__artwork.set_from_icon_name("emblem-favorite-symbolic", self.__icon_size) diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_menu.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_menu.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_menu.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_menu.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_placeholder.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_placeholder.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_placeholder.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_placeholder.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_player_artwork.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_player_artwork.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_player_artwork.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_player_artwork.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -89,9 +89,9 @@ if self.__per_track_cover: behaviour |= ArtBehaviour.NO_CACHE album = Album(App().player.current_track.album.id) - App().album_art.clean(album, - width * scale_factor, - height * scale_factor) + App().album_art.uncache(album, + width * scale_factor, + height * scale_factor) album.set_tracks([App().player.current_track]) else: album = App().player.current_track.album diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_player_buttons.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_player_buttons.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_player_buttons.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_player_buttons.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_player_label.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_player_label.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_player_label.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_player_label.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_player_progress.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_player_progress.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_player_progress.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_player_progress.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -28,8 +28,9 @@ Init box """ Gtk.Box.__init__(self) + self.set_valign(Gtk.Align.CENTER) # Prevent updating progress while seeking - self.__seeking = False + self.__seeking_position = False # Update pogress position self.__timeout_id = None self.__time_label = Gtk.Label.new() @@ -77,7 +78,7 @@ Update progress bar position @param value as int """ - if not self.__seeking: + if self.__seeking_position == 0: if value is None and App().player.get_status() != Gst.State.PAUSED: value = App().player.position if value is not None and value >= 0: @@ -169,7 +170,7 @@ @param x as int @param y as int """ - self.__seeking = True + self.__seeking_position = self.__progress.get_value() def __on_multi_released(self, gesture, n_press, x, y): """ @@ -182,9 +183,11 @@ if n_press != 1: return value = self.__progress.get_value() - App().player.seek(value) - self.__seeking = False - self.update_position(value) + if value != self.__seeking_position: + App().player.seek(value) + self.__seeking = False + self.update_position(value) + self.__seeking_position = 0 def __on_scroll(self, event_controler, x, y): """ diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_playlist_rounded.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_playlist_rounded.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_playlist_rounded.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_playlist_rounded.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_playlist_smart.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_playlist_smart.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_playlist_smart.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_playlist_smart.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -54,7 +54,12 @@ @param item as str """ item = item.replace(" COLLATE NOCASE", "") - (t, self.__operand, *args) = item.split(" ") + # Sucks, search for a better way to handle this in Lollypop2 + if item.find("NOT LIKE") != -1: + self.__operand = "NOT LIKE" + (t, *args) = item.split(" NOT LIKE ") + else: + (t, self.__operand, *args) = item.split(" ") value = " ".join(list(args)) # Unquote value if value[0] == "'": diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_popover.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_popover.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_popover.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_popover.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_rating.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_rating.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_rating.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_rating.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_row_album.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_row_album.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_row_album.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_row_album.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -124,8 +124,8 @@ header.set_column_spacing(MARGIN_SMALL) header.show() header.set_margin_start(MARGIN_SMALL) - # 2px for trackrow padding - header.set_margin_end(MARGIN_SMALL + 2) + # This to align button with row button + header.set_margin_end(MARGIN_SMALL * 2 + 3) header.set_margin_top(2) header.set_margin_bottom(2) header.attach(self.__artwork, 0, 0, 1, 2) @@ -141,8 +141,8 @@ box.pack_start(header, 0, True, True) box.pack_start(self.__revealer, 1, False, False) self.add(box) - self.set_playing_indicator() self.set_artwork() + self.set_selection() def reveal(self, reveal=None): """ @@ -163,7 +163,7 @@ self.get_style_context().remove_class("albumrow-collapsed") self.unset_state_flags(Gtk.StateFlags.VISITED) - def set_playing_indicator(self): + def set_selection(self): """ Show play indicator """ @@ -172,7 +172,6 @@ selected = self.album.id == App().player.current_track.album.id and\ App().player.current_track.id in self.album.track_ids if self.__revealer.get_reveal_child(): - self.__tracks_view.set_playing_indicator() self.set_state_flags(Gtk.StateFlags.NORMAL, True) elif selected: self.set_state_flags(Gtk.StateFlags.VISITED, True) diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_row_device.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_row_device.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_row_device.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_row_device.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_row_track.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_row_track.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_row_track.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_row_track.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -15,7 +15,7 @@ from gettext import gettext as _ from lollypop.define import App, ViewType, MARGIN_SMALL, IndicatorType -from lollypop.define import StorageType +from lollypop.define import StorageType, LovedFlags from lollypop.widgets_indicator import IndicatorWidget from lollypop.utils import ms_to_string, on_query_tooltip, popup_widget from lollypop.utils import emit_signal @@ -139,6 +139,10 @@ Show indicator @param indicator_type as IndicatorType """ + # queued tracks do not have an indicator + if self.__view_type & ViewType.QUEUE: + return + if indicator_type is None: indicator_type = self._get_indicator_type() self._indicator.clear() @@ -157,7 +161,7 @@ if indicator_type & IndicatorType.LOVED: self._indicator.set_opacity(1) self._indicator.loved() - elif indicator_type & IndicatorType.SKIP: + elif indicator_type & IndicatorType.SKIPPED: self._indicator.set_opacity(1) self._indicator.skip() else: @@ -171,7 +175,8 @@ self._num_label.get_style_context().add_class("queued") pos = App().player.get_track_position(self._track.id) self._num_label.set_text(str(pos)) - else: + self._num_label.show() + elif not self.__view_type & ViewType.SEARCH: if self.__view_type & (ViewType.PLAYBACK | ViewType.PLAYLISTS): discs = App().albums.get_discs(self._track.album.id) if len(discs) > 1: @@ -183,7 +188,9 @@ label = "%s" % self._track.number self._num_label.set_markup(label) self._num_label.get_style_context().remove_class("queued") - self._num_label.show() + self._num_label.show() + else: + self._num_label.hide() def popup_menu(self, parent, x=None, y=None): """ @@ -240,10 +247,10 @@ indicator_type = IndicatorType.NONE if App().player.current_track.id == self._track.id: indicator_type |= IndicatorType.PLAY - if self._track.loved == 1: + if self._track.loved & LovedFlags.LOVED: indicator_type |= IndicatorType.LOVED - elif self._track.loved == -1: - indicator_type |= IndicatorType.SKIP + elif self._track.loved & LovedFlags.SKIPPED: + indicator_type |= IndicatorType.SKIPPED return indicator_type ####################### diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_tracks.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_tracks.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_tracks.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_tracks.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_typeahead.py lollypop-1.4.16.r6.ga09712088/lollypop/widgets_typeahead.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/widgets_typeahead.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/widgets_typeahead.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 @@ -12,7 +12,7 @@ from gi.repository import Gtk, Gdk -from lollypop.define import App +from lollypop.define import App, MARGIN_SMALL class TypeAheadWidget(Gtk.Revealer): @@ -25,18 +25,51 @@ Init widget """ Gtk.Revealer.__init__(self) - self.__multi_press_left = None - self.__multi_press_right = None - builder = Gtk.Builder() - builder.add_from_resource("/org/gnome/Lollypop/TypeAhead.ui") - builder.connect_signals(self) - widget = builder.get_object("widget") - self.__entry = builder.get_object("entry") - self.__next_button = builder.get_object("next_button") - self.__prev_button = builder.get_object("prev_button") - self.__next_button.connect("clicked", lambda x: self.__search_next()) - self.__prev_button.connect("clicked", lambda x: self.__search_prev()) - self.add(widget) + box = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 0) + box.show() + box.set_property("margin", MARGIN_SMALL) + grid = Gtk.Grid.new() + grid.show() + grid.set_hexpand(True) + grid.set_halign(Gtk.Align.CENTER) + grid.get_style_context().add_class("linked") + self.__entry = Gtk.Entry.new() + self.__entry.show() + self.__entry.connect("activate", self.__on_type_ahead_activate) + self.__entry.connect("changed", self.__on_type_ahead_changed) + self.__entry.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, + "edit-find-symbolic") + self.__next_button = Gtk.Button.new_from_icon_name( + "go-down-symbolic", Gtk.IconSize.BUTTON + ) + self.__next_button.show() + self.__prev_button = Gtk.Button.new_from_icon_name( + "go-up-symbolic", Gtk.IconSize.BUTTON + ) + self.__prev_button.show() + self.__close_button = Gtk.Button.new_from_icon_name( + "window-close-symbolic", Gtk.IconSize.BUTTON + ) + self.__close_button.show() + self.__close_button.set_halign(Gtk.Align.END) + self.__next_button.connect( + "clicked", lambda x: self.__search_next() + ) + self.__prev_button.connect( + "clicked", lambda x: self.__search_prev() + ) + self.__close_button.connect( + "clicked", lambda x: self.set_reveal_child(False) + ) + grid.add(self.__entry) + grid.add(self.__prev_button) + grid.add(self.__next_button) + box.add(grid) + box.add(self.__close_button) + self.add(box) + self.__controller = Gtk.EventControllerKey.new(self.__entry) + self.__controller.connect("key-pressed", self.__on_key_pressed) + self.__controller.connect("key-released", self.__on_key_released) @property def entry(self): @@ -47,72 +80,64 @@ return self.__entry ####################### -# PROTECTED # +# PRIVATE # ####################### - def _on_type_ahead_changed(self, entry): + def __search_prev(self): """ - Filter current widget - @param entry as Gtk.entry + Search previous item """ view = App().window.container.focused_view if view is not None: - view.search_for_child(entry.get_text()) + view.search_prev(self.__entry.get_text()) - def _on_type_ahead_activate(self, entry): + def __search_next(self): """ - Activate row - @param entry as Gtk.Entry + Search next item """ view = App().window.container.focused_view if view is not None: - view.activate_child() - - def _on_close_button_clicked(self, button): - """ - Close widget - @param button as Gtk.Button - """ - self.set_reveal_child(False) + view.search_next(self.__entry.get_text()) - # FIXME GTK4 - def _on_entry_key_press_event(self, entry, event): + def __on_key_pressed(self, event_controller, keyval, keycode, state): """ - Handle special keys - @param entry as Gtk.Entry - @param Event as Gdk.EventKey + Handle keys + @param event_controller as Gtk.EventController + @param keyval as int + @param keycode as int + @param state as Gdk.ModifierType """ - if event.keyval == Gdk.KEY_Up or event.keyval == Gdk.KEY_Down: + if keyval == Gdk.KEY_Up or keyval == Gdk.KEY_Down: return True - elif event.keyval == Gdk.KEY_Escape: + elif keyval == Gdk.KEY_Escape: App().window.container.show_filter() - # FIXME GTK4 - def _on_entry_key_release_event(self, entry, event): + def __on_key_released(self, event_controller, keyval, keycode, state): """ - Handle special keys - @param entry as Gtk.Entry - @param Event as Gdk.EventKey + Handle keys + @param event_controller as Gtk.EventController + @param keyval as int + @param keycode as int + @param state as Gdk.ModifierType """ - if event.keyval == Gdk.KEY_Up: + if keyval == Gdk.KEY_Up: self.__search_prev() - elif event.keyval == Gdk.KEY_Down: + elif keyval == Gdk.KEY_Down: self.__search_next() -####################### -# PRIVATE # -####################### - def __search_prev(self): + def __on_type_ahead_changed(self, entry): """ - Search previous item + Filter current widget + @param entry as Gtk.entry """ view = App().window.container.focused_view if view is not None: - view.search_prev(self.__entry.get_text()) + view.search_for_child(entry.get_text()) - def __search_next(self): + def __on_type_ahead_activate(self, entry): """ - Search next item + Activate row + @param entry as Gtk.Entry """ view = App().window.container.focused_view if view is not None: - view.search_next(self.__entry.get_text()) + view.activate_child() diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/window.py lollypop-1.4.16.r6.ga09712088/lollypop/window.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/window.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/window.py 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 Cedric Bellegarde +# Copyright (c) 2014-2021 Cedric Bellegarde # 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 diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/ws_lastfm.py lollypop-1.4.16.r6.ga09712088/lollypop/ws_lastfm.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/ws_lastfm.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/ws_lastfm.py 2021-02-25 23:00:18.000000000 +0000 @@ -226,6 +226,8 @@ self.__cancellable) if data is not None: Logger.debug("%s: %s", self.__uri, data) + else: + self.__queue.append((track, timestamp)) except Exception as e: Logger.error("LastFMWebService::__listen(): %s" % e) diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop/ws_listenbrainz.py lollypop-1.4.16.r6.ga09712088/lollypop/ws_listenbrainz.py --- lollypop-1.4.7.r90.g765cf1b3/lollypop/ws_listenbrainz.py 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop/ws_listenbrainz.py 2021-02-25 23:00:18.000000000 +0000 @@ -141,6 +141,8 @@ self.__cancellable) if data is not None: Logger.debug("%s: %s", self.__uri, data) + else: + self.__queue.append((track, timestamp)) except Exception as e: Logger.error("ListenBrainzWebService::__listen(): %s" % e) diff -Nru lollypop-1.4.7.r90.g765cf1b3/lollypop.in lollypop-1.4.16.r6.ga09712088/lollypop.in --- lollypop-1.4.7.r90.g765cf1b3/lollypop.in 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/lollypop.in 2021-02-25 23:00:18.000000000 +0000 @@ -43,7 +43,8 @@ Gio.Resource._register(resource) from lollypop.application import Application - app = Application("@REVISION@", pkgdatadir) + app_id = None if "@APPID@" == "None" else "@APPID@" + app = Application("@REVISION@", pkgdatadir, app_id) if 'LOLLYPOP_TRACE' in os.environ: graphviz = GraphvizOutput() graphviz.output_file = 'lollypop.png' diff -Nru lollypop-1.4.7.r90.g765cf1b3/meson.build lollypop-1.4.16.r6.ga09712088/meson.build --- lollypop-1.4.7.r90.g765cf1b3/meson.build 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/meson.build 2021-02-25 23:00:18.000000000 +0000 @@ -1,5 +1,5 @@ project('lollypop', - version: '1.4.7', + version: '1.4.16', meson_version: '>= 0.46.0' ) revision = run_command('bin/revision.sh').stdout().strip() @@ -7,6 +7,12 @@ revision=meson.project_version() endif +if get_option('devel').enabled() + appid='None' +else + appid='org.gnome.Lollypop' +endif + i18n = import('i18n') py_mod = import('python') project_id = 'org.gnome.Lollypop' @@ -40,6 +46,7 @@ conf.set('libexecdir', LIBEXEC_DIR) conf.set('VERSION', meson.project_version()) conf.set('REVISION', revision) +conf.set('APPID', appid) subdir('data') subproject('po') diff -Nru lollypop-1.4.7.r90.g765cf1b3/meson_options.txt lollypop-1.4.16.r6.ga09712088/meson_options.txt --- lollypop-1.4.7.r90.g765cf1b3/meson_options.txt 1970-01-01 00:00:00.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/meson_options.txt 2021-02-25 23:00:18.000000000 +0000 @@ -0,0 +1,2 @@ +option('flatpak', type : 'feature', value : 'disabled', description : 'Build for Flatpak') +option('devel', type : 'feature', value : 'disabled', description : 'Allow multiple instances') diff -Nru lollypop-1.4.7.r90.g765cf1b3/org.gnome.Lollypop.json lollypop-1.4.16.r6.ga09712088/org.gnome.Lollypop.json --- lollypop-1.4.7.r90.g765cf1b3/org.gnome.Lollypop.json 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/org.gnome.Lollypop.json 2021-02-25 23:00:18.000000000 +0000 @@ -1,272 +1,342 @@ { - "app-id": "org.gnome.Lollypop", - "runtime": "org.gnome.Platform", - "runtime-version": "master", - "sdk": "org.gnome.Sdk", - "command": "lollypop", - "tags": ["devel", "development", "nightly"], - "desktop-file-name-prefix": "(Development) ", - "finish-args": [ - "--share=ipc", - "--share=network", - "--socket=x11", - "--socket=wayland", - "--socket=pulseaudio", - "--device=dri", - "--filesystem=host", - "--filesystem=xdg-run/dconf", - "--filesystem=~/.config/dconf:rw", - "--talk-name=org.gtk.vfs", - "--talk-name=org.gtk.vfs.*", - "--talk-name=org.freedesktop.Notifications", - "--talk-name=org.freedesktop.secrets", - "--talk-name=org.freedesktop.Flatpak", - "--talk-name=org.gnome.OnlineAccounts", - "--talk-name=ca.desrt.dconf", - "--own-name=org.mpris.MediaPlayer2.Lollypop", - "--env=DCONF_USER_CONFIG_DIR=.config/dconf" - ], - "modules": [{ - "name": "six", - "buildsystem": "simple", - "build-commands": [ - "python3 setup.py install --prefix=/app" - ], - "sources": [{ - "type": "archive", - "url": "https://github.com/benjaminp/six/archive/1.12.0.tar.gz", - "sha256": "0ce7aef70d066b8dda6425c670d00c25579c3daad8108b3e3d41bef26003c852" - }] - }, - { - "name": "pylast", - "buildsystem": "simple", - "build-commands": [ - "python3 setup.py install --prefix=/app" - ], - "ensure-writable": [ - "/lib/python*/site-packages/easy-install.pth", - "/lib/python*/site-packages/setuptools.pth", - "/app/lib/python*/site-packages/easy-install.pth", - "/app/lib/python*/site-packages/setuptools.pth" - ], - "sources": [{ - "type": "archive", - "url": "https://github.com/pylast/pylast/archive/3.1.0.tar.gz", - "sha256": "2b3584be8ae97a98814395025c07c9f54fad6f4afd640b37ae6ff8308409e59c" - }] - }, - { - "name": "python-pillow", - "buildsystem": "simple", - "build-commands": [ - "python3 setup.py install --prefix=/app --root=/" - ], - "build-options": { - "arch": { - "i386": { - "env": { - "MAX_CONCURRENCY": "1" - } - }, - "arm": { - "env": { - "MAX_CONCURRENCY": "1" - } - } + "app-id" : "org.gnome.Lollypop", + "runtime" : "org.gnome.Platform", + "runtime-version" : "3.38", + "sdk" : "org.gnome.Sdk", + "command" : "lollypop", + "tags" : [ + "devel", + "development", + "nightly" + ], + "desktop-file-name-prefix" : "(Development) ", + "finish-args" : [ + "--share=ipc", + "--share=network", + "--socket=x11", + "--socket=wayland", + "--socket=pulseaudio", + "--device=dri", + "--filesystem=xdg-music", + "--filesystem=xdg-run/gvfs", + "--filesystem=xdg-run/dconf", + "--filesystem=~/.config/dconf:ro", + "--talk-name=org.gtk.vfs", + "--talk-name=org.gtk.vfs.*", + "--talk-name=org.freedesktop.Notifications", + "--talk-name=org.freedesktop.secrets", + "--talk-name=org.freedesktop.Flatpak", + "--talk-name=org.gnome.OnlineAccounts", + "--talk-name=ca.desrt.dconf", + "--own-name=org.mpris.MediaPlayer2.Lollypop", + "--env=DCONF_USER_CONFIG_DIR=.config/dconf" + ], + "x-run-args" : [ + "-e", + "-d" + ], + "modules" : [ + { + "name" : "six", + "buildsystem" : "simple", + "build-commands" : [ + "python3 setup.py install --prefix=/app" + ], + "sources" : [ + { + "type" : "archive", + "url" : "https://github.com/benjaminp/six/archive/1.12.0.tar.gz", + "sha256" : "0ce7aef70d066b8dda6425c670d00c25579c3daad8108b3e3d41bef26003c852" + } + ] + }, + { + "name" : "pylast", + "buildsystem" : "simple", + "build-commands" : [ + "python3 setup.py install --prefix=/app" + ], + "ensure-writable" : [ + "/lib/python*/site-packages/easy-install.pth", + "/lib/python*/site-packages/setuptools.pth", + "/app/lib/python*/site-packages/easy-install.pth", + "/app/lib/python*/site-packages/setuptools.pth" + ], + "sources" : [ + { + "type" : "archive", + "url" : "https://github.com/pylast/pylast/archive/3.1.0.tar.gz", + "sha256" : "2b3584be8ae97a98814395025c07c9f54fad6f4afd640b37ae6ff8308409e59c" + } + ] + }, + { + "name" : "python-pillow", + "buildsystem" : "simple", + "build-commands" : [ + "python3 setup.py install --prefix=/app --root=/" + ], + "build-options" : { + "arch" : { + "i386" : { + "env" : { + "MAX_CONCURRENCY" : "1" + } + }, + "arm" : { + "env" : { + "MAX_CONCURRENCY" : "1" + } + } + } + }, + "ensure-writable" : [ + "/lib/python*/site-packages/easy-install.pth", + "/lib/python*/site-packages/setuptools.pth", + "/app/lib/python*/site-packages/easy-install.pth", + "/app/lib/python*/site-packages/setuptools.pth" + ], + "sources" : [ + { + "type" : "archive", + "url" : "https://files.pythonhosted.org/packages/5b/bb/cdc8086db1f15d0664dd22a62c69613cdc00f1dd430b5b19df1bea83f2a3/Pillow-6.2.1.tar.gz", + "sha256" : "bf4e972a88f8841d8fdc6db1a75e0f8d763e66e3754b03006cbc3854d89f1cb1" + } + ] + }, + { + "name" : "python-idna", + "buildsystem" : "simple", + "build-commands" : [ + "pip3 install --prefix=/app idna-2.8-py2.py3-none-any.whl" + ], + "sources" : [ + { + "type" : "file", + "url" : "https://files.pythonhosted.org/packages/14/2c/cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/idna-2.8-py2.py3-none-any.whl", + "sha256" : "ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c" + } + ] + }, + { + "name" : "python-urllib3", + "buildsystem" : "simple", + "build-commands" : [ + "pip3 install --prefix=/app urllib3-1.25.6-py2.py3-none-any.whl" + ], + "sources" : [ + { + "type" : "file", + "url" : "https://files.pythonhosted.org/packages/e0/da/55f51ea951e1b7c63a579c09dd7db825bb730ec1fe9c0180fc77bfb31448/urllib3-1.25.6-py2.py3-none-any.whl", + "sha256" : "3de946ffbed6e6746608990594d08faac602528ac7015ac28d33cee6a45b7398" + } + ] + }, + { + "name" : "python-certifi", + "buildsystem" : "simple", + "build-commands" : [ + "pip3 install --prefix=/app certifi-2019.9.11-py2.py3-none-any.whl" + ], + "sources" : [ + { + "type" : "file", + "url" : "https://files.pythonhosted.org/packages/18/b0/8146a4f8dd402f60744fa380bc73ca47303cccf8b9190fd16a827281eac2/certifi-2019.9.11-py2.py3-none-any.whl", + "sha256" : "fd7c7c74727ddcf00e9acd26bba8da604ffec95bf1c2144e67aff7a8b50e6cef" + } + ] + }, + { + "name" : "python-chardet", + "buildsystem" : "simple", + "build-commands" : [ + "pip3 install --prefix=/app chardet-3.0.4-py2.py3-none-any.whl" + ], + "sources" : [ + { + "type" : "file", + "url" : "https://pypi.python.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl#md5=0004b00caff7bb543a1d0d0bd0185a03", + "sha256" : "fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" + } + ] + }, + { + "name" : "python-requests", + "buildsystem" : "simple", + "build-commands" : [ + "pip3 install --prefix=/app requests-2.22.0-py2.py3-none-any.whl" + ], + "sources" : [ + { + "type" : "file", + "url" : "https://files.pythonhosted.org/packages/51/bd/23c926cd341ea6b7dd0b2a00aba99ae0f828be89d72b2190f27c11d4b7fb/requests-2.22.0-py2.py3-none-any.whl", + "sha256" : "9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31" + } + ] + }, + { + "name" : "python-beautifulsoup4", + "buildsystem" : "simple", + "build-commands" : [ + "pip3 install --prefix=/app beautifulsoup4-4.8.1-py3-none-any.whl" + ], + "sources" : [ + { + "type" : "file", + "url" : "https://files.pythonhosted.org/packages/3b/c8/a55eb6ea11cd7e5ac4bacdf92bac4693b90d3ba79268be16527555e186f0/beautifulsoup4-4.8.1-py3-none-any.whl", + "sha256" : "dcdef580e18a76d54002088602eba453eec38ebbcafafeaabd8cab12b6155d57" + } + ], + "modules" : [ + { + "name" : "soupsieve", + "buildsystem" : "simple", + "build-commands" : [ + "pip3 install --prefix=/app soupsieve-1.9.4-py2.py3-none-any.whl" + ], + "sources" : [ + { + "type" : "file", + "url" : "https://files.pythonhosted.org/packages/5d/42/d821581cf568e9b7dfc5b415aa61952b0f5e3dede4f3cbd650e3a1082992/soupsieve-1.9.4-py2.py3-none-any.whl", + "sha256" : "b91d676b330a0ebd5b21719cb6e9b57c57d433671f65b9c28dd3461d9a1ed0b6" + } + ] + } + ] + }, + { + "name" : "python-socks", + "buildsystem" : "simple", + "build-commands" : [ + "python3 setup.py install --prefix=/app --root=/" + ], + "sources" : [ + { + "type" : "archive", + "url" : "https://files.pythonhosted.org/packages/bd/11/293dd436aea955d45fc4e8a35b6ae7270f5b8e00b53cf6c024c83b657a11/PySocks-1.7.1.tar.gz", + "sha256" : "3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0" + } + ] + }, + { + "name" : "python-textblob", + "buildsystem" : "simple", + "build-commands" : [ + "pip3 install --prefix=/app textblob-0.15.3-py2.py3-none-any.whl" + ], + "sources" : [ + { + "type" : "file", + "url" : "https://files.pythonhosted.org/packages/60/f0/1d9bfcc8ee6b83472ec571406bd0dd51c0e6330ff1a51b2d29861d389e85/textblob-0.15.3-py2.py3-none-any.whl", + "sha256" : "b0eafd8b129c9b196c8128056caed891d64b7fa20ba570e1fcde438f4f7dd312" + } + ], + "modules" : [ + { + "name" : "nltk", + "buildsystem" : "simple", + "build-commands" : [ + "python3 setup.py install --prefix=/app" + ], + "ensure-writable" : [ + "/lib/python*/site-packages/easy-install.pth", + "/lib/python*/site-packages/setuptools.pth", + "/app/lib/python*/site-packages/easy-install.pth", + "/app/lib/python*/site-packages/setuptools.pth" + ], + "sources" : [ + { + "type" : "archive", + "url" : "https://files.pythonhosted.org/packages/f6/1d/d925cfb4f324ede997f6d47bea4d9babba51b49e87a767c170b77005889d/nltk-3.4.5.zip", + "sha256" : "bed45551259aa2101381bbdd5df37d44ca2669c5c3dad72439fa459b29137d94" + } + ] + } + ] + }, + { + "name" : "gmime", + "config-opts" : [ + "--disable-gtk-doc" + ], + "cleanup" : [ + "*.la", + "/share/gtk-doc" + ], + "sources" : [ + { + "type" : "archive", + "url" : "https://download.gnome.org/sources/gmime/3.2/gmime-3.2.3.tar.xz", + "sha256" : "6a0875eeb552ab447dd54853a68ced62217d863631048737dd97eaa2713e7311" + } + ] + }, + { + "name" : "totem-pl-parser", + "buildsystem" : "meson", + "sources" : [ + { + "type" : "archive", + "url" : "https://download.gnome.org/sources/totem-pl-parser/3.26/totem-pl-parser-3.26.3.tar.xz", + "sha256" : "0efd01b8a0a9770d52fe7354d298874ed845449b88f3f78f49290729fc2d448d" + } + ], + "cleanup" : [ + "/include", + "/share/gtk-doc" + ] + }, + { + "name" : "youtube-dl", + "buildsystem" : "simple", + "build-commands" : [ + "python3 setup.py install --prefix=/app" + ], + "ensure-writable" : [ + "/lib/python*/site-packages/easy-install.pth", + "/lib/python*/site-packages/setuptools.pth", + "/app/lib/python*/site-packages/easy-install.pth", + "/app/lib/python*/site-packages/setuptools.pth" + ], + "sources" : [ + { + "type" : "archive", + "url" : "https://github.com/ytdl-org/youtube-dl/archive/2019.11.28.tar.gz", + "sha256" : "372cbf0cdf1a3abbd6634f0a8a366622be19d7c03eab59cb3c8014a7a084d7a5" + } + ] + }, + { + "name" : "libhandy", + "buildsystem" : "meson", + "config-opts" : [ + "-Dglade_catalog=disabled", + "-Dtests=false", + "-Dexamples=false" + ], + "sources" : [ + { + "type" : "archive", + "url" : "https://download.gnome.org/sources/libhandy/1.0/libhandy-1.0.2.tar.xz", + "sha256" : "3ad78d0594165c7e8150f662506d386552825e693aa3679744af96bd94dc1c2d" + } + ] + }, + { + "name" : "lollypop", + "buildsystem" : "meson", + "sources" : [ + { + "type" : "git", + "url" : "https://gitlab.gnome.org/World/lollypop.git" + } + ], + "config-opts" : [ + "-Ddevel=enabled" + ] } - }, - "ensure-writable": [ - "/lib/python*/site-packages/easy-install.pth", - "/lib/python*/site-packages/setuptools.pth", - "/app/lib/python*/site-packages/easy-install.pth", - "/app/lib/python*/site-packages/setuptools.pth" - ], - "sources": [{ - "type": "archive", - "url": "https://files.pythonhosted.org/packages/5b/bb/cdc8086db1f15d0664dd22a62c69613cdc00f1dd430b5b19df1bea83f2a3/Pillow-6.2.1.tar.gz", - "sha256": "bf4e972a88f8841d8fdc6db1a75e0f8d763e66e3754b03006cbc3854d89f1cb1" - }] - }, - { - "name": "python-idna", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --prefix=/app idna-2.8-py2.py3-none-any.whl" - ], - "sources": [{ - "type": "file", - "url": "https://files.pythonhosted.org/packages/14/2c/cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/idna-2.8-py2.py3-none-any.whl", - "sha256": "ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c" - }] - }, - { - "name": "python-urllib3", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --prefix=/app urllib3-1.25.6-py2.py3-none-any.whl" - ], - "sources": [{ - "type": "file", - "url": "https://files.pythonhosted.org/packages/e0/da/55f51ea951e1b7c63a579c09dd7db825bb730ec1fe9c0180fc77bfb31448/urllib3-1.25.6-py2.py3-none-any.whl", - "sha256": "3de946ffbed6e6746608990594d08faac602528ac7015ac28d33cee6a45b7398" - }] - }, - { - "name": "python-certifi", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --prefix=/app certifi-2019.9.11-py2.py3-none-any.whl" - ], - "sources": [{ - "type": "file", - "url": "https://files.pythonhosted.org/packages/18/b0/8146a4f8dd402f60744fa380bc73ca47303cccf8b9190fd16a827281eac2/certifi-2019.9.11-py2.py3-none-any.whl", - "sha256": "fd7c7c74727ddcf00e9acd26bba8da604ffec95bf1c2144e67aff7a8b50e6cef" - }] - }, - { - "name": "python-chardet", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --prefix=/app chardet-3.0.4-py2.py3-none-any.whl" - ], - "sources": [{ - "type": "file", - "url": "https://pypi.python.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl#md5=0004b00caff7bb543a1d0d0bd0185a03", - "sha256": "fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" - }] - }, - { - "name": "python-requests", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --prefix=/app requests-2.22.0-py2.py3-none-any.whl" - ], - "sources": [{ - "type": "file", - "url": "https://files.pythonhosted.org/packages/51/bd/23c926cd341ea6b7dd0b2a00aba99ae0f828be89d72b2190f27c11d4b7fb/requests-2.22.0-py2.py3-none-any.whl", - "sha256": "9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31" - }] - }, - { - "name": "python-beautifulsoup4", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --prefix=/app beautifulsoup4-4.8.1-py3-none-any.whl" - ], - "sources": [{ - "type": "file", - "url": "https://files.pythonhosted.org/packages/3b/c8/a55eb6ea11cd7e5ac4bacdf92bac4693b90d3ba79268be16527555e186f0/beautifulsoup4-4.8.1-py3-none-any.whl", - "sha256": "dcdef580e18a76d54002088602eba453eec38ebbcafafeaabd8cab12b6155d57" - }], - "modules": [{ - "name": "soupsieve", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --prefix=/app soupsieve-1.9.4-py2.py3-none-any.whl" - ], - "sources": [{ - "type": "file", - "url": "https://files.pythonhosted.org/packages/5d/42/d821581cf568e9b7dfc5b415aa61952b0f5e3dede4f3cbd650e3a1082992/soupsieve-1.9.4-py2.py3-none-any.whl", - "sha256": "b91d676b330a0ebd5b21719cb6e9b57c57d433671f65b9c28dd3461d9a1ed0b6" - }] - }] - }, - { - "name": "python-socks", - "buildsystem": "simple", - "build-commands": [ - "python3 setup.py install --prefix=/app --root=/" - ], - "sources": [{ - "type": "archive", - "url": "https://files.pythonhosted.org/packages/bd/11/293dd436aea955d45fc4e8a35b6ae7270f5b8e00b53cf6c024c83b657a11/PySocks-1.7.1.tar.gz", - "sha256": "3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0" - }] - }, - { - "name": "python-textblob", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --prefix=/app textblob-0.15.3-py2.py3-none-any.whl" - ], - "sources": [{ - "type": "file", - "url": "https://files.pythonhosted.org/packages/60/f0/1d9bfcc8ee6b83472ec571406bd0dd51c0e6330ff1a51b2d29861d389e85/textblob-0.15.3-py2.py3-none-any.whl", - "sha256": "b0eafd8b129c9b196c8128056caed891d64b7fa20ba570e1fcde438f4f7dd312" - }], - "modules": [{ - "name": "nltk", - "buildsystem": "simple", - "build-commands": [ - "python3 setup.py install --prefix=/app" - ], - "ensure-writable": [ - "/lib/python*/site-packages/easy-install.pth", - "/lib/python*/site-packages/setuptools.pth", - "/app/lib/python*/site-packages/easy-install.pth", - "/app/lib/python*/site-packages/setuptools.pth" - ], - "sources": [{ - "type": "archive", - "url": "https://files.pythonhosted.org/packages/f6/1d/d925cfb4f324ede997f6d47bea4d9babba51b49e87a767c170b77005889d/nltk-3.4.5.zip", - "sha256": "bed45551259aa2101381bbdd5df37d44ca2669c5c3dad72439fa459b29137d94" - }] - }] - }, - { - "name": "gmime", - "config-opts": [ - "--disable-gtk-doc" - ], - "cleanup": [ - "*.la", - "/share/gtk-doc" - ], - "sources": [{ - "type": "archive", - "url": "https://download.gnome.org/sources/gmime/3.2/gmime-3.2.3.tar.xz", - "sha256": "6a0875eeb552ab447dd54853a68ced62217d863631048737dd97eaa2713e7311" - }] - }, - { - "name": "totem-pl-parser", - "buildsystem": "meson", - "sources": [{ - "type": "archive", - "url": "https://download.gnome.org/sources/totem-pl-parser/3.26/totem-pl-parser-3.26.3.tar.xz", - "sha256": "0efd01b8a0a9770d52fe7354d298874ed845449b88f3f78f49290729fc2d448d" - }], - "cleanup": [ - "/include", - "/share/gtk-doc" - ] - }, - { - "name": "youtube-dl", - "buildsystem": "simple", - "build-commands": [ - "python3 setup.py install --prefix=/app" - ], - "ensure-writable": [ - "/lib/python*/site-packages/easy-install.pth", - "/lib/python*/site-packages/setuptools.pth", - "/app/lib/python*/site-packages/easy-install.pth", - "/app/lib/python*/site-packages/setuptools.pth" - ], - "sources": [{ - "type": "archive", - "url": "https://github.com/ytdl-org/youtube-dl/archive/2019.11.28.tar.gz", - "sha256": "372cbf0cdf1a3abbd6634f0a8a366622be19d7c03eab59cb3c8014a7a084d7a5" - }] - }, - { - "name": "lollypop", - "buildsystem": "meson", - "sources": [{ - "type": "git", - "url": "https://gitlab.gnome.org/World/lollypop.git" - }] + ], + "build-options" : { + "env" : { } } - ] } diff -Nru lollypop-1.4.7.r90.g765cf1b3/run.sh lollypop-1.4.16.r6.ga09712088/run.sh --- lollypop-1.4.7.r90.g765cf1b3/run.sh 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/run.sh 2021-02-25 23:00:18.000000000 +0000 @@ -1,4 +1,4 @@ rm -fr /usr/local/lib/python3.*/site-packages/lollypop/ -ninja -C build install +ninja -C local install reset lollypop -e "$@" diff -Nru lollypop-1.4.7.r90.g765cf1b3/search-provider/lollypop-sp.in lollypop-1.4.16.r6.ga09712088/search-provider/lollypop-sp.in --- lollypop-1.4.7.r90.g765cf1b3/search-provider/lollypop-sp.in 2020-12-28 23:00:11.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/search-provider/lollypop-sp.in 2021-02-25 23:00:18.000000000 +0000 @@ -26,7 +26,7 @@ gi.require_version('Gst', '1.0') from gi.repository import Gio, Gst, GLib -from lollypop.art import Art +from lollypop.artwork_album import AlbumArtwork from lollypop.settings import Settings from lollypop.database import Database from lollypop.sqlcursor import SqlCursor @@ -163,7 +163,7 @@ self.albums = AlbumsDatabase(self.db) self.artists = ArtistsDatabase(self.db) self.tracks = TracksDatabase(self.db) - self.art = Art() + self.art = AlbumArtwork() self.__bus = Gio.bus_get_sync(Gio.BusType.SESSION, None) Gio.bus_own_name_on_connection(self.__bus, self.__SEARCH_BUS, @@ -195,17 +195,17 @@ album = Album(int(search_id[2:])) name = " ".join(album.artists) or " " description = album.name - surface = self.art.get_album_artwork( + surface = self.art.get( album, ArtSize.BIG, ArtSize.BIG, 1) - gicon = self.art.get_album_cache_path( + gicon = self.art.get_cache_path( album, ArtSize.BIG, ArtSize.BIG) else: track = Track(int(search_id[2:])) name = "♫ " + track.name description = " ".join(track.artists) or " " - surface = self.art.get_album_artwork( + surface = self.art.get( track.album, ArtSize.BIG, ArtSize.BIG, 1) - gicon = self.art.get_album_cache_path( + gicon = self.art.get_cache_path( track.album, ArtSize.BIG, ArtSize.BIG) if surface is not None: del surface diff -Nru lollypop-1.4.7.r90.g765cf1b3/subprojects/po/ar.po lollypop-1.4.16.r6.ga09712088/subprojects/po/ar.po --- lollypop-1.4.7.r90.g765cf1b3/subprojects/po/ar.po 2020-12-28 23:00:16.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/subprojects/po/ar.po 2021-02-25 23:00:22.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-27 13:42+0100\n" +"POT-Creation-Date: 2021-01-06 14:55+0100\n" "PO-Revision-Date: 2019-08-07 21:01+0000\n" "Last-Translator: mohammadA \n" "Language-Team: Arabic \n" "Language-Team: Bulgarian \n" +"POT-Creation-Date: 2021-01-06 14:55+0100\n" +"PO-Revision-Date: 2021-01-11 13:32+0000\n" +"Last-Translator: David Planella \n" "Language-Team: Catalan \n" "Language: ca\n" @@ -22,7 +22,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.1-dev\n" +"X-Generator: Weblate 4.4.1-dev\n" #: ../data/org.gnome.Lollypop.gschema.xml:36 msgid "Window size" @@ -71,7 +71,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:81 msgid "Save artwork/popularity in tags" -msgstr "Desa il·lustracions/popularitat en les etiquetes" +msgstr "Desa les caràtules/popularitat a les etiquetes" #: ../data/org.gnome.Lollypop.gschema.xml:86 msgid "Window maximized" @@ -98,9 +98,8 @@ msgstr "Mostra suggeriments" #: ../data/org.gnome.Lollypop.gschema.xml:106 -#, fuzzy msgid "Play featured tracks" -msgstr "Reprodueix pistes en «featuring»" +msgstr "Reprodueix les pistes destacades" #: ../data/org.gnome.Lollypop.gschema.xml:111 msgid "Allow syncing to USB disks" @@ -111,8 +110,8 @@ "If set, Lollypop will use this server instead of YouTube. See https://github." "com/omarroth/invidious" msgstr "" -"Si s'ha configurat, el Lollypop utilitzarà aquest servidor en comptes de " -"YouTube. Llegui https://github.com/omarroth/invidious" +"Si s'ha configurat, el Lollypop utilitzarà aquest servidor en comptes del " +"YouTube. Vegeu https://github.com/omarroth/invidious" #: ../data/org.gnome.Lollypop.gschema.xml:126 msgid "If true, Lollypop will not use system youtube-dl" @@ -124,7 +123,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:136 msgid "Import playlists from collections" -msgstr "Importa la llista de reproducció de les col·leccions" +msgstr "Importa les llistes de reproducció de les col·leccions" #: ../data/org.gnome.Lollypop.gschema.xml:141 msgid "Music URI" @@ -188,11 +187,11 @@ #: ../data/org.gnome.Lollypop.gschema.xml:196 ../data/SettingsDialog.ui:88 msgid "Show artist artwork" -msgstr "Mostra fotografia dels artistes" +msgstr "Mostra la fotografia dels artistes" #: ../data/org.gnome.Lollypop.gschema.xml:201 msgid "Use dark GTK theme" -msgstr "Tema GTK fosc" +msgstr "Utilitza el tema fosc del GTK" #: ../data/org.gnome.Lollypop.gschema.xml:206 msgid "Disable scrobbling usage" @@ -212,7 +211,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:226 ../data/SettingsDialog.ui:158 msgid "Continue playback when closed" -msgstr "Continua sonant quan tanqui" +msgstr "Continua la reproducció en sortir" #: ../data/org.gnome.Lollypop.gschema.xml:231 msgid "Append albums by default" @@ -250,7 +249,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:265 msgid "Items count in views" -msgstr "Elements dins les visualitzacions" +msgstr "Nombre d'elements a les visualitzacions" #: ../data/org.gnome.Lollypop.gschema.xml:269 msgid "Show track number from tags" @@ -333,7 +332,7 @@ "It performs strict hard limiting with soft-knee characteristics, using a " "threshold of -6 dB" msgstr "" -"Realitza una limitació estricte amb característiques de compressió gradual, " +"Realitza una limitació estricta amb característiques de compressió gradual, " "utilitzant un llindar de -6dB" #: ../data/org.gnome.Lollypop.gschema.xml:384 @@ -367,6 +366,9 @@ msgctxt "Add your names here, do not remove previous names!" msgid "translator1, translator2, ..." msgstr "" +"Adolfo Jayme Barrientos, Berta K , Ferran Roig , somas95 , David Planella " #: ../data/AboutDialog.ui.in:29 msgid "" @@ -569,7 +571,7 @@ msgid "Synchronize" msgstr "Sincronitza" -#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:254 +#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:312 #: ../lollypop/widgets_player_buttons.py:188 msgid "Play" msgstr "Reprodueix" @@ -601,27 +603,27 @@ #: ../data/SettingsDialog.ui:51 ../data/SettingsDialog.ui:54 msgid "Whether the application should use a dark theme" -msgstr "" +msgstr "Especifica si l'aplicació utilitza un tema fosc" #: ../data/SettingsDialog.ui:52 msgid "Dark Mode" -msgstr "" +msgstr "Mode fosc" #: ../data/SettingsDialog.ui:70 msgid "Single column mode" -msgstr "" +msgstr "Mode de columna única" #: ../data/SettingsDialog.ui:72 msgid "Only show a single column for tracks" -msgstr "" +msgstr "Monstra només una columna per a les pistes" #: ../data/SettingsDialog.ui:105 msgid "High quality artwork" -msgstr "" +msgstr "Caràtules d'alta qualitat" #: ../data/SettingsDialog.ui:122 msgid "Artwork size" -msgstr "" +msgstr "Mida de les caràtules" #: ../data/SettingsDialog.ui:139 ../lollypop/menu_actions.py:77 msgid "Clean cache" @@ -633,7 +635,7 @@ #: ../data/SettingsDialog.ui:160 msgid "Play music in background" -msgstr "" +msgstr "Reprodueix la música en segon pla" #: ../data/SettingsDialog.ui:176 msgid "Restore state on startup" @@ -641,31 +643,31 @@ #: ../data/SettingsDialog.ui:178 msgid "Restore current playback and view" -msgstr "" +msgstr "Restaura la reproducció i visualització actual" #: ../data/SettingsDialog.ui:194 msgid "Save changes to file" -msgstr "" +msgstr "Desa els canvis als fitxers" #: ../data/SettingsDialog.ui:196 msgid "Save artwork and rating to files" -msgstr "" +msgstr "Desa les caràtules i la qualificació als fitxers" #: ../data/SettingsDialog.ui:213 msgid "Albums will be sorted by this field" -msgstr "" +msgstr "Els àlbums s'ordenaran per aquest camp" #: ../data/SettingsDialog.ui:222 msgid "Artist - year" -msgstr "" +msgstr "Artista - any" #: ../data/SettingsDialog.ui:223 msgid "Artist - title" -msgstr "" +msgstr "Artista - títol" #: ../data/SettingsDialog.ui:224 msgid "Title" -msgstr "" +msgstr "Títol" #: ../data/SettingsDialog.ui:225 ../data/SmartPlaylistWidget.ui:33 msgid "Year" @@ -731,7 +733,7 @@ #: ../data/SettingsDialog.ui:370 msgid "Import settings" -msgstr "" +msgstr "Paràmetres d'importació" #: ../data/SettingsDialog.ui:377 msgid "Update music if files added to collection" @@ -1348,11 +1350,11 @@ msgid "Resetting database" msgstr "" -#: ../lollypop/collection_scanner.py:504 +#: ../lollypop/collection_scanner.py:505 msgid "Scan disabled, missing collection" msgstr "Seguiment desactivat, manca col·lecció" -#: ../lollypop/collection_scanner.py:797 ../lollypop/database_tracks.py:354 +#: ../lollypop/collection_scanner.py:800 ../lollypop/database_tracks.py:356 #: ../lollypop/tagreader.py:87 ../lollypop/tagreader.py:103 #: ../lollypop/tagreader.py:119 ../lollypop/tagreader.py:190 #: ../lollypop/tagreader.py:238 ../lollypop/tagreader.py:260 @@ -1377,11 +1379,11 @@ msgid "Many artists" msgstr "Molts artistes" -#: ../lollypop/database_upgrade.py:774 +#: ../lollypop/database_upgrade.py:775 msgid "Please wait while Lollypop is updating albums" msgstr "Espereu mentre el Lollypop actualitza els àlbums" -#: ../lollypop/database_upgrade.py:793 +#: ../lollypop/database_upgrade.py:794 msgid "Please wait while Lollypop is updating tracks" msgstr "Espereu mentre el Lollypop actualitza les pistes" @@ -1410,7 +1412,7 @@ #: ../lollypop/dialog_settings.py:206 ../lollypop/dialog_settings.py:341 msgid "Disconnect" -msgstr "Desconnectat" +msgstr "Desconnecta't" #: ../lollypop/dialog_settings.py:251 msgid "Are you sure?" @@ -1454,7 +1456,7 @@ #: ../lollypop/menu_artist.py:56 msgid "Play featured" -msgstr "" +msgstr "Reprodueix les destacades" #: ../lollypop/menu_artist.py:62 ../lollypop/menu_genre.py:44 #: ../lollypop/menu_objects.py:55 ../lollypop/menu_objects.py:118 @@ -1481,7 +1483,7 @@ #: ../lollypop/menu_objects.py:66 msgid "Show album" -msgstr "" +msgstr "Mostra l'àlbum" #: ../lollypop/menu_objects.py:70 ../lollypop/menu_objects.py:119 #: ../lollypop/menu_similars.py:167 @@ -1497,7 +1499,7 @@ msgstr "Adreça de la pàgina de YouTube" #: ../lollypop/menu_playback.py:57 ../lollypop/menu_playback.py:290 -#: ../lollypop/menu_playback.py:526 +#: ../lollypop/menu_playback.py:534 msgid "Play a radio" msgstr "Reprodueix ràdio" @@ -1558,19 +1560,23 @@ msgid "Play this album" msgstr "Reprodueix aquest àlbum" -#: ../lollypop/menu_playback.py:644 +#: ../lollypop/menu_playback.py:529 ../lollypop/menu_playback.py:615 +msgid "Ignored" +msgstr "Ignorat" + +#: ../lollypop/menu_playback.py:672 msgid "Add to queue" msgstr "Afegeix a la cua" -#: ../lollypop/menu_playback.py:650 +#: ../lollypop/menu_playback.py:678 msgid "Remove from queue" msgstr "Elimina de la cua" -#: ../lollypop/menu_playback.py:661 +#: ../lollypop/menu_playback.py:689 msgid "Do not stop after" msgstr "No aturis després de" -#: ../lollypop/menu_playback.py:666 +#: ../lollypop/menu_playback.py:694 msgid "Stop after" msgstr "Atura després de" @@ -1729,7 +1735,7 @@ #: ../lollypop/shown.py:41 msgid "Information" -msgstr "" +msgstr "Informació" #: ../lollypop/shown.py:42 msgid "Compilations" @@ -1788,7 +1794,7 @@ #: ../lollypop/view_albums_box.py:193 msgid "New albums available" -msgstr "" +msgstr "Hi ha àlbums nous" #: ../lollypop/view_albums_box.py:194 ../lollypop/view_artists_rounded.py:155 msgid "Refresh" @@ -1821,7 +1827,7 @@ #: ../lollypop/view_information.py:262 ../lollypop/view_information.py:294 #, python-format msgid "No information for %s" -msgstr "Cap informació de %s" +msgstr "No hi ha informació per a %s" #: ../lollypop/view_lyrics.py:105 ../lollypop/widgets_banner_lyrics.py:136 msgid "No track playing" @@ -1860,11 +1866,11 @@ msgid "Welcome to Lollypop" msgstr "Us donem la benvinguda al Lollypop" -#: ../lollypop/view_tracks_album.py:66 +#: ../lollypop/view_tracks_album.py:69 msgid "All tracks skipped" msgstr "Ignora totes les pistes" -#: ../lollypop/view_tracks_album.py:237 +#: ../lollypop/view_tracks_album.py:327 #, python-format msgid "Disc %s" msgstr "Disc %s" @@ -1889,6 +1895,11 @@ msgid "Remove" msgstr "Elimina" +#: ../lollypop/widgets_banner_album.py:245 +#, python-format +msgid "Released on %s" +msgstr "" + #: ../lollypop/widgets_banner_artist.py:298 msgid "Add to current playlist" msgstr "Afegeix a la llista actual" @@ -2002,17 +2013,13 @@ msgid "Vocal" msgstr "" -#: ../lollypop/widgets_loved.py:107 -msgid "Allow playback" -msgstr "Permet la reproducció" - -#: ../lollypop/widgets_loved.py:112 +#: ../lollypop/widgets_loved.py:108 msgid "Like" msgstr "M'agrada" -#: ../lollypop/widgets_loved.py:117 -msgid "Disallow playback" -msgstr "No permetis la reproducció" +#: ../lollypop/widgets_loved.py:113 +msgid "Allow playback" +msgstr "Permet la reproducció" #: ../lollypop/widgets_player_buttons.py:184 msgid "Pause" @@ -2055,6 +2062,9 @@ msgid "Remove from playlist" msgstr "Elimina de la llista de reproducció" +#~ msgid "Disallow playback" +#~ msgstr "No permetis la reproducció" + #~ msgid "Show year below album name" #~ msgstr "Mostra l'any sota del nom de l'àlbum" diff -Nru lollypop-1.4.7.r90.g765cf1b3/subprojects/po/cs.po lollypop-1.4.16.r6.ga09712088/subprojects/po/cs.po --- lollypop-1.4.7.r90.g765cf1b3/subprojects/po/cs.po 2020-12-28 23:00:16.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/subprojects/po/cs.po 2021-02-25 23:00:22.000000000 +0000 @@ -11,8 +11,8 @@ msgstr "" "Project-Id-Version: lollypop\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-27 13:42+0100\n" -"PO-Revision-Date: 2020-10-10 11:26+0000\n" +"POT-Creation-Date: 2021-01-06 14:55+0100\n" +"PO-Revision-Date: 2021-01-04 12:29+0000\n" "Last-Translator: Pavel Fric \n" "Language-Team: Czech \n" @@ -21,7 +21,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.4.1-dev\n" #: ../data/org.gnome.Lollypop.gschema.xml:36 msgid "Window size" @@ -67,6 +67,8 @@ "Threshold used to decide if the previous track should be played or the " "currently running one should be restarted" msgstr "" +"Prahová hodnota používaná k rozhodnutí, zda má být přehrána předchozí " +"skladba nebo zda má být znovu spuštěna právě přehrávaná skladba" #: ../data/org.gnome.Lollypop.gschema.xml:81 msgid "Save artwork/popularity in tags" @@ -150,7 +152,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:166 msgid "Favorite cover filename without extension" -msgstr "" +msgstr "Oblíbený název souboru obalu bez přípony" #: ../data/org.gnome.Lollypop.gschema.xml:167 #: ../data/org.gnome.Lollypop.gschema.xml:252 @@ -258,7 +260,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:279 msgid "Enable PNG artwork cache" -msgstr "" +msgstr "Povolit vyrovnávací paměť pro obaly v PNG" #: ../data/org.gnome.Lollypop.gschema.xml:289 msgid "Force single column mode" @@ -458,7 +460,7 @@ #: ../data/org.gnome.Lollypop.desktop.in:13 msgid "Music;Player;Lollipop;" -msgstr "" +msgstr "Hudba;Přehrávač;Lollipop;" #: ../data/org.gnome.Lollypop.desktop.in:23 msgid "Play/Pause" @@ -570,7 +572,7 @@ msgid "Synchronize" msgstr "Seřídit" -#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:254 +#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:312 #: ../lollypop/widgets_player_buttons.py:188 msgid "Play" msgstr "Přehrát" @@ -618,7 +620,7 @@ #: ../data/SettingsDialog.ui:105 msgid "High quality artwork" -msgstr "" +msgstr "Vysoce kvalitní umělecká díla" #: ../data/SettingsDialog.ui:122 msgid "Artwork size" @@ -856,7 +858,7 @@ #: ../data/SettingsDialog.ui:1015 ../lollypop/menu_search.py:72 msgid "Jamendo" -msgstr "" +msgstr "Jamendo" #: ../data/SettingsDialog.ui:1031 msgid "AudioDB" @@ -905,11 +907,11 @@ #: ../data/SettingsDialog.ui:1211 msgid "Metro Lyrics" -msgstr "" +msgstr "Zpěvní text Metro" #: ../data/SettingsDialog.ui:1228 msgid "Bing" -msgstr "" +msgstr "Bing" #: ../data/Shortcuts.ui:13 msgctxt "shortcut window" @@ -1166,7 +1168,7 @@ #: ../lollypop/assistant_flatpak.py:31 msgid "Authorization needed" -msgstr "" +msgstr "Je nutné ověření" #: ../lollypop/assistant_flatpak.py:33 msgid "" @@ -1174,10 +1176,13 @@ "In order to be able to access your collection,\n" "you need to allow Lollypop." msgstr "" +"\n" +"Pro přístup ke sbírce,\n" +"musíte povolit Lollypop." #: ../lollypop/assistant_flatpak.py:44 msgid "Update folders" -msgstr "" +msgstr "Aktualizovat složky" #: ../lollypop/assistant_flatpak.py:46 msgid "" @@ -1187,6 +1192,11 @@ "- Remove all folders from collection\n" "- Then, add them again" msgstr "" +"\n" +"- Otevřete nastavení Lollypopu\n" +"- Jděte na kartu Hudba\n" +"- Odstraňte ze sbírky všechny složky\n" +"- Potom je znovu přidejte" #: ../lollypop/assistant_flatpak.py:53 ../lollypop/assistant_google.py:52 #: ../lollypop/assistant_google.py:69 ../lollypop/assistant_google.py:84 @@ -1387,11 +1397,11 @@ msgid "Resetting database" msgstr "Obnovuje se výchozí databáze" -#: ../lollypop/collection_scanner.py:504 +#: ../lollypop/collection_scanner.py:505 msgid "Scan disabled, missing collection" msgstr "Prohledávání zakázáno, chybí sbírka" -#: ../lollypop/collection_scanner.py:797 ../lollypop/database_tracks.py:354 +#: ../lollypop/collection_scanner.py:800 ../lollypop/database_tracks.py:356 #: ../lollypop/tagreader.py:87 ../lollypop/tagreader.py:103 #: ../lollypop/tagreader.py:119 ../lollypop/tagreader.py:190 #: ../lollypop/tagreader.py:238 ../lollypop/tagreader.py:260 @@ -1416,11 +1426,11 @@ msgid "Many artists" msgstr "Mnoho umělců" -#: ../lollypop/database_upgrade.py:774 +#: ../lollypop/database_upgrade.py:775 msgid "Please wait while Lollypop is updating albums" msgstr "Počkejte, prosím, než Lollypop zaktualizuje alba" -#: ../lollypop/database_upgrade.py:793 +#: ../lollypop/database_upgrade.py:794 msgid "Please wait while Lollypop is updating tracks" msgstr "Počkejte, prosím, než Lollypop zaktualizuje skladby" @@ -1520,7 +1530,7 @@ #: ../lollypop/menu_objects.py:66 msgid "Show album" -msgstr "" +msgstr "Ukázat album" #: ../lollypop/menu_objects.py:70 ../lollypop/menu_objects.py:119 #: ../lollypop/menu_similars.py:167 @@ -1536,7 +1546,7 @@ msgstr "Adresa stránky YouTube" #: ../lollypop/menu_playback.py:57 ../lollypop/menu_playback.py:290 -#: ../lollypop/menu_playback.py:526 +#: ../lollypop/menu_playback.py:534 msgid "Play a radio" msgstr "Přehrávat rádio" @@ -1597,19 +1607,23 @@ msgid "Play this album" msgstr "Přehrát toto album" -#: ../lollypop/menu_playback.py:644 +#: ../lollypop/menu_playback.py:529 ../lollypop/menu_playback.py:615 +msgid "Ignored" +msgstr "" + +#: ../lollypop/menu_playback.py:672 msgid "Add to queue" msgstr "Přidat do řady" -#: ../lollypop/menu_playback.py:650 +#: ../lollypop/menu_playback.py:678 msgid "Remove from queue" msgstr "Odstranit z řady" -#: ../lollypop/menu_playback.py:661 +#: ../lollypop/menu_playback.py:689 msgid "Do not stop after" msgstr "Nezastavovat po" -#: ../lollypop/menu_playback.py:666 +#: ../lollypop/menu_playback.py:694 msgid "Stop after" msgstr "Zastavit po" @@ -1788,7 +1802,7 @@ #: ../lollypop/shown.py:73 msgid "Skipped tracks" -msgstr "" +msgstr "Přeskočené skladby" #: ../lollypop/shown.py:74 msgid "All tracks" @@ -1899,18 +1913,18 @@ msgid "Welcome to Lollypop" msgstr "Vítejte v Lollypopu" -#: ../lollypop/view_tracks_album.py:66 +#: ../lollypop/view_tracks_album.py:69 msgid "All tracks skipped" msgstr "Všechny skladby přeskočeny" -#: ../lollypop/view_tracks_album.py:237 +#: ../lollypop/view_tracks_album.py:327 #, python-format msgid "Disc %s" msgstr "Disk %s" #: ../lollypop/view_tracks_queue.py:36 msgid "Currently in queue" -msgstr "" +msgstr "Nyní zařazeno" #: ../lollypop/view_tracks_search.py:103 msgid "Tracks" @@ -1928,6 +1942,11 @@ msgid "Remove" msgstr "Odstranit" +#: ../lollypop/widgets_banner_album.py:245 +#, python-format +msgid "Released on %s" +msgstr "" + #: ../lollypop/widgets_banner_artist.py:298 msgid "Add to current playlist" msgstr "Přidat do nynějšího seznamu skladeb" @@ -2041,17 +2060,13 @@ msgid "Vocal" msgstr "Zpěvní" -#: ../lollypop/widgets_loved.py:107 -msgid "Allow playback" -msgstr "Povolit přehrávání" - -#: ../lollypop/widgets_loved.py:112 +#: ../lollypop/widgets_loved.py:108 msgid "Like" msgstr "Líbí se" -#: ../lollypop/widgets_loved.py:117 -msgid "Disallow playback" -msgstr "Zakázat přehrávání" +#: ../lollypop/widgets_loved.py:113 +msgid "Allow playback" +msgstr "Povolit přehrávání" #: ../lollypop/widgets_player_buttons.py:184 msgid "Pause" @@ -2094,6 +2109,9 @@ msgid "Remove from playlist" msgstr "Odstranit ze seznamu skladeb" +#~ msgid "Disallow playback" +#~ msgstr "Zakázat přehrávání" + #~ msgid "Show year below album name" #~ msgstr "Ukázat rok pod názvem alba" diff -Nru lollypop-1.4.7.r90.g765cf1b3/subprojects/po/da.po lollypop-1.4.16.r6.ga09712088/subprojects/po/da.po --- lollypop-1.4.7.r90.g765cf1b3/subprojects/po/da.po 2020-12-28 23:00:16.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/subprojects/po/da.po 2021-02-25 23:00:22.000000000 +0000 @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: lollypop\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-27 13:42+0100\n" +"POT-Creation-Date: 2021-01-06 14:55+0100\n" "PO-Revision-Date: 2020-10-08 00:26+0000\n" "Last-Translator: scootergrisen \n" "Language-Team: Danish \n" +"POT-Creation-Date: 2021-01-06 14:55+0100\n" +"PO-Revision-Date: 2021-02-03 20:41+0000\n" +"Last-Translator: Vincent Bermel \n" "Language-Team: German \n" "Language: de\n" @@ -29,7 +29,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.4-dev\n" +"X-Generator: Weblate 4.5-dev\n" #: ../data/org.gnome.Lollypop.gschema.xml:36 msgid "Window size" @@ -576,7 +576,7 @@ msgid "Synchronize" msgstr "Synchronisieren" -#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:254 +#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:312 #: ../lollypop/widgets_player_buttons.py:188 msgid "Play" msgstr "Wiedergabe" @@ -624,7 +624,7 @@ #: ../data/SettingsDialog.ui:105 msgid "High quality artwork" -msgstr "" +msgstr "Hochqualitatives Bildmaterial" #: ../data/SettingsDialog.ui:122 msgid "Artwork size" @@ -738,7 +738,7 @@ #: ../data/SettingsDialog.ui:370 msgid "Import settings" -msgstr "Einstellungen importieren" +msgstr "Import-Einstellungen" #: ../data/SettingsDialog.ui:377 msgid "Update music if files added to collection" @@ -1171,7 +1171,7 @@ #: ../lollypop/assistant_flatpak.py:31 msgid "Authorization needed" -msgstr "" +msgstr "Legitimierung erforderlich" #: ../lollypop/assistant_flatpak.py:33 msgid "" @@ -1394,11 +1394,11 @@ msgid "Resetting database" msgstr "Datenbank wird zurückgesetzt" -#: ../lollypop/collection_scanner.py:504 +#: ../lollypop/collection_scanner.py:505 msgid "Scan disabled, missing collection" msgstr "Scan deaktiviert, fehlende Sammlung" -#: ../lollypop/collection_scanner.py:797 ../lollypop/database_tracks.py:354 +#: ../lollypop/collection_scanner.py:800 ../lollypop/database_tracks.py:356 #: ../lollypop/tagreader.py:87 ../lollypop/tagreader.py:103 #: ../lollypop/tagreader.py:119 ../lollypop/tagreader.py:190 #: ../lollypop/tagreader.py:238 ../lollypop/tagreader.py:260 @@ -1423,11 +1423,11 @@ msgid "Many artists" msgstr "Viele Künstler" -#: ../lollypop/database_upgrade.py:774 +#: ../lollypop/database_upgrade.py:775 msgid "Please wait while Lollypop is updating albums" msgstr "Bitte warten während Lollypop die Alben aktualisiert" -#: ../lollypop/database_upgrade.py:793 +#: ../lollypop/database_upgrade.py:794 msgid "Please wait while Lollypop is updating tracks" msgstr "Bitte warten während Lollypop Titel aktualisiert" @@ -1527,7 +1527,7 @@ #: ../lollypop/menu_objects.py:66 msgid "Show album" -msgstr "" +msgstr "Album anzeigen" #: ../lollypop/menu_objects.py:70 ../lollypop/menu_objects.py:119 #: ../lollypop/menu_similars.py:167 @@ -1543,7 +1543,7 @@ msgstr "YouTube Videoadresse" #: ../lollypop/menu_playback.py:57 ../lollypop/menu_playback.py:290 -#: ../lollypop/menu_playback.py:526 +#: ../lollypop/menu_playback.py:534 msgid "Play a radio" msgstr "Radio abspielen" @@ -1604,19 +1604,23 @@ msgid "Play this album" msgstr "Dieses Album wiedergeben" -#: ../lollypop/menu_playback.py:644 +#: ../lollypop/menu_playback.py:529 ../lollypop/menu_playback.py:615 +msgid "Ignored" +msgstr "Ignoriert" + +#: ../lollypop/menu_playback.py:672 msgid "Add to queue" msgstr "Zur Warteschlange hinzufügen" -#: ../lollypop/menu_playback.py:650 +#: ../lollypop/menu_playback.py:678 msgid "Remove from queue" msgstr "Aus Warteschlange entfernen" -#: ../lollypop/menu_playback.py:661 +#: ../lollypop/menu_playback.py:689 msgid "Do not stop after" msgstr "Nicht anhalten nach" -#: ../lollypop/menu_playback.py:666 +#: ../lollypop/menu_playback.py:694 msgid "Stop after" msgstr "Stopp nach" @@ -1795,7 +1799,7 @@ #: ../lollypop/shown.py:73 msgid "Skipped tracks" -msgstr "" +msgstr "Übersprungene Titel" #: ../lollypop/shown.py:74 msgid "All tracks" @@ -1906,18 +1910,18 @@ msgid "Welcome to Lollypop" msgstr "Willkommen bei Lollypop" -#: ../lollypop/view_tracks_album.py:66 +#: ../lollypop/view_tracks_album.py:69 msgid "All tracks skipped" msgstr "Alle Titel übersprungen" -#: ../lollypop/view_tracks_album.py:237 +#: ../lollypop/view_tracks_album.py:327 #, python-format msgid "Disc %s" msgstr "CD %s" #: ../lollypop/view_tracks_queue.py:36 msgid "Currently in queue" -msgstr "" +msgstr "Momentan in Warteschlange" #: ../lollypop/view_tracks_search.py:103 msgid "Tracks" @@ -1935,6 +1939,11 @@ msgid "Remove" msgstr "Entfernen" +#: ../lollypop/widgets_banner_album.py:245 +#, python-format +msgid "Released on %s" +msgstr "" + #: ../lollypop/widgets_banner_artist.py:298 msgid "Add to current playlist" msgstr "Zur aktuellen Wiedergabeliste hinzufügen" @@ -2048,17 +2057,13 @@ msgid "Vocal" msgstr "Vokal" -#: ../lollypop/widgets_loved.py:107 -msgid "Allow playback" -msgstr "Wiedergabe zulassen" - -#: ../lollypop/widgets_loved.py:112 +#: ../lollypop/widgets_loved.py:108 msgid "Like" msgstr "Like" -#: ../lollypop/widgets_loved.py:117 -msgid "Disallow playback" -msgstr "Wiedergabe verbieten" +#: ../lollypop/widgets_loved.py:113 +msgid "Allow playback" +msgstr "Wiedergabe zulassen" #: ../lollypop/widgets_player_buttons.py:184 msgid "Pause" @@ -2101,6 +2106,9 @@ msgid "Remove from playlist" msgstr "Aus der Wiedergabeliste entfernen" +#~ msgid "Disallow playback" +#~ msgstr "Wiedergabe verbieten" + #~ msgid "Show year below album name" #~ msgstr "Jahr unter dem Albumnamen anzeigen" diff -Nru lollypop-1.4.7.r90.g765cf1b3/subprojects/po/el.po lollypop-1.4.16.r6.ga09712088/subprojects/po/el.po --- lollypop-1.4.7.r90.g765cf1b3/subprojects/po/el.po 2020-12-28 23:00:16.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/subprojects/po/el.po 2021-02-25 23:00:22.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: lollypop\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-27 13:42+0100\n" +"POT-Creation-Date: 2021-01-06 14:55+0100\n" "PO-Revision-Date: 2020-02-01 17:50+0000\n" "Last-Translator: Stelios \n" "Language-Team: Greek \n" "Language-Team: English (United Kingdom) \n" "Language-Team: English (Ireland) \n" "Language-Team: Esperanto \n" "Language-Team: Spanish (Ecuador) \n" "Language-Team: Spanish \n" @@ -578,7 +578,7 @@ msgid "Synchronize" msgstr "Sincronizar" -#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:254 +#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:312 #: ../lollypop/widgets_player_buttons.py:188 msgid "Play" msgstr "Reproducir" @@ -748,7 +748,7 @@ #: ../data/SettingsDialog.ui:393 ../data/SettingsDialog.ui:431 msgid "You need to reset collection" -msgstr "Necesita reajustar la colección" +msgstr "Necesita restablecer la colección" #: ../data/SettingsDialog.ui:394 msgid "Show compilations" @@ -1173,7 +1173,7 @@ #: ../lollypop/assistant_flatpak.py:31 msgid "Authorization needed" -msgstr "" +msgstr "Se necesita autorización" #: ../lollypop/assistant_flatpak.py:33 msgid "" @@ -1181,10 +1181,13 @@ "In order to be able to access your collection,\n" "you need to allow Lollypop." msgstr "" +"\n" +"Para poder acceder a su colección,\n" +"debe permitir a Lollypop." #: ../lollypop/assistant_flatpak.py:44 msgid "Update folders" -msgstr "" +msgstr "Actualizar carpetas" #: ../lollypop/assistant_flatpak.py:46 msgid "" @@ -1194,6 +1197,11 @@ "- Remove all folders from collection\n" "- Then, add them again" msgstr "" +"\n" +"- Abrir las preferencias de Lollypop\n" +"- Ir a la pestaña de Música\n" +"- Eliminar todas las carpetas de la colección\n" +"- Después, añadirlas de nuevo" #: ../lollypop/assistant_flatpak.py:53 ../lollypop/assistant_google.py:52 #: ../lollypop/assistant_google.py:69 ../lollypop/assistant_google.py:84 @@ -1395,11 +1403,11 @@ msgid "Resetting database" msgstr "Reiniciando la base de datos" -#: ../lollypop/collection_scanner.py:504 +#: ../lollypop/collection_scanner.py:505 msgid "Scan disabled, missing collection" msgstr "Escaneo desactivado, no se encuentra la colección" -#: ../lollypop/collection_scanner.py:797 ../lollypop/database_tracks.py:354 +#: ../lollypop/collection_scanner.py:800 ../lollypop/database_tracks.py:356 #: ../lollypop/tagreader.py:87 ../lollypop/tagreader.py:103 #: ../lollypop/tagreader.py:119 ../lollypop/tagreader.py:190 #: ../lollypop/tagreader.py:238 ../lollypop/tagreader.py:260 @@ -1424,11 +1432,11 @@ msgid "Many artists" msgstr "Muchos artistas" -#: ../lollypop/database_upgrade.py:774 +#: ../lollypop/database_upgrade.py:775 msgid "Please wait while Lollypop is updating albums" msgstr "Por favor espere mientras Lollypop actualiza los álbumes" -#: ../lollypop/database_upgrade.py:793 +#: ../lollypop/database_upgrade.py:794 msgid "Please wait while Lollypop is updating tracks" msgstr "Por favor espere mientras Lollypop actualiza las pistas" @@ -1544,7 +1552,7 @@ msgstr "Dirección de YouTube" #: ../lollypop/menu_playback.py:57 ../lollypop/menu_playback.py:290 -#: ../lollypop/menu_playback.py:526 +#: ../lollypop/menu_playback.py:534 msgid "Play a radio" msgstr "Reproducir una radio" @@ -1605,19 +1613,23 @@ msgid "Play this album" msgstr "Reproducir este álbum" -#: ../lollypop/menu_playback.py:644 +#: ../lollypop/menu_playback.py:529 ../lollypop/menu_playback.py:615 +msgid "Ignored" +msgstr "Ignorado" + +#: ../lollypop/menu_playback.py:672 msgid "Add to queue" msgstr "Añadir a la cola" -#: ../lollypop/menu_playback.py:650 +#: ../lollypop/menu_playback.py:678 msgid "Remove from queue" msgstr "Suprimir de la cola" -#: ../lollypop/menu_playback.py:661 +#: ../lollypop/menu_playback.py:689 msgid "Do not stop after" msgstr "No parar después" -#: ../lollypop/menu_playback.py:666 +#: ../lollypop/menu_playback.py:694 msgid "Stop after" msgstr "Parar después de" @@ -1703,7 +1715,7 @@ #: ../lollypop/menu_suggestions.py:35 ../lollypop/shown.py:24 msgid "Suggestions" -msgstr "Recomendaciones" +msgstr "Sugerencias" #: ../lollypop/menu_suggestions.py:47 ../lollypop/view_suggestions.py:129 msgid "New releases on Spotify" @@ -1907,18 +1919,18 @@ msgid "Welcome to Lollypop" msgstr "Bienvenido a Lollypop" -#: ../lollypop/view_tracks_album.py:66 +#: ../lollypop/view_tracks_album.py:69 msgid "All tracks skipped" msgstr "Todas las pistas saltadas" -#: ../lollypop/view_tracks_album.py:237 +#: ../lollypop/view_tracks_album.py:327 #, python-format msgid "Disc %s" msgstr "Disco %s" #: ../lollypop/view_tracks_queue.py:36 msgid "Currently in queue" -msgstr "" +msgstr "Actualmente en cola" #: ../lollypop/view_tracks_search.py:103 msgid "Tracks" @@ -1934,7 +1946,12 @@ #: ../lollypop/widgets_artwork.py:179 msgid "Remove" -msgstr "Quitar" +msgstr "Eliminar" + +#: ../lollypop/widgets_banner_album.py:245 +#, python-format +msgid "Released on %s" +msgstr "Publicado en %s" #: ../lollypop/widgets_banner_artist.py:298 msgid "Add to current playlist" @@ -2049,17 +2066,13 @@ msgid "Vocal" msgstr "Vocal" -#: ../lollypop/widgets_loved.py:107 -msgid "Allow playback" -msgstr "Permitir la reproducción" - -#: ../lollypop/widgets_loved.py:112 +#: ../lollypop/widgets_loved.py:108 msgid "Like" msgstr "Me gusta" -#: ../lollypop/widgets_loved.py:117 -msgid "Disallow playback" -msgstr "No permitir la reproducción" +#: ../lollypop/widgets_loved.py:113 +msgid "Allow playback" +msgstr "Permitir la reproducción" #: ../lollypop/widgets_player_buttons.py:184 msgid "Pause" @@ -2102,6 +2115,9 @@ msgid "Remove from playlist" msgstr "Quitar de la lista de reproducción" +#~ msgid "Disallow playback" +#~ msgstr "No permitir la reproducción" + #~ msgid "Show year below album name" #~ msgstr "Mostrar año debajo del nombre del álbum" diff -Nru lollypop-1.4.7.r90.g765cf1b3/subprojects/po/fa.po lollypop-1.4.16.r6.ga09712088/subprojects/po/fa.po --- lollypop-1.4.7.r90.g765cf1b3/subprojects/po/fa.po 2020-12-28 23:00:16.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/subprojects/po/fa.po 2021-02-25 23:00:22.000000000 +0000 @@ -7,8 +7,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-27 13:42+0100\n" -"PO-Revision-Date: 2020-12-22 10:29+0000\n" +"POT-Creation-Date: 2021-01-06 14:55+0100\n" +"PO-Revision-Date: 2021-01-01 20:29+0000\n" "Last-Translator: سهیل خانعلی‌پور \n" "Language-Team: Persian \n" @@ -17,7 +17,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.4-dev\n" +"X-Generator: Weblate 4.4.1-dev\n" #: ../data/org.gnome.Lollypop.gschema.xml:36 msgid "Window size" @@ -90,7 +90,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:101 msgid "Shown suggestions" -msgstr "پیشنهادهای دیده شده" +msgstr "" #: ../data/org.gnome.Lollypop.gschema.xml:106 msgid "Play featured tracks" @@ -134,7 +134,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:151 msgid "ListenBrainz user token" -msgstr "نشانه کاربری ListenBrainz" +msgstr "" #: ../data/org.gnome.Lollypop.gschema.xml:156 msgid "Google Custom Search API key" @@ -142,7 +142,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:161 msgid "Favorite tag editor" -msgstr "ویرایشگر برچسب مورد علاقه" +msgstr "" #: ../data/org.gnome.Lollypop.gschema.xml:166 msgid "Favorite cover filename without extension" @@ -184,7 +184,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:201 msgid "Use dark GTK theme" -msgstr "استفاده از پوسته تیره جی‌تی‌کی" +msgstr "بکارگیری پوسته تیره GTK" #: ../data/org.gnome.Lollypop.gschema.xml:206 msgid "Disable scrobbling usage" @@ -352,7 +352,7 @@ #: ../data/AboutDialog.ui.in:28 msgctxt "Add your names here, do not remove previous names!" msgid "translator1, translator2, ..." -msgstr "سهیل خانعلی‌پور" +msgstr "" #: ../data/AboutDialog.ui.in:29 msgid "" @@ -538,7 +538,7 @@ msgid "Synchronize" msgstr "" -#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:254 +#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:312 #: ../lollypop/widgets_player_buttons.py:188 msgid "Play" msgstr "پخش" @@ -1317,11 +1317,11 @@ msgid "Resetting database" msgstr "" -#: ../lollypop/collection_scanner.py:504 +#: ../lollypop/collection_scanner.py:505 msgid "Scan disabled, missing collection" msgstr "" -#: ../lollypop/collection_scanner.py:797 ../lollypop/database_tracks.py:354 +#: ../lollypop/collection_scanner.py:800 ../lollypop/database_tracks.py:356 #: ../lollypop/tagreader.py:87 ../lollypop/tagreader.py:103 #: ../lollypop/tagreader.py:119 ../lollypop/tagreader.py:190 #: ../lollypop/tagreader.py:238 ../lollypop/tagreader.py:260 @@ -1346,11 +1346,11 @@ msgid "Many artists" msgstr "" -#: ../lollypop/database_upgrade.py:774 +#: ../lollypop/database_upgrade.py:775 msgid "Please wait while Lollypop is updating albums" msgstr "" -#: ../lollypop/database_upgrade.py:793 +#: ../lollypop/database_upgrade.py:794 msgid "Please wait while Lollypop is updating tracks" msgstr "" @@ -1466,7 +1466,7 @@ msgstr "نشانی صفحه یوتیوب" #: ../lollypop/menu_playback.py:57 ../lollypop/menu_playback.py:290 -#: ../lollypop/menu_playback.py:526 +#: ../lollypop/menu_playback.py:534 msgid "Play a radio" msgstr "" @@ -1527,19 +1527,23 @@ msgid "Play this album" msgstr "پخش این جُنگ" -#: ../lollypop/menu_playback.py:644 +#: ../lollypop/menu_playback.py:529 ../lollypop/menu_playback.py:615 +msgid "Ignored" +msgstr "" + +#: ../lollypop/menu_playback.py:672 msgid "Add to queue" msgstr "افزودن به صف" -#: ../lollypop/menu_playback.py:650 +#: ../lollypop/menu_playback.py:678 msgid "Remove from queue" msgstr "حذف از صف" -#: ../lollypop/menu_playback.py:661 +#: ../lollypop/menu_playback.py:689 msgid "Do not stop after" msgstr "" -#: ../lollypop/menu_playback.py:666 +#: ../lollypop/menu_playback.py:694 msgid "Stop after" msgstr "" @@ -1829,11 +1833,11 @@ msgid "Welcome to Lollypop" msgstr "به لالی‌پاپ خوش آمدید" -#: ../lollypop/view_tracks_album.py:66 +#: ../lollypop/view_tracks_album.py:69 msgid "All tracks skipped" msgstr "" -#: ../lollypop/view_tracks_album.py:237 +#: ../lollypop/view_tracks_album.py:327 #, python-format msgid "Disc %s" msgstr "" @@ -1858,6 +1862,11 @@ msgid "Remove" msgstr "حذف" +#: ../lollypop/widgets_banner_album.py:245 +#, python-format +msgid "Released on %s" +msgstr "" + #: ../lollypop/widgets_banner_artist.py:298 msgid "Add to current playlist" msgstr "افزودن به فهرست پخش کنونی" @@ -1971,16 +1980,12 @@ msgid "Vocal" msgstr "" -#: ../lollypop/widgets_loved.py:107 -msgid "Allow playback" -msgstr "" - -#: ../lollypop/widgets_loved.py:112 +#: ../lollypop/widgets_loved.py:108 msgid "Like" msgstr "پسند" -#: ../lollypop/widgets_loved.py:117 -msgid "Disallow playback" +#: ../lollypop/widgets_loved.py:113 +msgid "Allow playback" msgstr "" #: ../lollypop/widgets_player_buttons.py:184 @@ -2022,7 +2027,7 @@ #: ../lollypop/widgets_row_album.py:112 ../lollypop/widgets_row_track.py:107 msgid "Remove from playlist" -msgstr "حذف از فهرست پخش" +msgstr "هذف از پهرست" #~ msgid "Show year below album name" #~ msgstr "نمایش سال در زیر نام جُنگ" diff -Nru lollypop-1.4.7.r90.g765cf1b3/subprojects/po/fi.po lollypop-1.4.16.r6.ga09712088/subprojects/po/fi.po --- lollypop-1.4.7.r90.g765cf1b3/subprojects/po/fi.po 2020-12-28 23:00:16.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/subprojects/po/fi.po 2021-02-25 23:00:22.000000000 +0000 @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: lollypop\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-27 13:42+0100\n" -"PO-Revision-Date: 2020-12-22 10:29+0000\n" +"POT-Creation-Date: 2021-01-06 14:55+0100\n" +"PO-Revision-Date: 2021-01-18 17:32+0000\n" "Last-Translator: Jiri Grönroos \n" "Language-Team: Finnish \n" @@ -18,7 +18,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.4-dev\n" +"X-Generator: Weblate 4.5-dev\n" #: ../data/org.gnome.Lollypop.gschema.xml:36 msgid "Window size" @@ -435,7 +435,7 @@ #: ../data/org.gnome.Lollypop.desktop.in:13 msgid "Music;Player;Lollipop;" -msgstr "" +msgstr "Music;Player;Lollipop;musiikki;soitin;musiikkisoitin;" #: ../data/org.gnome.Lollypop.desktop.in:23 msgid "Play/Pause" @@ -547,7 +547,7 @@ msgid "Synchronize" msgstr "Synkronoi" -#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:254 +#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:312 #: ../lollypop/widgets_player_buttons.py:188 msgid "Play" msgstr "Toista" @@ -595,7 +595,7 @@ #: ../data/SettingsDialog.ui:105 msgid "High quality artwork" -msgstr "" +msgstr "Korkealaatuinen kuvitus" #: ../data/SettingsDialog.ui:122 msgid "Artwork size" @@ -832,7 +832,7 @@ #: ../data/SettingsDialog.ui:1015 ../lollypop/menu_search.py:72 msgid "Jamendo" -msgstr "" +msgstr "Jamendo" #: ../data/SettingsDialog.ui:1031 msgid "AudioDB" @@ -885,7 +885,7 @@ #: ../data/SettingsDialog.ui:1228 msgid "Bing" -msgstr "" +msgstr "Bing" #: ../data/Shortcuts.ui:13 msgctxt "shortcut window" @@ -1142,7 +1142,7 @@ #: ../lollypop/assistant_flatpak.py:31 msgid "Authorization needed" -msgstr "" +msgstr "Valtuutus vaaditaan" #: ../lollypop/assistant_flatpak.py:33 msgid "" @@ -1153,7 +1153,7 @@ #: ../lollypop/assistant_flatpak.py:44 msgid "Update folders" -msgstr "" +msgstr "Päivitä kansiot" #: ../lollypop/assistant_flatpak.py:46 msgid "" @@ -1328,11 +1328,11 @@ msgid "Resetting database" msgstr "Nollataan tietokanta" -#: ../lollypop/collection_scanner.py:504 +#: ../lollypop/collection_scanner.py:505 msgid "Scan disabled, missing collection" msgstr "" -#: ../lollypop/collection_scanner.py:797 ../lollypop/database_tracks.py:354 +#: ../lollypop/collection_scanner.py:800 ../lollypop/database_tracks.py:356 #: ../lollypop/tagreader.py:87 ../lollypop/tagreader.py:103 #: ../lollypop/tagreader.py:119 ../lollypop/tagreader.py:190 #: ../lollypop/tagreader.py:238 ../lollypop/tagreader.py:260 @@ -1357,11 +1357,11 @@ msgid "Many artists" msgstr "Useita esittäjiä" -#: ../lollypop/database_upgrade.py:774 +#: ../lollypop/database_upgrade.py:775 msgid "Please wait while Lollypop is updating albums" msgstr "Odota hetki, kun Lollypop päivittää albumeja" -#: ../lollypop/database_upgrade.py:793 +#: ../lollypop/database_upgrade.py:794 msgid "Please wait while Lollypop is updating tracks" msgstr "Odota, Lollypop päivittää kappaleita" @@ -1461,7 +1461,7 @@ #: ../lollypop/menu_objects.py:66 msgid "Show album" -msgstr "" +msgstr "Näytä albumi" #: ../lollypop/menu_objects.py:70 ../lollypop/menu_objects.py:119 #: ../lollypop/menu_similars.py:167 @@ -1477,7 +1477,7 @@ msgstr "YouTube-sivuosoite" #: ../lollypop/menu_playback.py:57 ../lollypop/menu_playback.py:290 -#: ../lollypop/menu_playback.py:526 +#: ../lollypop/menu_playback.py:534 msgid "Play a radio" msgstr "Toista radioa" @@ -1538,19 +1538,23 @@ msgid "Play this album" msgstr "Toista tämä albumi" -#: ../lollypop/menu_playback.py:644 +#: ../lollypop/menu_playback.py:529 ../lollypop/menu_playback.py:615 +msgid "Ignored" +msgstr "" + +#: ../lollypop/menu_playback.py:672 msgid "Add to queue" msgstr "Lisää jonoon" -#: ../lollypop/menu_playback.py:650 +#: ../lollypop/menu_playback.py:678 msgid "Remove from queue" msgstr "Poista jonosta" -#: ../lollypop/menu_playback.py:661 +#: ../lollypop/menu_playback.py:689 msgid "Do not stop after" msgstr "Älä lopeta jälkeen" -#: ../lollypop/menu_playback.py:666 +#: ../lollypop/menu_playback.py:694 msgid "Stop after" msgstr "Lopeta jälkeen" @@ -1841,11 +1845,11 @@ msgid "Welcome to Lollypop" msgstr "Tervetuloa Lollypopin pariin" -#: ../lollypop/view_tracks_album.py:66 +#: ../lollypop/view_tracks_album.py:69 msgid "All tracks skipped" msgstr "Kaikki kappaleet ohitettu" -#: ../lollypop/view_tracks_album.py:237 +#: ../lollypop/view_tracks_album.py:327 #, python-format msgid "Disc %s" msgstr "Levy %s" @@ -1870,6 +1874,11 @@ msgid "Remove" msgstr "Poista" +#: ../lollypop/widgets_banner_album.py:245 +#, python-format +msgid "Released on %s" +msgstr "" + #: ../lollypop/widgets_banner_artist.py:298 msgid "Add to current playlist" msgstr "Lisää nykyiseen soittolistaan" @@ -1983,17 +1992,13 @@ msgid "Vocal" msgstr "" -#: ../lollypop/widgets_loved.py:107 -msgid "Allow playback" -msgstr "Salli toisto" - -#: ../lollypop/widgets_loved.py:112 +#: ../lollypop/widgets_loved.py:108 msgid "Like" msgstr "Tykkää" -#: ../lollypop/widgets_loved.py:117 -msgid "Disallow playback" -msgstr "" +#: ../lollypop/widgets_loved.py:113 +msgid "Allow playback" +msgstr "Salli toisto" #: ../lollypop/widgets_player_buttons.py:184 msgid "Pause" diff -Nru lollypop-1.4.7.r90.g765cf1b3/subprojects/po/fr.po lollypop-1.4.16.r6.ga09712088/subprojects/po/fr.po --- lollypop-1.4.7.r90.g765cf1b3/subprojects/po/fr.po 2020-12-28 23:00:16.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/subprojects/po/fr.po 2021-02-25 23:00:22.000000000 +0000 @@ -9,8 +9,8 @@ msgstr "" "Project-Id-Version: lollypop\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-27 13:42+0100\n" -"PO-Revision-Date: 2020-12-27 12:44+0000\n" +"POT-Creation-Date: 2021-01-06 14:55+0100\n" +"PO-Revision-Date: 2021-01-06 13:58+0000\n" "Last-Translator: Cédric Bellegarde \n" "Language-Team: French \n" @@ -569,7 +569,7 @@ msgid "Synchronize" msgstr "Synchroniser" -#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:254 +#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:312 #: ../lollypop/widgets_player_buttons.py:188 msgid "Play" msgstr "Lire" @@ -1190,7 +1190,7 @@ msgstr "" "\n" "- Ouvrir les préférences de Lollypop\n" -"- Aller à l’onglet Music\n" +"- Aller à l’onglet Musique\n" "- Supprimer tous les dossiers de la collection\n" "- Puis, ajoutez les à nouveau" @@ -1394,11 +1394,11 @@ msgid "Resetting database" msgstr "Réinitialisation de la base de données" -#: ../lollypop/collection_scanner.py:504 +#: ../lollypop/collection_scanner.py:505 msgid "Scan disabled, missing collection" msgstr "Scan désactivé, collection manquante" -#: ../lollypop/collection_scanner.py:797 ../lollypop/database_tracks.py:354 +#: ../lollypop/collection_scanner.py:800 ../lollypop/database_tracks.py:356 #: ../lollypop/tagreader.py:87 ../lollypop/tagreader.py:103 #: ../lollypop/tagreader.py:119 ../lollypop/tagreader.py:190 #: ../lollypop/tagreader.py:238 ../lollypop/tagreader.py:260 @@ -1423,11 +1423,11 @@ msgid "Many artists" msgstr "Plusieurs artistes" -#: ../lollypop/database_upgrade.py:774 +#: ../lollypop/database_upgrade.py:775 msgid "Please wait while Lollypop is updating albums" msgstr "Veuillez patienter pendant que Lollypop met à jour ses albums" -#: ../lollypop/database_upgrade.py:793 +#: ../lollypop/database_upgrade.py:794 msgid "Please wait while Lollypop is updating tracks" msgstr "Veuillez patienter pendant que Lollypop met à jour les morceaux" @@ -1543,7 +1543,7 @@ msgstr "Adresse de la page YouTube" #: ../lollypop/menu_playback.py:57 ../lollypop/menu_playback.py:290 -#: ../lollypop/menu_playback.py:526 +#: ../lollypop/menu_playback.py:534 msgid "Play a radio" msgstr "Lire une radio" @@ -1604,19 +1604,23 @@ msgid "Play this album" msgstr "Lire cet album" -#: ../lollypop/menu_playback.py:644 +#: ../lollypop/menu_playback.py:529 ../lollypop/menu_playback.py:615 +msgid "Ignored" +msgstr "Ignoré" + +#: ../lollypop/menu_playback.py:672 msgid "Add to queue" msgstr "Ajouter à la file d'attente" -#: ../lollypop/menu_playback.py:650 +#: ../lollypop/menu_playback.py:678 msgid "Remove from queue" msgstr "Supprimer de la liste d'attente" -#: ../lollypop/menu_playback.py:661 +#: ../lollypop/menu_playback.py:689 msgid "Do not stop after" msgstr "Ne pas arrêter après" -#: ../lollypop/menu_playback.py:666 +#: ../lollypop/menu_playback.py:694 msgid "Stop after" msgstr "Arrêter après" @@ -1906,11 +1910,11 @@ msgid "Welcome to Lollypop" msgstr "Bienvenue sur Lollypop" -#: ../lollypop/view_tracks_album.py:66 +#: ../lollypop/view_tracks_album.py:69 msgid "All tracks skipped" msgstr "Tous les morceaux ignorés" -#: ../lollypop/view_tracks_album.py:237 +#: ../lollypop/view_tracks_album.py:327 #, python-format msgid "Disc %s" msgstr "Disque %s" @@ -1933,7 +1937,12 @@ #: ../lollypop/widgets_artwork.py:179 msgid "Remove" -msgstr "Enlever" +msgstr "Supprimer" + +#: ../lollypop/widgets_banner_album.py:245 +#, python-format +msgid "Released on %s" +msgstr "Sorti en %s" #: ../lollypop/widgets_banner_artist.py:298 msgid "Add to current playlist" @@ -1970,7 +1979,7 @@ #: ../lollypop/widgets_equalizer.py:25 ../lollypop/widgets_equalizer.py:162 #: ../lollypop/widgets_equalizer.py:194 msgid "Custom" -msgstr "Personnalisé" +msgstr "Personnalisée" #: ../lollypop/widgets_equalizer.py:28 msgid "Acoustic" @@ -2048,17 +2057,13 @@ msgid "Vocal" msgstr "Vocal" -#: ../lollypop/widgets_loved.py:107 -msgid "Allow playback" -msgstr "Autoriser la lecture" - -#: ../lollypop/widgets_loved.py:112 +#: ../lollypop/widgets_loved.py:108 msgid "Like" msgstr "Aimer" -#: ../lollypop/widgets_loved.py:117 -msgid "Disallow playback" -msgstr "Ne pas autoriser la lecture" +#: ../lollypop/widgets_loved.py:113 +msgid "Allow playback" +msgstr "Autoriser la lecture" #: ../lollypop/widgets_player_buttons.py:184 msgid "Pause" @@ -2101,6 +2106,9 @@ msgid "Remove from playlist" msgstr "Supprimer de la liste de lecture" +#~ msgid "Disallow playback" +#~ msgstr "Ne pas autoriser la lecture" + #~ msgid "Show year below album name" #~ msgstr "Afficher l'année sous le nom de l'album" diff -Nru lollypop-1.4.7.r90.g765cf1b3/subprojects/po/ga.po lollypop-1.4.16.r6.ga09712088/subprojects/po/ga.po --- lollypop-1.4.7.r90.g765cf1b3/subprojects/po/ga.po 2020-12-28 23:00:16.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/subprojects/po/ga.po 2021-02-25 23:00:22.000000000 +0000 @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: lollypop\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-27 13:42+0100\n" +"POT-Creation-Date: 2021-01-06 14:55+0100\n" "PO-Revision-Date: 2017-11-27 14:00+0000\n" "Last-Translator: Cédric Bellegarde \n" "Language-Team: Irish (http://www.transifex.com/gnumdk/lollypop/language/" @@ -538,7 +538,7 @@ msgid "Synchronize" msgstr "" -#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:254 +#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:312 #: ../lollypop/widgets_player_buttons.py:188 msgid "Play" msgstr "Seinn" @@ -1317,11 +1317,11 @@ msgid "Resetting database" msgstr "" -#: ../lollypop/collection_scanner.py:504 +#: ../lollypop/collection_scanner.py:505 msgid "Scan disabled, missing collection" msgstr "" -#: ../lollypop/collection_scanner.py:797 ../lollypop/database_tracks.py:354 +#: ../lollypop/collection_scanner.py:800 ../lollypop/database_tracks.py:356 #: ../lollypop/tagreader.py:87 ../lollypop/tagreader.py:103 #: ../lollypop/tagreader.py:119 ../lollypop/tagreader.py:190 #: ../lollypop/tagreader.py:238 ../lollypop/tagreader.py:260 @@ -1346,11 +1346,11 @@ msgid "Many artists" msgstr "Go leor ealaíontóirí" -#: ../lollypop/database_upgrade.py:774 +#: ../lollypop/database_upgrade.py:775 msgid "Please wait while Lollypop is updating albums" msgstr "" -#: ../lollypop/database_upgrade.py:793 +#: ../lollypop/database_upgrade.py:794 msgid "Please wait while Lollypop is updating tracks" msgstr "" @@ -1466,7 +1466,7 @@ msgstr "" #: ../lollypop/menu_playback.py:57 ../lollypop/menu_playback.py:290 -#: ../lollypop/menu_playback.py:526 +#: ../lollypop/menu_playback.py:534 msgid "Play a radio" msgstr "" @@ -1527,19 +1527,23 @@ msgid "Play this album" msgstr "" -#: ../lollypop/menu_playback.py:644 +#: ../lollypop/menu_playback.py:529 ../lollypop/menu_playback.py:615 +msgid "Ignored" +msgstr "" + +#: ../lollypop/menu_playback.py:672 msgid "Add to queue" msgstr "Cuir le scuaine" -#: ../lollypop/menu_playback.py:650 +#: ../lollypop/menu_playback.py:678 msgid "Remove from queue" msgstr "Bain de scuaine" -#: ../lollypop/menu_playback.py:661 +#: ../lollypop/menu_playback.py:689 msgid "Do not stop after" msgstr "" -#: ../lollypop/menu_playback.py:666 +#: ../lollypop/menu_playback.py:694 msgid "Stop after" msgstr "" @@ -1829,11 +1833,11 @@ msgid "Welcome to Lollypop" msgstr "" -#: ../lollypop/view_tracks_album.py:66 +#: ../lollypop/view_tracks_album.py:69 msgid "All tracks skipped" msgstr "" -#: ../lollypop/view_tracks_album.py:237 +#: ../lollypop/view_tracks_album.py:327 #, python-format msgid "Disc %s" msgstr "Ceirnín %s" @@ -1858,6 +1862,11 @@ msgid "Remove" msgstr "Bain" +#: ../lollypop/widgets_banner_album.py:245 +#, python-format +msgid "Released on %s" +msgstr "" + #: ../lollypop/widgets_banner_artist.py:298 #, fuzzy msgid "Add to current playlist" @@ -1973,16 +1982,12 @@ msgid "Vocal" msgstr "" -#: ../lollypop/widgets_loved.py:107 -msgid "Allow playback" -msgstr "" - -#: ../lollypop/widgets_loved.py:112 +#: ../lollypop/widgets_loved.py:108 msgid "Like" msgstr "" -#: ../lollypop/widgets_loved.py:117 -msgid "Disallow playback" +#: ../lollypop/widgets_loved.py:113 +msgid "Allow playback" msgstr "" #: ../lollypop/widgets_player_buttons.py:184 diff -Nru lollypop-1.4.7.r90.g765cf1b3/subprojects/po/he.po lollypop-1.4.16.r6.ga09712088/subprojects/po/he.po --- lollypop-1.4.7.r90.g765cf1b3/subprojects/po/he.po 2020-12-28 23:00:16.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/subprojects/po/he.po 2021-02-25 23:00:22.000000000 +0000 @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: lollypop\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-27 13:42+0100\n" +"POT-Creation-Date: 2021-01-06 14:55+0100\n" "PO-Revision-Date: 2020-04-24 13:24+0000\n" "Last-Translator: Yosef Or Boczko \n" "Language-Team: Hebrew \n" "Language-Team: Croatian \n" @@ -18,7 +18,7 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.4.1-dev\n" #: ../data/org.gnome.Lollypop.gschema.xml:36 msgid "Window size" @@ -64,6 +64,8 @@ "Threshold used to decide if the previous track should be played or the " "currently running one should be restarted" msgstr "" +"Prag za odlučivanje, da li svirati prethodnu pjesmu ili ponovo pokrenuti " +"pjesmu koja se trenutačno izvodi" #: ../data/org.gnome.Lollypop.gschema.xml:81 msgid "Save artwork/popularity in tags" @@ -147,12 +149,12 @@ #: ../data/org.gnome.Lollypop.gschema.xml:166 msgid "Favorite cover filename without extension" -msgstr "" +msgstr "Ime datoteke omiljenog omota bez datotečnog nastavka" #: ../data/org.gnome.Lollypop.gschema.xml:167 #: ../data/org.gnome.Lollypop.gschema.xml:252 msgid "Restart needed" -msgstr "Potrebno je ponovno pokretanje" +msgstr "Zahtijeva ponovno pokretanje programa" #: ../data/org.gnome.Lollypop.gschema.xml:171 msgid "Database version" @@ -255,7 +257,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:279 msgid "Enable PNG artwork cache" -msgstr "" +msgstr "Aktiviraj predmemoriju PNG slika" #: ../data/org.gnome.Lollypop.gschema.xml:289 msgid "Force single column mode" @@ -454,7 +456,7 @@ #: ../data/org.gnome.Lollypop.desktop.in:13 msgid "Music;Player;Lollipop;" -msgstr "" +msgstr "Glazba;Svirač;Player;Lollipop;" #: ../data/org.gnome.Lollypop.desktop.in:23 msgid "Play/Pause" @@ -566,7 +568,7 @@ msgid "Synchronize" msgstr "Sinkroniziraj" -#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:254 +#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:312 #: ../lollypop/widgets_player_buttons.py:188 msgid "Play" msgstr "Sviraj" @@ -614,7 +616,7 @@ #: ../data/SettingsDialog.ui:105 msgid "High quality artwork" -msgstr "" +msgstr "Slika visoke kvalitete" #: ../data/SettingsDialog.ui:122 msgid "Artwork size" @@ -851,7 +853,7 @@ #: ../data/SettingsDialog.ui:1015 ../lollypop/menu_search.py:72 msgid "Jamendo" -msgstr "" +msgstr "Jamendo" #: ../data/SettingsDialog.ui:1031 msgid "AudioDB" @@ -900,11 +902,11 @@ #: ../data/SettingsDialog.ui:1211 msgid "Metro Lyrics" -msgstr "" +msgstr "Metro Lyrics" #: ../data/SettingsDialog.ui:1228 msgid "Bing" -msgstr "" +msgstr "Bing" #: ../data/Shortcuts.ui:13 msgctxt "shortcut window" @@ -1161,7 +1163,7 @@ #: ../lollypop/assistant_flatpak.py:31 msgid "Authorization needed" -msgstr "" +msgstr "Zahtijeva autorizaciju" #: ../lollypop/assistant_flatpak.py:33 msgid "" @@ -1169,10 +1171,13 @@ "In order to be able to access your collection,\n" "you need to allow Lollypop." msgstr "" +"\n" +"Za pristup tvojoj zbirci,\n" +"moraš dozvoliti Lollypop." #: ../lollypop/assistant_flatpak.py:44 msgid "Update folders" -msgstr "" +msgstr "Aktualiziraj mape" #: ../lollypop/assistant_flatpak.py:46 msgid "" @@ -1182,6 +1187,11 @@ "- Remove all folders from collection\n" "- Then, add them again" msgstr "" +"\n" +"- Otvori Lollypop postavke\n" +"- Idi na karticu Glazba\n" +"- Ukloni sve mape iz zbirke\n" +"- Zatim ih ponovo dodaj" #: ../lollypop/assistant_flatpak.py:53 ../lollypop/assistant_google.py:52 #: ../lollypop/assistant_google.py:69 ../lollypop/assistant_google.py:84 @@ -1383,11 +1393,11 @@ msgid "Resetting database" msgstr "Resetiranje baze podataka" -#: ../lollypop/collection_scanner.py:504 +#: ../lollypop/collection_scanner.py:505 msgid "Scan disabled, missing collection" msgstr "Pretraživanje onemogućeno, nedostaje zbirka" -#: ../lollypop/collection_scanner.py:797 ../lollypop/database_tracks.py:354 +#: ../lollypop/collection_scanner.py:800 ../lollypop/database_tracks.py:356 #: ../lollypop/tagreader.py:87 ../lollypop/tagreader.py:103 #: ../lollypop/tagreader.py:119 ../lollypop/tagreader.py:190 #: ../lollypop/tagreader.py:238 ../lollypop/tagreader.py:260 @@ -1412,11 +1422,11 @@ msgid "Many artists" msgstr "Mnogi izvođači" -#: ../lollypop/database_upgrade.py:774 +#: ../lollypop/database_upgrade.py:775 msgid "Please wait while Lollypop is updating albums" msgstr "Pričekaj dok Lollypop aktualizira albume" -#: ../lollypop/database_upgrade.py:793 +#: ../lollypop/database_upgrade.py:794 msgid "Please wait while Lollypop is updating tracks" msgstr "Pričekaj dok Lollypop aktualizira pjesme" @@ -1516,7 +1526,7 @@ #: ../lollypop/menu_objects.py:66 msgid "Show album" -msgstr "" +msgstr "Prikaži album" #: ../lollypop/menu_objects.py:70 ../lollypop/menu_objects.py:119 #: ../lollypop/menu_similars.py:167 @@ -1532,7 +1542,7 @@ msgstr "Adresa YouTube stranice" #: ../lollypop/menu_playback.py:57 ../lollypop/menu_playback.py:290 -#: ../lollypop/menu_playback.py:526 +#: ../lollypop/menu_playback.py:534 msgid "Play a radio" msgstr "Sviraj radio" @@ -1593,19 +1603,23 @@ msgid "Play this album" msgstr "Sviraj ovaj album" -#: ../lollypop/menu_playback.py:644 +#: ../lollypop/menu_playback.py:529 ../lollypop/menu_playback.py:615 +msgid "Ignored" +msgstr "Zanemareno" + +#: ../lollypop/menu_playback.py:672 msgid "Add to queue" msgstr "Dodaj u red čekanja" -#: ../lollypop/menu_playback.py:650 +#: ../lollypop/menu_playback.py:678 msgid "Remove from queue" msgstr "Ukloni iz reda čekanja" -#: ../lollypop/menu_playback.py:661 +#: ../lollypop/menu_playback.py:689 msgid "Do not stop after" msgstr "Ne prekidaj nakon" -#: ../lollypop/menu_playback.py:666 +#: ../lollypop/menu_playback.py:694 msgid "Stop after" msgstr "Prekini nakon" @@ -1784,7 +1798,7 @@ #: ../lollypop/shown.py:73 msgid "Skipped tracks" -msgstr "" +msgstr "Preskočene pjesme" #: ../lollypop/shown.py:74 msgid "All tracks" @@ -1895,18 +1909,18 @@ msgid "Welcome to Lollypop" msgstr "Lollypop" -#: ../lollypop/view_tracks_album.py:66 +#: ../lollypop/view_tracks_album.py:69 msgid "All tracks skipped" msgstr "Sve pjesme preskočene" -#: ../lollypop/view_tracks_album.py:237 +#: ../lollypop/view_tracks_album.py:327 #, python-format msgid "Disc %s" msgstr "Disk %s" #: ../lollypop/view_tracks_queue.py:36 msgid "Currently in queue" -msgstr "" +msgstr "Trenutačno u popisu" #: ../lollypop/view_tracks_search.py:103 msgid "Tracks" @@ -1924,6 +1938,11 @@ msgid "Remove" msgstr "Ukloni" +#: ../lollypop/widgets_banner_album.py:245 +#, python-format +msgid "Released on %s" +msgstr "Objavljeno %s" + #: ../lollypop/widgets_banner_artist.py:298 msgid "Add to current playlist" msgstr "Dodaj u trenutačnu playlistu" @@ -2037,17 +2056,13 @@ msgid "Vocal" msgstr "Vokalna" -#: ../lollypop/widgets_loved.py:107 -msgid "Allow playback" -msgstr "Dozvoli sviranje" - -#: ../lollypop/widgets_loved.py:112 +#: ../lollypop/widgets_loved.py:108 msgid "Like" msgstr "Sviđa mi se" -#: ../lollypop/widgets_loved.py:117 -msgid "Disallow playback" -msgstr "Zabrani sviranje" +#: ../lollypop/widgets_loved.py:113 +msgid "Allow playback" +msgstr "Dozvoli sviranje" #: ../lollypop/widgets_player_buttons.py:184 msgid "Pause" @@ -2090,6 +2105,9 @@ msgid "Remove from playlist" msgstr "Ukloni iz playliste" +#~ msgid "Disallow playback" +#~ msgstr "Zabrani sviranje" + #~ msgid "Show year below album name" #~ msgstr "Prikaži godinu ispod imena albuma" diff -Nru lollypop-1.4.7.r90.g765cf1b3/subprojects/po/hu.po lollypop-1.4.16.r6.ga09712088/subprojects/po/hu.po --- lollypop-1.4.7.r90.g765cf1b3/subprojects/po/hu.po 2020-12-28 23:00:16.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/subprojects/po/hu.po 2021-02-25 23:00:22.000000000 +0000 @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: lollypop\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-27 13:42+0100\n" +"POT-Creation-Date: 2021-01-06 14:55+0100\n" "PO-Revision-Date: 2020-05-25 02:41+0000\n" "Last-Translator: PB \n" "Language-Team: Hungarian \n" "Language-Team: Indonesian \n" "Language-Team: Occidental \n" @@ -17,7 +17,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.2-dev\n" +"X-Generator: Weblate 4.5-dev\n" #: ../data/org.gnome.Lollypop.gschema.xml:36 msgid "Window size" @@ -25,11 +25,11 @@ #: ../data/org.gnome.Lollypop.gschema.xml:37 msgid "Window size (width and height)." -msgstr "" +msgstr "Dimension del fenestre (largore e altore)." #: ../data/org.gnome.Lollypop.gschema.xml:41 msgid "Window position" -msgstr "" +msgstr "Position del fenestre" #: ../data/org.gnome.Lollypop.gschema.xml:42 msgid "Window position (x and y)." @@ -48,7 +48,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:314 #: ../data/org.gnome.Lollypop.gschema.xml:364 msgid "INTERNAL" -msgstr "" +msgstr "INTERN" #: ../data/org.gnome.Lollypop.gschema.xml:61 msgid "Allow using a cover per track" @@ -120,15 +120,15 @@ #: ../data/org.gnome.Lollypop.gschema.xml:141 msgid "Music URI" -msgstr "" +msgstr "URI de musica" #: ../data/org.gnome.Lollypop.gschema.xml:142 msgid "When empty, use XDG_MUSIC_DIR" -msgstr "" +msgstr "Si vacui, usar XDG_MUSIC_DIR" #: ../data/org.gnome.Lollypop.gschema.xml:146 msgid "Use Libre.fm instead of Last.fm" -msgstr "" +msgstr "Usar Libre.fm in vice de Last.fm" #: ../data/org.gnome.Lollypop.gschema.xml:151 msgid "ListenBrainz user token" @@ -166,15 +166,15 @@ #: ../data/org.gnome.Lollypop.gschema.xml:181 msgid "Encoding quality" -msgstr "" +msgstr "Qualitá de codification" #: ../data/org.gnome.Lollypop.gschema.xml:186 ../data/SettingsDialog.ui:375 msgid "Auto update music" -msgstr "" +msgstr "Automaticmen actualisar li musica" #: ../data/org.gnome.Lollypop.gschema.xml:191 msgid "Show tracks in artist view" -msgstr "" +msgstr "Monstrar tracks in li vise de artist" #: ../data/org.gnome.Lollypop.gschema.xml:196 ../data/SettingsDialog.ui:88 msgid "Show artist artwork" @@ -222,7 +222,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:242 msgid "Ex: Beatles, The" -msgstr "" +msgstr "P.ex.: Beatles, The" #: ../data/org.gnome.Lollypop.gschema.xml:246 msgid "Restore previous state" @@ -234,11 +234,11 @@ #: ../data/org.gnome.Lollypop.gschema.xml:256 msgid "Notifications behaviour" -msgstr "" +msgstr "Conduida de notificationes" #: ../data/org.gnome.Lollypop.gschema.xml:265 msgid "Items count in views" -msgstr "" +msgstr "Númere de elementes in vises" #: ../data/org.gnome.Lollypop.gschema.xml:269 msgid "Show track number from tags" @@ -258,11 +258,11 @@ #: ../data/org.gnome.Lollypop.gschema.xml:295 msgid "0.0-1.0" -msgstr "" +msgstr "0,0-1,0" #: ../data/org.gnome.Lollypop.gschema.xml:299 msgid "Equalizer enabled" -msgstr "" +msgstr "Activar equalisator" #: ../data/org.gnome.Lollypop.gschema.xml:319 msgid "Show labels in sidebar" @@ -278,7 +278,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:334 msgid "Transition duration in ms" -msgstr "" +msgstr "Duration de superposition in ms" #: ../data/org.gnome.Lollypop.gschema.xml:339 msgid "Fade effect on playback status change" @@ -286,7 +286,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:344 msgid "Fade duration in ms" -msgstr "" +msgstr "Duration de evanescentie in ms" #: ../data/org.gnome.Lollypop.gschema.xml:349 msgid "Fade effect only in party mode" @@ -294,7 +294,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:354 ../data/ToolbarEnd.ui:19 msgid "Shuffle tracks" -msgstr "" +msgstr "Mixter tracks" #: ../data/org.gnome.Lollypop.gschema.xml:359 msgid "Ignore internal symlinks" @@ -302,7 +302,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:369 msgid "ReplayGain state" -msgstr "" +msgstr "Statu de ReplayGain" #: ../data/org.gnome.Lollypop.gschema.xml:374 msgid "ReplayGain value in dB" @@ -332,7 +332,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:389 msgid "Repeat" -msgstr "" +msgstr "Repetir" #: ../data/org.gnome.Lollypop.gschema.xml:394 ../data/SettingsDialog.ui:212 msgid "Order albums by" @@ -350,7 +350,7 @@ #: ../data/AboutDialog.ui.in:28 msgctxt "Add your names here, do not remove previous names!" msgid "translator1, translator2, ..." -msgstr "" +msgstr "OIS" #: ../data/AboutDialog.ui.in:29 msgid "" @@ -373,20 +373,20 @@ #: ../data/AboutDialog.ui.in:74 msgid "Liberapay" -msgstr "" +msgstr "Liberapay" #: ../data/AboutDialog.ui.in:84 ../lollypop/container_notification.py:107 msgid "Patreon" -msgstr "" +msgstr "Patreon" #: ../data/AboutDialog.ui.in:94 ../lollypop/container_notification.py:107 msgid "PayPal" -msgstr "" +msgstr "PayPal" #: ../data/org.gnome.Lollypop.appdata.xml.in:8 #: ../data/org.gnome.Lollypop.desktop.in:3 msgid "Lollypop" -msgstr "" +msgstr "Lollypop" #: ../data/org.gnome.Lollypop.appdata.xml.in:9 #: ../data/org.gnome.Lollypop.desktop.in:5 @@ -404,15 +404,15 @@ #: ../data/org.gnome.Lollypop.appdata.xml.in:13 msgid "Multiple Audio Formats –" -msgstr "" +msgstr "Multiplic formates de audio –" #: ../data/org.gnome.Lollypop.appdata.xml.in:14 msgid "Metadata –" -msgstr "" +msgstr "Metadata –" #: ../data/org.gnome.Lollypop.appdata.xml.in:15 msgid "Synchronization –" -msgstr "" +msgstr "Sincronisation –" #: ../data/org.gnome.Lollypop.appdata.xml.in:16 msgid "Audio Scrobbling –" @@ -424,7 +424,7 @@ #: ../data/org.gnome.Lollypop.desktop.in:13 msgid "Music;Player;Lollipop;" -msgstr "" +msgstr "Musica;reproductor;player;Lollipop;" #: ../data/org.gnome.Lollypop.desktop.in:23 msgid "Play/Pause" @@ -444,15 +444,15 @@ #: ../data/Appmenu.ui:45 msgid "Update music" -msgstr "" +msgstr "Actualisar li musica" #: ../data/Appmenu.ui:63 msgid "Mini player" -msgstr "" +msgstr "Mini-reproductor" #: ../data/Appmenu.ui:81 msgid "Fullscreen" -msgstr "" +msgstr "Plen-ecran" #: ../data/Appmenu.ui:108 msgid "_Preferences" @@ -464,15 +464,15 @@ #: ../data/Appmenu.ui:136 msgid "_About Lollypop" -msgstr "" +msgstr "_Pri Lollypop" #: ../data/Appmenu.ui:149 msgid "Quit" -msgstr "" +msgstr "Surtir" #: ../data/Appmenu.ui:219 msgid "Equalizer" -msgstr "" +msgstr "Equalisator" #: ../data/ArtistBannerWidget.ui:92 msgid "Play albums" @@ -501,23 +501,23 @@ #: ../data/DeviceWidget.ui:117 msgid "MP3" -msgstr "" +msgstr "MP3" #: ../data/DeviceWidget.ui:134 msgid "Ogg Vorbis" -msgstr "" +msgstr "Ogg Vorbis" #: ../data/DeviceWidget.ui:151 msgid "AAC" -msgstr "" +msgstr "AAC" #: ../data/DeviceWidget.ui:168 msgid "FLAC" -msgstr "" +msgstr "FLAC" #: ../data/DeviceWidget.ui:204 msgid "Synchronized:" -msgstr "" +msgstr "Sincronisat:" #: ../data/DeviceWidget.ui:217 ../lollypop/shown.py:36 #: ../lollypop/view_albums_line.py:279 @@ -534,16 +534,16 @@ #: ../data/DeviceWidget.ui:284 ../lollypop/widgets_device.py:137 #: ../lollypop/widgets_device.py:338 msgid "Synchronize" -msgstr "" +msgstr "Sincronisar" -#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:254 +#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:312 #: ../lollypop/widgets_player_buttons.py:188 msgid "Play" msgstr "Reproducter" #: ../data/PlaylistBannerWidget.ui:89 msgid "Play playlist randomized" -msgstr "" +msgstr "Reproducter li playlist hasardalmen" #: ../data/PlaylistPopover.ui:23 ../data/RadioMenu.ui:50 msgid "Name:" @@ -560,7 +560,7 @@ #: ../data/SettingsDialog.ui:41 msgid "General" -msgstr "" +msgstr "General" #: ../data/SettingsDialog.ui:46 msgid "Appearance" @@ -572,7 +572,7 @@ #: ../data/SettingsDialog.ui:52 msgid "Dark Mode" -msgstr "" +msgstr "Mode obscur" #: ../data/SettingsDialog.ui:70 msgid "Single column mode" @@ -588,11 +588,11 @@ #: ../data/SettingsDialog.ui:122 msgid "Artwork size" -msgstr "" +msgstr "Dimension de images" #: ../data/SettingsDialog.ui:139 ../lollypop/menu_actions.py:77 msgid "Clean cache" -msgstr "" +msgstr "Vacuar li cache" #: ../data/SettingsDialog.ui:153 msgid "Behaviour" @@ -600,7 +600,7 @@ #: ../data/SettingsDialog.ui:160 msgid "Play music in background" -msgstr "" +msgstr "Reproducter musica in funde" #: ../data/SettingsDialog.ui:176 msgid "Restore state on startup" @@ -612,7 +612,7 @@ #: ../data/SettingsDialog.ui:194 msgid "Save changes to file" -msgstr "" +msgstr "Gardar modificationes a files" #: ../data/SettingsDialog.ui:196 msgid "Save artwork and rating to files" @@ -624,15 +624,15 @@ #: ../data/SettingsDialog.ui:222 msgid "Artist - year" -msgstr "" +msgstr "Artist - Annu" #: ../data/SettingsDialog.ui:223 msgid "Artist - title" -msgstr "" +msgstr "Artist - Titul" #: ../data/SettingsDialog.ui:224 msgid "Title" -msgstr "" +msgstr "Titul" #: ../data/SettingsDialog.ui:225 ../data/SmartPlaylistWidget.ui:33 msgid "Year" @@ -646,11 +646,11 @@ #: ../lollypop/menu_decade.py:39 ../lollypop/menu_genre.py:41 #: ../lollypop/menu_objects.py:43 ../lollypop/menu_objects.py:109 msgid "Playback" -msgstr "" +msgstr "Reproduction" #: ../data/SettingsDialog.ui:247 msgid "Enable transitions" -msgstr "" +msgstr "Activar superposition" #: ../data/SettingsDialog.ui:249 msgid "Add a transition on track change" @@ -658,15 +658,15 @@ #: ../data/SettingsDialog.ui:265 msgid "Duration" -msgstr "" +msgstr "Duration" #: ../data/SettingsDialog.ui:267 msgid "Transition duration in milliseconds" -msgstr "" +msgstr "Duration de superposition in ms" #: ../data/SettingsDialog.ui:283 msgid "ReplayGain" -msgstr "" +msgstr "ReplayGain" #: ../data/SettingsDialog.ui:285 msgid "Apply audio correction on the fly" @@ -678,11 +678,11 @@ #: ../data/SettingsDialog.ui:295 msgid "Track" -msgstr "" +msgstr "Track" #: ../data/SettingsDialog.ui:296 ../data/SmartPlaylistWidget.ui:30 msgid "Album" -msgstr "" +msgstr "Album" #: ../data/SettingsDialog.ui:315 msgid "Music" @@ -690,15 +690,15 @@ #: ../data/SettingsDialog.ui:320 msgid "Collection" -msgstr "" +msgstr "Collection" #: ../data/SettingsDialog.ui:331 ../lollypop/dialog_settings.py:245 msgid "Reset collection" -msgstr "" +msgstr "Reformar li collection" #: ../data/SettingsDialog.ui:370 msgid "Import settings" -msgstr "" +msgstr "Importar parametres" #: ../data/SettingsDialog.ui:377 msgid "Update music if files added to collection" @@ -706,7 +706,7 @@ #: ../data/SettingsDialog.ui:393 ../data/SettingsDialog.ui:431 msgid "You need to reset collection" -msgstr "" +msgstr "Vu deve reformar li collection" #: ../data/SettingsDialog.ui:394 msgid "Show compilations" @@ -720,7 +720,7 @@ #: ../data/SettingsDialog.ui:413 msgid "Import playlists" -msgstr "" +msgstr "Importar playlistes" #: ../data/SettingsDialog.ui:415 msgid "Search for playlists in your collection" @@ -728,38 +728,38 @@ #: ../data/SettingsDialog.ui:432 msgid "Import advanced tags" -msgstr "" +msgstr "Importar avansat tags" #: ../data/SettingsDialog.ui:434 msgid "Performers, composers, …" -msgstr "" +msgstr "Performantes, componistes, …" #: ../data/SettingsDialog.ui:452 msgid "Statistics" -msgstr "" +msgstr "Statistica" #: ../data/SettingsDialog.ui:483 msgid "Remove devices managed by Lollypop" -msgstr "" +msgstr "Remover aparates quel es geret de Lollypop" #: ../data/SettingsDialog.ui:484 ../lollypop/menu_artist.py:66 #: ../lollypop/menu_genre.py:53 ../lollypop/menu_objects.py:53 #: ../lollypop/menu_objects.py:90 ../lollypop/menu_playlist.py:68 msgid "Devices" -msgstr "" +msgstr "Aparates" #: ../data/SettingsDialog.ui:497 ../lollypop/shown.py:34 #: ../lollypop/toolbar_end.py:249 msgid "Web" -msgstr "" +msgstr "Web" #: ../data/SettingsDialog.ui:502 msgid "Status" -msgstr "" +msgstr "Statu" #: ../data/SettingsDialog.ui:507 msgid "Allow network access" -msgstr "" +msgstr "Permisser accesse al rete" #: ../data/SettingsDialog.ui:524 msgid "Background data" @@ -767,7 +767,7 @@ #: ../data/SettingsDialog.ui:526 msgid "Search artwork in background" -msgstr "" +msgstr "Serchar por images in funde" #: ../data/SettingsDialog.ui:547 msgid "Song playback" @@ -776,7 +776,7 @@ #: ../data/SettingsDialog.ui:558 ../data/SettingsDialog.ui:746 #: ../data/SettingsDialog.ui:828 ../data/SettingsDialog.ui:910 msgid "Enabled" -msgstr "" +msgstr "Activ" #: ../data/SettingsDialog.ui:575 msgid "Use a recent version of youtube-dl" @@ -784,7 +784,7 @@ #: ../data/SettingsDialog.ui:591 msgid "Google API-key" -msgstr "" +msgstr "Clave API de Google" #: ../data/SettingsDialog.ui:616 ../data/SettingsDialog.ui:773 #: ../data/SettingsDialog.ui:855 ../data/SettingsDialog.ui:952 @@ -802,7 +802,7 @@ #: ../data/SettingsDialog.ui:686 msgid "What is Invidious ?" -msgstr "" +msgstr "Quo es Invidious?" #: ../data/SettingsDialog.ui:735 msgid "Search (artwork, songs, ...)" @@ -810,49 +810,49 @@ #: ../data/SettingsDialog.ui:926 msgid "ListenBrainz API-Key" -msgstr "" +msgstr "Clave API de ListenBrainz" #: ../data/SettingsDialog.ui:998 ../lollypop/menu_playback.py:144 #: ../lollypop/menu_search.py:56 msgid "Deezer" -msgstr "" +msgstr "Deezer" #: ../data/SettingsDialog.ui:1015 ../lollypop/menu_search.py:72 msgid "Jamendo" -msgstr "" +msgstr "Jamendo" #: ../data/SettingsDialog.ui:1031 msgid "AudioDB" -msgstr "" +msgstr "AudioDB" #: ../data/SettingsDialog.ui:1048 ../lollypop/menu_playback.py:164 #: ../lollypop/menu_search.py:68 msgid "Spotify" -msgstr "" +msgstr "Spotify" #: ../data/SettingsDialog.ui:1065 msgid "FANART.TV" -msgstr "" +msgstr "FANART.TV" #: ../data/SettingsDialog.ui:1082 msgid "iTunes" -msgstr "" +msgstr "iTunes" #: ../data/SettingsDialog.ui:1099 msgid "Google" -msgstr "" +msgstr "Google" #: ../data/SettingsDialog.ui:1116 msgid "Startpage" -msgstr "" +msgstr "Startpage" #: ../data/SettingsDialog.ui:1133 msgid "DuckDuckGo" -msgstr "" +msgstr "DuckDuckGo" #: ../data/SettingsDialog.ui:1150 msgid "Wikipedia" -msgstr "" +msgstr "Wikipedia" #: ../data/SettingsDialog.ui:1172 ../lollypop/shown.py:35 msgid "Lyrics" @@ -860,44 +860,44 @@ #: ../data/SettingsDialog.ui:1177 msgid "Wikia" -msgstr "" +msgstr "Wikia" #: ../data/SettingsDialog.ui:1194 msgid "Genius" -msgstr "" +msgstr "Genius" #: ../data/SettingsDialog.ui:1211 msgid "Metro Lyrics" -msgstr "" +msgstr "Metro Lyrics" #: ../data/SettingsDialog.ui:1228 msgid "Bing" -msgstr "" +msgstr "Bing" #: ../data/Shortcuts.ui:13 msgctxt "shortcut window" msgid "General" -msgstr "" +msgstr "General" #: ../data/Shortcuts.ui:17 msgctxt "shortcut window" msgid "Settings" -msgstr "" +msgstr "Parametres" #: ../data/Shortcuts.ui:24 msgctxt "shortcut window" msgid "Search" -msgstr "" +msgstr "Sercha" #: ../data/Shortcuts.ui:31 msgctxt "shortcut window" msgid "Party mode" -msgstr "" +msgstr "Mode de festa" #: ../data/Shortcuts.ui:38 msgctxt "shortcut window" msgid "Show/Hide filter" -msgstr "" +msgstr "Monstrar/celar li filtre" #: ../data/Shortcuts.ui:45 msgctxt "shortcut window" @@ -907,77 +907,77 @@ #: ../data/Shortcuts.ui:52 msgctxt "shortcut window" msgid "Show equalizer" -msgstr "" +msgstr "Monstrar li equalisator" #: ../data/Shortcuts.ui:59 msgctxt "shortcut window" msgid "Show lyrics" -msgstr "" +msgstr "Monstrar li textu" #: ../data/Shortcuts.ui:66 msgctxt "shortcut window" msgid "Volume up" -msgstr "" +msgstr "Augmentar li volúmine" #: ../data/Shortcuts.ui:73 msgctxt "shortcut window" msgid "Volume down" -msgstr "" +msgstr "Diminuer li volúmine" #: ../data/Shortcuts.ui:80 msgctxt "shortcut window" msgid "Fullscreen" -msgstr "" +msgstr "Plen-ecran" #: ../data/Shortcuts.ui:87 msgctxt "shortcut window" msgid "Mini player" -msgstr "" +msgstr "Mini-reproductor" #: ../data/Shortcuts.ui:96 msgctxt "shortcut window" msgid "Playback" -msgstr "" +msgstr "Reproduction" #: ../data/Shortcuts.ui:100 msgctxt "shortcut window" msgid "Play" -msgstr "" +msgstr "Reproducter" #: ../data/Shortcuts.ui:107 msgctxt "shortcut window" msgid "Pause" -msgstr "" +msgstr "Pausar" #: ../data/Shortcuts.ui:114 msgctxt "shortcut window" msgid "Stop" -msgstr "" +msgstr "Stoppar" #: ../data/Shortcuts.ui:121 msgctxt "shortcut window" msgid "Next track" -msgstr "" +msgstr "Sequent track" #: ../data/Shortcuts.ui:128 msgctxt "shortcut window" msgid "Previous track" -msgstr "" +msgstr "Precedent track" #: ../data/Shortcuts.ui:135 msgctxt "shortcut window" msgid "Skip current album" -msgstr "" +msgstr "Omisser li actual album" #: ../data/Shortcuts.ui:142 msgctxt "shortcut window" msgid "Love current track" -msgstr "" +msgstr "Amar li actual track" #: ../data/Shortcuts.ui:149 msgctxt "shortcut window" msgid "Repeat track" -msgstr "" +msgstr "Repetir li track" #: ../data/Shortcuts.ui:156 msgctxt "shortcut window" @@ -996,39 +996,39 @@ #: ../data/SmartPlaylistView.ui:94 msgid "Limit to" -msgstr "" +msgstr "Limitar a" #: ../data/SmartPlaylistView.ui:121 msgid "tracks selected by" -msgstr "" +msgstr "tracks selectet de" #: ../data/SmartPlaylistView.ui:136 msgid "random" -msgstr "" +msgstr "hasardal" #: ../data/SmartPlaylistView.ui:137 msgid "album" -msgstr "" +msgstr "album" #: ../data/SmartPlaylistView.ui:138 msgid "artist" -msgstr "" +msgstr "artist" #: ../data/SmartPlaylistView.ui:139 msgid "year DESC" -msgstr "" +msgstr "annu DESC" #: ../data/SmartPlaylistView.ui:140 msgid "year ASC" -msgstr "" +msgstr "annu ASC" #: ../data/SmartPlaylistView.ui:141 msgid "duration DESC" -msgstr "" +msgstr "duration DESC" #: ../data/SmartPlaylistView.ui:142 msgid "duration ASC" -msgstr "" +msgstr "duration ASC" #: ../data/SmartPlaylistView.ui:184 msgid "Match music for " @@ -1036,19 +1036,19 @@ #: ../data/SmartPlaylistView.ui:210 msgid "all" -msgstr "" +msgstr "omni" #: ../data/SmartPlaylistView.ui:211 msgid "one" -msgstr "" +msgstr "un del" #: ../data/SmartPlaylistView.ui:226 msgid "of the following rules :" -msgstr "" +msgstr "sequent regules:" #: ../data/SmartPlaylistWidget.ui:28 msgid "Genre" -msgstr "" +msgstr "Genre" #: ../data/SmartPlaylistWidget.ui:29 ../lollypop/menu_objects.py:48 #: ../lollypop/menu_objects.py:114 @@ -1057,15 +1057,15 @@ #: ../data/SmartPlaylistWidget.ui:31 msgid "Rating" -msgstr "" +msgstr "Evaluation" #: ../data/SmartPlaylistWidget.ui:34 msgid "BPM" -msgstr "" +msgstr "BPM" #: ../data/ToolbarEnd.ui:7 msgid "Party mode" -msgstr "" +msgstr "Mode de festa" #: ../data/ToolbarEnd.ui:9 msgid "Enable party mode" @@ -1073,35 +1073,35 @@ #: ../data/ToolbarEnd.ui:13 msgid "Configure" -msgstr "" +msgstr "Configurar" #: ../data/ToolbarEnd.ui:17 msgid "Shuffle" -msgstr "" +msgstr "Mixter" #: ../data/ToolbarEnd.ui:24 msgid "Repetition" -msgstr "" +msgstr "Repetition" #: ../data/ToolbarEnd.ui:26 msgid "Continuous playback" -msgstr "" +msgstr "Continuosi reproduction" #: ../data/ToolbarEnd.ui:31 msgid "Automatic playback (similar)" -msgstr "" +msgstr "Automatic reproduction (simil)" #: ../data/ToolbarEnd.ui:36 msgid "Automatic playback (random)" -msgstr "" +msgstr "Automatic reproduction (hasardal)" #: ../data/ToolbarEnd.ui:41 msgid "Repeat track" -msgstr "" +msgstr "Repetir li track" #: ../data/ToolbarEnd.ui:46 msgid "Do not repeat" -msgstr "" +msgstr "Ne repetir" #: ../data/ToolbarEnd.ui:52 msgid "Scrobbling" @@ -1113,11 +1113,11 @@ #: ../data/ToolbarEnd.ui:96 msgid "Playback options" -msgstr "" +msgstr "Parametres de reproduction" #: ../data/TuneinPopover.ui:26 msgid "Go back" -msgstr "" +msgstr "Ear retro" #: ../data/TuneinPopover.ui:58 msgid "Go home" @@ -1140,7 +1140,7 @@ #: ../lollypop/assistant_flatpak.py:44 msgid "Update folders" -msgstr "" +msgstr "Actualisar li fólderes" #: ../lollypop/assistant_flatpak.py:46 msgid "" @@ -1157,7 +1157,7 @@ #: ../lollypop/assistant_musicbrainz.py:48 #: ../lollypop/assistant_musicbrainz.py:60 msgid "Back" -msgstr "" +msgstr "Retro" #: ../lollypop/assistant_flatpak.py:55 msgid "Preferences" @@ -1215,7 +1215,7 @@ #: ../lollypop/assistant_google.py:75 msgid "Copy the key" -msgstr "" +msgstr "Copiar li clave" #: ../lollypop/assistant_google.py:77 msgid "" @@ -1229,7 +1229,7 @@ #: ../lollypop/assistant_google.py:86 ../lollypop/assistant_lastfm.py:70 #: ../lollypop/assistant_musicbrainz.py:62 ../lollypop/assistant.py:151 msgid "Finish" -msgstr "" +msgstr "Finir" #: ../lollypop/assistant_lastfm.py:36 #, python-format @@ -1264,7 +1264,7 @@ #: ../lollypop/assistant_lastfm.py:62 msgid "Just play a track" -msgstr "" +msgstr "Solmen reproducter un track" #: ../lollypop/assistant_lastfm.py:64 msgid "" @@ -1285,7 +1285,7 @@ #: ../lollypop/assistant_musicbrainz.py:42 msgid "Connect to ListenBrainz" -msgstr "" +msgstr "Connexer a ListenBrainz" #: ../lollypop/assistant_musicbrainz.py:44 msgid "" @@ -1299,7 +1299,7 @@ #: ../lollypop/assistant_musicbrainz.py:54 msgid "Copy key" -msgstr "" +msgstr "Copiar li clave" #: ../lollypop/assistant_musicbrainz.py:56 msgid "" @@ -1315,18 +1315,18 @@ msgid "Resetting database" msgstr "" -#: ../lollypop/collection_scanner.py:504 +#: ../lollypop/collection_scanner.py:505 msgid "Scan disabled, missing collection" msgstr "" -#: ../lollypop/collection_scanner.py:797 ../lollypop/database_tracks.py:354 +#: ../lollypop/collection_scanner.py:800 ../lollypop/database_tracks.py:356 #: ../lollypop/tagreader.py:87 ../lollypop/tagreader.py:103 #: ../lollypop/tagreader.py:119 ../lollypop/tagreader.py:190 #: ../lollypop/tagreader.py:238 ../lollypop/tagreader.py:260 #: ../lollypop/tagreader.py:276 ../lollypop/tagreader.py:280 #: ../lollypop/tagreader.py:290 ../lollypop/tagreader.py:298 msgid "Unknown" -msgstr "" +msgstr "Ínconosset" #: ../lollypop/container_notification.py:96 msgid "Automatically download albums and artists artwork?" @@ -1334,7 +1334,7 @@ #: ../lollypop/container_notification.py:97 msgid "Yes" -msgstr "" +msgstr "Yes" #: ../lollypop/container_notification.py:106 msgid "Please consider a donation to the project" @@ -1344,17 +1344,17 @@ msgid "Many artists" msgstr "Multiplic artistes" -#: ../lollypop/database_upgrade.py:774 +#: ../lollypop/database_upgrade.py:775 msgid "Please wait while Lollypop is updating albums" msgstr "" -#: ../lollypop/database_upgrade.py:793 +#: ../lollypop/database_upgrade.py:794 msgid "Please wait while Lollypop is updating tracks" msgstr "" #: ../lollypop/dialog_apps.py:73 msgid "Select" -msgstr "" +msgstr "Selecter" #: ../lollypop/dialog_apps.py:81 msgid "Select an application" @@ -1363,21 +1363,21 @@ #: ../lollypop/dialog_settings.py:85 #, python-format msgid "Artists count: %s" -msgstr "" +msgstr "Númere de artistes: %s" #: ../lollypop/dialog_settings.py:87 #, python-format msgid "Albums count: %s" -msgstr "" +msgstr "Númere de albums: %s" #: ../lollypop/dialog_settings.py:89 #, python-format msgid "Tracks count: %s" -msgstr "" +msgstr "Númere de tracks: %s" #: ../lollypop/dialog_settings.py:206 ../lollypop/dialog_settings.py:341 msgid "Disconnect" -msgstr "" +msgstr "Desconexer" #: ../lollypop/dialog_settings.py:251 msgid "Are you sure?" @@ -1389,45 +1389,45 @@ #: ../lollypop/helper_web_wikipedia.py:117 msgid "band" -msgstr "" +msgstr "gruppe" #: ../lollypop/helper_web_wikipedia.py:117 msgid "singer" -msgstr "" +msgstr "cantator" #: ../lollypop/inhibitor.py:101 msgid "Playing music" -msgstr "" +msgstr "Reproductente musica" #: ../lollypop/menu_actions.py:58 msgid "Save in collection" -msgstr "" +msgstr "Gardar in li collection" #: ../lollypop/menu_actions.py:68 msgid "Remove from collection" -msgstr "" +msgstr "Remover ex li collection" #: ../lollypop/menu_actions.py:87 msgid "Buy this album" -msgstr "" +msgstr "Comprar ti album" #: ../lollypop/menu_actions.py:99 msgid "Open with…" -msgstr "" +msgstr "Aperter con…" #: ../lollypop/menu_artist.py:48 msgid "Show tracks" -msgstr "" +msgstr "Monstrar tracks" #: ../lollypop/menu_artist.py:56 msgid "Play featured" -msgstr "" +msgstr "Reproducter recomandat" #: ../lollypop/menu_artist.py:62 ../lollypop/menu_genre.py:44 #: ../lollypop/menu_objects.py:55 ../lollypop/menu_objects.py:118 #: ../lollypop/menu_playlist.py:66 msgid "Add to" -msgstr "" +msgstr "Adjunter a" #: ../lollypop/menu_artist.py:111 msgid "Available albums" @@ -1440,7 +1440,7 @@ #: ../lollypop/menu_current_albums.py:34 ../lollypop/menu_current_albums.py:43 #: ../lollypop/shown.py:40 ../lollypop/widgets_banner_current_albums.py:65 msgid "Playing albums" -msgstr "" +msgstr "Reproductent albums" #: ../lollypop/menu_current_albums.py:42 msgid "Create a new playlist" @@ -1448,29 +1448,29 @@ #: ../lollypop/menu_objects.py:66 msgid "Show album" -msgstr "" +msgstr "Monstrar li album" #: ../lollypop/menu_objects.py:70 ../lollypop/menu_objects.py:119 #: ../lollypop/menu_similars.py:167 msgid "Others" -msgstr "" +msgstr "Altris" #: ../lollypop/menu_objects.py:141 msgid "%Y-%m-%d" -msgstr "" +msgstr "%Y-%m-%d" #: ../lollypop/menu_objects.py:171 msgid "YouTube page address" -msgstr "" +msgstr "Adresse de págine YouTube" #: ../lollypop/menu_playback.py:57 ../lollypop/menu_playback.py:290 -#: ../lollypop/menu_playback.py:526 +#: ../lollypop/menu_playback.py:534 msgid "Play a radio" -msgstr "" +msgstr "Reproducter radio" #: ../lollypop/menu_playback.py:72 msgid "Add to playback" -msgstr "" +msgstr "Adjunter al reproduction" #: ../lollypop/menu_playback.py:79 ../lollypop/widgets_row_album.py:110 msgid "Remove from playback" @@ -1478,12 +1478,12 @@ #: ../lollypop/menu_playback.py:114 msgid "Related tracks" -msgstr "" +msgstr "Relatent tracks" #: ../lollypop/menu_playback.py:123 ../lollypop/playlists.py:107 #: ../lollypop/playlists.py:371 ../lollypop/shown.py:70 msgid "Loved tracks" -msgstr "" +msgstr "Amat tracks" #: ../lollypop/menu_playback.py:132 ../lollypop/shown.py:68 msgid "Popular tracks" @@ -1491,55 +1491,59 @@ #: ../lollypop/menu_playback.py:136 msgid "From collection" -msgstr "" +msgstr "Ex li collection" #: ../lollypop/menu_playback.py:154 ../lollypop/menu_search.py:60 msgid "Last.fm" -msgstr "" +msgstr "Last.fm" #: ../lollypop/menu_playback.py:168 ../lollypop/menu_suggestions.py:74 msgid "From the Web" -msgstr "" +msgstr "Ex li rete" #: ../lollypop/menu_playback.py:210 msgid "Play this playlist" -msgstr "" +msgstr "Reproducter ti playlist" #: ../lollypop/menu_playback.py:217 msgid "Add this playlist" -msgstr "" +msgstr "Adjunter ti playlist" #: ../lollypop/menu_playback.py:281 msgid "Play this artist" -msgstr "" +msgstr "Reproducter ti artist" #: ../lollypop/menu_playback.py:353 msgid "Play this genre" -msgstr "" +msgstr "Reproducter ti genre" #: ../lollypop/menu_playback.py:434 msgid "Play this decade" -msgstr "" +msgstr "Reproducter ti decennie" #: ../lollypop/menu_playback.py:517 ../lollypop/widgets_row_album.py:118 msgid "Play this album" -msgstr "" +msgstr "Reproducter ti album" -#: ../lollypop/menu_playback.py:644 +#: ../lollypop/menu_playback.py:529 ../lollypop/menu_playback.py:615 +msgid "Ignored" +msgstr "Ignorat" + +#: ../lollypop/menu_playback.py:672 msgid "Add to queue" msgstr "Adjunter al linea" -#: ../lollypop/menu_playback.py:650 +#: ../lollypop/menu_playback.py:678 msgid "Remove from queue" msgstr "Remover ex li linea" -#: ../lollypop/menu_playback.py:661 +#: ../lollypop/menu_playback.py:689 msgid "Do not stop after" -msgstr "" +msgstr "Ne stoppar pos" -#: ../lollypop/menu_playback.py:666 +#: ../lollypop/menu_playback.py:694 msgid "Stop after" -msgstr "" +msgstr "Stoppar pos" #: ../lollypop/menu_playlist.py:43 ../lollypop/menu_playlist.py:113 msgid "Save playlist" @@ -1547,19 +1551,19 @@ #: ../lollypop/menu_playlist.py:50 msgid "Sync from Last.FM" -msgstr "" +msgstr "Sincronisation con Last.fm" #: ../lollypop/menu_playlist.py:57 msgid "Manage smart playlist" -msgstr "" +msgstr "Gerer un automatic playlist" #: ../lollypop/menu_playlist.py:61 msgid "Remove playlist" -msgstr "" +msgstr "Remover li playlist" #: ../lollypop/menu_playlist.py:64 msgid "Playlist" -msgstr "" +msgstr "Playlist" #: ../lollypop/menu_playlist.py:70 msgid "Edit" @@ -1567,7 +1571,7 @@ #: ../lollypop/menu_playlist.py:100 msgid "Remove this playlist?" -msgstr "" +msgstr "Remover ti-ci playlist?" #: ../lollypop/menu_playlist.py:101 msgid "Confirm" @@ -1579,11 +1583,11 @@ #: ../lollypop/menu_search.py:33 ../lollypop/shown.py:39 msgid "Search" -msgstr "" +msgstr "Serchar" #: ../lollypop/menu_search.py:64 msgid "MusicBrainz" -msgstr "" +msgstr "MusicBrainz" #: ../lollypop/menu_selectionlist.py:50 msgid "Default on startup" @@ -1591,27 +1595,27 @@ #: ../lollypop/menu_selectionlist.py:53 msgid "Startup" -msgstr "" +msgstr "Al inicie" #: ../lollypop/menu_selectionlist.py:96 msgid "Sidebar" -msgstr "" +msgstr "Panel láteral" #: ../lollypop/menu_selectionlist.py:111 msgid "Show text" -msgstr "" +msgstr "Monstrar li textu" #: ../lollypop/menu_selectionlist.py:112 msgid "Options" -msgstr "" +msgstr "Parametres" #: ../lollypop/menu_selectionlist.py:137 msgid "Sections" -msgstr "" +msgstr "Sectiones" #: ../lollypop/menu_similars.py:140 ../lollypop/view_lyrics.py:132 msgid "Loading…" -msgstr "" +msgstr "Carga…" #: ../lollypop/menu_similars.py:175 msgid "Similar artists" @@ -1619,11 +1623,11 @@ #: ../lollypop/menu_similars.py:279 msgid "No results" -msgstr "" +msgstr "Null resultates" #: ../lollypop/menu_suggestions.py:35 ../lollypop/shown.py:24 msgid "Suggestions" -msgstr "" +msgstr "Suggestiones" #: ../lollypop/menu_suggestions.py:47 ../lollypop/view_suggestions.py:129 msgid "New releases on Spotify" @@ -1631,7 +1635,7 @@ #: ../lollypop/menu_suggestions.py:59 ../lollypop/view_suggestions.py:127 msgid "Suggestions from Spotify" -msgstr "" +msgstr "Suggestiones de Spotify" #: ../lollypop/menu_suggestions.py:71 ../lollypop/view_suggestions.py:131 msgid "Top albums on Deezer" @@ -1639,12 +1643,12 @@ #: ../lollypop/menu_sync.py:33 msgid "All devices" -msgstr "" +msgstr "Omni aparates" #: ../lollypop/player_albums.py:58 ../lollypop/player_albums.py:142 #: ../lollypop/player_albums.py:169 ../lollypop/player_albums.py:185 msgid "No album available" -msgstr "" +msgstr "Null album es disponibil" #: ../lollypop/player_bin.py:426 msgid "Can't find this track on YouTube" @@ -1668,7 +1672,7 @@ #: ../lollypop/shown.py:28 msgid "Recently added albums" -msgstr "" +msgstr "Recentmen adjuntet albums" #: ../lollypop/shown.py:29 msgid "Seldomly played albums" @@ -1680,23 +1684,23 @@ #: ../lollypop/shown.py:32 msgid "Genres" -msgstr "" +msgstr "Genres" #: ../lollypop/shown.py:33 msgid "Genres (list)" -msgstr "" +msgstr "Genres (liste)" #: ../lollypop/shown.py:37 ../lollypop/view_artists_line.py:165 msgid "Artists" -msgstr "" +msgstr "Artistes" #: ../lollypop/shown.py:38 msgid "Artists (list)" -msgstr "" +msgstr "Artistes (liste)" #: ../lollypop/shown.py:41 msgid "Information" -msgstr "" +msgstr "Information" #: ../lollypop/shown.py:42 msgid "Compilations" @@ -1720,7 +1724,7 @@ #: ../lollypop/shown.py:74 msgid "All tracks" -msgstr "" +msgstr "Omni tracks" #: ../lollypop/toolbar_end.py:246 msgid "All genres" @@ -1755,7 +1759,7 @@ #: ../lollypop/view_albums_box.py:193 msgid "New albums available" -msgstr "" +msgstr "Nov albums es disponibil" #: ../lollypop/view_albums_box.py:194 ../lollypop/view_artists_rounded.py:155 msgid "Refresh" @@ -1763,11 +1767,11 @@ #: ../lollypop/view_albums_line.py:164 msgid "Others compilations" -msgstr "" +msgstr "Altri compilationes" #: ../lollypop/view_albums_line.py:199 msgid "Appears on" -msgstr "" +msgstr "Apari in" #: ../lollypop/view_albums_line.py:230 msgid "Popular albums at the moment" @@ -1779,7 +1783,7 @@ #: ../lollypop/view_artists_rounded.py:154 msgid "New artists available" -msgstr "" +msgstr "Nov artistes es disponibil" #: ../lollypop/view_information.py:152 msgid "Loading information" @@ -1792,7 +1796,7 @@ #: ../lollypop/view_lyrics.py:105 ../lollypop/widgets_banner_lyrics.py:136 msgid "No track playing" -msgstr "" +msgstr "Null track es reproductet" #: ../lollypop/view_lyrics.py:269 msgid "You need to install python3-textblob module" @@ -1800,7 +1804,7 @@ #: ../lollypop/view_lyrics.py:274 msgid "Can't translate this lyrics" -msgstr "" +msgstr "Ne successat traducter ti textu" #: ../lollypop/view_lyrics.py:304 msgid "Disabled in network settings" @@ -1812,41 +1816,41 @@ #: ../lollypop/view.py:48 msgid "No items to show" -msgstr "" +msgstr "Null visibil elementes" #: ../lollypop/view_search.py:151 ../lollypop/view_search.py:161 #: ../lollypop/view_search.py:185 msgid "Search for artists, albums and tracks" -msgstr "" +msgstr "Serchar artistes, albums e tracks" #: ../lollypop/view_search.py:305 msgid "No results for this search" -msgstr "" +msgstr "Null resultates por ti-ci sercha" #: ../lollypop/view_suggestions.py:145 msgid "Welcome to Lollypop" -msgstr "" +msgstr "Benevenit a Lollypop" -#: ../lollypop/view_tracks_album.py:66 +#: ../lollypop/view_tracks_album.py:69 msgid "All tracks skipped" -msgstr "" +msgstr "Omni tracks omisset" -#: ../lollypop/view_tracks_album.py:237 +#: ../lollypop/view_tracks_album.py:327 #, python-format msgid "Disc %s" msgstr "Disco %s" #: ../lollypop/view_tracks_queue.py:36 msgid "Currently in queue" -msgstr "" +msgstr "In linea" #: ../lollypop/view_tracks_search.py:103 msgid "Tracks" -msgstr "" +msgstr "Tracks" #: ../lollypop/widgets_artwork_album.py:64 msgid "Local" -msgstr "" +msgstr "Local" #: ../lollypop/widgets_artwork.py:139 msgid "Select artwork" @@ -1854,7 +1858,12 @@ #: ../lollypop/widgets_artwork.py:179 msgid "Remove" -msgstr "" +msgstr "Remover" + +#: ../lollypop/widgets_banner_album.py:245 +#, python-format +msgid "Released on %s" +msgstr "Publicat ye %s" #: ../lollypop/widgets_banner_artist.py:298 msgid "Add to current playlist" @@ -1874,24 +1883,24 @@ #: ../lollypop/widgets_banner_today.py:71 msgid "Album of the day\n" -msgstr "" +msgstr "Album del die\n" #: ../lollypop/widgets_device.py:119 msgid "No synchronized albums" -msgstr "" +msgstr "Null sincronisat albums" #: ../lollypop/widgets_device.py:130 msgid "No synchronized playlists" -msgstr "" +msgstr "Null sincronisat playlistes" #: ../lollypop/widgets_equalizer.py:23 msgid "Default" -msgstr "" +msgstr "Predefinit" #: ../lollypop/widgets_equalizer.py:25 ../lollypop/widgets_equalizer.py:162 #: ../lollypop/widgets_equalizer.py:194 msgid "Custom" -msgstr "" +msgstr "Personalisat" #: ../lollypop/widgets_equalizer.py:28 msgid "Acoustic" @@ -1907,11 +1916,11 @@ #: ../lollypop/widgets_equalizer.py:35 msgid "Classical" -msgstr "" +msgstr "Classic" #: ../lollypop/widgets_equalizer.py:37 msgid "Club" -msgstr "" +msgstr "Club" #: ../lollypop/widgets_equalizer.py:39 msgid "Dance" @@ -1919,7 +1928,7 @@ #: ../lollypop/widgets_equalizer.py:41 msgid "Disco" -msgstr "" +msgstr "Disco" #: ../lollypop/widgets_equalizer.py:43 msgid "Drum'n'Bass" @@ -1931,7 +1940,7 @@ #: ../lollypop/widgets_equalizer.py:47 msgid "Jazz" -msgstr "" +msgstr "Jazz" #: ../lollypop/widgets_equalizer.py:49 msgid "Latin" @@ -1939,7 +1948,7 @@ #: ../lollypop/widgets_equalizer.py:51 msgid "Metal" -msgstr "" +msgstr "Metall" #: ../lollypop/widgets_equalizer.py:53 msgid "New Age" @@ -1955,30 +1964,26 @@ #: ../lollypop/widgets_equalizer.py:59 msgid "Reggae" -msgstr "" +msgstr "Reggae" #: ../lollypop/widgets_equalizer.py:61 msgid "Rock" -msgstr "" +msgstr "Rock" #: ../lollypop/widgets_equalizer.py:63 msgid "Techno" -msgstr "" +msgstr "Techno" #: ../lollypop/widgets_equalizer.py:65 msgid "Vocal" -msgstr "" - -#: ../lollypop/widgets_loved.py:107 -msgid "Allow playback" -msgstr "" +msgstr "Vocal" -#: ../lollypop/widgets_loved.py:112 +#: ../lollypop/widgets_loved.py:108 msgid "Like" -msgstr "" +msgstr "Amar" -#: ../lollypop/widgets_loved.py:117 -msgid "Disallow playback" +#: ../lollypop/widgets_loved.py:113 +msgid "Allow playback" msgstr "" #: ../lollypop/widgets_player_buttons.py:184 @@ -1987,27 +1992,27 @@ #: ../lollypop/widgets_playlist_smart.py:165 msgid "is equal to" -msgstr "" +msgstr "es egal a" #: ../lollypop/widgets_playlist_smart.py:166 msgid "is not equal to" -msgstr "" +msgstr "ne es egal a" #: ../lollypop/widgets_playlist_smart.py:168 msgid "contains " -msgstr "" +msgstr "contene " #: ../lollypop/widgets_playlist_smart.py:169 msgid "does not contain" -msgstr "" +msgstr "ne contene" #: ../lollypop/widgets_playlist_smart.py:171 msgid "is greater than" -msgstr "" +msgstr "es plu quam" #: ../lollypop/widgets_playlist_smart.py:172 msgid "is less than" -msgstr "" +msgstr "es minu quam" #: ../lollypop/widgets_rating.py:51 #, python-format @@ -2020,7 +2025,7 @@ #: ../lollypop/widgets_row_album.py:112 ../lollypop/widgets_row_track.py:107 msgid "Remove from playlist" -msgstr "" +msgstr "Remover ex li playlist" #~ msgid "Name" #~ msgstr "Nómine" diff -Nru lollypop-1.4.7.r90.g765cf1b3/subprojects/po/it.po lollypop-1.4.16.r6.ga09712088/subprojects/po/it.po --- lollypop-1.4.7.r90.g765cf1b3/subprojects/po/it.po 2020-12-28 23:00:16.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/subprojects/po/it.po 2021-02-25 23:00:22.000000000 +0000 @@ -16,8 +16,8 @@ msgstr "" "Project-Id-Version: lollypop\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-27 13:42+0100\n" -"PO-Revision-Date: 2020-10-10 11:26+0000\n" +"POT-Creation-Date: 2021-01-06 14:55+0100\n" +"PO-Revision-Date: 2021-01-18 17:32+0000\n" "Last-Translator: Gianluca Boiano \n" "Language-Team: Italian \n" @@ -26,7 +26,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.5-dev\n" #: ../data/org.gnome.Lollypop.gschema.xml:36 msgid "Window size" @@ -72,10 +72,12 @@ "Threshold used to decide if the previous track should be played or the " "currently running one should be restarted" msgstr "" +"Soglia utilizzata per decidere se riprodurre la traccia precedente o " +"riavviare quella attualmente in esecuzione" #: ../data/org.gnome.Lollypop.gschema.xml:81 msgid "Save artwork/popularity in tags" -msgstr "Salva immagine/popolarità nelle etichette" +msgstr "Salva grafica/popolarità nelle etichette" #: ../data/org.gnome.Lollypop.gschema.xml:86 msgid "Window maximized" @@ -155,7 +157,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:166 msgid "Favorite cover filename without extension" -msgstr "" +msgstr "Nome file di copertina preferito senza estensione" #: ../data/org.gnome.Lollypop.gschema.xml:167 #: ../data/org.gnome.Lollypop.gschema.xml:252 @@ -191,7 +193,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:196 ../data/SettingsDialog.ui:88 msgid "Show artist artwork" -msgstr "Mostra immagine dell'artista" +msgstr "Mostra grafica dell'artista" #: ../data/org.gnome.Lollypop.gschema.xml:201 msgid "Use dark GTK theme" @@ -260,7 +262,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:279 msgid "Enable PNG artwork cache" -msgstr "" +msgstr "Abilita cache grafica PNG" #: ../data/org.gnome.Lollypop.gschema.xml:289 msgid "Force single column mode" @@ -434,8 +436,8 @@ "perfettamente con l'ambiente desktop GNOME. Dispone, inoltre, di una " "modalità party adatta a selezionare automaticamente le playlist relative ad " "una festa; permette l'uso da remoto grazie alla modalità a schermo intero; " -"ottiene testi delle canzoni, copertine e biografie online; e fornisce " -"supporto nativo al ReplayGain." +"ottiene testi delle canzoni, grafica e biografie online; e fornisce supporto " +"nativo al ReplayGain." #: ../data/org.gnome.Lollypop.appdata.xml.in:13 msgid "Multiple Audio Formats –" @@ -459,7 +461,7 @@ #: ../data/org.gnome.Lollypop.desktop.in:13 msgid "Music;Player;Lollipop;" -msgstr "" +msgstr "Musica;Player;Lollypop;" #: ../data/org.gnome.Lollypop.desktop.in:23 msgid "Play/Pause" @@ -571,7 +573,7 @@ msgid "Synchronize" msgstr "Sincronizza" -#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:254 +#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:312 #: ../lollypop/widgets_player_buttons.py:188 msgid "Play" msgstr "Riproduci" @@ -619,11 +621,11 @@ #: ../data/SettingsDialog.ui:105 msgid "High quality artwork" -msgstr "" +msgstr "Grafica di alta qualità" #: ../data/SettingsDialog.ui:122 msgid "Artwork size" -msgstr "Dimensione copertina" +msgstr "Dimensione grafica" #: ../data/SettingsDialog.ui:139 ../lollypop/menu_actions.py:77 msgid "Clean cache" @@ -651,7 +653,7 @@ #: ../data/SettingsDialog.ui:196 msgid "Save artwork and rating to files" -msgstr "Salva immagini e gradimento nei file" +msgstr "Salva grafica e gradimento nei file" #: ../data/SettingsDialog.ui:213 msgid "Albums will be sorted by this field" @@ -804,7 +806,7 @@ #: ../data/SettingsDialog.ui:526 msgid "Search artwork in background" -msgstr "Cerca immagini in background" +msgstr "Cerca grafica in background" #: ../data/SettingsDialog.ui:547 msgid "Song playback" @@ -843,7 +845,7 @@ #: ../data/SettingsDialog.ui:735 msgid "Search (artwork, songs, ...)" -msgstr "Cerca (immagini, canzoni, ...)" +msgstr "Cerca (grafica, canzoni, ...)" #: ../data/SettingsDialog.ui:926 msgid "ListenBrainz API-Key" @@ -856,7 +858,7 @@ #: ../data/SettingsDialog.ui:1015 ../lollypop/menu_search.py:72 msgid "Jamendo" -msgstr "" +msgstr "Jamendo" #: ../data/SettingsDialog.ui:1031 msgid "AudioDB" @@ -905,11 +907,11 @@ #: ../data/SettingsDialog.ui:1211 msgid "Metro Lyrics" -msgstr "" +msgstr "Metro Lyrics" #: ../data/SettingsDialog.ui:1228 msgid "Bing" -msgstr "" +msgstr "Bing" #: ../data/Shortcuts.ui:13 msgctxt "shortcut window" @@ -1166,7 +1168,7 @@ #: ../lollypop/assistant_flatpak.py:31 msgid "Authorization needed" -msgstr "" +msgstr "Autorizzazione necessaria" #: ../lollypop/assistant_flatpak.py:33 msgid "" @@ -1174,10 +1176,13 @@ "In order to be able to access your collection,\n" "you need to allow Lollypop." msgstr "" +"\n" +"Per poter accedere alla tua raccolta,\n" +"devi consentirlo a Lollypop ." #: ../lollypop/assistant_flatpak.py:44 msgid "Update folders" -msgstr "" +msgstr "Aggiorna cartelle" #: ../lollypop/assistant_flatpak.py:46 msgid "" @@ -1187,6 +1192,11 @@ "- Remove all folders from collection\n" "- Then, add them again" msgstr "" +"\n" +"- Apri le Preferenze di Lollypop\n" +"- Vai alla scheda Musica \n" +"- Rimuovi tutte le cartelle dalla raccolta\n" +"- Quindi, aggiungile di nuovo" #: ../lollypop/assistant_flatpak.py:53 ../lollypop/assistant_google.py:52 #: ../lollypop/assistant_google.py:69 ../lollypop/assistant_google.py:84 @@ -1388,11 +1398,11 @@ msgid "Resetting database" msgstr "Azzeramento database" -#: ../lollypop/collection_scanner.py:504 +#: ../lollypop/collection_scanner.py:505 msgid "Scan disabled, missing collection" msgstr "Scansione disabilitata, collezione mancante" -#: ../lollypop/collection_scanner.py:797 ../lollypop/database_tracks.py:354 +#: ../lollypop/collection_scanner.py:800 ../lollypop/database_tracks.py:356 #: ../lollypop/tagreader.py:87 ../lollypop/tagreader.py:103 #: ../lollypop/tagreader.py:119 ../lollypop/tagreader.py:190 #: ../lollypop/tagreader.py:238 ../lollypop/tagreader.py:260 @@ -1403,7 +1413,7 @@ #: ../lollypop/container_notification.py:96 msgid "Automatically download albums and artists artwork?" -msgstr "Scaricare automaticamente immagini per album ed artisti?" +msgstr "Scaricare automaticamente grafica per album ed artisti?" #: ../lollypop/container_notification.py:97 msgid "Yes" @@ -1417,11 +1427,11 @@ msgid "Many artists" msgstr "Molti artisti" -#: ../lollypop/database_upgrade.py:774 +#: ../lollypop/database_upgrade.py:775 msgid "Please wait while Lollypop is updating albums" msgstr "Un po di pazienza. Lollypop sta aggiornando gli album" -#: ../lollypop/database_upgrade.py:793 +#: ../lollypop/database_upgrade.py:794 msgid "Please wait while Lollypop is updating tracks" msgstr "Un po di pazienza. Lollypop sta aggiornando le tracce" @@ -1508,7 +1518,7 @@ #: ../lollypop/menu_artwork.py:67 ../lollypop/menu_artwork.py:114 msgid "Change Artwork" -msgstr "Cambia Immagine" +msgstr "Cambia Grafica" #: ../lollypop/menu_current_albums.py:34 ../lollypop/menu_current_albums.py:43 #: ../lollypop/shown.py:40 ../lollypop/widgets_banner_current_albums.py:65 @@ -1521,7 +1531,7 @@ #: ../lollypop/menu_objects.py:66 msgid "Show album" -msgstr "" +msgstr "Mostra album" #: ../lollypop/menu_objects.py:70 ../lollypop/menu_objects.py:119 #: ../lollypop/menu_similars.py:167 @@ -1537,7 +1547,7 @@ msgstr "Indirizzo pagina YouTube" #: ../lollypop/menu_playback.py:57 ../lollypop/menu_playback.py:290 -#: ../lollypop/menu_playback.py:526 +#: ../lollypop/menu_playback.py:534 msgid "Play a radio" msgstr "Riproduci una radio" @@ -1598,19 +1608,23 @@ msgid "Play this album" msgstr "Riproduci questo album" -#: ../lollypop/menu_playback.py:644 +#: ../lollypop/menu_playback.py:529 ../lollypop/menu_playback.py:615 +msgid "Ignored" +msgstr "Ignorato" + +#: ../lollypop/menu_playback.py:672 msgid "Add to queue" msgstr "Aggiungi alla coda" -#: ../lollypop/menu_playback.py:650 +#: ../lollypop/menu_playback.py:678 msgid "Remove from queue" msgstr "Rimuovi dalla coda" -#: ../lollypop/menu_playback.py:661 +#: ../lollypop/menu_playback.py:689 msgid "Do not stop after" msgstr "Non fermare dopo" -#: ../lollypop/menu_playback.py:666 +#: ../lollypop/menu_playback.py:694 msgid "Stop after" msgstr "Ferma dopo" @@ -1789,7 +1803,7 @@ #: ../lollypop/shown.py:73 msgid "Skipped tracks" -msgstr "" +msgstr "Tracce saltate" #: ../lollypop/shown.py:74 msgid "All tracks" @@ -1900,18 +1914,18 @@ msgid "Welcome to Lollypop" msgstr "Benvenuto in Lollypop" -#: ../lollypop/view_tracks_album.py:66 +#: ../lollypop/view_tracks_album.py:69 msgid "All tracks skipped" msgstr "Tutte le tracce saltate" -#: ../lollypop/view_tracks_album.py:237 +#: ../lollypop/view_tracks_album.py:327 #, python-format msgid "Disc %s" msgstr "Disco %s" #: ../lollypop/view_tracks_queue.py:36 msgid "Currently in queue" -msgstr "" +msgstr "Attualmente in coda" #: ../lollypop/view_tracks_search.py:103 msgid "Tracks" @@ -1923,12 +1937,17 @@ #: ../lollypop/widgets_artwork.py:139 msgid "Select artwork" -msgstr "Seleziona immagine" +msgstr "Seleziona grafica" #: ../lollypop/widgets_artwork.py:179 msgid "Remove" msgstr "Rimuovi" +#: ../lollypop/widgets_banner_album.py:245 +#, python-format +msgid "Released on %s" +msgstr "Pubblicato il %s" + #: ../lollypop/widgets_banner_artist.py:298 msgid "Add to current playlist" msgstr "Aggiungi alla playlist attuale" @@ -2042,17 +2061,13 @@ msgid "Vocal" msgstr "Vocale" -#: ../lollypop/widgets_loved.py:107 -msgid "Allow playback" -msgstr "Permetti riproduzione" - -#: ../lollypop/widgets_loved.py:112 +#: ../lollypop/widgets_loved.py:108 msgid "Like" msgstr "Mi piace" -#: ../lollypop/widgets_loved.py:117 -msgid "Disallow playback" -msgstr "Rifiuta riproduzione" +#: ../lollypop/widgets_loved.py:113 +msgid "Allow playback" +msgstr "Permetti riproduzione" #: ../lollypop/widgets_player_buttons.py:184 msgid "Pause" @@ -2095,6 +2110,9 @@ msgid "Remove from playlist" msgstr "Rimuovi dalla scaletta" +#~ msgid "Disallow playback" +#~ msgstr "Rifiuta riproduzione" + #~ msgid "Show year below album name" #~ msgstr "Mostra anno sotto al nome dell'album" diff -Nru lollypop-1.4.7.r90.g765cf1b3/subprojects/po/ja.po lollypop-1.4.16.r6.ga09712088/subprojects/po/ja.po --- lollypop-1.4.7.r90.g765cf1b3/subprojects/po/ja.po 2020-12-28 23:00:16.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/subprojects/po/ja.po 2021-02-25 23:00:22.000000000 +0000 @@ -7,10 +7,10 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-27 13:42+0100\n" -"PO-Revision-Date: 2020-10-16 11:26+0000\n" -"Last-Translator: YAMADA Shinichirou \n" +"POT-Creation-Date: 2021-01-06 14:55+0100\n" +"PO-Revision-Date: 2021-01-11 13:32+0000\n" +"Last-Translator: YAMADA Shinichirou \n" "Language-Team: Japanese \n" "Language: ja\n" @@ -18,7 +18,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.3.1-dev\n" +"X-Generator: Weblate 4.4.1-dev\n" #: ../data/org.gnome.Lollypop.gschema.xml:36 msgid "Window size" @@ -64,6 +64,8 @@ "Threshold used to decide if the previous track should be played or the " "currently running one should be restarted" msgstr "" +"前のトラックを再生するか現在再生中のトラックを再生し直すかを決めるのに使用す" +"るしきい値" #: ../data/org.gnome.Lollypop.gschema.xml:81 msgid "Save artwork/popularity in tags" @@ -147,7 +149,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:166 msgid "Favorite cover filename without extension" -msgstr "" +msgstr "お気に入りのカバーのファイル名 (拡張子なし)" #: ../data/org.gnome.Lollypop.gschema.xml:167 #: ../data/org.gnome.Lollypop.gschema.xml:252 @@ -199,7 +201,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:216 msgid "Handle performers, compositors, ..." -msgstr "" +msgstr "次を処理: 演奏者, 作曲者, ..." #: ../data/org.gnome.Lollypop.gschema.xml:221 msgid "Show compilations in albums view" @@ -254,7 +256,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:279 msgid "Enable PNG artwork cache" -msgstr "" +msgstr "PNG のアートワークのキャッシュを有効化" #: ../data/org.gnome.Lollypop.gschema.xml:289 msgid "Force single column mode" @@ -453,6 +455,8 @@ #: ../data/org.gnome.Lollypop.desktop.in:13 msgid "Music;Player;Lollipop;" msgstr "" +"Music;Player;Lollipop;音楽;楽曲;曲;歌;ミュージック;プレイヤー;プレーヤー;再" +"生;" #: ../data/org.gnome.Lollypop.desktop.in:23 msgid "Play/Pause" @@ -564,7 +568,7 @@ msgid "Synchronize" msgstr "同期する" -#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:254 +#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:312 #: ../lollypop/widgets_player_buttons.py:188 msgid "Play" msgstr "再生" @@ -612,7 +616,7 @@ #: ../data/SettingsDialog.ui:105 msgid "High quality artwork" -msgstr "" +msgstr "高品質なアートワーク" #: ../data/SettingsDialog.ui:122 msgid "Artwork size" @@ -849,7 +853,7 @@ #: ../data/SettingsDialog.ui:1015 ../lollypop/menu_search.py:72 msgid "Jamendo" -msgstr "" +msgstr "Jamendo" #: ../data/SettingsDialog.ui:1031 msgid "AudioDB" @@ -898,11 +902,11 @@ #: ../data/SettingsDialog.ui:1211 msgid "Metro Lyrics" -msgstr "" +msgstr "メトロリリック" #: ../data/SettingsDialog.ui:1228 msgid "Bing" -msgstr "" +msgstr "Bing" #: ../data/Shortcuts.ui:13 msgctxt "shortcut window" @@ -1159,7 +1163,7 @@ #: ../lollypop/assistant_flatpak.py:31 msgid "Authorization needed" -msgstr "" +msgstr "認証が必要です" #: ../lollypop/assistant_flatpak.py:33 msgid "" @@ -1167,10 +1171,13 @@ "In order to be able to access your collection,\n" "you need to allow Lollypop." msgstr "" +"\n" +"Lollypop がコレクションに\n" +"アクセスするのを許可する必要があります。" #: ../lollypop/assistant_flatpak.py:44 msgid "Update folders" -msgstr "" +msgstr "フォルダーの更新" #: ../lollypop/assistant_flatpak.py:46 msgid "" @@ -1180,6 +1187,11 @@ "- Remove all folders from collection\n" "- Then, add them again" msgstr "" +"\n" +"- Lollypop の設定開きます\n" +"- 音楽タブをクリックします\n" +"- コレクションのすべてのフォルダーを削除します\n" +"- その後、フォルダーを追加し直します" #: ../lollypop/assistant_flatpak.py:53 ../lollypop/assistant_google.py:52 #: ../lollypop/assistant_google.py:69 ../lollypop/assistant_google.py:84 @@ -1373,11 +1385,11 @@ msgid "Resetting database" msgstr "データベースをリセット中" -#: ../lollypop/collection_scanner.py:504 +#: ../lollypop/collection_scanner.py:505 msgid "Scan disabled, missing collection" msgstr "コレクションがないためスキャンは無効です" -#: ../lollypop/collection_scanner.py:797 ../lollypop/database_tracks.py:354 +#: ../lollypop/collection_scanner.py:800 ../lollypop/database_tracks.py:356 #: ../lollypop/tagreader.py:87 ../lollypop/tagreader.py:103 #: ../lollypop/tagreader.py:119 ../lollypop/tagreader.py:190 #: ../lollypop/tagreader.py:238 ../lollypop/tagreader.py:260 @@ -1402,11 +1414,11 @@ msgid "Many artists" msgstr "多くのアーティスト" -#: ../lollypop/database_upgrade.py:774 +#: ../lollypop/database_upgrade.py:775 msgid "Please wait while Lollypop is updating albums" msgstr "Lollypop がアルバムを更新しているためお待ちください" -#: ../lollypop/database_upgrade.py:793 +#: ../lollypop/database_upgrade.py:794 msgid "Please wait while Lollypop is updating tracks" msgstr "Lollypop がトラックを更新しているためお待ちください" @@ -1506,7 +1518,7 @@ #: ../lollypop/menu_objects.py:66 msgid "Show album" -msgstr "" +msgstr "アルバムを表示" #: ../lollypop/menu_objects.py:70 ../lollypop/menu_objects.py:119 #: ../lollypop/menu_similars.py:167 @@ -1522,7 +1534,7 @@ msgstr "YouTube のアドレス" #: ../lollypop/menu_playback.py:57 ../lollypop/menu_playback.py:290 -#: ../lollypop/menu_playback.py:526 +#: ../lollypop/menu_playback.py:534 msgid "Play a radio" msgstr "ラジオを再生" @@ -1583,19 +1595,23 @@ msgid "Play this album" msgstr "このアルバムを再生" -#: ../lollypop/menu_playback.py:644 +#: ../lollypop/menu_playback.py:529 ../lollypop/menu_playback.py:615 +msgid "Ignored" +msgstr "無視" + +#: ../lollypop/menu_playback.py:672 msgid "Add to queue" msgstr "キューに追加" -#: ../lollypop/menu_playback.py:650 +#: ../lollypop/menu_playback.py:678 msgid "Remove from queue" msgstr "キューから削除" -#: ../lollypop/menu_playback.py:661 +#: ../lollypop/menu_playback.py:689 msgid "Do not stop after" msgstr "この曲で止めない" -#: ../lollypop/menu_playback.py:666 +#: ../lollypop/menu_playback.py:694 msgid "Stop after" msgstr "この曲で止める" @@ -1774,7 +1790,7 @@ #: ../lollypop/shown.py:73 msgid "Skipped tracks" -msgstr "" +msgstr "スキップしたトラック" #: ../lollypop/shown.py:74 msgid "All tracks" @@ -1885,18 +1901,18 @@ msgid "Welcome to Lollypop" msgstr "Lollypop へようこそ" -#: ../lollypop/view_tracks_album.py:66 +#: ../lollypop/view_tracks_album.py:69 msgid "All tracks skipped" msgstr "すべてのトラックをスキップしました" -#: ../lollypop/view_tracks_album.py:237 +#: ../lollypop/view_tracks_album.py:327 #, python-format msgid "Disc %s" msgstr "ディスク %s" #: ../lollypop/view_tracks_queue.py:36 msgid "Currently in queue" -msgstr "" +msgstr "現在のキュー" #: ../lollypop/view_tracks_search.py:103 msgid "Tracks" @@ -1914,6 +1930,11 @@ msgid "Remove" msgstr "削除" +#: ../lollypop/widgets_banner_album.py:245 +#, python-format +msgid "Released on %s" +msgstr "%s リリース" + #: ../lollypop/widgets_banner_artist.py:298 msgid "Add to current playlist" msgstr "現在のプレイリストに追加" @@ -2027,17 +2048,13 @@ msgid "Vocal" msgstr "ボーカル" -#: ../lollypop/widgets_loved.py:107 -msgid "Allow playback" -msgstr "再生を許可" - -#: ../lollypop/widgets_loved.py:112 +#: ../lollypop/widgets_loved.py:108 msgid "Like" msgstr "スキ" -#: ../lollypop/widgets_loved.py:117 -msgid "Disallow playback" -msgstr "再生を禁止" +#: ../lollypop/widgets_loved.py:113 +msgid "Allow playback" +msgstr "再生を許可" #: ../lollypop/widgets_player_buttons.py:184 msgid "Pause" @@ -2080,6 +2097,9 @@ msgid "Remove from playlist" msgstr "プレイリストから削除" +#~ msgid "Disallow playback" +#~ msgstr "再生を禁止" + #~ msgid "Show year below album name" #~ msgstr "アルバム名の下に制作年を表示" diff -Nru lollypop-1.4.7.r90.g765cf1b3/subprojects/po/ka.po lollypop-1.4.16.r6.ga09712088/subprojects/po/ka.po --- lollypop-1.4.7.r90.g765cf1b3/subprojects/po/ka.po 2020-12-28 23:00:16.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/subprojects/po/ka.po 2021-02-25 23:00:22.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: lollypop\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-27 13:42+0100\n" +"POT-Creation-Date: 2021-01-06 14:55+0100\n" "PO-Revision-Date: 2017-11-27 14:00+0000\n" "Last-Translator: Cédric Bellegarde \n" "Language-Team: Georgian (http://www.transifex.com/gnumdk/lollypop/language/" @@ -536,7 +536,7 @@ msgid "Synchronize" msgstr "" -#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:254 +#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:312 #: ../lollypop/widgets_player_buttons.py:188 msgid "Play" msgstr "" @@ -1315,11 +1315,11 @@ msgid "Resetting database" msgstr "" -#: ../lollypop/collection_scanner.py:504 +#: ../lollypop/collection_scanner.py:505 msgid "Scan disabled, missing collection" msgstr "" -#: ../lollypop/collection_scanner.py:797 ../lollypop/database_tracks.py:354 +#: ../lollypop/collection_scanner.py:800 ../lollypop/database_tracks.py:356 #: ../lollypop/tagreader.py:87 ../lollypop/tagreader.py:103 #: ../lollypop/tagreader.py:119 ../lollypop/tagreader.py:190 #: ../lollypop/tagreader.py:238 ../lollypop/tagreader.py:260 @@ -1344,11 +1344,11 @@ msgid "Many artists" msgstr "" -#: ../lollypop/database_upgrade.py:774 +#: ../lollypop/database_upgrade.py:775 msgid "Please wait while Lollypop is updating albums" msgstr "" -#: ../lollypop/database_upgrade.py:793 +#: ../lollypop/database_upgrade.py:794 msgid "Please wait while Lollypop is updating tracks" msgstr "" @@ -1464,7 +1464,7 @@ msgstr "" #: ../lollypop/menu_playback.py:57 ../lollypop/menu_playback.py:290 -#: ../lollypop/menu_playback.py:526 +#: ../lollypop/menu_playback.py:534 msgid "Play a radio" msgstr "" @@ -1525,19 +1525,23 @@ msgid "Play this album" msgstr "" -#: ../lollypop/menu_playback.py:644 +#: ../lollypop/menu_playback.py:529 ../lollypop/menu_playback.py:615 +msgid "Ignored" +msgstr "" + +#: ../lollypop/menu_playback.py:672 msgid "Add to queue" msgstr "" -#: ../lollypop/menu_playback.py:650 +#: ../lollypop/menu_playback.py:678 msgid "Remove from queue" msgstr "" -#: ../lollypop/menu_playback.py:661 +#: ../lollypop/menu_playback.py:689 msgid "Do not stop after" msgstr "" -#: ../lollypop/menu_playback.py:666 +#: ../lollypop/menu_playback.py:694 msgid "Stop after" msgstr "" @@ -1827,11 +1831,11 @@ msgid "Welcome to Lollypop" msgstr "" -#: ../lollypop/view_tracks_album.py:66 +#: ../lollypop/view_tracks_album.py:69 msgid "All tracks skipped" msgstr "" -#: ../lollypop/view_tracks_album.py:237 +#: ../lollypop/view_tracks_album.py:327 #, python-format msgid "Disc %s" msgstr "" @@ -1856,6 +1860,11 @@ msgid "Remove" msgstr "" +#: ../lollypop/widgets_banner_album.py:245 +#, python-format +msgid "Released on %s" +msgstr "" + #: ../lollypop/widgets_banner_artist.py:298 msgid "Add to current playlist" msgstr "" @@ -1969,16 +1978,12 @@ msgid "Vocal" msgstr "" -#: ../lollypop/widgets_loved.py:107 -msgid "Allow playback" -msgstr "" - -#: ../lollypop/widgets_loved.py:112 +#: ../lollypop/widgets_loved.py:108 msgid "Like" msgstr "" -#: ../lollypop/widgets_loved.py:117 -msgid "Disallow playback" +#: ../lollypop/widgets_loved.py:113 +msgid "Allow playback" msgstr "" #: ../lollypop/widgets_player_buttons.py:184 diff -Nru lollypop-1.4.7.r90.g765cf1b3/subprojects/po/ko.po lollypop-1.4.16.r6.ga09712088/subprojects/po/ko.po --- lollypop-1.4.7.r90.g765cf1b3/subprojects/po/ko.po 2020-12-28 23:00:16.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/subprojects/po/ko.po 2021-02-25 23:00:22.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-27 13:42+0100\n" +"POT-Creation-Date: 2021-01-06 14:55+0100\n" "PO-Revision-Date: 2020-06-14 11:41+0000\n" "Last-Translator: MarongHappy \n" "Language-Team: Korean \n" "Language-Team: LANGUAGE \n" @@ -534,7 +534,7 @@ msgid "Synchronize" msgstr "" -#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:254 +#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:312 #: ../lollypop/widgets_player_buttons.py:188 msgid "Play" msgstr "" @@ -1313,11 +1313,11 @@ msgid "Resetting database" msgstr "" -#: ../lollypop/collection_scanner.py:504 +#: ../lollypop/collection_scanner.py:505 msgid "Scan disabled, missing collection" msgstr "" -#: ../lollypop/collection_scanner.py:797 ../lollypop/database_tracks.py:354 +#: ../lollypop/collection_scanner.py:800 ../lollypop/database_tracks.py:356 #: ../lollypop/tagreader.py:87 ../lollypop/tagreader.py:103 #: ../lollypop/tagreader.py:119 ../lollypop/tagreader.py:190 #: ../lollypop/tagreader.py:238 ../lollypop/tagreader.py:260 @@ -1342,11 +1342,11 @@ msgid "Many artists" msgstr "" -#: ../lollypop/database_upgrade.py:774 +#: ../lollypop/database_upgrade.py:775 msgid "Please wait while Lollypop is updating albums" msgstr "" -#: ../lollypop/database_upgrade.py:793 +#: ../lollypop/database_upgrade.py:794 msgid "Please wait while Lollypop is updating tracks" msgstr "" @@ -1462,7 +1462,7 @@ msgstr "" #: ../lollypop/menu_playback.py:57 ../lollypop/menu_playback.py:290 -#: ../lollypop/menu_playback.py:526 +#: ../lollypop/menu_playback.py:534 msgid "Play a radio" msgstr "" @@ -1523,19 +1523,23 @@ msgid "Play this album" msgstr "" -#: ../lollypop/menu_playback.py:644 +#: ../lollypop/menu_playback.py:529 ../lollypop/menu_playback.py:615 +msgid "Ignored" +msgstr "" + +#: ../lollypop/menu_playback.py:672 msgid "Add to queue" msgstr "" -#: ../lollypop/menu_playback.py:650 +#: ../lollypop/menu_playback.py:678 msgid "Remove from queue" msgstr "" -#: ../lollypop/menu_playback.py:661 +#: ../lollypop/menu_playback.py:689 msgid "Do not stop after" msgstr "" -#: ../lollypop/menu_playback.py:666 +#: ../lollypop/menu_playback.py:694 msgid "Stop after" msgstr "" @@ -1825,11 +1829,11 @@ msgid "Welcome to Lollypop" msgstr "" -#: ../lollypop/view_tracks_album.py:66 +#: ../lollypop/view_tracks_album.py:69 msgid "All tracks skipped" msgstr "" -#: ../lollypop/view_tracks_album.py:237 +#: ../lollypop/view_tracks_album.py:327 #, python-format msgid "Disc %s" msgstr "" @@ -1854,6 +1858,11 @@ msgid "Remove" msgstr "" +#: ../lollypop/widgets_banner_album.py:245 +#, python-format +msgid "Released on %s" +msgstr "" + #: ../lollypop/widgets_banner_artist.py:298 msgid "Add to current playlist" msgstr "" @@ -1967,16 +1976,12 @@ msgid "Vocal" msgstr "" -#: ../lollypop/widgets_loved.py:107 -msgid "Allow playback" -msgstr "" - -#: ../lollypop/widgets_loved.py:112 +#: ../lollypop/widgets_loved.py:108 msgid "Like" msgstr "" -#: ../lollypop/widgets_loved.py:117 -msgid "Disallow playback" +#: ../lollypop/widgets_loved.py:113 +msgid "Allow playback" msgstr "" #: ../lollypop/widgets_player_buttons.py:184 diff -Nru lollypop-1.4.7.r90.g765cf1b3/subprojects/po/lt.po lollypop-1.4.16.r6.ga09712088/subprojects/po/lt.po --- lollypop-1.4.7.r90.g765cf1b3/subprojects/po/lt.po 2020-12-28 23:00:16.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/subprojects/po/lt.po 2021-02-25 23:00:22.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: lollypop\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-27 13:42+0100\n" +"POT-Creation-Date: 2021-01-06 14:55+0100\n" "PO-Revision-Date: 2020-11-24 04:28+0000\n" "Last-Translator: Moo \n" "Language-Team: Lithuanian \n" "Language-Team: Norwegian Bokmål \n" "Language-Team: Flemish \n" "Language-Team: Dutch \n" @@ -93,7 +93,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:96 ../lollypop/menu_search.py:40 msgid "Search on the Web" -msgstr "Zoeken op het web" +msgstr "Zoeken op internet" #: ../data/org.gnome.Lollypop.gschema.xml:101 msgid "Shown suggestions" @@ -370,7 +370,7 @@ #: ../data/AboutDialog.ui.in:28 msgctxt "Add your names here, do not remove previous names!" msgid "translator1, translator2, ..." -msgstr "Heimen Stoffels" +msgstr "Heimen Stoffels " #: ../data/AboutDialog.ui.in:29 msgid "" @@ -573,7 +573,7 @@ msgid "Synchronize" msgstr "Synchroniseren" -#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:254 +#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:312 #: ../lollypop/widgets_player_buttons.py:188 msgid "Play" msgstr "Afspelen" @@ -743,7 +743,7 @@ #: ../data/SettingsDialog.ui:393 ../data/SettingsDialog.ui:431 msgid "You need to reset collection" -msgstr "Je dient je verzameling opnieuw in te stellen" +msgstr "Je verzameling moet opnieuw worden ingesteld" #: ../data/SettingsDialog.ui:394 msgid "Show compilations" @@ -907,7 +907,7 @@ #: ../data/SettingsDialog.ui:1211 msgid "Metro Lyrics" -msgstr "Metro Lyrics" +msgstr "MetroLyrics" #: ../data/SettingsDialog.ui:1228 msgid "Bing" @@ -1399,11 +1399,11 @@ msgid "Resetting database" msgstr "Bezig met herstellen van databank" -#: ../lollypop/collection_scanner.py:504 +#: ../lollypop/collection_scanner.py:505 msgid "Scan disabled, missing collection" msgstr "Scannen is uitgeschakeld: verzameling ontbreekt" -#: ../lollypop/collection_scanner.py:797 ../lollypop/database_tracks.py:354 +#: ../lollypop/collection_scanner.py:800 ../lollypop/database_tracks.py:356 #: ../lollypop/tagreader.py:87 ../lollypop/tagreader.py:103 #: ../lollypop/tagreader.py:119 ../lollypop/tagreader.py:190 #: ../lollypop/tagreader.py:238 ../lollypop/tagreader.py:260 @@ -1428,13 +1428,13 @@ msgid "Many artists" msgstr "Meerdere artiesten" -#: ../lollypop/database_upgrade.py:774 +#: ../lollypop/database_upgrade.py:775 msgid "Please wait while Lollypop is updating albums" -msgstr "Bezig met bijwerken van albums; even geduld..." +msgstr "Bezig met bijwerken van albums..." -#: ../lollypop/database_upgrade.py:793 +#: ../lollypop/database_upgrade.py:794 msgid "Please wait while Lollypop is updating tracks" -msgstr "Bezig met bijwerken van nummers; even geduld..." +msgstr "Bezig met bijwerken van nummers..." #: ../lollypop/dialog_apps.py:73 msgid "Select" @@ -1548,7 +1548,7 @@ msgstr "YouTube-adres" #: ../lollypop/menu_playback.py:57 ../lollypop/menu_playback.py:290 -#: ../lollypop/menu_playback.py:526 +#: ../lollypop/menu_playback.py:534 msgid "Play a radio" msgstr "Radiostation beluisteren" @@ -1609,19 +1609,23 @@ msgid "Play this album" msgstr "Album afspelen" -#: ../lollypop/menu_playback.py:644 +#: ../lollypop/menu_playback.py:529 ../lollypop/menu_playback.py:615 +msgid "Ignored" +msgstr "Genegeerd" + +#: ../lollypop/menu_playback.py:672 msgid "Add to queue" msgstr "Toevoegen aan wachtrij" -#: ../lollypop/menu_playback.py:650 +#: ../lollypop/menu_playback.py:678 msgid "Remove from queue" msgstr "Verwijderen uit wachtrij" -#: ../lollypop/menu_playback.py:661 +#: ../lollypop/menu_playback.py:689 msgid "Do not stop after" msgstr "Niet stoppen na" -#: ../lollypop/menu_playback.py:666 +#: ../lollypop/menu_playback.py:694 msgid "Stop after" msgstr "Stoppen na" @@ -1911,11 +1915,11 @@ msgid "Welcome to Lollypop" msgstr "Welkom bij Lollypop" -#: ../lollypop/view_tracks_album.py:66 +#: ../lollypop/view_tracks_album.py:69 msgid "All tracks skipped" msgstr "Alle nummers zijn overgeslagen" -#: ../lollypop/view_tracks_album.py:237 +#: ../lollypop/view_tracks_album.py:327 #, python-format msgid "Disc %s" msgstr "Schijf %s" @@ -1940,6 +1944,11 @@ msgid "Remove" msgstr "Verwijderen" +#: ../lollypop/widgets_banner_album.py:245 +#, python-format +msgid "Released on %s" +msgstr "Uitgebracht op %s" + #: ../lollypop/widgets_banner_artist.py:298 msgid "Add to current playlist" msgstr "Toevoegen aan huidige afspeellijst" @@ -2053,17 +2062,13 @@ msgid "Vocal" msgstr "Vocaal" -#: ../lollypop/widgets_loved.py:107 -msgid "Allow playback" -msgstr "Afspelen toestaan" - -#: ../lollypop/widgets_loved.py:112 +#: ../lollypop/widgets_loved.py:108 msgid "Like" msgstr "Vind ik leuk" -#: ../lollypop/widgets_loved.py:117 -msgid "Disallow playback" -msgstr "Afspelen niet toestaan" +#: ../lollypop/widgets_loved.py:113 +msgid "Allow playback" +msgstr "Afspelen toestaan" #: ../lollypop/widgets_player_buttons.py:184 msgid "Pause" @@ -2106,6 +2111,9 @@ msgid "Remove from playlist" msgstr "Verwijderen van afspeellijst" +#~ msgid "Disallow playback" +#~ msgstr "Afspelen niet toestaan" + #~ msgid "Actually in queue" #~ msgstr "Reeds in wachtrij" diff -Nru lollypop-1.4.7.r90.g765cf1b3/subprojects/po/pl.po lollypop-1.4.16.r6.ga09712088/subprojects/po/pl.po --- lollypop-1.4.7.r90.g765cf1b3/subprojects/po/pl.po 2020-12-28 23:00:16.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/subprojects/po/pl.po 2021-02-25 23:00:22.000000000 +0000 @@ -15,7 +15,7 @@ msgstr "" "Project-Id-Version: lollypop\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-27 13:42+0100\n" +"POT-Creation-Date: 2021-01-06 14:55+0100\n" "PO-Revision-Date: 2020-06-18 16:41+0000\n" "Last-Translator: Tomasz Małota \n" "Language-Team: Polish \n" "Language-Team: Portuguese (Brazil) \n" @@ -574,7 +574,7 @@ msgid "Synchronize" msgstr "Sincronizar" -#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:254 +#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:312 #: ../lollypop/widgets_player_buttons.py:188 msgid "Play" msgstr "Reproduzir" @@ -744,7 +744,7 @@ #: ../data/SettingsDialog.ui:393 ../data/SettingsDialog.ui:431 msgid "You need to reset collection" -msgstr "Você precisa redefinir a coleção" +msgstr "Você precisa reiniciar a coleção" #: ../data/SettingsDialog.ui:394 msgid "Show compilations" @@ -1169,7 +1169,7 @@ #: ../lollypop/assistant_flatpak.py:31 msgid "Authorization needed" -msgstr "" +msgstr "Necessário Autorização" #: ../lollypop/assistant_flatpak.py:33 msgid "" @@ -1177,10 +1177,13 @@ "In order to be able to access your collection,\n" "you need to allow Lollypop." msgstr "" +"\n" +"Para poder acessar sua coleção,\n" +"você precisa permitirLollypop." #: ../lollypop/assistant_flatpak.py:44 msgid "Update folders" -msgstr "" +msgstr "Pastas de Atualização" #: ../lollypop/assistant_flatpak.py:46 msgid "" @@ -1190,6 +1193,11 @@ "- Remove all folders from collection\n" "- Then, add them again" msgstr "" +"\n" +"- Abrir Lollypop preferências\n" +"- Ir para a Música aba\n" +"- Remover todas as pastas da coleção\n" +"- Então, adic elas novamente" #: ../lollypop/assistant_flatpak.py:53 ../lollypop/assistant_google.py:52 #: ../lollypop/assistant_google.py:69 ../lollypop/assistant_google.py:84 @@ -1391,11 +1399,11 @@ msgid "Resetting database" msgstr "Reiniciando base de dados" -#: ../lollypop/collection_scanner.py:504 +#: ../lollypop/collection_scanner.py:505 msgid "Scan disabled, missing collection" msgstr "Verificação desativada, coleção ausente" -#: ../lollypop/collection_scanner.py:797 ../lollypop/database_tracks.py:354 +#: ../lollypop/collection_scanner.py:800 ../lollypop/database_tracks.py:356 #: ../lollypop/tagreader.py:87 ../lollypop/tagreader.py:103 #: ../lollypop/tagreader.py:119 ../lollypop/tagreader.py:190 #: ../lollypop/tagreader.py:238 ../lollypop/tagreader.py:260 @@ -1420,11 +1428,11 @@ msgid "Many artists" msgstr "Vários artistas" -#: ../lollypop/database_upgrade.py:774 +#: ../lollypop/database_upgrade.py:775 msgid "Please wait while Lollypop is updating albums" msgstr "Por favor, aguarde enquanto o Lollypop atualiza os álbuns" -#: ../lollypop/database_upgrade.py:793 +#: ../lollypop/database_upgrade.py:794 msgid "Please wait while Lollypop is updating tracks" msgstr "Por favor, aguarde enquanto o Lollypop atualiza as faixas" @@ -1540,7 +1548,7 @@ msgstr "Endereço na página do Youtube" #: ../lollypop/menu_playback.py:57 ../lollypop/menu_playback.py:290 -#: ../lollypop/menu_playback.py:526 +#: ../lollypop/menu_playback.py:534 msgid "Play a radio" msgstr "Tocar uma rádio" @@ -1601,19 +1609,23 @@ msgid "Play this album" msgstr "Tocar este álbum" -#: ../lollypop/menu_playback.py:644 +#: ../lollypop/menu_playback.py:529 ../lollypop/menu_playback.py:615 +msgid "Ignored" +msgstr "Ignorado" + +#: ../lollypop/menu_playback.py:672 msgid "Add to queue" msgstr "Adicionar à fila" -#: ../lollypop/menu_playback.py:650 +#: ../lollypop/menu_playback.py:678 msgid "Remove from queue" msgstr "Remover da fila" -#: ../lollypop/menu_playback.py:661 +#: ../lollypop/menu_playback.py:689 msgid "Do not stop after" msgstr "Não parar depois" -#: ../lollypop/menu_playback.py:666 +#: ../lollypop/menu_playback.py:694 msgid "Stop after" msgstr "Parar depois" @@ -1903,18 +1915,18 @@ msgid "Welcome to Lollypop" msgstr "Bem Vindo ao Lollypop" -#: ../lollypop/view_tracks_album.py:66 +#: ../lollypop/view_tracks_album.py:69 msgid "All tracks skipped" msgstr "Ignorar todas as faixas" -#: ../lollypop/view_tracks_album.py:237 +#: ../lollypop/view_tracks_album.py:327 #, python-format msgid "Disc %s" msgstr "Disco %s" #: ../lollypop/view_tracks_queue.py:36 msgid "Currently in queue" -msgstr "" +msgstr "Atualmente na fila" #: ../lollypop/view_tracks_search.py:103 msgid "Tracks" @@ -1932,6 +1944,11 @@ msgid "Remove" msgstr "Remover" +#: ../lollypop/widgets_banner_album.py:245 +#, python-format +msgid "Released on %s" +msgstr "Liberado em %s" + #: ../lollypop/widgets_banner_artist.py:298 msgid "Add to current playlist" msgstr "Adic. à lista atual" @@ -2045,17 +2062,13 @@ msgid "Vocal" msgstr "Voz" -#: ../lollypop/widgets_loved.py:107 -msgid "Allow playback" -msgstr "Permitir reprodução" - -#: ../lollypop/widgets_loved.py:112 +#: ../lollypop/widgets_loved.py:108 msgid "Like" msgstr "Gostei" -#: ../lollypop/widgets_loved.py:117 -msgid "Disallow playback" -msgstr "Não permitir reprodução" +#: ../lollypop/widgets_loved.py:113 +msgid "Allow playback" +msgstr "Permitir reprodução" #: ../lollypop/widgets_player_buttons.py:184 msgid "Pause" @@ -2098,6 +2111,9 @@ msgid "Remove from playlist" msgstr "Remover da lista de reprodução" +#~ msgid "Disallow playback" +#~ msgstr "Não permitir reprodução" + #~ msgid "Show year below album name" #~ msgstr "Mostrar o ano abaixo do nome do álbum" diff -Nru lollypop-1.4.7.r90.g765cf1b3/subprojects/po/pt.po lollypop-1.4.16.r6.ga09712088/subprojects/po/pt.po --- lollypop-1.4.7.r90.g765cf1b3/subprojects/po/pt.po 2020-12-28 23:00:16.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/subprojects/po/pt.po 2021-02-25 23:00:22.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-27 13:42+0100\n" +"POT-Creation-Date: 2021-01-06 14:55+0100\n" "PO-Revision-Date: 2020-11-04 11:26+0000\n" "Last-Translator: Juliano de Souza Camargo \n" "Language-Team: Portuguese \n" "Language-Team: Portuguese (Portugal) \n" "Language-Team: Romanian (http://www.transifex.com/gnumdk/lollypop/language/" @@ -540,7 +540,7 @@ msgid "Synchronize" msgstr "" -#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:254 +#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:312 #: ../lollypop/widgets_player_buttons.py:188 msgid "Play" msgstr "Redare" @@ -1319,11 +1319,11 @@ msgid "Resetting database" msgstr "" -#: ../lollypop/collection_scanner.py:504 +#: ../lollypop/collection_scanner.py:505 msgid "Scan disabled, missing collection" msgstr "" -#: ../lollypop/collection_scanner.py:797 ../lollypop/database_tracks.py:354 +#: ../lollypop/collection_scanner.py:800 ../lollypop/database_tracks.py:356 #: ../lollypop/tagreader.py:87 ../lollypop/tagreader.py:103 #: ../lollypop/tagreader.py:119 ../lollypop/tagreader.py:190 #: ../lollypop/tagreader.py:238 ../lollypop/tagreader.py:260 @@ -1348,11 +1348,11 @@ msgid "Many artists" msgstr "" -#: ../lollypop/database_upgrade.py:774 +#: ../lollypop/database_upgrade.py:775 msgid "Please wait while Lollypop is updating albums" msgstr "" -#: ../lollypop/database_upgrade.py:793 +#: ../lollypop/database_upgrade.py:794 msgid "Please wait while Lollypop is updating tracks" msgstr "" @@ -1468,7 +1468,7 @@ msgstr "" #: ../lollypop/menu_playback.py:57 ../lollypop/menu_playback.py:290 -#: ../lollypop/menu_playback.py:526 +#: ../lollypop/menu_playback.py:534 msgid "Play a radio" msgstr "" @@ -1529,19 +1529,23 @@ msgid "Play this album" msgstr "" -#: ../lollypop/menu_playback.py:644 +#: ../lollypop/menu_playback.py:529 ../lollypop/menu_playback.py:615 +msgid "Ignored" +msgstr "" + +#: ../lollypop/menu_playback.py:672 msgid "Add to queue" msgstr "" -#: ../lollypop/menu_playback.py:650 +#: ../lollypop/menu_playback.py:678 msgid "Remove from queue" msgstr "" -#: ../lollypop/menu_playback.py:661 +#: ../lollypop/menu_playback.py:689 msgid "Do not stop after" msgstr "" -#: ../lollypop/menu_playback.py:666 +#: ../lollypop/menu_playback.py:694 msgid "Stop after" msgstr "" @@ -1831,11 +1835,11 @@ msgid "Welcome to Lollypop" msgstr "" -#: ../lollypop/view_tracks_album.py:66 +#: ../lollypop/view_tracks_album.py:69 msgid "All tracks skipped" msgstr "" -#: ../lollypop/view_tracks_album.py:237 +#: ../lollypop/view_tracks_album.py:327 #, python-format msgid "Disc %s" msgstr "Disc %s" @@ -1860,6 +1864,11 @@ msgid "Remove" msgstr "" +#: ../lollypop/widgets_banner_album.py:245 +#, python-format +msgid "Released on %s" +msgstr "" + #: ../lollypop/widgets_banner_artist.py:298 #, fuzzy msgid "Add to current playlist" @@ -1975,16 +1984,12 @@ msgid "Vocal" msgstr "" -#: ../lollypop/widgets_loved.py:107 -msgid "Allow playback" -msgstr "" - -#: ../lollypop/widgets_loved.py:112 +#: ../lollypop/widgets_loved.py:108 msgid "Like" msgstr "" -#: ../lollypop/widgets_loved.py:117 -msgid "Disallow playback" +#: ../lollypop/widgets_loved.py:113 +msgid "Allow playback" msgstr "" #: ../lollypop/widgets_player_buttons.py:184 diff -Nru lollypop-1.4.7.r90.g765cf1b3/subprojects/po/ru.po lollypop-1.4.16.r6.ga09712088/subprojects/po/ru.po --- lollypop-1.4.7.r90.g765cf1b3/subprojects/po/ru.po 2020-12-28 23:00:16.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/subprojects/po/ru.po 2021-02-25 23:00:22.000000000 +0000 @@ -18,8 +18,8 @@ msgstr "" "Project-Id-Version: lollypop\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-27 13:42+0100\n" -"PO-Revision-Date: 2020-10-05 23:39+0000\n" +"POT-Creation-Date: 2021-01-06 14:55+0100\n" +"PO-Revision-Date: 2021-01-18 17:32+0000\n" "Last-Translator: Артемий Судаков \n" "Language-Team: Russian \n" @@ -29,7 +29,7 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 4.5-dev\n" #: ../data/org.gnome.Lollypop.gschema.xml:36 msgid "Window size" @@ -75,6 +75,8 @@ "Threshold used to decide if the previous track should be played or the " "currently running one should be restarted" msgstr "" +"Порог, используемый для решения, следует ли воспроизводить предыдущий трек " +"или перезапускать текущий" #: ../data/org.gnome.Lollypop.gschema.xml:81 msgid "Save artwork/popularity in tags" @@ -158,7 +160,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:166 msgid "Favorite cover filename without extension" -msgstr "" +msgstr "Название файла любимой обложки без расширения" #: ../data/org.gnome.Lollypop.gschema.xml:167 #: ../data/org.gnome.Lollypop.gschema.xml:252 @@ -265,7 +267,7 @@ #: ../data/org.gnome.Lollypop.gschema.xml:279 msgid "Enable PNG artwork cache" -msgstr "" +msgstr "Включить кеширование PNG обложек" #: ../data/org.gnome.Lollypop.gschema.xml:289 msgid "Force single column mode" @@ -463,7 +465,7 @@ #: ../data/org.gnome.Lollypop.desktop.in:13 msgid "Music;Player;Lollipop;" -msgstr "" +msgstr "Музыка;Плеер;Lollypop;Треки;" #: ../data/org.gnome.Lollypop.desktop.in:23 msgid "Play/Pause" @@ -575,7 +577,7 @@ msgid "Synchronize" msgstr "Синхронизация" -#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:254 +#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:312 #: ../lollypop/widgets_player_buttons.py:188 msgid "Play" msgstr "Воспроизвести" @@ -623,7 +625,7 @@ #: ../data/SettingsDialog.ui:105 msgid "High quality artwork" -msgstr "" +msgstr "Обложки высокого качества" #: ../data/SettingsDialog.ui:122 msgid "Artwork size" @@ -860,7 +862,7 @@ #: ../data/SettingsDialog.ui:1015 ../lollypop/menu_search.py:72 msgid "Jamendo" -msgstr "" +msgstr "Jamendo" #: ../data/SettingsDialog.ui:1031 msgid "AudioDB" @@ -909,11 +911,11 @@ #: ../data/SettingsDialog.ui:1211 msgid "Metro Lyrics" -msgstr "" +msgstr "Metro Lyrics" #: ../data/SettingsDialog.ui:1228 msgid "Bing" -msgstr "" +msgstr "Bing" #: ../data/Shortcuts.ui:13 msgctxt "shortcut window" @@ -1170,7 +1172,7 @@ #: ../lollypop/assistant_flatpak.py:31 msgid "Authorization needed" -msgstr "" +msgstr "Требуется авторизация" #: ../lollypop/assistant_flatpak.py:33 msgid "" @@ -1178,10 +1180,13 @@ "In order to be able to access your collection,\n" "you need to allow Lollypop." msgstr "" +"\n" +"Для того что бы получить доступ к вашей коллекции,\n" +"вам нужно разрешить Lollypop." #: ../lollypop/assistant_flatpak.py:44 msgid "Update folders" -msgstr "" +msgstr "Обновить папки" #: ../lollypop/assistant_flatpak.py:46 msgid "" @@ -1191,6 +1196,11 @@ "- Remove all folders from collection\n" "- Then, add them again" msgstr "" +"\n" +"Откройте настройки Lollypop\n" +" Перейдите во вкладку Музыка\n" +" Удалите все папки из коллекции\n" +" Затем, добавьте их ещё раз" #: ../lollypop/assistant_flatpak.py:53 ../lollypop/assistant_google.py:52 #: ../lollypop/assistant_google.py:69 ../lollypop/assistant_google.py:84 @@ -1392,11 +1402,11 @@ msgid "Resetting database" msgstr "Пересоздание базы данных" -#: ../lollypop/collection_scanner.py:504 +#: ../lollypop/collection_scanner.py:505 msgid "Scan disabled, missing collection" msgstr "Сканирование выключено, коллекции недоступны" -#: ../lollypop/collection_scanner.py:797 ../lollypop/database_tracks.py:354 +#: ../lollypop/collection_scanner.py:800 ../lollypop/database_tracks.py:356 #: ../lollypop/tagreader.py:87 ../lollypop/tagreader.py:103 #: ../lollypop/tagreader.py:119 ../lollypop/tagreader.py:190 #: ../lollypop/tagreader.py:238 ../lollypop/tagreader.py:260 @@ -1421,11 +1431,11 @@ msgid "Many artists" msgstr "Множество исполнителей" -#: ../lollypop/database_upgrade.py:774 +#: ../lollypop/database_upgrade.py:775 msgid "Please wait while Lollypop is updating albums" msgstr "Подождите, Lollypop обновляет данные альбомов" -#: ../lollypop/database_upgrade.py:793 +#: ../lollypop/database_upgrade.py:794 msgid "Please wait while Lollypop is updating tracks" msgstr "Подождите, Lollypop обновляет данные треков" @@ -1525,7 +1535,7 @@ #: ../lollypop/menu_objects.py:66 msgid "Show album" -msgstr "" +msgstr "Показать альбом" #: ../lollypop/menu_objects.py:70 ../lollypop/menu_objects.py:119 #: ../lollypop/menu_similars.py:167 @@ -1541,7 +1551,7 @@ msgstr "Адрес YouTube страницы" #: ../lollypop/menu_playback.py:57 ../lollypop/menu_playback.py:290 -#: ../lollypop/menu_playback.py:526 +#: ../lollypop/menu_playback.py:534 msgid "Play a radio" msgstr "Воспроизвести радио" @@ -1602,19 +1612,23 @@ msgid "Play this album" msgstr "Воспроизвести этот альбом" -#: ../lollypop/menu_playback.py:644 +#: ../lollypop/menu_playback.py:529 ../lollypop/menu_playback.py:615 +msgid "Ignored" +msgstr "Игнорировать" + +#: ../lollypop/menu_playback.py:672 msgid "Add to queue" msgstr "Добавить в очередь" -#: ../lollypop/menu_playback.py:650 +#: ../lollypop/menu_playback.py:678 msgid "Remove from queue" msgstr "Удалить из очереди" -#: ../lollypop/menu_playback.py:661 +#: ../lollypop/menu_playback.py:689 msgid "Do not stop after" msgstr "Не останавливать после" -#: ../lollypop/menu_playback.py:666 +#: ../lollypop/menu_playback.py:694 msgid "Stop after" msgstr "Остановить после" @@ -1793,7 +1807,7 @@ #: ../lollypop/shown.py:73 msgid "Skipped tracks" -msgstr "" +msgstr "Пропущенные треки" #: ../lollypop/shown.py:74 msgid "All tracks" @@ -1904,18 +1918,18 @@ msgid "Welcome to Lollypop" msgstr "Добро пожаловать в Lollypop" -#: ../lollypop/view_tracks_album.py:66 +#: ../lollypop/view_tracks_album.py:69 msgid "All tracks skipped" msgstr "Пропущены все треки" -#: ../lollypop/view_tracks_album.py:237 +#: ../lollypop/view_tracks_album.py:327 #, python-format msgid "Disc %s" msgstr "Диск %s" #: ../lollypop/view_tracks_queue.py:36 msgid "Currently in queue" -msgstr "" +msgstr "Сейчас в очереди" #: ../lollypop/view_tracks_search.py:103 msgid "Tracks" @@ -1933,6 +1947,11 @@ msgid "Remove" msgstr "Удалить" +#: ../lollypop/widgets_banner_album.py:245 +#, python-format +msgid "Released on %s" +msgstr "Вышел в %s" + #: ../lollypop/widgets_banner_artist.py:298 msgid "Add to current playlist" msgstr "Добавить в текущий плейлист" @@ -2046,17 +2065,13 @@ msgid "Vocal" msgstr "Вокал" -#: ../lollypop/widgets_loved.py:107 -msgid "Allow playback" -msgstr "Разрешить воспроизведение" - -#: ../lollypop/widgets_loved.py:112 +#: ../lollypop/widgets_loved.py:108 msgid "Like" msgstr "Нравится" -#: ../lollypop/widgets_loved.py:117 -msgid "Disallow playback" -msgstr "Запретить воспроизведение" +#: ../lollypop/widgets_loved.py:113 +msgid "Allow playback" +msgstr "Разрешить воспроизведение" #: ../lollypop/widgets_player_buttons.py:184 msgid "Pause" @@ -2099,6 +2114,9 @@ msgid "Remove from playlist" msgstr "Удалить из плейлиста" +#~ msgid "Disallow playback" +#~ msgstr "Запретить воспроизведение" + #~ msgid "Show year below album name" #~ msgstr "Показывать год выпуска под именем альбома" diff -Nru lollypop-1.4.7.r90.g765cf1b3/subprojects/po/sk.po lollypop-1.4.16.r6.ga09712088/subprojects/po/sk.po --- lollypop-1.4.7.r90.g765cf1b3/subprojects/po/sk.po 2020-12-28 23:00:16.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/subprojects/po/sk.po 2021-02-25 23:00:22.000000000 +0000 @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: lollypop\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-27 13:42+0100\n" -"PO-Revision-Date: 2020-12-26 09:29+0000\n" +"POT-Creation-Date: 2021-01-06 14:55+0100\n" +"PO-Revision-Date: 2021-01-07 00:37+0000\n" "Last-Translator: Jozef Gaal \n" "Language-Team: Slovak \n" @@ -565,7 +565,7 @@ msgid "Synchronize" msgstr "Synchronizovať" -#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:254 +#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:312 #: ../lollypop/widgets_player_buttons.py:188 msgid "Play" msgstr "Prehrať" @@ -1160,7 +1160,7 @@ #: ../lollypop/assistant_flatpak.py:31 msgid "Authorization needed" -msgstr "" +msgstr "Potrebná autorizácia" #: ../lollypop/assistant_flatpak.py:33 msgid "" @@ -1168,10 +1168,13 @@ "In order to be able to access your collection,\n" "you need to allow Lollypop." msgstr "" +"\n" +"Aby ste mali prístup k svojej zbierke skladieb,\n" +"musíte povoliť Lollypop." #: ../lollypop/assistant_flatpak.py:44 msgid "Update folders" -msgstr "" +msgstr "Aktualizovať priečinky" #: ../lollypop/assistant_flatpak.py:46 msgid "" @@ -1181,6 +1184,11 @@ "- Remove all folders from collection\n" "- Then, add them again" msgstr "" +"\n" +"- Otvorte predvoľby Lollypop\n" +"- Prejdite na kartu Hudba\n" +"- Odstráňte všetky priečiny zo zbierky skladieb\n" +"- Potom ich znova pridajte" #: ../lollypop/assistant_flatpak.py:53 ../lollypop/assistant_google.py:52 #: ../lollypop/assistant_google.py:69 ../lollypop/assistant_google.py:84 @@ -1383,11 +1391,11 @@ msgid "Resetting database" msgstr "Obnovuje sa databáza" -#: ../lollypop/collection_scanner.py:504 +#: ../lollypop/collection_scanner.py:505 msgid "Scan disabled, missing collection" msgstr "Prehľadávanie je zakázané, chýba zbierka skladieb" -#: ../lollypop/collection_scanner.py:797 ../lollypop/database_tracks.py:354 +#: ../lollypop/collection_scanner.py:800 ../lollypop/database_tracks.py:356 #: ../lollypop/tagreader.py:87 ../lollypop/tagreader.py:103 #: ../lollypop/tagreader.py:119 ../lollypop/tagreader.py:190 #: ../lollypop/tagreader.py:238 ../lollypop/tagreader.py:260 @@ -1412,11 +1420,11 @@ msgid "Many artists" msgstr "Mnoho interpretov" -#: ../lollypop/database_upgrade.py:774 +#: ../lollypop/database_upgrade.py:775 msgid "Please wait while Lollypop is updating albums" msgstr "Počkajte prosím, kým Lollypop aktualizuje albumy" -#: ../lollypop/database_upgrade.py:793 +#: ../lollypop/database_upgrade.py:794 msgid "Please wait while Lollypop is updating tracks" msgstr "Počkajte prosím, kým Lollypop aktualizuje skladby" @@ -1532,7 +1540,7 @@ msgstr "Adresa stránky služby YouTube" #: ../lollypop/menu_playback.py:57 ../lollypop/menu_playback.py:290 -#: ../lollypop/menu_playback.py:526 +#: ../lollypop/menu_playback.py:534 msgid "Play a radio" msgstr "Spustiť rádio" @@ -1593,19 +1601,23 @@ msgid "Play this album" msgstr "Prehrať tento album" -#: ../lollypop/menu_playback.py:644 +#: ../lollypop/menu_playback.py:529 ../lollypop/menu_playback.py:615 +msgid "Ignored" +msgstr "Ignorované" + +#: ../lollypop/menu_playback.py:672 msgid "Add to queue" msgstr "Pridať do fronty" -#: ../lollypop/menu_playback.py:650 +#: ../lollypop/menu_playback.py:678 msgid "Remove from queue" msgstr "Odstrániť z fronty" -#: ../lollypop/menu_playback.py:661 +#: ../lollypop/menu_playback.py:689 msgid "Do not stop after" msgstr "Pokračovať po prehratí" -#: ../lollypop/menu_playback.py:666 +#: ../lollypop/menu_playback.py:694 msgid "Stop after" msgstr "Zastaviť po prehratí" @@ -1895,18 +1907,18 @@ msgid "Welcome to Lollypop" msgstr "Vitajte v aplikácii Lollypop" -#: ../lollypop/view_tracks_album.py:66 +#: ../lollypop/view_tracks_album.py:69 msgid "All tracks skipped" msgstr "Všetky skladby preskočené" -#: ../lollypop/view_tracks_album.py:237 +#: ../lollypop/view_tracks_album.py:327 #, python-format msgid "Disc %s" msgstr "Disk %s" #: ../lollypop/view_tracks_queue.py:36 msgid "Currently in queue" -msgstr "" +msgstr "Práve v poradí" #: ../lollypop/view_tracks_search.py:103 msgid "Tracks" @@ -1924,6 +1936,11 @@ msgid "Remove" msgstr "Odstrániť" +#: ../lollypop/widgets_banner_album.py:245 +#, python-format +msgid "Released on %s" +msgstr "Vydané v roku %s" + #: ../lollypop/widgets_banner_artist.py:298 msgid "Add to current playlist" msgstr "Pridať do aktuálneho zoznamu skladieb" @@ -2037,17 +2054,13 @@ msgid "Vocal" msgstr "Vokál" -#: ../lollypop/widgets_loved.py:107 -msgid "Allow playback" -msgstr "Povoliť prehrávanie" - -#: ../lollypop/widgets_loved.py:112 +#: ../lollypop/widgets_loved.py:108 msgid "Like" msgstr "Páči sa" -#: ../lollypop/widgets_loved.py:117 -msgid "Disallow playback" -msgstr "Zakázať prehrávanie" +#: ../lollypop/widgets_loved.py:113 +msgid "Allow playback" +msgstr "Povoliť prehrávanie" #: ../lollypop/widgets_player_buttons.py:184 msgid "Pause" @@ -2090,6 +2103,9 @@ msgid "Remove from playlist" msgstr "Odstrániť zo zoznamu skladieb" +#~ msgid "Disallow playback" +#~ msgstr "Zakázať prehrávanie" + #~ msgid "Show year below album name" #~ msgstr "Zobraziť rok pod názvom albumu" diff -Nru lollypop-1.4.7.r90.g765cf1b3/subprojects/po/sr@latin.po lollypop-1.4.16.r6.ga09712088/subprojects/po/sr@latin.po --- lollypop-1.4.7.r90.g765cf1b3/subprojects/po/sr@latin.po 2020-12-28 23:00:16.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/subprojects/po/sr@latin.po 2021-02-25 23:00:22.000000000 +0000 @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: lollypop\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-27 13:42+0100\n" +"POT-Creation-Date: 2021-01-06 14:55+0100\n" "PO-Revision-Date: 2018-09-29 00:33+0000\n" "Last-Translator: Slobodan Terzić \n" "Language-Team: Serbian (latin) \n" "Language-Team: Serbian \n" "Language-Team: Swedish \n" @@ -21,7 +21,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.4.1-dev\n" +"X-Generator: Weblate 4.5-dev\n" #: ../data/org.gnome.Lollypop.gschema.xml:36 msgid "Window size" @@ -435,7 +435,7 @@ "online; and provides native support for ReplayGain." msgstr "" "Lollypop är en lättviktig modern musikspelare som är utformad för att " -"fungera utmärkt på skrivbordsmiljön GNOME. Den har också ett festläge som " +"fungera utmärkt på skrivbordsmiljön GNOME. Den har även ett festläge som " "automatiskt väljer festrelaterade spellistor; ger dig tillgång till spelaren " "från din soffa tack vare fullskärmsläge; hämtar låttexter, omslag och " "biografi på nätet; och tillhandahåller inbyggt stöd för ReplayGain." @@ -574,7 +574,7 @@ msgid "Synchronize" msgstr "Synkronisera" -#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:254 +#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:312 #: ../lollypop/widgets_player_buttons.py:188 msgid "Play" msgstr "Spela" @@ -606,7 +606,7 @@ #: ../data/SettingsDialog.ui:51 ../data/SettingsDialog.ui:54 msgid "Whether the application should use a dark theme" -msgstr "Huruvida applikationen ska använda ett mörkt tema" +msgstr "Huruvida programmet ska använda ett mörkt tema" #: ../data/SettingsDialog.ui:52 msgid "Dark Mode" @@ -1169,7 +1169,7 @@ #: ../lollypop/assistant_flatpak.py:31 msgid "Authorization needed" -msgstr "" +msgstr "Behörighet behövs" #: ../lollypop/assistant_flatpak.py:33 msgid "" @@ -1177,10 +1177,13 @@ "In order to be able to access your collection,\n" "you need to allow Lollypop." msgstr "" +"\n" +"För att kunna komma åt din samling\n" +"måste du tillåta Lollypop." #: ../lollypop/assistant_flatpak.py:44 msgid "Update folders" -msgstr "" +msgstr "Uppdatera mappar" #: ../lollypop/assistant_flatpak.py:46 msgid "" @@ -1190,6 +1193,11 @@ "- Remove all folders from collection\n" "- Then, add them again" msgstr "" +"\n" +"- Öppna Lollypop-inställningar\n" +"- Gå till fliken Musik\n" +"- Ta bort alla mappar från samlingen\n" +"- Lägg sedan till dem igen" #: ../lollypop/assistant_flatpak.py:53 ../lollypop/assistant_google.py:52 #: ../lollypop/assistant_google.py:69 ../lollypop/assistant_google.py:84 @@ -1391,11 +1399,11 @@ msgid "Resetting database" msgstr "Återställer databas" -#: ../lollypop/collection_scanner.py:504 +#: ../lollypop/collection_scanner.py:505 msgid "Scan disabled, missing collection" msgstr "Skanningen inaktiverad, samlingen saknas" -#: ../lollypop/collection_scanner.py:797 ../lollypop/database_tracks.py:354 +#: ../lollypop/collection_scanner.py:800 ../lollypop/database_tracks.py:356 #: ../lollypop/tagreader.py:87 ../lollypop/tagreader.py:103 #: ../lollypop/tagreader.py:119 ../lollypop/tagreader.py:190 #: ../lollypop/tagreader.py:238 ../lollypop/tagreader.py:260 @@ -1420,11 +1428,11 @@ msgid "Many artists" msgstr "Många artister" -#: ../lollypop/database_upgrade.py:774 +#: ../lollypop/database_upgrade.py:775 msgid "Please wait while Lollypop is updating albums" msgstr "Vänligen vänta medan Lollypop uppdaterar album" -#: ../lollypop/database_upgrade.py:793 +#: ../lollypop/database_upgrade.py:794 msgid "Please wait while Lollypop is updating tracks" msgstr "Vänligen vänta medan Lollypop uppdaterar spår" @@ -1434,7 +1442,7 @@ #: ../lollypop/dialog_apps.py:81 msgid "Select an application" -msgstr "Välj en applikation" +msgstr "Välj ett program" #: ../lollypop/dialog_settings.py:85 #, python-format @@ -1540,7 +1548,7 @@ msgstr "YouTube-webbplatsadress" #: ../lollypop/menu_playback.py:57 ../lollypop/menu_playback.py:290 -#: ../lollypop/menu_playback.py:526 +#: ../lollypop/menu_playback.py:534 msgid "Play a radio" msgstr "Spela en radio" @@ -1601,19 +1609,23 @@ msgid "Play this album" msgstr "Spela detta album" -#: ../lollypop/menu_playback.py:644 +#: ../lollypop/menu_playback.py:529 ../lollypop/menu_playback.py:615 +msgid "Ignored" +msgstr "Ignorerad" + +#: ../lollypop/menu_playback.py:672 msgid "Add to queue" msgstr "Lägg till i kö" -#: ../lollypop/menu_playback.py:650 +#: ../lollypop/menu_playback.py:678 msgid "Remove from queue" msgstr "Ta bort från kö" -#: ../lollypop/menu_playback.py:661 +#: ../lollypop/menu_playback.py:689 msgid "Do not stop after" msgstr "Stoppa inte efter" -#: ../lollypop/menu_playback.py:666 +#: ../lollypop/menu_playback.py:694 msgid "Stop after" msgstr "Stoppa efter" @@ -1903,18 +1915,18 @@ msgid "Welcome to Lollypop" msgstr "Välkommen till Lollypop" -#: ../lollypop/view_tracks_album.py:66 +#: ../lollypop/view_tracks_album.py:69 msgid "All tracks skipped" msgstr "Alla spår hoppades över" -#: ../lollypop/view_tracks_album.py:237 +#: ../lollypop/view_tracks_album.py:327 #, python-format msgid "Disc %s" msgstr "Skiva %s" #: ../lollypop/view_tracks_queue.py:36 msgid "Currently in queue" -msgstr "" +msgstr "För närvarande i kö" #: ../lollypop/view_tracks_search.py:103 msgid "Tracks" @@ -1932,6 +1944,11 @@ msgid "Remove" msgstr "Ta bort" +#: ../lollypop/widgets_banner_album.py:245 +#, python-format +msgid "Released on %s" +msgstr "Släppt den %s" + #: ../lollypop/widgets_banner_artist.py:298 msgid "Add to current playlist" msgstr "Lägg till i aktuell spellista" @@ -2045,17 +2062,13 @@ msgid "Vocal" msgstr "Vokal" -#: ../lollypop/widgets_loved.py:107 -msgid "Allow playback" -msgstr "Tillåt uppspelning" - -#: ../lollypop/widgets_loved.py:112 +#: ../lollypop/widgets_loved.py:108 msgid "Like" msgstr "Gilla" -#: ../lollypop/widgets_loved.py:117 -msgid "Disallow playback" -msgstr "Tillåt inte uppspelning" +#: ../lollypop/widgets_loved.py:113 +msgid "Allow playback" +msgstr "Tillåt uppspelning" #: ../lollypop/widgets_player_buttons.py:184 msgid "Pause" @@ -2098,6 +2111,9 @@ msgid "Remove from playlist" msgstr "Ta bort från spellista" +#~ msgid "Disallow playback" +#~ msgstr "Tillåt inte uppspelning" + #~ msgid "Show year below album name" #~ msgstr "Visa år under albumtitel" diff -Nru lollypop-1.4.7.r90.g765cf1b3/subprojects/po/sw.po lollypop-1.4.16.r6.ga09712088/subprojects/po/sw.po --- lollypop-1.4.7.r90.g765cf1b3/subprojects/po/sw.po 2020-12-28 23:00:16.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/subprojects/po/sw.po 2021-02-25 23:00:22.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-27 13:42+0100\n" +"POT-Creation-Date: 2021-01-06 14:55+0100\n" "PO-Revision-Date: 2020-07-10 10:41+0000\n" "Last-Translator: jimmy M \n" "Language-Team: Swahili \n" "Language-Team: Turkish \n" @@ -571,7 +571,7 @@ msgid "Synchronize" msgstr "Eşzamanla" -#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:254 +#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:312 #: ../lollypop/widgets_player_buttons.py:188 msgid "Play" msgstr "Çal" @@ -741,7 +741,7 @@ #: ../data/SettingsDialog.ui:393 ../data/SettingsDialog.ui:431 msgid "You need to reset collection" -msgstr "Koleksiyonu sıfırlamalısınız" +msgstr "Koleksiyonu sıfırlamanız gerekiyor" #: ../data/SettingsDialog.ui:394 msgid "Show compilations" @@ -1162,11 +1162,11 @@ #: ../lollypop/artwork_album.py:515 ../lollypop/widgets_rating.py:211 msgid "You need to install kid3-cli" -msgstr "kid3-cli’i kurman gerekmektedir" +msgstr "kid3-cli’i kurmanız gerekmektedir" #: ../lollypop/assistant_flatpak.py:31 msgid "Authorization needed" -msgstr "" +msgstr "Yetkilendirme gerekli" #: ../lollypop/assistant_flatpak.py:33 msgid "" @@ -1174,10 +1174,13 @@ "In order to be able to access your collection,\n" "you need to allow Lollypop." msgstr "" +"\n" +"Kolelsiyonunuza erişebilmek için,\n" +"Lollypop’a izin vermelisiniz." #: ../lollypop/assistant_flatpak.py:44 msgid "Update folders" -msgstr "" +msgstr "Klasörleri güncelle" #: ../lollypop/assistant_flatpak.py:46 msgid "" @@ -1187,6 +1190,11 @@ "- Remove all folders from collection\n" "- Then, add them again" msgstr "" +"\n" +"- Lollypop tercihlerini açın\n" +"- Müzik sekmesine gidin\n" +"- Koleksiyondan tüm klasörleri kaldırın\n" +"- Sonra, onları yeniden ekleyin" #: ../lollypop/assistant_flatpak.py:53 ../lollypop/assistant_google.py:52 #: ../lollypop/assistant_google.py:69 ../lollypop/assistant_google.py:84 @@ -1389,11 +1397,11 @@ msgid "Resetting database" msgstr "Veri tabanı sıfırlanıyor" -#: ../lollypop/collection_scanner.py:504 +#: ../lollypop/collection_scanner.py:505 msgid "Scan disabled, missing collection" msgstr "Tarama devre dışı, koleksiyon eksik" -#: ../lollypop/collection_scanner.py:797 ../lollypop/database_tracks.py:354 +#: ../lollypop/collection_scanner.py:800 ../lollypop/database_tracks.py:356 #: ../lollypop/tagreader.py:87 ../lollypop/tagreader.py:103 #: ../lollypop/tagreader.py:119 ../lollypop/tagreader.py:190 #: ../lollypop/tagreader.py:238 ../lollypop/tagreader.py:260 @@ -1418,11 +1426,11 @@ msgid "Many artists" msgstr "Birçok sanatçı" -#: ../lollypop/database_upgrade.py:774 +#: ../lollypop/database_upgrade.py:775 msgid "Please wait while Lollypop is updating albums" msgstr "Lollypop albümleri güncellerken lütfen bekleyin" -#: ../lollypop/database_upgrade.py:793 +#: ../lollypop/database_upgrade.py:794 msgid "Please wait while Lollypop is updating tracks" msgstr "Lollypop parçaları güncellerken lütfen bekleyin" @@ -1538,7 +1546,7 @@ msgstr "YouTube sayfa adresi" #: ../lollypop/menu_playback.py:57 ../lollypop/menu_playback.py:290 -#: ../lollypop/menu_playback.py:526 +#: ../lollypop/menu_playback.py:534 msgid "Play a radio" msgstr "Radyo çal" @@ -1599,19 +1607,23 @@ msgid "Play this album" msgstr "Bu albümü çal" -#: ../lollypop/menu_playback.py:644 +#: ../lollypop/menu_playback.py:529 ../lollypop/menu_playback.py:615 +msgid "Ignored" +msgstr "Yok sayıldı" + +#: ../lollypop/menu_playback.py:672 msgid "Add to queue" msgstr "Sıraya ekle" -#: ../lollypop/menu_playback.py:650 +#: ../lollypop/menu_playback.py:678 msgid "Remove from queue" msgstr "Sıradan kaldır" -#: ../lollypop/menu_playback.py:661 +#: ../lollypop/menu_playback.py:689 msgid "Do not stop after" msgstr "Sonra durma" -#: ../lollypop/menu_playback.py:666 +#: ../lollypop/menu_playback.py:694 msgid "Stop after" msgstr "Sonra dur" @@ -1901,18 +1913,18 @@ msgid "Welcome to Lollypop" msgstr "Lollypop’a Hoş Geldiniz" -#: ../lollypop/view_tracks_album.py:66 +#: ../lollypop/view_tracks_album.py:69 msgid "All tracks skipped" msgstr "Tüm parçalar atlandı" -#: ../lollypop/view_tracks_album.py:237 +#: ../lollypop/view_tracks_album.py:327 #, python-format msgid "Disc %s" msgstr "%s diski" #: ../lollypop/view_tracks_queue.py:36 msgid "Currently in queue" -msgstr "" +msgstr "Şu anda sırada" #: ../lollypop/view_tracks_search.py:103 msgid "Tracks" @@ -1930,6 +1942,11 @@ msgid "Remove" msgstr "Kaldır" +#: ../lollypop/widgets_banner_album.py:245 +#, python-format +msgid "Released on %s" +msgstr "%s tarihinde yayınlandı" + #: ../lollypop/widgets_banner_artist.py:298 msgid "Add to current playlist" msgstr "Geçerli çalma listesine ekle" @@ -2043,17 +2060,13 @@ msgid "Vocal" msgstr "Vokal" -#: ../lollypop/widgets_loved.py:107 -msgid "Allow playback" -msgstr "Kayıttan çalmaya izin ver" - -#: ../lollypop/widgets_loved.py:112 +#: ../lollypop/widgets_loved.py:108 msgid "Like" msgstr "Beğen" -#: ../lollypop/widgets_loved.py:117 -msgid "Disallow playback" -msgstr "Kayıttan çalmaya izin verme" +#: ../lollypop/widgets_loved.py:113 +msgid "Allow playback" +msgstr "Kayıttan çalmaya izin ver" #: ../lollypop/widgets_player_buttons.py:184 msgid "Pause" @@ -2096,6 +2109,9 @@ msgid "Remove from playlist" msgstr "Çalma listesinden kaldır" +#~ msgid "Disallow playback" +#~ msgstr "Kayıttan çalmaya izin verme" + #~ msgid "Show year below album name" #~ msgstr "Albüm adının altında yılı göster" diff -Nru lollypop-1.4.7.r90.g765cf1b3/subprojects/po/uk.po lollypop-1.4.16.r6.ga09712088/subprojects/po/uk.po --- lollypop-1.4.7.r90.g765cf1b3/subprojects/po/uk.po 2020-12-28 23:00:16.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/subprojects/po/uk.po 2021-02-25 23:00:22.000000000 +0000 @@ -9,8 +9,8 @@ msgstr "" "Project-Id-Version: lollypop\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-27 13:42+0100\n" -"PO-Revision-Date: 2020-12-26 09:29+0000\n" +"POT-Creation-Date: 2021-01-06 14:55+0100\n" +"PO-Revision-Date: 2021-01-26 21:32+0000\n" "Last-Translator: Ihor Hordiichuk \n" "Language-Team: Ukrainian \n" @@ -20,7 +20,7 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.4.1-dev\n" +"X-Generator: Weblate 4.5-dev\n" #: ../data/org.gnome.Lollypop.gschema.xml:36 msgid "Window size" @@ -32,11 +32,11 @@ #: ../data/org.gnome.Lollypop.gschema.xml:41 msgid "Window position" -msgstr "Розташування вікна" +msgstr "Розміщення вікна" #: ../data/org.gnome.Lollypop.gschema.xml:42 msgid "Window position (x and y)." -msgstr "Розташування вікна (x та y)." +msgstr "Розміщення вікна (x та y)." #: ../data/org.gnome.Lollypop.gschema.xml:46 #: ../data/org.gnome.Lollypop.gschema.xml:51 @@ -571,7 +571,7 @@ msgid "Synchronize" msgstr "Синхронізувати" -#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:254 +#: ../data/PlaylistBannerWidget.ui:71 ../lollypop/view_tracks_album.py:312 #: ../lollypop/widgets_player_buttons.py:188 msgid "Play" msgstr "Відтворити" @@ -741,7 +741,7 @@ #: ../data/SettingsDialog.ui:393 ../data/SettingsDialog.ui:431 msgid "You need to reset collection" -msgstr "Потребує скидання збірки" +msgstr "Створіть збірку заново" #: ../data/SettingsDialog.ui:394 msgid "Show compilations" @@ -1166,7 +1166,7 @@ #: ../lollypop/assistant_flatpak.py:31 msgid "Authorization needed" -msgstr "" +msgstr "Потрібна авторизація" #: ../lollypop/assistant_flatpak.py:33 msgid "" @@ -1174,10 +1174,13 @@ "In order to be able to access your collection,\n" "you need to allow Lollypop." msgstr "" +"\n" +"Щоб мати змогу отримати доступ до вашої збірки,\n" +"вам потрібно дозволити Lollypop." #: ../lollypop/assistant_flatpak.py:44 msgid "Update folders" -msgstr "" +msgstr "Оновити теки" #: ../lollypop/assistant_flatpak.py:46 msgid "" @@ -1187,6 +1190,11 @@ "- Remove all folders from collection\n" "- Then, add them again" msgstr "" +"\n" +"- Відкрийте параметри Lollypop\n" +"- Перейдіть на вкладку Музика\n" +"- Видаліть всі теки зі збірки\n" +"- Потім додайте їх знову" #: ../lollypop/assistant_flatpak.py:53 ../lollypop/assistant_google.py:52 #: ../lollypop/assistant_google.py:69 ../lollypop/assistant_google.py:84 @@ -1388,11 +1396,11 @@ msgid "Resetting database" msgstr "Скидання бази даних" -#: ../lollypop/collection_scanner.py:504 +#: ../lollypop/collection_scanner.py:505 msgid "Scan disabled, missing collection" msgstr "Сканування вимкнено, бракує збірки" -#: ../lollypop/collection_scanner.py:797 ../lollypop/database_tracks.py:354 +#: ../lollypop/collection_scanner.py:800 ../lollypop/database_tracks.py:356 #: ../lollypop/tagreader.py:87 ../lollypop/tagreader.py:103 #: ../lollypop/tagreader.py:119 ../lollypop/tagreader.py:190 #: ../lollypop/tagreader.py:238 ../lollypop/tagreader.py:260 @@ -1417,11 +1425,11 @@ msgid "Many artists" msgstr "Багато виконавців" -#: ../lollypop/database_upgrade.py:774 +#: ../lollypop/database_upgrade.py:775 msgid "Please wait while Lollypop is updating albums" msgstr "Зачекайте, поки Lollypop оновлює альбоми" -#: ../lollypop/database_upgrade.py:793 +#: ../lollypop/database_upgrade.py:794 msgid "Please wait while Lollypop is updating tracks" msgstr "Зачекайте, поки Lollypop оновлює доріжки" @@ -1537,7 +1545,7 @@ msgstr "Адреса сторінки YouTube" #: ../lollypop/menu_playback.py:57 ../lollypop/menu_playback.py:290 -#: ../lollypop/menu_playback.py:526 +#: ../lollypop/menu_playback.py:534 msgid "Play a radio" msgstr "Відтворити радіо" @@ -1598,19 +1606,23 @@ msgid "Play this album" msgstr "Відтворити цей альбом" -#: ../lollypop/menu_playback.py:644 +#: ../lollypop/menu_playback.py:529 ../lollypop/menu_playback.py:615 +msgid "Ignored" +msgstr "Ігнороване" + +#: ../lollypop/menu_playback.py:672 msgid "Add to queue" msgstr "Додати до черги" -#: ../lollypop/menu_playback.py:650 +#: ../lollypop/menu_playback.py:678 msgid "Remove from queue" msgstr "Вилучити з черги" -#: ../lollypop/menu_playback.py:661 +#: ../lollypop/menu_playback.py:689 msgid "Do not stop after" msgstr "Не зупиняти після" -#: ../lollypop/menu_playback.py:666 +#: ../lollypop/menu_playback.py:694 msgid "Stop after" msgstr "Зупинити після" @@ -1900,18 +1912,18 @@ msgid "Welcome to Lollypop" msgstr "Вітаємо в Lollypop" -#: ../lollypop/view_tracks_album.py:66 +#: ../lollypop/view_tracks_album.py:69 msgid "All tracks skipped" msgstr "Усі доріжки пропущено" -#: ../lollypop/view_tracks_album.py:237 +#: ../lollypop/view_tracks_album.py:327 #, python-format msgid "Disc %s" msgstr "Диск %s" #: ../lollypop/view_tracks_queue.py:36 msgid "Currently in queue" -msgstr "" +msgstr "Наразі в черзі" #: ../lollypop/view_tracks_search.py:103 msgid "Tracks" @@ -1929,6 +1941,11 @@ msgid "Remove" msgstr "Вилучити" +#: ../lollypop/widgets_banner_album.py:245 +#, python-format +msgid "Released on %s" +msgstr "Випущено %s" + #: ../lollypop/widgets_banner_artist.py:298 msgid "Add to current playlist" msgstr "Додати до поточного списку відтворення" @@ -1964,7 +1981,7 @@ #: ../lollypop/widgets_equalizer.py:25 ../lollypop/widgets_equalizer.py:162 #: ../lollypop/widgets_equalizer.py:194 msgid "Custom" -msgstr "Власне" +msgstr "Власна" #: ../lollypop/widgets_equalizer.py:28 msgid "Acoustic" @@ -2042,17 +2059,13 @@ msgid "Vocal" msgstr "Вокал" -#: ../lollypop/widgets_loved.py:107 -msgid "Allow playback" -msgstr "Дозволити відтворення" - -#: ../lollypop/widgets_loved.py:112 +#: ../lollypop/widgets_loved.py:108 msgid "Like" msgstr "Вподобати" -#: ../lollypop/widgets_loved.py:117 -msgid "Disallow playback" -msgstr "Заборонити відтворення" +#: ../lollypop/widgets_loved.py:113 +msgid "Allow playback" +msgstr "Дозволити відтворення" #: ../lollypop/widgets_player_buttons.py:184 msgid "Pause" @@ -2095,6 +2108,9 @@ msgid "Remove from playlist" msgstr "Вилучити зі списку відтворення" +#~ msgid "Disallow playback" +#~ msgstr "Заборонити відтворення" + #~ msgid "Show year below album name" #~ msgstr "Показувати рік під назвою альбому" diff -Nru lollypop-1.4.7.r90.g765cf1b3/subprojects/po/zh_CN.po lollypop-1.4.16.r6.ga09712088/subprojects/po/zh_CN.po --- lollypop-1.4.7.r90.g765cf1b3/subprojects/po/zh_CN.po 2020-12-28 23:00:16.000000000 +0000 +++ lollypop-1.4.16.r6.ga09712088/subprojects/po/zh_CN.po 2021-02-25 23:00:22.000000000 +0000 @@ -12,7 +12,7 @@ msgstr "" "Project-Id-Version: lollypop\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-12-27 13:42+0100\n" +"POT-Creation-Date: 2021-01-06 14:55+0100\n" "PO-Revision-Date: 2020-12-27 12:23+0000\n" "Last-Translator: maitreya2019 \n" "Language-Team: Chinese (Simplified) \n" "Language-Team: Chinese (Traditional)