Compare commits

..
Author SHA1 Message Date
Jonah Brüchert cca7eb4c0c Add automatic model template
This is based on KDABs updatable model, to automatically handle changes
in the data efficiently.
Additionally, it uses my desert library, to automatically create role
names and to implement tha data method of the model.
2023-02-03 12:42:43 +01:00
62 changed files with 2167 additions and 2481 deletions

No files matched your search

+1
View File
@@ -43,6 +43,7 @@ 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__)" RESULT_VARIABLE YTMUSICAPI_CHECK_RESULT OUTPUT_VARIABLE YTMusicAPI_VERSION)
execute_process(COMMAND ${Python3_EXECUTABLE} -c "import ytmusicapi; print(ytmusicapi.version('ytmusicapi'))" 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: 7.4 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

+1 -1
View File
@@ -1 +1 @@
<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>
<?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>

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 2.5 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-02-08 01:02+0000\n"
"POT-Creation-Date: 2023-01-30 01:00+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,28 +125,37 @@ msgstr "الأكثر تشغيلا"
msgid "played Songs"
msgstr "الأغاني المشغلة"
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "تيوب الصوتي"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -198,12 +207,12 @@ msgstr "قوائم التّشغيل"
msgid "Unknown"
msgstr "مجهول"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "لا يوجد تطابق من البحوث الأخيرة"
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr "أزل من تاريخ البحث"
@@ -213,40 +222,31 @@ msgstr "أزل من تاريخ البحث"
msgid "Collapse Sidebar"
msgstr " اطوِ الشريط الجانبي"
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "شغل التالي"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "أضف للطابور"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "أزل المفضلة"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "أضف للمفضلة"
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr "أزل من التّاريخ"
#~ msgid "Now Playing"
#~ msgstr "المشغل الآن"
#~ msgid "Queue"
#~ msgstr "صُفّ"
#~ msgid "Lyrics"
#~ msgstr "الكلمات"
#~ msgid "Favourite Songs"
#~ msgstr "الأغاني المفضّلة"
+30 -27
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-02-08 01:02+0000\n"
"POT-Creation-Date: 2023-01-30 01:00+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,28 +128,37 @@ msgstr "Daha çox dinlənilən"
msgid "played Songs"
msgstr "Oxudulan mahnılar"
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -202,12 +211,12 @@ msgstr "Mahnı siyahıları"
msgid "Unknown"
msgstr "Bilinməyən"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -217,39 +226,33 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Sonrakını oxudun"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Remove Favourite"
msgstr "Süçilmişlər"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Add Favourite"
msgstr "Süçilmişlər"
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, 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"
+31 -22
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-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-08 10:12+0100\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-27 10:54+0100\n"
"Last-Translator: Josep M. Ferrer <[email protected]>\n"
"Language-Team: Catalan <[email protected]>\n"
"Language: ca\n"
@@ -129,28 +129,37 @@ msgstr "Les més reproduïdes"
msgid "played Songs"
msgstr "Cançons reproduïdes"
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -202,12 +211,12 @@ msgstr "Llistes de reproducció"
msgid "Unknown"
msgstr "Desconeguda"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "No hi ha cerques anteriors coincidents"
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr "elimina de l'historial de cerques"
@@ -217,27 +226,27 @@ msgstr "elimina de l'historial de cerques"
msgid "Collapse Sidebar"
msgstr "Redueix la barra lateral"
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Reprodueix el següent"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Afegeix a la cua"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Elimina de les preferides"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Afegeix a les preferides"
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr "Elimina de l'historial"
+31 -22
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-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-08 10:12+0100\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-27 10:54+0100\n"
"Last-Translator: Josep M. Ferrer <[email protected]>\n"
"Language-Team: Catalan <[email protected]>\n"
"Language: ca@valencia\n"
@@ -129,28 +129,37 @@ msgstr "Les més reproduïdes"
msgid "played Songs"
msgstr "Cançons reproduïdes"
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -202,12 +211,12 @@ msgstr "Llistes de reproducció"
msgid "Unknown"
msgstr "Desconeguda"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "No hi ha busques anteriors coincidents"
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr "elimina de l'historial de busques"
@@ -217,27 +226,27 @@ msgstr "elimina de l'historial de busques"
msgid "Collapse Sidebar"
msgstr "Reduïx la barra lateral"
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Reproduïx el següent"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Afig a la cua"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Elimina de les preferides"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Afig a les preferides"
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr "Elimina de l'historial"
+43 -34
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, 2023.
# Vit Pelcak <[email protected]>, 2021, 2022.
#
msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-01-30 16:04+0100\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2022-06-28 13:58+0200\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.12.1\n"
"X-Generator: Lokalize 22.04.2\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 "Album • %1"
msgstr ""
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
@@ -124,30 +124,39 @@ msgstr "Nejčastěji hrané"
#: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr "přehrané skladby"
msgstr ""
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -182,7 +191,7 @@ msgstr "Seznam skladeb"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr "Předchozí hledání:"
msgstr ""
#: contents/ui/SearchPage.qml:28
#, kde-format
@@ -199,42 +208,42 @@ msgstr "Seznamy skladeb"
msgid "Unknown"
msgstr "Neznámý"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "Neodpovídají žádná předchozí hledání"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr "odstranit z historie hledání"
msgstr ""
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr "Svinout postranní panel"
msgstr ""
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Přehrát následující"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Zařadit do fronty"
msgstr ""
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Odstranit oblíbené"
msgstr ""
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Přidat oblíbené"
msgstr ""
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr "Odstranit z historie"
msgstr ""
+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-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-09 00:18+0100\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-14 23:47+0100\n"
"Last-Translator: Frederik Schwarzer <[email protected]>\n"
"Language-Team: German <[email protected]>\n"
"Language: de\n"
@@ -128,28 +128,37 @@ msgstr "Am meisten abgespielt"
msgid "played Songs"
msgstr "Abgespielte Stücke"
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -201,54 +210,45 @@ msgstr "Wiedergabelisten"
msgid "Unknown"
msgstr "Unbekannt"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "Keine passenden vorherigen Suchvorgänge"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr "Aus Suchverlauf löschen"
msgstr ""
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr "Seitenleiste einklappen"
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Nächste Wiedergabe"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Zur Warteschlange hinzufügen"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Favoriten entfernen"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Favoriten hinzufügen"
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr "Aus Verlauf löschen"
#~ msgid "Now Playing"
#~ msgstr "Aktueller Titel"
#~ msgid "Queue"
#~ msgstr "Warteschlange"
#~ msgid "Lyrics"
#~ msgstr "Liedtext"
msgstr ""
#~ 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-02-08 01:02+0000\n"
"POT-Creation-Date: 2023-01-30 01:00+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,28 +126,37 @@ msgstr "Most played"
msgid "played Songs"
msgstr "played Songs"
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -199,13 +208,13 @@ msgstr "Playlists"
msgid "Unknown"
msgstr "Unknown"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, fuzzy, kde-format
#| msgid "Previous Searches:"
msgid "No matching previous searches"
msgstr "Previous Searches:"
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -215,40 +224,31 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr "Collapse Sidebar"
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Play Next"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Add to queue"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Remove Favourite"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Add Favourite"
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, 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"
+32 -35
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-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-08 03:34+0100\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-29 00:58+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.2\n"
"X-Generator: Lokalize 22.12.1\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
@@ -128,28 +128,37 @@ msgstr "Más reproducidas"
msgid "played Songs"
msgstr "canciones reproducidas"
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -201,12 +210,12 @@ msgstr "Listas de reproducción"
msgid "Unknown"
msgstr "Desconocido"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "No hay búsquedas anteriores coincidentes"
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr "eliminar del historial de búsqueda"
@@ -216,43 +225,31 @@ msgstr "eliminar del historial de búsqueda"
msgid "Collapse Sidebar"
msgstr "Contraer la barra lateral"
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Reproducir siguiente"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Añadir a la cola"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Eliminar favorita"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Añadir favorita"
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, 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"
+32 -35
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-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-08 07:47+0100\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-27 21:02+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.2\n"
"X-Generator: Lokalize 22.12.1\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
@@ -129,28 +129,37 @@ msgstr "Gehien jotakoa"
msgid "played Songs"
msgstr "jotako abestiak"
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -202,12 +211,12 @@ msgstr "Jotze-zerrendak"
msgid "Unknown"
msgstr "Ezezaguna"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "Ez dago bat datorren aurreko bilaketarik"
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr "Kendu bilaketa-historiatik"
@@ -217,43 +226,31 @@ msgstr "Kendu bilaketa-historiatik"
msgid "Collapse Sidebar"
msgstr "Tolestu Alboko-barra"
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Jo hurrengoa"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Gehitu ilaran"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Kendu gogokoa"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Gehitu gogokoa"
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, 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"
+30 -27
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-02-08 01:02+0000\n"
"POT-Creation-Date: 2023-01-30 01:00+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,28 +127,37 @@ msgstr "Soitetuimmat"
msgid "played Songs"
msgstr "Soitetut kappaleet"
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -201,12 +210,12 @@ msgstr "Soittolistat"
msgid "Unknown"
msgstr "Tuntematon"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -216,39 +225,33 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Toista seuraava"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Remove Favourite"
msgstr "Suosikit"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Add Favourite"
msgstr "Suosikit"
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr ""
#~ msgid "Now Playing"
#~ msgstr "Nyt soi"
#~ msgid "Queue"
#~ msgstr "Jono"
#~ msgid "Favourite Songs"
#~ msgstr "Suosikkikappaleet"
+31 -34
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-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-11 16:25+0100\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-29 10:52+0100\n"
"Last-Translator: Xavier BESNARD <xavier.besnard]neuf.fr>\n"
"Language-Team: fr\n"
"Language: fr\n"
@@ -124,28 +124,37 @@ msgstr "Les plus lus"
msgid "played Songs"
msgstr "Titres lus"
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -197,12 +206,12 @@ msgstr "Listes de lecture"
msgid "Unknown"
msgstr "Inconnu"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "Aucune correspondance avec les recherches précédentes"
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr "supprimer de l'historique de recherche"
@@ -212,43 +221,31 @@ msgstr "supprimer de l'historique de recherche"
msgid "Collapse Sidebar"
msgstr "Réduire la barre latérale"
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Lire le suivant"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Ajouter à la file de lecture"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Supprimer un favori"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Ajouter un favori"
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, 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"
+31 -26
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-02-08 01:02+0000\n"
"POT-Creation-Date: 2023-01-30 01:00+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,28 +126,38 @@ msgstr ""
msgid "played Songs"
msgstr ""
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "ओडियो-ट्यूब"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -200,12 +210,12 @@ msgstr "गीत-सूचीयाँ"
msgid "Unknown"
msgstr "अज्ञात"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -215,36 +225,31 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "अगला बजाएँ"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, 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-02-08 01:02+0000\n"
"POT-Creation-Date: 2023-01-30 01:00+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,28 +126,37 @@ msgstr "Paling banyak diputar"
msgid "played Songs"
msgstr "Lagu yang telah diputar"
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -199,12 +208,12 @@ msgstr "Daftar Putar"
msgid "Unknown"
msgstr "Tidak diketahui"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -214,40 +223,31 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Putar Berikutnya"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Tambahkan ke antrean"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Hapus Favorit"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Tambahkan Favorit"
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, 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"
+32 -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-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-05 12:50+0100\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-27 19:12+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.2\n"
"X-Generator: Lokalize 22.12.1\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
@@ -126,28 +126,37 @@ msgstr "Più riprodotti"
msgid "played Songs"
msgstr "Brani riprodotti"
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -199,12 +208,12 @@ msgstr "Scalette"
msgid "Unknown"
msgstr "Sconosciuto"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "Nessuna ricerca precedente corrispondente"
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr "rimuovi dalla cronologia delle ricerche"
@@ -214,43 +223,31 @@ msgstr "rimuovi dalla cronologia delle ricerche"
msgid "Collapse Sidebar"
msgstr "Contrai la barra laterale"
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Riproduci successivo"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Aggiungi alla coda"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Rimuovi preferito"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Aggiungi preferito"
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, 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"
+30 -21
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-02-08 01:02+0000\n"
"POT-Creation-Date: 2023-01-30 01:00+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,28 +121,37 @@ msgstr ""
msgid "played Songs"
msgstr ""
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -194,12 +203,12 @@ msgstr ""
msgid "Unknown"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -209,27 +218,27 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr ""
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr ""
+31 -34
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-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-08 07:08+0100\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-27 08:44+0100\n"
"Last-Translator: Temuri Doghonadze <[email protected]>\n"
"Language-Team: Georgian <[email protected]>\n"
"Language: ka\n"
@@ -126,28 +126,37 @@ msgstr "ხშირად დაკრულები"
msgid "played Songs"
msgstr "დაკრული სიმღერები"
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -199,12 +208,12 @@ msgstr "დასაკრავი სიები"
msgid "Unknown"
msgstr "უცნობი"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "წინა ძებნებს არ ემთხვევა"
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr "ძებნის ისტორიიდან წაშლა"
@@ -214,43 +223,31 @@ msgstr "ძებნის ისტორიიდან წაშლა"
msgid "Collapse Sidebar"
msgstr "გვერდითი ზოლის ჩაკეცვა"
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "შემდეგის დაკვრა"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "რიგში ჩამატება"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "რჩეულის წაშლა"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "რჩეულის დამატება"
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr "ისტორიიდან წაშლა"
#~ msgid "%"
#~ msgstr "%"
#~ msgid "Now Playing"
#~ msgstr "მიმდინარეობს დაკვრა"
#~ msgid "Queue"
#~ msgstr "რიგი"
#~ msgid "Lyrics"
#~ msgstr "ლირიკა"
#~ msgid "Favourite Songs"
#~ msgstr "რჩეული სიმღერები"
+30 -27
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-02-08 01:02+0000\n"
"POT-Creation-Date: 2023-01-30 01:00+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,28 +126,37 @@ msgstr "가장 많이 재생됨"
msgid "played Songs"
msgstr "재생한 노래"
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -200,12 +209,12 @@ msgstr "재생 목록"
msgid "Unknown"
msgstr "알 수 없음"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -215,39 +224,33 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "다음 재생"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Remove Favourite"
msgstr "책갈피"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Add Favourite"
msgstr "책갈피"
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr ""
#~ msgid "Now Playing"
#~ msgstr "지금 재생 중"
#~ msgid "Queue"
#~ msgstr "대기열에 추가"
#~ msgid "Favourite Songs"
#~ msgstr "책갈피에 등록된 노래"
+32 -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-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-08 14:22+0100\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-27 12:41+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.2\n"
"X-Generator: Lokalize 22.12.1\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
@@ -126,28 +126,37 @@ msgstr "Meest afgespeeld"
msgid "played Songs"
msgstr "afgespeelde songs"
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -199,12 +208,12 @@ msgstr "Afspeellijsten"
msgid "Unknown"
msgstr "Onbekend"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "Geen overeenkomende vorige zoekopdrachten"
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr "uit zoekgeschiedenis verwijderen"
@@ -214,43 +223,31 @@ msgstr "uit zoekgeschiedenis verwijderen"
msgid "Collapse Sidebar"
msgstr "Zijbalk invouwen"
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Volgende afspelen"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Aan wachtrij toevoegen"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Favoriet verwijderen"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Favoriet toevoegen"
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, 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"
+35 -26
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-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-09 21:36+0100\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-15 12:33+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.2\n"
"X-Generator: Lokalize 22.12.1\n"
"X-Environment: kde\n"
"X-Accelerator-Marker: &\n"
"X-Text-Markup: kde4\n"
@@ -127,28 +127,37 @@ msgstr "Oftast avspela"
msgid "played Songs"
msgstr "Avspela songar"
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -200,42 +209,42 @@ msgstr "Spelelister"
msgid "Unknown"
msgstr "Ukjend"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "Ingen samsvarande tidlegare søk"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr "Fjern frå søkjeloggen"
msgstr ""
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr "Fald saman sidestolpe"
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Spel som neste"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Legg i avspelingskøen"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Fjern frå favorittar"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Legg til favorittar"
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr "Fjern frå loggen"
msgstr ""
+31 -26
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-02-08 01:02+0000\n"
"POT-Creation-Date: 2023-01-30 01:00+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,28 +125,38 @@ msgstr ""
msgid "played Songs"
msgstr ""
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "ਆਡੀਓ-ਟਿਊਬ"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -199,12 +209,12 @@ msgstr "ਪਲੇਅਲਿਸਟਾਂ"
msgid "Unknown"
msgstr "ਅਣਪਛਾਤਾ"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -214,36 +224,31 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "ਅਗਲਾ ਚਲਾਓ"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr ""
#, fuzzy
#~| msgid "No media playing"
#~ msgid "Now Playing"
#~ msgstr "ਕੋਈ ਮੀਡੀਆ ਨਹੀਂ ਚੱਲਦਾ"
#~ msgid "Find music on YouTube Music"
#~ msgstr "ਯੂਟਿਊਬ ਸੰਗੀਤ ਉੱਤੇ ਸੰਗੀਤ ਲੱਭੋ"
+30 -27
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-02-08 01:02+0000\n"
"POT-Creation-Date: 2023-01-30 01:00+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,28 +130,37 @@ msgstr "Najczęściej odtwarzane"
msgid "played Songs"
msgstr "Odtwarzane utwory"
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -204,12 +213,12 @@ msgstr "Listy odtwarzania"
msgid "Unknown"
msgstr "Nieznany"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -219,39 +228,33 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Odtwórz następny"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Remove Favourite"
msgstr "Ulubione"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Add Favourite"
msgstr "Ulubione"
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr ""
#~ msgid "Now Playing"
#~ msgstr "Teraz odtwarzany"
#~ msgid "Queue"
#~ msgstr "Kolejka"
#~ msgid "Favourite Songs"
#~ msgstr "Ulubione utwory"
+30 -33
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-02-08 01:02+0000\n"
"POT-Creation-Date: 2023-01-30 01:00+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,28 +128,37 @@ msgstr "Mais Tocadas"
msgid "played Songs"
msgstr "Músicas tocadas"
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -201,12 +210,12 @@ msgstr "Listas de Reprodução"
msgid "Unknown"
msgstr "Desconhecido"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "Sem pesquisas anteriores correspondentes"
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, fuzzy, kde-format
#| msgid "Remove from History"
msgid "remove from search history"
@@ -217,39 +226,27 @@ msgstr "Remover do Histórico"
msgid "Collapse Sidebar"
msgstr "Fechar a Barra Lateral"
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Reproduzir o Seguinte"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Adicionar à fila"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Remover o Favorito"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Adicionar aos Favoritos"
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, 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"
+41 -40
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, 2023.
# Luiz Fernando Ranghetti <[email protected]>, 2021, 2022.
# 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-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-14 11:03-0300\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2022-12-20 10:48-0300\n"
"Last-Translator: Luiz Fernando Ranghetti <[email protected]>\n"
"Language-Team: Portuguese <[email protected]>\n"
"Language: pt_BR\n"
@@ -123,36 +123,46 @@ msgid "Most played"
msgstr "Mais reproduzidas"
#: contents/ui/LibraryPage.qml:230
#, kde-format
#, fuzzy, kde-format
#| msgid "Played Songs"
msgid "played Songs"
msgstr "músicas reproduzidas"
msgstr "Músicas reproduzidas"
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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 "Biblioteca"
msgstr ""
#: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
@@ -183,7 +193,7 @@ msgstr "Lista de músicas"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr "Pesquisas anteriores:"
msgstr ""
#: contents/ui/SearchPage.qml:28
#, kde-format
@@ -200,54 +210,45 @@ msgstr "Listas de músicas"
msgid "Unknown"
msgstr "Desconhecido"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "Nenhuma pesquisa anterior correspondente"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr "remover do histórico de pesquisa"
msgstr ""
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr "Recolher barra lateral"
msgstr ""
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Reproduzir próxima"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Adicionar à fila"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Remover das favoritas"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Adicionar favorita"
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr "Remover do histórico"
#~ msgid "Now Playing"
#~ msgstr "Reproduzindo agora"
#~ msgid "Queue"
#~ msgstr "Fila"
#~ msgid "Lyrics"
#~ msgstr "Letras"
msgstr ""
#~ 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-02-08 01:02+0000\n"
"POT-Creation-Date: 2023-01-30 01:00+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,28 +126,37 @@ msgstr "Часто воспроизводимые"
msgid "played Songs"
msgstr "Воспроизведённые треки"
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -199,12 +208,12 @@ msgstr "Списки воспроизведения"
msgid "Unknown"
msgstr "Неизвестный тип"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "Не найдено соответствующих предыдущих поисковых запросов"
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -214,40 +223,31 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr "Свернуть боковую панель"
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Воспроизвести следующим"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Добавить в очередь воспроизведения"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Убрать из избранного"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Добавить в избранное"
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr "Удалить из журнала"
#~ msgid "Now Playing"
#~ msgstr "Текущий трек"
#~ msgid "Queue"
#~ msgstr "Очередь воспроизведения"
#~ msgid "Lyrics"
#~ msgstr "Текст песни"
#~ msgid "Favourite Songs"
#~ msgstr "Избранные треки"
+31 -26
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-02-08 01:02+0000\n"
"POT-Creation-Date: 2023-01-30 01:00+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,28 +123,38 @@ msgstr ""
msgid "played Songs"
msgstr ""
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -197,12 +207,12 @@ msgstr "Zoznamy skladieb"
msgid "Unknown"
msgstr "Neznáme"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -212,37 +222,32 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, fuzzy, kde-format
#| msgid "Play"
msgid "Play Next"
msgstr "Prehrať"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, 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"
+32 -35
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-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-09 08:26+0100\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-28 09:50+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.2\n"
"X-Generator: Lokalize 22.12.1\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
"%100==4 ? 3 : 0);\n"
@@ -125,28 +125,37 @@ msgstr "Največkrat predvajane"
msgid "played Songs"
msgstr "predvajane pesmi"
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -198,12 +207,12 @@ msgstr "Seznami predvajanja"
msgid "Unknown"
msgstr "Neznano"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "Ni zadetkov iz prejšnjih iskanj"
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr "odstrani iz zgodovine iskanj"
@@ -213,43 +222,31 @@ msgstr "odstrani iz zgodovine iskanj"
msgid "Collapse Sidebar"
msgstr "Strni stransko vrstico"
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Predvajaj naslednjo"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Dodaj v v čakalno vrsto"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Odstrani priljubljenega"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Dodaj priljubljenega"
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, 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"
+30 -27
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-02-08 01:02+0000\n"
"POT-Creation-Date: 2023-01-30 01:00+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,28 +126,37 @@ msgstr "Mest spelade"
msgid "played Songs"
msgstr "Spelade låtar"
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -200,12 +209,12 @@ msgstr "Spellistor"
msgid "Unknown"
msgstr "Okänd"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -215,39 +224,33 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Spela nästa"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Remove Favourite"
msgstr "Favoriter"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Add Favourite"
msgstr "Favoriter"
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr ""
#~ msgid "Now Playing"
#~ msgstr "Spelar nu"
#~ msgid "Queue"
#~ msgstr "Köa"
#~ msgid "Favourite Songs"
#~ msgstr "Favoritlåtar"
+32 -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-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-08 11:05+0300\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-27 18:30+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.2\n"
"X-Generator: Lokalize 22.12.1\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
@@ -126,28 +126,37 @@ msgstr "En Çok Çalınanlar"
msgid "played Songs"
msgstr "Çalınan Şarkılar"
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -199,12 +208,12 @@ msgstr "Çalma Listeleri"
msgid "Unknown"
msgstr "Bilinmiyor"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "Eşleşen daha önceden yapılmış arama yok"
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr "arama geçmişinden kaldır"
@@ -214,43 +223,31 @@ msgstr "arama geçmişinden kaldır"
msgid "Collapse Sidebar"
msgstr "Kenar Çubuğunu Daralt"
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Sonrakini Çal"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Kuyruğa ekle"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Beğenilerden Kaldır"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Beğenilere Ekle"
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, 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"
+32 -35
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-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-08 08:23+0200\n"
"Last-Translator: Yuri Chornoivan <[email protected]>\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"
"Language-Team: Ukrainian <[email protected]>\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
@@ -127,28 +127,37 @@ msgstr "Часто слухали"
msgid "played Songs"
msgstr "Відтворені композиції"
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -200,12 +209,12 @@ msgstr "Списки відтворення"
msgid "Unknown"
msgstr "Невідомий"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "Немає відповідних попередніх пошуків"
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr "вилучити з журналу пошуку"
@@ -215,43 +224,31 @@ msgstr "вилучити з журналу пошуку"
msgid "Collapse Sidebar"
msgstr "Згорнути бічну панель"
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Відтворити наступну"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Додати до черги"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Вилучити з улюблених"
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Додати до улюблених"
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr "Вилучити із журналу"
#~ msgid "%"
#~ msgstr "%"
#~ msgid "Now Playing"
#~ msgstr "Зараз відтворюємо"
#~ msgid "Queue"
#~ msgstr "Додати до черги"
#~ msgid "Lyrics"
#~ msgstr "Текст"
#~ msgid "Favourite Songs"
#~ msgstr "Улюблені композиції"
+31 -22
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-02-08 01:02+0000\n"
"PO-Revision-Date: 2023-02-07 11:03\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-12 10:32\n"
"Last-Translator: \n"
"Language-Team: Chinese Simplified\n"
"Language: zh_CN\n"
@@ -124,28 +124,37 @@ msgstr "最常播放"
msgid "played Songs"
msgstr ""
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -197,12 +206,12 @@ msgstr "播放列表"
msgid "Unknown"
msgstr "未知"
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -212,27 +221,27 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "播放下一首"
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr ""
+30 -21
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-02-08 01:02+0000\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2022-05-30 00:47+0000\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -125,28 +125,37 @@ msgstr ""
msgid "played Songs"
msgstr ""
#: contents/ui/main.qml:108
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:194
#: 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/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"
@@ -198,12 +207,12 @@ msgstr ""
msgid "Unknown"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:286
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:321
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
@@ -213,27 +222,27 @@ msgstr ""
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:116 contents/ui/SongMenu.qml:175
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr ""
#: contents/ui/SongMenu.qml:125 contents/ui/SongMenu.qml:181
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:135 contents/ui/SongMenu.qml:188
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:151 contents/ui/SongMenu.qml:203
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr ""
+3 -3
View File
@@ -33,6 +33,7 @@ add_executable(audiotube
errorhandler.cpp
playerutils.cpp
abstractytmusicmodel.cpp
autolistmodel.h
multiiterableview.h
library.cpp
resources.qrc
@@ -51,12 +52,11 @@ target_link_libraries(audiotube
KF5::CoreAddons
KF5::Crash
KF5::WindowSystem
Desert::desert
ytm
asyncdatabase
)
target_compile_definitions(audiotube PRIVATE
-DAUDIOTUBE_VERSION_STRING="${RELEASE_SERVICE_VERSION}"
-DQT_NO_KEYWORDS -DQT_NO_URL_CAST_FROM_STRING)
target_compile_definitions(audiotube PRIVATE -DQT_NO_KEYWORDS -DQT_NO_URL_CAST_FROM_STRING)
install(TARGETS audiotube ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
-7
View File
@@ -148,13 +148,6 @@ 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,7 +9,6 @@
#include <QFuture>
#include <QFutureWatcher>
#include <iostream>
#include <vector>
#include <ytmusic.h>
@@ -124,8 +123,6 @@ public:
QFuture<Lyrics> fetchLyrics(const QString &browseId);
QFuture<QString> version();
Q_SIGNAL void errorOccurred(const QString &error);
protected:
+91
View File
@@ -0,0 +1,91 @@
// 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
@@ -1,17 +0,0 @@
// 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
}
+8 -61
View File
@@ -47,34 +47,6 @@ 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
@@ -82,14 +54,12 @@ Kirigami.ScrollablePage {
RowLayout {
spacing: 20
Repeater {
id: favouriteRepeater
Layout.fillWidth: true
model: Library.favourites
delegate: ColumnLayout {
id: delegateItem
required property string title
required property var artists
required property string artistsDisplayString
required property string artists
required property string videoId
required property int index
@@ -212,7 +182,7 @@ Kirigami.ScrollablePage {
Layout.maximumWidth: 200
leftPadding: 5
color: Kirigami.Theme.disabledTextColor
text: delegateItem.artistsDisplayString
text: delegateItem.artists
elide: Text.ElideRight
}
}
@@ -221,8 +191,8 @@ Kirigami.ScrollablePage {
icon.name: "view-more-horizontal-symbolic"
onPressed: menu.openForSong(delegateItem.videoId,
delegateItem.title,
delegateItem.artists,
delegateItem.artistsDisplayString)
delegateItem.artists, // TODO
delegateItem.artists)
}
}
@@ -261,27 +231,6 @@ 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
@@ -289,14 +238,12 @@ Kirigami.ScrollablePage {
RowLayout {
spacing: 20
Repeater {
id: mostPlayedRepeater
Layout.fillWidth: true
model: Library.mostPlayed
delegate: ColumnLayout {
id: mpdelegateItem
required property string title
required property var artists
required property string artistsDisplayString
required property string artists
required property string videoId
Layout.fillWidth: false
@@ -416,7 +363,7 @@ Kirigami.ScrollablePage {
Layout.maximumWidth: 200
leftPadding: 5
color: Kirigami.Theme.disabledTextColor
text: mpdelegateItem.artistsDisplayString
text: mpdelegateItem.artists
elide: Text.ElideRight
}
}
@@ -425,8 +372,8 @@ Kirigami.ScrollablePage {
icon.name: "view-more-horizontal-symbolic"
onPressed: menu.openForSong(mpdelegateItem.videoId,
mpdelegateItem.title,
mpdelegateItem.artists,
mpdelegateItem.artistsDisplayString)
mpdelegateItem.artists, // TODO
mpdelegateItem.artists)
}
}
File diff suppressed because it is too large. Load diff
+73 -150
View File
@@ -22,12 +22,14 @@ Item {
required property var info // VideoInfoExtractor object
required property var audio // Audio object
readonly property bool isWidescreen: width >= Kirigami.Units.gridUnit * 50
readonly property bool isWidescreen: width >= Kirigami.Units.gridUnit * 40
signal requestOpen()
Rectangle {
id: miniProgressBar
z: 1
visible: !root.isWidescreen
anchors.top: parent.top
anchors.left: parent.left
height: root.progressBarHeight
@@ -36,14 +38,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 {
@@ -76,12 +78,10 @@ Item {
Kirigami.Theme.colorSet: Kirigami.Theme.Complementary
Kirigami.Theme.inherit: false
}
}
// track information
ColumnLayout {
Layout.fillWidth: true
Layout.fillHeight: true
@@ -92,7 +92,6 @@ 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
@@ -113,16 +112,14 @@ 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
@@ -130,159 +127,85 @@ Item {
onClicked: root.requestOpen()
}
}
}
RowLayout {
visible: root.isWidescreen
Layout.preferredWidth: 0
Layout.fillHeight: true
Layout.fillWidth: true
Layout.leftMargin: Kirigami.Units.largeSpacing
Layout.rightMargin: Kirigami.Units.largeSpacing
spacing: Kirigami.Units.smallSpacing
Label {
Layout.alignment: Qt.AlignVCenter
color: "white"
visible: info.title
text: PlayerUtils.formatTimestamp(audio.position)
}
RowLayout {
id: controlButtonBox
anchors.centerIn: isWidescreen ? parent : null
anchors.right: !isWidescreen ? parent.right : null
anchors.top: parent.top
anchors.bottom: parent.bottom
spacing: 2
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));
}
Label {
color: "white"
visible: info.title && root.isWidescreen
text: PlayerUtils.formatTimestamp(audio.position)
Layout.rightMargin: 20
Behavior on value {
NumberAnimation {
duration: 1000
}
}
}
Label {
Layout.alignment: Qt.AlignVCenter
color: "white"
visible: info.title
text: PlayerUtils.formatTimestamp(audio.duration)
}
}
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()
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
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 {
ToolButton {
id: playPauseButton
implicitHeight: 40
implicitWidth: 60
Layout.fillHeight: !isWidescreen
Layout.preferredHeight: Kirigami.Units.gridUnit * 3
Layout.maximumWidth: height
Layout.preferredWidth: height
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
}
}
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
icon.name: audio.playbackState === Audio.PlayingState ? "media-playback-pause" : "media-playback-start"
icon.width: Kirigami.Units.gridUnit
icon.height: Kirigami.Units.gridUnit
icon.color: "white"
Kirigami.Theme.colorSet: Kirigami.Theme.Complementary
Kirigami.Theme.inherit: false
}
ToolButton {
id: skipForwardButton
Layout.rightMargin: Math.floor(Kirigami.Units.smallSpacing / 2)
Layout.preferredHeight: Kirigami.Units.gridUnit * 3
Layout.maximumWidth: height
Layout.preferredWidth: height
enabled: UserPlaylistModel.canSkip
onClicked: UserPlaylistModel.next()
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
icon.name: "media-skip-forward"
icon.width: Kirigami.Units.gridUnit
icon.height: Kirigami.Units.gridUnit
icon.color: "white"
Kirigami.Theme.colorSet: Kirigami.Theme.Complementary
Kirigami.Theme.inherit: false
}
}
}
+1 -2
View File
@@ -36,8 +36,7 @@ Kirigami.ScrollablePage {
required property string title
required property string videoId
required property var artists
required property string artistsDisplayString
required property string artists
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 / 4
readonly property int progressBarHeight: Kirigami.Units.gridUnit / 6
readonly property int minimizedPlayerContentHeight: Math.round(Kirigami.Units.gridUnit * 3.5)
readonly property int minimizedPlayerHeight: minimizedPlayerContentHeight + progressBarHeight
@@ -158,8 +158,8 @@ Flickable {
layer.effect: HueSaturation {
cached: true
lightness: -0.7
saturation: 3
lightness: -0.5
saturation: 1.9
layer.enabled: true
layer.effect: FastBlur {
+11 -7
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.height
to: searchField.heigth
}
NumberAnimation on width{
id: playCloseWidth
@@ -203,6 +203,9 @@ Item {
to: -0
}
contentItem: ColumnLayout{
id: content
width: parent.width
@@ -221,8 +224,6 @@ Item {
Controls.ScrollView {
id: mainScrollView
clip: true
Layout.fillHeight: true
Layout.fillWidth: true
@@ -298,6 +299,8 @@ Item {
filterRegularExpression: searchField.filterExpression
}
delegate: Kirigami.AbstractListItem {
required property string query
id: completionDelegate
highlighted: focus
Kirigami.Theme.colorSet: Kirigami.Theme.Window
@@ -313,7 +316,7 @@ Item {
color: Kirigami.Theme.disabledTextColor
}
Controls.Label{
text: model.display
text: query
Layout.fillWidth: true
}
Controls.ToolButton {
@@ -321,13 +324,13 @@ Item {
text: i18n("remove from search history")
display: Controls.AbstractButton.IconOnly
onClicked: {
Library.removeSearch(model.display)
Library.removeSearch(query)
}
}
}
onClicked: {
searchField.text = model.display
searchField.text = query
searchField.accepted()
}
}
@@ -336,4 +339,5 @@ Item {
}
}
}
}
+12 -14
View File
@@ -150,28 +150,26 @@ 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
+7 -10
View File
@@ -58,16 +58,13 @@ Item {
videoId: drawer.videoId
}
Rectangle {
Layout.margins: 5
radius:50
Layout.alignment: Qt.AlignHCenter
color: Kirigami.Theme.textColor
opacity: 0.7
width: 40
height: 4
}
// Kirigami.Icon {
// Layout.margins: Kirigami.Units.smallSpacing
// source: "arrow-down"
// implicitWidth: Kirigami.Units.gridUnit
// implicitHeight: Kirigami.Units.gridUnit
// Layout.alignment: Qt.AlignHCenter
// }
RowLayout {
spacing: 10
Kirigami.ShadowedRectangle {
+17 -16
View File
@@ -62,23 +62,24 @@ 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()
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()
anchors.left: back.right
visible: wideScreen
}
// spacer
+33 -106
View File
@@ -40,8 +40,7 @@ Library &Library::instance()
FavouritesModel *Library::favourites()
{
auto future = m_database->getResults<Song>("select * from favourites natural join songs order by favourites.rowid desc");
return new FavouritesModel(std::move(future), this);
return new FavouritesModel(this);
}
void Library::addFavourite(const QString &videoId, const QString &title, const QString &artist, const QString &album)
@@ -66,7 +65,7 @@ FavouriteWatcher *Library::favouriteWatcher(const QString &videoId)
SearchHistoryModel *Library::searches()
{
return new SearchHistoryModel(m_database->getResults<SingleValue<QString>>("select distinct (search_query) from searches order by search_id desc"), this);
return new SearchHistoryModel(this);
}
void Library::addSearch(const QString &text)
@@ -81,8 +80,7 @@ void Library::removeSearch(const QString &text)
PlaybackHistoryModel *Library::playbackHistory()
{
auto future = m_database->getResults<PlayedSong>("select * from played_songs natural join songs");
return new PlaybackHistoryModel(std::move(future), this);
return new PlaybackHistoryModel(this, PlaybackHistoryModel::History);
}
void Library::addPlaybackHistoryItem(const QString &videoId, const QString &title, const QString &artist, const QString &album)
@@ -110,8 +108,7 @@ WasPlayedWatcher *Library::wasPlayedWatcher(const QString& videoId)
PlaybackHistoryModel *Library::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);
return new PlaybackHistoryModel(this, PlaybackHistoryModel::MostPlayed);
}
QNetworkAccessManager &Library::nam()
@@ -171,93 +168,35 @@ void ThumbnailSource::setVideoId(const QString &id) {
});
}
PlaybackHistoryModel::PlaybackHistoryModel(QFuture<std::vector<PlayedSong> > &&songs, QObject *parent)
: QAbstractListModel(parent)
PlaybackHistoryModel::PlaybackHistoryModel(Library *library, Type type)
: AutoListModel<PlayedSong>(library)
{
connectFuture(songs, this, [this](const auto songs) {
beginResetModel();
m_playedSongs = songs;
endResetModel();
});
}
QHash<int, QByteArray> PlaybackHistoryModel::roleNames() const {
return {
{Roles::VideoId, "videoId"},
{Roles::Title, "title"},
{Roles::Artists, "artists"},
{Roles::ArtistsDisplayString, "artistsDisplayString"},
{Roles::Plays, "plays"}
};
}
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(),
{}
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");
}
});
case Roles::ArtistsDisplayString:
return m_playedSongs.at(index.row()).artist;
case Roles::Plays:
return m_playedSongs.at(index.row()).plays;
}
}();
Q_UNREACHABLE();
connectFuture(future, this, &PlaybackHistoryModel::updateData);
};
update();
connect(library, &Library::playbackHistoryChanged, this, update);
}
FavouritesModel::FavouritesModel(QFuture<std::vector<Song>> &&songs, QObject *parent)
: QAbstractListModel(parent)
FavouritesModel::FavouritesModel(Library *library)
: AutoListModel<Song>(library)
{
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"}
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);
};
}
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();
update();
connect(library, &Library::favouritesChanged, this, update);
}
FavouriteWatcher::FavouriteWatcher(Library *library, const QString &videoId)
@@ -279,27 +218,15 @@ bool FavouriteWatcher::isFavourite() const {
return m_isFavourite;
}
SearchHistoryModel::SearchHistoryModel(QFuture<std::vector<SingleValue<QString>>> &&historyFuture, QObject *parent)
: QAbstractListModel(parent)
SearchHistoryModel::SearchHistoryModel(Library *library)
: AutoListModel<SearchQuery>(library)
{
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();
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);
}
WasPlayedWatcher::WasPlayedWatcher(Library* library, const QString& videoId)
+56 -51
View File
@@ -15,10 +15,22 @@
#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) {
@@ -26,34 +38,26 @@ struct Song {
return Song {videoId, title, artist, album};
}
QString videoId;
QString title;
QString artist;
QString album;
Attribute<u"videoId", QString> videoId;
Attribute<u"title", QString> title;
Attribute<u"artists", QString> artists;
Attribute<u"album", QString> album;
};
class FavouritesModel : public QAbstractListModel {
class Library;
class FavouritesModel : public AutoListModel<Song> {
Q_OBJECT
enum Roles {
VideoId = Qt::UserRole + 1,
Title,
Artists,
ArtistsDisplayString
};
public:
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;
FavouritesModel(Library *library);
};
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) {
@@ -61,55 +65,56 @@ struct PlayedSong {
return PlayedSong {videoId, title, artist, album, plays};
}
QString videoId;
QString title;
QString artist;
QString album;
int 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;
};
class PlaybackHistoryModel : public QAbstractListModel {
class PlaybackHistoryModel : public AutoListModel<PlayedSong> {
Q_OBJECT
public:
enum Roles {
VideoId = Qt::UserRole + 1,
Title,
Artists,
ArtistsDisplayString,
Plays
enum Type {
MostPlayed,
History
};
Q_ENUM(Roles);
PlaybackHistoryModel(QFuture<std::vector<PlayedSong>> &&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<PlayedSong> m_playedSongs;
PlaybackHistoryModel(Library *library, Type type);
};
class SearchHistoryModel : public QAbstractListModel {
class SearchQuery {
DESERT_OBJECT
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(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;
SearchHistoryModel(Library *library);
private:
std::vector<SingleValue<QString>> m_history;
std::vector<SearchQuery> m_history;
};
class Library : public QObject
{
Q_OBJECT
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)
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)
public:
explicit Library(QObject *parent = nullptr);
+1 -22
View File
@@ -38,25 +38,7 @@ Q_DECL_EXPORT int main(int argc, char *argv[])
KLocalizedString::setApplicationDomain("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")));
KAboutData::setApplicationData(KAboutData(QStringLiteral("audiotube"), QStringLiteral("AudioTube")));
KCrash::initialize();
QQmlApplicationEngine engine;
@@ -69,9 +51,6 @@ 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_impl(Tuple &tup, Func fun)
inline constexpr void iterate_tuple_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_impl<Tuple, Func, i + 1>(tup, fun);
return iterate_tuple_impl<Tuple, Func, i + 1>(tup, fun);
}
}
template <typename Tuple, typename Func>
inline constexpr void iterate_tuple(Tuple &tup, Func fun)
{
iterate_impl<Tuple, Func, 0>(tup, fun);
iterate_tuple_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,7 +11,6 @@
class PlayerUtils : public QObject
{
Q_OBJECT
public:
explicit PlayerUtils(QObject *parent = nullptr);
-3
View File
@@ -26,8 +26,5 @@ 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
@@ -1,93 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 7.1 KiB

-121
View File
@@ -1,121 +0,0 @@
<?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>

Before

Width:  |  Height:  |  Size: 8.9 KiB

+475
View File
@@ -0,0 +1,475 @@
/****************************************************************************
** 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,20 +129,6 @@ 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;
@@ -155,8 +141,6 @@ void UserPlaylistModel::setCurrentVideoId(const QString &videoId)
emitCurrentVideoChanged(old);
Q_EMIT currentVideoIdChanged();
Q_EMIT canSkipChanged();
Q_EMIT canSkipBackChanged();
}
int UserPlaylistModel::currentIndex() const
@@ -180,32 +164,12 @@ 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)
@@ -215,8 +179,6 @@ 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)
@@ -237,8 +199,6 @@ void UserPlaylistModel::playNext(const QString &videoId, const QString &title, c
endInsertRows();
setCurrentVideoId(videoId);
Q_EMIT canSkipChanged();
Q_EMIT canSkipBackChanged();
return;
}
@@ -248,8 +208,6 @@ 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;
}
@@ -258,8 +216,6 @@ 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)
@@ -286,8 +242,6 @@ void UserPlaylistModel::clear()
setCurrentVideoId({});
Q_EMIT canSkipChanged();
Q_EMIT canSkipBackChanged();
}
void UserPlaylistModel::remove(const QString &videoId)
@@ -305,8 +259,6 @@ void UserPlaylistModel::remove(const QString &videoId)
endRemoveRows();
Q_EMIT canSkipChanged();
Q_EMIT canSkipBackChanged();
}
void UserPlaylistModel::shufflePlaylist()
-8
View File
@@ -23,7 +23,6 @@ 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:
@@ -47,7 +46,6 @@ public:
Q_SIGNAL void initialVideoIdChanged();
QString nextVideoId() const;
QString previousVideoId() const;
QString currentVideoId() const;
void setCurrentVideoId(const QString &videoId);
@@ -56,11 +54,7 @@ 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);
@@ -74,8 +68,6 @@ 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);
+4 -13
View File
@@ -35,18 +35,18 @@ struct UNEXPORT YTMusicPrivate {
py::object get_ytmusic() {
if (ytmusic.is_none()) {
ytmusicapi_module = py::module::import("ytmusicapi");
ytmusic = ytmusicapi_module.attr("YTMusic")(auth, user, requests_session, proxies, language);
const auto module = py::module::import("ytmusicapi");
ytmusic = 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 = ytmusicapi_module.attr("__dict__").contains("_version");
auto oldVersion = 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 = ytmusicapi_module.attr("__version__").cast<std::string>();
const auto version = 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,9 +66,6 @@ struct UNEXPORT YTMusicPrivate {
return ytdl;
}
public:
py::module ytmusicapi_module;
private:
py::object ytmusic = py::none();
py::object ytdl = py::none();
@@ -510,9 +507,3 @@ 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,8 +319,6 @@ public:
Lyrics get_lyrics(const std::string &browse_id) const;
std::string get_version() const;
// TODO wrap more methods
private: