Compare commits

..
Author SHA1 Message Date
Mathis Brüchert d97ae991dc Add about page 2023-02-15 19:38:33 +01:00
Mathis Brüchert bda1811200 Show placeholder images when the library is empty 2023-02-15 17:33:49 +01:00
l10n daemon script 5465b7cc69 GIT_SILENT Sync po/docbooks with svn 2023-02-15 02:17:01 +00:00
l10n daemon script 1006b9d895 GIT_SILENT Sync po/docbooks with svn 2023-02-12 02:11:48 +00:00
l10n daemon script a55ceffeba GIT_SILENT Sync po/docbooks with svn 2023-02-11 02:11:53 +00:00
l10n daemon script ff1dd274cb GIT_SILENT Sync po/docbooks with svn 2023-02-10 02:30:33 +00:00
l10n daemon script 5afffd6cbb GIT_SILENT Sync po/docbooks with svn 2023-02-09 02:46:27 +00:00
l10n daemon script 83287251a7 GIT_SILENT Sync po/docbooks with svn 2023-02-08 03:40:16 +00:00
Devin Lin 9a44485a77 Fix player controls on Plasma Mobile
Currently the player controls are broken, since qqc2-breeze-style expects implicit dimensions to be set properly. Also did some slight formatting fixes.
2023-02-07 16:03:38 +00:00
Theophile Gilgien a08aabb2bc allow volume label internationalisation 2023-02-07 15:36:32 +00:00
l10n daemon script 4a028c8102 GIT_SILENT Sync po/docbooks with svn 2023-02-07 02:31:19 +00:00
l10n daemon script d872158f78 GIT_SILENT Sync po/docbooks with svn 2023-02-06 02:37:00 +00:00
l10n daemon script 57e7a2a816 GIT_SILENT Sync po/docbooks with svn 2023-02-05 02:23:04 +00:00
l10n daemon script a175b9e453 GIT_SILENT Sync po/docbooks with svn 2023-02-04 02:51:44 +00:00
Jonah Brüchert 4947281de8 Add swipe indicators to bottom drawers 2023-02-03 14:31:00 +01:00
Jonah Brüchert c4c798b803 Fix some more qml warnings on mobile 2023-02-03 14:26:46 +01:00
Jonah Brüchert 14d646104c Fix playlist being invisible on mobile 2023-02-03 14:15:01 +01:00
Mathis Brüchert aacb03e765 redesign icon 2023-02-03 13:22:05 +01:00
Mathis Brüchert 590a219f22 redesign drawer 2023-02-03 13:20:06 +01:00
Theophile Gilgien e68ff6d01c add a volume slider in maximized player 2023-02-03 13:06:00 +01:00
Jonah Brüchert d5fcee258e SearchWithDropdown: Enable clipping the list view 2023-02-03 13:01:57 +01:00
62 changed files with 2499 additions and 2185 deletions

No files matched your search

-1
View File
@@ -43,7 +43,6 @@ find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS Kirigami2 I18n CoreAddon
find_package(pybind11 REQUIRED)
find_package(Ytdlp REQUIRED RUNTIME)
find_package(YTMusicAPI 0.24.0 REQUIRED RUNTIME)
find_package(Desert REQUIRED)
ki18n_install(po)
+1 -1
View File
@@ -4,7 +4,7 @@
find_package(Python3 REQUIRED COMPONENTS Interpreter)
execute_process(COMMAND ${Python3_EXECUTABLE} -c "import ytmusicapi; print(ytmusicapi.version('ytmusicapi'))" RESULT_VARIABLE YTMUSICAPI_CHECK_RESULT OUTPUT_VARIABLE YTMusicAPI_VERSION)
execute_process(COMMAND ${Python3_EXECUTABLE} -c "import ytmusicapi; print(ytmusicapi.__version__)" RESULT_VARIABLE YTMUSICAPI_CHECK_RESULT OUTPUT_VARIABLE YTMusicAPI_VERSION)
string(STRIP ${YTMusicAPI_VERSION} YTMusicAPI_VERSION)
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

+1 -1
View File
@@ -1 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg width="48" height="48" version="1.1" viewBox="0 0 12.7 12.7" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="a" x1="25" x2="25" y1="3" y2="42.605" gradientTransform="matrix(.26458 0 0 .26458 5.101e-5 3.6667e-7)" gradientUnits="userSpaceOnUse"><stop stop-color="#f47750" offset="0"/><stop stop-color="#ed1515" offset="1"/></linearGradient><linearGradient id="d" x1="24" x2="24" y1="35.353" y2="12.647" gradientUnits="userSpaceOnUse"><stop stop-color="#31363b" offset="0"/><stop stop-color="#5f6a73" offset="1"/></linearGradient><linearGradient id="c" x1="24" x2="24" y1="29" y2="19" gradientUnits="userSpaceOnUse"><stop stop-color="#4d4d4d" offset="0"/><stop stop-color="#737373" offset="1"/></linearGradient><linearGradient id="b" x1="6.35" x2="6.35" y1="9.525" y2="-1.8372" gradientUnits="userSpaceOnUse"><stop stop-color="#7f8c8d" offset="0"/><stop stop-color="#929d9e" offset="1"/></linearGradient></defs><metadata><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/><dc:title/></cc:Work></rdf:RDF></metadata><g stroke-width=".26458"><rect x="1.0584" y="1.0583" width="10.583" height="10.583" rx="1.5875" ry="1.5875" fill="#a83226" style="paint-order:stroke fill markers"/><rect x="1.0584" y="1.0583" width="10.583" height="10.319" rx="1.5875" ry="1.5875" fill="url(#a)" style="paint-order:stroke fill markers"/><circle cx="6.35" cy="6.35" r="3.175" fill="none" stroke="#eee" stroke-linecap="square" stroke-width=".26458"/><path d="m8.3465 6.35-3.0549 1.7637 3e-7 -1.7637-3e-7 -1.7637 1.5274 0.88187z" fill="#fff"/><path d="m2.3962 5.8208a3.9538 3.9538 0 0 1 3.9538-3.9538 3.9538 3.9538 0 0 1 3.9538 3.9538" fill="none" stroke="url(#b)" stroke-linecap="square" stroke-width=".26458"/><path d="m4.3731 2.3967a3.9538 3.9538 0 0 1 3.9538 1e-7" fill="none" stroke="#6b6b6b" stroke-linecap="round" stroke-width=".52917"/><path transform="scale(.26458)" d="m8 19c-0.554 0-1 0.446-1 1v8c0 0.554 0.446 1 1 1h2c0.554 0 1-0.446 1-1v-8c0-0.554-0.446-1-1-1h-2zm30 0c-0.554 0-1 0.446-1 1v8c0 0.554 0.446 1 1 1h2c0.554 0 1-0.446 1-1v-8c0-0.554-0.446-1-1-1h-2z" fill="url(#c)"/><path transform="scale(.26458)" d="m8 19c-0.554 0-1 0.446-1 1v8c0 0.554 0.446 1 1 1h2v-10h-2zm30 0v10h2c0.554 0 1-0.446 1-1v-8c0-0.554-0.446-1-1-1h-2z" fill="url(#d)"/></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" width="48" height="48" viewBox="0 0 12.7 12.7"><defs><linearGradient id="c"><stop offset="0" stop-color="#dc8689"/><stop offset="1" stop-color="#d56062"/></linearGradient><linearGradient id="b"><stop offset="0" stop-color="#da4453"/><stop offset="1" stop-color="#e74c3c"/></linearGradient><linearGradient id="a"><stop offset="0" stop-color="#c0392b"/><stop offset="1" stop-color="#c0392b" stop-opacity="0"/></linearGradient><linearGradient xlink:href="#a" id="e" x1="6.08542" x2="6.08542" y1="6.35" y2="11.3773" gradientUnits="userSpaceOnUse"/><linearGradient xlink:href="#b" id="d" x1="6.61458" x2="6.61458" y1="6.2178" y2="1.0583" gradientTransform="translate(0 -.15143)" gradientUnits="userSpaceOnUse"/><linearGradient xlink:href="#c" id="g" x1="10.58366" x2="11.64167" y1="6.08397" y2="6.08542" gradientUnits="userSpaceOnUse"/><linearGradient xlink:href="#c" id="f" x1="1.05833" x2="2.38125" y1="6.08542" y2="6.08542" gradientTransform="translate(-3.43958)" gradientUnits="userSpaceOnUse"/></defs><rect width="10.583" height="10.583" x="1.0584" y="1.0583" fill="#a83226" paint-order="stroke fill markers" rx="1.5875" ry="1.5875"/><rect width="10.583" height="10.319" x="1.0584" y=".90687" fill="url(#d)" paint-order="stroke fill markers" rx="1.5875" ry="1.5875"/><circle cx="6.35" cy="6.34408" r="3.97467" fill="none" stroke="#a83226" stroke-linecap="square" stroke-width=".51752"/><path fill="url(#e)" d="M1.05885 6.08542v3.83645c0 .87947.70803 1.5875 1.5875 1.5875h7.40782c.87946 0 1.5875-.70803 1.5875-1.5875V6.08542Z" paint-order="stroke fill markers"/><path fill="#ad3327" d="M1.05833 6.08542v.52916h2.51355a.132.132 0 0 0 .13229-.13229v-.26458a.132.132 0 0 0-.1323-.1323H1.05834z"/><path fill="#ac3327" d="M9.6578 6.08542a.132.132 0 0 0-.13228.13229v.26458a.132.132 0 0 0 .13229.1323h1.98386v-.52917Z"/><circle cx="6.3499" cy="6.06637" r="3.97467" fill="none" stroke="#dc8689" stroke-linecap="square" stroke-width=".51752"/><g fill="#ad3327" transform="translate(-.52917 -.26458)"><rect width=".52917" height=".52917" x="4.49792" y="6.35" rx=".13229" ry=".13229"/><rect width=".52917" height="4.7625" x="5.29167" y="4.49792" rx=".13229" ry=".13229"/><rect width=".52917" height="3.70417" x="6.08542" y="5.02708" rx=".13229" ry=".13229"/><rect width=".52917" height="2.64583" x="6.87917" y="5.55625" rx=".13229" ry=".13229"/><rect width=".52917" height="1.5875" x="7.67292" y="6.08542" rx=".13229" ry=".13229"/></g><path fill="#a83226" d="M7.9375 6.489v.27958c0 .06128.059.11059.1323.11059h.26458c.07328 0 .13229-.0493.13229-.1106v-.27956c-.00353.0701-.0613.12557-.1323.12557H8.0698c-.071 0-.12876-.05548-.13229-.12557z"/><path fill="#ad3327" d="M8.73125 6.22443V6.504c0 .06128.059.11058.1323.11058h.26458c.07328 0 .13229-.0493.13229-.11058v-.27957c-.00353.07009-.0613.12557-.1323.12557h-.26458c-.071 0-.12876-.05548-.13229-.12557z"/><rect width=".52917" height=".52917" x="3.96875" y="5.82083" fill="#f0b4ba" rx=".13229" ry=".13229"/><rect width=".52917" height="5.29167" x="4.7625" y="3.43958" fill="#fff" rx=".13229" ry=".13229"/><rect width=".52917" height="4.23333" x="5.55625" y="3.96875" fill="#fff" rx=".13229" ry=".13229"/><rect width=".52917" height="3.175" x="6.35" y="4.49792" fill="#fff" rx=".13229" ry=".13229"/><rect width=".52917" height="2.11667" x="7.14375" y="5.02708" fill="#fff" rx=".13229" ry=".13229"/><rect width=".52917" height="1.05833" x="7.9375" y="5.55625" fill="#fff" rx=".13229" ry=".13229"/><path fill="#dc8689" d="M2.38125 5.82083V6.35h1.19063a.132.132 0 0 0 .13229-.1323v-.26457a.132.132 0 0 0-.1323-.1323z"/><rect width=".52917" height=".52917" x="9.26042" y="6.08542" fill="#f0b4ba" rx=".13229" ry=".13229" transform="translate(-.52917 -.26458)"/><path fill="#dc8689" d="M9.6573 5.82083a.132.132 0 0 0-.1323.1323v.26458a.132.132 0 0 0 .1323.13229h.66145v-.52917Z"/><rect width="1.32292" height=".52917" x="-2.38125" y="5.82083" fill="url(#f)" rx="0" ry="0" transform="scale(-1 1)"/><rect width="1.32292" height=".52917" x="10.31875" y="5.82083" fill="url(#g)" rx="0" ry="0"/></svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

