Compare commits
7
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
188f4363c4 | ||
|
|
4c43b60714 | ||
|
|
7824d796b4 | ||
|
|
692df68464 | ||
|
|
45a3e9540f | ||
|
|
d2561d8f1f | ||
|
|
aa8c5fefca |
No files matched your search
+1
-1
@@ -8,7 +8,7 @@ project(audiotube)
|
||||
|
||||
include(FeatureSummary)
|
||||
|
||||
set(PROJECT_VERSION "22.06")
|
||||
set(PROJECT_VERSION "22.04")
|
||||
set(QT5_MIN_VERSION 5.15)
|
||||
set(KF5_MIN_VERSION 5.81)
|
||||
|
||||
|
||||
@@ -7,13 +7,8 @@
|
||||
"sources": [
|
||||
{
|
||||
"type": "file",
|
||||
"url": "https://files.pythonhosted.org/packages/f8/a3/622d9acbfb9a71144b5d7609906bc648c62e3ca5fdbb1c8cca222949d82c/websockets-10.3.tar.gz",
|
||||
"sha256": "fc06cc8073c8e87072138ba1e431300e2d408f054b27047d047b549455066ff4"
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"url": "https://files.pythonhosted.org/packages/16/b3/f7aa8edf2ff4495116f95fd442b2a346aa55d1d46313143c8814886dbcdb/mutagen-1.45.1-py3-none-any.whl",
|
||||
"sha256": "9c9f243fcec7f410f138cb12c21c84c64fde4195481a30c9bfb05b5f003adfed"
|
||||
"url": "https://files.pythonhosted.org/packages/b4/7b/0960d02701f783bb052ec69ea32789d878d2cce05a03950adbd75f164758/websockets-10.2.tar.gz",
|
||||
"sha256": "8351c3c86b08156337b0e4ece0e3c5ec3e01fcd14e8950996832a23c99416098"
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
@@ -22,18 +17,18 @@
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"url": "https://files.pythonhosted.org/packages/e9/06/d3d367b7af6305b16f0d28ae2aaeb86154fa91f144f036c2d5002a5a202b/certifi-2022.6.15-py3-none-any.whl",
|
||||
"sha256": "fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"
|
||||
"url": "https://files.pythonhosted.org/packages/16/b3/f7aa8edf2ff4495116f95fd442b2a346aa55d1d46313143c8814886dbcdb/mutagen-1.45.1-py3-none-any.whl",
|
||||
"sha256": "9c9f243fcec7f410f138cb12c21c84c64fde4195481a30c9bfb05b5f003adfed"
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"url": "https://files.pythonhosted.org/packages/1f/13/b1f7b4e44b11584a5f077af87895961b57911217a629efb8d3a9efd2a491/yt_dlp-2022.7.18-py2.py3-none-any.whl",
|
||||
"sha256": "d7d1f81d230756f094b4d9ee59b37b2c13b2e63ff5fb72cda53625edb072cdae"
|
||||
"url": "https://files.pythonhosted.org/packages/c0/61/3a08dc08c0c60498a0136a7eec1a098f08be79f75bf35fdd0a15a1bace70/yt_dlp-2022.3.8.2-py3-none-any.whl",
|
||||
"sha256": "05179f0f2c34f06910003bb9f80af68ff798b072ca0f826c0e6704a3fbd5b306"
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"url": "https://files.pythonhosted.org/packages/52/0d/6cc95a83f6961a1ca041798d222240890af79b381e97eda3b9b538dba16f/pycryptodomex-3.15.0.tar.gz",
|
||||
"sha256": "7341f1bb2dadb0d1a0047f34c3a58208a92423cdbd3244d998e4b28df5eac0ed"
|
||||
"url": "https://files.pythonhosted.org/packages/24/40/e249ac3845a2333ce50f1bb02299ffb766babdfe80ca9d31e0158ad06afd/pycryptodomex-3.14.1.tar.gz",
|
||||
"sha256": "2ce76ed0081fd6ac8c74edc75b9d14eca2064173af79843c24fa62573263c1f2"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -7,33 +7,33 @@
|
||||
"sources": [
|
||||
{
|
||||
"type": "file",
|
||||
"url": "https://files.pythonhosted.org/packages/94/69/64b11e8c2fb21f08634468caef885112e682b0ebe2908e74d3616eb1c113/charset_normalizer-2.1.0-py3-none-any.whl",
|
||||
"sha256": "5189b6f22b01957427f35b6a08d9a0bc45b46d3788ef5a92e978433c7a35f8a5"
|
||||
"url": "https://files.pythonhosted.org/packages/cb/58/834a6445479c72544d9285badce0a58650520c8ba5adfae7b98e61d133bb/ytmusicapi-0.21.0-py3-none-any.whl",
|
||||
"sha256": "29d8d44e1911458041882a453b05c37021ff850757c648f93a45d1775dddbae2"
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"url": "https://files.pythonhosted.org/packages/68/47/93d3d28e97c7577f563903907912f4b3804054e4877a5ba6651f7182c53b/urllib3-1.26.10-py2.py3-none-any.whl",
|
||||
"sha256": "8298d6d56d39be0e3bc13c1c97d133f9b45d797169a0e11cdd0e0489d786f7ec"
|
||||
"url": "https://files.pythonhosted.org/packages/37/45/946c02767aabb873146011e665728b680884cd8fe70dde973c640e45b775/certifi-2021.10.8-py2.py3-none-any.whl",
|
||||
"sha256": "d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"url": "https://files.pythonhosted.org/packages/ca/91/6d9b8ccacd0412c08820f72cebaa4f0c0441b5cda699c90f618b6f8a1b42/requests-2.28.1-py3-none-any.whl",
|
||||
"sha256": "8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"
|
||||
"url": "https://files.pythonhosted.org/packages/ec/03/062e6444ce4baf1eac17a6a0ebfe36bb1ad05e1df0e20b110de59c278498/urllib3-1.26.9-py2.py3-none-any.whl",
|
||||
"sha256": "44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"url": "https://files.pythonhosted.org/packages/0e/5a/4a5316bddbb697d4b1787159291edfeffd10f73c08b59c7248b15291b601/ytmusicapi-0.22.0-py3-none-any.whl",
|
||||
"sha256": "d042520f3f76eac2c1498130dbc4e8a4af21ca73496590a5ff054fc4da0af1d8"
|
||||
"url": "https://files.pythonhosted.org/packages/06/b3/24afc8868eba069a7f03650ac750a778862dc34941a4bebeb58706715726/charset_normalizer-2.0.12-py3-none-any.whl",
|
||||
"sha256": "6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"url": "https://files.pythonhosted.org/packages/2d/61/08076519c80041bc0ffa1a8af0cbd3bf3e2b62af10435d269a9d0f40564d/requests-2.27.1-py2.py3-none-any.whl",
|
||||
"sha256": "f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"url": "https://files.pythonhosted.org/packages/04/a2/d918dcd22354d8958fe113e1a3630137e0fc8b44859ade3063982eacd2a4/idna-3.3-py3-none-any.whl",
|
||||
"sha256": "84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"url": "https://files.pythonhosted.org/packages/e9/06/d3d367b7af6305b16f0d28ae2aaeb86154fa91f144f036c2d5002a5a202b/certifi-2022.6.15-py3-none-any.whl",
|
||||
"sha256": "fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -92,16 +92,6 @@ SPDX-License-Identifier: CC0-1.0
|
||||
<content_rating type="oars-1.0"/>
|
||||
<url type="homepage">https://apps.kde.org/en/audiotube</url>
|
||||
<releases>
|
||||
<release version="22.06" date="2022-06-24">
|
||||
<url>https://www.plasma-mobile.org/2022/06/28/plasma-mobile-gear-22-06/</url>
|
||||
<description>
|
||||
<ul>
|
||||
<li>Add library page which shows favourites and most played songs</li>
|
||||
<li>Improve layout of the search popup</li>
|
||||
<li>General performance improvements including startup</li>
|
||||
</ul>
|
||||
</description>
|
||||
</release>
|
||||
<release version="22.04" date="2022-04-26">
|
||||
<url>https://www.plasma-mobile.org/2022/04/26/plasma-mobile-gear-22-04/</url>
|
||||
<description>
|
||||
@@ -129,14 +119,11 @@ SPDX-License-Identifier: CC0-1.0
|
||||
<launchable type="desktop-id">org.kde.audiotube.desktop</launchable>
|
||||
<screenshots>
|
||||
<screenshot>
|
||||
<image>https://cdn.kde.org/screenshots/audiotube/library.png</image>
|
||||
<image>https://cdn.kde.org/screenshots/audiotube/desktop.png</image>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://cdn.kde.org/screenshots/audiotube/mobile_playlist.png</image>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://cdn.kde.org/screenshots/audiotube/desktop.png</image>
|
||||
</screenshot>
|
||||
</screenshots>
|
||||
<recommends>
|
||||
<control>pointing</control>
|
||||
|
||||
+34
-79
@@ -6,10 +6,10 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"PO-Revision-Date: 2022-05-28 23:09+0400\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2022-01-21 22:52+0400\n"
|
||||
"Last-Translator: Zayed Al-Saidi <[email protected]>\n"
|
||||
"Language-Team: Arabic <[email protected]>\n"
|
||||
"Language-Team: ar\n"
|
||||
"Language: ar\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -28,25 +28,20 @@ msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "[email protected]"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "شغّل"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "اخلط"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "شغل التالي"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "أضف إلى قائمة التّشغيل"
|
||||
@@ -88,76 +83,40 @@ msgstr "حسنًا"
|
||||
msgid "Cancel"
|
||||
msgstr "ألغِ"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr "المفضلة"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr "أظهر الكلّ"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr "الأغاني المفضّلة"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr "الأكثر تشغيلا"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr "الأغاني المشغلة"
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr "عُد"
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "ابحث"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "تيوب الصوتي"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, kde-format
|
||||
msgid "Now Playing"
|
||||
msgstr "المشغل الآن"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr "صُفّ"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "أزل المسار"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "امسح"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "اخلط"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "ألبث"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "لا يوجد وسائط تعمل"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr "قائمة غير معروفة من الأغاني"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr "لا يوجد أي أغنية بعد"
|
||||
msgid "Expand"
|
||||
msgstr "وسع"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
@@ -189,11 +148,7 @@ msgstr "راديو"
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr "اعثر على موسيقى على موسيقى يوتيوب"
|
||||
|
||||
#~ msgid "Clear"
|
||||
#~ msgstr "امسح"
|
||||
|
||||
#~ msgid "Pause"
|
||||
#~ msgstr "ألبث"
|
||||
|
||||
#~ msgid "Expand"
|
||||
#~ msgstr "وسع"
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "ابحث"
|
||||
+35
-80
@@ -6,16 +6,16 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"PO-Revision-Date: 2022-06-19 12:16+0400\n"
|
||||
"Last-Translator: Kheyyam <[email protected]>\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2022-04-22 18:44+0400\n"
|
||||
"Last-Translator: Kheyyam Gojayev <[email protected]>\n"
|
||||
"Language-Team: Azerbaijani <[email protected]>\n"
|
||||
"Language: az\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Lokalize 22.04.2\n"
|
||||
"X-Generator: Lokalize 21.12.3\n"
|
||||
|
||||
#, kde-format
|
||||
msgctxt "NAME OF TRANSLATORS"
|
||||
@@ -27,25 +27,20 @@ msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "[email protected]"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "Başladın"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Qarışıq"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "Sonrakını oxudun"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "Mahnı siyahısına əlavə edin"
|
||||
@@ -89,76 +84,40 @@ msgstr "OLDU"
|
||||
msgid "Cancel"
|
||||
msgstr "İmtina"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr "Süçilmişlər"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr "Hamısı göstərilsin"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr "Seçilmiş mahnılar"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr "Daha çox dinlənilən"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr "Oxudulan mahnılar"
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr "Geriyə"
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Axtarın"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "AudioTube"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, kde-format
|
||||
msgid "Now Playing"
|
||||
msgstr "İndi səslənir"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr "Növbə"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "Mahnını silin"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "Təmizləyin"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Qarışıq"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "Fasilə"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "Media faylı oynadılmır"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr "Naməlum mahnı siyahısı"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr "Hələlik burada mahnılar yoxdur"
|
||||
msgid "Expand"
|
||||
msgstr "Açmaq"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
@@ -190,11 +149,7 @@ msgstr "Radio"
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr "Musiqini YouTube Musiqi-də tapın"
|
||||
|
||||
#~ msgid "Clear"
|
||||
#~ msgstr "Təmizləyin"
|
||||
|
||||
#~ msgid "Pause"
|
||||
#~ msgstr "Fasilə"
|
||||
|
||||
#~ msgid "Expand"
|
||||
#~ msgstr "Açmaq"
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Axtarın"
|
||||
+40
-74
@@ -1,24 +1,23 @@
|
||||
# Translation of audiotube.po to Catalan
|
||||
# Copyright (C) 2021-2022 This_file_is_part_of_KDE
|
||||
# Copyright (C) 2021 This_file_is_part_of_KDE
|
||||
# This file is distributed under the license LGPL version 2.1 or
|
||||
# version 3 or later versions approved by the membership of KDE e.V.
|
||||
#
|
||||
# Antoni Bella Pérez <[email protected]>, 2021.
|
||||
# Josep M. Ferrer <[email protected]>, 2022.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"PO-Revision-Date: 2022-05-26 09:09+0200\n"
|
||||
"Last-Translator: Josep M. Ferrer <txemaq@gmail.com>\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2021-12-05 16:03+0100\n"
|
||||
"Last-Translator: Antoni Bella Pérez <antonibella5@yahoo.com>\n"
|
||||
"Language-Team: Catalan <[email protected]>\n"
|
||||
"Language: ca\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Lokalize 20.12.0\n"
|
||||
"X-Generator: Lokalize 21.11.90\n"
|
||||
|
||||
#, kde-format
|
||||
msgctxt "NAME OF TRANSLATORS"
|
||||
@@ -30,25 +29,20 @@ msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "[email protected]"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "Reprodueix"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Barreja"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "Reprodueix el següent"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "Afegeix a la llista de reproducció"
|
||||
@@ -92,76 +86,40 @@ msgstr "D'acord"
|
||||
msgid "Cancel"
|
||||
msgstr "Cancel·la"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr "Preferides"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr "Mostra-ho tot"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr "Cançons preferides"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr "Les més reproduïdes"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr "Cançons reproduïdes"
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr "Enrere"
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Cerca"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "AudioTube"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, kde-format
|
||||
msgid "Now Playing"
|
||||
msgstr "Ara s'està reproduint"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr "Cua"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "Elimina la pista"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "Neteja"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Barreja"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "Pausa"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "No s'està reproduint cap suport"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr "Llista desconeguda de cançons"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr "Encara no hi ha cap cançó"
|
||||
msgid "Expand"
|
||||
msgstr "Expandeix"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
@@ -192,3 +150,11 @@ msgstr "Ràdio"
|
||||
#, kde-format
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr "Cerca a la Música de Youtube"
|
||||
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Cerca"
|
||||
|
||||
#~ msgid "Play only Audio"
|
||||
#~ msgstr "Reprodueix només l'àudio"
|
||||
+40
-77
@@ -1,24 +1,23 @@
|
||||
# Translation of audiotube.po to Catalan (Valencian)
|
||||
# Copyright (C) 2021-2022 This_file_is_part_of_KDE
|
||||
# Copyright (C) 2021 This_file_is_part_of_KDE
|
||||
# This file is distributed under the license LGPL version 2.1 or
|
||||
# version 3 or later versions approved by the membership of KDE e.V.
|
||||
#
|
||||
# Antoni Bella Pérez <[email protected]>, 2021.
|
||||
# Josep M. Ferrer <[email protected]>, 2022.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"PO-Revision-Date: 2022-05-26 09:09+0200\n"
|
||||
"Last-Translator: Josep M. Ferrer <txemaq@gmail.com>\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2021-12-05 16:03+0100\n"
|
||||
"Last-Translator: Antoni Bella Pérez <antonibella5@yahoo.com>\n"
|
||||
"Language-Team: Catalan <[email protected]>\n"
|
||||
"Language: ca@valencia\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Lokalize 20.12.0\n"
|
||||
"X-Generator: Lokalize 21.11.90\n"
|
||||
|
||||
#, kde-format
|
||||
msgctxt "NAME OF TRANSLATORS"
|
||||
@@ -30,25 +29,20 @@ msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "[email protected]"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "Reproduïx"
|
||||
msgstr "Reprodueix"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Barreja"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "Reproduïx el següent"
|
||||
msgstr "Reprodueix el següent"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "Afig a la llista de reproducció"
|
||||
@@ -92,76 +86,40 @@ msgstr "D'acord"
|
||||
msgid "Cancel"
|
||||
msgstr "Cancel·la"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr "Preferides"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr "Mostra-ho tot"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr "Cançons preferides"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr "Les més reproduïdes"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr "Cançons reproduïdes"
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr "Enrere"
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Busca"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "AudioTube"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, kde-format
|
||||
msgid "Now Playing"
|
||||
msgstr "Ara s'està reproduint"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr "Cua"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "Elimina la pista"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "Neteja"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Barreja"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "Pausa"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "No s'està reproduint cap suport"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr "Llista desconeguda de cançons"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr "Encara no hi ha cap cançó"
|
||||
msgid "Expand"
|
||||
msgstr "Expandeix"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
@@ -181,7 +139,7 @@ msgstr "Desconeguda"
|
||||
#: contents/ui/SearchPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Play next"
|
||||
msgstr "Reproduïx el següent"
|
||||
msgstr "Reprodueix el següent"
|
||||
|
||||
#: contents/ui/SearchPage.qml:129
|
||||
#, kde-format
|
||||
@@ -192,3 +150,8 @@ msgstr "Ràdio"
|
||||
#, kde-format
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr "Busca a la Música de Youtube"
|
||||
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Busca"
|
||||
+35
-71
@@ -6,8 +6,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"PO-Revision-Date: 2022-06-28 13:58+0200\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2022-01-11 17:36+0100\n"
|
||||
"Last-Translator: Vit Pelcak <[email protected]>\n"
|
||||
"Language-Team: Czech <[email protected]>\n"
|
||||
"Language: cs\n"
|
||||
@@ -15,7 +15,7 @@ msgstr ""
|
||||
"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: Lokalize 22.04.2\n"
|
||||
"X-Generator: Lokalize 21.12.0\n"
|
||||
|
||||
#, kde-format
|
||||
msgctxt "NAME OF TRANSLATORS"
|
||||
@@ -27,25 +27,20 @@ msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "[email protected]"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "Přehrát"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Zamíchat"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "Přehrát následující"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "Přidat do seznamu skladeb"
|
||||
@@ -89,76 +84,40 @@ msgstr "OK"
|
||||
msgid "Cancel"
|
||||
msgstr "Zrušit"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr "Oblíbené"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr "Zobrazit vše"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr "Oblíbené skladby"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr "Nejčastěji hrané"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr "Přehrané skladby"
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr "Zpět"
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Hledat"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "AudioTube"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, kde-format
|
||||
msgid "Now Playing"
|
||||
msgstr "Nyní přehrávám"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr "Fronta"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "Odstranit skladbu"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "Vyprázdnit"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Zamíchat"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "Pozastavit"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "Nepřehrává se žádné médium"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr "Neznámý seznam skladeb"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr "Zatím zde nejsou žádné skladby"
|
||||
msgid "Expand"
|
||||
msgstr "Rozvinout"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
@@ -189,3 +148,8 @@ msgstr "Rádio"
|
||||
#, kde-format
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr "Najít hudbu na Hudba YouTube"
|
||||
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Hledat"
|
||||
+35
-80
@@ -7,16 +7,16 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"PO-Revision-Date: 2022-07-02 12:04+0200\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2022-02-20 10:37+0100\n"
|
||||
"Last-Translator: Frederik Schwarzer <[email protected]>\n"
|
||||
"Language-Team: German <kde-i18n-de@kde.org>\n"
|
||||
"Language-Team: German <kde-i18n-doc@kde.org>\n"
|
||||
"Language: de\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Lokalize 22.04.1\n"
|
||||
"X-Generator: Lokalize 21.08.0\n"
|
||||
|
||||
#, kde-format
|
||||
msgctxt "NAME OF TRANSLATORS"
|
||||
@@ -28,25 +28,20 @@ msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "[email protected]"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "Wiedergabe"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Zufällig"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "Nächste Wiedergabe"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "Zur Wiedergabeliste hinzufügen"
|
||||
@@ -90,76 +85,40 @@ msgstr "OK"
|
||||
msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr "Favoriten"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr "Alle anzeigen"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr "Lieblingsstücke"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr "Am meisten abgespielt"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr "Abgespielte Stücke"
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr "Zurück"
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Suchen"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "AudioTube"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, kde-format
|
||||
msgid "Now Playing"
|
||||
msgstr "Aktueller Titel"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr "Warteschlange"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "Stück entfernen"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "Löschen"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Zufällig"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "Pause"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "Es werden keine Medien wiedergegeben"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr "Unbekannte Liste von Liedern"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr "Bisher keine Lieder hier"
|
||||
msgid "Expand"
|
||||
msgstr "Erweitern"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
@@ -191,14 +150,10 @@ msgstr "Radio"
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr "Musik auf YouTube suchen"
|
||||
|
||||
#~ msgid "Clear"
|
||||
#~ msgstr "Löschen"
|
||||
|
||||
#~ msgid "Pause"
|
||||
#~ msgstr "Pause"
|
||||
|
||||
#~ msgid "Expand"
|
||||
#~ msgstr "Erweitern"
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Suchen"
|
||||
|
||||
#~ msgid "Play only Audio"
|
||||
#~ msgstr "Nur Audio abspielen"
|
||||
+32
-78
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2022-01-01 15:21+0000\n"
|
||||
"Last-Translator: Steve Allewell <[email protected]>\n"
|
||||
"Language-Team: British English <[email protected]>\n"
|
||||
@@ -27,25 +27,20 @@ msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "[email protected]"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "Play"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Shuffle"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "Play Next"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "Add to Playlist"
|
||||
@@ -89,77 +84,40 @@ msgstr "OK"
|
||||
msgid "Cancel"
|
||||
msgstr "Cancel"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Search"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "AudioTube"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, fuzzy, kde-format
|
||||
#| msgid "No media playing"
|
||||
msgid "Now Playing"
|
||||
msgstr "No media playing"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "Remove Track"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "Clear"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Shuffle"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "Pause"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "No media playing"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr ""
|
||||
msgid "Expand"
|
||||
msgstr "Expand"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
@@ -191,14 +149,10 @@ msgstr "Radio"
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr "Find music on YouTube Music"
|
||||
|
||||
#~ msgid "Clear"
|
||||
#~ msgstr "Clear"
|
||||
|
||||
#~ msgid "Pause"
|
||||
#~ msgstr "Pause"
|
||||
|
||||
#~ msgid "Expand"
|
||||
#~ msgstr "Expand"
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Search"
|
||||
|
||||
#~ msgid "Play only Audio"
|
||||
#~ msgstr "Play only Audio"
|
||||
+35
-80
@@ -3,13 +3,13 @@
|
||||
# This file is distributed under the same license as the audiotube package.
|
||||
#
|
||||
# Automatically generated, 2021.
|
||||
# Eloy Cuadra <[email protected]>, 2021, 2022.
|
||||
# Eloy Cuadra <[email protected]>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"PO-Revision-Date: 2022-05-27 12:34+0200\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2021-12-06 00:36+0100\n"
|
||||
"Last-Translator: Eloy Cuadra <[email protected]>\n"
|
||||
"Language-Team: Spanish <[email protected]>\n"
|
||||
"Language: es\n"
|
||||
@@ -17,7 +17,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Lokalize 22.04.1\n"
|
||||
"X-Generator: Lokalize 21.11.90\n"
|
||||
|
||||
#, kde-format
|
||||
msgctxt "NAME OF TRANSLATORS"
|
||||
@@ -29,25 +29,20 @@ msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "[email protected]"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "Reproducir"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Desordenar"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "Reproducir siguiente"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "Añadir a la lista de reproducción"
|
||||
@@ -91,76 +86,40 @@ msgstr "Aceptar"
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr "Favoritas"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr "Mostrar todas"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr "Canciones favoritas"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr "Más reproducidas"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr "Canciones reproducidas"
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr "Volver"
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Buscar"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "AudioTube"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, kde-format
|
||||
msgid "Now Playing"
|
||||
msgstr "Reproduciendo"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr "Cola"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "Eliminar pista"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "Borrar todo"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Desordenar"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "Pausar"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "Ningún medio en reproducción"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr "Lista de canciones desconocida"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr "Todavía no contiene canciones"
|
||||
msgid "Expand"
|
||||
msgstr "Expandir"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
@@ -192,14 +151,10 @@ msgstr "Radio"
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr "Encuentre música en YouTube Music"
|
||||
|
||||
#~ msgid "Clear"
|
||||
#~ msgstr "Borrar todo"
|
||||
|
||||
#~ msgid "Pause"
|
||||
#~ msgstr "Pausar"
|
||||
|
||||
#~ msgid "Expand"
|
||||
#~ msgstr "Expandir"
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Buscar"
|
||||
|
||||
#~ msgid "Play only Audio"
|
||||
#~ msgstr "Reproducir solo el sonido"
|
||||
+34
-79
@@ -9,8 +9,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"PO-Revision-Date: 2022-07-18 22:37+0200\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2022-02-21 18:58+0100\n"
|
||||
"Last-Translator: Iñigo Salvador Azurmendi <[email protected]>\n"
|
||||
"Language-Team: Basque <[email protected]>\n"
|
||||
"Language: eu\n"
|
||||
@@ -18,7 +18,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Lokalize 22.04.3\n"
|
||||
"X-Generator: Lokalize 21.12.2\n"
|
||||
|
||||
#, kde-format
|
||||
msgctxt "NAME OF TRANSLATORS"
|
||||
@@ -30,25 +30,20 @@ msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "[email protected]"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "Jo"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Nahastu"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "Jo hurrengoa"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "Gehitu jotze-zerrendara"
|
||||
@@ -92,76 +87,40 @@ msgstr "Ados"
|
||||
msgid "Cancel"
|
||||
msgstr "Utzi"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr "Gogokoak"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr "Erakutsi denak"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr "Gogoko abestiak"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr "Gehien jotakoa"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr "Jotako abestiak"
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr "Atzera"
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Bilatu"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "AudioTube"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, kde-format
|
||||
msgid "Now Playing"
|
||||
msgstr "Orain jotzen"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr "Ilara"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "Kendu pista"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "Garbitu"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Nahastu"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "Eten"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "Ez da euskarririk jotzen ari"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr "Abesti zerrenda ezezaguna"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr "Hemen oraindik ez dago abestirik"
|
||||
msgid "Expand"
|
||||
msgstr "Zabaldu"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
@@ -193,14 +152,10 @@ msgstr "Irratia"
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr "Aurkitu musika «Youtube Music»en"
|
||||
|
||||
#~ msgid "Clear"
|
||||
#~ msgstr "Garbitu"
|
||||
|
||||
#~ msgid "Pause"
|
||||
#~ msgstr "Eten"
|
||||
|
||||
#~ msgid "Expand"
|
||||
#~ msgstr "Zabaldu"
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Bilatu"
|
||||
|
||||
#~ msgid "Play only Audio"
|
||||
#~ msgstr "Audio bakarrik jo"
|
||||
+34
-79
@@ -6,8 +6,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"PO-Revision-Date: 2022-06-13 19:11+0300\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2022-01-11 22:47+0200\n"
|
||||
"Last-Translator: Tommi Nieminen <[email protected]>\n"
|
||||
"Language-Team: Finnish <[email protected]>\n"
|
||||
"Language: fi\n"
|
||||
@@ -15,7 +15,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Lokalize 21.12.3\n"
|
||||
"X-Generator: Lokalize 20.04.2\n"
|
||||
|
||||
#, kde-format
|
||||
msgctxt "NAME OF TRANSLATORS"
|
||||
@@ -27,25 +27,20 @@ msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "[email protected]"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "Toista"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Sekoita"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "Toista seuraava"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "Lisää soittolistaan"
|
||||
@@ -88,76 +83,40 @@ msgstr "OK"
|
||||
msgid "Cancel"
|
||||
msgstr "Peru"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr "Suosikit"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr "Näytä kaikki"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr "Suosikkikappaleet"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr "Soitetuimmat"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr "Soitetut kappaleet"
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr "Takaisin"
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Etsi"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "AudioTube"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, kde-format
|
||||
msgid "Now Playing"
|
||||
msgstr "Nyt soi"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr "Jono"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "Poista raita"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "Tyhjennä"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Sekoita"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "Tauko"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "Mitään ei toisteta"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr "Tuntematon kappaleluettelo"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr "Ei vielä kappaleita"
|
||||
msgid "Expand"
|
||||
msgstr "Laajenna"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
@@ -189,14 +148,10 @@ msgstr "Radio"
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr "Etsi musiikkia Youtube Musicista"
|
||||
|
||||
#~ msgid "Clear"
|
||||
#~ msgstr "Tyhjennä"
|
||||
|
||||
#~ msgid "Pause"
|
||||
#~ msgstr "Tauko"
|
||||
|
||||
#~ msgid "Expand"
|
||||
#~ msgstr "Laajenna"
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Etsi"
|
||||
|
||||
#~ msgid "Play only Audio"
|
||||
#~ msgstr "Toista vain ääni"
|
||||
+35
-80
@@ -1,10 +1,10 @@
|
||||
# Xavier Besnard <[email protected]>, 2021, 2022.
|
||||
# Xavier Besnard <[email protected]>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"PO-Revision-Date: 2022-06-05 18:56+0200\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2021-12-06 10:18+0100\n"
|
||||
"Last-Translator: Xavier Besnard <[email protected]>\n"
|
||||
"Language-Team: French <[email protected]>\n"
|
||||
"Language: fr\n"
|
||||
@@ -12,7 +12,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 22.04.1\n"
|
||||
"X-Generator: Lokalize 21.11.90\n"
|
||||
|
||||
#, kde-format
|
||||
msgctxt "NAME OF TRANSLATORS"
|
||||
@@ -24,25 +24,20 @@ msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "[email protected]"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "Lire"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Mélanger"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "Lire le suivant"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "Ajouter à la liste de lecture"
|
||||
@@ -86,76 +81,40 @@ msgstr "Ok"
|
||||
msgid "Cancel"
|
||||
msgstr "Annuler"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr "Favoris"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr "Tout afficher"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr "Titres favoris"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr "Les plus lus"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr "Titres lus"
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr "En arrière"
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Rechercher"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "AudioTube"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, kde-format
|
||||
msgid "Now Playing"
|
||||
msgstr "En cours de lecture"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr "Mettre en file d'attente"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "Supprimer une piste"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "Effacer"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Mélanger"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "Pause"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "Aucun média en lecture"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr "Liste inconnue de titres"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr "Aucun titre ici encore"
|
||||
msgid "Expand"
|
||||
msgstr "Développer"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
@@ -187,14 +146,10 @@ msgstr "Radio"
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr "Rechercher de la musique sur « YouTube Music »"
|
||||
|
||||
#~ msgid "Clear"
|
||||
#~ msgstr "Effacer"
|
||||
|
||||
#~ msgid "Pause"
|
||||
#~ msgstr "Pause"
|
||||
|
||||
#~ msgid "Expand"
|
||||
#~ msgstr "Développer"
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Rechercher"
|
||||
|
||||
#~ msgid "Play only Audio"
|
||||
#~ msgstr "Ne lire que l'audio"
|
||||
+32
-78
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2021-09-17 20:09+0530\n"
|
||||
"Last-Translator: Raghavendra Kamath <[email protected]>\n"
|
||||
"Language-Team: kde-hindi\n"
|
||||
@@ -27,25 +27,20 @@ msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "[email protected]"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "बजाएँ"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "फेंटें"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "अगला बजाएँ"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "गीत-सूची में जोड़ें"
|
||||
@@ -88,77 +83,40 @@ msgstr ""
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "खोजें"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "ओडियो-ट्यूब"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, fuzzy, kde-format
|
||||
#| msgid "No media playing"
|
||||
msgid "Now Playing"
|
||||
msgstr "कोई मीडिया नहीं बजा रहा है"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "गाना हटाएँ"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "साफ करें"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "फेंटें"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "रोकें"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "कोई मीडिया नहीं बजा रहा है"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr ""
|
||||
msgid "Expand"
|
||||
msgstr "विस्तृत करें"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
@@ -190,14 +148,10 @@ msgstr "रेडियो"
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr "यूट्यूब संगीत पर संगीत ढूंढें"
|
||||
|
||||
#~ msgid "Clear"
|
||||
#~ msgstr "साफ करें"
|
||||
|
||||
#~ msgid "Pause"
|
||||
#~ msgstr "रोकें"
|
||||
|
||||
#~ msgid "Expand"
|
||||
#~ msgstr "विस्तृत करें"
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "खोजें"
|
||||
|
||||
#~ msgid "Play only Audio"
|
||||
#~ msgstr "केवल ध्वनी चलाएँ"
|
||||
+35
-80
@@ -1,13 +1,13 @@
|
||||
# Copyright (C) YEAR This file is copyright:
|
||||
# This file is distributed under the same license as the audiotube package.
|
||||
# Vincenzo Reale <[email protected]>, 2021, 2022.
|
||||
# Vincenzo Reale <[email protected]>, 2021.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"PO-Revision-Date: 2022-05-26 14:13+0200\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2021-12-06 02:46+0100\n"
|
||||
"Last-Translator: Vincenzo Reale <[email protected]>\n"
|
||||
"Language-Team: Italian <[email protected]>\n"
|
||||
"Language: it\n"
|
||||
@@ -15,7 +15,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Lokalize 22.04.1\n"
|
||||
"X-Generator: Lokalize 21.08.3\n"
|
||||
|
||||
#, kde-format
|
||||
msgctxt "NAME OF TRANSLATORS"
|
||||
@@ -27,25 +27,20 @@ msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "[email protected]"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "Riproduci"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Mescola"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "Riproduci successivo"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "Aggiungi alla scaletta"
|
||||
@@ -89,76 +84,40 @@ msgstr "OK"
|
||||
msgid "Cancel"
|
||||
msgstr "Annulla"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr "Preferiti"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr "Mostra tutto"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr "Brani preferiti"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr "Più riprodotti"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr "Brani riprodotti"
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr "Indietro"
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Cerca"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "AudioTube"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, kde-format
|
||||
msgid "Now Playing"
|
||||
msgstr "In riproduzione"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr "Coda"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "Rimuovi traccia"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "Pulisci"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Mescola"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "Pausa"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "Nessun supporto in riproduzione"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr "Elenco di brani sconosciuto"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr "Non c'è ancora alcun brano"
|
||||
msgid "Expand"
|
||||
msgstr "Espandi"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
@@ -190,14 +149,10 @@ msgstr "Radio"
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr "Trova musica su Youtube Music"
|
||||
|
||||
#~ msgid "Clear"
|
||||
#~ msgstr "Pulisci"
|
||||
|
||||
#~ msgid "Pause"
|
||||
#~ msgstr "Pausa"
|
||||
|
||||
#~ msgid "Expand"
|
||||
#~ msgstr "Espandi"
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Cerca"
|
||||
|
||||
#~ msgid "Play only Audio"
|
||||
#~ msgstr "Riproduci solo l'audio"
|
||||
+35
-80
@@ -1,13 +1,13 @@
|
||||
# Copyright (C) YEAR This file is copyright:
|
||||
# This file is distributed under the same license as the audiotube package.
|
||||
# Shinjo Park <[email protected]>, 2021, 2022.
|
||||
# Shinjo Park <[email protected]>, 2021.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"PO-Revision-Date: 2022-07-13 15:34+0200\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2021-12-08 00:45+0100\n"
|
||||
"Last-Translator: Shinjo Park <[email protected]>\n"
|
||||
"Language-Team: Korean <[email protected]>\n"
|
||||
"Language: ko\n"
|
||||
@@ -15,7 +15,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Lokalize 21.12.3\n"
|
||||
"X-Generator: Lokalize 21.08.1\n"
|
||||
|
||||
#, kde-format
|
||||
msgctxt "NAME OF TRANSLATORS"
|
||||
@@ -27,25 +27,20 @@ msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "[email protected]"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "재생"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "무순서 재생"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "다음 재생"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "재생 목록에 추가"
|
||||
@@ -87,76 +82,40 @@ msgstr "확인"
|
||||
msgid "Cancel"
|
||||
msgstr "취소"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr "책갈피"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr "모두 표시"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr "책갈피에 등록된 노래"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr "가장 많이 재생됨"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr "재생한 노래"
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr "뒤로"
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "검색"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "AudioTube"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, kde-format
|
||||
msgid "Now Playing"
|
||||
msgstr "지금 재생 중"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr "대기열에 추가"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "트랙 삭제"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "지우기"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "무순서 재생"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "일시 정지"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "재생 중인 미디어 없음"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr "알 수 없는 노래 목록"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr "목록에 등록된 곡 없음"
|
||||
msgid "Expand"
|
||||
msgstr "확장"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
@@ -188,14 +147,10 @@ msgstr "라디오"
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr "YouTube Music에서 음악 찾기"
|
||||
|
||||
#~ msgid "Clear"
|
||||
#~ msgstr "지우기"
|
||||
|
||||
#~ msgid "Pause"
|
||||
#~ msgstr "일시 정지"
|
||||
|
||||
#~ msgid "Expand"
|
||||
#~ msgstr "확장"
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "검색"
|
||||
|
||||
#~ msgid "Play only Audio"
|
||||
#~ msgstr "오디오만 재생"
|
||||
+36
-81
@@ -1,13 +1,13 @@
|
||||
# Copyright (C) YEAR This file is copyright:
|
||||
# This file is distributed under the same license as the audiotube package.
|
||||
#
|
||||
# Freek de Kruijf <[email protected]>, 2021, 2022.
|
||||
# Freek de Kruijf <[email protected]>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"PO-Revision-Date: 2022-05-26 13:17+0200\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2021-12-05 16:48+0100\n"
|
||||
"Last-Translator: Freek de Kruijf <[email protected]>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: nl\n"
|
||||
@@ -15,37 +15,32 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Lokalize 22.04.1\n"
|
||||
"X-Generator: Lokalize 21.08.3\n"
|
||||
|
||||
#, kde-format
|
||||
msgctxt "NAME OF TRANSLATORS"
|
||||
msgid "Your names"
|
||||
msgstr "Freek de Kruijf - 2021 t/m 2022"
|
||||
msgstr "Freek de Kruijf - 2021"
|
||||
|
||||
#, kde-format
|
||||
msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "[email protected]"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "Afspelen"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Willekeurig afspelen"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "Volgende afspelen"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "Aan afspeellijst toevoegen"
|
||||
@@ -89,76 +84,40 @@ msgstr "OK"
|
||||
msgid "Cancel"
|
||||
msgstr "Annuleren"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr "Favorieten"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr "Alles tonen"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr "Favoriete songs"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr "Meest afgespeeld"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr "Afgespeelde songs"
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr "Terug"
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Zoeken"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "AudioTube"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, kde-format
|
||||
msgid "Now Playing"
|
||||
msgstr "Speelt nu"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr "Wachtrij"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "Track verwijderen"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "Wissen"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Willekeurig afspelen"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "Pauzeren"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "Er speelt geen medium"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr "Onbekende lijst met songs"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr "Er zijn hier nog geen songs"
|
||||
msgid "Expand"
|
||||
msgstr "Uitbreiden"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
@@ -190,14 +149,10 @@ msgstr "Radio"
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr "Muziek zoeken op YouTube Music"
|
||||
|
||||
#~ msgid "Clear"
|
||||
#~ msgstr "Wissen"
|
||||
|
||||
#~ msgid "Pause"
|
||||
#~ msgstr "Pauzeren"
|
||||
|
||||
#~ msgid "Expand"
|
||||
#~ msgstr "Uitbreiden"
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Zoeken"
|
||||
|
||||
#~ msgid "Play only Audio"
|
||||
#~ msgstr "Alleen geluid afspelen"
|
||||
+32
-78
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2022-01-01 09:11-0800\n"
|
||||
"Last-Translator: A S Alam <[email protected]>\n"
|
||||
"Language-Team: Punjabi <[email protected]>\n"
|
||||
@@ -27,25 +27,20 @@ msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "alam yellow @ gmail.com"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "ਚਲਾਓ"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "ਰਲਵੇਂ"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "ਅਗਲਾ ਚਲਾਓ"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "ਪਲੇਅਲਿਸਟ ਵਿੱਚ ਜੋੜੋ"
|
||||
@@ -87,77 +82,40 @@ msgstr "ਠੀਕ ਹੈ"
|
||||
msgid "Cancel"
|
||||
msgstr "ਰੱਦ ਕਰੋ"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "ਖੋਜੋ"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "ਆਡੀਓ-ਟਿਊਬ"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, fuzzy, kde-format
|
||||
#| msgid "No media playing"
|
||||
msgid "Now Playing"
|
||||
msgstr "ਕੋਈ ਮੀਡੀਆ ਨਹੀਂ ਚੱਲਦਾ"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "ਟਰੈਕ ਨੂੰ ਹਟਾਓ"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "ਮਿਟਾਓ"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "ਰਲਵੇਂ"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "ਵਿਰਾਮ"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "ਕੋਈ ਮੀਡੀਆ ਨਹੀਂ ਚੱਲਦਾ"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr ""
|
||||
msgid "Expand"
|
||||
msgstr "ਫੈਲਾਓ"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
@@ -189,14 +147,10 @@ msgstr "ਰੇਡੀਓ"
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr "ਯੂਟਿਊਬ ਸੰਗੀਤ ਉੱਤੇ ਸੰਗੀਤ ਲੱਭੋ"
|
||||
|
||||
#~ msgid "Clear"
|
||||
#~ msgstr "ਮਿਟਾਓ"
|
||||
|
||||
#~ msgid "Pause"
|
||||
#~ msgstr "ਵਿਰਾਮ"
|
||||
|
||||
#~ msgid "Expand"
|
||||
#~ msgstr "ਫੈਲਾਓ"
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "ਖੋਜੋ"
|
||||
|
||||
#~ msgid "Play only Audio"
|
||||
#~ msgstr "ਸਿਰਫ਼ ਆਡੀਓ ਹੀ ਚਲਾਓ"
|
||||
+34
-79
@@ -1,14 +1,14 @@
|
||||
# Copyright (C) YEAR This file is copyright:
|
||||
# This file is distributed under the same license as the audiotube package.
|
||||
#
|
||||
# Łukasz Wojniłowicz <[email protected]>, 2021, 2022.
|
||||
# Łukasz Wojniłowicz <[email protected]>, 2021.
|
||||
# Ignacy Kajdan <[email protected]>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"PO-Revision-Date: 2022-06-26 20:24+0200\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2021-12-30 12:38+0100\n"
|
||||
"Last-Translator: Łukasz Wojniłowicz <[email protected]>\n"
|
||||
"Language-Team: Polish <[email protected]>\n"
|
||||
"Language: pl\n"
|
||||
@@ -29,25 +29,20 @@ msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "[email protected], [email protected]"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "Odtwórz"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Wymieszaj"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "Odtwórz następny"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "Dodaj do listy odtwarzania"
|
||||
@@ -91,76 +86,40 @@ msgstr "OK"
|
||||
msgid "Cancel"
|
||||
msgstr "Anuluj"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr "Ulubione"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr "Pokaż wszystkie"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr "Ulubione utwory"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr "Najczęściej odtwarzane"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr "Odtwarzane utwory"
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr "Wstecz"
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Szukaj"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "AudioTube"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, kde-format
|
||||
msgid "Now Playing"
|
||||
msgstr "Teraz odtwarzany"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr "Kolejka"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "Usuń utwór"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "Wyczyść"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Wymieszaj"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "Wstrzymaj"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "Nic nie jest odtwarzane"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr "Nieznana lista utworów"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr "Jeszcze nie ma tutaj utworów"
|
||||
msgid "Expand"
|
||||
msgstr "Rozwiń"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
@@ -192,14 +151,10 @@ msgstr "Radio"
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr "Znajdź muzykę w serwisie YouTube Music"
|
||||
|
||||
#~ msgid "Clear"
|
||||
#~ msgstr "Wyczyść"
|
||||
|
||||
#~ msgid "Pause"
|
||||
#~ msgstr "Wstrzymaj"
|
||||
|
||||
#~ msgid "Expand"
|
||||
#~ msgstr "Rozwiń"
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Szukaj"
|
||||
|
||||
#~ msgid "Play only Audio"
|
||||
#~ msgstr "Odtwórz tylko dźwięk"
|
||||
+37
-70
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"PO-Revision-Date: 2022-06-03 17:36+0100\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2021-09-04 18:29+0100\n"
|
||||
"Last-Translator: José Nuno Coelho Pires <[email protected]>\n"
|
||||
"Language-Team: Portuguese <[email protected]>\n"
|
||||
"Language: pt\n"
|
||||
@@ -29,25 +29,20 @@ msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "[email protected]"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "Reproduzir"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Baralhar"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "Reproduzir o Seguinte"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "Adicionar à Lista de Reprodução"
|
||||
@@ -91,76 +86,40 @@ msgstr "OK"
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr "Favoritos"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr "Mostrar Tudo"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr "Músicas Favoritas"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr "Mais Tocadas"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr "Músicas Tocadas"
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr "Recuar"
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Procurar"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "AudioTube"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, kde-format
|
||||
msgid "Now Playing"
|
||||
msgstr "Agora a Ouvir"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr "Fila"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "Remover a Faixa"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "Limpar"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Baralhar"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "Pausa"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "Nada em reprodução"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr "Lista de músicas desconhecida"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr "Ainda sem músicas aqui"
|
||||
msgid "Expand"
|
||||
msgstr "Expandir"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
@@ -191,3 +150,11 @@ msgstr "Rádio"
|
||||
#, kde-format
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr "Procurar música no YouTube Music"
|
||||
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Procurar"
|
||||
|
||||
#~ msgid "Play only Audio"
|
||||
#~ msgstr "Reproduzir só o Áudio"
|
||||
+35
-80
@@ -1,14 +1,14 @@
|
||||
# Copyright (C) YEAR This file is copyright:
|
||||
# This file is distributed under the same license as the audiotube package.
|
||||
#
|
||||
# Luiz Fernando Ranghetti <[email protected]>, 2021, 2022.
|
||||
# Luiz Fernando Ranghetti <[email protected]>, 2021.
|
||||
# Thiago Masato Costa Sueto <[email protected]>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"PO-Revision-Date: 2022-07-13 14:59-0300\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2021-12-09 10:13-0300\n"
|
||||
"Last-Translator: Luiz Fernando Ranghetti <[email protected]>\n"
|
||||
"Language-Team: Portuguese <[email protected]>\n"
|
||||
"Language: pt_BR\n"
|
||||
@@ -16,7 +16,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 21.12.3\n"
|
||||
"X-Generator: Lokalize 20.04.2\n"
|
||||
|
||||
#, kde-format
|
||||
msgctxt "NAME OF TRANSLATORS"
|
||||
@@ -28,25 +28,20 @@ msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "[email protected]"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "Reproduzir"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Embaralhar"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "Reproduzir próxima"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "Adicionar à lista de reprodução"
|
||||
@@ -90,76 +85,40 @@ msgstr "OK"
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr "Favoritos"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr "Mostrar tudo"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr "Músicas favoritas"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr "Mais reproduzidas"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr "Músicas reproduzidas"
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr "Voltar"
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Pesquisar"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "AudioTube"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, kde-format
|
||||
msgid "Now Playing"
|
||||
msgstr "Reproduzindo agora"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr "Fila"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "Remover faixa"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "Limpar"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Embaralhar"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "Pausar"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "Nenhuma mídia em reprodução"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr "Lista de músicas desconhecida"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr "Nenhuma música ainda"
|
||||
msgid "Expand"
|
||||
msgstr "Expandir"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
@@ -191,14 +150,10 @@ msgstr "Rádio"
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr "Encontre músicas no YouTube Music"
|
||||
|
||||
#~ msgid "Clear"
|
||||
#~ msgstr "Limpar"
|
||||
|
||||
#~ msgid "Pause"
|
||||
#~ msgstr "Pausar"
|
||||
|
||||
#~ msgid "Expand"
|
||||
#~ msgstr "Expandir"
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Pesquisar"
|
||||
|
||||
#~ msgid "Play only Audio"
|
||||
#~ msgstr "Reproduzir apenas áudio"
|
||||
+31
-73
@@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2022-05-10 21:39+0300\n"
|
||||
"Last-Translator: Alexander Yavorsky <[email protected]>\n"
|
||||
"Language-Team: Russian <[email protected]>\n"
|
||||
@@ -28,25 +28,20 @@ msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "[email protected]"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "Воспроизвести"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Перемешать"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "Воспроизвести следующий"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr ""
|
||||
@@ -88,75 +83,39 @@ msgstr "ОК"
|
||||
msgid "Cancel"
|
||||
msgstr "Отмена"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Поиск"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "AudioTube"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, kde-format
|
||||
msgid "Now Playing"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "Удалить дорожку"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "Очистить"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Перемешать"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "Приостановить"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgid "Expand"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
@@ -189,8 +148,7 @@ msgstr "Радио"
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Clear"
|
||||
#~ msgstr "Очистить"
|
||||
|
||||
#~ msgid "Pause"
|
||||
#~ msgstr "Приостановить"
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Поиск"
|
||||
+32
-78
@@ -4,7 +4,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2022-04-07 18:01+0200\n"
|
||||
"Last-Translator: Roman Paholik <[email protected]>\n"
|
||||
"Language-Team: Slovak <[email protected]>\n"
|
||||
@@ -25,26 +25,21 @@ msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "[email protected]"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "Prehrať"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Zamiešať"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, fuzzy, kde-format
|
||||
#| msgid "Play"
|
||||
msgid "Play Next"
|
||||
msgstr "Prehrať"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "Pridať do zoznamu skladieb"
|
||||
@@ -86,77 +81,40 @@ msgstr "OK"
|
||||
msgid "Cancel"
|
||||
msgstr "Zrušiť"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Hľadať"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "AudioTube"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, fuzzy, kde-format
|
||||
#| msgid "No media playing"
|
||||
msgid "Now Playing"
|
||||
msgstr "Neprehráva sa žiadne médium"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "Vyčistiť"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Zamiešať"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "Pozastaviť"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "Neprehráva sa žiadne médium"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr ""
|
||||
msgid "Expand"
|
||||
msgstr "Rozvinúť"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
@@ -188,11 +146,7 @@ msgstr "Rádio"
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Clear"
|
||||
#~ msgstr "Vyčistiť"
|
||||
|
||||
#~ msgid "Pause"
|
||||
#~ msgstr "Pozastaviť"
|
||||
|
||||
#~ msgid "Expand"
|
||||
#~ msgstr "Rozvinúť"
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Hľadať"
|
||||
+35
-80
@@ -1,20 +1,20 @@
|
||||
# Copyright (C) YEAR This file is copyright:
|
||||
# This file is distributed under the same license as the audiotube package.
|
||||
#
|
||||
# Matjaž Jeran <[email protected]>, 2021, 2022.
|
||||
# Matjaž Jeran <[email protected]>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"PO-Revision-Date: 2022-05-27 07:50+0200\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2021-12-09 13:26+0100\n"
|
||||
"Last-Translator: Matjaž Jeran <[email protected]>\n"
|
||||
"Language-Team: Slovenian <[email protected]>\n"
|
||||
"Language: sl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Lokalize 21.12.2\n"
|
||||
"X-Generator: Lokalize 21.04.3\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
|
||||
"%100==4 ? 3 : 0);\n"
|
||||
|
||||
@@ -28,25 +28,20 @@ msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "[email protected]"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "Predvajaj"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Premešaj"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "Predvajaj naslednjo"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "Dodaj v seznam predvajanja"
|
||||
@@ -88,76 +83,40 @@ msgstr "V redu"
|
||||
msgid "Cancel"
|
||||
msgstr "Prekliči"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr "Priljubljene"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr "Prikaži vse"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr "Priljubljene pesmi"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr "Največkrat predvajane"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr "Predvajane pesmi"
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr "Nazaj"
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Išči"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "AudioTube"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, kde-format
|
||||
msgid "Now Playing"
|
||||
msgstr "Pravkar predvajano"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr "Čakalna vrsta"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "Odstrani sled"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "Očisti"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Premešaj"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "Premor"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "Niče se ne predvaja"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr "Neznan seznam pesmi"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr "Tu še ni nobene pesmi"
|
||||
msgid "Expand"
|
||||
msgstr "Razširi"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
@@ -189,14 +148,10 @@ msgstr "Radio"
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr "Najdi glasbo na Youtube Music"
|
||||
|
||||
#~ msgid "Clear"
|
||||
#~ msgstr "Očisti"
|
||||
|
||||
#~ msgid "Pause"
|
||||
#~ msgstr "Premor"
|
||||
|
||||
#~ msgid "Expand"
|
||||
#~ msgstr "Razširi"
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Išči"
|
||||
|
||||
#~ msgid "Play only Audio"
|
||||
#~ msgstr "Predvajaj samo zvok"
|
||||
+34
-79
@@ -1,13 +1,13 @@
|
||||
# Copyright (C) YEAR This file is copyright:
|
||||
# This file is distributed under the same license as the audiotube package.
|
||||
#
|
||||
# Stefan Asserhäll <[email protected]>, 2021, 2022.
|
||||
# Stefan Asserhäll <[email protected]>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"PO-Revision-Date: 2022-05-26 10:40+0200\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2021-12-05 11:41+0100\n"
|
||||
"Last-Translator: Stefan Asserhäll <[email protected]>\n"
|
||||
"Language-Team: Swedish <[email protected]>\n"
|
||||
"Language: sv\n"
|
||||
@@ -27,25 +27,20 @@ msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "[email protected]"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "Spela"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Blanda"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "Spela nästa"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "Lägg till i spellista"
|
||||
@@ -87,76 +82,40 @@ msgstr "Ok"
|
||||
msgid "Cancel"
|
||||
msgstr "Avbryt"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr "Favoriter"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr "Visa alla"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr "Favoritlåtar"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr "Mest spelade"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr "Spelade låtar"
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr "Bakåt"
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Sök"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "AudioTube"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, kde-format
|
||||
msgid "Now Playing"
|
||||
msgstr "Spelar nu"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr "Köa"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "Ta bort spår"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "Rensa"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Blanda"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "Paus"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "Inga media spelar"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr "Okänd låtlista"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr "Inga låtar här ännu"
|
||||
msgid "Expand"
|
||||
msgstr "Expandera"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
@@ -188,14 +147,10 @@ msgstr "Radio"
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr "Sök efter musik på YouTube musik"
|
||||
|
||||
#~ msgid "Clear"
|
||||
#~ msgstr "Rensa"
|
||||
|
||||
#~ msgid "Pause"
|
||||
#~ msgstr "Paus"
|
||||
|
||||
#~ msgid "Expand"
|
||||
#~ msgstr "Expandera"
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Sök"
|
||||
|
||||
#~ msgid "Play only Audio"
|
||||
#~ msgstr "Spela bara ljud"
|
||||
+34
-79
@@ -6,8 +6,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"PO-Revision-Date: 2022-05-26 10:29+0300\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2022-04-15 14:41+0300\n"
|
||||
"Last-Translator: Emir SARI <[email protected]>\n"
|
||||
"Language-Team: Turkish <[email protected]>\n"
|
||||
"Language: tr\n"
|
||||
@@ -15,7 +15,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Lokalize 22.04.0\n"
|
||||
"X-Generator: Lokalize 21.12.3\n"
|
||||
|
||||
#, kde-format
|
||||
msgctxt "NAME OF TRANSLATORS"
|
||||
@@ -27,25 +27,20 @@ msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "[email protected]"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "Çal"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Karıştır"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "Sonrakini Çal"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "Çalma Listesine Ekle"
|
||||
@@ -89,76 +84,40 @@ msgstr "Tamam"
|
||||
msgid "Cancel"
|
||||
msgstr "İptal"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr "Beğeniler"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr "Tümünü Göster"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr "Beğenilen Şarkılar"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr "En Çok Çalınanlar"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr "Çalınan Şarkılar"
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr "Geri"
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Ara"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "AudioTube"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, kde-format
|
||||
msgid "Now Playing"
|
||||
msgstr "Şimdi Çalınıyor"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr "Kuyruk"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "Parçayı Kaldır"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "Temizle"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Karıştır"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "Duraklat"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "Ortam çalmıyor"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr "Bilinmeyen şarkılar listesi"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr "Burada henüz şarkı yok"
|
||||
msgid "Expand"
|
||||
msgstr "Genişlet"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
@@ -190,11 +149,7 @@ msgstr "Radyo"
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr "YouTube Müzik'te müzik bul"
|
||||
|
||||
#~ msgid "Clear"
|
||||
#~ msgstr "Temizle"
|
||||
|
||||
#~ msgid "Pause"
|
||||
#~ msgstr "Duraklat"
|
||||
|
||||
#~ msgid "Expand"
|
||||
#~ msgstr "Genişlet"
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Ara"
|
||||
+34
-79
@@ -1,13 +1,13 @@
|
||||
# Copyright (C) YEAR This file is copyright:
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Yuri Chornoivan <[email protected]>, 2021, 2022.
|
||||
# Yuri Chornoivan <[email protected]>, 2021.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"PO-Revision-Date: 2022-05-26 08:15+0300\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2021-12-05 08:42+0200\n"
|
||||
"Last-Translator: Yuri Chornoivan <[email protected]>\n"
|
||||
"Language-Team: Ukrainian <[email protected]>\n"
|
||||
"Language: uk\n"
|
||||
@@ -28,25 +28,20 @@ msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "[email protected]"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "Відтворити"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Перемішати"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "Відтворити наступну"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "Додати до списку відтворення"
|
||||
@@ -90,76 +85,40 @@ msgstr "Гаразд"
|
||||
msgid "Cancel"
|
||||
msgstr "Скасувати"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr "Улюблені"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr "Показати всі"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr "Улюблені композиції"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr "Часто слухали"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr "Відтворені композиції"
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr "Назад"
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Пошук"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "AudioTube"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, kde-format
|
||||
msgid "Now Playing"
|
||||
msgstr "Зараз відтворюємо"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr "Додати до черги"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "Вилучити композицію"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "Спорожнити"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "Перемішати"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "Призупинити"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "Відтворення не відбувається"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr "Невідомий список композицій"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr "Тут ще немає композицій"
|
||||
msgid "Expand"
|
||||
msgstr "Розгорнути"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
@@ -191,14 +150,10 @@ msgstr "Радіо"
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr "Шукати музику на сайті «Музика Youtube»"
|
||||
|
||||
#~ msgid "Clear"
|
||||
#~ msgstr "Спорожнити"
|
||||
|
||||
#~ msgid "Pause"
|
||||
#~ msgstr "Призупинити"
|
||||
|
||||
#~ msgid "Expand"
|
||||
#~ msgstr "Розгорнути"
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "Пошук"
|
||||
|
||||
#~ msgid "Play only Audio"
|
||||
#~ msgstr "Відтворити лише звук"
|
||||
@@ -0,0 +1,155 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR This file is copyright:
|
||||
# This file is distributed under the same license as the audiotube package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2021-12-05 01:46+0000\n"
|
||||
"Last-Translator: transxx.py program <[email protected]>\n"
|
||||
"Language-Team: KDE Test Language <[email protected]>\n"
|
||||
"Language: x-test\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
|
||||
#, kde-format
|
||||
msgctxt "NAME OF TRANSLATORS"
|
||||
msgid "Your names"
|
||||
msgstr "xxYour namesxx"
|
||||
|
||||
#, kde-format
|
||||
msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "xxYour emailsxx"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "xxPlayxx"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "xxPlay Nextxx"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "xxAdd to Playlistxx"
|
||||
|
||||
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67
|
||||
#, kde-format
|
||||
msgid ""
|
||||
"Video playback is not supported yet. Do you want to play only the audio of "
|
||||
"\"%1\"?"
|
||||
msgstr ""
|
||||
"xxVideo playback is not supported yet. Do you want to play only the audio of "
|
||||
"\"%1\"?xx"
|
||||
|
||||
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25
|
||||
#, kde-format
|
||||
msgid "Albums"
|
||||
msgstr "xxAlbumsxx"
|
||||
|
||||
#: contents/ui/ArtistPage.qml:57
|
||||
#, kde-format
|
||||
msgid "Singles"
|
||||
msgstr "xxSinglesxx"
|
||||
|
||||
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31
|
||||
#, kde-format
|
||||
msgid "Songs"
|
||||
msgstr "xxSongsxx"
|
||||
|
||||
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33
|
||||
#, kde-format
|
||||
msgid "Videos"
|
||||
msgstr "xxVideosxx"
|
||||
|
||||
#: contents/ui/ConfirmationMessage.qml:16
|
||||
#, kde-format
|
||||
msgid "OK"
|
||||
msgstr "xxOKxx"
|
||||
|
||||
#: contents/ui/ConfirmationMessage.qml:21
|
||||
#, kde-format
|
||||
msgid "Cancel"
|
||||
msgstr "xxCancelxx"
|
||||
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "xxAudioTubexx"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "xxRemove Trackxx"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "xxClearxx"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "xxShufflexx"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "xxPausexx"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "xxNo media playingxx"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Expand"
|
||||
msgstr "xxExpandxx"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Artists"
|
||||
msgstr "xxArtistsxx"
|
||||
|
||||
#: contents/ui/SearchPage.qml:29
|
||||
#, kde-format
|
||||
msgid "Playlists"
|
||||
msgstr "xxPlaylistsxx"
|
||||
|
||||
#: contents/ui/SearchPage.qml:36
|
||||
#, kde-format
|
||||
msgid "Unknown"
|
||||
msgstr "xxUnknownxx"
|
||||
|
||||
#: contents/ui/SearchPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Play next"
|
||||
msgstr "xxPlay nextxx"
|
||||
|
||||
#: contents/ui/SearchPage.qml:129
|
||||
#, kde-format
|
||||
msgid "Radio"
|
||||
msgstr "xxRadioxx"
|
||||
|
||||
#: contents/ui/SearchPage.qml:147
|
||||
#, kde-format
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr "xxFind music on YouTube Musicxx"
|
||||
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "xxSearchxx"
|
||||
+34
-70
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kdeorg\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"PO-Revision-Date: 2022-07-16 05:20\n"
|
||||
"POT-Creation-Date: 2021-12-05 00:45+0000\n"
|
||||
"PO-Revision-Date: 2022-05-15 15:46\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Chinese Simplified\n"
|
||||
"Language: zh_CN\n"
|
||||
@@ -27,25 +27,20 @@ msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr "[email protected], [email protected]"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:173
|
||||
#: contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr "播放"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "随机播放"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr "播放下一首"
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr "添加到播放列表"
|
||||
@@ -87,76 +82,40 @@ msgstr "确定"
|
||||
msgid "Cancel"
|
||||
msgstr "取消"
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "搜索"
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#: contents/ui/main.qml:51
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr "AudioTube"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, kde-format
|
||||
msgid "Now Playing"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#: contents/ui/PlayerFooter.qml:106
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr "移除曲目"
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#: contents/ui/PlayerFooter.qml:123
|
||||
#, kde-format
|
||||
msgid "Clear"
|
||||
msgstr "清除"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:128 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr "随机播放"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:173
|
||||
#, kde-format
|
||||
msgid "Pause"
|
||||
msgstr "暂停"
|
||||
|
||||
#: contents/ui/PlayerFooter.qml:203
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr "没有正在播放的媒体"
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#: contents/ui/PlayerFooter.qml:247
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr ""
|
||||
msgid "Expand"
|
||||
msgstr "展开"
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
@@ -187,3 +146,8 @@ msgstr "电台"
|
||||
#, kde-format
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr "查找 YouTube Music 中的音乐"
|
||||
|
||||
#: contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr "搜索"
|
||||
@@ -1,190 +0,0 @@
|
||||
# Chinese translations for audiotube package
|
||||
# audiotube 套件的正體中文翻譯.
|
||||
# Copyright (C) 2022 This file is copyright:
|
||||
# This file is distributed under the same license as the audiotube package.
|
||||
# Automatically generated, 2022.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: audiotube\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||
"POT-Creation-Date: 2022-07-12 00:48+0000\n"
|
||||
"PO-Revision-Date: 2022-05-30 00:47+0000\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: zh_TW\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
|
||||
#, kde-format
|
||||
msgctxt "NAME OF TRANSLATORS"
|
||||
msgid "Your names"
|
||||
msgstr ""
|
||||
|
||||
#, kde-format
|
||||
msgctxt "EMAIL OF TRANSLATORS"
|
||||
msgid "Your emails"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/AlbumPage.qml:19 contents/ui/PlaylistPage.qml:19
|
||||
#, kde-format
|
||||
msgid "Play"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/AlbumPage.qml:26 contents/ui/PlaylistPage.qml:26
|
||||
#, kde-format
|
||||
msgid "Shuffle"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/AlbumPage.qml:68 contents/ui/ArtistPage.qml:101
|
||||
#: contents/ui/PlaybackHistory.qml:74 contents/ui/PlaylistPage.qml:67
|
||||
#, kde-format
|
||||
msgid "Play Next"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/AlbumPage.qml:73 contents/ui/ArtistPage.qml:107
|
||||
#: contents/ui/PlaybackHistory.qml:79 contents/ui/PlaylistPage.qml:72
|
||||
#: contents/ui/SearchPage.qml:123
|
||||
#, kde-format
|
||||
msgid "Add to Playlist"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67
|
||||
#, kde-format
|
||||
msgid ""
|
||||
"Video playback is not supported yet. Do you want to play only the audio of "
|
||||
"\"%1\"?"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25
|
||||
#, kde-format
|
||||
msgid "Albums"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/ArtistPage.qml:57
|
||||
#, kde-format
|
||||
msgid "Singles"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31
|
||||
#, kde-format
|
||||
msgid "Songs"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33
|
||||
#, kde-format
|
||||
msgid "Videos"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/ConfirmationMessage.qml:16
|
||||
#, kde-format
|
||||
msgid "OK"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/ConfirmationMessage.qml:21
|
||||
#, kde-format
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Favourites"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:37 contents/ui/LibraryPage.qml:108
|
||||
#, kde-format
|
||||
msgid "Show All"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:42
|
||||
#, kde-format
|
||||
msgid "Favourite Songs"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:98
|
||||
#, kde-format
|
||||
msgid "Most played"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/LibraryPage.qml:113
|
||||
#, kde-format
|
||||
msgid "Played Songs"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/main.qml:39
|
||||
#, kde-format
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/main.qml:73 contents/ui/SearchPage.qml:150
|
||||
#, kde-format
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/main.qml:85
|
||||
#, kde-format
|
||||
msgid "AudioTube"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:92
|
||||
#, kde-format
|
||||
msgid "Now Playing"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Queue"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:222
|
||||
#, kde-format
|
||||
msgid "Remove Track"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/MaximizedPlayerPage.qml:242
|
||||
#: contents/ui/MinimizedPlayerControls.qml:96
|
||||
#, kde-format
|
||||
msgid "No media playing"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:15
|
||||
#, kde-format
|
||||
msgid "Unknown list of songs"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/PlaybackHistory.qml:25
|
||||
#, kde-format
|
||||
msgid "No songs here yet"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/SearchPage.qml:27
|
||||
#, kde-format
|
||||
msgid "Artists"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/SearchPage.qml:29
|
||||
#, kde-format
|
||||
msgid "Playlists"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/SearchPage.qml:36
|
||||
#, kde-format
|
||||
msgid "Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/SearchPage.qml:117
|
||||
#, kde-format
|
||||
msgid "Play next"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/SearchPage.qml:129
|
||||
#, kde-format
|
||||
msgid "Radio"
|
||||
msgstr ""
|
||||
|
||||
#: contents/ui/SearchPage.qml:147
|
||||
#, kde-format
|
||||
msgid "Find music on YouTube Music"
|
||||
msgstr ""
|
||||
+1
-1
@@ -3,5 +3,5 @@
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||
|
||||
ytmusicapi==0.22.0
|
||||
ytmusicapi==0.21.0
|
||||
yt-dlp
|
||||
+1
-1
@@ -52,6 +52,6 @@ target_link_libraries(audiotube
|
||||
asyncdatabase
|
||||
)
|
||||
|
||||
target_compile_definitions(audiotube PRIVATE -DQT_NO_KEYWORDS -DQT_NO_URL_CAST_FROM_STRING)
|
||||
target_compile_definitions(audiotube PRIVATE -DQT_NO_KEYWORDS -DQT_NO_URL_CAST_FROM_STRING -DQT_QML_DEBUG)
|
||||
|
||||
install(TARGETS audiotube ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
|
||||
+11
-48
@@ -78,8 +78,6 @@ void runDatabaseMigrations(QSqlDatabase &database, const QString &migrationDirec
|
||||
}
|
||||
qCDebug(asyncdatabase) << "Running migration" << subdir.dirName();
|
||||
|
||||
database.transaction();
|
||||
|
||||
// Hackish
|
||||
const auto statements = file.readAll().split(';');
|
||||
|
||||
@@ -101,52 +99,39 @@ void runDatabaseMigrations(QSqlDatabase &database, const QString &migrationDirec
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (migrationSuccessful) {
|
||||
database.commit();
|
||||
markMigrationRun(database, subdir.dirName());
|
||||
} else {
|
||||
database.rollback();
|
||||
}
|
||||
}
|
||||
}
|
||||
qCDebug(asyncdatabase) << "Migrations finished";
|
||||
}
|
||||
|
||||
struct AsyncSqlDatabasePrivate {
|
||||
QSqlDatabase database;
|
||||
};
|
||||
|
||||
// Internal asynchronous database class
|
||||
QFuture<void> AsyncSqlDatabase::establishConnection(const DatabaseConfiguration &configuration)
|
||||
{
|
||||
return runAsync([=, this] {
|
||||
d->database = QSqlDatabase::addDatabase(configuration.type());
|
||||
return runAsync<void>([=, this] {
|
||||
m_database = std::make_unique<QSqlDatabase>(QSqlDatabase::addDatabase(configuration.type()));
|
||||
if (configuration.databaseName()) {
|
||||
d->database.setDatabaseName(*configuration.databaseName());
|
||||
m_database->setDatabaseName(*configuration.databaseName());
|
||||
}
|
||||
if (configuration.hostName()) {
|
||||
d->database.setHostName(*configuration.hostName());
|
||||
m_database->setHostName(*configuration.hostName());
|
||||
}
|
||||
if (configuration.userName()) {
|
||||
d->database.setUserName(*configuration.userName());
|
||||
m_database->setUserName(*configuration.userName());
|
||||
}
|
||||
if (configuration.password()) {
|
||||
d->database.setPassword(*configuration.password());
|
||||
m_database->setPassword(*configuration.password());
|
||||
}
|
||||
|
||||
if (!d->database.open()) {
|
||||
qCDebug(asyncdatabase) << "Failed to open database" << d->database.lastError().text();
|
||||
if (configuration.databaseName()) {
|
||||
qCDebug(asyncdatabase) << "Tried to use database" << *configuration.databaseName();
|
||||
}
|
||||
}
|
||||
m_database->open();
|
||||
});
|
||||
}
|
||||
|
||||
AsyncSqlDatabase::AsyncSqlDatabase()
|
||||
: QObject()
|
||||
, d(std::make_unique<AsyncSqlDatabasePrivate>())
|
||||
, m_database(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -191,11 +176,6 @@ std::optional<Row> AsyncSqlDatabase::retrieveOptionalRow(QSqlQuery &query)
|
||||
}
|
||||
}
|
||||
|
||||
QSqlDatabase &AsyncSqlDatabase::db()
|
||||
{
|
||||
return d->database;
|
||||
}
|
||||
|
||||
AsyncSqlDatabase::~AsyncSqlDatabase() = default;
|
||||
|
||||
void printSqlError(const QSqlQuery &query)
|
||||
@@ -213,14 +193,6 @@ QSqlQuery prepareQuery(const QSqlDatabase &database, const QString &sqlQuery)
|
||||
return query;
|
||||
}
|
||||
|
||||
QSqlQuery runQuery(QSqlQuery &query)
|
||||
{
|
||||
if (!query.exec()) {
|
||||
printSqlError(query);
|
||||
}
|
||||
return query;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
struct DatabaseConfigurationPrivate : public QSharedData {
|
||||
@@ -278,22 +250,18 @@ const std::optional<QString> &DatabaseConfiguration::password() const {
|
||||
}
|
||||
|
||||
|
||||
struct ThreadedDatabasePrivate {
|
||||
asyncdatabase_private::AsyncSqlDatabase db;
|
||||
};
|
||||
|
||||
std::unique_ptr<ThreadedDatabase> ThreadedDatabase::establishConnection(DatabaseConfiguration config) {
|
||||
auto threadedDb = std::make_unique<ThreadedDatabase>();
|
||||
threadedDb->setObjectName(QStringLiteral("database thread"));
|
||||
threadedDb->d->db.moveToThread(&*threadedDb);
|
||||
threadedDb->m_db->moveToThread(&*threadedDb);
|
||||
threadedDb->start();
|
||||
threadedDb->d->db.establishConnection(config);
|
||||
threadedDb->m_db->establishConnection(config);
|
||||
return threadedDb;
|
||||
}
|
||||
|
||||
ThreadedDatabase::ThreadedDatabase()
|
||||
: QThread()
|
||||
, d(std::make_unique<ThreadedDatabasePrivate>())
|
||||
, m_db(std::make_unique<asyncdatabase_private::AsyncSqlDatabase>())
|
||||
{
|
||||
}
|
||||
|
||||
@@ -302,8 +270,3 @@ ThreadedDatabase::~ThreadedDatabase()
|
||||
quit();
|
||||
wait();
|
||||
}
|
||||
|
||||
asyncdatabase_private::AsyncSqlDatabase &ThreadedDatabase::db()
|
||||
{
|
||||
return d->db;
|
||||
}
|
||||
+44
-39
@@ -10,6 +10,10 @@ class QSqlDatabase;
|
||||
#include <QString>
|
||||
#include <QObject>
|
||||
#include <QFuture>
|
||||
#include <QFutureWatcher>
|
||||
#include <QSqlQuery>
|
||||
#include <QDebug>
|
||||
#include <QThread>
|
||||
#include <QSharedDataPointer>
|
||||
|
||||
#include <memory>
|
||||
@@ -19,6 +23,9 @@ class QSqlDatabase;
|
||||
|
||||
#include "asyncdatabase_p.h"
|
||||
|
||||
using Row = std::vector<QVariant>;
|
||||
using Rows = std::vector<Row>;
|
||||
|
||||
struct DatabaseConfigurationPrivate;
|
||||
|
||||
///
|
||||
@@ -59,15 +66,36 @@ private:
|
||||
///
|
||||
const QString DATABASE_TYPE_SQLITE = QStringLiteral("QSQLITE");
|
||||
|
||||
template <typename T>
|
||||
concept FromSql = requires(T v, typename T::ColumnTypes row)
|
||||
///
|
||||
/// Parse the row into a tuple of the given types.
|
||||
/// The types need to be deserializable from QVariant.
|
||||
///
|
||||
template <typename ...RowTypes>
|
||||
auto parseRow(const Row &row) -> std::tuple<RowTypes...>
|
||||
{
|
||||
typename T::ColumnTypes;
|
||||
{ std::tuple(row) } -> std::same_as<typename T::ColumnTypes>;
|
||||
{ T::fromSql(row) } -> std::same_as<T>;
|
||||
};
|
||||
auto tuple = std::tuple<RowTypes...>();
|
||||
int i = 0;
|
||||
asyncdatabase_private::iterate_tuple(tuple, [&](auto &elem) {
|
||||
elem = row.at(i).value<std::decay_t<decltype(elem)>>();
|
||||
i++;
|
||||
});
|
||||
return tuple;
|
||||
}
|
||||
|
||||
struct ThreadedDatabasePrivate;
|
||||
///
|
||||
/// Parse the rows into a list of tuples of the given types.
|
||||
/// The types need to be deserializable from QVariant.
|
||||
///
|
||||
template <typename ...RowTypes>
|
||||
auto parseRows(const Rows &rows) -> std::vector<std::tuple<RowTypes...>> {
|
||||
std::vector<std::tuple<RowTypes...>> parsedRows;
|
||||
parsedRows.reserve(rows.size());
|
||||
for (const auto &row : rows) {
|
||||
parsedRows.push_back(parseRow<RowTypes...>(row));
|
||||
}
|
||||
|
||||
return parsedRows;
|
||||
}
|
||||
|
||||
class ThreadedDatabase : public QThread {
|
||||
public:
|
||||
@@ -85,9 +113,8 @@ public:
|
||||
/// \return
|
||||
///
|
||||
template <typename ...Args>
|
||||
requires std::conjunction_v<std::is_convertible<Args, QVariant>...>
|
||||
auto execute(const QString &sqlQuery, Args... args) -> QFuture<void> {
|
||||
return db().execute(sqlQuery, args...);
|
||||
return m_db->execute(sqlQuery, args...);
|
||||
}
|
||||
|
||||
///
|
||||
@@ -100,7 +127,7 @@ public:
|
||||
/// \return
|
||||
///
|
||||
auto runMigrations(const QString &migrationDirectory) -> QFuture<void> {
|
||||
return db().runMigrations(migrationDirectory);
|
||||
return m_db->runMigrations(migrationDirectory);
|
||||
}
|
||||
|
||||
///
|
||||
@@ -109,44 +136,22 @@ public:
|
||||
/// \param parameters to bind to the placeholders in the SQL query.
|
||||
/// \return Future of a list of lists of variants.
|
||||
///
|
||||
/// T must provide a tuple of the column types as `using ColumnTypes = std::tuple<...>`
|
||||
/// and a `static T fromSql(ColumnTypes tuple)` deserialization method.
|
||||
///
|
||||
template <typename T, typename ...Args>
|
||||
requires FromSql<T> && std::conjunction_v<std::is_convertible<Args, QVariant>...>
|
||||
auto getResults(const QString &sqlQuery, Args... args) -> QFuture<std::vector<T>> {
|
||||
return db().getResults<T, Args...>(sqlQuery, args...);
|
||||
template <typename ...Args>
|
||||
auto getResults(const QString &sqlQuery, Args... args) -> QFuture<Rows> {
|
||||
return m_db->getResults(sqlQuery, args...);
|
||||
}
|
||||
|
||||
///
|
||||
/// \brief Like getResults, but for retrieving just one row.
|
||||
///
|
||||
template <typename T, typename ...Args>
|
||||
requires FromSql<T> && std::conjunction_v<std::is_convertible<Args, QVariant>...>
|
||||
auto getResult(const QString &sqlQuery, Args... args) -> QFuture<std::optional<T>> {
|
||||
return db().getResult<T, Args...>(sqlQuery, args...);
|
||||
template <typename ...Args>
|
||||
auto getResult(const QString &sqlQuery, Args... args) -> QFuture<std::optional<Row>> {
|
||||
return m_db->getResult(sqlQuery, args...);
|
||||
}
|
||||
|
||||
ThreadedDatabase();
|
||||
~ThreadedDatabase();
|
||||
|
||||
private:
|
||||
asyncdatabase_private::AsyncSqlDatabase &db();
|
||||
|
||||
std::unique_ptr<ThreadedDatabasePrivate> d;
|
||||
};
|
||||
|
||||
///
|
||||
/// \brief Deserialize just a single value from a query result.
|
||||
///
|
||||
template <typename T>
|
||||
struct SingleValue {
|
||||
using ColumnTypes = std::tuple<T>;
|
||||
|
||||
static SingleValue fromSql(ColumnTypes tuple) {
|
||||
auto [value] = tuple;
|
||||
return SingleValue { value };
|
||||
}
|
||||
|
||||
T value;
|
||||
std::unique_ptr<asyncdatabase_private::AsyncSqlDatabase> m_db;
|
||||
};
|
||||
+23
-53
@@ -60,35 +60,11 @@ void connectFuture(const QFuture<T> &future, QObjectDerivedType *self, const Fun
|
||||
using Row = std::vector<QVariant>;
|
||||
using Rows = std::vector<Row>;
|
||||
|
||||
template <typename RowTypesTuple>
|
||||
auto parseRow(const Row &row) -> RowTypesTuple
|
||||
{
|
||||
auto tuple = RowTypesTuple();
|
||||
int i = 0;
|
||||
asyncdatabase_private::iterate_tuple(tuple, [&](auto &elem) {
|
||||
elem = row.at(i).value<std::decay_t<decltype(elem)>>();
|
||||
i++;
|
||||
});
|
||||
return tuple;
|
||||
}
|
||||
|
||||
template <typename RowTypesTuple>
|
||||
auto parseRows(const Rows &rows) -> std::vector<RowTypesTuple> {
|
||||
std::vector<RowTypesTuple> parsedRows;
|
||||
parsedRows.reserve(rows.size());
|
||||
std::ranges::transform(rows, std::back_inserter(parsedRows), parseRow<RowTypesTuple>);
|
||||
return parsedRows;
|
||||
}
|
||||
|
||||
void runDatabaseMigrations(QSqlDatabase &database, const QString &migrationDirectory);
|
||||
|
||||
void printSqlError(const QSqlQuery &query);
|
||||
|
||||
// non-template helper functions to allow patching a much as possible in the shared library
|
||||
QSqlQuery prepareQuery(const QSqlDatabase &database, const QString &sqlQuery);
|
||||
QSqlQuery runQuery(QSqlQuery &query);
|
||||
|
||||
struct AsyncSqlDatabasePrivate;
|
||||
|
||||
class AsyncSqlDatabase : public QObject {
|
||||
Q_OBJECT
|
||||
@@ -96,40 +72,32 @@ class AsyncSqlDatabase : public QObject {
|
||||
public:
|
||||
QFuture<void> establishConnection(const DatabaseConfiguration &configuration);
|
||||
|
||||
template <typename T, typename ...Args>
|
||||
auto getResults(const QString &sqlQuery, Args... args) -> QFuture<std::vector<T>> {
|
||||
return runAsync([=, this] {
|
||||
template <typename ...Args>
|
||||
auto getResults(const QString &sqlQuery, Args... args) -> QFuture<Rows> {
|
||||
return runAsync<Rows>([=, this] {
|
||||
auto query = executeQuery(sqlQuery, args...);
|
||||
const auto rows = parseRows<typename T::ColumnTypes>(retrieveRows(query));
|
||||
|
||||
std::vector<T> deserializedRows;
|
||||
std::ranges::transform(rows, std::back_inserter(deserializedRows), T::fromSql);
|
||||
return deserializedRows;
|
||||
return retrieveRows(query);
|
||||
});
|
||||
}
|
||||
|
||||
template <typename T, typename ...Args>
|
||||
auto getResult(const QString &sqlQuery, Args... args) -> QFuture<std::optional<T>> {
|
||||
return runAsync([=, this]() -> std::optional<T> {
|
||||
template <typename ...Args>
|
||||
auto getResult(const QString &sqlQuery, Args... args) -> QFuture<std::optional<Row>> {
|
||||
return runAsync<std::optional<Row>>([=, this] {
|
||||
auto query = executeQuery(sqlQuery, args...);
|
||||
if (const auto row = retrieveOptionalRow(query)) {
|
||||
return T::fromSql(parseRow<typename T::ColumnTypes>(*row));
|
||||
}
|
||||
|
||||
return std::nullopt;
|
||||
return retrieveOptionalRow(query);
|
||||
});
|
||||
}
|
||||
|
||||
template <typename ...Args>
|
||||
auto execute(const QString &sqlQuery, Args... args) -> QFuture<void> {
|
||||
return runAsync([=, this] {
|
||||
return runAsync<void>([=, this] {
|
||||
executeQuery(sqlQuery, args...);
|
||||
});
|
||||
}
|
||||
|
||||
auto runMigrations(const QString &migrationDirectory) -> QFuture<void> {
|
||||
return runAsync([=, this] {
|
||||
runDatabaseMigrations(db(), migrationDirectory);
|
||||
return runAsync<void>([=, this] {
|
||||
runDatabaseMigrations(*m_database, migrationDirectory);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -139,22 +107,26 @@ public:
|
||||
private:
|
||||
template <typename ...Args>
|
||||
QSqlQuery executeQuery(const QString &sqlQuery, Args... args) {
|
||||
auto query = prepareQuery(db(), sqlQuery);
|
||||
auto query = prepareQuery(*m_database, sqlQuery);
|
||||
auto argsTuple = std::make_tuple<Args...>(std::move(args)...);
|
||||
int i = 0;
|
||||
asyncdatabase_private::iterate_tuple(argsTuple, [&](auto &arg) {
|
||||
query.bindValue(i, arg);
|
||||
i++;
|
||||
});
|
||||
return runQuery(query);
|
||||
|
||||
if (!query.exec()) {
|
||||
printSqlError(query);
|
||||
}
|
||||
|
||||
return query;
|
||||
}
|
||||
|
||||
template <typename Functor>
|
||||
QFuture<std::invoke_result_t<Functor>> runAsync(Functor func) {
|
||||
using ReturnType = std::invoke_result_t<Functor>;
|
||||
auto interface = std::make_shared<QFutureInterface<ReturnType>>();
|
||||
template <typename T, typename Functor>
|
||||
QFuture<T> runAsync(Functor func) {
|
||||
auto interface = std::make_shared<QFutureInterface<T>>();
|
||||
QMetaObject::invokeMethod(this, [interface, func] {
|
||||
if constexpr (!std::is_same_v<ReturnType, void>) {
|
||||
if constexpr (!std::is_same_v<T, void>) {
|
||||
auto result = func();
|
||||
interface->reportResult(result);
|
||||
} else {
|
||||
@@ -171,9 +143,7 @@ private:
|
||||
Rows retrieveRows(QSqlQuery &query);
|
||||
std::optional<Row> retrieveOptionalRow(QSqlQuery &query);
|
||||
|
||||
QSqlDatabase &db();
|
||||
|
||||
std::unique_ptr<AsyncSqlDatabasePrivate> d;
|
||||
std::unique_ptr<QSqlDatabase> m_database;
|
||||
};
|
||||
|
||||
}
|
||||
+15
-18
@@ -9,7 +9,6 @@
|
||||
#include <QJsonObject>
|
||||
#include <QJsonArray>
|
||||
#include <QFutureInterface>
|
||||
#include <QCoreApplication>
|
||||
|
||||
#include <pybind11/embed.h>
|
||||
|
||||
@@ -24,8 +23,8 @@ namespace py = pybind11;
|
||||
#include <type_traits>
|
||||
#include <memory>
|
||||
|
||||
template <typename T, typename OP>
|
||||
std::optional<std::invoke_result_t<OP, T>> mapOptional(const std::optional<T> &optional, OP op) {
|
||||
template <typename R, typename T, typename OP>
|
||||
std::optional<R> map_optional(const std::optional<T> &optional, OP op) {
|
||||
if (optional.has_value()) {
|
||||
if constexpr (std::is_member_function_pointer<OP>::value) {
|
||||
return (&optional.value()->*op)();
|
||||
@@ -62,7 +61,7 @@ AsyncYTMusic::AsyncYTMusic(QObject *parent)
|
||||
//
|
||||
QFuture<std::vector<search::SearchResultItem>> AsyncYTMusic::search(const QString &query)
|
||||
{
|
||||
return invokeAndCatchOnThread([=, this]() {
|
||||
return invokeAndCatchOnThread<std::vector<search::SearchResultItem>>([=, this]() {
|
||||
return m_ytm->search(query.toStdString());
|
||||
});
|
||||
}
|
||||
@@ -72,7 +71,7 @@ QFuture<std::vector<search::SearchResultItem>> AsyncYTMusic::search(const QStrin
|
||||
//
|
||||
QFuture<artist::Artist> AsyncYTMusic::fetchArtist(const QString &channelId)
|
||||
{
|
||||
return invokeAndCatchOnThread([=, this]() {
|
||||
return invokeAndCatchOnThread<artist::Artist>([=, this]() {
|
||||
return m_ytm->get_artist(channelId.toStdString());
|
||||
});
|
||||
}
|
||||
@@ -82,7 +81,7 @@ QFuture<artist::Artist> AsyncYTMusic::fetchArtist(const QString &channelId)
|
||||
//
|
||||
QFuture<album::Album> AsyncYTMusic::fetchAlbum(const QString &browseId)
|
||||
{
|
||||
return invokeAndCatchOnThread([=, this]() {
|
||||
return invokeAndCatchOnThread<album::Album>([=, this]() {
|
||||
return m_ytm->get_album(browseId.toStdString());
|
||||
});
|
||||
}
|
||||
@@ -92,7 +91,7 @@ QFuture<album::Album> AsyncYTMusic::fetchAlbum(const QString &browseId)
|
||||
//
|
||||
QFuture<std::optional<song::Song>> AsyncYTMusic::fetchSong(const QString &videoId)
|
||||
{
|
||||
return invokeAndCatchOnThread([=, this]() {
|
||||
return invokeAndCatchOnThread<std::optional<song::Song>>([=, this]() {
|
||||
return m_ytm->get_song(videoId.toStdString());
|
||||
});
|
||||
}
|
||||
@@ -101,7 +100,7 @@ QFuture<std::optional<song::Song>> AsyncYTMusic::fetchSong(const QString &videoI
|
||||
// fetchPlaylist
|
||||
//
|
||||
QFuture<playlist::Playlist> AsyncYTMusic::fetchPlaylist(const QString &playlistId) {
|
||||
return invokeAndCatchOnThread([=, this]() {
|
||||
return invokeAndCatchOnThread<playlist::Playlist>([=, this]() {
|
||||
return m_ytm->get_playlist(playlistId.toStdString());
|
||||
});
|
||||
}
|
||||
@@ -111,7 +110,7 @@ QFuture<playlist::Playlist> AsyncYTMusic::fetchPlaylist(const QString &playlistI
|
||||
//
|
||||
QFuture<std::vector<artist::Artist::Album>> AsyncYTMusic::fetchArtistAlbums(const QString &channelId, const QString ¶ms)
|
||||
{
|
||||
return invokeAndCatchOnThread([=, this]() {
|
||||
return invokeAndCatchOnThread<std::vector<artist::Artist::Album>>([=, this]() {
|
||||
return m_ytm->get_artist_albums(channelId.toStdString(), params.toStdString());
|
||||
});
|
||||
}
|
||||
@@ -121,7 +120,7 @@ QFuture<std::vector<artist::Artist::Album>> AsyncYTMusic::fetchArtistAlbums(cons
|
||||
//
|
||||
QFuture<video_info::VideoInfo> AsyncYTMusic::extractVideoInfo(const QString &videoId)
|
||||
{
|
||||
return invokeAndCatchOnThread([=, this]() {
|
||||
return invokeAndCatchOnThread<video_info::VideoInfo>([=, this]() {
|
||||
return m_ytm->extract_video_info(videoId.toStdString());
|
||||
});
|
||||
}
|
||||
@@ -131,10 +130,10 @@ QFuture<video_info::VideoInfo> AsyncYTMusic::extractVideoInfo(const QString &vid
|
||||
//
|
||||
QFuture<watch::Playlist> AsyncYTMusic::fetchWatchPlaylist(const std::optional<QString> &videoId, const std::optional<QString> &playlistId)
|
||||
{
|
||||
return invokeAndCatchOnThread([=, this]() {
|
||||
return invokeAndCatchOnThread<watch::Playlist>([=, this]() {
|
||||
return m_ytm->get_watch_playlist(
|
||||
mapOptional(videoId, &QString::toStdString),
|
||||
mapOptional(playlistId, &QString::toStdString)
|
||||
map_optional<std::string>(videoId, &QString::toStdString),
|
||||
map_optional<std::string>(playlistId, &QString::toStdString)
|
||||
);
|
||||
});
|
||||
}
|
||||
@@ -153,19 +152,17 @@ YTMusicThread::~YTMusicThread()
|
||||
|
||||
AsyncYTMusic *YTMusicThread::operator->()
|
||||
{
|
||||
return m_ytm;
|
||||
return &m_ytm;
|
||||
}
|
||||
|
||||
AsyncYTMusic &YTMusicThread::get()
|
||||
{
|
||||
return *m_ytm;
|
||||
return m_ytm;
|
||||
}
|
||||
|
||||
YTMusicThread::YTMusicThread()
|
||||
: m_ytm(new AsyncYTMusic())
|
||||
{
|
||||
connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, m_ytm, &QObject::deleteLater);
|
||||
setObjectName(QStringLiteral("YTMusicAPI"));
|
||||
m_ytm->moveToThread(this);
|
||||
m_ytm.moveToThread(this);
|
||||
start();
|
||||
}
|
||||
+6
-8
@@ -75,13 +75,12 @@ void connectFuture(const QFuture<T> &future, QObjectDerivedType *self, const Fun
|
||||
/// Applies a function to a the contained value of a QFuture once it finishes.
|
||||
/// @returns a QFuture that finishes once the future given as first argument finished
|
||||
///
|
||||
template <typename T, typename Func>
|
||||
QFuture<std::invoke_result_t<Func, T>> mapFuture(const QFuture<T> &future, Func mapFunction) {
|
||||
using ReturnType = std::invoke_result_t<Func, T>;
|
||||
template <typename T, typename U, typename Func>
|
||||
QFuture<U> mapFuture(const QFuture<T> &future, Func mapFunction) {
|
||||
auto watcher = std::make_shared<QFutureWatcher<T>>();
|
||||
watcher->setFuture(future);
|
||||
|
||||
auto interface = std::make_shared<QFutureInterface<ReturnType>>();
|
||||
auto interface = std::make_shared<QFutureInterface<U>>();
|
||||
QObject::connect(watcher.get(), &QFutureWatcherBase::finished, watcher.get(), [interface, watcher, mapFunction] {
|
||||
auto result = watcher->result();
|
||||
auto mapped = mapFunction(std::move(result));
|
||||
@@ -124,9 +123,8 @@ protected:
|
||||
|
||||
private:
|
||||
/// Invokes the given function on the thread of the YTMusic object, and handles exceptions that occur while invoking it.
|
||||
template <typename Func>
|
||||
QFuture<std::invoke_result_t<Func>> invokeAndCatchOnThread(Func fun) {
|
||||
using ReturnType = std::invoke_result_t<Func>;
|
||||
template <typename ReturnType>
|
||||
QFuture<ReturnType> invokeAndCatchOnThread(const std::function<ReturnType()> &fun) {
|
||||
auto interface = std::make_shared<QFutureInterface<ReturnType>>();
|
||||
QMetaObject::invokeMethod(this, [=, this]() {
|
||||
try {
|
||||
@@ -156,5 +154,5 @@ public:
|
||||
private:
|
||||
YTMusicThread();
|
||||
|
||||
AsyncYTMusic *m_ytm;
|
||||
AsyncYTMusic m_ytm;
|
||||
};
|
||||
@@ -21,13 +21,6 @@ Kirigami.ScrollablePage {
|
||||
applicationWindow().playPlaylist(albumModel.playlistId)
|
||||
}
|
||||
}
|
||||
right: Kirigami.Action {
|
||||
icon.name: "media-playlist-shuffle"
|
||||
text: i18n("Shuffle")
|
||||
onTriggered: {
|
||||
applicationWindow().playShufflePlaylist(albumModel.playlistId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ListView {
|
||||
|
||||
@@ -10,38 +10,9 @@ import org.kde.kirigami 2.14 as Kirigami
|
||||
import org.kde.ytmusic 1.0
|
||||
|
||||
Kirigami.ScrollablePage {
|
||||
|
||||
globalToolBarStyle: Kirigami.ApplicationHeaderStyle.None
|
||||
|
||||
// so that there is still a separator, since the header style is none
|
||||
Kirigami.Separator {
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Kirigami.Heading {
|
||||
text: i18n("Favourites")
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
}
|
||||
|
||||
// Spacer
|
||||
Item {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
Controls.ToolButton {
|
||||
text: i18n("Show All")
|
||||
Layout.alignment: Qt.AlignRight
|
||||
icon.name: "arrow-right"
|
||||
onClicked: pageStack.layers.push("qrc:/PlaybackHistory.qml", {
|
||||
"dataModel": Library.favourites,
|
||||
"title": i18n("Favourite Songs")
|
||||
})
|
||||
}
|
||||
Kirigami.Heading {
|
||||
text: i18n("Favourites")
|
||||
}
|
||||
Controls.ScrollView {
|
||||
Layout.fillWidth: true
|
||||
@@ -52,7 +23,7 @@ Kirigami.ScrollablePage {
|
||||
delegate: ColumnLayout {
|
||||
id: delegateItem
|
||||
required property string title
|
||||
required property string artists
|
||||
required property string artist
|
||||
required property string videoId
|
||||
|
||||
Layout.fillWidth: false
|
||||
@@ -92,27 +63,8 @@ Kirigami.ScrollablePage {
|
||||
}
|
||||
}
|
||||
}
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Kirigami.Heading {
|
||||
text: i18n("Most played")
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
}
|
||||
|
||||
// Spacer
|
||||
Item {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
Controls.ToolButton {
|
||||
text: i18n("Show All")
|
||||
Layout.alignment: Qt.AlignRight
|
||||
icon.name: "arrow-right"
|
||||
onClicked: pageStack.layers.push("qrc:/PlaybackHistory.qml", {
|
||||
"dataModel": Library.playbackHistory,
|
||||
"title": i18n("Played Songs")
|
||||
})
|
||||
}
|
||||
Kirigami.Heading {
|
||||
text: i18n("Most played")
|
||||
}
|
||||
Controls.ScrollView {
|
||||
Layout.fillWidth: true
|
||||
@@ -123,7 +75,7 @@ Kirigami.ScrollablePage {
|
||||
delegate: ColumnLayout {
|
||||
id: mpdelegateItem
|
||||
required property string title
|
||||
required property string artists
|
||||
required property string artist
|
||||
required property string videoId
|
||||
|
||||
Layout.fillWidth: false
|
||||
@@ -145,6 +97,14 @@ Kirigami.ScrollablePage {
|
||||
fillMode: Image.PreserveAspectCrop
|
||||
asynchronous: true
|
||||
}
|
||||
|
||||
actions: [
|
||||
Kirigami.Action {
|
||||
icon.name: "delete"
|
||||
onTriggered: Library.removeFavourite(mpdelegateItem.videoId)
|
||||
}
|
||||
|
||||
]
|
||||
}
|
||||
Controls.Label {
|
||||
Layout.maximumWidth: 200
|
||||
|
||||
@@ -1,425 +0,0 @@
|
||||
// SPDX-FileCopyrightText: 2020-2022 Devin Lin <[email protected]>
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Controls 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
|
||||
import QtGraphicalEffects 1.0
|
||||
import QtMultimedia 5.12
|
||||
|
||||
import org.kde.kirigami 2.19 as Kirigami
|
||||
import org.kde.ytmusic 1.0
|
||||
|
||||
Item {
|
||||
id: root
|
||||
|
||||
required property var info // VideoInfoExtractor object
|
||||
required property var audio // Audio object
|
||||
|
||||
signal requestClose()
|
||||
|
||||
// background image
|
||||
Item {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: Qt.rgba(25, 25, 30, 1)
|
||||
}
|
||||
|
||||
Image {
|
||||
anchors.fill: parent
|
||||
asynchronous: true
|
||||
|
||||
source: info.thumbnail
|
||||
fillMode: Image.PreserveAspectCrop
|
||||
|
||||
sourceSize.width: 512
|
||||
sourceSize.height: 512
|
||||
}
|
||||
|
||||
layer.enabled: true
|
||||
layer.effect: HueSaturation {
|
||||
cached: true
|
||||
|
||||
lightness: -0.5
|
||||
saturation: 1.9
|
||||
|
||||
layer.enabled: true
|
||||
layer.effect: FastBlur {
|
||||
cached: true
|
||||
radius: 100
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// content
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
spacing: 0
|
||||
|
||||
// hide arrow button
|
||||
ToolButton {
|
||||
id: closeButton
|
||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
|
||||
Layout.maximumHeight: parent.height
|
||||
Layout.preferredHeight: Kirigami.Units.gridUnit * 3
|
||||
Layout.maximumWidth: parent.height
|
||||
Layout.preferredWidth: Kirigami.Units.gridUnit * 3
|
||||
Layout.topMargin: Kirigami.Units.smallSpacing
|
||||
icon.name: "arrow-down"
|
||||
icon.color: "white"
|
||||
Kirigami.Theme.colorSet: Kirigami.Theme.Complementary
|
||||
Kirigami.Theme.inherit: false
|
||||
onClicked: root.requestClose()
|
||||
}
|
||||
|
||||
// top tab bar
|
||||
RowLayout {
|
||||
id: tabBar
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
|
||||
ToolButton {
|
||||
id: nowPlayingTab
|
||||
padding: Kirigami.Units.largeSpacing
|
||||
onClicked: swipeView.setCurrentIndex(0)
|
||||
Layout.preferredHeight: Kirigami.Units.gridUnit * 2
|
||||
Layout.preferredWidth: Kirigami.Units.gridUnit * 9
|
||||
|
||||
contentItem: Label {
|
||||
text: i18n("Now Playing")
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
elide: Text.ElideRight
|
||||
color: "white" // we need to ensure the label is white
|
||||
}
|
||||
|
||||
// selection indicator
|
||||
Rectangle {
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
color: Kirigami.Theme.highlightColor
|
||||
height: 1
|
||||
visible: swipeView.currentIndex == 0
|
||||
}
|
||||
}
|
||||
ToolButton {
|
||||
id: queueTab
|
||||
padding: Kirigami.Units.largeSpacing
|
||||
onClicked: swipeView.setCurrentIndex(1)
|
||||
Layout.preferredHeight: Kirigami.Units.gridUnit * 2
|
||||
Layout.preferredWidth: Kirigami.Units.gridUnit * 9
|
||||
|
||||
contentItem: Label {
|
||||
text: i18n("Queue")
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
elide: Text.ElideRight
|
||||
color: "white"
|
||||
}
|
||||
|
||||
// selection indicator
|
||||
Rectangle {
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
color: Kirigami.Theme.highlightColor
|
||||
height: 1
|
||||
visible: swipeView.currentIndex == 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// tabs
|
||||
SwipeView {
|
||||
id: swipeView
|
||||
property double specWidth: {
|
||||
let allowedWidth = root.width - Kirigami.Units.largeSpacing * 4;
|
||||
let allowedHeight = root.height - Kirigami.Units.largeSpacing * 8 - (closeButton.height + tabBar.height + bottomPlayerControls.height);
|
||||
if (allowedWidth > allowedHeight) {
|
||||
return allowedHeight;
|
||||
} else {
|
||||
return allowedWidth;
|
||||
}
|
||||
}
|
||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: specWidth
|
||||
|
||||
// music art
|
||||
Item {
|
||||
height: swipeView.width
|
||||
width: swipeView.height
|
||||
|
||||
Image {
|
||||
anchors.centerIn: parent
|
||||
width: swipeView.specWidth
|
||||
height: swipeView.specWidth
|
||||
|
||||
asynchronous: true
|
||||
mipmap: true
|
||||
|
||||
source: info.thumbnail
|
||||
|
||||
sourceSize {
|
||||
width: 512
|
||||
height: 512
|
||||
}
|
||||
|
||||
fillMode: Image.PreserveAspectCrop
|
||||
}
|
||||
}
|
||||
|
||||
// playlist
|
||||
ListView {
|
||||
id: playlistView
|
||||
width: swipeView.width
|
||||
height: swipeView.height
|
||||
clip: true
|
||||
|
||||
Kirigami.Theme.colorSet: Kirigami.Theme.Complementary
|
||||
Kirigami.Theme.inherit: false
|
||||
|
||||
BusyIndicator {
|
||||
anchors.centerIn: parent
|
||||
visible: UserPlaylistModel.loading || UserPlaylistModel.loading
|
||||
}
|
||||
|
||||
model: UserPlaylistModel
|
||||
|
||||
delegate: Kirigami.SwipeListItem {
|
||||
id: delegateItem
|
||||
required property string title
|
||||
required property string videoId
|
||||
required property string artists
|
||||
required property bool isCurrent
|
||||
|
||||
backgroundColor: 'transparent'
|
||||
highlighted: isCurrent
|
||||
onClicked: UserPlaylistModel.skipTo(videoId)
|
||||
|
||||
ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
Kirigami.Heading {
|
||||
elide: Text.ElideRight
|
||||
Layout.fillWidth: true
|
||||
level: 2
|
||||
text: title
|
||||
}
|
||||
|
||||
Label {
|
||||
elide: Text.ElideRight
|
||||
Layout.fillWidth: true
|
||||
text: artists
|
||||
}
|
||||
}
|
||||
|
||||
actions: [
|
||||
Kirigami.Action {
|
||||
text: i18n("Remove Track")
|
||||
icon.name: "list-remove"
|
||||
icon.color: "white"
|
||||
onTriggered: UserPlaylistModel.remove(delegateItem.videoId)
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
id: bottomPlayerControls
|
||||
Layout.topMargin: Kirigami.Units.largeSpacing
|
||||
Layout.leftMargin: Kirigami.Units.gridUnit * 2
|
||||
Layout.rightMargin: Kirigami.Units.gridUnit * 2
|
||||
Layout.bottomMargin: Kirigami.Units.gridUnit * 2
|
||||
|
||||
// song name
|
||||
Label {
|
||||
id: mainLabel
|
||||
text: info.title ? info.title : i18n("No media playing")
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
elide: Text.ElideRight
|
||||
maximumLineCount: 1
|
||||
// Hardcoded because the footerbar blur always makes a dark-ish
|
||||
// background, so we don't want to use a color scheme color that
|
||||
// might also be dark
|
||||
color: "white"
|
||||
font.pointSize: Kirigami.Theme.defaultFont.pointSize * 1.5
|
||||
font.weight: Font.Bold
|
||||
font.bold: true
|
||||
}
|
||||
|
||||
// song artist
|
||||
Kirigami.Heading {
|
||||
id: authorLabel
|
||||
text: info.artist ? info.artist : info.channel
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
elide: Text.ElideRight
|
||||
maximumLineCount: 1
|
||||
// Hardcoded because the footerbar blur always makes a dark-ish
|
||||
// background, so we don't want to use a color scheme color that
|
||||
// might also be dark
|
||||
color: "white"
|
||||
opacity: 0.9
|
||||
font.pointSize: Kirigami.Theme.defaultFont.pointSize * 1.3
|
||||
font.weight: Font.Bold
|
||||
font.bold: true
|
||||
}
|
||||
|
||||
// slider row
|
||||
RowLayout {
|
||||
Layout.topMargin: Kirigami.Units.gridUnit * 2
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
|
||||
Label {
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
color: "white"
|
||||
visible: info.title
|
||||
text: PlayerUtils.formatTimestamp(audio.position)
|
||||
}
|
||||
|
||||
Slider {
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
Layout.fillWidth: true
|
||||
from: 0
|
||||
to: audio.duration
|
||||
value: audio.position
|
||||
enabled: audio.seekable
|
||||
onMoved: {
|
||||
console.log("Value:", value);
|
||||
audio.seek(Math.floor(value));
|
||||
}
|
||||
|
||||
Behavior on value {
|
||||
NumberAnimation {
|
||||
duration: 1000
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
color: "white"
|
||||
visible: info.title
|
||||
text: PlayerUtils.formatTimestamp(audio.duration)
|
||||
}
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Layout.topMargin: Kirigami.Units.largeSpacing
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
Layout.fillWidth: true
|
||||
spacing: Kirigami.Units.largeSpacing
|
||||
|
||||
// ensure white icons
|
||||
Kirigami.Theme.colorSet: Kirigami.Theme.Complementary
|
||||
Kirigami.Theme.inherit: false
|
||||
|
||||
ToolButton {
|
||||
id: favouriteButton
|
||||
readonly property QtObject favouriteWatcher: Library.favouriteWatcher(info.videoId)
|
||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||
Layout.preferredHeight: Kirigami.Units.gridUnit * 2.5
|
||||
Layout.maximumWidth: height
|
||||
Layout.preferredWidth: height
|
||||
|
||||
onClicked: if (favouriteWatcher)
|
||||
favouriteWatcher.isFavourite
|
||||
? Library.removeFavourite(info.videoId)
|
||||
: Library.addFavourite(info.videoId, info.title)
|
||||
|
||||
icon.name: favouriteWatcher ? (favouriteWatcher.isFavourite ? "starred-symbolic" : "non-starred-symbolic") : ""
|
||||
icon.width: Kirigami.Units.gridUnit * 1.5
|
||||
icon.height: Kirigami.Units.gridUnit * 1.5
|
||||
icon.color: "white"
|
||||
|
||||
Kirigami.Theme.colorSet: Kirigami.Theme.Complementary
|
||||
Kirigami.Theme.inherit: false
|
||||
}
|
||||
|
||||
ToolButton {
|
||||
id: skipBackwardButton
|
||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||
Layout.preferredHeight: Kirigami.Units.gridUnit * 2.5
|
||||
Layout.maximumWidth: height
|
||||
Layout.preferredWidth: height
|
||||
|
||||
enabled: false
|
||||
|
||||
icon.name: "media-skip-backward"
|
||||
icon.width: Kirigami.Units.gridUnit * 1.5
|
||||
icon.height: Kirigami.Units.gridUnit * 1.5
|
||||
icon.color: "white"
|
||||
|
||||
Kirigami.Theme.colorSet: Kirigami.Theme.Complementary
|
||||
Kirigami.Theme.inherit: false
|
||||
}
|
||||
|
||||
ToolButton {
|
||||
id: playPauseButton
|
||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
||||
Layout.preferredHeight: Kirigami.Units.gridUnit * 4
|
||||
Layout.maximumWidth: height
|
||||
Layout.preferredWidth: height
|
||||
|
||||
enabled: info.audioUrl != ""
|
||||
onClicked: audio.playbackState === Audio.PlayingState ? audio.pause() : audio.play()
|
||||
|
||||
icon.name: audio.playbackState === Audio.PlayingState ? "media-playback-pause" : "media-playback-start"
|
||||
icon.width: Kirigami.Units.gridUnit * 3
|
||||
icon.height: Kirigami.Units.gridUnit * 3
|
||||
icon.color: "white"
|
||||
|
||||
Kirigami.Theme.colorSet: Kirigami.Theme.Complementary
|
||||
Kirigami.Theme.inherit: false
|
||||
}
|
||||
|
||||
ToolButton {
|
||||
id: skipForwardButton
|
||||
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
|
||||
Layout.preferredHeight: Kirigami.Units.gridUnit * 2.5
|
||||
Layout.maximumWidth: height
|
||||
Layout.preferredWidth: height
|
||||
|
||||
enabled: UserPlaylistModel.canSkip
|
||||
onClicked: UserPlaylistModel.next()
|
||||
|
||||
icon.name: "media-skip-forward"
|
||||
icon.width: Kirigami.Units.gridUnit * 1.5
|
||||
icon.height: Kirigami.Units.gridUnit * 1.5
|
||||
icon.color: "white"
|
||||
|
||||
Kirigami.Theme.colorSet: Kirigami.Theme.Complementary
|
||||
Kirigami.Theme.inherit: false
|
||||
}
|
||||
|
||||
ToolButton {
|
||||
id: shuffleButton
|
||||
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
|
||||
Layout.preferredHeight: Kirigami.Units.gridUnit * 2.5
|
||||
Layout.maximumWidth: height
|
||||
Layout.preferredWidth: height
|
||||
|
||||
onClicked: UserPlaylistModel.shufflePlaylist()
|
||||
|
||||
icon.name: "media-playlist-shuffle"
|
||||
icon.width: Kirigami.Units.gridUnit * 1.5
|
||||
icon.height: Kirigami.Units.gridUnit * 1.5
|
||||
icon.color: "white"
|
||||
|
||||
Kirigami.Theme.colorSet: Kirigami.Theme.Complementary
|
||||
Kirigami.Theme.inherit: false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,217 +0,0 @@
|
||||
// SPDX-FileCopyrightText: 2020-2022 Devin Lin <[email protected]>
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Controls 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
|
||||
import QtGraphicalEffects 1.0
|
||||
import QtMultimedia 5.12
|
||||
|
||||
import org.kde.kirigami 2.19 as Kirigami
|
||||
import org.kde.ytmusic 1.0
|
||||
|
||||
Item {
|
||||
id: root
|
||||
|
||||
required property int progressBarHeight
|
||||
required property int minimizedPlayerContentHeight
|
||||
|
||||
required property var info // VideoInfoExtractor object
|
||||
required property var audio // Audio object
|
||||
|
||||
readonly property bool isWidescreen: width >= Kirigami.Units.gridUnit * 40
|
||||
|
||||
signal requestOpen()
|
||||
|
||||
Rectangle {
|
||||
id: miniProgressBar
|
||||
z: 1
|
||||
visible: !root.isWidescreen
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
height: root.progressBarHeight
|
||||
color: Kirigami.Theme.highlightColor
|
||||
width: parent.width * (audio.position / audio.duration)
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
anchors.fill: parent
|
||||
spacing: 0
|
||||
|
||||
Rectangle {
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
Layout.maximumWidth: Kirigami.Units.gridUnit * 20
|
||||
Layout.preferredWidth: Kirigami.Units.gridUnit * 20
|
||||
color: Qt.rgba(0, 0, 0, trackClick.containsMouse ? 0.1 : trackClick.pressed ? 0.3 : 0)
|
||||
|
||||
RowLayout {
|
||||
anchors.fill: parent
|
||||
anchors.leftMargin: Kirigami.Units.largeSpacing
|
||||
spacing: Kirigami.Units.largeSpacing
|
||||
|
||||
// track image
|
||||
Item {
|
||||
property double imageSize: root.height - Kirigami.Units.largeSpacing * 2
|
||||
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
Layout.maximumWidth: imageSize
|
||||
Layout.preferredWidth: imageSize
|
||||
Layout.maximumHeight: imageSize
|
||||
Layout.minimumHeight: imageSize
|
||||
|
||||
Image {
|
||||
id: mainIcon
|
||||
anchors.fill: parent
|
||||
|
||||
visible: !loadingIndicator.visible
|
||||
asynchronous: true
|
||||
mipmap: true
|
||||
|
||||
source: info.thumbnail
|
||||
|
||||
sourceSize.width: 512
|
||||
sourceSize.height: 512
|
||||
fillMode: Image.PreserveAspectCrop
|
||||
}
|
||||
|
||||
BusyIndicator {
|
||||
id: loadingIndicator
|
||||
anchors.centerIn: parent
|
||||
visible: UserPlaylistModel.loading
|
||||
Kirigami.Theme.colorSet: Kirigami.Theme.Complementary
|
||||
Kirigami.Theme.inherit: false
|
||||
}
|
||||
}
|
||||
|
||||
// track information
|
||||
ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
|
||||
Label {
|
||||
id: mainLabel
|
||||
text: info.title ? info.title : i18n("No media playing")
|
||||
textFormat: Text.PlainText
|
||||
wrapMode: Text.Wrap
|
||||
Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
|
||||
Layout.fillWidth: true
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
elide: Text.ElideRight
|
||||
maximumLineCount: 1
|
||||
// Hardcoded because the footerbar blur always makes a dark-ish
|
||||
// background, so we don't want to use a color scheme color that
|
||||
// might also be dark
|
||||
color: "white"
|
||||
font.weight: Font.Bold
|
||||
}
|
||||
|
||||
Label {
|
||||
id: authorLabel
|
||||
text: info.artist ? info.artist : info.channel
|
||||
textFormat: Text.PlainText
|
||||
wrapMode: Text.Wrap
|
||||
Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
|
||||
Layout.fillWidth: true
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
elide: Text.ElideRight
|
||||
maximumLineCount: 1
|
||||
// Hardcoded because the footerbar blur always makes a dark-ish
|
||||
// background, so we don't want to use a color scheme color that
|
||||
// might also be dark
|
||||
color: "white"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: trackClick
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
onClicked: root.requestOpen()
|
||||
}
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
visible: root.isWidescreen
|
||||
Layout.preferredWidth: 0
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: Kirigami.Units.largeSpacing
|
||||
Layout.rightMargin: Kirigami.Units.largeSpacing
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
|
||||
Label {
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
color: "white"
|
||||
visible: info.title
|
||||
text: PlayerUtils.formatTimestamp(audio.position)
|
||||
}
|
||||
|
||||
Slider {
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
Layout.fillWidth: true
|
||||
from: 0
|
||||
to: audio.duration
|
||||
value: audio.position
|
||||
enabled: audio.seekable
|
||||
onMoved: {
|
||||
console.log("Value:", value);
|
||||
audio.seek(Math.floor(value));
|
||||
}
|
||||
|
||||
Behavior on value {
|
||||
NumberAnimation {
|
||||
duration: 1000
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
color: "white"
|
||||
visible: info.title
|
||||
text: PlayerUtils.formatTimestamp(audio.duration)
|
||||
}
|
||||
}
|
||||
|
||||
ToolButton {
|
||||
id: playPauseButton
|
||||
Layout.preferredHeight: Kirigami.Units.gridUnit * 3
|
||||
Layout.maximumWidth: height
|
||||
Layout.preferredWidth: height
|
||||
|
||||
enabled: info.audioUrl != ""
|
||||
onClicked: audio.playbackState === Audio.PlayingState ? audio.pause() : audio.play()
|
||||
|
||||
icon.name: audio.playbackState === Audio.PlayingState ? "media-playback-pause" : "media-playback-start"
|
||||
icon.width: Kirigami.Units.gridUnit
|
||||
icon.height: Kirigami.Units.gridUnit
|
||||
icon.color: "white"
|
||||
|
||||
Kirigami.Theme.colorSet: Kirigami.Theme.Complementary
|
||||
Kirigami.Theme.inherit: false
|
||||
}
|
||||
|
||||
ToolButton {
|
||||
id: skipForwardButton
|
||||
Layout.rightMargin: Math.floor(Kirigami.Units.smallSpacing / 2)
|
||||
Layout.preferredHeight: Kirigami.Units.gridUnit * 3
|
||||
Layout.maximumWidth: height
|
||||
Layout.preferredWidth: height
|
||||
|
||||
enabled: UserPlaylistModel.canSkip
|
||||
onClicked: UserPlaylistModel.next()
|
||||
|
||||
icon.name: "media-skip-forward"
|
||||
icon.width: Kirigami.Units.gridUnit
|
||||
icon.height: Kirigami.Units.gridUnit
|
||||
icon.color: "white"
|
||||
|
||||
Kirigami.Theme.colorSet: Kirigami.Theme.Complementary
|
||||
Kirigami.Theme.inherit: false
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,85 +0,0 @@
|
||||
// SPDX-FileCopyrightText: 2022 Jonah Brüchert <[email protected]>
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Layouts 1.15
|
||||
import QtQuick.Controls 2.15 as Controls
|
||||
|
||||
import org.kde.kirigami 2.15 as Kirigami
|
||||
|
||||
import org.kde.ytmusic 1.0
|
||||
|
||||
Kirigami.ScrollablePage {
|
||||
id: playbackHistoryPage
|
||||
title: i18n("Unknown list of songs")
|
||||
|
||||
property QtObject dataModel
|
||||
|
||||
ListView {
|
||||
id: listView
|
||||
reuseItems: true
|
||||
|
||||
Kirigami.PlaceholderMessage {
|
||||
visible: listView.count < 1
|
||||
text: i18n("No songs here yet")
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
|
||||
model: playbackHistoryPage.dataModel
|
||||
|
||||
delegate: Kirigami.SwipeListItem {
|
||||
id: delegateItem
|
||||
required property string title
|
||||
required property string videoId
|
||||
required property string artists
|
||||
|
||||
onClicked: {
|
||||
play(videoId)
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
ThumbnailSource {
|
||||
id: thumbnailSource
|
||||
|
||||
videoId: delegateItem.videoId
|
||||
}
|
||||
|
||||
Item {
|
||||
width: Kirigami.Units.gridUnit * 3
|
||||
height: Kirigami.Units.gridUnit * 3
|
||||
|
||||
Image {
|
||||
sourceSize: "200x200"
|
||||
source: thumbnailSource.cachedPath
|
||||
fillMode: Image.PreserveAspectCrop
|
||||
asynchronous: true
|
||||
|
||||
width: Kirigami.Units.gridUnit * 3
|
||||
height: Kirigami.Units.gridUnit * 3
|
||||
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
}
|
||||
}
|
||||
|
||||
Controls.Label {
|
||||
text: delegateItem.title
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
}
|
||||
|
||||
actions: [
|
||||
Kirigami.Action {
|
||||
icon.name: "go-next"
|
||||
text: i18n("Play Next")
|
||||
onTriggered: UserPlaylistModel.playNext(delegateItem.videoId, delegateItem.title, [])
|
||||
},
|
||||
Kirigami.Action {
|
||||
icon.name: "media-playlist-append"
|
||||
text: i18n("Add to Playlist")
|
||||
onTriggered: UserPlaylistModel.append(delegateItem.videoId, delegateItem.title, [])
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
+223
-365
@@ -1,422 +1,280 @@
|
||||
// SPDX-FileCopyrightText: 2021 Jonah Brüchert <[email protected]>
|
||||
// SPDX-FileCopyrightText: 2021 Bart De Vries <[email protected]>
|
||||
// SPDX-FileCopyrightText: 2020-2022 Devin Lin <[email protected]>
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||
|
||||
import QtQuick 2.7
|
||||
import QtQuick.Layouts 1.3
|
||||
import QtQuick.Controls 2.12 as Controls
|
||||
|
||||
import QtMultimedia 5.12
|
||||
import QtGraphicalEffects 1.0
|
||||
|
||||
import org.kde.kirigami 2.12 as Kirigami
|
||||
import org.kde.ytmusic 1.0
|
||||
import QtMultimedia 5.12
|
||||
|
||||
Flickable {
|
||||
Item {
|
||||
id: footerItem
|
||||
|
||||
property bool maximized: false
|
||||
|
||||
readonly property int progressBarHeight: Kirigami.Units.gridUnit / 6
|
||||
readonly property int minimizedPlayerContentHeight: Math.round(Kirigami.Units.gridUnit * 3.5)
|
||||
readonly property int minimizedPlayerHeight: minimizedPlayerContentHeight + progressBarHeight
|
||||
|
||||
boundsBehavior: Flickable.StopAtBounds
|
||||
|
||||
function close() {
|
||||
toClose.restart();
|
||||
}
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
height: maximized ? applicationWindow().height : 75
|
||||
|
||||
function resetToBoundsOnFlick() {
|
||||
if (!atYBeginning || !atYEnd) {
|
||||
if (footerItem.verticalVelocity > 0) {
|
||||
toOpen.restart();
|
||||
} else if (footerItem.verticalVelocity < 0) {
|
||||
toClose.restart();
|
||||
} else { // i.e. when verticalVelocity === 0
|
||||
if (contentY > contentHeight / 4) {
|
||||
toOpen.restart();
|
||||
} else {
|
||||
toClose.restart();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function resetToBoundsOnResize() {
|
||||
if (contentY > contentHeight / 4) {
|
||||
contentY = contentHeight / 2;
|
||||
} else {
|
||||
contentY = 0;
|
||||
}
|
||||
}
|
||||
|
||||
NumberAnimation on contentY {
|
||||
id: toOpen
|
||||
from: contentY
|
||||
to: contentHeight / 2
|
||||
duration: Kirigami.Units.longDuration * 2
|
||||
easing.type: Easing.OutCubic
|
||||
running: false
|
||||
}
|
||||
|
||||
NumberAnimation on contentY {
|
||||
id: toClose
|
||||
from: contentY
|
||||
to: 0
|
||||
duration: Kirigami.Units.longDuration * 2
|
||||
easing.type: Easing.OutCubic
|
||||
running: false
|
||||
}
|
||||
|
||||
// snap to end
|
||||
MouseArea {
|
||||
Rectangle {
|
||||
color: Kirigami.Theme.backgroundColor
|
||||
Kirigami.Theme.colorSet: Kirigami.Theme.Window
|
||||
anchors.fill: footerLayout
|
||||
propagateComposedEvents: true
|
||||
onPressed: {
|
||||
toOpen.stop();
|
||||
toClose.stop();
|
||||
propagateComposedEvents = true;
|
||||
}
|
||||
onReleased: footerItem.resetToBoundsOnFlick()
|
||||
}
|
||||
|
||||
onMovementStarted: {
|
||||
toOpen.stop();
|
||||
toClose.stop();
|
||||
}
|
||||
onFlickStarted: resetToBoundsOnFlick()
|
||||
onMovementEnded: resetToBoundsOnFlick()
|
||||
onHeightChanged: resetToBoundsOnResize()
|
||||
|
||||
property var videoInfoExtractor: VideoInfoExtractor {
|
||||
id: info
|
||||
|
||||
onSongChanged: audio.play()
|
||||
videoId: UserPlaylistModel.currentVideoId
|
||||
onTitleChanged: Library.addPlaybackHistoryItem(info.videoId, info.title)
|
||||
}
|
||||
|
||||
property var audioPlayer: Audio {
|
||||
id: audio
|
||||
|
||||
source: info.audioUrl
|
||||
onStatusChanged: {
|
||||
if (status === Audio.EndOfMedia) {
|
||||
console.log("Song ended");
|
||||
UserPlaylistModel.next();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
contentHeight: height * 2
|
||||
|
||||
ColumnLayout {
|
||||
id: footerLayout
|
||||
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
spacing: 0
|
||||
height: parent.height
|
||||
anchors.fill: parent
|
||||
|
||||
// margin from top
|
||||
Item {
|
||||
Layout.minimumHeight: footerItem.height - footerItem.minimizedPlayerHeight
|
||||
}
|
||||
|
||||
Controls.Control {
|
||||
GridLayout {
|
||||
id: playerLayout
|
||||
|
||||
readonly property bool mobile: width > height
|
||||
|
||||
Layout.fillHeight: footerItem.maximized
|
||||
Layout.fillWidth: true
|
||||
padding: 0
|
||||
implicitHeight: footerItem.minimizedPlayerHeight
|
||||
|
||||
// minimized player background
|
||||
background: Item {
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: Qt.rgba(25, 25, 30, 1)
|
||||
}
|
||||
|
||||
Image {
|
||||
opacity: 0.2
|
||||
source: info.thumbnail
|
||||
asynchronous: true
|
||||
|
||||
anchors.fill: parent
|
||||
fillMode: Image.PreserveAspectCrop
|
||||
}
|
||||
|
||||
layer.enabled: true
|
||||
layer.effect: HueSaturation {
|
||||
cached: true
|
||||
flow: width > height ? GridLayout.LeftToRight : GridLayout.TopToBottom
|
||||
visible: footerItem.maximized
|
||||
|
||||
lightness: -0.5
|
||||
saturation: 1.9
|
||||
ColumnLayout {
|
||||
Layout.preferredWidth: footerLayout.width * (playerLayout.mobile ? 1 : 0.5)
|
||||
Layout.preferredHeight: footerLayout.height * (playerLayout.mobile ? 0.5 : 1)
|
||||
|
||||
layer.enabled: true
|
||||
layer.effect: FastBlur {
|
||||
cached: true
|
||||
radius: 64
|
||||
transparentBorder: false
|
||||
Item {
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
|
||||
Image {
|
||||
anchors.fill: parent
|
||||
source: info.thumbnail
|
||||
fillMode: Image.PreserveAspectFit
|
||||
}
|
||||
}
|
||||
Controls.RoundButton {
|
||||
readonly property QtObject favouriteWatcher: Library.favouriteWatcher(info.videoId)
|
||||
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
icon.name: favouriteWatcher ? (favouriteWatcher.isFavourite ? "starred-symbolic" : "non-starred-symbolic") : ""
|
||||
onClicked: if (favouriteWatcher)
|
||||
favouriteWatcher.isFavourite
|
||||
? Library.removeFavourite(info.videoId)
|
||||
: Library.addFavourite(info.videoId, info.title)
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
Layout.preferredWidth: footerLayout.width * (playerLayout.mobile ? 1 : 0.5)
|
||||
Layout.preferredHeight: footerLayout.height * (playerLayout.mobile ? 0.5 : 1)
|
||||
|
||||
Controls.ScrollView {
|
||||
anchors.fill: parent
|
||||
|
||||
ListView {
|
||||
anchors.fill: parent
|
||||
id: playlistView
|
||||
|
||||
clip: true
|
||||
|
||||
Controls.BusyIndicator {
|
||||
anchors.centerIn: parent
|
||||
visible: UserPlaylistModel.loading || UserPlaylistModel.loading
|
||||
}
|
||||
|
||||
onCountChanged: {
|
||||
if (count < 1) {
|
||||
footerItem.maximized = false
|
||||
}
|
||||
}
|
||||
|
||||
model: UserPlaylistModel
|
||||
|
||||
delegate: Kirigami.SwipeListItem {
|
||||
id: delegateItem
|
||||
required property string title
|
||||
required property string videoId
|
||||
required property string artists
|
||||
required property bool isCurrent
|
||||
|
||||
highlighted: isCurrent
|
||||
onClicked: UserPlaylistModel.skipTo(videoId)
|
||||
|
||||
ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
Kirigami.Heading {
|
||||
elide: Text.ElideRight
|
||||
Layout.fillWidth: true
|
||||
level: 2
|
||||
text: title
|
||||
}
|
||||
|
||||
Controls.Label {
|
||||
elide: Text.ElideRight
|
||||
Layout.fillWidth: true
|
||||
text: artists
|
||||
}
|
||||
}
|
||||
|
||||
actions: [
|
||||
Kirigami.Action {
|
||||
text: i18n("Remove Track")
|
||||
icon.name: "list-remove"
|
||||
onTriggered: UserPlaylistModel.remove(delegateItem.videoId)
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
header: Controls.ToolBar {
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
RowLayout {
|
||||
anchors.fill: parent
|
||||
Item {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
Controls.ToolButton {
|
||||
text: i18n("Clear")
|
||||
icon.name: "edit-clear-all"
|
||||
onClicked: UserPlaylistModel.clear()
|
||||
}
|
||||
Controls.ToolButton {
|
||||
text: i18n("Shuffle")
|
||||
icon.name: "media-playlist-shuffle"
|
||||
onClicked: UserPlaylistModel.shufflePlaylist()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MinimizedPlayerControls {
|
||||
progressBarHeight: footerItem.progressBarHeight
|
||||
minimizedPlayerContentHeight: footerItem.minimizedPlayerContentHeight
|
||||
height: minimizedPlayerHeight
|
||||
|
||||
focus: true
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.top: parent.top
|
||||
|
||||
info: footerItem.videoInfoExtractor
|
||||
audio: footerItem.audioPlayer
|
||||
|
||||
onRequestOpen: toOpen.start();
|
||||
}
|
||||
}
|
||||
|
||||
MaximizedPlayerPage {
|
||||
id: maximizedPlayerPage
|
||||
|
||||
Kirigami.Separator {
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
implicitHeight: footerItem.height
|
||||
|
||||
info: footerItem.videoInfoExtractor
|
||||
audio: footerItem.audioPlayer
|
||||
|
||||
onRequestClose: toClose.start();
|
||||
}
|
||||
|
||||
//GridLayout {
|
||||
//id: playerLayout
|
||||
|
||||
//readonly property bool mobile: width > height
|
||||
RowLayout {
|
||||
id: player
|
||||
|
||||
//Layout.fillHeight: footerItem.maximized
|
||||
//Layout.fillWidth: true
|
||||
//flow: width > height ? GridLayout.LeftToRight : GridLayout.TopToBottom
|
||||
//visible: footerItem.maximized
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: !footer.maximized
|
||||
|
||||
//ColumnLayout {
|
||||
//Layout.preferredWidth: footerLayout.width * (playerLayout.mobile ? 1 : 0.5)
|
||||
//Layout.preferredHeight: footerLayout.height * (playerLayout.mobile ? 0.5 : 1)
|
||||
VideoInfoExtractor {
|
||||
id: info
|
||||
|
||||
//Item {
|
||||
//Layout.fillWidth: true
|
||||
//Layout.fillHeight: true
|
||||
onSongChanged: audio.play()
|
||||
videoId: UserPlaylistModel.currentVideoId
|
||||
onTitleChanged: Library.addPlaybackHistoryItem(info.videoId, info.title)
|
||||
}
|
||||
|
||||
//Image {
|
||||
//anchors.fill: parent
|
||||
//source: info.thumbnail
|
||||
//fillMode: Image.PreserveAspectFit
|
||||
//}
|
||||
//}
|
||||
//Controls.RoundButton {
|
||||
//readonly property QtObject favouriteWatcher: Library.favouriteWatcher(info.videoId)
|
||||
Audio {
|
||||
id: audio
|
||||
|
||||
//Layout.alignment: Qt.AlignHCenter
|
||||
//icon.name: favouriteWatcher ? (favouriteWatcher.isFavourite ? "starred-symbolic" : "non-starred-symbolic") : ""
|
||||
//onClicked: if (favouriteWatcher)
|
||||
//favouriteWatcher.isFavourite
|
||||
//? Library.removeFavourite(info.videoId)
|
||||
//: Library.addFavourite(info.videoId, info.title)
|
||||
//}
|
||||
//}
|
||||
source: info.audioUrl
|
||||
onStatusChanged: {
|
||||
if (status === Audio.EndOfMedia) {
|
||||
console.log("Song ended");
|
||||
UserPlaylistModel.next();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Item {
|
||||
//Layout.fillWidth: true
|
||||
//Layout.fillHeight: true
|
||||
//Layout.preferredWidth: footerLayout.width * (playerLayout.mobile ? 1 : 0.5)
|
||||
//Layout.preferredHeight: footerLayout.height * (playerLayout.mobile ? 0.5 : 1)
|
||||
Controls.ToolButton {
|
||||
display: Controls.AbstractButton.IconOnly
|
||||
Layout.preferredWidth: parent.height
|
||||
Layout.fillHeight: true
|
||||
enabled: info.audioUrl != ""
|
||||
text: audio.playbackState === Audio.PlayingState ? i18n("Pause") : i18n("Play")
|
||||
visible: !info.loading
|
||||
icon.name: audio.playbackState === Audio.PlayingState ? "media-playback-pause" : "media-playback-start"
|
||||
onClicked: audio.playbackState === Audio.PlayingState ? audio.pause() : audio.play()
|
||||
}
|
||||
|
||||
//Controls.ScrollView {
|
||||
//anchors.fill: parent
|
||||
Controls.ToolButton {
|
||||
display: Controls.AbstractButton.IconOnly
|
||||
Layout.preferredWidth: parent.height
|
||||
Layout.fillHeight: true
|
||||
enabled: UserPlaylistModel.canSkip
|
||||
visible: !info.loading
|
||||
icon.name: "media-skip-forward"
|
||||
onClicked: UserPlaylistModel.next()
|
||||
}
|
||||
|
||||
//ListView {
|
||||
//anchors.fill: parent
|
||||
//id: playlistView
|
||||
Controls.BusyIndicator {
|
||||
Layout.fillHeight: true
|
||||
visible: info.loading
|
||||
}
|
||||
|
||||
//clip: true
|
||||
ColumnLayout {
|
||||
Layout.fillHeight: true
|
||||
Layout.topMargin: Kirigami.Units.smallSpacing
|
||||
Layout.bottomMargin: Kirigami.Units.smallSpacing
|
||||
|
||||
//Controls.BusyIndicator {
|
||||
//anchors.centerIn: parent
|
||||
//visible: UserPlaylistModel.loading || UserPlaylistModel.loading
|
||||
//}
|
||||
Kirigami.Heading {
|
||||
level: 3
|
||||
Layout.fillWidth: true
|
||||
elide: Qt.ElideRight
|
||||
text: info.title ? info.title : i18n("No media playing")
|
||||
}
|
||||
|
||||
//onCountChanged: {
|
||||
//if (count < 1) {
|
||||
//footerItem.maximized = false
|
||||
//}
|
||||
//}
|
||||
RowLayout{
|
||||
|
||||
//model: UserPlaylistModel
|
||||
Controls.Label{
|
||||
visible: info.title
|
||||
text: PlayerUtils.formatTimestamp(audio.position)
|
||||
}
|
||||
|
||||
//delegate: Kirigami.SwipeListItem {
|
||||
//id: delegateItem
|
||||
//required property string title
|
||||
//required property string videoId
|
||||
//required property string artists
|
||||
//required property bool isCurrent
|
||||
Controls.Slider {
|
||||
Layout.fillWidth: true
|
||||
from: 0
|
||||
to: audio.duration
|
||||
value: audio.position
|
||||
enabled: audio.seekable
|
||||
onMoved: {
|
||||
console.log("Value:", value);
|
||||
audio.seek(Math.floor(value));
|
||||
}
|
||||
|
||||
//highlighted: isCurrent
|
||||
//onClicked: UserPlaylistModel.skipTo(videoId)
|
||||
Behavior on value {
|
||||
NumberAnimation {
|
||||
duration: 1000
|
||||
}
|
||||
|
||||
//ColumnLayout {
|
||||
//Layout.fillWidth: true
|
||||
//Kirigami.Heading {
|
||||
//elide: Text.ElideRight
|
||||
//Layout.fillWidth: true
|
||||
//level: 2
|
||||
//text: title
|
||||
//}
|
||||
}
|
||||
|
||||
//Controls.Label {
|
||||
//elide: Text.ElideRight
|
||||
//Layout.fillWidth: true
|
||||
//text: artists
|
||||
//}
|
||||
//}
|
||||
}
|
||||
|
||||
//actions: [
|
||||
//Kirigami.Action {
|
||||
//text: i18n("Remove Track")
|
||||
//icon.name: "list-remove"
|
||||
//onTriggered: UserPlaylistModel.remove(delegateItem.videoId)
|
||||
//}
|
||||
//]
|
||||
//}
|
||||
Controls.Label{
|
||||
visible: info.title
|
||||
text: PlayerUtils.formatTimestamp(audio.duration)
|
||||
}
|
||||
|
||||
//header: Controls.ToolBar {
|
||||
//anchors.left: parent.left
|
||||
//anchors.right: parent.right
|
||||
//RowLayout {
|
||||
//anchors.fill: parent
|
||||
//Item {
|
||||
//Layout.fillWidth: true
|
||||
//}
|
||||
|
||||
//Controls.ToolButton {
|
||||
//text: i18n("Clear")
|
||||
//icon.name: "edit-clear-all"
|
||||
//onClicked: UserPlaylistModel.clear()
|
||||
//}
|
||||
//Controls.ToolButton {
|
||||
//text: i18n("Shuffle")
|
||||
//icon.name: "media-playlist-shuffle"
|
||||
//onClicked: UserPlaylistModel.shufflePlaylist()
|
||||
//}
|
||||
//}
|
||||
//}
|
||||
//}
|
||||
//}
|
||||
//}
|
||||
//}
|
||||
|
||||
//Kirigami.Separator {
|
||||
//Layout.fillWidth: true
|
||||
//}
|
||||
|
||||
//RowLayout {
|
||||
//id: player
|
||||
|
||||
//Layout.fillWidth: true
|
||||
//Layout.fillHeight: !footer.maximized
|
||||
|
||||
//Controls.ToolButton {
|
||||
//display: Controls.AbstractButton.IconOnly
|
||||
//Layout.preferredWidth: parent.height
|
||||
//Layout.fillHeight: true
|
||||
//enabled: info.audioUrl != ""
|
||||
//text: audio.playbackState === Audio.PlayingState ? i18n("Pause") : i18n("Play")
|
||||
//visible: !info.loading
|
||||
//icon.name: audio.playbackState === Audio.PlayingState ? "media-playback-pause" : "media-playback-start"
|
||||
//onClicked: audio.playbackState === Audio.PlayingState ? audio.pause() : audio.play()
|
||||
//}
|
||||
|
||||
//Controls.ToolButton {
|
||||
//display: Controls.AbstractButton.IconOnly
|
||||
//Layout.preferredWidth: parent.height
|
||||
//Layout.fillHeight: true
|
||||
//enabled: UserPlaylistModel.canSkip
|
||||
//visible: !info.loading
|
||||
//icon.name: "media-skip-forward"
|
||||
//onClicked: UserPlaylistModel.next()
|
||||
//}
|
||||
|
||||
//Controls.BusyIndicator {
|
||||
//Layout.fillHeight: true
|
||||
//visible: info.loading
|
||||
//}
|
||||
|
||||
//ColumnLayout {
|
||||
//Layout.fillHeight: true
|
||||
//Layout.topMargin: Kirigami.Units.smallSpacing
|
||||
//Layout.bottomMargin: Kirigami.Units.smallSpacing
|
||||
|
||||
//Kirigami.Heading {
|
||||
//level: 3
|
||||
//Layout.fillWidth: true
|
||||
//elide: Qt.ElideRight
|
||||
//text: info.title ? info.title : i18n("No media playing")
|
||||
//}
|
||||
|
||||
//RowLayout{
|
||||
|
||||
//Controls.Label{
|
||||
//visible: info.title
|
||||
//text: PlayerUtils.formatTimestamp(audio.position)
|
||||
//}
|
||||
|
||||
//Controls.Slider {
|
||||
//Layout.fillWidth: true
|
||||
//from: 0
|
||||
//to: audio.duration
|
||||
//value: audio.position
|
||||
//enabled: audio.seekable
|
||||
//onMoved: {
|
||||
//console.log("Value:", value);
|
||||
//audio.seek(Math.floor(value));
|
||||
//}
|
||||
|
||||
//Behavior on value {
|
||||
//NumberAnimation {
|
||||
//duration: 1000
|
||||
//}
|
||||
|
||||
//}
|
||||
|
||||
//}
|
||||
|
||||
//Controls.Label{
|
||||
//visible: info.title
|
||||
//text: PlayerUtils.formatTimestamp(audio.duration)
|
||||
//}
|
||||
|
||||
//}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//}
|
||||
}
|
||||
|
||||
//Controls.ToolButton {
|
||||
//display: Controls.AbstractButton.IconOnly
|
||||
//Layout.preferredWidth: parent.height
|
||||
//text: i18n("Expand")
|
||||
//enabled: playlistView.count > 0
|
||||
//Layout.fillHeight: true
|
||||
//icon.name: footerItem.maximized ? "arrow-down" : "arrow-up"
|
||||
//onClicked: footerItem.maximized = !footerItem.maximized
|
||||
//}
|
||||
Controls.ToolButton {
|
||||
display: Controls.AbstractButton.IconOnly
|
||||
Layout.preferredWidth: parent.height
|
||||
text: i18n("Expand")
|
||||
enabled: playlistView.count > 0
|
||||
Layout.fillHeight: true
|
||||
icon.name: footerItem.maximized ? "arrow-down" : "arrow-up"
|
||||
onClicked: footerItem.maximized = !footerItem.maximized
|
||||
}
|
||||
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
//Behavior on height {
|
||||
//NumberAnimation {
|
||||
//}
|
||||
//}
|
||||
Behavior on height {
|
||||
NumberAnimation {
|
||||
}
|
||||
}
|
||||
}
|
||||
+59
-120
@@ -12,12 +12,10 @@ import org.kde.ytmusic 1.0
|
||||
Kirigami.ApplicationWindow {
|
||||
id: root
|
||||
|
||||
property alias searchField: searchLoader.item // TODO
|
||||
|
||||
property bool wideScreen: width >= 600
|
||||
property bool showSearch: false // only applicable if not widescreen
|
||||
property alias searchField: searchField
|
||||
|
||||
header: Controls.Control {
|
||||
visible: !footer.maximized
|
||||
padding: Kirigami.Units.largeSpacing
|
||||
|
||||
background: Rectangle {
|
||||
@@ -28,62 +26,73 @@ Kirigami.ApplicationWindow {
|
||||
Kirigami.Theme.colorSet: Kirigami.Theme.Header
|
||||
color: Kirigami.Theme.backgroundColor
|
||||
}
|
||||
|
||||
contentItem: RowLayout {
|
||||
Controls.ToolButton {
|
||||
id: searchBack
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
visible:
|
||||
(!root.wideScreen && root.showSearch && root.searchField.text === "")
|
||||
|| pageStack.layers.depth > 1
|
||||
text: i18n("Back")
|
||||
icon.name: "go-previous-view"
|
||||
display: Controls.ToolButton.IconOnly
|
||||
onClicked: if (root.showSearch)
|
||||
root.showSearch = false
|
||||
else
|
||||
pageStack.layers.pop()
|
||||
}
|
||||
|
||||
Kirigami.Heading {
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
Layout.leftMargin: Kirigami.Units.largeSpacing
|
||||
level: 1
|
||||
text: "AudioTube"
|
||||
visible: !root.wideScreen && !root.showSearch
|
||||
}
|
||||
|
||||
// spacer
|
||||
contentItem: RowLayout{
|
||||
Item {
|
||||
Layout.fillWidth: !root.wideScreen
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
Loader {
|
||||
id: searchLoader
|
||||
visible: root.wideScreen || root.showSearch
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
Kirigami.SearchField {
|
||||
id: searchField
|
||||
delaySearch: true
|
||||
selectByMouse: true
|
||||
Layout.fillWidth: true
|
||||
Layout.maximumWidth: 400
|
||||
sourceComponent: searchFieldComponent
|
||||
}
|
||||
|
||||
Controls.ToolButton {
|
||||
Layout.alignment: Qt.AlignRight
|
||||
visible: !root.wideScreen && !root.showSearch
|
||||
text: i18n("Search")
|
||||
icon.name: "search"
|
||||
display: Controls.ToolButton.TextBesideIcon
|
||||
onClicked: {
|
||||
root.showSearch = true
|
||||
root.searchField.forceActiveFocus();
|
||||
root.searchField.popup.open();
|
||||
onPressed: {
|
||||
popup.open()
|
||||
}
|
||||
|
||||
Controls.Popup {
|
||||
id: popup
|
||||
x: searchField.y
|
||||
y: searchField.y + searchField.height
|
||||
visible: true
|
||||
width: searchField.width
|
||||
height: completionList
|
||||
? Math.min(completionList.count * Kirigami.Units.gridUnit * 2 + Kirigami.Units.gridUnit * 2, Kirigami.Units.gridUnit * 20)
|
||||
: Kirigami.Units.gridUnit * 20
|
||||
|
||||
contentItem: Controls.ScrollView {
|
||||
Controls.ScrollBar.horizontal.policy: Controls.ScrollBar.AlwaysOff
|
||||
ListView {
|
||||
id: completionList
|
||||
model: Library.searches
|
||||
delegate: Controls.ItemDelegate {
|
||||
id: completionDelegate
|
||||
width: parent.width
|
||||
height: Kirigami.Units.gridUnit * 2
|
||||
text: model.display
|
||||
onClicked: {
|
||||
searchField.text = model.display
|
||||
searchField.accepted()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onAccepted: {
|
||||
pageStack.clear()
|
||||
|
||||
if (text) {
|
||||
Library.addSearch(text)
|
||||
pageStack.push("qrc:/SearchPage.qml", {
|
||||
"searchQuery": text})
|
||||
} else {
|
||||
pageStack.replace("qrc:/LibraryPage.qml")
|
||||
}
|
||||
|
||||
popup.close()
|
||||
}
|
||||
}
|
||||
Item {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
title: i18n("AudioTube")
|
||||
|
||||
controlsVisible: !footer.maximized
|
||||
|
||||
contextDrawer: Kirigami.ContextDrawer {
|
||||
id: contextDrawer
|
||||
}
|
||||
@@ -111,76 +120,6 @@ Kirigami.ApplicationWindow {
|
||||
showPassiveNotification(error)
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: searchFieldComponent
|
||||
|
||||
Kirigami.SearchField {
|
||||
id: searchField
|
||||
delaySearch: true
|
||||
selectByMouse: true
|
||||
onPressed: {
|
||||
popup.open()
|
||||
}
|
||||
|
||||
property alias popup: popup
|
||||
|
||||
Controls.Popup {
|
||||
id: popup
|
||||
x: searchField.y
|
||||
y: searchField.y + searchField.height
|
||||
width: searchField.width
|
||||
height: completionList
|
||||
? Math.min(completionList.count * Kirigami.Units.gridUnit * 2 + Kirigami.Units.gridUnit * 2, Kirigami.Units.gridUnit * 20)
|
||||
: Kirigami.Units.gridUnit * 20
|
||||
|
||||
contentItem: Controls.ScrollView {
|
||||
Controls.ScrollBar.horizontal.policy: Controls.ScrollBar.AlwaysOff
|
||||
ListView {
|
||||
id: completionList
|
||||
model: Library.searches
|
||||
delegate: Controls.ItemDelegate {
|
||||
Kirigami.Theme.colorSet: Kirigami.Theme.Window
|
||||
Kirigami.Theme.inherit: false
|
||||
id: completionDelegate
|
||||
width: parent.width
|
||||
height: Kirigami.Units.gridUnit * 2
|
||||
text: model.display
|
||||
onClicked: {
|
||||
searchField.text = model.display
|
||||
searchField.accepted()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onAccepted: {
|
||||
pageStack.clear()
|
||||
pageStack.layers.clear()
|
||||
|
||||
if (text) {
|
||||
Library.addSearch(text)
|
||||
pageStack.push("qrc:/SearchPage.qml", {
|
||||
"searchQuery": text})
|
||||
} else {
|
||||
pageStack.replace("qrc:/LibraryPage.qml")
|
||||
}
|
||||
|
||||
popup.close()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pageStack.anchors.bottomMargin: playerFooter.minimizedPlayerHeight + 1
|
||||
|
||||
// media player
|
||||
PlayerFooter {
|
||||
id: playerFooter
|
||||
anchors.topMargin: -root.header.height
|
||||
anchors.fill: parent
|
||||
|
||||
// only expand flicking area to full screen when it is open
|
||||
z: (contentY === 0) ? -1 : 999
|
||||
}
|
||||
footer: PlayerFooter {}
|
||||
}
|
||||
+49
-16
@@ -17,12 +17,8 @@ namespace ranges = std::ranges;
|
||||
Library::Library(QObject *parent)
|
||||
: QObject{parent}
|
||||
, m_database(ThreadedDatabase::establishConnection([]() -> DatabaseConfiguration {
|
||||
const auto databaseDirectory = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
|
||||
// Make sure the database directory exists
|
||||
QDir(databaseDirectory).mkpath(QStringLiteral("."));
|
||||
|
||||
DatabaseConfiguration config;
|
||||
config.setDatabaseName(databaseDirectory % QDir::separator() % "library.sqlite");
|
||||
config.setDatabaseName(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) % QDir::separator() % "library.sqlite");
|
||||
config.setType(DATABASE_TYPE_SQLITE);
|
||||
return config;
|
||||
}()))
|
||||
@@ -40,7 +36,16 @@ Library &Library::instance()
|
||||
|
||||
FavouritesModel *Library::favourites()
|
||||
{
|
||||
auto future = m_database->getResults<Song>("select * from favourites natural join songs");
|
||||
auto future = mapFuture<Rows, std::vector<Song>>(
|
||||
m_database->getResults("select * from favourites natural join songs"),
|
||||
[](auto rows)
|
||||
{
|
||||
std::vector<Song> songs;
|
||||
ranges::transform(parseRows<QString, QString, QString, QString>(rows),
|
||||
std::back_inserter(songs),
|
||||
Song::fromSql);
|
||||
return songs;
|
||||
});
|
||||
return new FavouritesModel(std::move(future), this);
|
||||
}
|
||||
|
||||
@@ -66,7 +71,16 @@ FavouriteWatcher *Library::favouriteWatcher(const QString &videoId)
|
||||
|
||||
SearchHistoryModel *Library::searches()
|
||||
{
|
||||
return new SearchHistoryModel(m_database->getResults<SingleValue<QString>>("select (search_query) from searches order by search_id desc"), this);
|
||||
return new SearchHistoryModel(mapFuture<Rows, std::vector<QString>>(
|
||||
m_database->getResults("select (search_query) from searches order by search_id desc"),
|
||||
[](const auto &rows)
|
||||
{
|
||||
std::vector<QString> out;
|
||||
ranges::transform(rows, std::back_inserter(out), [](auto row) {
|
||||
return row[0].toString();
|
||||
});
|
||||
return out;
|
||||
}), this);
|
||||
}
|
||||
|
||||
void Library::addSearch(const QString &text)
|
||||
@@ -76,7 +90,16 @@ void Library::addSearch(const QString &text)
|
||||
|
||||
PlaybackHistoryModel *Library::playbackHistory()
|
||||
{
|
||||
auto future = m_database->getResults<PlayedSong>("select * from played_songs natural join songs");
|
||||
auto future = mapFuture<Rows, std::vector<PlayedSong>>(
|
||||
m_database->getResults("select * from played_songs natural join songs"),
|
||||
[](auto rows)
|
||||
{
|
||||
std::vector<PlayedSong> playedSongs;
|
||||
ranges::transform(parseRows<QString, int, QString, QString, QString>(rows),
|
||||
std::back_inserter(playedSongs),
|
||||
PlayedSong::fromSql);
|
||||
return playedSongs;
|
||||
});
|
||||
return new PlaybackHistoryModel(std::move(future), this);
|
||||
}
|
||||
|
||||
@@ -91,7 +114,16 @@ void Library::addPlaybackHistoryItem(const QString &videoId, const QString &titl
|
||||
|
||||
PlaybackHistoryModel *Library::mostPlayed()
|
||||
{
|
||||
auto future = m_database->getResults<PlayedSong>("select * from played_songs natural join songs order by plays desc limit 10");
|
||||
auto future = mapFuture<Rows, std::vector<PlayedSong>>(
|
||||
m_database->getResults("select * from played_songs natural join songs order by plays desc limit 10"),
|
||||
[](auto rows)
|
||||
{
|
||||
std::vector<PlayedSong> playedSongs;
|
||||
ranges::transform(parseRows<QString, int, QString, QString, QString>(rows),
|
||||
std::back_inserter(playedSongs),
|
||||
PlayedSong::fromSql);
|
||||
return playedSongs;
|
||||
});
|
||||
return new PlaybackHistoryModel(std::move(future), this);
|
||||
}
|
||||
|
||||
@@ -148,7 +180,7 @@ QHash<int, QByteArray> PlaybackHistoryModel::roleNames() const {
|
||||
return {
|
||||
{Roles::VideoId, "videoId"},
|
||||
{Roles::Title, "title"},
|
||||
{Roles::Artist, "artists"},
|
||||
{Roles::Artist, "artist"},
|
||||
{Roles::Plays, "plays"}
|
||||
};
|
||||
}
|
||||
@@ -186,7 +218,7 @@ QHash<int, QByteArray> FavouritesModel::roleNames() const {
|
||||
return {
|
||||
{Roles::VideoId, "videoId"},
|
||||
{Roles::Title, "title"},
|
||||
{Roles::Artist, "artists"}
|
||||
{Roles::Artist, "artist"}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -211,9 +243,10 @@ FavouriteWatcher::FavouriteWatcher(Library *library, const QString &videoId)
|
||||
: QObject(library), m_videoId(videoId), m_library(library)
|
||||
{
|
||||
auto update = [this] {
|
||||
connectFuture(m_library->database().getResult<SingleValue<bool>>("select count(*) > 0 from favourites where video_id = ?", m_videoId), this, [this](auto count) {
|
||||
if (count) {
|
||||
m_isFavourite = count->value;
|
||||
connectFuture(m_library->database().getResult("select count(*) from favourites where video_id = ?", m_videoId), this, [this](auto row) {
|
||||
if (row) {
|
||||
auto [favCount] = parseRow<int>(*row);
|
||||
m_isFavourite = favCount > 0;
|
||||
Q_EMIT isFavouriteChanged();
|
||||
}
|
||||
});
|
||||
@@ -226,7 +259,7 @@ bool FavouriteWatcher::isFavourite() const {
|
||||
return m_isFavourite;
|
||||
}
|
||||
|
||||
SearchHistoryModel::SearchHistoryModel(QFuture<std::vector<SingleValue<QString>>> &&historyFuture, QObject *parent)
|
||||
SearchHistoryModel::SearchHistoryModel(QFuture<std::vector<QString>> &&historyFuture, QObject *parent)
|
||||
: QAbstractListModel(parent)
|
||||
{
|
||||
connectFuture(historyFuture, this, [this](const auto history) {
|
||||
@@ -243,7 +276,7 @@ int SearchHistoryModel::rowCount(const QModelIndex &parent) const {
|
||||
QVariant SearchHistoryModel::data(const QModelIndex &index, int role) const {
|
||||
switch (role) {
|
||||
case Qt::DisplayRole:
|
||||
return m_history[index.row()].value;
|
||||
return m_history[index.row()];
|
||||
}
|
||||
|
||||
Q_UNREACHABLE();
|
||||
|
||||
+4
-8
@@ -17,9 +17,7 @@
|
||||
class FavouriteWatcher;
|
||||
|
||||
struct Song {
|
||||
using ColumnTypes = std::tuple<QString, QString, QString, QString>;
|
||||
|
||||
static Song fromSql(ColumnTypes tuple) {
|
||||
static Song fromSql(std::tuple<QString, QString, QString, QString> tuple) {
|
||||
auto [videoId, title, artist, album] = tuple;
|
||||
return Song {videoId, title, artist, album};
|
||||
}
|
||||
@@ -51,9 +49,7 @@ private:
|
||||
};
|
||||
|
||||
struct PlayedSong {
|
||||
using ColumnTypes = std::tuple<QString, int, QString, QString, QString>;
|
||||
|
||||
static PlayedSong fromSql(ColumnTypes tuple) {
|
||||
static PlayedSong fromSql(std::tuple<QString, int, QString, QString, QString> tuple) {
|
||||
auto [videoId, plays, title, artist, album] = tuple;
|
||||
return PlayedSong {videoId, title, artist, album, plays};
|
||||
}
|
||||
@@ -90,12 +86,12 @@ class SearchHistoryModel : public QAbstractListModel {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
SearchHistoryModel(QFuture<std::vector<SingleValue<QString>>> &&historyFuture, QObject *parent = nullptr);
|
||||
SearchHistoryModel(QFuture<std::vector<QString> > &&historyFuture, QObject *parent = nullptr);
|
||||
int rowCount(const QModelIndex &parent) const override;
|
||||
QVariant data(const QModelIndex &index, int role) const override;
|
||||
|
||||
private:
|
||||
std::vector<SingleValue<QString>> m_history;
|
||||
std::vector<QString> m_history;
|
||||
};
|
||||
|
||||
class Library : public QObject
|
||||
|
||||
@@ -14,10 +14,7 @@ SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted
|
||||
<file alias="PlaylistPage.qml">contents/ui/PlaylistPage.qml</file>
|
||||
<file alias="ConfirmationMessage.qml">contents/ui/ConfirmationMessage.qml</file>
|
||||
<file alias="LibraryPage.qml">contents/ui/LibraryPage.qml</file>
|
||||
<file alias="MinimizedPlayerControls.qml">contents/ui/MinimizedPlayerControls.qml</file>
|
||||
<file alias="MaximizedPlayerPage.qml">contents/ui/MaximizedPlayerPage.qml</file>
|
||||
<file>migrations/2022-05-20-194850_init/down.sql</file>
|
||||
<file>migrations/2022-05-20-194850_init/up.sql</file>
|
||||
<file alias="PlaybackHistory.qml">contents/ui/PlaybackHistory.qml</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
@@ -17,8 +17,6 @@ VideoInfoExtractor::VideoInfoExtractor(QObject *parent)
|
||||
m_videoInfo = {};
|
||||
Q_EMIT audioUrlChanged();
|
||||
Q_EMIT titleChanged();
|
||||
Q_EMIT artistChanged();
|
||||
Q_EMIT channelChanged();
|
||||
Q_EMIT songChanged();
|
||||
Q_EMIT thumbnailChanged();
|
||||
return;
|
||||
@@ -32,8 +30,6 @@ VideoInfoExtractor::VideoInfoExtractor(QObject *parent)
|
||||
setLoading(false);
|
||||
Q_EMIT audioUrlChanged();
|
||||
Q_EMIT titleChanged();
|
||||
Q_EMIT artistChanged();
|
||||
Q_EMIT channelChanged();
|
||||
Q_EMIT songChanged();
|
||||
Q_EMIT thumbnailChanged();
|
||||
});
|
||||
@@ -85,16 +81,6 @@ QString VideoInfoExtractor::title() const
|
||||
return QString::fromStdString(m_videoInfo.title);
|
||||
}
|
||||
|
||||
QString VideoInfoExtractor::artist() const
|
||||
{
|
||||
return QString::fromStdString(m_videoInfo.artist);
|
||||
}
|
||||
|
||||
QString VideoInfoExtractor::channel() const
|
||||
{
|
||||
return QString::fromStdString(m_videoInfo.channel);
|
||||
}
|
||||
|
||||
QString VideoInfoExtractor::thumbnail() const
|
||||
{
|
||||
return QString::fromStdString(m_videoInfo.thumbnail);
|
||||
|
||||
@@ -17,8 +17,6 @@ class VideoInfoExtractor : public QObject
|
||||
|
||||
Q_PROPERTY(QUrl audioUrl READ audioUrl NOTIFY audioUrlChanged)
|
||||
Q_PROPERTY(QString title READ title NOTIFY titleChanged)
|
||||
Q_PROPERTY(QString artist READ artist NOTIFY artistChanged) // may be empty if it is a video
|
||||
Q_PROPERTY(QString channel READ channel NOTIFY channelChanged)
|
||||
Q_PROPERTY(QString thumbnail READ thumbnail NOTIFY thumbnailChanged)
|
||||
Q_PROPERTY(bool loading READ loading WRITE setLoading NOTIFY loadingChanged)
|
||||
|
||||
@@ -34,12 +32,6 @@ public:
|
||||
|
||||
QString title() const;
|
||||
Q_SIGNAL void titleChanged();
|
||||
|
||||
QString artist() const;
|
||||
Q_SIGNAL void artistChanged();
|
||||
|
||||
QString channel() const;
|
||||
Q_SIGNAL void channelChanged();
|
||||
|
||||
QString thumbnail() const;
|
||||
Q_SIGNAL void thumbnailChanged();
|
||||
|
||||
+3
-6
@@ -5,7 +5,6 @@
|
||||
#include "ytmusic.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
|
||||
#include <pybind11/embed.h>
|
||||
#include <pybind11/stl.h>
|
||||
@@ -22,7 +21,7 @@ void pyPrintPretty(py::handle obj) {
|
||||
|
||||
#define UNEXPORT __attribute__ ((visibility("hidden")))
|
||||
|
||||
constexpr auto TESTED_YTMUSICAPI_VERSION = "0.22.0";
|
||||
constexpr auto TESTED_YTMUSICAPI_VERSION = "0.21.0";
|
||||
|
||||
struct UNEXPORT YTMusicPrivate {
|
||||
py::scoped_interpreter guard {};
|
||||
@@ -359,7 +358,7 @@ artist::Artist YTMusic::get_artist(const std::string &channel_id) const
|
||||
artist["views"].cast<std::optional<std::string>>(),
|
||||
artist["name"].cast<std::string>(),
|
||||
artist["channelId"].cast<std::string>(),
|
||||
artist["subscribers"].cast<std::optional<std::string>>(),
|
||||
artist["subscribers"].cast<std::string>(),
|
||||
artist["subscribed"].cast<bool>(),
|
||||
extract_py_list<meta::Thumbnail>(artist["thumbnails"]),
|
||||
extract_artist_section<artist::Artist::Song>(artist, "songs"),
|
||||
@@ -461,12 +460,10 @@ video_info::VideoInfo YTMusic::extract_video_info(const std::string &video_id) c
|
||||
using namespace pybind11::literals;
|
||||
|
||||
const auto info = d->get_ytdl().attr("extract_info")(video_id, "download"_a=py::bool_(false));
|
||||
|
||||
|
||||
return {
|
||||
info["id"].cast<std::string>(),
|
||||
info["title"].cast<std::string>(),
|
||||
info.contains("artist") ? info["artist"].cast<std::string>() : "",
|
||||
info.contains("channel") ? info["channel"].cast<std::string>() : "",
|
||||
extract_py_list<video_info::Format>(info["formats"]),
|
||||
info["thumbnail"].cast<std::string>()
|
||||
};
|
||||
|
||||
+1
-3
@@ -131,7 +131,7 @@ struct Artist {
|
||||
std::optional<std::string> views;
|
||||
std::string name;
|
||||
std::string channel_id;
|
||||
std::optional<std::string> subscribers;
|
||||
std::string subscribers;
|
||||
bool subscribed;
|
||||
std::vector<meta::Thumbnail> thumbnails;
|
||||
std::optional<Section<Song>> songs;
|
||||
@@ -241,8 +241,6 @@ struct Format {
|
||||
struct VideoInfo {
|
||||
std::string id;
|
||||
std::string title;
|
||||
std::string artist;
|
||||
std::string channel;
|
||||
std::vector<Format> formats;
|
||||
std::string thumbnail;
|
||||
|
||||
|
||||
Reference in new issue
Block a user