+30 -30
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-02 11:59+0400\n"
"Last-Translator: Zayed Al-Saidi <[email protected]>\n"
"Language-Team: ar\n"
@@ -125,37 +125,28 @@ msgstr "الأكثر تشغيلا"
msgid "played Songs"
msgstr "الأغاني المشغلة"
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "تيوب الصوتي"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "المشغل الآن"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "صُفّ"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr "الكلمات"
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "أزل المسار"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "لا يوجد وسائط تعمل"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "أزل المسار"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -207,12 +198,12 @@ msgstr "قوائم التّشغيل"
msgid "Unknown"
msgstr "مجهول"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr "لا يوجد تطابق من البحوث الأخيرة"
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr "أزل من تاريخ البحث"
@@ -222,31 +213,40 @@ msgstr "أزل من تاريخ البحث"
msgid "Collapse Sidebar"
msgstr " اطوِ الشريط الجانبي"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "شغل التالي"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr "أضف للطابور"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr "أزل المفضلة"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr "أضف للمفضلة"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr "أزل من التّاريخ"
#~ msgid "Now Playing"
#~ msgstr "المشغل الآن"
#~ msgid "Queue"
#~ msgstr "صُفّ"
#~ msgid "Lyrics"
#~ msgstr "الكلمات"
#~ msgid "Favourite Songs"
#~ msgstr "الأغاني المفضّلة"
+27 -30
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2022-06-19 12:16+0400\n"
"Last-Translator: Kheyyam <[email protected]>\n"
"Language-Team: Azerbaijani <[email protected]>\n"
@@ -128,37 +128,28 @@ msgstr "Daha çox dinlənilən"
msgid "played Songs"
msgstr "Oxudulan mahnılar"
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "İndi səslənir"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "Növbə"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "Mahnını silin"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "Media faylı oynadılmır"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "Mahnını silin"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -211,12 +202,12 @@ msgstr "Mahnı siyahıları"
msgid "Unknown"
msgstr "Bilinməyən"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -226,33 +217,39 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "Sonrakını oxudun"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Remove Favourite"
msgstr "Süçilmişlər"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Add Favourite"
msgstr "Süçilmişlər"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr ""
#~ msgid "Now Playing"
#~ msgstr "İndi səslənir"
#~ msgid "Queue"
#~ msgstr "Növbə"
#~ msgid "Favourite Songs"
#~ msgstr "Seçilmiş mahnılar"
+22 -31
View File
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-27 10:54+0100\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-08 10:12+0100\n"
"Last-Translator: Josep M. Ferrer <[email protected]>\n"
"Language-Team: Catalan <[email protected]>\n"
"Language: ca\n"
@@ -129,37 +129,28 @@ msgstr "Les més reproduïdes"
msgid "played Songs"
msgstr "Cançons reproduïdes"
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "Ara s'està reproduint"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "Cua"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr "Lletra"
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "Elimina la pista"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "No s'està reproduint cap suport"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr "%1%"
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "Elimina la pista"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -211,12 +202,12 @@ msgstr "Llistes de reproducció"
msgid "Unknown"
msgstr "Desconeguda"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr "No hi ha cerques anteriors coincidents"
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr "elimina de l'historial de cerques"
@@ -226,27 +217,27 @@ msgstr "elimina de l'historial de cerques"
msgid "Collapse Sidebar"
msgstr "Redueix la barra lateral"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "Reprodueix el següent"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr "Afegeix a la cua"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr "Elimina de les preferides"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr "Afegeix a les preferides"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr "Elimina de l'historial"
+22 -31
View File
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-27 10:54+0100\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-08 10:12+0100\n"
"Last-Translator: Josep M. Ferrer <[email protected]>\n"
"Language-Team: Catalan <[email protected]>\n"
"Language: ca@valencia\n"
@@ -129,37 +129,28 @@ msgstr "Les més reproduïdes"
msgid "played Songs"
msgstr "Cançons reproduïdes"
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "Ara s'està reproduint"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "Cua"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr "Lletra"
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "Elimina la pista"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "No s'està reproduint cap suport"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr "%1%"
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "Elimina la pista"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -211,12 +202,12 @@ msgstr "Llistes de reproducció"
msgid "Unknown"
msgstr "Desconeguda"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr "No hi ha busques anteriors coincidents"
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr "elimina de l'historial de busques"
@@ -226,27 +217,27 @@ msgstr "elimina de l'historial de busques"
msgid "Collapse Sidebar"
msgstr "Reduïx la barra lateral"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "Reproduïx el següent"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr "Afig a la cua"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr "Elimina de les preferides"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr "Afig a les preferides"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr "Elimina de l'historial"
+34 -43
View File
@@ -1,13 +1,13 @@
# Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the audiotube package.
# Vit Pelcak <[email protected]>, 2021, 2022.
# Vit Pelcak <[email protected]>, 2021, 2022, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2022-06-28 13:58+0200\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-01-30 16:04+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 22.12.1\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
@@ -46,7 +46,7 @@ msgstr "Otevřít v prohlížeči"
#: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr ""
msgstr "Album • %1"
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
@@ -124,39 +124,30 @@ msgstr "Nejčastěji hrané"
#: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr ""
msgstr "přehrané skladby"
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "Nyní přehrávám"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "Fronta"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr "Text písně"
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "Odstranit skladbu"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "Nepřehrává se žádné médium"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr "%1%"
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "Odstranit skladbu"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -191,7 +182,7 @@ msgstr "Seznam skladeb"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr ""
msgstr "Předchozí hledání:"
#: contents/ui/SearchPage.qml:28
#, kde-format
@@ -208,42 +199,42 @@ msgstr "Seznamy skladeb"
msgid "Unknown"
msgstr "Neznámý"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr ""
msgstr "Neodpovídají žádná předchozí hledání"
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr ""
msgstr "odstranit z historie hledání"
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr ""
msgstr "Svinout postranní panel"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "Přehrát následující"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr ""
msgstr "Zařadit do fronty"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr ""
msgstr "Odstranit oblíbené"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr ""
msgstr "Přidat oblíbené"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr ""
msgstr "Odstranit z historie"
+34 -34
View File
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-14 23:47+0100\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-09 00:18+0100\n"
"Last-Translator: Frederik Schwarzer <[email protected]>\n"
"Language-Team: German <[email protected]>\n"
"Language: de\n"
@@ -128,37 +128,28 @@ msgstr "Am meisten abgespielt"
msgid "played Songs"
msgstr "Abgespielte Stücke"
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "Aktueller Titel"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "Warteschlange"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr "Liedtext"
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "Stück entfernen"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "Es werden keine Medien wiedergegeben"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr "%1 %"
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "Stück entfernen"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -210,45 +201,54 @@ msgstr "Wiedergabelisten"
msgid "Unknown"
msgstr "Unbekannt"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr ""
msgstr "Keine passenden vorherigen Suchvorgänge"
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr ""
msgstr "Aus Suchverlauf löschen"
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr "Seitenleiste einklappen"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "Nächste Wiedergabe"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr "Zur Warteschlange hinzufügen"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr "Favoriten entfernen"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr "Favoriten hinzufügen"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr ""
msgstr "Aus Verlauf löschen"
#~ msgid "Now Playing"
#~ msgstr "Aktueller Titel"
#~ msgid "Queue"
#~ msgstr "Warteschlange"
#~ msgid "Lyrics"
#~ msgstr "Liedtext"
#~ msgid "Favourite Songs"
#~ msgstr "Lieblingsstücke"
+30 -30
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2022-12-31 15:53+0000\n"
"Last-Translator: Steve Allewell <[email protected]>\n"
"Language-Team: English <[email protected]>\n"
@@ -126,37 +126,28 @@ msgstr "Most played"
msgid "played Songs"
msgstr "played Songs"
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "Now Playing"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "Queue"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr "Lyrics"
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "Remove Track"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "No media playing"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "Remove Track"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -208,13 +199,13 @@ msgstr "Playlists"
msgid "Unknown"
msgstr "Unknown"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, fuzzy, kde-format
#| msgid "Previous Searches:"
msgid "No matching previous searches"
msgstr "Previous Searches:"
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -224,31 +215,40 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr "Collapse Sidebar"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "Play Next"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr "Add to queue"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr "Remove Favourite"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr "Add Favourite"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr ""
#~ msgid "Now Playing"
#~ msgstr "Now Playing"
#~ msgid "Queue"
#~ msgstr "Queue"
#~ msgid "Lyrics"
#~ msgstr "Lyrics"
#~ msgid "Favourite Songs"
#~ msgstr "Favourite Songs"
+35 -32
View File
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-29 00:58+0100\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-08 03:34+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.12.1\n"
"X-Generator: Lokalize 22.12.2\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
@@ -128,37 +128,28 @@ msgstr "Más reproducidas"
msgid "played Songs"
msgstr "canciones reproducidas"
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "Reproduciendo"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "Cola"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr "Letra"
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "Eliminar pista"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "Ningún medio en reproducción"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr "%1%"
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "Eliminar pista"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -210,12 +201,12 @@ msgstr "Listas de reproducción"
msgid "Unknown"
msgstr "Desconocido"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr "No hay búsquedas anteriores coincidentes"
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr "eliminar del historial de búsqueda"
@@ -225,31 +216,43 @@ msgstr "eliminar del historial de búsqueda"
msgid "Collapse Sidebar"
msgstr "Contraer la barra lateral"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "Reproducir siguiente"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr "Añadir a la cola"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr "Eliminar favorita"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr "Añadir favorita"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr "Eliminar del historial"
#~ msgid "%"
#~ msgstr "%"
#~ msgid "Now Playing"
#~ msgstr "Reproduciendo"
#~ msgid "Queue"
#~ msgstr "Cola"
#~ msgid "Lyrics"
#~ msgstr "Letra"
#~ msgid "Favourite Songs"
#~ msgstr "Canciones favoritas"
+35 -32
View File
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-27 21:02+0100\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-08 07:47+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.12.1\n"
"X-Generator: Lokalize 22.12.2\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
@@ -129,37 +129,28 @@ msgstr "Gehien jotakoa"
msgid "played Songs"
msgstr "jotako abestiak"
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "Orain jotzen"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "Ilara"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr "Hitzak"
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "Kendu pista"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "Ez da euskarririk jotzen ari"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr "%%1"
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "Kendu pista"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -211,12 +202,12 @@ msgstr "Jotze-zerrendak"
msgid "Unknown"
msgstr "Ezezaguna"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr "Ez dago bat datorren aurreko bilaketarik"
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr "Kendu bilaketa-historiatik"
@@ -226,31 +217,43 @@ msgstr "Kendu bilaketa-historiatik"
msgid "Collapse Sidebar"
msgstr "Tolestu Alboko-barra"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "Jo hurrengoa"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr "Gehitu ilaran"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr "Kendu gogokoa"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr "Gehitu gogokoa"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr "Kendu historiatik"
#~ msgid "%"
#~ msgstr "%"
#~ msgid "Now Playing"
#~ msgstr "Orain jotzen"
#~ msgid "Queue"
#~ msgstr "Ilara"
#~ msgid "Lyrics"
#~ msgstr "Hitzak"
#~ msgid "Favourite Songs"
#~ msgstr "Gogoko abestiak"
+27 -30
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2022-10-24 07:57+0300\n"
"Last-Translator: Tommi Nieminen <[email protected]>\n"
"Language-Team: Finnish <[email protected]>\n"
@@ -127,37 +127,28 @@ msgstr "Soitetuimmat"
msgid "played Songs"
msgstr "Soitetut kappaleet"
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "Nyt soi"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "Jono"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "Poista raita"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "Mitään ei toisteta"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "Poista raita"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -210,12 +201,12 @@ msgstr "Soittolistat"
msgid "Unknown"
msgstr "Tuntematon"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -225,33 +216,39 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "Toista seuraava"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Remove Favourite"
msgstr "Suosikit"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Add Favourite"
msgstr "Suosikit"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr ""
#~ msgid "Now Playing"
#~ msgstr "Nyt soi"
#~ msgid "Queue"
#~ msgstr "Jono"
#~ msgid "Favourite Songs"
#~ msgstr "Suosikkikappaleet"
+34 -31
View File
@@ -4,8 +4,8 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-29 10:52+0100\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-11 16:25+0100\n"
"Last-Translator: Xavier BESNARD <xavier.besnard]neuf.fr>\n"
"Language-Team: fr\n"
"Language: fr\n"
@@ -124,37 +124,28 @@ msgstr "Les plus lus"
msgid "played Songs"
msgstr "Titres lus"
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "En cours de lecture"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "Mettre en file d'attente"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr "Paroles"
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "Supprimer une piste"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "Aucun média en lecture"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr "%1 %"
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "Supprimer une piste"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -206,12 +197,12 @@ msgstr "Listes de lecture"
msgid "Unknown"
msgstr "Inconnu"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr "Aucune correspondance avec les recherches précédentes"
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr "supprimer de l'historique de recherche"
@@ -221,31 +212,43 @@ msgstr "supprimer de l'historique de recherche"
msgid "Collapse Sidebar"
msgstr "Réduire la barre latérale"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "Lire le suivant"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr "Ajouter à la file de lecture"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr "Supprimer un favori"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr "Ajouter un favori"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr "Supprimer de l'historique"
#~ msgid "%"
#~ msgstr "%"
#~ msgid "Now Playing"
#~ msgstr "En cours de lecture"
#~ msgid "Queue"
#~ msgstr "Mettre en file d'attente"
#~ msgid "Lyrics"
#~ msgstr "Paroles"
#~ msgid "Favourite Songs"
#~ msgstr "Titres favoris"
+26 -31
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2021-09-17 20:09+0530\n"
"Last-Translator: Raghavendra Kamath <[email protected]>\n"
"Language-Team: kde-hindi\n"
@@ -126,38 +126,28 @@ msgstr ""
msgid "played Songs"
msgstr ""
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "ओडियो-ट्यूब"
#: contents/ui/MaximizedPlayerPage.qml:107
#, fuzzy, kde-format
#| msgid "No media playing"
msgid "Now Playing"
msgstr "कोई मीडिया नहीं बजा रहा है"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "गाना हटाएँ"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "कोई मीडिया नहीं बजा रहा है"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "गाना हटाएँ"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -210,12 +200,12 @@ msgstr "गीत-सूचीयाँ"
msgid "Unknown"
msgstr "अज्ञात"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -225,31 +215,36 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "अगला बजाएँ"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr ""
#, fuzzy
#~| msgid "No media playing"
#~ msgid "Now Playing"
#~ msgstr "कोई मीडिया नहीं बजा रहा है"
#~ msgid "Find music on YouTube Music"
#~ msgstr "यूट्यूब संगीत पर संगीत ढूंढें"
+30 -30
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-01-13 08:23+0700\n"
"Last-Translator: Linerly <[email protected]>\n"
"Language-Team: Indonesian <[email protected]>\n"
@@ -126,37 +126,28 @@ msgstr "Paling banyak diputar"
msgid "played Songs"
msgstr "Lagu yang telah diputar"
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "Sekarang Diputarkan"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "Antrean"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr "Lirik"
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "Hapus Trek"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "Tidak ada media yang diputarkan"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "Hapus Trek"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -208,12 +199,12 @@ msgstr "Daftar Putar"
msgid "Unknown"
msgstr "Tidak diketahui"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -223,31 +214,40 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "Putar Berikutnya"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr "Tambahkan ke antrean"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr "Hapus Favorit"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr "Tambahkan Favorit"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr ""
#~ msgid "Now Playing"
#~ msgstr "Sekarang Diputarkan"
#~ msgid "Queue"
#~ msgstr "Antrean"
#~ msgid "Lyrics"
#~ msgstr "Lirik"
#~ msgid "Favourite Songs"
#~ msgstr "Lagu Favorit"
+35 -32
View File
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-27 19:12+0100\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-05 12:50+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.12.1\n"
"X-Generator: Lokalize 22.12.2\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
@@ -126,37 +126,28 @@ msgstr "Più riprodotti"
msgid "played Songs"
msgstr "Brani riprodotti"
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "In riproduzione"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "Coda"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr "Testi"
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "Rimuovi traccia"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "Nessun supporto in riproduzione"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "Rimuovi traccia"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -208,12 +199,12 @@ msgstr "Scalette"
msgid "Unknown"
msgstr "Sconosciuto"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr "Nessuna ricerca precedente corrispondente"
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr "rimuovi dalla cronologia delle ricerche"
@@ -223,31 +214,43 @@ msgstr "rimuovi dalla cronologia delle ricerche"
msgid "Collapse Sidebar"
msgstr "Contrai la barra laterale"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "Riproduci successivo"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr "Aggiungi alla coda"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr "Rimuovi preferito"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr "Aggiungi preferito"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr "Rimuovi dalla cronologia"
#~ msgid "%"
#~ msgstr "%"
#~ msgid "Now Playing"
#~ msgstr "In riproduzione"
#~ msgid "Queue"
#~ msgstr "Coda"
#~ msgid "Lyrics"
#~ msgstr "Testi"
#~ msgid "Favourite Songs"
#~ msgstr "Brani preferiti"
+21 -30
View File
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2021-05-29 19:15-0700\n"
"Last-Translator: Japanese KDE translation team <[email protected]>\n"
"Language-Team: Japanese <[email protected]>\n"
@@ -121,37 +121,28 @@ msgstr ""
msgid "played Songs"
msgstr ""
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr ""
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -203,12 +194,12 @@ msgstr ""
msgid "Unknown"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -218,27 +209,27 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr ""
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr ""
+34 -31
View File
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-27 08:44+0100\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-08 07:08+0100\n"
"Last-Translator: Temuri Doghonadze <[email protected]>\n"
"Language-Team: Georgian <[email protected]>\n"
"Language: ka\n"
@@ -126,37 +126,28 @@ msgstr "ხშირად დაკრულები"
msgid "played Songs"
msgstr "დაკრული სიმღერები"
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "მიმდინარეობს დაკვრა"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "რიგი"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr "ლირიკა"
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "აუდიობილიკის წაშლა"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "არაფერს ვუკრავ"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr "%1%"
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "აუდიობილიკის წაშლა"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -208,12 +199,12 @@ msgstr "დასაკრავი სიები"
msgid "Unknown"
msgstr "უცნობი"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr "წინა ძებნებს არ ემთხვევა"
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr "ძებნის ისტორიიდან წაშლა"
@@ -223,31 +214,43 @@ msgstr "ძებნის ისტორიიდან წაშლა"
msgid "Collapse Sidebar"
msgstr "გვერდითი ზოლის ჩაკეცვა"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "შემდეგის დაკვრა"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr "რიგში ჩამატება"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr "რჩეულის წაშლა"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr "რჩეულის დამატება"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr "ისტორიიდან წაშლა"
#~ msgid "%"
#~ msgstr "%"
#~ msgid "Now Playing"
#~ msgstr "მიმდინარეობს დაკვრა"
#~ msgid "Queue"
#~ msgstr "რიგი"
#~ msgid "Lyrics"
#~ msgstr "ლირიკა"
#~ msgid "Favourite Songs"
#~ msgstr "რჩეული სიმღერები"
+27 -30
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2022-10-03 14:20+0200\n"
"Last-Translator: Shinjo Park <[email protected]>\n"
"Language-Team: Korean <[email protected]>\n"
@@ -126,37 +126,28 @@ msgstr "가장 많이 재생됨"
msgid "played Songs"
msgstr "재생한 노래"
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "지금 재생 중"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "대기열에 추가"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "트랙 삭제"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "재생 중인 미디어 없음"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "트랙 삭제"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -209,12 +200,12 @@ msgstr "재생 목록"
msgid "Unknown"
msgstr "알 수 없음"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -224,33 +215,39 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "다음 재생"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Remove Favourite"
msgstr "책갈피"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Add Favourite"
msgstr "책갈피"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr ""
#~ msgid "Now Playing"
#~ msgstr "지금 재생 중"
#~ msgid "Queue"
#~ msgstr "대기열에 추가"
#~ msgid "Favourite Songs"
#~ msgstr "책갈피에 등록된 노래"
+35 -32
View File
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-27 12:41+0100\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-08 14:22+0100\n"
"Last-Translator: Freek de Kruijf <[email protected]>\n"
"Language-Team: \n"
"Language: nl\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.12.1\n"
"X-Generator: Lokalize 22.12.2\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
@@ -126,37 +126,28 @@ msgstr "Meest afgespeeld"
msgid "played Songs"
msgstr "afgespeelde songs"
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "Speelt nu"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "Wachtrij"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr "Liedteksten"
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "Track verwijderen"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "Er speelt geen medium"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr "%1%"
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "Track verwijderen"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -208,12 +199,12 @@ msgstr "Afspeellijsten"
msgid "Unknown"
msgstr "Onbekend"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr "Geen overeenkomende vorige zoekopdrachten"
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr "uit zoekgeschiedenis verwijderen"
@@ -223,31 +214,43 @@ msgstr "uit zoekgeschiedenis verwijderen"
msgid "Collapse Sidebar"
msgstr "Zijbalk invouwen"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "Volgende afspelen"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr "Aan wachtrij toevoegen"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr "Favoriet verwijderen"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr "Favoriet toevoegen"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr "Uit geschiedenis verwijderen"
#~ msgid "%"
#~ msgstr "%"
#~ msgid "Now Playing"
#~ msgstr "Speelt nu"
#~ msgid "Queue"
#~ msgstr "Wachtrij"
#~ msgid "Lyrics"
#~ msgstr "Liedteksten"
#~ msgid "Favourite Songs"
#~ msgstr "Favoriete songs"
+26 -35
View File
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-15 12:33+0100\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-09 21:36+0100\n"
"Last-Translator: Karl Ove Hufthammer <[email protected]>\n"
"Language-Team: Norwegian Nynorsk <[email protected]>\n"
"Language: nn\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.12.1\n"
"X-Generator: Lokalize 22.12.2\n"
"X-Environment: kde\n"
"X-Accelerator-Marker: &\n"
"X-Text-Markup: kde4\n"
@@ -127,37 +127,28 @@ msgstr "Oftast avspela"
msgid "played Songs"
msgstr "Avspela songar"
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "Spelar no"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "Kø"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr "Songtekst"
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "Fjern spor"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "Inkje medium vert spela"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr "%1 %"
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "Fjern spor"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -209,42 +200,42 @@ msgstr "Spelelister"
msgid "Unknown"
msgstr "Ukjend"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr ""
msgstr "Ingen samsvarande tidlegare søk"
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr ""
msgstr "Fjern frå søkjeloggen"
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr "Fald saman sidestolpe"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "Spel som neste"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr "Legg i avspelingskøen"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr "Fjern frå favorittar"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr "Legg til favorittar"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr ""
msgstr "Fjern frå loggen"
+26 -31
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"POT-Creation-Date: 2023-02-08 01:02+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"
@@ -125,38 +125,28 @@ msgstr ""
msgid "played Songs"
msgstr ""
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "ਆਡੀਓ-ਟਿਊਬ"
#: contents/ui/MaximizedPlayerPage.qml:107
#, fuzzy, kde-format
#| msgid "No media playing"
msgid "Now Playing"
msgstr "ਕੋਈ ਮੀਡੀਆ ਨਹੀਂ ਚੱਲਦਾ"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "ਟਰੈਕ ਨੂੰ ਹਟਾਓ"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "ਕੋਈ ਮੀਡੀਆ ਨਹੀਂ ਚੱਲਦਾ"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "ਟਰੈਕ ਨੂੰ ਹਟਾਓ"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -209,12 +199,12 @@ msgstr "ਪਲੇਅਲਿਸਟਾਂ"
msgid "Unknown"
msgstr "ਅਣਪਛਾਤਾ"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -224,31 +214,36 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "ਅਗਲਾ ਚਲਾਓ"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr ""
#, fuzzy
#~| msgid "No media playing"
#~ msgid "Now Playing"
#~ msgstr "ਕੋਈ ਮੀਡੀਆ ਨਹੀਂ ਚੱਲਦਾ"
#~ msgid "Find music on YouTube Music"
#~ msgstr "ਯੂਟਿਊਬ ਸੰਗੀਤ ਉੱਤੇ ਸੰਗੀਤ ਲੱਭੋ"
+27 -30
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2022-10-18 18:06+0200\n"
"Last-Translator: Łukasz Wojniłowicz <[email protected]>\n"
"Language-Team: Polish <[email protected]>\n"
@@ -130,37 +130,28 @@ msgstr "Najczęściej odtwarzane"
msgid "played Songs"
msgstr "Odtwarzane utwory"
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "Teraz odtwarzany"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "Kolejka"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "Usuń utwór"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "Nic nie jest odtwarzane"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "Usuń utwór"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -213,12 +204,12 @@ msgstr "Listy odtwarzania"
msgid "Unknown"
msgstr "Nieznany"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -228,33 +219,39 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "Odtwórz następny"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Remove Favourite"
msgstr "Ulubione"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Add Favourite"
msgstr "Ulubione"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr ""
#~ msgid "Now Playing"
#~ msgstr "Teraz odtwarzany"
#~ msgid "Queue"
#~ msgstr "Kolejka"
#~ msgid "Favourite Songs"
#~ msgstr "Ulubione utwory"
+33 -30
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-01-22 23:00+0000\n"
"Last-Translator: José Nuno Coelho Pires <[email protected]>\n"
"Language-Team: Portuguese <[email protected]>\n"
@@ -128,37 +128,28 @@ msgstr "Mais Tocadas"
msgid "played Songs"
msgstr "Músicas tocadas"
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "Agora a Ouvir"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "Fila"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr "Letras Musicais"
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "Remover a Faixa"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "Nada em reprodução"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr "%1%"
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "Remover a Faixa"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -210,12 +201,12 @@ msgstr "Listas de Reprodução"
msgid "Unknown"
msgstr "Desconhecido"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr "Sem pesquisas anteriores correspondentes"
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, fuzzy, kde-format
#| msgid "Remove from History"
msgid "remove from search history"
@@ -226,27 +217,39 @@ msgstr "Remover do Histórico"
msgid "Collapse Sidebar"
msgstr "Fechar a Barra Lateral"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "Reproduzir o Seguinte"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr "Adicionar à fila"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr "Remover o Favorito"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr "Adicionar aos Favoritos"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr "Remover do Histórico"
#~ msgid "%"
#~ msgstr "%"
#~ msgid "Now Playing"
#~ msgstr "Agora a Ouvir"
#~ msgid "Queue"
#~ msgstr "Fila"
#~ msgid "Lyrics"
#~ msgstr "Letras Musicais"
+40 -41
View File
@@ -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, 2022, 2023.
# 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: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2022-12-20 10:48-0300\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-14 11:03-0300\n"
"Last-Translator: Luiz Fernando Ranghetti <[email protected]>\n"
"Language-Team: Portuguese <[email protected]>\n"
"Language: pt_BR\n"
@@ -123,46 +123,36 @@ msgid "Most played"
msgstr "Mais reproduzidas"
#: contents/ui/LibraryPage.qml:230
#, fuzzy, kde-format
#| msgid "Played Songs"
#, kde-format
msgid "played Songs"
msgstr "Músicas reproduzidas"
msgstr "músicas reproduzidas"
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "Reproduzindo agora"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "Fila"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr "Letras"
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "Remover faixa"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "Nenhuma mídia em reprodução"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr "%1%"
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "Remover faixa"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
msgstr ""
msgstr "Biblioteca"
#: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
@@ -193,7 +183,7 @@ msgstr "Lista de músicas"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr ""
msgstr "Pesquisas anteriores:"
#: contents/ui/SearchPage.qml:28
#, kde-format
@@ -210,45 +200,54 @@ msgstr "Listas de músicas"
msgid "Unknown"
msgstr "Desconhecido"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr ""
msgstr "Nenhuma pesquisa anterior correspondente"
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr ""
msgstr "remover do histórico de pesquisa"
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr ""
msgstr "Recolher barra lateral"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "Reproduzir próxima"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr "Adicionar à fila"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr "Remover das favoritas"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr "Adicionar favorita"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr ""
msgstr "Remover do histórico"
#~ msgid "Now Playing"
#~ msgstr "Reproduzindo agora"
#~ msgid "Queue"
#~ msgstr "Fila"
#~ msgid "Lyrics"
#~ msgstr "Letras"
#~ msgid "Favourite Songs"
#~ msgstr "Músicas favoritas"
+30 -30
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-01-28 13:37+0300\n"
"Last-Translator: Alexander Yavorsky <[email protected]>\n"
"Language-Team: Russian <[email protected]>\n"
@@ -126,37 +126,28 @@ msgstr "Часто воспроизводимые"
msgid "played Songs"
msgstr "Воспроизведённые треки"
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "Текущий трек"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "Очередь воспроизведения"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr "Текст песни"
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "Удалить дорожку"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "Ничего не воспроизводится"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "Удалить дорожку"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -208,12 +199,12 @@ msgstr "Списки воспроизведения"
msgid "Unknown"
msgstr "Неизвестный тип"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr "Не найдено соответствующих предыдущих поисковых запросов"
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -223,31 +214,40 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr "Свернуть боковую панель"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "Воспроизвести следующим"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr "Добавить в очередь воспроизведения"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr "Убрать из избранного"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr "Добавить в избранное"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr "Удалить из журнала"
#~ msgid "Now Playing"
#~ msgstr "Текущий трек"
#~ msgid "Queue"
#~ msgstr "Очередь воспроизведения"
#~ msgid "Lyrics"
#~ msgstr "Текст песни"
#~ msgid "Favourite Songs"
#~ msgstr "Избранные треки"
+26 -31
View File
@@ -4,7 +4,7 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"POT-Creation-Date: 2023-02-08 01:02+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"
@@ -123,38 +123,28 @@ msgstr ""
msgid "played Songs"
msgstr ""
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, fuzzy, kde-format
#| msgid "No media playing"
msgid "Now Playing"
msgstr "Neprehráva sa žiadne médium"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "Neprehráva sa žiadne médium"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr ""
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -207,12 +197,12 @@ msgstr "Zoznamy skladieb"
msgid "Unknown"
msgstr "Neznáme"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -222,32 +212,37 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, fuzzy, kde-format
#| msgid "Play"
msgid "Play Next"
msgstr "Prehrať"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr ""
#, fuzzy
#~| msgid "No media playing"
#~ msgid "Now Playing"
#~ msgstr "Neprehráva sa žiadne médium"
#~ msgid "Add to Playlist"
#~ msgstr "Pridať do zoznamu skladieb"
+35 -32
View File
@@ -6,15 +6,15 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-28 09:50+0100\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-09 08: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 22.12.1\n"
"X-Generator: Lokalize 22.12.2\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
"%100==4 ? 3 : 0);\n"
@@ -125,37 +125,28 @@ msgstr "Največkrat predvajane"
msgid "played Songs"
msgstr "predvajane pesmi"
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "Pravkar predvajano"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "Čakalna vrsta"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr "Besedilo"
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "Odstrani sled"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "Niče se ne predvaja"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr "%1%"
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "Odstrani sled"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -207,12 +198,12 @@ msgstr "Seznami predvajanja"
msgid "Unknown"
msgstr "Neznano"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr "Ni zadetkov iz prejšnjih iskanj"
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr "odstrani iz zgodovine iskanj"
@@ -222,31 +213,43 @@ msgstr "odstrani iz zgodovine iskanj"
msgid "Collapse Sidebar"
msgstr "Strni stransko vrstico"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "Predvajaj naslednjo"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr "Dodaj v v čakalno vrsto"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr "Odstrani priljubljenega"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr "Dodaj priljubljenega"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr "Odstrani iz zgodovine"
#~ msgid "%"
#~ msgstr "%"
#~ msgid "Now Playing"
#~ msgstr "Pravkar predvajano"
#~ msgid "Queue"
#~ msgstr "Čakalna vrsta"
#~ msgid "Lyrics"
#~ msgstr "Besedilo"
#~ msgid "Favourite Songs"
#~ msgstr "Priljubljene pesmi"
+27 -30
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2022-09-24 14:57+0200\n"
"Last-Translator: Stefan Asserhäll <[email protected]>\n"
"Language-Team: Swedish <[email protected]>\n"
@@ -126,37 +126,28 @@ msgstr "Mest spelade"
msgid "played Songs"
msgstr "Spelade låtar"
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "Spelar nu"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "Köa"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "Ta bort spår"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "Inga media spelar"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "Ta bort spår"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -209,12 +200,12 @@ msgstr "Spellistor"
msgid "Unknown"
msgstr "Okänd"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -224,33 +215,39 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "Spela nästa"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Remove Favourite"
msgstr "Favoriter"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Add Favourite"
msgstr "Favoriter"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr ""
#~ msgid "Now Playing"
#~ msgstr "Spelar nu"
#~ msgid "Queue"
#~ msgstr "Köa"
#~ msgid "Favourite Songs"
#~ msgstr "Favoritlåtar"
+35 -32
View File
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-27 18:30+0300\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-08 11:05+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.12.1\n"
"X-Generator: Lokalize 22.12.2\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
@@ -126,37 +126,28 @@ msgstr "En Çok Çalınanlar"
msgid "played Songs"
msgstr "Çalınan Şarkılar"
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "Şimdi Çalınıyor"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "Kuyruk"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr "Şarkı Sözleri"
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "Parçayı Kaldır"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "Ortam çalmıyor"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr "%​%1"
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "Parçayı Kaldır"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -208,12 +199,12 @@ msgstr "Çalma Listeleri"
msgid "Unknown"
msgstr "Bilinmiyor"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr "Eşleşen daha önceden yapılmış arama yok"
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr "arama geçmişinden kaldır"
@@ -223,31 +214,43 @@ msgstr "arama geçmişinden kaldır"
msgid "Collapse Sidebar"
msgstr "Kenar Çubuğunu Daralt"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "Sonrakini Çal"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr "Kuyruğa ekle"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr "Beğenilerden Kaldır"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr "Beğenilere Ekle"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr "Geçmişten Kaldır"
#~ msgid "%"
#~ msgstr "%"
#~ msgid "Now Playing"
#~ msgstr "Şimdi Çalınıyor"
#~ msgid "Queue"
#~ msgstr "Kuyruk"
#~ msgid "Lyrics"
#~ msgstr "Şarkı Sözleri"
#~ msgid "Favourite Songs"
#~ msgstr "Beğenilen Şarkılar"
+35 -32
View File
@@ -6,9 +6,9 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-27 10:54+0200\n"
"Last-Translator: Fracture dept <[email protected]>\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-08 08:23+0200\n"
"Last-Translator: Yuri Chornoivan <[email protected]>\n"
"Language-Team: Ukrainian <[email protected]>\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
@@ -127,37 +127,28 @@ msgstr "Часто слухали"
msgid "played Songs"
msgstr "Відтворені композиції"
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "Зараз відтворюємо"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "Додати до черги"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr "Текст"
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "Вилучити композицію"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "Відтворення не відбувається"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr "%1%"
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "Вилучити композицію"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -209,12 +200,12 @@ msgstr "Списки відтворення"
msgid "Unknown"
msgstr "Невідомий"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr "Немає відповідних попередніх пошуків"
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr "вилучити з журналу пошуку"
@@ -224,31 +215,43 @@ msgstr "вилучити з журналу пошуку"
msgid "Collapse Sidebar"
msgstr "Згорнути бічну панель"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "Відтворити наступну"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr "Додати до черги"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr "Вилучити з улюблених"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr "Додати до улюблених"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr "Вилучити із журналу"
#~ msgid "%"
#~ msgstr "%"
#~ msgid "Now Playing"
#~ msgstr "Зараз відтворюємо"
#~ msgid "Queue"
#~ msgstr "Додати до черги"
#~ msgid "Lyrics"
#~ msgstr "Текст"
#~ msgid "Favourite Songs"
#~ msgstr "Улюблені композиції"
+22 -31
View File
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: kdeorg\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-12 10:32\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-07 11:03\n"
"Last-Translator: \n"
"Language-Team: Chinese Simplified\n"
"Language: zh_CN\n"
@@ -124,37 +124,28 @@ msgstr "最常播放"
msgid "played Songs"
msgstr ""
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "正在播放"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "播放队列"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "移除曲目"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "没有正在播放的媒体"
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr "移除曲目"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -206,12 +197,12 @@ msgstr "播放列表"
msgid "Unknown"
msgstr "未知"
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -221,27 +212,27 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr "播放下一首"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr ""
+21 -30
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2022-05-30 00:47+0000\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -125,37 +125,28 @@ msgstr ""
msgid "played Songs"
msgstr ""
#: contents/ui/main.qml:109
#: contents/ui/main.qml:108
#, kde-format
msgid "AudioTube"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MaximizedPlayerPage.qml:194
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:605
#, kde-format
msgid "%1%"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:810
#: contents/ui/MaximizedPlayerPage.qml:911
#, kde-format
msgid "Remove Track"
msgstr ""
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
@@ -207,12 +198,12 @@ msgstr ""
msgid "Unknown"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:287
#: contents/ui/SearchWithDropdown.qml:286
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#: contents/ui/SearchWithDropdown.qml:321
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -222,27 +213,27 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#, kde-format
msgid "Play Next"
msgstr ""
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Remove Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#, kde-format
msgid "Add Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#, kde-format
msgid "Remove from History"
msgstr ""
+3 -3
View File
@@ -33,7 +33,6 @@ add_executable(audiotube
errorhandler.cpp
playerutils.cpp
abstractytmusicmodel.cpp
autolistmodel.h
multiiterableview.h
library.cpp
resources.qrc
@@ -52,11 +51,12 @@ target_link_libraries(audiotube
KF5::CoreAddons
KF5::Crash
KF5::WindowSystem
Desert::desert
ytm
asyncdatabase
)
target_compile_definitions(audiotube PRIVATE -DQT_NO_KEYWORDS -DQT_NO_URL_CAST_FROM_STRING)
target_compile_definitions(audiotube PRIVATE
-DAUDIOTUBE_VERSION_STRING="${RELEASE_SERVICE_VERSION}"
-DQT_NO_KEYWORDS -DQT_NO_URL_CAST_FROM_STRING)
install(TARGETS audiotube ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
+7
View File
@@ -148,6 +148,13 @@ QFuture<Lyrics> AsyncYTMusic::fetchLyrics(const QString &browseId)
});
}
QFuture<QString> AsyncYTMusic::version()
{
return invokeAndCatchOnThread([this]() {
return QString::fromStdString(m_ytm->get_version());
});
}
YTMusicThread &YTMusicThread::instance()
{
static YTMusicThread thread;
+3
View File
@@ -9,6 +9,7 @@
#include <QFuture>
#include <QFutureWatcher>
#include <iostream>
#include <vector>
#include <ytmusic.h>
@@ -123,6 +124,8 @@ public:
QFuture<Lyrics> fetchLyrics(const QString &browseId);
QFuture<QString> version();
Q_SIGNAL void errorOccurred(const QString &error);
protected:
-91
View File
@@ -1,91 +0,0 @@
// SPDX-FileCopyrightText: 2023 Jonah Brüchert <[email protected]>
//
// SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
#pragma once
#include <QAbstractListModel>
#include <QDebug>
#include <Desert/Reflection>
#include "updateablemodel.h"
template <typename T>
using AutoListModelBase = UpdateableModel<QAbstractListModel, T>;
template <typename T>
concept IsComparable = requires(T v, T o)
{
{ v == o } -> std::same_as<bool>;
{ v < o } -> std::same_as<bool>;
};
template <typename T>
requires desert::IsDesertObject<T> && IsComparable<T>
class AutoListModel : public AutoListModelBase<T>
{
public:
AutoListModel(QObject *parent = nullptr) : AutoListModelBase<T>(parent) {
}
QHash<int, QByteArray> roleNames() const override {
QHash<int, QByteArray> roles;
int i = Qt::UserRole + 1;
T mock_obj;
desert::iterate_struct(mock_obj, [&](auto attribute) {
roles.insert(i, attribute.attributeName().toUtf8());
i++;
});
return roles;
}
int rowCount(const QModelIndex &parent) const override {
return parent.isValid() ? 0 : m_data.size();
}
QVariant data(const QModelIndex &index, int role) const override {
int structIndex = role - Qt::UserRole - 1;
if (structIndex >= pfr::tuple_size_v<T>) {
qDebug() << "Tried to fetch a role that is not defined by this model. Role id:" << role;
return {};
}
return structAttributeAt<0, T>(m_data.at(index.row()), structIndex);
}
void updateData(std::vector<T> &&updatedData) {
// allow comparing items. Could also have used an operator< on Data
auto lessThan = [](const T &lhs, const T &rhs) { return lhs < rhs; };
// check if the item has changed data, but is otherwise the same object. Needs to return the actual changes made.
auto itemHasChanged = [](const T &lhs, const T &rhs) {
typename AutoListModelBase<T>::DataChanges changes;
if (lhs != rhs)
changes.changedColumns.append(0);
changes.changedRoles = QVector<int>{}; // TODO more specific updates
return changes;
};
// call the updateData method to trigger merging in the changes to the model
auto changes = AutoListModelBase<T>::updateData(updatedData.cbegin(), updatedData.cend(), m_data, lessThan, itemHasChanged);
// the method above returns some stats, so lets print them.
qDebug() << "changes in model: inserts:" << changes.inserts << " deletes:" << changes.removals
<< " updates:" << changes.updates;
}
private:
std::vector<T> m_data;
};
template <size_t i, typename T>
requires desert::IsDesertObject<T>
QVariant structAttributeAt(const T &object, size_t index) {
if constexpr (i >= pfr::tuple_size_v<T>) {
Q_UNREACHABLE();
} else if (i == index) {
return QVariant::fromValue(pfr::get<i>(object).value);
} else {
return structAttributeAt<i + 1>(object, index);
}
}
+17
View File
@@ -0,0 +1,17 @@
// SPDX-FileCopyrightText: 2022 Mathis Brüchert <[email protected]>
//
// SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
import org.kde.kirigamiaddons.labs.mobileform 0.1 as MobileForm
import QtQuick 2.15
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.15 as Controls
import org.kde.kirigami 2.20 as Kirigami
import org.kde.ytmusic 1.0
MobileForm.AboutPage {
aboutData: About
showAboutKDE: false
}
+61 -8
View File
@@ -47,6 +47,34 @@ Kirigami.ScrollablePage {
}
}
Kirigami.Icon {
id: favouritesPlaceholder
implicitWidth: Kirigami.Units.gridUnit * 19
implicitHeight: Kirigami.Units.gridUnit * 19
visible: favouriteRepeater.count === 0
opacity: 0.4
isMask: true
source: "qrc:/resources/favourites_placeholder.svg"
color: Kirigami.Theme.hoverColor
Layout.margins: Kirigami.Units.gridUnit * 2
Layout.alignment: Qt.AlignHCenter
Layout.fillWidth: true
}
Controls.Label {
visible: favouriteRepeater.count === 0
color: Kirigami.Theme.disabledTextColor
text: i18n("No Favourites Yet")
font {
bold: true
pointSize: 15
}
anchors.centerIn: favouritesPlaceholder
}
Controls.ScrollView {
leftPadding: 15
rightPadding: 25
@@ -54,12 +82,14 @@ Kirigami.ScrollablePage {
RowLayout {
spacing: 20
Repeater {
id: favouriteRepeater
Layout.fillWidth: true
model: Library.favourites
delegate: ColumnLayout {
id: delegateItem
required property string title
required property string artists
required property var artists
required property string artistsDisplayString
required property string videoId
required property int index
@@ -182,7 +212,7 @@ Kirigami.ScrollablePage {
Layout.maximumWidth: 200
leftPadding: 5
color: Kirigami.Theme.disabledTextColor
text: delegateItem.artists
text: delegateItem.artistsDisplayString
elide: Text.ElideRight
}
}
@@ -191,8 +221,8 @@ Kirigami.ScrollablePage {
icon.name: "view-more-horizontal-symbolic"
onPressed: menu.openForSong(delegateItem.videoId,
delegateItem.title,
delegateItem.artists, // TODO
delegateItem.artists)
delegateItem.artists,
delegateItem.artistsDisplayString)
}
}
@@ -231,6 +261,27 @@ Kirigami.ScrollablePage {
})}
}
}
Kirigami.Icon {
visible: mostPlayedRepeater.count == 0
Layout.margins: 20
isMask: true
opacity:0.4
color: Kirigami.Theme.hoverColor
id:playedPlaceholder
Layout.alignment: Qt.AlignHCenter
Layout.fillWidth: true
implicitWidth: 190
implicitHeight: 190
source: "qrc:/resources/played_placeholder.svg"
}
Controls.Label {
visible: mostPlayedRepeater.count == 0
color: Kirigami.Theme.disabledTextColor
anchors.centerIn:playedPlaceholder
font.bold: true
font.pointSize: 15
text: i18n("No Songs Played Yet")
}
Controls.ScrollView {
leftPadding: 15
rightPadding: 25
@@ -238,12 +289,14 @@ Kirigami.ScrollablePage {
RowLayout {
spacing: 20
Repeater {
id: mostPlayedRepeater
Layout.fillWidth: true
model: Library.mostPlayed
delegate: ColumnLayout {
id: mpdelegateItem
required property string title
required property string artists
required property var artists
required property string artistsDisplayString
required property string videoId
Layout.fillWidth: false
@@ -363,7 +416,7 @@ Kirigami.ScrollablePage {
Layout.maximumWidth: 200
leftPadding: 5
color: Kirigami.Theme.disabledTextColor
text: mpdelegateItem.artists
text: mpdelegateItem.artistsDisplayString
elide: Text.ElideRight
}
}
@@ -372,8 +425,8 @@ Kirigami.ScrollablePage {
icon.name: "view-more-horizontal-symbolic"
onPressed: menu.openForSong(mpdelegateItem.videoId,
mpdelegateItem.title,
mpdelegateItem.artists, // TODO
mpdelegateItem.artists)
mpdelegateItem.artists,
mpdelegateItem.artistsDisplayString)
}
}
File diff suppressed because it is too large. Load diff
+146 -69
View File
@@ -22,14 +22,12 @@ Item {
required property var info // VideoInfoExtractor object
required property var audio // Audio object
readonly property bool isWidescreen: width >= Kirigami.Units.gridUnit * 40
readonly property bool isWidescreen: width >= Kirigami.Units.gridUnit * 50
signal requestOpen()
Rectangle {
id: miniProgressBar
z: 1
visible: !root.isWidescreen
anchors.top: parent.top
anchors.left: parent.left
height: root.progressBarHeight
@@ -38,14 +36,14 @@ Item {
}
RowLayout {
width: !isWidescreen ? root.width - controlButtonBox.width: root.width
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 {
@@ -78,10 +76,12 @@ Item {
Kirigami.Theme.colorSet: Kirigami.Theme.Complementary
Kirigami.Theme.inherit: false
}
}
// track information
ColumnLayout {
Layout.fillWidth: true
Layout.fillHeight: true
@@ -92,6 +92,7 @@ Item {
wrapMode: Text.Wrap
Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
Layout.fillWidth: true
Layout.maximumWidth: Kirigami.Units.gridUnit * 15
horizontalAlignment: Text.AlignLeft
elide: Text.ElideRight
maximumLineCount: 1
@@ -112,14 +113,16 @@ Item {
horizontalAlignment: Text.AlignLeft
elide: Text.ElideRight
maximumLineCount: 1
Layout.maximumWidth: Kirigami.Units.gridUnit * 15
// 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"
}
}
Item{Layout.fillWidth: true}
}
MouseArea {
id: trackClick
anchors.fill: parent
@@ -127,85 +130,159 @@ Item {
onClicked: root.requestOpen()
}
}
}
RowLayout {
id: controlButtonBox
anchors.centerIn: isWidescreen ? parent : null
anchors.right: !isWidescreen ? parent.right : null
anchors.top: parent.top
anchors.bottom: parent.bottom
spacing: 2
Label {
color: "white"
visible: info.title && root.isWidescreen
text: PlayerUtils.formatTimestamp(audio.position)
Layout.rightMargin: 20
}
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
Button {
id: skipBackwardButton
implicitHeight: 40
implicitWidth: 40
Layout.fillHeight: !isWidescreen
Kirigami.Theme.colorSet: Kirigami.Theme.Complementary
Kirigami.Theme.inherit: false
enabled: UserPlaylistModel.canSkipBack
onClicked: UserPlaylistModel.previous()
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));
contentItem: Item {
Kirigami.Icon {
anchors.centerIn: parent
source:"media-skip-backward"
color: "white"
width: Kirigami.Units.gridUnit
height: Kirigami.Units.gridUnit
}
}
background: Kirigami.ShadowedRectangle {
corners.topLeftRadius: isWidescreen ? 7 : 0
corners.bottomLeftRadius: isWidescreen ? 7 : 0
Behavior on value {
NumberAnimation {
duration: 1000
color: if (isWidescreen) {
if (parent.down) {
Kirigami.ColorUtils.linearInterpolation(Kirigami.Theme.hoverColor, "transparent", 0.3)
} else if(parent.hovered) {
Kirigami.ColorUtils.linearInterpolation(Kirigami.Theme.hoverColor, "transparent", 0.7)
} else {
Qt.rgba(1, 1, 1, 0.2)
}
} else {
if (parent.down) {
Kirigami.ColorUtils.linearInterpolation(Kirigami.Theme.hoverColor, "transparent", 0.3)
} else if (parent.hovered){
Kirigami.ColorUtils.linearInterpolation(Kirigami.Theme.hoverColor, "transparent", 0.7)
} else {
"transparent"
}
}
}
Label {
Layout.alignment: Qt.AlignVCenter
color: "white"
visible: info.title
text: PlayerUtils.formatTimestamp(audio.duration)
}
}
ToolButton {
Button {
id: playPauseButton
Layout.preferredHeight: Kirigami.Units.gridUnit * 3
Layout.maximumWidth: height
Layout.preferredWidth: height
implicitHeight: 40
implicitWidth: 60
Layout.fillHeight: !isWidescreen
enabled: info.audioUrl != ""
onClicked: audio.playbackState === Audio.PlayingState ? audio.pause() : audio.play()
contentItem: Item {
Kirigami.Icon {
anchors.centerIn:parent
source: audio.playbackState === Audio.PlayingState ? "media-playback-pause" : "media-playback-start"
color: "white"
width: Kirigami.Units.gridUnit
height: Kirigami.Units.gridUnit
}
}
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"
background: Kirigami.ShadowedRectangle {
color: if (isWidescreen) {
if (parent.down) {
Kirigami.ColorUtils.linearInterpolation(Kirigami.Theme.hoverColor, "transparent", 0.3)
} else if (parent.hovered) {
Kirigami.ColorUtils.linearInterpolation(Kirigami.Theme.hoverColor, "transparent", 0.7)
} else {
Qt.rgba(1, 1, 1, 0.2)
}
} else {
if (parent.down) {
Kirigami.ColorUtils.linearInterpolation(Kirigami.Theme.hoverColor, "transparent", 0.3)
} else if (parent.hovered) {
Kirigami.ColorUtils.linearInterpolation(Kirigami.Theme.hoverColor, "transparent", 0.7)
} else {
"transparent"
}
}
}
}
Button {
id: skipForwardButton
implicitHeight: 40
implicitWidth: 40
Layout.fillHeight: !isWidescreen
Layout.rightMargin: isWidescreen ? 0 : 10
Layout.alignment: !Qt.AlignVCenter
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
contentItem: Item {
Kirigami.Icon {
anchors.centerIn: parent
source:"media-skip-forward"
color: "white"
width: Kirigami.Units.gridUnit
height: Kirigami.Units.gridUnit
}
}
background: Kirigami.ShadowedRectangle {
corners.topRightRadius: isWidescreen ? 7 : 0
corners.bottomRightRadius: isWidescreen ? 7 : 0
color: if (isWidescreen) {
if (parent.down) {
Kirigami.ColorUtils.linearInterpolation(Kirigami.Theme.hoverColor, "transparent", 0.3)
} else if (parent.hovered) {
Kirigami.ColorUtils.linearInterpolation(Kirigami.Theme.hoverColor, "transparent", 0.7)
} else {
Qt.rgba(1, 1, 1, 0.2)
}
} else {
if (parent.down) {
Kirigami.ColorUtils.linearInterpolation(Kirigami.Theme.hoverColor, "transparent", 0.3)
} else if(parent.hovered) {
Kirigami.ColorUtils.linearInterpolation(Kirigami.Theme.hoverColor, "transparent", 0.7)
} else {
"transparent"
}
}
}
}
Label {
color: "white"
visible: info.title && root.isWidescreen
text: PlayerUtils.formatTimestamp(audio.duration)
Layout.leftMargin: 20
}
}
}
+2 -1
View File
@@ -36,7 +36,8 @@ Kirigami.ScrollablePage {
required property string title
required property string videoId
required property string artists
required property var artists
required property string artistsDisplayString
required property int index
onClicked: {
+3 -3
View File
@@ -20,7 +20,7 @@ Flickable {
property int footerSpacing:0
property bool maximized: false
readonly property int progressBarHeight: Kirigami.Units.gridUnit / 6
readonly property int progressBarHeight: Kirigami.Units.gridUnit / 4
readonly property int minimizedPlayerContentHeight: Math.round(Kirigami.Units.gridUnit * 3.5)
readonly property int minimizedPlayerHeight: minimizedPlayerContentHeight + progressBarHeight
@@ -158,8 +158,8 @@ Flickable {
layer.effect: HueSaturation {
cached: true
lightness: -0.5
saturation: 1.9
lightness: -0.7
saturation: 3
layer.enabled: true
layer.effect: FastBlur {
+7 -11
View File
@@ -49,7 +49,7 @@ Item {
pageStack.push("qrc:/SearchPage.qml", {
"searchQuery": text,
objectName: "searchPage"
})
})
} else {
wideScreen
? pageStack.push("qrc:/LibraryPage.qml")
@@ -176,7 +176,7 @@ Item {
? (Math.min(content.implicitHeight, Kirigami.Units.gridUnit * 20))+2*(popup.shadowSize+popup.expansion)
: (Kirigami.Units.gridUnit * 20)+2*(popup.shadowSize+popup.expansion)
duration: 100
to: searchField.heigth
to: searchField.height
}
NumberAnimation on width{
id: playCloseWidth
@@ -203,9 +203,6 @@ Item {
to: -0
}
contentItem: ColumnLayout{
id: content
width: parent.width
@@ -224,6 +221,8 @@ Item {
Controls.ScrollView {
id: mainScrollView
clip: true
Layout.fillHeight: true
Layout.fillWidth: true
@@ -299,8 +298,6 @@ Item {
filterRegularExpression: searchField.filterExpression
}
delegate: Kirigami.AbstractListItem {
required property string query
id: completionDelegate
highlighted: focus
Kirigami.Theme.colorSet: Kirigami.Theme.Window
@@ -316,7 +313,7 @@ Item {
color: Kirigami.Theme.disabledTextColor
}
Controls.Label{
text: query
text: model.display
Layout.fillWidth: true
}
Controls.ToolButton {
@@ -324,13 +321,13 @@ Item {
text: i18n("remove from search history")
display: Controls.AbstractButton.IconOnly
onClicked: {
Library.removeSearch(query)
Library.removeSearch(model.display)
}
}
}
onClicked: {
searchField.text = query
searchField.text = model.display
searchField.accepted()
}
}
@@ -339,5 +336,4 @@ Item {
}
}
}
}
+14 -12
View File
@@ -150,26 +150,28 @@ Rectangle {
"title": i18n("Played Songs"),
"objectName": "history"
})}
}
// Kirigami.NavigationTabButton {
// Layout.fillWidth: true
// width: column.width - column.Layout.leftMargin - column.Layout.rightMargin
// implicitHeight: 50
// display: Controls.AbstractButton.TextBesideIcon
// text: i18n("Charts")
// icon.name: "office-chart-line-forecast"
// }
}
}
Kirigami.Separator {
Layout.fillWidth: true
Layout.rightMargin: Kirigami.Units.smallSpacing
Layout.leftMargin: Kirigami.Units.smallSpacing
}
Kirigami.NavigationTabButton {
id: aboutButton
Layout.fillWidth: true
width: column.width - column.Layout.leftMargin - column.Layout.rightMargin
implicitHeight: 50
display: Controls.AbstractButton.TextBesideIcon
text: collapsed? "" : i18n("About")
checkable: false
icon.name: "help-about-symbolic"
onClicked: {
pageStack.pushDialogLayer("qrc:/AboutAudiotube.qml")
}
}
Kirigami.NavigationTabButton {
id: collapseButton
+10 -7
View File
@@ -58,13 +58,16 @@ Item {
videoId: drawer.videoId
}
// Kirigami.Icon {
// Layout.margins: Kirigami.Units.smallSpacing
// source: "arrow-down"
// implicitWidth: Kirigami.Units.gridUnit
// implicitHeight: Kirigami.Units.gridUnit
// Layout.alignment: Qt.AlignHCenter
// }
Rectangle {
Layout.margins: 5
radius:50
Layout.alignment: Qt.AlignHCenter
color: Kirigami.Theme.textColor
opacity: 0.7
width: 40
height: 4
}
RowLayout {
spacing: 10
Kirigami.ShadowedRectangle {
+16 -17
View File
@@ -62,24 +62,23 @@ Kirigami.ApplicationWindow {
}
contentItem: RowLayout {
spacing: 0
Row {
Layout.alignment: Qt.AlignLeft
Controls.ToolButton {
id: back
enabled: applicationWindow().pageStack.layers.depth > 1 || (applicationWindow().pageStack.depth > 1 && (applicationWindow().pageStack.currentIndex > 0 || applicationWindow().pageStack.contentItem.contentX > 0)) // Copied from https://invent.kde.org/frameworks/kirigami/-/blob/master/src/controls/templates/private/BackButton.qml#L16
icon.name: "draw-arrow-back"
onClicked: pageStack.goBack()
visible: wideScreen
}
Controls.ToolButton {
icon.name: "draw-arrow-forward"
enabled: applicationWindow().pageStack.currentIndex < applicationWindow().pageStack.depth-1
onClicked: pageStack.goForward()
anchors.left: back.right
visible: wideScreen
Controls.ToolButton {
id: back
enabled: applicationWindow().pageStack.layers.depth > 1 || (applicationWindow().pageStack.depth > 1 && (applicationWindow().pageStack.currentIndex > 0 || applicationWindow().pageStack.contentItem.contentX > 0)) // Copied from https://invent.kde.org/frameworks/kirigami/-/blob/master/src/controls/templates/private/BackButton.qml#L16
icon.name: "draw-arrow-back"
onClicked: pageStack.goBack()
visible: wideScreen
}
Controls.ToolButton {
icon.name: "draw-arrow-forward"
enabled: applicationWindow().pageStack.currentIndex < applicationWindow().pageStack.depth-1
onClicked: pageStack.goForward()
visible: wideScreen
}
}
// spacer
+109 -36
View File
@@ -40,7 +40,8 @@ Library &Library::instance()
FavouritesModel *Library::favourites()
{
return new FavouritesModel(this);
auto future = m_database->getResults<Song>("select * from favourites natural join songs order by favourites.rowid desc");
return new FavouritesModel(std::move(future), this);
}
void Library::addFavourite(const QString &videoId, const QString &title, const QString &artist, const QString &album)
@@ -65,7 +66,7 @@ FavouriteWatcher *Library::favouriteWatcher(const QString &videoId)
SearchHistoryModel *Library::searches()
{
return new SearchHistoryModel(this);
return new SearchHistoryModel(m_database->getResults<SingleValue<QString>>("select distinct (search_query) from searches order by search_id desc"), this);
}
void Library::addSearch(const QString &text)
@@ -80,7 +81,8 @@ void Library::removeSearch(const QString &text)
PlaybackHistoryModel *Library::playbackHistory()
{
return new PlaybackHistoryModel(this, PlaybackHistoryModel::History);
auto future = m_database->getResults<PlayedSong>("select * from played_songs natural join songs");
return new PlaybackHistoryModel(std::move(future), this);
}
void Library::addPlaybackHistoryItem(const QString &videoId, const QString &title, const QString &artist, const QString &album)
@@ -108,7 +110,8 @@ WasPlayedWatcher *Library::wasPlayedWatcher(const QString& videoId)
PlaybackHistoryModel *Library::mostPlayed()
{
return new PlaybackHistoryModel(this, PlaybackHistoryModel::MostPlayed);
auto future = m_database->getResults<PlayedSong>("select * from played_songs natural join songs order by plays desc limit 10");
return new PlaybackHistoryModel(std::move(future), this);
}
QNetworkAccessManager &Library::nam()
@@ -168,35 +171,93 @@ void ThumbnailSource::setVideoId(const QString &id) {
});
}
PlaybackHistoryModel::PlaybackHistoryModel(Library *library, Type type)
: AutoListModel<PlayedSong>(library)
PlaybackHistoryModel::PlaybackHistoryModel(QFuture<std::vector<PlayedSong> > &&songs, QObject *parent)
: QAbstractListModel(parent)
{
auto update = [=, this]() {
auto future = [=, this]() {
if (type == MostPlayed) {
return library->database().getResults<PlayedSong>("select * from played_songs natural join songs order by plays desc limit 10");
} else {
return library->database().getResults<PlayedSong>("select * from played_songs natural join songs");
}
}();
connectFuture(future, this, &PlaybackHistoryModel::updateData);
};
update();
connect(library, &Library::playbackHistoryChanged, this, update);
connectFuture(songs, this, [this](const auto songs) {
beginResetModel();
m_playedSongs = songs;
endResetModel();
});
}
FavouritesModel::FavouritesModel(Library *library)
: AutoListModel<Song>(library)
{
auto update = [=, this]() {
auto future = library->database().getResults<Song>("select * from favourites natural join songs order by favourites.rowid desc");
connectFuture(future, this, &FavouritesModel::updateData);
QHash<int, QByteArray> PlaybackHistoryModel::roleNames() const {
return {
{Roles::VideoId, "videoId"},
{Roles::Title, "title"},
{Roles::Artists, "artists"},
{Roles::ArtistsDisplayString, "artistsDisplayString"},
{Roles::Plays, "plays"}
};
}
update();
connect(library, &Library::favouritesChanged, this, update);
int PlaybackHistoryModel::rowCount(const QModelIndex &parent) const {
return parent.isValid() ? 0 : m_playedSongs.size();
}
QVariant PlaybackHistoryModel::data(const QModelIndex &index, int role) const {
switch (role) {
case Roles::VideoId:
return m_playedSongs.at(index.row()).videoId;
case Roles::Title:
return m_playedSongs.at(index.row()).title;
case Roles::Artists:
return QVariant::fromValue(std::vector<meta::Artist> {
{
m_playedSongs.at(index.row()).artist.toStdString(),
{}
}
});
case Roles::ArtistsDisplayString:
return m_playedSongs.at(index.row()).artist;
case Roles::Plays:
return m_playedSongs.at(index.row()).plays;
}
Q_UNREACHABLE();
}
FavouritesModel::FavouritesModel(QFuture<std::vector<Song>> &&songs, QObject *parent)
: QAbstractListModel(parent)
{
connectFuture(songs, this, [this](const auto songs) {
beginResetModel();
m_favouriteSongs = songs;
endResetModel();
});
}
QHash<int, QByteArray> FavouritesModel::roleNames() const {
return {
{Roles::VideoId, "videoId"},
{Roles::Title, "title"},
{Roles::Artists, "artists"},
{Roles::ArtistsDisplayString, "artistsDisplayString"}
};
}
int FavouritesModel::rowCount(const QModelIndex &parent) const {
return parent.isValid() ? 0 : m_favouriteSongs.size();
}
QVariant FavouritesModel::data(const QModelIndex &index, int role) const {
switch (role) {
case Roles::VideoId:
return m_favouriteSongs.at(index.row()).videoId;
case Roles::Title:
return m_favouriteSongs.at(index.row()).title;
case Roles::ArtistsDisplayString:
return m_favouriteSongs.at(index.row()).artist;
case Roles::Artists:
return QVariant::fromValue(std::vector<meta::Artist> {
{
m_favouriteSongs.at(index.row()).artist.toStdString(),
{}
}
});
}
Q_UNREACHABLE();
}
FavouriteWatcher::FavouriteWatcher(Library *library, const QString &videoId)
@@ -218,15 +279,27 @@ bool FavouriteWatcher::isFavourite() const {
return m_isFavourite;
}
SearchHistoryModel::SearchHistoryModel(Library *library)
: AutoListModel<SearchQuery>(library)
SearchHistoryModel::SearchHistoryModel(QFuture<std::vector<SingleValue<QString>>> &&historyFuture, QObject *parent)
: QAbstractListModel(parent)
{
auto update = [=, this]() {
auto future = library->database().getResults<SearchQuery>("select distinct (search_query) from searches order by search_id desc");
connectFuture(future, this, &SearchHistoryModel::updateData);
};
update();
connect(library, &Library::searchesChanged, update);
connectFuture(historyFuture, this, [this](const auto history) {
beginResetModel();
m_history = history;
endResetModel();
});
}
int SearchHistoryModel::rowCount(const QModelIndex &parent) const {
return parent.isValid() ? 0 : m_history.size();
}
QVariant SearchHistoryModel::data(const QModelIndex &index, int role) const {
switch (role) {
case Qt::DisplayRole:
return m_history[index.row()].value;
}
Q_UNREACHABLE();
}
WasPlayedWatcher::WasPlayedWatcher(Library* library, const QString& videoId)
+54 -59
View File
@@ -15,22 +15,10 @@
#include "asyncytmusic.h"
#include "asyncdatabase.h"
#include "autolistmodel.h"
using namespace desert;
class FavouriteWatcher;
class WasPlayedWatcher;
inline std::vector<meta::Artist> metaArtist(const QString &artist) {
return { meta::Artist { artist.toStdString(), {} } };
}
struct Song {
DESERT_OBJECT
int operator<=>(const Song &other) const = default;
using ColumnTypes = std::tuple<QString, QString, QString, QString>;
static Song fromSql(ColumnTypes tuple) {
@@ -38,26 +26,34 @@ struct Song {
return Song {videoId, title, artist, album};
}
Attribute<u"videoId", QString> videoId;
Attribute<u"title", QString> title;
Attribute<u"artists", QString> artists;
Attribute<u"album", QString> album;
QString videoId;
QString title;
QString artist;
QString album;
};
class Library;
class FavouritesModel : public AutoListModel<Song> {
class FavouritesModel : public QAbstractListModel {
Q_OBJECT
enum Roles {
VideoId = Qt::UserRole + 1,
Title,
Artists,
ArtistsDisplayString
};
public:
FavouritesModel(Library *library);
FavouritesModel(QFuture<std::vector<Song>> &&songs, QObject *parent = nullptr);
QHash<int, QByteArray> roleNames() const override;
int rowCount(const QModelIndex &parent) const override;
QVariant data(const QModelIndex &index, int role) const override;
private:
std::vector<Song> m_favouriteSongs;
};
struct PlayedSong {
DESERT_OBJECT
int operator<=>(const PlayedSong &other) const = default;
using ColumnTypes = std::tuple<QString, int, QString, QString, QString>;
static PlayedSong fromSql(ColumnTypes tuple) {
@@ -65,56 +61,55 @@ struct PlayedSong {
return PlayedSong {videoId, title, artist, album, plays};
}
Attribute<u"videoId", QString> videoId;
Attribute<u"title", QString> title;
Attribute<u"artists", QString> artists;
Attribute<u"album", QString> album;
Attribute<u"album", int> plays;
QString videoId;
QString title;
QString artist;
QString album;
int plays;
};
class PlaybackHistoryModel : public AutoListModel<PlayedSong> {
class PlaybackHistoryModel : public QAbstractListModel {
Q_OBJECT
public:
enum Type {
MostPlayed,
History
enum Roles {
VideoId = Qt::UserRole + 1,
Title,
Artists,
ArtistsDisplayString,
Plays
};
PlaybackHistoryModel(Library *library, Type type);
};
Q_ENUM(Roles);
class SearchQuery {
DESERT_OBJECT
PlaybackHistoryModel(QFuture<std::vector<PlayedSong>> &&songs, QObject *parent = nullptr);
using ColumnTypes = std::tuple<QString>;
static SearchQuery fromSql(ColumnTypes tuple) {
auto [query] = tuple;
return { query };
}
int operator<=>(const SearchQuery &other) const = default;
Attribute<u"query", QString> query;
};
class SearchHistoryModel : public AutoListModel<SearchQuery> {
Q_OBJECT
public:
SearchHistoryModel(Library *library);
QHash<int, QByteArray> roleNames() const override;
int rowCount(const QModelIndex &parent) const override;
QVariant data(const QModelIndex &index, int role) const override;
private:
std::vector<SearchQuery> m_history;
std::vector<PlayedSong> m_playedSongs;
};
class SearchHistoryModel : public QAbstractListModel {
Q_OBJECT
public:
SearchHistoryModel(QFuture<std::vector<SingleValue<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;
};
class Library : public QObject
{
Q_OBJECT
Q_PROPERTY(QAbstractListModel *favourites READ favourites CONSTANT)
Q_PROPERTY(QAbstractListModel *searches READ searches CONSTANT)
Q_PROPERTY(QAbstractListModel *playbackHistory READ playbackHistory CONSTANT)
Q_PROPERTY(QAbstractListModel *mostPlayed READ mostPlayed CONSTANT)
Q_PROPERTY(QAbstractListModel *favourites READ favourites NOTIFY favouritesChanged)
Q_PROPERTY(QAbstractListModel *searches READ searches NOTIFY searchesChanged)
Q_PROPERTY(QAbstractListModel *playbackHistory READ playbackHistory NOTIFY playbackHistoryChanged)
Q_PROPERTY(QAbstractListModel *mostPlayed READ mostPlayed NOTIFY playbackHistoryChanged)
public:
explicit Library(QObject *parent = nullptr);
+22 -1
View File
@@ -38,7 +38,25 @@ Q_DECL_EXPORT int main(int argc, char *argv[])
KLocalizedString::setApplicationDomain("audiotube");
KAboutData::setApplicationData(KAboutData(QStringLiteral("audiotube"), QStringLiteral("AudioTube")));
KAboutData about(QStringLiteral("audiotube"),
i18n("AudioTube"),
QStringLiteral(AUDIOTUBE_VERSION_STRING),
i18n("YouTube Music Player"),
KAboutLicense::GPL_V3,
i18n("© 2021-2023 Jonah Brüchert, 2021-2023 KDE Community"));
about.addAuthor(i18n("Jonah Brüchert"), i18n("Maintainer"), QStringLiteral("[email protected]"));
about.addAuthor(i18n("Mathis Brüchert"), i18n("Designer"), QStringLiteral("[email protected]"));
about.setTranslator(i18nc("NAME OF TRANSLATORS", "Your names"), i18nc("EMAIL OF TRANSLATORS", "Your emails"));
about.setOrganizationDomain("kde.org");
about.setBugAddress("https://bugs.kde.org/describecomponents.cgi?product=audiotube");
auto future = YTMusicThread::instance()->version();
connectFuture(future, &app, [&about](const auto &version) {
about.addComponent(QStringLiteral("ytmusicapi"), i18n("Unofficial API for YouTube Music"), version);
KAboutData::setApplicationData(about);
});
QGuiApplication::setWindowIcon(QIcon::fromTheme(QStringLiteral("org.kde.audiotube")));
KCrash::initialize();
QQmlApplicationEngine engine;
@@ -51,6 +69,9 @@ Q_DECL_EXPORT int main(int argc, char *argv[])
qmlRegisterUncreatableType<PlaybackHistoryModel>(URI, 1, 0, "PlaybackHistoryModel","");
qmlRegisterType<QSortFilterProxyModel>(URI, 1, 0, "SortFilterModel");
qmlRegisterType<Blur>(URI, 1, 0, "Blur");
qmlRegisterSingletonType(URI, 1, 0, "About", [](QQmlEngine *engine, QJSEngine *) -> QJSValue {
return engine->toScriptValue(KAboutData::applicationData());
});
qmlRegisterSingletonType<UserPlaylistModel>(URI, 1, 0, "UserPlaylistModel", [](QQmlEngine *, QJSEngine *) {
return new UserPlaylistModel();
+3 -3
View File
@@ -10,20 +10,20 @@
#include <QtGlobal>
template <typename Tuple, typename Func, std::size_t i>
inline constexpr void iterate_tuple_impl(Tuple &tup, Func fun)
inline constexpr void iterate_impl(Tuple &tup, Func fun)
{
if constexpr(i >= std::tuple_size_v<std::decay_t<decltype(tup)>>) {
return;
} else {
fun(std::get<i>(tup));
return iterate_tuple_impl<Tuple, Func, i + 1>(tup, fun);
return iterate_impl<Tuple, Func, i + 1>(tup, fun);
}
}
template <typename Tuple, typename Func>
inline constexpr void iterate_tuple(Tuple &tup, Func fun)
{
iterate_tuple_impl<Tuple, Func, 0>(tup, fun);
iterate_impl<Tuple, Func, 0>(tup, fun);
}
/// MultiIterableView is a view over multiple contigous memory arrays, like std::vector or std::array.
+1
View File
@@ -11,6 +11,7 @@
class PlayerUtils : public QObject
{
Q_OBJECT
public:
explicit PlayerUtils(QObject *parent = nullptr);
+3
View File
@@ -26,5 +26,8 @@ SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted
<file alias="NavigationBar.qml">contents/ui/NavigationBar.qml</file>
<file alias="SearchHistoryPage.qml">contents/ui/SearchHistoryPage.qml</file>
<file alias="SearchWithDropdown.qml">contents/ui/SearchWithDropdown.qml</file>
<file>resources/favourites_placeholder.svg</file>
<file>resources/played_placeholder.svg</file>
<file alias="AboutAudiotube.qml">contents/ui/AboutAudiotube.qml</file>
</qresource>
</RCC>
+93
View File
@@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--
SPDX-FileCopyrightText: 2023 Mathis Brüchert <[email protected]>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
-->
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="410mm"
height="200mm"
viewBox="0 0 410 199.99998"
version="1.1"
id="svg5"
xml:space="preserve"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="favourites_placeholder.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#999999"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.64658308"
inkscape:cx="852.9453"
inkscape:cy="645.70202"
inkscape:window-width="1707"
inkscape:window-height="990"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1"><inkscape:grid
type="xygrid"
id="grid1378"
originx="-36.839489"
originy="49.025167" /></sodipodi:namedview><defs
id="defs2" /><g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-36.839491,49.025176)"><g
id="g3754"
transform="translate(1.0239803,48.048198)"><path
id="path2136"
style="opacity:0.33;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.86189;stroke-dasharray:none;stroke-opacity:0.882353"
d="m 440.67683,-32.99624 c -12.80337,1.985129 -26.29162,9.680256 -39.10109,11.658868 l -1.33455,11.4329407 -5.14902,44.1397733 c -1.82871,-1.736935 -4.17283,-2.833887 -6.67796,-3.126198 -6.39434,-0.746382 -12.18423,3.830112 -12.93037,10.224494 -0.0906,0.775869 -0.10208,1.545901 -0.0416,2.296047 l -1.26165,1.759668 c 1.98087,2.357577 2.98079,3.562436 4.86071,5.753708 0.007,0.0069 0.0142,0.01424 0.0213,0.02136 1.76301,1.667675 4.05668,2.802348 6.65171,3.105172 6.39434,0.746383 12.18421,-3.835358 12.93037,-10.22975 l 6.37844,-54.684776 33.64731,-5.196316 -5.00192,42.857776 c -1.8287,-1.736995 -4.16757,-2.833886 -6.67272,-3.126197 -6.39433,-0.746383 -12.18418,3.835419 -12.93036,10.22975 -0.0956,0.821011 -0.10393,1.630593 -0.0316,2.42214 l -2.30656,0.257437 4.76548,5.884602 c 0.0172,0.02136 0.0355,0.04169 0.0529,0.06304 l 0.23121,0.288955 0.005,-0.0053 c 1.84309,2.159621 4.47063,3.659097 7.51339,4.01414 6.39435,0.746384 12.17896,-3.830121 12.92511,-10.224492 l 6.23137,-53.402774 1.3398,-11.432941 z"
sodipodi:nodetypes="cccccsccccccccccscccscccsccc" /><path
id="path2134"
style="opacity:0.33;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.49536;stroke-dasharray:none;stroke-opacity:0.882353"
d="m 218.05645,-38.280046 a 20.012256,20.012265 17.519729 0 0 -25.10697,13.059977 c -3.40195,10.753794 -2.04184,28.2651872 22.1953,54.681772 l 0.004,-0.0029 0.003,0.005 c 35.01078,-7.713326 46.17698,-21.2704644 49.56589,-32.0283659 l -0.007,-0.00212 -10e-4,-3.858e-4 a 20.012256,20.012256 0 0 0 -13.05955,-25.1082743 20.012256,20.012256 0 0 0 -19.95876,4.738745 20.012256,20.012265 17.519729 0 0 -13.63368,-15.34313 z" /><path
id="path2132"
style="opacity:0.33;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2.53185;stroke-dasharray:none;stroke-opacity:0.882353"
d="m 47.065658,-47.571342 6.262552,10.574758 10.981614,51.374016 C 61.210315,12.9092 57.718215,12.485874 54.357672,13.170999 45.779848,14.919656 40.24373,23.290951 41.992449,31.868766 43.741106,40.44659 52.112412,45.982697 60.690225,44.233979 69.268051,42.485321 74.804158,34.114026 73.055439,25.536212 L 61.28653,-29.699689 C 80.958225,-21.28437 83.410948,2.2050731 82.443029,5.8174106 l 3.749617,2.4150647 C 98.341428,-22.694892 68.952283,-23.159305 53.105037,-48.318315 Z"
sodipodi:nodetypes="cccssscccccc" /><path
id="path234"
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2.53185;stroke-dasharray:none;stroke-opacity:0.882353"
d="m 47.083379,-47.229598 1.414458,6.93869 10.981613,51.374017 C 56.379942,9.6148752 52.887844,9.191549 49.527299,9.8766741 40.949475,11.625331 35.413357,19.996628 37.162076,28.574441 38.910733,37.152266 47.282039,42.688372 55.859853,40.939654 64.437677,39.190997 69.973785,30.819701 68.225065,22.241888 L 56.456157,-32.994014 C 71.640443,-20.266549 82.613067,-16.645 82.443029,5.8174106 94.591811,-25.109957 69.143154,-23.336999 53.295908,-48.496009 Z"
sodipodi:nodetypes="cccsssccccc" /><path
id="path1206"
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.86189;stroke-dasharray:none;stroke-opacity:0.882353"
d="m 440.67491,-32.994014 -4.78137,0.737131 -4.5e-4,0.0038 -38.43113,5.936232 -1.3359,11.436417 -5.14833,44.138482 c -1.82871,-1.736934 -4.1708,-2.833246 -6.67596,-3.125556 -6.39434,-0.746384 -12.18473,3.831504 -12.93086,10.225907 -0.74639,6.394351 3.8354,12.185169 10.22974,12.931338 6.39435,0.746384 12.1809,-3.831952 12.92706,-10.226364 l 6.38021,-54.684527 33.64971,-5.199365 -5.00263,42.860104 c -1.82871,-1.736996 -4.17036,-2.83713 -6.67551,-3.12944 -6.39435,-0.746384 -12.18131,3.835856 -12.92748,10.230207 -0.74638,6.394341 3.83194,12.18089 10.22635,12.927028 6.39437,0.746383 12.1809,-3.831951 12.92704,-10.226343 l 6.23365,-53.398483 z" /><path
id="path1761"
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.49536;stroke-dasharray:none;stroke-opacity:0.882353"
d="m 216.50808,-45.145682 a 20.012256,20.012265 17.519729 0 0 -25.10696,13.059976 c -3.40194,10.753794 -2.04184,28.2651868 22.19531,54.681772 l 0.004,-0.0029 0.003,0.005 C 248.6142,14.88484 259.7804,1.3277008 263.16933,-9.4302005 l -0.007,-0.00208 -10e-4,-3.863e-4 a 20.012256,20.012256 0 0 0 -13.05955,-25.1082752 20.012256,20.012256 0 0 0 -19.95876,4.738746 20.012256,20.012265 17.519729 0 0 -13.63368,-15.343131 z" /><circle
style="opacity:0.33;fill:#000000;fill-opacity:1;stroke:none;stroke-width:22.9781;stroke-dasharray:none;stroke-opacity:0.882353"
id="path2242"
cx="100.14573"
cy="-33.542244"
r="7.3963723" /><circle
style="opacity:0.33;fill:#000000;fill-opacity:1;stroke:none;stroke-width:34.0385;stroke-dasharray:none;stroke-opacity:0.882353"
id="circle2244"
cx="160.65797"
cy="30.305696"
r="10.956545" /><circle
style="opacity:0.33;fill:#000000;fill-opacity:1;stroke:none;stroke-width:34.4533;stroke-dasharray:none;stroke-opacity:0.882353"
id="circle2246"
cx="308.24826"
cy="-28.016548"
r="11.090084" /><circle
style="opacity:0.33;fill:#000000;fill-opacity:1;stroke:none;stroke-width:22.9781;stroke-dasharray:none;stroke-opacity:0.882353"
id="circle2248"
cx="321.48218"
cy="29.99456"
r="7.3963723" /></g></g></svg>

After

Width:  |  Height:  |  Size: 7.1 KiB

+121
View File
@@ -0,0 +1,121 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<!--
SPDX-FileCopyrightText: 2023 Mathis Brüchert <[email protected]>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
-->
<svg
width="410mm"
height="200mm"
viewBox="0 0 410.00001 199.99999"
version="1.1"
id="svg5"
xml:space="preserve"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="played_placeholder.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#999999"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.26286253"
inkscape:cx="549.717"
inkscape:cy="682.86645"
inkscape:window-width="853"
inkscape:window-height="990"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="layer1"
showguides="false"><inkscape:grid
type="xygrid"
id="grid1378"
originx="-39.082456"
originy="83.308533" /></sodipodi:namedview><defs
id="defs2"><inkscape:path-effect
effect="fillet_chamfer"
id="path-effect3380"
is_visible="true"
lpeversion="1"
nodesatellites_param="F,0,0,1,0,5.2916667,0,1 @ F,0,0,1,0,5.2916667,0,1 @ F,0,0,1,0,5.2916667,0,1"
unit="px"
method="auto"
mode="F"
radius="20"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false" /></defs><g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-39.082456,83.30855)"><g
id="g3784"
transform="translate(5.5779931,16.882453)"><path
id="path2136"
style="opacity:0.33;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.86189;stroke-dasharray:none;stroke-opacity:0.882353"
d="m 250.59587,-83.30855 c -12.80337,1.985129 -26.29162,9.680256 -39.10109,11.658868 l -1.33455,11.432941 -5.14902,44.139773 c -1.82871,-1.736935 -4.17283,-2.833887 -6.67796,-3.126198 -6.39434,-0.746382 -12.18423,3.830112 -12.93037,10.2244936 -0.0906,0.775869 -0.10208,1.545901 -0.0416,2.296047 l -1.26165,1.759668 c 1.98087,2.357577 2.98079,3.562436 4.86071,5.75370803 0.007,0.0069 0.0142,0.01424 0.0213,0.02136 1.76301,1.66767497 4.05668,2.80234797 6.65171,3.10517197 6.39434,0.746383 12.18421,-3.83535797 12.93037,-10.22975 l 6.37844,-54.6847756 33.64731,-5.196316 -5.00192,42.857775 c -1.8287,-1.736995 -4.16757,-2.833886 -6.67272,-3.126197 -6.39433,-0.746383 -12.18418,3.835419 -12.93036,10.229751 -0.0956,0.821011 -0.10393,1.630593 -0.0316,2.42214 l -2.30656,0.257437 4.76548,5.8846016 c 0.0172,0.02136 0.0355,0.04169 0.0529,0.06304 l 0.23121,0.288955 0.005,-0.0053 c 1.84309,2.159621 4.47063,3.659097 7.51339,4.01414 6.39435,0.746384 12.17896,-3.830121 12.92511,-10.2244916 l 6.23137,-53.402774 1.3398,-11.432941 z"
sodipodi:nodetypes="cccccsccccccccccscccscccsccc" /><path
id="path2132"
style="opacity:0.33;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2.53185;stroke-dasharray:none;stroke-opacity:0.882353"
d="m 414.76305,-42.591595 1.52996,12.194434 -10.39972,51.494964 c -2.25772,-2.581735 -5.2919,-4.361549 -8.64712,-5.072299 -8.56418,-1.814311 -16.9776,3.657567 -18.79186,12.221761 -1.81431,8.564179 3.65758,16.977596 12.22178,18.791851 8.56417,1.81431 16.97759,-3.657572 18.79184,-12.221765 l 11.21655,-55.350711 c 14.689,15.5572013 7.57838,38.078497 5.25117,41.005941 l 2.47668,3.709204 c 23.46666,-23.52468967 -3.30326,-35.661777 -7.81246,-65.051881 z"
sodipodi:nodetypes="cccssscccccc" /><path
id="path234"
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2.53185;stroke-dasharray:none;stroke-opacity:0.882353"
d="m 414.64312,-42.271095 -1.46766,6.927632 -10.39973,51.494961 c -2.25773,-2.581737 -5.29189,-4.361547 -8.64712,-5.072297 -8.56417,-1.8143106 -16.9776,3.657569 -18.79185,12.221761 -1.81431,8.56418 3.65758,16.977596 12.22178,18.791851 8.56417,1.814311 16.97759,-3.657572 18.79184,-12.221765 l 11.21655,-55.35071 c 8.85494,17.7240249 17.47561,25.41804533 8.36872,45.952243 23.46665,-23.5246907 -0.58071,-32.03949 -5.08991,-61.429595 z"
sodipodi:nodetypes="cccsssccccc" /><path
id="path1206"
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.86189;stroke-dasharray:none;stroke-opacity:0.882353"
d="m 250.59395,-83.306324 -4.78137,0.737131 -4.5e-4,0.0038 -38.43113,5.936232 -1.3359,11.436417 -5.14833,44.138482 c -1.82871,-1.736935 -4.1708,-2.833247 -6.67596,-3.125557 -6.39434,-0.746384 -12.18473,3.831505 -12.93086,10.225908 -0.74639,6.3943506 3.8354,12.1851686 10.22974,12.9313376 6.39435,0.74638403 12.1809,-3.831952 12.92706,-10.2263636 l 6.38021,-54.684527 33.64971,-5.199365 -5.00263,42.860103 c -1.82871,-1.736995 -4.17036,-2.837129 -6.67551,-3.129439 -6.39435,-0.746384 -12.18131,3.835855 -12.92748,10.230207 -0.74638,6.394341 3.83194,12.1808896 10.22635,12.9270276 6.39437,0.746383 12.1809,-3.8319506 12.92704,-10.2263426 l 6.23365,-53.398483 z" /><circle
style="opacity:0.33;fill:#000000;fill-opacity:1;stroke:none;stroke-width:22.9781;stroke-dasharray:none;stroke-opacity:0.882353"
id="path2242"
cx="46.478828"
cy="-28.027006"
r="7.3963723" /><circle
style="opacity:0.33;fill:#000000;fill-opacity:1;stroke:none;stroke-width:34.0385;stroke-dasharray:none;stroke-opacity:0.882353"
id="circle2244"
cx="160.65797"
cy="29.776529"
r="10.956545" /><circle
style="opacity:0.33;fill:#000000;fill-opacity:1;stroke:none;stroke-width:34.4533;stroke-dasharray:none;stroke-opacity:0.882353"
id="circle2246"
cx="308.24826"
cy="-28.545715"
r="11.090084" /><circle
style="opacity:0.33;fill:#000000;fill-opacity:1;stroke:none;stroke-width:22.9781;stroke-dasharray:none;stroke-opacity:0.882353"
id="circle2248"
cx="358.07913"
cy="27.152491"
r="7.3963723" /><path
id="path3189"
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.564999;stroke-dasharray:none;stroke-opacity:1"
d="M 88.302198,-20.630633 A 28.690096,29.400146 0 0 0 59.612472,8.7696393 28.690096,29.400146 0 0 0 88.302198,38.169912 28.690096,29.400146 0 0 0 116.99244,8.7696393 28.690096,29.400146 0 0 0 88.302198,-20.630633 Z m 0,21.7413083 a 7.4738884,7.6588593 0 0 1 7.47397,7.658964 7.4738884,7.6588593 0 0 1 -7.47397,7.6589647 7.4738884,7.6588593 0 0 1 -7.473967,-7.6589647 7.4738884,7.6588593 0 0 1 7.473967,-7.658964 z" /><path
id="path3271"
style="opacity:0.31;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.564999;stroke-dasharray:none;stroke-opacity:1"
d="M 90.948048,-17.455631 A 28.690096,29.400146 0 0 0 62.258307,11.94464 28.690096,29.400146 0 0 0 90.948048,41.344914 28.690096,29.400146 0 0 0 119.63829,11.94464 28.690096,29.400146 0 0 0 90.948048,-17.455631 Z m 0,21.7413065 a 7.4738884,7.6588593 0 0 1 7.47397,7.6589645 7.4738884,7.6588593 0 0 1 -7.47397,7.658966 7.4738884,7.6588593 0 0 1 -7.47397,-7.658966 7.4738884,7.6588593 0 0 1 7.47397,-7.6589645 z" /><path
id="path3325"
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.214388;stroke-dasharray:none;stroke-opacity:1"
inkscape:transform-center-x="-4.959854"
inkscape:transform-center-y="4.9598554"
d="m 239.8962,20.171856 a 4.3815311,4.3815311 0 0 0 -4.54524,5.504241 l 13.25331,49.461093 a 4.381492,4.381492 0 0 0 7.33034,1.964688 L 292.1424,40.893356 a 4.3814927,4.3814927 0 0 0 -1.96395,-7.330342 l -49.46109,-13.25257 a 4.3815311,4.3815311 0 0 0 -0.82116,-0.138588 z" /><path
id="path3383"
style="opacity:0.33;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.214388;stroke-dasharray:none;stroke-opacity:1"
inkscape:transform-center-x="-4.959769"
inkscape:transform-center-y="4.9598588"
d="m 243.6907,24.72525 c -3.0042,-0.215135 -5.32469,2.594953 -4.54523,5.504241 -0.32195,7.307721 10.08785,46.26688 10.08785,46.26688 l 4.6507,5.473874 0.007,-0.01556 c 1.73787,1.402494 4.25249,1.273523 5.83774,-0.29941 L 295.93673,45.44675 c 1.46747,-1.470769 1.70023,-3.769945 0.55731,-5.504982 l 0.004,-0.0022 -0.0334,-0.04447 c -0.069,-0.101093 -0.14213,-0.199256 -0.21937,-0.294223 l -3.74508,-4.49848 c -14.28035,8.610206 -33.42491,-5.131775 -47.989,-10.238538 -0.2687,-0.07216 -0.54366,-0.118568 -0.82116,-0.138588 z"
sodipodi:nodetypes="ccccccccccccccc" /></g></g></svg>

After

Width:  |  Height:  |  Size: 8.9 KiB

-475
View File
@@ -1,475 +0,0 @@
/****************************************************************************
** MIT License
**
** Copyright (C) 2018-2023 Klarälvdalens Datakonsult AB, a KDAB Group company, [email protected]
** Author: André Somers <[email protected]>
**
** This file is part of KDToolBox (https://github.com/KDAB/KDToolBox).
**
** Permission is hereby granted, free of charge, to any person obtaining a copy
** of this software and associated documentation files (the "Software"), to deal
** in the Software without restriction, including without limitation the rights
** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
** copies of the Software, ** and to permit persons to whom the Software is
** furnished to do so, subject to the following conditions:
**
** The above copyright notice and this permission notice (including the next paragraph)
** shall be included in all copies or substantial portions of the Software.
**
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
** LIABILITY, WHETHER IN AN ACTION OF ** CONTRACT, TORT OR OTHERWISE,
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
** DEALINGS IN THE SOFTWARE.
****************************************************************************/
#ifndef UPDATEABLEMODEL_H
#define UPDATEABLEMODEL_H
#include <QModelIndex>
#include <QSet>
#include <QVector>
#include <functional>
// concepts
#define ForwardIt typename
#define RandomIt typename
#define Container typename
#define BinaryPredicate typename
#define EventHandler typename
#define QAIM typename // QAbstractItemModel-derived class
// basic algorithm
// precondition: src and target are both ordered with respect to lessThan
template<ForwardIt FwdIt, Container TargetCollection, BinaryPredicate LessThan, BinaryPredicate HasChanged,
EventHandler OnChanged, EventHandler OnInsert, EventHandler OnRemove, EventHandler OnEqual>
void updateCollection(const FwdIt srcBegin, const FwdIt srcEnd, TargetCollection &target, LessThan lessThan,
HasChanged itemHasChanged, OnChanged onChanged, OnInsert onInsert, OnRemove onRemove,
OnEqual onEqual)
{
auto srcIt = srcBegin;
target.reserve(std::distance(srcBegin, srcEnd));
auto targetIt = std::begin(target);
while (srcIt != srcEnd)
{
if (targetIt == std::end(target))
{
// insert: src has still items left while target has no more items
// so, insert all remaining items from src into target
targetIt = onInsert(srcIt, srcEnd, targetIt);
// targetIt now points to the item after the item(s) just inserted
srcIt = srcEnd;
}
else if (lessThan(*srcIt, *targetIt))
{
// insert: src has one or more items that need to be inserted into target
auto srcInsertEnd = std::next(srcIt);
while (srcInsertEnd != srcEnd && lessThan(*srcInsertEnd, *targetIt))
{
srcInsertEnd++;
}
targetIt = onInsert(srcIt, srcInsertEnd, targetIt);
// targetIt now points to the item after the item(s) just inserted
srcIt = srcInsertEnd;
}
else if (lessThan(*targetIt, *srcIt))
{
// removal: target has items that are not in src (any more), so remove them
auto targetRemoveEnd = std::next(targetIt);
auto targetEnd = std::end(target);
while (targetRemoveEnd != targetEnd && lessThan(*targetRemoveEnd, *srcIt))
{
targetRemoveEnd++;
}
targetIt = onRemove(targetIt, targetRemoveEnd);
// targetIt now points to the item after the items just removed,
// the same item targetEnd was pointing to before the call
}
else
{
// same item, check for changes
auto changes = itemHasChanged(*srcIt, *targetIt);
if (changes)
{
onChanged(srcIt, targetIt, changes);
}
else
{
onEqual(srcIt, targetIt);
}
srcIt++;
targetIt++;
}
}
if (targetIt != std::end(target))
{
// target has some items left, but we're at the end of src, so remove the rest from target
onRemove(targetIt, std::end(target));
}
}
// helper functions
namespace
{
// helper function to create a QSet<T> out of any container<T>.
template<typename T>
auto setFromContainer(T container) -> QSet<typename T::value_type>
{
QSet<typename T::value_type> set;
set.reserve(container.size());
for (const auto value : container)
{
set.insert(value);
}
return set;
}
// helper for manual overload ranking
// highest rank is selected first
template<size_t Rank>
struct OverloadRanker;
template<>
struct OverloadRanker<0>
{
};
template<size_t Rank>
struct OverloadRanker : OverloadRanker<Rank - 1>
{
};
// insert range into container, 2 overloads (using SFINAE) with manual ranking in case of multiple matches
constexpr size_t BestInsertRangeOverloadRank = 1;
template<Container C, RandomIt InsertIt, ForwardIt FwdIt>
auto insertRange_imp(C &container, InsertIt targetInsertBefore, FwdIt sourceBegin, FwdIt sourceEnd,
OverloadRanker<1>) // Best match
-> decltype(container.insert(targetInsertBefore, sourceBegin, sourceEnd), InsertIt())
{
// primary option: use insert with a whole range directly
InsertIt it =
std::next(container.insert(targetInsertBefore, sourceBegin, sourceEnd), std::distance(sourceBegin, sourceEnd));
return it;
}
template<Container C, RandomIt InsertIt, ForwardIt FwdIt>
auto insertRange_imp(C &container, InsertIt targetInsertBefore, FwdIt sourceBegin, FwdIt sourceEnd,
OverloadRanker<0>) // Fallback
-> InsertIt
{
#if (QT_VERSION < QT_VERSION_CHECK(5, 13, 0))
// Check if, when using QVector in Qt , the value type is default constructable
static_assert(!std::is_same<QVector<typename C::value_type>, C>::value ||
std::is_default_constructible<typename C::value_type>::value,
"When using QVector as your container type, the value type must be default-contructible. Consider "
"using std::vector instead or use a more recent Qt version.");
#endif
// store the location and the length of the inserted items
const auto location = std::distance(std::begin(container), targetInsertBefore);
const auto originalCount = container.size();
// append the new items to the container
std::copy(sourceBegin, sourceEnd, std::back_inserter(container));
// move the items into the right position in the container
const auto b = std::begin(container);
targetInsertBefore = std::next(b, location);
const InsertIt originalEnd = std::next(b, originalCount);
return std::rotate(targetInsertBefore, originalEnd, std::end(container));
}
/**
* Inserts a range into the target container
* @returns an iterator pointing one item past the last item inserted
* @param container is the target container
* @param targetInsertBefore iterator to the item the new items should be inserted before
* @param sourceBegin iterator to the first item to insert into @arg container
* @param sourceEnd iterator to the item past the last item to insert into @arg container
*
* Implementation is done using SFINEA to select an efficient method for the type of
* container used.
*/
// "public API"
template<Container C, RandomIt InsertIt, ForwardIt FwdIt>
InsertIt insertRange(C &container, InsertIt targetInsertBefore, FwdIt sourceBegin, FwdIt sourceEnd)
{
return insertRange_imp(container, targetInsertBefore, sourceBegin, sourceEnd,
OverloadRanker<BestInsertRangeOverloadRank>{});
}
// less than on data type
constexpr size_t BestDataLessThanOverloadRank = 1;
template<typename T>
auto dataLessThan_imp(const T &lhs, const T &rhs, OverloadRanker<1>) -> decltype(operator<(lhs, rhs), bool())
{
return operator<(lhs, rhs);
}
template<typename T>
auto dataLessThan_imp(const T &lhs, const T &rhs, OverloadRanker<0>) -> decltype(bool())
{
// fake implementation to stop the compiler from whining. User is probably providing his own via function pointer
Q_UNUSED(lhs);
Q_UNUSED(rhs);
return false;
}
template<typename T>
bool dataLessThan(const T &lhs, const T &rhs)
{
return dataLessThan_imp(lhs, rhs, OverloadRanker<BestDataLessThanOverloadRank>{});
}
}
// actual class to inherit from
template<QAIM BaseModel, typename DataType>
class UpdateableModel : public BaseModel
{
// can't use Q_OBJECT on templates
public:
explicit UpdateableModel(QObject *parent = nullptr)
: BaseModel(parent)
{
}
protected: // types
struct Operations
{
uint inserts;
uint removals;
uint updates;
};
struct DataChanges
{
operator bool() const { return !changedColumns.isEmpty(); }
QVector<int> changedColumns; // important: keep ordered!
QVector<int> changedRoles;
};
enum ChangeMergePolicy
{
AlwaysMergeNeighbouringRows,
MergeWhenColumnsMatch,
MergeWhenRolesMatch,
MergeOnPerfectMatch
};
using HasChangesFunction = std::function<DataChanges(const DataType & /*lhs*/, const DataType & /*rhs*/)>;
protected: // methods
void setChangeMergePolicy(ChangeMergePolicy policy) { m_changeMergePolicy = policy; }
ChangeMergePolicy changeMergePolicy() const { return m_changeMergePolicy; }
virtual bool lessThan(const DataType &lhs, const DataType &rhs) const { return dataLessThan(lhs, rhs); }
virtual DataChanges itemHasChanged(const DataType &lhs, const DataType &rhs) const
{
Q_UNUSED(lhs);
Q_UNUSED(rhs);
return {};
}
template<ForwardIt Iterator, Container DataContainer, BinaryPredicate LessThan>
Operations updateData(Iterator srcBegin, Iterator srcEnd, DataContainer &targetContainer, LessThan lessThan,
HasChangesFunction itemHasChanged)
{
Operations ops{0, 0, 0};
// events
auto onChanged = [this, &targetContainer, &ops](Iterator lhs, typename DataContainer::iterator rhs,
const DataChanges &changes) {
*rhs = *lhs;
int row = std::distance(targetContainer.begin(), rhs);
addChange(row, changes.changedColumns, changes.changedRoles);
ops.updates++;
};
auto onInsert = [this, &targetContainer, &ops](Iterator lhsBegin, Iterator lhsEnd,
typename DataContainer::iterator rhsInsertAt) {
flushCachedChanges();
int firstNewRow = std::distance(targetContainer.begin(), rhsInsertAt);
int lastNewRow = firstNewRow + std::distance(lhsBegin, lhsEnd) - 1;
beginInsertRows(firstNewRow, lastNewRow);
auto rangeEnd = insertRange(targetContainer, rhsInsertAt, lhsBegin, lhsEnd);
endInsertRows();
ops.inserts += lhsEnd - lhsBegin;
return rangeEnd;
};
auto onRemove = [this, &targetContainer, &ops](typename DataContainer::iterator rhsBegin,
typename DataContainer::iterator rhsEnd) {
flushCachedChanges();
const auto targetContainerBegin = std::begin(targetContainer);
int firstRemovedRow = std::distance(targetContainerBegin, rhsBegin);
int lastRemovedRow = std::distance(targetContainerBegin, rhsEnd) - 1;
beginRemoveRows(firstRemovedRow, lastRemovedRow);
auto newRhsEnd = targetContainer.erase(rhsBegin, rhsEnd);
endRemoveRows();
ops.removals += std::distance(rhsBegin, rhsEnd);
return newRhsEnd;
};
auto onEqual = [this](Iterator /*lhs*/, typename DataContainer::iterator /*rhs*/) { flushCachedChanges(); };
updateCollection(srcBegin, srcEnd, targetContainer, lessThan, itemHasChanged, onChanged, onInsert, onRemove,
onEqual);
flushCachedChanges();
return ops;
}
template<ForwardIt Iterator, Container Data>
Operations updateData(Iterator srcBegin, Iterator srcEnd, Data &targetContainer, HasChangesFunction hasChanged = {})
{
auto lessThanFunction = [this](const DataType &lhs, const DataType &rhs) { return this->lessThan(lhs, rhs); };
if (!hasChanged)
{
hasChanged = [this](const DataType &lhs, const DataType &rhs) -> DataChanges {
return this->itemHasChanged(lhs, rhs);
};
}
return updateData(srcBegin, srcEnd, targetContainer, lessThanFunction, hasChanged);
}
protected:
// Shadowing the methods in the base model, because MSVC thinks the onRemove and onInsert
// lambdas in updateData are not allowed to access the protected member functions in BaseClass.
// GCC is ok with it...
void beginInsertRows(int firstRow, int lastRow) { BaseModel::beginInsertRows(QModelIndex(), firstRow, lastRow); }
void endInsertRows() { BaseModel::endInsertRows(); }
void beginRemoveRows(int firstRow, int lastRow) { BaseModel::beginRemoveRows(QModelIndex(), firstRow, lastRow); }
void endRemoveRows() { BaseModel::endRemoveRows(); }
private:
void flushCachedChanges()
{
if (m_firstChangedRow == -1)
return;
// reconstruct vector of changed roles
QVector<int> roles;
roles.reserve(m_changedRoles.count());
for (int role : qAsConst(m_changedRoles))
{
roles.append(role);
}
// convert the vector of ints indicating changed columns into a vector of pairs of ints indicating ranges.
// for example, the vector {1, 2, 3, 5, 6, 9} would be converted to {{1, 3}, {5, 6}, {9, 9}}
typedef QVector<QPair<int, int>> ColumnRanges;
auto accumulator = [](ColumnRanges ranges, int column) {
if (ranges.isEmpty() || (ranges.last().second < column - 1))
{
ranges.append(qMakePair(column, column));
}
else
{
ranges[ranges.count() - 1].second = column;
}
return ranges;
};
const auto ranges =
std::accumulate(m_changedColumns.cbegin(), m_changedColumns.cend(), ColumnRanges(), accumulator);
for (const auto &columnRange : ranges)
{
QModelIndex topLeft = BaseModel::index(m_firstChangedRow, columnRange.first);
QModelIndex bottomRight = BaseModel::index(m_lastChangedRow, columnRange.second);
Q_EMIT BaseModel::dataChanged(topLeft, bottomRight, roles);
}
m_firstChangedRow = -1;
}
void addChange(int row, const QVector<int> &columns, const QVector<int> &roles)
{
auto mergeColumns = [this](const QVector<int> &columns) {
QVector<int> columnUnion;
// we have to cast this to QAbstractItemModel, to work around QAbstractListModel making columnCount private
columnUnion.reserve(static_cast<QAbstractItemModel *>(this)->columnCount());
auto inserter = std::back_inserter(columnUnion);
std::set_union(m_changedColumns.cbegin(), m_changedColumns.cend(), columns.cbegin(), columns.cend(),
inserter);
m_changedColumns = std::move(columnUnion);
};
if (m_firstChangedRow > -1)
{
// from here rows are guaranteed to be sequential, so no need to check for that
m_lastChangedRow = row; // optimistic, but lets see...
switch (m_changeMergePolicy)
{
case AlwaysMergeNeighbouringRows:
m_changedRoles = m_changedRoles.intersect(setFromContainer(roles));
mergeColumns(columns);
return;
case MergeWhenColumnsMatch:
if (m_changedColumns == columns)
{
m_changedRoles = m_changedRoles.intersect(setFromContainer(roles));
return;
}
break;
case MergeWhenRolesMatch:
if (m_changedRoles == setFromContainer(roles))
{
mergeColumns(columns);
return;
}
break;
case MergeOnPerfectMatch:
if (m_changedColumns == columns && m_changedRoles == setFromContainer(roles))
{
return;
}
break;
}
m_lastChangedRow = row - 1; // we were too optimistic
flushCachedChanges();
}
// just copy the details of the first change
m_firstChangedRow = row;
m_lastChangedRow = row;
m_changedColumns = columns;
m_changedRoles = setFromContainer(roles);
}
ChangeMergePolicy m_changeMergePolicy = MergeOnPerfectMatch;
int m_firstChangedRow = -1;
int m_lastChangedRow = -1;
QVector<int> m_changedColumns;
QSet<int> m_changedRoles;
};
#undef ForwardIt
#undef RandomIt
#undef Container
#undef BinaryPredicate
#undef EventHandler
#undef QAIM
#endif // UPDATEABLEMODEL_H
+48
View File
@@ -129,6 +129,20 @@ QString UserPlaylistModel::nextVideoId() const
return QString::fromStdString((currentTrack + 1)->video_id);
}
QString UserPlaylistModel::previousVideoId() const
{
auto currentTrack = std::find_if(m_playlist.tracks.begin(), m_playlist.tracks.end(),
[this](const watch::Playlist::Track &track) {
return track.video_id == m_currentVideoId.toStdString();
});
if (currentTrack == m_playlist.tracks.end() || currentTrack - 1 == m_playlist.tracks.end()) {
return {};
}
return QString::fromStdString((currentTrack - 1)->video_id);
}
QString UserPlaylistModel::currentVideoId() const
{
return m_currentVideoId;
@@ -141,6 +155,8 @@ void UserPlaylistModel::setCurrentVideoId(const QString &videoId)
emitCurrentVideoChanged(old);
Q_EMIT currentVideoIdChanged();
Q_EMIT canSkipChanged();
Q_EMIT canSkipBackChanged();
}
int UserPlaylistModel::currentIndex() const
@@ -164,12 +180,32 @@ bool UserPlaylistModel::canSkip() const
&& currentTrackIt != m_playlist.tracks.end()
&& !m_playlist.tracks.empty();
}
bool UserPlaylistModel::canSkipBack() const
{
const auto currentTrackIt = std::ranges::find_if(m_playlist.tracks, [this](const watch::Playlist::Track &track) {
return track.video_id == m_currentVideoId.toStdString();
});
return currentTrackIt != m_playlist.tracks.begin()
&& !m_playlist.tracks.empty();
}
void UserPlaylistModel::next()
{
setCurrentVideoId(nextVideoId());
Q_EMIT currentVideoIdChanged();
Q_EMIT canSkipChanged();
Q_EMIT canSkipBackChanged();
}
void UserPlaylistModel::previous()
{
setCurrentVideoId(previousVideoId());
Q_EMIT currentVideoIdChanged();
Q_EMIT canSkipChanged();
Q_EMIT canSkipBackChanged();
}
void UserPlaylistModel::skipTo(const QString &videoId)
@@ -179,6 +215,8 @@ void UserPlaylistModel::skipTo(const QString &videoId)
emitCurrentVideoChanged(old);
Q_EMIT currentVideoIdChanged();
Q_EMIT canSkipChanged();
Q_EMIT canSkipBackChanged();
}
void UserPlaylistModel::playNext(const QString &videoId, const QString &title, const std::vector<meta::Artist> &artists)
@@ -199,6 +237,8 @@ void UserPlaylistModel::playNext(const QString &videoId, const QString &title, c
endInsertRows();
setCurrentVideoId(videoId);
Q_EMIT canSkipChanged();
Q_EMIT canSkipBackChanged();
return;
}
@@ -208,6 +248,8 @@ void UserPlaylistModel::playNext(const QString &videoId, const QString &title, c
m_playlist.tracks.push_back(std::move(track));
endInsertRows();
Q_EMIT canSkipChanged();
Q_EMIT canSkipBackChanged();
return;
}
@@ -216,6 +258,8 @@ void UserPlaylistModel::playNext(const QString &videoId, const QString &title, c
m_playlist.tracks.insert(currentIt + 1, std::move(track));
endInsertRows();
Q_EMIT canSkipChanged();
Q_EMIT canSkipBackChanged();
}
void UserPlaylistModel::append(const QString &videoId, const QString &title, const std::vector<meta::Artist> &artists)
@@ -242,6 +286,8 @@ void UserPlaylistModel::clear()
setCurrentVideoId({});
Q_EMIT canSkipChanged();
Q_EMIT canSkipBackChanged();
}
void UserPlaylistModel::remove(const QString &videoId)
@@ -259,6 +305,8 @@ void UserPlaylistModel::remove(const QString &videoId)
endRemoveRows();
Q_EMIT canSkipChanged();
Q_EMIT canSkipBackChanged();
}
void UserPlaylistModel::shufflePlaylist()
+8
View File
@@ -23,6 +23,7 @@ class UserPlaylistModel : public AbstractYTMusicModel
Q_PROPERTY(QString currentVideoId READ currentVideoId NOTIFY currentVideoIdChanged)
Q_PROPERTY(int currentIndex READ currentIndex NOTIFY currentVideoIdChanged)
Q_PROPERTY(bool canSkip READ canSkip NOTIFY canSkipChanged)
Q_PROPERTY(bool canSkipBack READ canSkipBack NOTIFY canSkipBackChanged)
Q_PROPERTY(QString lyrics READ lyrics NOTIFY lyricsChanged)
public:
@@ -46,6 +47,7 @@ public:
Q_SIGNAL void initialVideoIdChanged();
QString nextVideoId() const;
QString previousVideoId() const;
QString currentVideoId() const;
void setCurrentVideoId(const QString &videoId);
@@ -54,7 +56,11 @@ public:
int currentIndex() const;
bool canSkip() const;
bool canSkipBack() const;
Q_SIGNAL void canSkipChanged();
Q_SIGNAL void canSkipBackChanged();
QString playlistId() const;
void setPlaylistId(const QString &playlistId);
@@ -68,6 +74,8 @@ public:
Q_SIGNAL void lyricsChanged();
Q_INVOKABLE void next();
Q_INVOKABLE void previous();
Q_INVOKABLE void skipTo(const QString &videoId);
Q_INVOKABLE void playNext(const QString &videoId, const QString &title, const std::vector<meta::Artist> &artists);
Q_INVOKABLE void append(const QString &videoId, const QString &title, const std::vector<meta::Artist> &artists);
+13 -4
View File
@@ -35,18 +35,18 @@ struct UNEXPORT YTMusicPrivate {
py::object get_ytmusic() {
if (ytmusic.is_none()) {
const auto module = py::module::import("ytmusicapi");
ytmusic = module.attr("YTMusic")(auth, user, requests_session, proxies, language);
ytmusicapi_module = py::module::import("ytmusicapi");
ytmusic = ytmusicapi_module.attr("YTMusic")(auth, user, requests_session, proxies, language);
// Some of the called python code randomly fails if the encoding is not utf8
setenv("LC_ALL", "en_US.utf8", true);
auto oldVersion = module.attr("__dict__").contains("_version");
auto oldVersion = ytmusicapi_module.attr("__dict__").contains("_version");
if (oldVersion) {
std::cerr << "Running with outdated and untested version of ytmusicapi." << std::endl;
std::cerr << "The currently tested and supported version is " << TESTED_YTMUSICAPI_VERSION << std::endl;
} else {
const auto version = module.attr("__version__").cast<std::string>();
const auto version = ytmusicapi_module.attr("__version__").cast<std::string>();
if (version != TESTED_YTMUSICAPI_VERSION) {
std::cerr << "Running with untested version of ytmusicapi " << version << "." << std::endl;
std::cerr << "The currently tested and supported version is " << TESTED_YTMUSICAPI_VERSION << std::endl;
@@ -66,6 +66,9 @@ struct UNEXPORT YTMusicPrivate {
return ytdl;
}
public:
py::module ytmusicapi_module;
private:
py::object ytmusic = py::none();
py::object ytdl = py::none();
@@ -507,3 +510,9 @@ Lyrics YTMusic::get_lyrics(const std::string &browse_id) const
lyrics["lyrics"].cast<std::string>()
};
}
std::string YTMusic::get_version() const
{
d->get_ytmusic();
return d->ytmusicapi_module.attr("__version__").cast<std::string>();
}
+2
View File
@@ -319,6 +319,8 @@ public:
Lyrics get_lyrics(const std::string &browse_id) const;
std::string get_version() const;
// TODO wrap more methods
private: