Compare commits

...
Author SHA1 Message Date
Mathis Brüchert 590a219f22 redesign drawer 2023-02-03 13:20:06 +01:00
Theophile Gilgien e68ff6d01c add a volume slider in maximized player 2023-02-03 13:06:00 +01:00
Jonah Brüchert d5fcee258e SearchWithDropdown: Enable clipping the list view 2023-02-03 13:01:57 +01:00
l10n daemon script d0bf9ecb99 GIT_SILENT Sync po/docbooks with svn 2023-02-03 02:37:32 +00:00
l10n daemon script 068071d263 GIT_SILENT Sync po/docbooks with svn 2023-01-31 02:24:26 +00:00
Carl Schwan e9064602a6 Move AudioTube to the release service
See https://invent.kde.org/sysadmin/release-tools/-/merge_requests/27

Signed-off-by: Carl Schwan <[email protected]>
2023-01-30 20:04:50 +01:00
l10n daemon script 71f574fce9 GIT_SILENT Sync po/docbooks with svn 2023-01-30 02:44:21 +00:00
Theophile Gilgien c2a7a9742f reenable scrolling of past search queries 2023-01-29 16:20:13 +01:00
l10n daemon script 38a1018817 GIT_SILENT Sync po/docbooks with svn 2023-01-29 02:33:27 +00:00
l10n daemon script 58d877a1e6 GIT_SILENT Sync po/docbooks with svn 2023-01-28 02:31:44 +00:00
Carl Schwan ea97b5a3f2 Bump to 23.01
Signed-off-by: Carl Schwan <[email protected]>
2023-01-27 20:47:58 +01:00
l10n daemon script ea5085bfc7 GIT_SILENT Sync po/docbooks with svn 2023-01-27 02:23:52 +00:00
Theophile Gilgien 26dd42bf0d introduce possibility to remove search from history
This feature allows the user to remove past search queries, complementing the recent feature to remove a song from playback history.
2023-01-26 14:25:42 +00:00
l10n daemon script 8a5e0a26f9 GIT_SILENT Sync po/docbooks with svn 2023-01-26 02:14:48 +00:00
l10n daemon script 6b22eb5af0 GIT_SILENT Sync po/docbooks with svn 2023-01-25 02:33:30 +00:00
Jonah Brüchert cbafceb01e Add index property to delegates
The Kirigami list items depend on this property to exist, but it only
exists by default when using the old model API, which we don't.
2023-01-24 14:25:54 +01:00
l10n daemon script 843325d6c7 GIT_SILENT Sync po/docbooks with svn 2023-01-24 02:28:54 +00:00
l10n daemon script 11a1ce02a8 GIT_SILENT Sync po/docbooks with svn 2023-01-23 02:16:32 +00:00
Mathis Brüchert 8bc3012eb4 remove custom shaders 2023-01-23 00:54:41 +01:00
Mathis Brüchert e108ec5105 show song information in Drawer 2023-01-22 23:46:24 +00:00
l10n daemon script 57b1c07c33 GIT_SILENT Sync po/docbooks with svn 2023-01-22 02:32:45 +00:00
Jonah Brüchert f07076910a Update tested ytmusicapi version to 0.25.0 2023-01-21 17:20:13 +01:00
Mathis Brüchert ce74b42e3e make menu always visible on mobile
Previously, the menu button was hidden behind a swipe gesture + button,
which is redundant.
2023-01-21 16:36:28 +01:00
Jonah Brüchert 47e4831bca Library: Only create one SongMenu instance 2023-01-21 16:33:12 +01:00
Mathis Brüchert 1a15e1578f remove hard coded numbers 2023-01-21 12:39:15 +01:00
Mathis Brüchert 94e8fce0f2 make dropdown visually prettier 2023-01-21 11:36:52 +01:00
Jonah Brüchert e40b9f6e10 Adapt to youtube changes 2023-01-21 11:08:18 +01:00
l10n daemon script e44182ee71 GIT_SILENT Sync po/docbooks with svn 2023-01-21 02:19:52 +00:00
Theophile Gilgien e1a32deb01 introduce possibility to remove songs from history
The part to hide the context menu entry when the song isn't in the
history does not yet work, as the call to Library::wasPlayedWatcher()
and FavouriteWatcher::wasPlayed() from SongMenu.qml don't work.
2023-01-21 00:16:17 +01:00
l10n daemon script 9261999563 GIT_SILENT Sync po/docbooks with svn 2023-01-16 02:29:33 +00:00
Jonah Brüchert 1f5ed15cb9 flatpak: Update pybind11 2023-01-15 12:08:00 +01:00
Jonah Brüchert 49ad94e2f8 flatpak: Update dependencies 2023-01-15 12:04:46 +01:00
l10n daemon script faad08c203 GIT_SILENT Sync po/docbooks with svn 2023-01-14 17:50:33 +00:00
l10n daemon script 4237746082 GIT_SILENT Sync po/docbooks with svn 2023-01-13 03:19:39 +00:00
l10n daemon script 989cecaf64 GIT_SILENT Sync po/docbooks with svn 2023-01-11 02:28:50 +00:00
Jonah Brüchert a6e3220054 SongMenu: Fix typo 2023-01-10 19:06:36 +01:00
Mathis Brüchert 0095677485 blur sidebar 2023-01-10 16:23:05 +01:00
l10n daemon script 311111f7d8 GIT_SILENT Sync po/docbooks with svn 2023-01-10 02:21:39 +00:00
Mathis Brüchert 1c590dd38c Clear page stack before pushing pages from the sidebar
Avoids the situation in which multiple pages are open, and only the last
one is replaced, allowing to go back from the library.
The library page should strictly be the home page.
2023-01-09 23:54:26 +01:00
l10n daemon script 4d4dc7e8ca GIT_SILENT Sync po/docbooks with svn 2023-01-09 02:22:51 +00:00
l10n daemon script df7e69db9f GIT_SILENT Sync po/docbooks with svn 2023-01-08 02:26:43 +00:00
Mathis Brüchert d6f53b7485 remove double header 2023-01-07 03:40:36 +01:00
l10n daemon script 8e8fe9871c GIT_SILENT Sync po/docbooks with svn 2023-01-05 02:31:29 +00:00
l10n daemon script 9887e6cbc0 GIT_SILENT Sync po/docbooks with svn 2023-01-04 03:07:06 +00:00
l10n daemon script 62ec82a85a GIT_SILENT made messages (after extraction) 2023-01-04 00:51:25 +00:00
l10n daemon script bae859ff7c GIT_SILENT Sync po/docbooks with svn 2023-01-03 03:31:00 +00:00
l10n daemon script 443183d4cd GIT_SILENT made messages (after extraction) 2023-01-03 00:50:01 +00:00
l10n daemon script f762a6d8c1 GIT_SILENT Sync po/docbooks with svn 2023-01-01 03:09:19 +00:00
l10n daemon script 4c30f20fed GIT_SILENT Sync po/docbooks with svn 2022-12-31 02:23:10 +00:00
Jonah Brüchert 1faa7a13fc flatpak: Update runtime to 5.15-22.08 2022-12-30 18:50:34 +01:00
l10n daemon script b7438cd452 GIT_SILENT Sync po/docbooks with svn 2022-12-30 10:05:49 +00:00
l10n daemon script 387ea1153a GIT_SILENT Sync po/docbooks with svn 2022-12-30 02:45:28 +00:00
Mathis Brüchert d42138cc87 add right padding to scroll Views 2022-12-29 17:35:33 +01:00
Mathis Brüchert b64e23a4ce make title change color on hover 2022-12-29 16:23:29 +01:00
Jonah Brüchert 5b717c468b Make it impossible to open the menu drawer by swiping
When this was done, the drawer was not connected to any list item, and
of course didn't work.
2022-12-29 16:16:59 +01:00
Jonah Brüchert a277a5cfa1 Remove stray debug 2022-12-29 14:04:11 +01:00
Jonah Brüchert 2bcc2b4622 Fix displaying artists in history page 2022-12-29 14:00:17 +01:00
Mathis Brüchert 226d187275 add Sidebar 2022-12-29 13:58:36 +01:00
Mathis Brüchert 72148cb630 add new scrennshots to appdata file 2022-12-29 12:43:43 +01:00
Jonah Brüchert 58abc9d38a Fix warning about unused typedef 2022-12-28 16:05:04 +01:00
Jonah Brüchert d166a66797 Support ytmusicapi 0.24.1 2022-12-28 16:02:14 +01:00
Jonah Brüchert 81e7627ad1 Add flatpak CI 2022-12-28 15:52:10 +01:00
l10n daemon script 28f821e482 GIT_SILENT Sync po/docbooks with svn 2022-12-28 02:24:45 +00:00
l10n daemon script 832674b5b3 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2022-12-28 02:03:08 +00:00
l10n daemon script 28ff9be4ac GIT_SILENT made messages (after extraction) 2022-12-28 00:51:42 +00:00
l10n daemon script 89255083b9 GIT_SILENT Sync po/docbooks with svn 2022-12-25 03:09:09 +00:00
l10n daemon script 3a8788896f GIT_SILENT Sync po/docbooks with svn 2022-12-24 02:18:19 +00:00
Jonah Brüchert 22d5667995 Fix blurry album covers 2022-12-23 22:41:36 +01:00
Jonah Brüchert bdfb92a736 Fix passing artists to the menu 2022-12-23 22:38:32 +01:00
Mathis Brüchert 4e3da60708 disable horizontal scralling making touch gestures work with lyrics 2022-12-23 17:27:39 +00:00
Mathis Brüchert f7d5d31108 move menu to a drawer when on mobile 2022-12-23 17:27:00 +00:00
l10n daemon script 1d11e11ee6 GIT_SILENT Sync po/docbooks with svn 2022-12-23 02:14:58 +00:00
l10n daemon script d14e1189f2 GIT_SILENT Sync po/docbooks with svn 2022-12-21 02:15:43 +00:00
Mathis Brüchert 378abb7d4b animate play symbol on hover 2022-12-20 16:12:44 +00:00
l10n daemon script 51d330e6f3 GIT_SILENT Sync po/docbooks with svn 2022-12-17 12:37:10 +00:00
l10n daemon script 3963eb41ce GIT_SILENT Sync po/docbooks with svn 2022-12-14 03:07:31 +00:00
l10n daemon script af12a936d6 GIT_SILENT Sync po/docbooks with svn 2022-12-12 02:34:17 +00:00
Devin Lin cc6661321d Fix list entries from going over the media player 2022-12-11 15:47:41 +00:00
Jonah Brüchert e70a8689bb Make tab list overflow on small screen 2022-12-11 16:10:11 +01:00
l10n daemon script 6511812f2e GIT_SILENT Sync po/docbooks with svn 2022-12-05 02:11:50 +00:00
l10n daemon script 668642d893 GIT_SILENT Sync po/docbooks with svn 2022-12-04 02:10:46 +00:00
l10n daemon script 151281f58c GIT_SILENT Sync po/docbooks with svn 2022-12-03 02:17:48 +00:00
Jonah Brüchert f01057a244 Don't allow building with old ytmusicapi versions
Apparently nobody looks at requirements.txt, so make this fail more
obviously.

As for why this is needed, ytmusicapi doesn't have a stable API, and
that means every time we adapt to a new version, old versions can break.
Having python backtraces thrown into the user's face would be a bad user
experience, so try to make sure packagers don't forget to update it.
2022-12-03 01:59:52 +01:00
l10n daemon script e494a6f1a6 GIT_SILENT Sync po/docbooks with svn 2022-12-02 03:18:23 +00:00
l10n daemon script b43d967f69 GIT_SILENT made messages (after extraction) 2022-12-02 00:49:05 +00:00
l10n daemon script 6b94a459de GIT_SILENT Sync po/docbooks with svn 2022-12-01 02:10:45 +00:00
Jonah Brüchert 1109b81870 Don't try to fetch lyrics when no track is playing
This can happen if the playlist ran through
2022-11-30 17:20:13 +01:00
Jonah Brüchert 9f404d37f6 Optimize memory usage 2022-11-30 17:17:54 +01:00
Bhushan Shah 32be492e82 Update version number for 22.11
GIT_SILENT
2022-11-30 13:26:50 +05:30
l10n daemon script c4de93e4d1 GIT_SILENT Sync po/docbooks with svn 2022-11-30 02:11:45 +00:00
l10n daemon script e5c817b955 GIT_SILENT Sync po/docbooks with svn 2022-11-29 02:14:35 +00:00
l10n daemon script cc2dcd1abb GIT_SILENT Sync po/docbooks with svn 2022-11-28 02:15:39 +00:00
Jonah Brüchert 4b343157a2 Use JavaScript arrow function syntax 2022-11-28 00:08:53 +01:00
Mathis Brüchert 52f330d6be Redesign browsing pages 2022-11-27 19:32:36 +01:00
Jonah Brüchert 435d530b14 Use Kirigami.DelegateRecycler in quick search repeater
I'm not 100% sure how much this will help here, but on my tablet the
frequent allocation of objects while filtering creates a noticable
delay, so let's see if this helps.
2022-11-27 19:26:31 +01:00
l10n daemon script a2d1288e06 GIT_SILENT Sync po/docbooks with svn 2022-11-27 02:07:37 +00:00
l10n daemon script 72500ef1a8 GIT_SILENT Sync po/docbooks with svn 2022-11-26 02:08:12 +00:00
l10n daemon script 6e67e63c32 GIT_SILENT Sync po/docbooks with svn 2022-11-25 02:15:14 +00:00
l10n daemon script 634ccf7835 GIT_SILENT Sync po/docbooks with svn 2022-11-24 02:09:19 +00:00
l10n daemon script da6363d6cc GIT_SILENT Sync po/docbooks with svn 2022-11-23 02:22:26 +00:00
Jonah Brüchert 0447eb3ca2 Fix alignment of local search results 2022-11-22 23:25:10 +01:00
Jonah Brüchert d49addb1ae Fix separator visibility logic 2022-11-22 23:16:59 +01:00
Jonah Brüchert bade37f9f2 Improve popup layout 2022-11-22 23:14:52 +01:00
Jonah Brüchert 5581c9f8e9 Fix separator being displayed in the wrong place 2022-11-22 22:51:03 +01:00
Jonah Brüchert 342984283c Wrap Queue in a ScrollView
This improves the scroll behaviour on the desktop a lot
2022-11-22 22:46:24 +01:00
Mathis Brüchert d313c4b79b clean up player 2022-11-22 22:35:53 +01:00
Mathis Brüchert eb3bb80669 add play icon when hovereing over library entries 2022-11-22 22:33:20 +01:00
Jonah Brüchert c56bbb68f6 Store artist and album of known songs in the database
In the future, this will allow to do better local searching
2022-11-22 18:32:06 +01:00
Jonah Brüchert f5a54fc7e7 Handle thumbnails that are not stored in the guessable location
Currently we just guess the url, which almost always works, but for some
videos (maybe very old ones) it doesn't work.
So for those, we now just invoke yt-dlp to extract the correct url. As
long as this affects only very few videos, it's still fast enough.

AudioTube will print a warning on the console if that happens, to make
it easier to debug when its slow.
2022-11-22 18:01:21 +01:00
Jonah Brüchert f2f653815b search: Display ~2 lines for previously played songs 2022-11-22 17:41:26 +01:00
Jonah Brüchert 4edfc8db71 Fix undefined reference error
The object seems unused
2022-11-22 17:40:52 +01:00
Jonah Brüchert f368c8fd8c resources.qrc: Restore reuse information 2022-11-22 16:43:09 +01:00
Jonah Brüchert a0f7854c52 Factor out the rounded mask code into its own file
Should make it easier to port to Qt6
2022-11-22 16:32:15 +01:00
Jonah BrüchertandMathis Brüchert fb9e17621f Search through played songs as well
Co-authored-by: Mathis Brüchert <[email protected]>
2022-11-22 16:19:03 +01:00
Jonah Brüchert d5b2c2c45c Filter search history while searching 2022-11-21 22:14:54 +01:00
Jonah Brüchert 0e6abff8ff Only display unique search queries 2022-11-21 21:58:35 +01:00
l10n daemon script a762edafc7 GIT_SILENT Sync po/docbooks with svn 2022-11-21 02:10:44 +00:00
l10n daemon script d1bf0c711c GIT_SILENT made messages (after extraction) 2022-11-21 00:48:42 +00:00
l10n daemon script 996322c335 GIT_SILENT Sync po/docbooks with svn 2022-11-20 02:57:06 +00:00
l10n daemon script 54d7c276bf GIT_SILENT Sync po/docbooks with svn 2022-11-19 02:12:55 +00:00
l10n daemon script 234f364b33 GIT_SILENT Sync po/docbooks with svn 2022-11-16 02:31:01 +00:00
l10n daemon script 0d019b9499 GIT_SILENT Sync po/docbooks with svn 2022-11-14 02:14:58 +00:00
l10n daemon script f4d144d53e GIT_SILENT Sync po/docbooks with svn 2022-11-13 02:11:22 +00:00
l10n daemon script 49bff407ad GIT_SILENT Sync po/docbooks with svn 2022-11-10 02:12:38 +00:00
Mathis Brüchert 1e2df2d6d8 Add more shadows and rounding to album convers 2022-11-09 23:13:48 +01:00
Jonah Brüchert 7c3d83704b Clear lyrics when changing the song 2022-11-09 00:31:33 +01:00
l10n daemon script 2796d9be83 GIT_SILENT Sync po/docbooks with svn 2022-11-08 02:07:29 +00:00
l10n daemon script 4233a323b7 GIT_SILENT Sync po/docbooks with svn 2022-11-07 02:58:01 +00:00
l10n daemon script cf5d8df35d GIT_SILENT Sync po/docbooks with svn 2022-11-06 02:09:20 +00:00
Jonah Brüchert 86f16fc7af Library: Add more spacing 2022-11-06 01:03:31 +01:00
Jonah Brüchert 7024e1526f Display lyrics 2022-11-05 21:57:17 +01:00
l10n daemon script d2b256f943 GIT_SILENT Sync po/docbooks with svn 2022-11-04 02:09:10 +00:00
Jonah Brüchert dcf1b9df98 search: Display artists 2022-11-03 21:34:23 +01:00
Jonah Brüchert 0f0e8a5974 Also display thumbnails for artists 2022-11-03 21:16:45 +01:00
Jonah Brüchert f703f1e357 Display album covers 2022-11-03 21:01:32 +01:00
Jonah Brüchert 3815759cd3 Make sure not to fail on old ytmusicapi verions by checking for the new-style version 2022-11-03 19:25:35 +01:00
Jonah Brüchert 72242e328c Update flatpak sources 2022-11-03 16:55:03 +01:00
Jonah Brüchert c38805fa92 Support ytmusicapi 0.24 2022-11-03 16:52:39 +01:00
l10n daemon script 1ae12c868e GIT_SILENT Sync po/docbooks with svn 2022-10-31 03:06:45 +00:00
Jonah Brüchert 9f3789eac5 Speed up loading thumbnails
By guessing the url directly instead of going through youtube-dl
2022-10-29 19:14:31 +02:00
l10n daemon script a956177d6a GIT_SILENT Sync po/docbooks with svn 2022-10-29 02:12:40 +00:00
l10n daemon script b900c44188 GIT_SILENT Sync po/docbooks with svn 2022-10-28 02:22:10 +00:00
Devin Lin e521c07102 Update README.md 2022-10-27 03:47:15 +00:00
l10n daemon script e696298bc9 GIT_SILENT Sync po/docbooks with svn 2022-10-25 02:16:20 +00:00
l10n daemon script b65fbe83f4 GIT_SILENT Sync po/docbooks with svn 2022-10-24 02:11:59 +00:00
l10n daemon script ce6782a131 GIT_SILENT Sync po/docbooks with svn 2022-10-23 02:02:07 +00:00
Tobias Fella a37746440a Prepare C++ for Qt6 2022-10-20 20:41:07 +00:00
l10n daemon script eaf62c2770 GIT_SILENT Sync po/docbooks with svn 2022-10-20 03:22:48 +00:00
l10n daemon script 147392f317 GIT_SILENT Sync po/docbooks with svn 2022-10-19 02:10:48 +00:00
l10n daemon script 63d56acd88 GIT_SILENT Sync po/docbooks with svn 2022-10-08 10:57:36 +00:00
l10n daemon script 28d07b370f GIT_SILENT Sync po/docbooks with svn 2022-10-08 02:11:21 +00:00
l10n daemon script d648ba9c93 GIT_SILENT Sync po/docbooks with svn 2022-10-07 02:27:49 +00:00
l10n daemon script a82dae6251 GIT_SILENT Sync po/docbooks with svn 2022-10-04 02:15:30 +00:00
l10n daemon script f99a17339b GIT_SILENT Sync po/docbooks with svn 2022-10-03 03:08:22 +00:00
l10n daemon script 198266c081 GIT_SILENT Sync po/docbooks with svn 2022-10-01 02:02:25 +00:00
l10n daemon script 756c2f8b56 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2022-10-01 01:56:51 +00:00
l10n daemon script abdba9922a GIT_SILENT made messages (after extraction) 2022-10-01 00:50:54 +00:00
l10n daemon script 7ca4095571 GIT_SILENT Sync po/docbooks with svn 2022-09-30 01:53:29 +00:00
l10n daemon script c3128c9855 GIT_SILENT Sync po/docbooks with svn 2022-09-29 01:54:00 +00:00
l10n daemon script 20ae6c37cb GIT_SILENT Sync po/docbooks with svn 2022-09-28 02:03:54 +00:00
l10n daemon script 3c2fdca5fc SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2022-09-28 01:59:38 +00:00
l10n daemon script 395c7ad140 GIT_SILENT made messages (after extraction) 2022-09-28 00:52:28 +00:00
Bhushan Shah 630b54933d GIT_SILENT: bump version to 22.09 2022-09-27 20:20:12 +05:30
l10n daemon script 2293280316 GIT_SILENT Sync po/docbooks with svn 2022-09-25 01:52:51 +00:00
l10n daemon script 14116b9cd2 GIT_SILENT Sync po/docbooks with svn 2022-09-24 01:53:06 +00:00
l10n daemon script 4c7db5d5c9 GIT_SILENT Sync po/docbooks with svn 2022-09-21 01:52:39 +00:00
l10n daemon script f26bc80421 GIT_SILENT Sync po/docbooks with svn 2022-09-12 01:48:30 +00:00
l10n daemon script f934e99254 GIT_SILENT Sync po/docbooks with svn 2022-09-09 01:53:23 +00:00
l10n daemon script b6cd3c4a2b GIT_SILENT Sync po/docbooks with svn 2022-09-04 01:51:30 +00:00
Jonah Brüchert 76763b9be1 Update python dependencies 2022-09-01 23:35:44 +02:00
l10n daemon script 1606f91124 GIT_SILENT Sync po/docbooks with svn 2022-08-31 01:47:29 +00:00
l10n daemon script cf8c982228 GIT_SILENT Sync po/docbooks with svn 2022-08-30 01:49:27 +00:00
l10n daemon script e94362854d GIT_SILENT Sync po/docbooks with svn 2022-08-29 01:55:05 +00:00
l10n daemon script 40f3d5eab1 GIT_SILENT Sync po/docbooks with svn 2022-08-28 01:49:25 +00:00
l10n daemon script dc3b35bffa GIT_SILENT Sync po/docbooks with svn 2022-08-27 01:57:17 +00:00
Jonah Brüchert 52c654179f Add buttons for opening some pages in the web ui 2022-08-26 21:03:49 +02:00
Jonah Brüchert a07a3c162f Show newer favourites first 2022-08-24 09:31:59 +02:00
Jonah Brüchert e4f8f96517 Fix new unused variable warning on current gcc 12
The warning occurs in a constexpr if, so even though the variable is
used in the function, it may not be after the constexpr ifs are
evaluated.
2022-08-24 09:30:12 +02:00
l10n daemon script 6fdb0321d6 GIT_SILENT Sync po/docbooks with svn 2022-08-21 01:55:06 +00:00
l10n daemon script be9b0d57e9 GIT_SILENT Sync po/docbooks with svn 2022-08-14 01:51:10 +00:00
l10n daemon script b4c6749a76 GIT_SILENT Sync po/docbooks with svn 2022-08-08 01:57:12 +00:00
l10n daemon script a98e3c7b92 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2022-08-08 01:51:52 +00:00
l10n daemon script 26e7bbbdb8 GIT_SILENT made messages (after extraction) 2022-08-08 00:48:13 +00:00
l10n daemon script efa7dd674a GIT_SILENT Sync po/docbooks with svn 2022-08-07 01:54:32 +00:00
l10n daemon script ef59e9d418 GIT_SILENT Sync po/docbooks with svn 2022-07-31 01:57:02 +00:00
l10n daemon script e1678a76ba GIT_SILENT Sync po/docbooks with svn 2022-07-23 01:54:34 +00:00
Jonah Brüchert 56ffb52ce5 flatpak: Update python packages 2022-07-19 15:16:41 +02:00
l10n daemon script f0a2d2e79a GIT_SILENT Sync po/docbooks with svn 2022-07-19 01:45:53 +00:00
l10n daemon script 182e77a68d GIT_SILENT Sync po/docbooks with svn 2022-07-17 01:52:45 +00:00
Jonah Brüchert 98ccbfe99d ytmusic: Include iostream
Previously this was not necessary, but now it fails to compile.
I suspect this to be related to a gcc update.
2022-07-16 19:31:40 +02:00
l10n daemon script 53bfc641b4 GIT_SILENT Sync po/docbooks with svn 2022-07-15 01:54:45 +00:00
l10n daemon script 1aabf2eefc GIT_SILENT Sync po/docbooks with svn 2022-07-14 01:58:13 +00:00
l10n daemon script 0d54dfb660 GIT_SILENT Sync po/docbooks with svn 2022-07-12 01:55:23 +00:00
Jonah Brüchert 8093f16f16 player: Set text directly on label instead of on the button
I suspect this to be the cause of the duplicated label. However I'm not
fully certain this fixes it. Please re-open the bug if the issue
persists.

BUG: 456597
2022-07-11 22:16:16 +02:00
Jonah Brüchert bac6ac3362 (very) minor database optimization 2022-07-11 22:09:59 +02:00
Jonah Brüchert 2f914d9f60 appstream: Add library screenshot 2022-07-11 15:44:12 +02:00
l10n daemon script d3293d22ab GIT_SILENT Sync po/docbooks with svn 2022-07-11 01:55:30 +00:00
l10n daemon script 4de3fdae81 GIT_SILENT Sync po/docbooks with svn 2022-07-10 01:57:26 +00:00
l10n daemon script 9518c73415 GIT_SILENT Sync po/docbooks with svn 2022-07-09 01:56:21 +00:00
l10n daemon script 05be539411 GIT_SILENT Sync po/docbooks with svn 2022-07-03 02:04:59 +00:00
l10n daemon script f12c4e3109 GIT_SILENT Sync po/docbooks with svn 2022-06-28 01:48:54 +00:00
l10n daemon script 004ef28a15 GIT_SILENT Sync po/docbooks with svn 2022-06-26 01:47:08 +00:00
l10n daemon script afa9b25aff GIT_SILENT Sync po/docbooks with svn 2022-06-25 02:06:45 +00:00
Bhushan Shah 303ce7c816 GIT_SILENT: bump version to 22.06 2022-06-23 21:11:20 +05:30
l10n daemon script e7cbd07b80 GIT_SILENT Sync po/docbooks with svn 2022-06-20 02:02:25 +00:00
l10n daemon script 923ae5fc96 GIT_SILENT Sync po/docbooks with svn 2022-06-18 01:47:06 +00:00
l10n daemon script 51a3b3c68e GIT_SILENT Sync po/docbooks with svn 2022-06-17 01:46:44 +00:00
l10n daemon script ef1582c67c GIT_SILENT Sync po/docbooks with svn 2022-06-16 02:01:08 +00:00
l10n daemon script 2091e39b90 GIT_SILENT Sync po/docbooks with svn 2022-06-13 02:49:49 +00:00
l10n daemon script ab02e72f1f GIT_SILENT Sync po/docbooks with svn 2022-06-12 01:50:20 +00:00
l10n daemon script d498d6a407 GIT_SILENT Sync po/docbooks with svn 2022-06-07 02:32:41 +00:00
l10n daemon script 6dc6e9538c GIT_SILENT Sync po/docbooks with svn 2022-06-06 01:47:22 +00:00
l10n daemon script 3b0cbefe85 GIT_SILENT Sync po/docbooks with svn 2022-06-05 01:48:47 +00:00
l10n daemon script 38e152fc52 GIT_SILENT Sync po/docbooks with svn 2022-06-04 01:49:02 +00:00
l10n daemon script 0f111b43be GIT_SILENT Sync po/docbooks with svn 2022-06-01 02:04:45 +00:00
l10n daemon script ffbeab0b14 GIT_SILENT Sync po/docbooks with svn 2022-05-30 01:48:55 +00:00
Jonah Brüchert 8860b62eec PlaybackHistory: Load album covers asynchronously 2022-05-30 00:52:05 +02:00
l10n daemon script 93433d8714 GIT_SILENT Sync po/docbooks with svn 2022-05-29 01:50:37 +00:00
l10n daemon script 211a0c6f93 GIT_SILENT Sync po/docbooks with svn 2022-05-28 02:33:52 +00:00
Jonah Brüchert aadfc71200 Fix crash on exit 2022-05-28 00:31:22 +02:00
l10n daemon script 1532adedb1 GIT_SILENT Sync po/docbooks with svn 2022-05-27 01:47:15 +00:00
Jonah Brüchert 16ce656201 Remove QT_QML_DEBUG 2022-05-26 14:26:46 +02:00
l10n daemon script a398723bdb GIT_SILENT Sync po/docbooks with svn 2022-05-26 01:47:23 +00:00
Jonah Brüchert f7a4788e73 Fix opening the 'Leoniden' artist page 2022-05-25 23:12:20 +02:00
Jonah Brüchert 15425c7b01 Use std::invoke_result_t to simplify template code 2022-05-25 23:00:22 +02:00
Jonah Brüchert 96c2a505a7 Fix up previous commit 2022-05-25 23:00:22 +02:00
Jonah Brüchert b58e3fc2d4 Allow to show all favourites / history as a list 2022-05-25 22:36:06 +02:00
Jonah Brüchert 4b1cbf11ad Display AudioTube label just on mobile, and move the search bar back to the center 2022-05-25 15:33:35 +02:00
Devin Lin 1037ac8c02 app header: Move search bar to side, add app header, add search button for mobile 2022-05-25 15:33:32 +02:00
l10n daemon script 572f3c4c94 GIT_SILENT Sync po/docbooks with svn 2022-05-25 01:52:03 +00:00
Devin Lin e48d6c8bb6 Add loading indicator to minimized bar when loading track 2022-05-24 14:52:20 +00:00
l10n daemon script d717e7dff9 GIT_SILENT Sync po/docbooks with svn 2022-05-24 01:50:35 +00:00
83 changed files with 9328 additions and 3040 deletions

No files matched your search

+1
View File
@@ -0,0 +1 @@
org.kde.audiotube.json
+2 -1
View File
@@ -3,4 +3,5 @@
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL # SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
include: include:
- 'https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/reuse-lint.yml' - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/reuse-lint.yml
- https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/flatpak.yml
+10 -5
View File
@@ -4,11 +4,16 @@
cmake_minimum_required(VERSION 3.16.0) cmake_minimum_required(VERSION 3.16.0)
project(audiotube) # KDE Applications version, managed by release script.
set(RELEASE_SERVICE_VERSION_MAJOR "23")
set(RELEASE_SERVICE_VERSION_MINOR "03")
set(RELEASE_SERVICE_VERSION_MICRO "70")
set(RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}")
project(audiotube VERSION ${RELEASE_SERVICE_VERSION})
include(FeatureSummary) include(FeatureSummary)
set(PROJECT_VERSION "22.04")
set(QT5_MIN_VERSION 5.15) set(QT5_MIN_VERSION 5.15)
set(KF5_MIN_VERSION 5.81) set(KF5_MIN_VERSION 5.81)
@@ -33,11 +38,11 @@ ecm_setup_version(${PROJECT_VERSION}
kde_enable_exceptions() kde_enable_exceptions()
find_package(Qt5 ${QT5_MIN_VERSION} REQUIRED COMPONENTS Core Gui Qml QuickControls2 Svg Sql) find_package(Qt${QT_MAJOR_VERSION} ${QT5_MIN_VERSION} REQUIRED COMPONENTS Core Gui Qml QuickControls2 Svg Sql Widgets)
find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS Kirigami2 I18n CoreAddons Crash) find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS Kirigami2 I18n CoreAddons Crash WindowSystem)
find_package(pybind11 REQUIRED) find_package(pybind11 REQUIRED)
find_package(Ytdlp REQUIRED RUNTIME) find_package(Ytdlp REQUIRED RUNTIME)
find_package(YTMusicAPI REQUIRED RUNTIME) find_package(YTMusicAPI 0.24.0 REQUIRED RUNTIME)
ki18n_install(po) ki18n_install(po)
+6
View File
@@ -2,6 +2,12 @@
AudioTube is a client for YouTube Music. AudioTube is a client for YouTube Music.
<a href='https://flathub.org/apps/details/org.kde.audiotube'><img width='190px' alt='Download on Flathub' src='https://flathub.org/assets/badges/flathub-badge-i-en.png'/></a>
## Links
* Project page: https://invent.kde.org/plasma-mobile/audiotube
* File issues: https://bugs.kde.org/describecomponents.cgi?product=audiotube
# Dependencies # Dependencies
It depends on Qt, Kirigami, KI18n, KCoreAddons and KCrash in addition to a few python packages: It depends on Qt, Kirigami, KI18n, KCoreAddons and KCrash in addition to a few python packages:
+13 -1
View File
@@ -4,8 +4,20 @@
find_package(Python3 REQUIRED COMPONENTS Interpreter) find_package(Python3 REQUIRED COMPONENTS Interpreter)
execute_process(COMMAND ${Python3_EXECUTABLE} -c "import ytmusicapi" RESULT_VARIABLE YTMUSICAPI_CHECK_RESULT) 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)
if (${YTMUSICAPI_CHECK_RESULT} EQUAL 0) if (${YTMUSICAPI_CHECK_RESULT} EQUAL 0)
set(YTMusicAPI_FOUND TRUE) set(YTMusicAPI_FOUND TRUE)
endif() endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(YTMusicAPI
FOUND_VAR
YTMusicAPI_FOUND
REQUIRED_VARS
Python3_EXECUTABLE
VERSION_VAR
YTMusicAPI_VERSION
)
+22 -22
View File
@@ -5,26 +5,6 @@
"pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"yt-dlp\" --no-build-isolation" "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"yt-dlp\" --no-build-isolation"
], ],
"sources": [ "sources": [
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/9a/bf/1bc7e3096ddc2c398b3d04176530a9c02efe08546d9730c9eef0b07a0a43/yt_dlp-2022.5.18-py2.py3-none-any.whl",
"sha256": "deec1009442312c1e2ee5298966842194d0e950b433f0d4fc844ef464b9c32a7"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/11/dd/e015f3780f42dd9af62cf0107b44ea1298926627ecd70c17b0e484e95bcd/certifi-2022.5.18.1-py3-none-any.whl",
"sha256": "f1d53542ee8cbedbe2118b5686372fb33c297fcd6379b050cca0ef13a597382a"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/f8/a3/622d9acbfb9a71144b5d7609906bc648c62e3ca5fdbb1c8cca222949d82c/websockets-10.3.tar.gz",
"sha256": "fc06cc8073c8e87072138ba1e431300e2d408f054b27047d047b549455066ff4"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/16/b3/f7aa8edf2ff4495116f95fd442b2a346aa55d1d46313143c8814886dbcdb/mutagen-1.45.1-py3-none-any.whl",
"sha256": "9c9f243fcec7f410f138cb12c21c84c64fde4195481a30c9bfb05b5f003adfed"
},
{ {
"type": "file", "type": "file",
"url": "https://files.pythonhosted.org/packages/2a/18/70c32fe9357f3eea18598b23aa9ed29b1711c3001835f7cf99a9818985d0/Brotli-1.0.9.zip", "url": "https://files.pythonhosted.org/packages/2a/18/70c32fe9357f3eea18598b23aa9ed29b1711c3001835f7cf99a9818985d0/Brotli-1.0.9.zip",
@@ -32,8 +12,28 @@
}, },
{ {
"type": "file", "type": "file",
"url": "https://files.pythonhosted.org/packages/24/40/e249ac3845a2333ce50f1bb02299ffb766babdfe80ca9d31e0158ad06afd/pycryptodomex-3.14.1.tar.gz", "url": "https://files.pythonhosted.org/packages/71/4c/3db2b8021bd6f2f0ceb0e088d6b2d49147671f25832fb17970e9b583d742/certifi-2022.12.7-py3-none-any.whl",
"sha256": "2ce76ed0081fd6ac8c74edc75b9d14eca2064173af79843c24fa62573263c1f2" "sha256": "4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/03/ee/114d7016d2e34f341e212fefb5e7bd87785077ebcfff0ad23a497c70eea1/mutagen-1.46.0-py3-none-any.whl",
"sha256": "8af0728aa2d5c3ee5a727e28d0627966641fddfe804c23eabb5926a4d770aed5"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/5d/22/575c7dd7c86843e07a791cfa2143e7292d6b380f5a7cce966a49b9d6c9f4/pycryptodomex-3.16.0.tar.gz",
"sha256": "e9ba9d8ed638733c9e95664470b71d624a6def149e2db6cc52c1aca5a6a2df1d"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/85/dc/549a807a53c13fd4a8dac286f117a7a71260defea9ec0c05d6027f2ae273/websockets-10.4.tar.gz",
"sha256": "eef610b23933c54d5d921c92578ae5f89813438fded840c2e9809d378dc765d3"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/a7/49/b49e0ae6fdc959235ecb89a3a5be77dd050493dc30845f89482fb83e38b4/yt_dlp-2023.1.6-py2.py3-none-any.whl",
"sha256": "bcac3231e2022cad128a83f69948c845b364b2a85fde53415378f7c199808849"
} }
] ]
} }
+12 -12
View File
@@ -7,33 +7,33 @@
"sources": [ "sources": [
{ {
"type": "file", "type": "file",
"url": "https://files.pythonhosted.org/packages/ec/03/062e6444ce4baf1eac17a6a0ebfe36bb1ad05e1df0e20b110de59c278498/urllib3-1.26.9-py2.py3-none-any.whl", "url": "https://files.pythonhosted.org/packages/71/4c/3db2b8021bd6f2f0ceb0e088d6b2d49147671f25832fb17970e9b583d742/certifi-2022.12.7-py3-none-any.whl",
"sha256": "44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14" "sha256": "4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"
}, },
{ {
"type": "file", "type": "file",
"url": "https://files.pythonhosted.org/packages/11/dd/e015f3780f42dd9af62cf0107b44ea1298926627ecd70c17b0e484e95bcd/certifi-2022.5.18.1-py3-none-any.whl", "url": "https://files.pythonhosted.org/packages/96/d7/1675d9089a1f4677df5eb29c3f8b064aa1e70c1251a0a8a127803158942d/charset-normalizer-3.0.1.tar.gz",
"sha256": "f1d53542ee8cbedbe2118b5686372fb33c297fcd6379b050cca0ef13a597382a" "sha256": "ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f"
}, },
{ {
"type": "file", "type": "file",
"url": "https://files.pythonhosted.org/packages/06/b3/24afc8868eba069a7f03650ac750a778862dc34941a4bebeb58706715726/charset_normalizer-2.0.12-py3-none-any.whl", "url": "https://files.pythonhosted.org/packages/fc/34/3030de6f1370931b9dbb4dad48f6ab1015ab1d32447850b9fc94e60097be/idna-3.4-py3-none-any.whl",
"sha256": "6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df" "sha256": "90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"
}, },
{ {
"type": "file", "type": "file",
"url": "https://files.pythonhosted.org/packages/2d/61/08076519c80041bc0ffa1a8af0cbd3bf3e2b62af10435d269a9d0f40564d/requests-2.27.1-py2.py3-none-any.whl", "url": "https://files.pythonhosted.org/packages/d2/f4/274d1dbe96b41cf4e0efb70cbced278ffd61b5c7bb70338b62af94ccb25b/requests-2.28.2-py3-none-any.whl",
"sha256": "f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d" "sha256": "64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"
}, },
{ {
"type": "file", "type": "file",
"url": "https://files.pythonhosted.org/packages/0e/5a/4a5316bddbb697d4b1787159291edfeffd10f73c08b59c7248b15291b601/ytmusicapi-0.22.0-py3-none-any.whl", "url": "https://files.pythonhosted.org/packages/fe/ca/466766e20b767ddb9b951202542310cba37ea5f2d792dae7589f1741af58/urllib3-1.26.14-py2.py3-none-any.whl",
"sha256": "d042520f3f76eac2c1498130dbc4e8a4af21ca73496590a5ff054fc4da0af1d8" "sha256": "75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1"
}, },
{ {
"type": "file", "type": "file",
"url": "https://files.pythonhosted.org/packages/04/a2/d918dcd22354d8958fe113e1a3630137e0fc8b44859ade3063982eacd2a4/idna-3.3-py3-none-any.whl", "url": "https://files.pythonhosted.org/packages/14/a9/5ba638ca601c74f169e0e0b055526566f2fa6b6402233a29aba607dca58e/ytmusicapi-0.25.0-py3-none-any.whl",
"sha256": "84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff" "sha256": "be355bb3409c0e6c25a95ffd92213bd216561cdd8a0493a36a82d1726ff6efb9"
} }
] ]
} }
+46 -2
View File
@@ -19,14 +19,18 @@ SPDX-License-Identifier: CC0-1.0
<name xml:lang="fi">AudioTube</name> <name xml:lang="fi">AudioTube</name>
<name xml:lang="fr">AudioTube</name> <name xml:lang="fr">AudioTube</name>
<name xml:lang="hi">ओडियो-ट्यूब</name> <name xml:lang="hi">ओडियो-ट्यूब</name>
<name xml:lang="id">AudioTube</name>
<name xml:lang="it">AudioTube</name> <name xml:lang="it">AudioTube</name>
<name xml:lang="ka">AudioTube</name>
<name xml:lang="ko">AudioTube</name> <name xml:lang="ko">AudioTube</name>
<name xml:lang="nl">AudioTube</name> <name xml:lang="nl">AudioTube</name>
<name xml:lang="nn">AudioTube</name>
<name xml:lang="pa">ਆਡੀਓ-ਟਿਊਬ</name> <name xml:lang="pa">ਆਡੀਓ-ਟਿਊਬ</name>
<name xml:lang="pl">AudioTube</name> <name xml:lang="pl">AudioTube</name>
<name xml:lang="pt">AudioTube</name> <name xml:lang="pt">AudioTube</name>
<name xml:lang="pt-BR">AudioTube</name> <name xml:lang="pt-BR">AudioTube</name>
<name xml:lang="ro">AudioTube</name> <name xml:lang="ro">AudioTube</name>
<name xml:lang="ru">AudioTube</name>
<name xml:lang="sk">AudioTube</name> <name xml:lang="sk">AudioTube</name>
<name xml:lang="sl">AudioTube</name> <name xml:lang="sl">AudioTube</name>
<name xml:lang="sv">AudioTube</name> <name xml:lang="sv">AudioTube</name>
@@ -46,16 +50,20 @@ SPDX-License-Identifier: CC0-1.0
<summary xml:lang="fi">Mukautuva YouTube Music -asiakas</summary> <summary xml:lang="fi">Mukautuva YouTube Music -asiakas</summary>
<summary xml:lang="fr">Client convergent pour musique sur YouTube</summary> <summary xml:lang="fr">Client convergent pour musique sur YouTube</summary>
<summary xml:lang="hi">अभिसृत यूट्यूब संगीत क्लाएंट</summary> <summary xml:lang="hi">अभिसृत यूट्यूब संगीत क्लाएंट</summary>
<summary xml:lang="id">Klien YouTube Music konvergen</summary>
<summary xml:lang="it">Client YouTube Music convergente</summary> <summary xml:lang="it">Client YouTube Music convergente</summary>
<summary xml:lang="ka">YouTube Music -ის კონვერგენტული კლიენტი</summary>
<summary xml:lang="ko">올인원 YouTube Music 클라이언트</summary> <summary xml:lang="ko">올인원 YouTube Music 클라이언트</summary>
<summary xml:lang="nl">Convergente muziekclient van YouTube</summary> <summary xml:lang="nl">Convergente muziekclient van YouTube</summary>
<summary xml:lang="nn">YouTube Music-klient, tilpassa ulike brukarflater</summary>
<summary xml:lang="pl">Adaptacyjny program do YouTube Music</summary> <summary xml:lang="pl">Adaptacyjny program do YouTube Music</summary>
<summary xml:lang="pt">Cliente de música do YouTube convergente</summary> <summary xml:lang="pt">Cliente de música do YouTube convergente</summary>
<summary xml:lang="pt-BR">Um cliente convergente para o YouTube Music</summary> <summary xml:lang="pt-BR">Um cliente convergente para o YouTube Music</summary>
<summary xml:lang="ro">Client convergent de muzică pentru YouTube</summary> <summary xml:lang="ro">Client convergent de muzică pentru YouTube</summary>
<summary xml:lang="ru">Клиент для YouTube Music</summary>
<summary xml:lang="sl">Konvergentni odjemalec glasbe YouTube</summary> <summary xml:lang="sl">Konvergentni odjemalec glasbe YouTube</summary>
<summary xml:lang="sv">Konvergent YouTube-musikprogram</summary> <summary xml:lang="sv">Konvergent YouTube-musikprogram</summary>
<summary xml:lang="tr">Yakınsak YouTube Müzik istemcisi</summary> <summary xml:lang="tr">Yakınsak YouTube Müzik İstemcisi</summary>
<summary xml:lang="uk">Зручний музичний клієнт YouTube</summary> <summary xml:lang="uk">Зручний музичний клієнт YouTube</summary>
<summary xml:lang="x-test">xxConvergent YouTube Music clientxx</summary> <summary xml:lang="x-test">xxConvergent YouTube Music clientxx</summary>
<summary xml:lang="zh-CN">桌面和移动设备通用 YouTube Music 客户端</summary> <summary xml:lang="zh-CN">桌面和移动设备通用 YouTube Music 客户端</summary>
@@ -74,14 +82,18 @@ SPDX-License-Identifier: CC0-1.0
<developer_name xml:lang="fi">KDE-yhteisö</developer_name> <developer_name xml:lang="fi">KDE-yhteisö</developer_name>
<developer_name xml:lang="fr">Communauté de KDE</developer_name> <developer_name xml:lang="fr">Communauté de KDE</developer_name>
<developer_name xml:lang="hi">केडीई समुदाय</developer_name> <developer_name xml:lang="hi">केडीई समुदाय</developer_name>
<developer_name xml:lang="id">Komunitas KDE</developer_name>
<developer_name xml:lang="it">Comunità KDE</developer_name> <developer_name xml:lang="it">Comunità KDE</developer_name>
<developer_name xml:lang="ka">KDE-ის საზოგადოება</developer_name>
<developer_name xml:lang="ko">KDE 커뮤니티</developer_name> <developer_name xml:lang="ko">KDE 커뮤니티</developer_name>
<developer_name xml:lang="nl">KDE-gemeenschap</developer_name> <developer_name xml:lang="nl">KDE-gemeenschap</developer_name>
<developer_name xml:lang="nn">KDE-fellesskapet</developer_name>
<developer_name xml:lang="pa">ਕੇਡੀਈ ਕਮਿਊਨਟੀ</developer_name> <developer_name xml:lang="pa">ਕੇਡੀਈ ਕਮਿਊਨਟੀ</developer_name>
<developer_name xml:lang="pl">Społeczność KDE</developer_name> <developer_name xml:lang="pl">Społeczność KDE</developer_name>
<developer_name xml:lang="pt">Comunidade do KDE</developer_name> <developer_name xml:lang="pt">Comunidade do KDE</developer_name>
<developer_name xml:lang="pt-BR">A Comunidade KDE</developer_name> <developer_name xml:lang="pt-BR">A Comunidade KDE</developer_name>
<developer_name xml:lang="ro">Comunitatea KDE</developer_name> <developer_name xml:lang="ro">Comunitatea KDE</developer_name>
<developer_name xml:lang="ru">Сообщество KDE</developer_name>
<developer_name xml:lang="sk">KDE komunita</developer_name> <developer_name xml:lang="sk">KDE komunita</developer_name>
<developer_name xml:lang="sl">Skupnost KDE</developer_name> <developer_name xml:lang="sl">Skupnost KDE</developer_name>
<developer_name xml:lang="sv">KDE-gemenskapen</developer_name> <developer_name xml:lang="sv">KDE-gemenskapen</developer_name>
@@ -92,6 +104,25 @@ SPDX-License-Identifier: CC0-1.0
<content_rating type="oars-1.0"/> <content_rating type="oars-1.0"/>
<url type="homepage">https://apps.kde.org/en/audiotube</url> <url type="homepage">https://apps.kde.org/en/audiotube</url>
<releases> <releases>
<release version="23.01" date="2023-01-30">
<url>https://plasma-mobile.org/2023/01/30/january-blog-post/</url>
</release>
<release version="22.11" date="2022-11-30">
<url>https://plasma-mobile.org/2022/11/30/plasma-mobile-gear-22-11/</url>
</release>
<release version="22.09" date="2022-09-27">
<url>https://www.plasma-mobile.org/2022/09/27/plasma-mobile-gear-22-09/</url>
</release>
<release version="22.06" date="2022-06-24">
<url>https://www.plasma-mobile.org/2022/06/28/plasma-mobile-gear-22-06/</url>
<description>
<ul>
<li>Add library page which shows favourites and most played songs</li>
<li>Improve layout of the search popup</li>
<li>General performance improvements including startup</li>
</ul>
</description>
</release>
<release version="22.04" date="2022-04-26"> <release version="22.04" date="2022-04-26">
<url>https://www.plasma-mobile.org/2022/04/26/plasma-mobile-gear-22-04/</url> <url>https://www.plasma-mobile.org/2022/04/26/plasma-mobile-gear-22-04/</url>
<description> <description>
@@ -118,9 +149,18 @@ SPDX-License-Identifier: CC0-1.0
</releases> </releases>
<launchable type="desktop-id">org.kde.audiotube.desktop</launchable> <launchable type="desktop-id">org.kde.audiotube.desktop</launchable>
<screenshots> <screenshots>
<screenshot>
<image>https://cdn.kde.org/screenshots/audiotube/library.png</image>
</screenshot>
<screenshot>
<image>https://cdn.kde.org/screenshots/audiotube/player.png</image>
</screenshot>
<screenshot> <screenshot>
<image>https://cdn.kde.org/screenshots/audiotube/desktop.png</image> <image>https://cdn.kde.org/screenshots/audiotube/desktop.png</image>
</screenshot> </screenshot>
<screenshot>
<image>https://cdn.kde.org/screenshots/audiotube/mobile_album.png</image>
</screenshot>
<screenshot> <screenshot>
<image>https://cdn.kde.org/screenshots/audiotube/mobile_playlist.png</image> <image>https://cdn.kde.org/screenshots/audiotube/mobile_playlist.png</image>
</screenshot> </screenshot>
@@ -141,14 +181,18 @@ SPDX-License-Identifier: CC0-1.0
<p xml:lang="es">AudioTube puede buscar música de YouTube, listar álbumes y artistas, reproducir las listas de reproducción generadas, álbumes y le permite crear su propia lista de reproducción.</p> <p xml:lang="es">AudioTube puede buscar música de YouTube, listar álbumes y artistas, reproducir las listas de reproducción generadas, álbumes y le permite crear su propia lista de reproducción.</p>
<p xml:lang="eu">AudioTube-k YouTube Music-en bilatu dezake, albumak eta artistak zerrendatu, automatikoki sortutako jotze-zerrendak eta albumak jo, eta zure jotze-zerrenda osatzeko aukera eskaintzen dizu.</p> <p xml:lang="eu">AudioTube-k YouTube Music-en bilatu dezake, albumak eta artistak zerrendatu, automatikoki sortutako jotze-zerrendak eta albumak jo, eta zure jotze-zerrenda osatzeko aukera eskaintzen dizu.</p>
<p xml:lang="fi">AudioTube osaa etsiä YouTube Music -haun, albumien ja artistien luettelun, luotujen soittolistojen automaattisen toiston ja omien soittolistojen kokoamisen.</p> <p xml:lang="fi">AudioTube osaa etsiä YouTube Music -haun, albumien ja artistien luettelun, luotujen soittolistojen automaattisen toiston ja omien soittolistojen kokoamisen.</p>
<p xml:lang="fr">AudioTube peut effectuer des recherches de musiques sur YouTube Music, établir une liste d'albums et d'artistes, lire des listes de lecture générées automatiquement, des albums et permet de composer sa propre liste de lecture.</p> <p xml:lang="fr">AudioTube peut effectuer des recherches de musiques sur la partie « Musique » de YouTube, établir une liste d'albums et d'artistes, lire des listes de lecture générées automatiquement, des albums et permet de composer sa propre liste de lecture.</p>
<p xml:lang="hi">ऑडियोट्यूब यूट्यूब संगीत खोज सकता है, एल्बम और कलाकारों की सूची बना सकता है, स्वचालित रूप से उत्पन्न की गई गीतसूची, एल्बम बजा सकता है और आपकी अपनी खुद की प्लेलिस्ट को एक साथ रखने में मदद करता है।</p> <p xml:lang="hi">ऑडियोट्यूब यूट्यूब संगीत खोज सकता है, एल्बम और कलाकारों की सूची बना सकता है, स्वचालित रूप से उत्पन्न की गई गीतसूची, एल्बम बजा सकता है और आपकी अपनी खुद की प्लेलिस्ट को एक साथ रखने में मदद करता है।</p>
<p xml:lang="id">AudioTube dapat menelusuri YouTube Music, daftarkan album dan artis, putar daftar putar dan yang dibuat secara otomatis dan album, dan memungkinkan Anda untuk membuat daftar putar Anda sendiri.</p>
<p xml:lang="it">AudioTube può eseguire ricerche su YouTube Music, elencare album e artisti, riprodurre scalette e album generati automaticamente e ti consente di creare la tua scaletta.</p> <p xml:lang="it">AudioTube può eseguire ricerche su YouTube Music, elencare album e artisti, riprodurre scalette e album generati automaticamente e ti consente di creare la tua scaletta.</p>
<p xml:lang="ka">AudioTube -ს შეუძლია მოძებნოს მუსიკა YouTube-ზე, გაჩვენოთ ალბომებისა და შემსრულებლების სია, დაუკრას დაგენერირებული დასაკრავი სიები, ალბომები და საშუალებას გაძლევთ, თქვენი დასაკრავი სია შექმნათ.</p>
<p xml:lang="ko">AudioTube는 YouTube Music을 검색하고, 앨범과 아티스트를 표시하고, 자동 생성된 재생 목록, 앨범을 재생하고, 사용자 정의 재생 목록을 만들 수 있습니다.</p> <p xml:lang="ko">AudioTube는 YouTube Music을 검색하고, 앨범과 아티스트를 표시하고, 자동 생성된 재생 목록, 앨범을 재생하고, 사용자 정의 재생 목록을 만들 수 있습니다.</p>
<p xml:lang="nl">AudioTube kan in YouTube Music zoeken, een lijst maken van albums en artiesten, automatically gegenereerde afspeellijsten, albums afspelen en biedt u het samenstellen van uw eigen afspeellijst.</p> <p xml:lang="nl">AudioTube kan in YouTube Music zoeken, een lijst maken van albums en artiesten, automatically gegenereerde afspeellijsten, albums afspelen en biedt u het samenstellen van uw eigen afspeellijst.</p>
<p xml:lang="nn">Med AudioTube kan du søkja på YouTube Music, visa album og artistar, spela automatiske genererte spelelister og album samt laga eigne spelelister.</p>
<p xml:lang="pl">AudioTube może przeszukiwać serwis YouTube Music, wypisać albumy i wykonawców, odtwarzać samoczynnie utworzone listy odtwarzania, albumy oraz umożliwia tworzenie własnych list odtwarzania.</p> <p xml:lang="pl">AudioTube może przeszukiwać serwis YouTube Music, wypisać albumy i wykonawców, odtwarzać samoczynnie utworzone listy odtwarzania, albumy oraz umożliwia tworzenie własnych list odtwarzania.</p>
<p xml:lang="pt">O AudioTube consegue pesquisar no YouTube Music, enumerar os álbuns e artistas, reproduzir listas geradas automaticamente, álbuns e permite-lhe reproduzir as suas próprias listas de reprodução.</p> <p xml:lang="pt">O AudioTube consegue pesquisar no YouTube Music, enumerar os álbuns e artistas, reproduzir listas geradas automaticamente, álbuns e permite-lhe reproduzir as suas próprias listas de reprodução.</p>
<p xml:lang="pt-BR">O AudioTube pode pesquisar no YouTube Music, listar álbuns e artistas, rodar listas de reprodução geradas automaticamente, álbuns inteiros, e criar a sua própria lista de reprodução.</p> <p xml:lang="pt-BR">O AudioTube pode pesquisar no YouTube Music, listar álbuns e artistas, rodar listas de reprodução geradas automaticamente, álbuns inteiros, e criar a sua própria lista de reprodução.</p>
<p xml:lang="ru">AudioTube позволяет выполнять поиск в сервисе YouTube Music, просматривать списки найденных альбомов и исполнителей, проигрывать автоматически созданные списки воспроизведения и альбомы, а также использовать свои собственные списки воспроизведения.</p>
<p xml:lang="sl">AudioTube lahko išče po YouTube Music, izdela sezname albumov in avtorjev, samodejno predvaja generirane sezname, albume in sestavlja vaše sezname predvajanja.</p> <p xml:lang="sl">AudioTube lahko išče po YouTube Music, izdela sezname albumov in avtorjev, samodejno predvaja generirane sezname, albume in sestavlja vaše sezname predvajanja.</p>
<p xml:lang="sv">AudioTube kan söka på YouTube Music, lista album och artister, spela upp automatiskt genererade spellistor, albums och låter dig sammanställa egna spellistor.</p> <p xml:lang="sv">AudioTube kan söka på YouTube Music, lista album och artister, spela upp automatiskt genererade spellistor, albums och låter dig sammanställa egna spellistor.</p>
<p xml:lang="tr">AudioTube, YouTube Müzik'te arama yapabilir; albümleri, sanatçıları listeler; kendiliğinden oluşturulmuş çalma listelerini, albümleri çalar ve kendi çalma listenizi oluşturmanıza izin verir.</p> <p xml:lang="tr">AudioTube, YouTube Müzik'te arama yapabilir; albümleri, sanatçıları listeler; kendiliğinden oluşturulmuş çalma listelerini, albümleri çalar ve kendi çalma listenizi oluşturmanıza izin verir.</p>
+8
View File
@@ -12,14 +12,18 @@ Name[eu]=AudioTube
Name[fi]=AudioTube Name[fi]=AudioTube
Name[fr]=AudioTube Name[fr]=AudioTube
Name[hi]=ओडियो-ट्यूब Name[hi]=ओडियो-ट्यूब
Name[id]=AudioTube
Name[it]=AudioTube Name[it]=AudioTube
Name[ka]=AudioTube
Name[ko]=AudioTube Name[ko]=AudioTube
Name[nl]=AudioTube Name[nl]=AudioTube
Name[nn]=AudioTube
Name[pa]=ਆਡੀਓ-ਟਿਊਬ Name[pa]=ਆਡੀਓ-ਟਿਊਬ
Name[pl]=AudioTube Name[pl]=AudioTube
Name[pt]=AudioTube Name[pt]=AudioTube
Name[pt_BR]=AudioTube Name[pt_BR]=AudioTube
Name[ro]=AudioTube Name[ro]=AudioTube
Name[ru]=AudioTube
Name[sk]=AudioTube Name[sk]=AudioTube
Name[sl]=AudioTube Name[sl]=AudioTube
Name[sv]=AudioTube Name[sv]=AudioTube
@@ -40,14 +44,18 @@ Comment[eu]=YouTube Music bezeroa
Comment[fi]=YouTube Music -asiakas Comment[fi]=YouTube Music -asiakas
Comment[fr]=Client de musique sur Youtube Comment[fr]=Client de musique sur Youtube
Comment[hi]=यूट्यूब संगीत क्लाएंट Comment[hi]=यूट्यूब संगीत क्लाएंट
Comment[id]=Klien YouTube Music
Comment[it]=Client YouTube Music Comment[it]=Client YouTube Music
Comment[ka]=YouTube Music -ის კლიენტი
Comment[ko]=YouTube Music 클라이언트 Comment[ko]=YouTube Music 클라이언트
Comment[nl]=Muziekclient van YouTube Comment[nl]=Muziekclient van YouTube
Comment[nn]=YouTube Music-klient
Comment[pa]=ਯੂਟਿਊਬ ਸੰਗੀਤ ਕਲਾਈਂਟ Comment[pa]=ਯੂਟਿਊਬ ਸੰਗੀਤ ਕਲਾਈਂਟ
Comment[pl]=Program do YouTube Music Comment[pl]=Program do YouTube Music
Comment[pt]=Cliente do YouTube Music Comment[pt]=Cliente do YouTube Music
Comment[pt_BR]=Cliente YouTube Music Comment[pt_BR]=Cliente YouTube Music
Comment[ro]=Client de muzică pentru YouTube Comment[ro]=Client de muzică pentru YouTube
Comment[ru]=Клиент для YouTube Music
Comment[sk]=Hudobný klient YouTube Comment[sk]=Hudobný klient YouTube
Comment[sl]=Glasbeni odjemalec Youtube Comment[sl]=Glasbeni odjemalec Youtube
Comment[sv]=YouTube-musikprogram Comment[sv]=YouTube-musikprogram
+2 -2
View File
@@ -1,7 +1,7 @@
{ {
"id": "org.kde.audiotube", "id": "org.kde.audiotube",
"runtime": "org.kde.Platform", "runtime": "org.kde.Platform",
"runtime-version": "5.15-21.08", "runtime-version": "5.15-22.08",
"sdk": "org.kde.Sdk", "sdk": "org.kde.Sdk",
"command": "audiotube", "command": "audiotube",
"tags": ["nightly"], "tags": ["nightly"],
@@ -28,7 +28,7 @@
"config-opts": ["-DPYBIND11_FINDPYTHON=ON", "-DPYBIND11_TEST=OFF"], "config-opts": ["-DPYBIND11_FINDPYTHON=ON", "-DPYBIND11_TEST=OFF"],
"buildsystem": "cmake-ninja", "buildsystem": "cmake-ninja",
"builddir": true, "builddir": true,
"sources": [ { "type": "git", "url": "https://github.com/pybind/pybind11", "tag": "v2.9.1" } ] "sources": [ { "type": "git", "url": "https://github.com/pybind/pybind11", "tag": "v2.10.3" } ]
}, },
{ {
"name": "org.kde.audiotube", "name": "org.kde.audiotube",
+166 -58
View File
@@ -1,13 +1,13 @@
# Copyright (C) YEAR This file is copyright: # Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the audiotube package. # This file is distributed under the same license as the audiotube package.
# #
# Zayed Al-Saidi <[email protected]>, 2022. # Zayed Al-Saidi <[email protected]>, 2022, 2023.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: audiotube\n" "Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2022-01-21 22:52+0400\n" "PO-Revision-Date: 2023-02-02 11:59+0400\n"
"Last-Translator: Zayed Al-Saidi <[email protected]>\n" "Last-Translator: Zayed Al-Saidi <[email protected]>\n"
"Language-Team: ar\n" "Language-Team: ar\n"
"Language: ar\n" "Language: ar\n"
@@ -16,7 +16,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
"X-Generator: Lokalize 21.07.70\n" "X-Generator: Lokalize 21.12.3\n"
#, kde-format #, kde-format
msgctxt "NAME OF TRANSLATORS" msgctxt "NAME OF TRANSLATORS"
@@ -28,47 +28,67 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "[email protected]" msgstr "[email protected]"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "شغّل" msgstr "شغّل"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, kde-format #, kde-format
msgid "Play Next" msgid "Shuffle"
msgstr "شغل التالي" msgstr "اخلط"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Open in Browser"
msgstr "أضف إلى قائمة التّشغيل" msgstr "افتح في المتصفّح"
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr "الألبوم • %1"
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr "المزيد"
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "راديو"
#: contents/ui/ArtistPage.qml:46
#, kde-format
msgid "Artist"
msgstr "الفنّانون"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
"\"%1\"?" "\"%1\"?"
msgstr "تشغيل الفيديو غير مدعوم حتى الآن. هل تريد تشغيل صوت فقط من \"%1\"؟" msgstr "تشغيل الفيديو غير مدعوم حتى الآن. هل تريد تشغيل صوت فقط من \"%1\"؟"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "الألبومات" msgstr "الألبومات"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "فردي" msgstr "فردي"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "أغاني" msgstr "أغاني"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "الفيديوهات" msgstr "الفيديوهات"
@@ -83,82 +103,170 @@ msgstr "حسنًا"
msgid "Cancel" msgid "Cancel"
msgstr "ألغِ" msgstr "ألغِ"
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr "المفضلة"
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "أظهر الكلّ"
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "" msgstr "الأكثر تشغيلا"
#: contents/ui/main.qml:94 #: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr "الأغاني المشغلة"
#: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "تيوب الصوتي" msgstr "تيوب الصوتي"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "أزل المسار" msgstr "أزل المسار"
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "امسح"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "اخلط"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "ألبث"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "لا يوجد وسائط تعمل" msgstr "لا يوجد وسائط تعمل"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "وسع" msgstr "المكتبة"
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Search"
msgstr "ابحث"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "الأغاني المشغلة"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "قائمة غير معروفة من الأغاني"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "لا يوجد أي أغنية بعد"
#: contents/ui/PlaylistPage.qml:42
#, kde-format
msgid "Playlist"
msgstr "قائمة التشغيل"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr "البحوث الأخيرة:"
#: contents/ui/SearchPage.qml:28
#, kde-format #, kde-format
msgid "Artists" msgid "Artists"
msgstr "الفنّانون" msgstr "الفنّانون"
#: contents/ui/SearchPage.qml:29 #: contents/ui/SearchPage.qml:30
#, kde-format #, kde-format
msgid "Playlists" msgid "Playlists"
msgstr "قوائم التّشغيل" msgstr "قوائم التّشغيل"
#: contents/ui/SearchPage.qml:36 #: contents/ui/SearchPage.qml:37
#, kde-format #, kde-format
msgid "Unknown" msgid "Unknown"
msgstr "مجهول" msgstr "مجهول"
#: contents/ui/SearchPage.qml:117 #: contents/ui/SearchWithDropdown.qml:287
#, kde-format #, kde-format
msgid "Play next" msgid "No matching previous searches"
msgstr "لا يوجد تطابق من البحوث الأخيرة"
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr "أزل من تاريخ البحث"
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr " اطوِ الشريط الجانبي"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "شغل التالي" msgstr "شغل التالي"
#: contents/ui/SearchPage.qml:129 #: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format #, kde-format
msgid "Radio" msgid "Add to queue"
msgstr "راديو" msgstr "أضف للطابور"
#: contents/ui/SearchPage.qml:147 #: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format #, kde-format
msgid "Find music on YouTube Music" msgid "Remove Favourite"
msgstr "اعثر على موسيقى على موسيقى يوتيوب" msgstr "أزل المفضلة"
#: contents/ui/SearchPage.qml:150 #: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format #, kde-format
msgid "Search" msgid "Add Favourite"
msgstr "ابحث" msgstr "أضف للمفضلة"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr "أزل من التّاريخ"
#~ msgid "Favourite Songs"
#~ msgstr "الأغاني المفضّلة"
#~ msgid "Back"
#~ msgstr "عُد"
#~ msgid "Find music on YouTube Music"
#~ msgstr "اعثر على موسيقى على موسيقى يوتيوب"
#~ msgid "Add to Playlist"
#~ msgstr "أضف إلى قائمة التّشغيل"
#~ msgid "Play next"
#~ msgstr "شغل التالي"
#~ msgid "Clear"
#~ msgstr "امسح"
#~ msgid "Pause"
#~ msgstr "ألبث"
#~ msgid "Expand"
#~ msgstr "وسع"
+172 -59
View File
@@ -6,16 +6,16 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: audiotube\n" "Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2022-04-22 18:44+0400\n" "PO-Revision-Date: 2022-06-19 12:16+0400\n"
"Last-Translator: Kheyyam Gojayev <[email protected]>\n" "Last-Translator: Kheyyam <[email protected]>\n"
"Language-Team: Azerbaijani <[email protected]>\n" "Language-Team: Azerbaijani <[email protected]>\n"
"Language: az\n" "Language: az\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 21.12.3\n" "X-Generator: Lokalize 22.04.2\n"
#, kde-format #, kde-format
msgctxt "NAME OF TRANSLATORS" msgctxt "NAME OF TRANSLATORS"
@@ -27,25 +27,46 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "[email protected]" msgstr "[email protected]"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "Başladın" msgstr "Başladın"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, kde-format #, kde-format
msgid "Play Next" msgid "Shuffle"
msgstr "Sonrakını oxudun" msgstr "Qarışıq"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Open in Browser"
msgstr "Mahnı siyahısına əlavə edin" msgstr ""
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr ""
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr ""
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "Radio"
#: contents/ui/ArtistPage.qml:46
#, fuzzy, kde-format
#| msgid "Artists"
msgid "Artist"
msgstr "İfaçılar"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
@@ -54,22 +75,22 @@ msgstr ""
"Video göstərilməsi hələlik dəstəklənmir. Siz yalnız \"%1\" videosunun səsini " "Video göstərilməsi hələlik dəstəklənmir. Siz yalnız \"%1\" videosunun səsini "
"oynatmaq istəyirsiniz?" "oynatmaq istəyirsiniz?"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "Albomlar" msgstr "Albomlar"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "Musiqilər" msgstr "Musiqilər"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "Mahnılar" msgstr "Mahnılar"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "Videolar" msgstr "Videolar"
@@ -84,82 +105,174 @@ msgstr "OLDU"
msgid "Cancel" msgid "Cancel"
msgstr "İmtina" msgstr "İmtina"
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr "Süçilmişlər"
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "Hamısı göstərilsin"
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "" msgstr "Daha çox dinlənilən"
#: contents/ui/main.qml:94 #: contents/ui/LibraryPage.qml:230
#, fuzzy, kde-format
#| msgid "Played Songs"
msgid "played Songs"
msgstr "Oxudulan mahnılar"
#: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "AudioTube" msgstr "AudioTube"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "Mahnını silin" msgstr "Mahnını silin"
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "Təmizləyin"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "Qarışıq"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "Fasilə"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "Media faylı oynadılmır" msgstr "Media faylı oynadılmır"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "Açmaq" msgstr ""
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Search"
msgstr "Axtarın"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "Oxudulan mahnılar"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "Naməlum mahnı siyahısı"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "Hələlik burada mahnılar yoxdur"
#: contents/ui/PlaylistPage.qml:42
#, fuzzy, kde-format
#| msgid "Playlists"
msgid "Playlist"
msgstr "Mahnı siyahıları"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr ""
#: contents/ui/SearchPage.qml:28
#, kde-format #, kde-format
msgid "Artists" msgid "Artists"
msgstr "İfaçılar" msgstr "İfaçılar"
#: contents/ui/SearchPage.qml:29 #: contents/ui/SearchPage.qml:30
#, kde-format #, kde-format
msgid "Playlists" msgid "Playlists"
msgstr "Mahnı siyahıları" msgstr "Mahnı siyahıları"
#: contents/ui/SearchPage.qml:36 #: contents/ui/SearchPage.qml:37
#, kde-format #, kde-format
msgid "Unknown" msgid "Unknown"
msgstr "Bilinməyən" msgstr "Bilinməyən"
#: contents/ui/SearchPage.qml:117 #: contents/ui/SearchWithDropdown.qml:287
#, kde-format #, kde-format
msgid "Play next" msgid "No matching previous searches"
msgstr "Sonrakını başladın" msgstr ""
#: contents/ui/SearchPage.qml:129 #: contents/ui/SearchWithDropdown.qml:322
#, kde-format #, kde-format
msgid "Radio" msgid "remove from search history"
msgstr "Radio" msgstr ""
#: contents/ui/SearchPage.qml:147 #: contents/ui/Sidebar.qml:179
#, kde-format #, kde-format
msgid "Find music on YouTube Music" msgid "Collapse Sidebar"
msgstr "Musiqini YouTube Musiqi-də tapın" msgstr ""
#: contents/ui/SearchPage.qml:150 #: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format #, kde-format
msgid "Search" msgid "Play Next"
msgstr "Axtarın" msgstr "Sonrakını oxudun"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr ""
#: 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:132 contents/ui/SongMenu.qml:185
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Add Favourite"
msgstr "Süçilmişlər"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr ""
#~ msgid "Favourite Songs"
#~ msgstr "Seçilmiş mahnılar"
#~ msgid "Back"
#~ msgstr "Geriyə"
#~ msgid "Find music on YouTube Music"
#~ msgstr "Musiqini YouTube Musiqi-də tapın"
#~ msgid "Add to Playlist"
#~ msgstr "Mahnı siyahısına əlavə edin"
#~ msgid "Play next"
#~ msgstr "Sonrakını başladın"
#~ msgid "Clear"
#~ msgstr "Təmizləyin"
#~ msgid "Pause"
#~ msgstr "Fasilə"
#~ msgid "Expand"
#~ msgstr "Açmaq"
+160 -78
View File
@@ -1,23 +1,24 @@
# Translation of audiotube.po to Catalan # Translation of audiotube.po to Catalan
# Copyright (C) 2021 This_file_is_part_of_KDE # Copyright (C) 2021-2023 This_file_is_part_of_KDE
# This file is distributed under the license LGPL version 2.1 or # This file is distributed under the license LGPL version 2.1 or
# version 3 or later versions approved by the membership of KDE e.V. # version 3 or later versions approved by the membership of KDE e.V.
# #
# Antoni Bella Pérez <[email protected]>, 2021. # Antoni Bella Pérez <[email protected]>, 2021.
# Josep M. Ferrer <[email protected]>, 2022, 2023.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: audiotube\n" "Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2021-12-05 16:03+0100\n" "PO-Revision-Date: 2023-01-27 10:54+0100\n"
"Last-Translator: Antoni Bella Pérez <antonibella5@yahoo.com>\n" "Last-Translator: Josep M. Ferrer <txemaq@gmail.com>\n"
"Language-Team: Catalan <[email protected]>\n" "Language-Team: Catalan <[email protected]>\n"
"Language: ca\n" "Language: ca\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Lokalize 21.11.90\n" "X-Generator: Lokalize 20.12.0\n"
#, kde-format #, kde-format
msgctxt "NAME OF TRANSLATORS" msgctxt "NAME OF TRANSLATORS"
@@ -29,25 +30,45 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "[email protected]" msgstr "[email protected]"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "Reprodueix" msgstr "Reprodueix"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, kde-format #, kde-format
msgid "Play Next" msgid "Shuffle"
msgstr "Reprodueix el següent" msgstr "Barreja"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Open in Browser"
msgstr "Afegeix a la llista de reproducció" msgstr "Obre en el navegador"
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr "Àlbum • %1"
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr "Més"
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "Ràdio"
#: contents/ui/ArtistPage.qml:46
#, kde-format
msgid "Artist"
msgstr "Artista"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
@@ -56,22 +77,22 @@ msgstr ""
"Encara no s'admet la reproducció de vídeo. Voleu reproduir només l'àudio de " "Encara no s'admet la reproducció de vídeo. Voleu reproduir només l'àudio de "
"«%1»?" "«%1»?"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "Àlbums" msgstr "Àlbums"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "Individuals" msgstr "Individuals"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "Cançons" msgstr "Cançons"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "Vídeos" msgstr "Vídeos"
@@ -86,85 +107,146 @@ msgstr "D'acord"
msgid "Cancel" msgid "Cancel"
msgstr "Cancel·la" msgstr "Cancel·la"
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr "Preferides"
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "Mostra-ho tot"
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "" msgstr "Les més reproduïdes"
#: contents/ui/main.qml:94 #: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr "Cançons reproduïdes"
#: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "AudioTube" msgstr "AudioTube"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "Elimina la pista" msgstr "Elimina la pista"
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "Neteja"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "Barreja"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "Pausa"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "No s'està reproduint cap suport" msgstr "No s'està reproduint cap suport"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "Expandeix" msgstr "Biblioteca"
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Artists"
msgstr "Artistes"
#: contents/ui/SearchPage.qml:29
#, kde-format
msgid "Playlists"
msgstr "Llistes de reproducció"
#: contents/ui/SearchPage.qml:36
#, kde-format
msgid "Unknown"
msgstr "Desconeguda"
#: contents/ui/SearchPage.qml:117
#, kde-format
msgid "Play next"
msgstr "Reprodueix el següent"
#: contents/ui/SearchPage.qml:129
#, kde-format
msgid "Radio"
msgstr "Ràdio"
#: contents/ui/SearchPage.qml:147
#, kde-format
msgid "Find music on YouTube Music"
msgstr "Cerca a la Música de Youtube"
#: contents/ui/SearchPage.qml:150
#, kde-format #, kde-format
msgid "Search" msgid "Search"
msgstr "Cerca" msgstr "Cerca"
#~ msgid "Play only Audio" #: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#~ msgstr "Reprodueix només l'àudio" #: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "Cançons reproduïdes"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "Llista desconeguda de cançons"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "Encara no hi ha cap cançó"
#: contents/ui/PlaylistPage.qml:42
#, kde-format
msgid "Playlist"
msgstr "Llista de reproducció"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr "Cerques anteriors:"
#: contents/ui/SearchPage.qml:28
#, kde-format
msgid "Artists"
msgstr "Artistes"
#: contents/ui/SearchPage.qml:30
#, kde-format
msgid "Playlists"
msgstr "Llistes de reproducció"
#: contents/ui/SearchPage.qml:37
#, kde-format
msgid "Unknown"
msgstr "Desconeguda"
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "No hi ha cerques anteriors coincidents"
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr "elimina de l'historial de cerques"
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr "Redueix la barra lateral"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Reprodueix el següent"
#: 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:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Elimina de les preferides"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Afegeix a les preferides"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr "Elimina de l'historial"
+146 -61
View File
@@ -1,23 +1,24 @@
# Translation of audiotube.po to Catalan (Valencian) # Translation of audiotube.po to Catalan (Valencian)
# Copyright (C) 2021 This_file_is_part_of_KDE # Copyright (C) 2021-2023 This_file_is_part_of_KDE
# This file is distributed under the license LGPL version 2.1 or # This file is distributed under the license LGPL version 2.1 or
# version 3 or later versions approved by the membership of KDE e.V. # version 3 or later versions approved by the membership of KDE e.V.
# #
# Antoni Bella Pérez <[email protected]>, 2021. # Antoni Bella Pérez <[email protected]>, 2021.
# Josep M. Ferrer <[email protected]>, 2022, 2023.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: audiotube\n" "Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2021-12-05 16:03+0100\n" "PO-Revision-Date: 2023-01-27 10:54+0100\n"
"Last-Translator: Antoni Bella Pérez <antonibella5@yahoo.com>\n" "Last-Translator: Josep M. Ferrer <txemaq@gmail.com>\n"
"Language-Team: Catalan <[email protected]>\n" "Language-Team: Catalan <[email protected]>\n"
"Language: ca@valencia\n" "Language: ca@valencia\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Lokalize 21.11.90\n" "X-Generator: Lokalize 20.12.0\n"
#, kde-format #, kde-format
msgctxt "NAME OF TRANSLATORS" msgctxt "NAME OF TRANSLATORS"
@@ -29,25 +30,45 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "[email protected]" msgstr "[email protected]"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "Reprodueix" msgstr "Reproduïx"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, kde-format #, kde-format
msgid "Play Next" msgid "Shuffle"
msgstr "Reprodueix el següent" msgstr "Barreja"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Open in Browser"
msgstr "Afig a la llista de reproducció" msgstr "Obri en el navegador"
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr "Àlbum • %1"
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr "Més"
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "Ràdio"
#: contents/ui/ArtistPage.qml:46
#, kde-format
msgid "Artist"
msgstr "Artista"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
@@ -56,22 +77,22 @@ msgstr ""
"Encara no s'admet la reproducció de vídeo. Voleu reproduir només l'àudio de " "Encara no s'admet la reproducció de vídeo. Voleu reproduir només l'àudio de "
"«%1»?" "«%1»?"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "Àlbums" msgstr "Àlbums"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "Individuals" msgstr "Individuals"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "Cançons" msgstr "Cançons"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "Vídeos" msgstr "Vídeos"
@@ -86,82 +107,146 @@ msgstr "D'acord"
msgid "Cancel" msgid "Cancel"
msgstr "Cancel·la" msgstr "Cancel·la"
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr "Preferides"
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "Mostra-ho tot"
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "" msgstr "Les més reproduïdes"
#: contents/ui/main.qml:94 #: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr "Cançons reproduïdes"
#: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "AudioTube" msgstr "AudioTube"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "Elimina la pista" msgstr "Elimina la pista"
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "Neteja"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "Barreja"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "Pausa"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "No s'està reproduint cap suport" msgstr "No s'està reproduint cap suport"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "Expandeix" msgstr "Biblioteca"
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Search"
msgstr "Busca"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "Cançons reproduïdes"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "Llista desconeguda de cançons"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "Encara no hi ha cap cançó"
#: contents/ui/PlaylistPage.qml:42
#, kde-format
msgid "Playlist"
msgstr "Llista de reproducció"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr "Busques anteriors:"
#: contents/ui/SearchPage.qml:28
#, kde-format #, kde-format
msgid "Artists" msgid "Artists"
msgstr "Artistes" msgstr "Artistes"
#: contents/ui/SearchPage.qml:29 #: contents/ui/SearchPage.qml:30
#, kde-format #, kde-format
msgid "Playlists" msgid "Playlists"
msgstr "Llistes de reproducció" msgstr "Llistes de reproducció"
#: contents/ui/SearchPage.qml:36 #: contents/ui/SearchPage.qml:37
#, kde-format #, kde-format
msgid "Unknown" msgid "Unknown"
msgstr "Desconeguda" msgstr "Desconeguda"
#: contents/ui/SearchPage.qml:117 #: contents/ui/SearchWithDropdown.qml:287
#, kde-format #, kde-format
msgid "Play next" msgid "No matching previous searches"
msgstr "Reprodueix el següent" msgstr "No hi ha busques anteriors coincidents"
#: contents/ui/SearchPage.qml:129 #: contents/ui/SearchWithDropdown.qml:322
#, kde-format #, kde-format
msgid "Radio" msgid "remove from search history"
msgstr "Ràdio" msgstr "elimina de l'historial de busques"
#: contents/ui/SearchPage.qml:147 #: contents/ui/Sidebar.qml:179
#, kde-format #, kde-format
msgid "Find music on YouTube Music" msgid "Collapse Sidebar"
msgstr "Busca a la Música de Youtube" msgstr "Reduïx la barra lateral"
#: contents/ui/SearchPage.qml:150 #: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format #, kde-format
msgid "Search" msgid "Play Next"
msgstr "Busca" msgstr "Reproduïx el següent"
#: 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:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Elimina de les preferides"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Afig a les preferides"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr "Elimina de l'historial"
+142 -58
View File
@@ -1,21 +1,21 @@
# Copyright (C) YEAR This file is copyright: # Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the audiotube package. # This file is distributed under the same license as the audiotube package.
# Vit Pelcak <vpelcak@suse.cz>, 2021, 2022. # Vit Pelcak <vit@pelcak.org>, 2021, 2022.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: audiotube\n" "Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2022-01-11 17:36+0100\n" "PO-Revision-Date: 2022-06-28 13:58+0200\n"
"Last-Translator: Vit Pelcak <vpelcak@suse.cz>\n" "Last-Translator: Vit Pelcak <vit@pelcak.org>\n"
"Language-Team: Czech <[email protected]>\n" "Language-Team: Czech <[email protected]>\n"
"Language: cs\n" "Language: cs\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Lokalize 21.12.0\n" "X-Generator: Lokalize 22.04.2\n"
#, kde-format #, kde-format
msgctxt "NAME OF TRANSLATORS" msgctxt "NAME OF TRANSLATORS"
@@ -27,25 +27,45 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "[email protected]" msgstr "[email protected]"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "Přehrát" msgstr "Přehrát"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, kde-format #, kde-format
msgid "Play Next" msgid "Shuffle"
msgstr "Přehrát následující" msgstr "Zamíchat"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Open in Browser"
msgstr "Přidat do seznamu skladeb" msgstr "Otevřít v prohlížeči"
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr ""
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr "Více"
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "Rádio"
#: contents/ui/ArtistPage.qml:46
#, kde-format
msgid "Artist"
msgstr "Umělec"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
@@ -54,22 +74,22 @@ msgstr ""
"Přehrávání videa ještě není podporováno. Chcete z \"%1\" přehrávat pouze " "Přehrávání videa ještě není podporováno. Chcete z \"%1\" přehrávat pouze "
"zvuk?" "zvuk?"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "Alba" msgstr "Alba"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "Samotné" msgstr "Samotné"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "Písně" msgstr "Písně"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "Videa" msgstr "Videa"
@@ -84,82 +104,146 @@ msgstr "OK"
msgid "Cancel" msgid "Cancel"
msgstr "Zrušit" msgstr "Zrušit"
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr "Oblíbené"
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "Zobrazit vše"
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "Nejčastěji hrané"
#: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr "" msgstr ""
#: contents/ui/main.qml:94 #: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "AudioTube" msgstr "AudioTube"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "Odstranit skladbu" msgstr "Odstranit skladbu"
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "Vyprázdnit"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "Zamíchat"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "Pozastavit"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "Nepřehrává se žádné médium" msgstr "Nepřehrává se žádné médium"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "Rozvinout" msgstr "Knihovna"
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Search"
msgstr "Hledat"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "Přehrané skladby"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "Neznámý seznam skladeb"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "Zatím zde nejsou žádné skladby"
#: contents/ui/PlaylistPage.qml:42
#, kde-format
msgid "Playlist"
msgstr "Seznam skladeb"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr ""
#: contents/ui/SearchPage.qml:28
#, kde-format #, kde-format
msgid "Artists" msgid "Artists"
msgstr "Umělci" msgstr "Umělci"
#: contents/ui/SearchPage.qml:29 #: contents/ui/SearchPage.qml:30
#, kde-format #, kde-format
msgid "Playlists" msgid "Playlists"
msgstr "Seznamy skladeb" msgstr "Seznamy skladeb"
#: contents/ui/SearchPage.qml:36 #: contents/ui/SearchPage.qml:37
#, kde-format #, kde-format
msgid "Unknown" msgid "Unknown"
msgstr "Neznámý" msgstr "Neznámý"
#: contents/ui/SearchPage.qml:117 #: contents/ui/SearchWithDropdown.qml:287
#, kde-format #, kde-format
msgid "Play next" msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Přehrát následující" msgstr "Přehrát následující"
#: contents/ui/SearchPage.qml:129 #: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format #, kde-format
msgid "Radio" msgid "Add to queue"
msgstr "Rádio" msgstr ""
#: contents/ui/SearchPage.qml:147 #: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format #, kde-format
msgid "Find music on YouTube Music" msgid "Remove Favourite"
msgstr "Najít hudbu na Hudba YouTube" msgstr ""
#: contents/ui/SearchPage.qml:150 #: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format #, kde-format
msgid "Search" msgid "Add Favourite"
msgstr "Hledat" msgstr ""
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr ""
+185 -76
View File
@@ -1,22 +1,23 @@
# Copyright (C) YEAR This file is copyright: # Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the audiotube package. # This file is distributed under the same license as the audiotube package.
# Burkhard Lück <[email protected]>, 2021. # Burkhard Lück <[email protected]>, 2021.
# Frederik Schwarzer <[email protected]>, 2021, 2022. # Frederik Schwarzer <[email protected]>, 2021, 2022, 2023.
# Frank Steinmetzger <[email protected]>, 2022.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: audiotube\n" "Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2022-02-20 10:37+0100\n" "PO-Revision-Date: 2023-01-14 23:47+0100\n"
"Last-Translator: Frederik Schwarzer <[email protected]>\n" "Last-Translator: Frederik Schwarzer <[email protected]>\n"
"Language-Team: German <kde-i18n-doc@kde.org>\n" "Language-Team: German <kde-i18n-de@kde.org>\n"
"Language: de\n" "Language: de\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Lokalize 21.08.0\n" "X-Generator: Lokalize 22.12.1\n"
#, kde-format #, kde-format
msgctxt "NAME OF TRANSLATORS" msgctxt "NAME OF TRANSLATORS"
@@ -28,25 +29,45 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "[email protected]" msgstr "[email protected]"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "Wiedergabe" msgstr "Wiedergabe"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, kde-format #, kde-format
msgid "Play Next" msgid "Shuffle"
msgstr "Nächste Wiedergabe" msgstr "Zufällig"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Open in Browser"
msgstr "Zur Wiedergabeliste hinzufügen" msgstr "In Browser öffnen"
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr "Album • %1"
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr "Mehr"
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "Radio"
#: contents/ui/ArtistPage.qml:46
#, kde-format
msgid "Artist"
msgstr "Interpret"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
@@ -55,22 +76,22 @@ msgstr ""
"Die Video-Wiedergabe wird noch nicht unterstützt. Möchten Sie nur die " "Die Video-Wiedergabe wird noch nicht unterstützt. Möchten Sie nur die "
"Audiospur von „%1“ abspielen?" "Audiospur von „%1“ abspielen?"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "Alben" msgstr "Alben"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "Singles" msgstr "Singles"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "Songs" msgstr "Songs"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "Videos" msgstr "Videos"
@@ -85,85 +106,173 @@ msgstr "OK"
msgid "Cancel" msgid "Cancel"
msgstr "Abbrechen" msgstr "Abbrechen"
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr "Favoriten"
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "Alle anzeigen"
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "" msgstr "Am meisten abgespielt"
#: contents/ui/main.qml:94 #: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr "Abgespielte Stücke"
#: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "AudioTube" msgstr "AudioTube"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "Stück entfernen" msgstr "Stück entfernen"
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "Löschen"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "Zufällig"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "Pause"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "Es werden keine Medien wiedergegeben" msgstr "Es werden keine Medien wiedergegeben"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "Erweitern" msgstr "Bibliothek"
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Artists"
msgstr "Interpreten"
#: contents/ui/SearchPage.qml:29
#, kde-format
msgid "Playlists"
msgstr "Wiedergabelisten"
#: contents/ui/SearchPage.qml:36
#, kde-format
msgid "Unknown"
msgstr "Unbekannt"
#: contents/ui/SearchPage.qml:117
#, kde-format
msgid "Play next"
msgstr "Nächste Wiedergabe"
#: contents/ui/SearchPage.qml:129
#, kde-format
msgid "Radio"
msgstr "Radio"
#: contents/ui/SearchPage.qml:147
#, kde-format
msgid "Find music on YouTube Music"
msgstr "Musik auf YouTube suchen"
#: contents/ui/SearchPage.qml:150
#, kde-format #, kde-format
msgid "Search" msgid "Search"
msgstr "Suchen" msgstr "Suchen"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "Abgespielte Stücke"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "Unbekannte Liste von Liedern"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "Bisher keine Lieder hier"
#: contents/ui/PlaylistPage.qml:42
#, kde-format
msgid "Playlist"
msgstr "Wiedergabeliste"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr "Vorherige Suchvorgänge:"
#: contents/ui/SearchPage.qml:28
#, kde-format
msgid "Artists"
msgstr "Interpreten"
#: contents/ui/SearchPage.qml:30
#, kde-format
msgid "Playlists"
msgstr "Wiedergabelisten"
#: contents/ui/SearchPage.qml:37
#, kde-format
msgid "Unknown"
msgstr "Unbekannt"
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr "Seitenleiste einklappen"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Nächste Wiedergabe"
#: 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:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Favoriten entfernen"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Favoriten hinzufügen"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr ""
#~ msgid "Favourite Songs"
#~ msgstr "Lieblingsstücke"
#~ msgid "Back"
#~ msgstr "Zurück"
#~ msgid "Find music on YouTube Music"
#~ msgstr "Musik auf YouTube suchen"
#~ msgid "Add to Playlist"
#~ msgstr "Zur Wiedergabeliste hinzufügen"
#~ msgid "Play next"
#~ msgstr "Nächste Wiedergabe"
#~ msgid "Clear"
#~ msgstr "Löschen"
#~ msgid "Pause"
#~ msgstr "Pause"
#~ msgid "Expand"
#~ msgstr "Erweitern"
#~ msgid "Play only Audio" #~ msgid "Play only Audio"
#~ msgstr "Nur Audio abspielen" #~ msgstr "Nur Audio abspielen"
+184 -75
View File
@@ -6,16 +6,16 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: audiotube\n" "Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2022-01-01 15:21+0000\n" "PO-Revision-Date: 2022-12-31 15:53+0000\n"
"Last-Translator: Steve Allewell <[email protected]>\n" "Last-Translator: Steve Allewell <[email protected]>\n"
"Language-Team: British English <kde-l10n-en_gb@kde.org>\n" "Language-Team: English <kde-i18n-doc@kde.org>\n"
"Language: en_GB\n" "Language: en_GB\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Lokalize 21.12.0\n" "X-Generator: Lokalize 21.12.3\n"
#, kde-format #, kde-format
msgctxt "NAME OF TRANSLATORS" msgctxt "NAME OF TRANSLATORS"
@@ -27,25 +27,45 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "[email protected]" msgstr "[email protected]"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "Play" msgstr "Play"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, kde-format #, kde-format
msgid "Play Next" msgid "Shuffle"
msgstr "Play Next" msgstr "Shuffle"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Open in Browser"
msgstr "Add to Playlist" msgstr "Open in Browser"
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr "Album • %1"
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr "More"
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "Radio"
#: contents/ui/ArtistPage.qml:46
#, kde-format
msgid "Artist"
msgstr "Artist"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
@@ -54,22 +74,22 @@ msgstr ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
"\"%1\"?" "\"%1\"?"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "Albums" msgstr "Albums"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "Singles" msgstr "Singles"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "Songs" msgstr "Songs"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "Videos" msgstr "Videos"
@@ -84,85 +104,174 @@ msgstr "OK"
msgid "Cancel" msgid "Cancel"
msgstr "Cancel" msgstr "Cancel"
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr "Favourites"
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "Show All"
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "" msgstr "Most played"
#: contents/ui/main.qml:94 #: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr "played Songs"
#: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "AudioTube" msgstr "AudioTube"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "Remove Track" msgstr "Remove Track"
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "Clear"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "Shuffle"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "Pause"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "No media playing" msgstr "No media playing"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "Expand" msgstr "Library"
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Artists"
msgstr "Artists"
#: contents/ui/SearchPage.qml:29
#, kde-format
msgid "Playlists"
msgstr "Playlists"
#: contents/ui/SearchPage.qml:36
#, kde-format
msgid "Unknown"
msgstr "Unknown"
#: contents/ui/SearchPage.qml:117
#, kde-format
msgid "Play next"
msgstr "Play next"
#: contents/ui/SearchPage.qml:129
#, kde-format
msgid "Radio"
msgstr "Radio"
#: contents/ui/SearchPage.qml:147
#, kde-format
msgid "Find music on YouTube Music"
msgstr "Find music on YouTube Music"
#: contents/ui/SearchPage.qml:150
#, kde-format #, kde-format
msgid "Search" msgid "Search"
msgstr "Search" msgstr "Search"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "Played Songs"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "Unknown list of songs"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "No songs here yet"
#: contents/ui/PlaylistPage.qml:42
#, kde-format
msgid "Playlist"
msgstr "Playlist"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr "Previous Searches:"
#: contents/ui/SearchPage.qml:28
#, kde-format
msgid "Artists"
msgstr "Artists"
#: contents/ui/SearchPage.qml:30
#, kde-format
msgid "Playlists"
msgstr "Playlists"
#: contents/ui/SearchPage.qml:37
#, kde-format
msgid "Unknown"
msgstr "Unknown"
#: contents/ui/SearchWithDropdown.qml:287
#, fuzzy, kde-format
#| msgid "Previous Searches:"
msgid "No matching previous searches"
msgstr "Previous Searches:"
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr "Collapse Sidebar"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Play Next"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Add to queue"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Remove Favourite"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Add Favourite"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr ""
#~ msgid "Favourite Songs"
#~ msgstr "Favourite Songs"
#~ msgid "Back"
#~ msgstr "Back"
#~ msgid "Find music on YouTube Music"
#~ msgstr "Find music on YouTube Music"
#~ msgid "Add to Playlist"
#~ msgstr "Add to Playlist"
#~ msgid "Play next"
#~ msgstr "Play next"
#~ msgid "Clear"
#~ msgstr "Clear"
#~ msgid "Pause"
#~ msgstr "Pause"
#~ msgid "Expand"
#~ msgstr "Expand"
#~ msgid "Play only Audio" #~ msgid "Play only Audio"
#~ msgstr "Play only Audio" #~ msgstr "Play only Audio"
+183 -75
View File
@@ -3,13 +3,13 @@
# This file is distributed under the same license as the audiotube package. # This file is distributed under the same license as the audiotube package.
# #
# Automatically generated, 2021. # Automatically generated, 2021.
# Eloy Cuadra <[email protected]>, 2021. # Eloy Cuadra <[email protected]>, 2021, 2022, 2023.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: audiotube\n" "Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2021-12-06 00:36+0100\n" "PO-Revision-Date: 2023-01-29 00:58+0100\n"
"Last-Translator: Eloy Cuadra <[email protected]>\n" "Last-Translator: Eloy Cuadra <[email protected]>\n"
"Language-Team: Spanish <[email protected]>\n" "Language-Team: Spanish <[email protected]>\n"
"Language: es\n" "Language: es\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Lokalize 21.11.90\n" "X-Generator: Lokalize 22.12.1\n"
#, kde-format #, kde-format
msgctxt "NAME OF TRANSLATORS" msgctxt "NAME OF TRANSLATORS"
@@ -29,25 +29,45 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "[email protected]" msgstr "[email protected]"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "Reproducir" msgstr "Reproducir"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, kde-format #, kde-format
msgid "Play Next" msgid "Shuffle"
msgstr "Reproducir siguiente" msgstr "Desordenar"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Open in Browser"
msgstr "Añadir a la lista de reproducción" msgstr "Abrir en el navegador"
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr "Álbum • %1"
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr "Más"
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "Radio"
#: contents/ui/ArtistPage.qml:46
#, kde-format
msgid "Artist"
msgstr "Artista"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
@@ -56,22 +76,22 @@ msgstr ""
"La reproducción de vídeo aún no está permitida. ¿Desea reproducir solo el " "La reproducción de vídeo aún no está permitida. ¿Desea reproducir solo el "
"sonido de «%1»?" "sonido de «%1»?"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "Álbumes" msgstr "Álbumes"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "Sencillos" msgstr "Sencillos"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "Canciones" msgstr "Canciones"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "Vídeos" msgstr "Vídeos"
@@ -86,85 +106,173 @@ msgstr "Aceptar"
msgid "Cancel" msgid "Cancel"
msgstr "Cancelar" msgstr "Cancelar"
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr "Favoritas"
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "Mostrar todas"
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "" msgstr "Más reproducidas"
#: contents/ui/main.qml:94 #: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr "canciones reproducidas"
#: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "AudioTube" msgstr "AudioTube"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "Eliminar pista" msgstr "Eliminar pista"
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "Borrar todo"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "Desordenar"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "Pausar"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "Ningún medio en reproducción" msgstr "Ningún medio en reproducción"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "Expandir" msgstr "Biblioteca"
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Artists"
msgstr "Artistas"
#: contents/ui/SearchPage.qml:29
#, kde-format
msgid "Playlists"
msgstr "Listas de reproducción"
#: contents/ui/SearchPage.qml:36
#, kde-format
msgid "Unknown"
msgstr "Desconocido"
#: contents/ui/SearchPage.qml:117
#, kde-format
msgid "Play next"
msgstr "Reproducir siguiente"
#: contents/ui/SearchPage.qml:129
#, kde-format
msgid "Radio"
msgstr "Radio"
#: contents/ui/SearchPage.qml:147
#, kde-format
msgid "Find music on YouTube Music"
msgstr "Encuentre música en YouTube Music"
#: contents/ui/SearchPage.qml:150
#, kde-format #, kde-format
msgid "Search" msgid "Search"
msgstr "Buscar" msgstr "Buscar"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "Canciones reproducidas"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "Lista de canciones desconocida"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "Todavía no contiene canciones"
#: contents/ui/PlaylistPage.qml:42
#, kde-format
msgid "Playlist"
msgstr "Lista de reproducción"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr "Búsquedas anteriores:"
#: contents/ui/SearchPage.qml:28
#, kde-format
msgid "Artists"
msgstr "Artistas"
#: contents/ui/SearchPage.qml:30
#, kde-format
msgid "Playlists"
msgstr "Listas de reproducción"
#: contents/ui/SearchPage.qml:37
#, kde-format
msgid "Unknown"
msgstr "Desconocido"
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "No hay búsquedas anteriores coincidentes"
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr "eliminar del historial de búsqueda"
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr "Contraer la barra lateral"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Reproducir siguiente"
#: 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:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Eliminar favorita"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Añadir favorita"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr "Eliminar del historial"
#~ msgid "Favourite Songs"
#~ msgstr "Canciones favoritas"
#~ msgid "Back"
#~ msgstr "Volver"
#~ msgid "Find music on YouTube Music"
#~ msgstr "Encuentre música en YouTube Music"
#~ msgid "Add to Playlist"
#~ msgstr "Añadir a la lista de reproducción"
#~ msgid "Play next"
#~ msgstr "Reproducir siguiente"
#~ msgid "Clear"
#~ msgstr "Borrar todo"
#~ msgid "Pause"
#~ msgstr "Pausar"
#~ msgid "Expand"
#~ msgstr "Expandir"
#~ msgid "Play only Audio" #~ msgid "Play only Audio"
#~ msgstr "Reproducir solo el sonido" #~ msgstr "Reproducir solo el sonido"
+184 -76
View File
@@ -1,16 +1,16 @@
# Translation for audiotube.po to Euskara/Basque (eu). # Translation for audiotube.po to Euskara/Basque (eu).
# Copyright (C) 2021-2022, This file is copyright: # Copyright (C) 2021-2023 This file is copyright:
# This file is distributed under the same license as the audiotube package. # This file is distributed under the same license as the audiotube package.
# KDE euskaratzeko proiektuko arduraduna <[email protected]>. # KDE euskaratzeko proiektuko arduraduna <[email protected]>.
# #
# Translators: # Translators:
# Iñigo Salvador Azurmendi <[email protected]>, 2021, 2022. # Iñigo Salvador Azurmendi <[email protected]>, 2021, 2022, 2023.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: audiotube\n" "Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2022-02-21 18:58+0100\n" "PO-Revision-Date: 2023-01-27 21:02+0100\n"
"Last-Translator: Iñigo Salvador Azurmendi <[email protected]>\n" "Last-Translator: Iñigo Salvador Azurmendi <[email protected]>\n"
"Language-Team: Basque <[email protected]>\n" "Language-Team: Basque <[email protected]>\n"
"Language: eu\n" "Language: eu\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 21.12.2\n" "X-Generator: Lokalize 22.12.1\n"
#, kde-format #, kde-format
msgctxt "NAME OF TRANSLATORS" msgctxt "NAME OF TRANSLATORS"
@@ -30,25 +30,45 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "[email protected]" msgstr "[email protected]"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "Jo" msgstr "Jo"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, kde-format #, kde-format
msgid "Play Next" msgid "Shuffle"
msgstr "Jo hurrengoa" msgstr "Nahastu"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Open in Browser"
msgstr "Gehitu jotze-zerrendara" msgstr "Ireki arakatzailean"
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr "Albuma • %1"
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr "Gehiago"
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "Irratia"
#: contents/ui/ArtistPage.qml:46
#, kde-format
msgid "Artist"
msgstr "Artista"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
@@ -57,22 +77,22 @@ msgstr ""
"Oraindik ez dago bideoa atzera jotzeko euskarririk. «%1»(r)en audioa " "Oraindik ez dago bideoa atzera jotzeko euskarririk. «%1»(r)en audioa "
"bakarrik jo nahi duzu?" "bakarrik jo nahi duzu?"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "Albumak" msgstr "Albumak"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "Banakoa" msgstr "Banakoa"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "Abestiak" msgstr "Abestiak"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "Bideoak" msgstr "Bideoak"
@@ -87,85 +107,173 @@ msgstr "Ados"
msgid "Cancel" msgid "Cancel"
msgstr "Utzi" msgstr "Utzi"
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr "Gogokoak"
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "Erakutsi denak"
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "" msgstr "Gehien jotakoa"
#: contents/ui/main.qml:94 #: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr "jotako abestiak"
#: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "AudioTube" msgstr "AudioTube"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "Kendu pista" msgstr "Kendu pista"
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "Garbitu"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "Nahastu"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "Eten"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "Ez da euskarririk jotzen ari" msgstr "Ez da euskarririk jotzen ari"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "Zabaldu" msgstr "Liburutegia"
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Artists"
msgstr "Artistak"
#: contents/ui/SearchPage.qml:29
#, kde-format
msgid "Playlists"
msgstr "Jotze-zerrendak"
#: contents/ui/SearchPage.qml:36
#, kde-format
msgid "Unknown"
msgstr "Ezezaguna"
#: contents/ui/SearchPage.qml:117
#, kde-format
msgid "Play next"
msgstr "Jo hurrengoa"
#: contents/ui/SearchPage.qml:129
#, kde-format
msgid "Radio"
msgstr "Irratia"
#: contents/ui/SearchPage.qml:147
#, kde-format
msgid "Find music on YouTube Music"
msgstr "Aurkitu musika «Youtube Music»en"
#: contents/ui/SearchPage.qml:150
#, kde-format #, kde-format
msgid "Search" msgid "Search"
msgstr "Bilatu" msgstr "Bilatu"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "Jotako abestiak"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "Abesti zerrenda ezezaguna"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "Hemen oraindik ez dago abestirik"
#: contents/ui/PlaylistPage.qml:42
#, kde-format
msgid "Playlist"
msgstr "Jotze-zerrenda"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr "Aurreko bilaketak:"
#: contents/ui/SearchPage.qml:28
#, kde-format
msgid "Artists"
msgstr "Artistak"
#: contents/ui/SearchPage.qml:30
#, kde-format
msgid "Playlists"
msgstr "Jotze-zerrendak"
#: contents/ui/SearchPage.qml:37
#, kde-format
msgid "Unknown"
msgstr "Ezezaguna"
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "Ez dago bat datorren aurreko bilaketarik"
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr "Kendu bilaketa-historiatik"
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr "Tolestu Alboko-barra"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Jo hurrengoa"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Gehitu ilaran"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Kendu gogokoa"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Gehitu gogokoa"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr "Kendu historiatik"
#~ msgid "Favourite Songs"
#~ msgstr "Gogoko abestiak"
#~ msgid "Back"
#~ msgstr "Atzera"
#~ msgid "Find music on YouTube Music"
#~ msgstr "Aurkitu musika «Youtube Music»en"
#~ msgid "Add to Playlist"
#~ msgstr "Gehitu jotze-zerrendara"
#~ msgid "Play next"
#~ msgstr "Jo hurrengoa"
#~ msgid "Clear"
#~ msgstr "Garbitu"
#~ msgid "Pause"
#~ msgstr "Eten"
#~ msgid "Expand"
#~ msgstr "Zabaldu"
#~ msgid "Play only Audio" #~ msgid "Play only Audio"
#~ msgstr "Audio bakarrik jo" #~ msgstr "Audio bakarrik jo"
+187 -74
View File
@@ -6,8 +6,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: audiotube\n" "Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2022-01-11 22:47+0200\n" "PO-Revision-Date: 2022-10-24 07:57+0300\n"
"Last-Translator: Tommi Nieminen <[email protected]>\n" "Last-Translator: Tommi Nieminen <[email protected]>\n"
"Language-Team: Finnish <[email protected]>\n" "Language-Team: Finnish <[email protected]>\n"
"Language: fi\n" "Language: fi\n"
@@ -15,7 +15,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 20.04.2\n" "X-Generator: Lokalize 20.12.0\n"
#, kde-format #, kde-format
msgctxt "NAME OF TRANSLATORS" msgctxt "NAME OF TRANSLATORS"
@@ -27,25 +27,46 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "[email protected]" msgstr "[email protected]"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "Toista" msgstr "Toista"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, kde-format #, kde-format
msgid "Play Next" msgid "Shuffle"
msgstr "Toista seuraava" msgstr "Sekoita"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Open in Browser"
msgstr "Lisää soittolistaan" msgstr "Avaa selaimeen"
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr ""
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr ""
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "Radio"
#: contents/ui/ArtistPage.qml:46
#, fuzzy, kde-format
#| msgid "Artists"
msgid "Artist"
msgstr "Artistit"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
@@ -53,22 +74,22 @@ msgid ""
msgstr "" msgstr ""
"Videotoistoa ei vielä tueta. Haluatko toistaa videosta ”%1” vain äänen?" "Videotoistoa ei vielä tueta. Haluatko toistaa videosta ”%1” vain äänen?"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "Albumit" msgstr "Albumit"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "Singlet" msgstr "Singlet"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "Kappaleet" msgstr "Kappaleet"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "Videot" msgstr "Videot"
@@ -83,85 +104,177 @@ msgstr "OK"
msgid "Cancel" msgid "Cancel"
msgstr "Peru" msgstr "Peru"
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr "Suosikit"
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "Näytä kaikki"
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "" msgstr "Soitetuimmat"
#: contents/ui/main.qml:94 #: contents/ui/LibraryPage.qml:230
#, fuzzy, kde-format
#| msgid "Played Songs"
msgid "played Songs"
msgstr "Soitetut kappaleet"
#: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "AudioTube" msgstr "AudioTube"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "Poista raita" msgstr "Poista raita"
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "Tyhjennä"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "Sekoita"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "Tauko"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "Mitään ei toisteta" msgstr "Mitään ei toisteta"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "Laajenna" msgstr ""
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Artists"
msgstr "Artistit"
#: contents/ui/SearchPage.qml:29
#, kde-format
msgid "Playlists"
msgstr "Soittolistat"
#: contents/ui/SearchPage.qml:36
#, kde-format
msgid "Unknown"
msgstr "Tuntematon"
#: contents/ui/SearchPage.qml:117
#, kde-format
msgid "Play next"
msgstr "Toista seuraava"
#: contents/ui/SearchPage.qml:129
#, kde-format
msgid "Radio"
msgstr "Radio"
#: contents/ui/SearchPage.qml:147
#, kde-format
msgid "Find music on YouTube Music"
msgstr "Etsi musiikkia Youtube Musicista"
#: contents/ui/SearchPage.qml:150
#, kde-format #, kde-format
msgid "Search" msgid "Search"
msgstr "Etsi" msgstr "Etsi"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "Soitetut kappaleet"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "Tuntematon kappaleluettelo"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "Ei vielä kappaleita"
#: contents/ui/PlaylistPage.qml:42
#, fuzzy, kde-format
#| msgid "Playlists"
msgid "Playlist"
msgstr "Soittolistat"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr ""
#: contents/ui/SearchPage.qml:28
#, kde-format
msgid "Artists"
msgstr "Artistit"
#: contents/ui/SearchPage.qml:30
#, kde-format
msgid "Playlists"
msgstr "Soittolistat"
#: contents/ui/SearchPage.qml:37
#, kde-format
msgid "Unknown"
msgstr "Tuntematon"
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Toista seuraava"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Remove Favourite"
msgstr "Suosikit"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Add Favourite"
msgstr "Suosikit"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr ""
#~ msgid "Favourite Songs"
#~ msgstr "Suosikkikappaleet"
#~ msgid "Back"
#~ msgstr "Takaisin"
#~ msgid "Find music on YouTube Music"
#~ msgstr "Etsi musiikkia Youtube Musicista"
#~ msgid "Add to Playlist"
#~ msgstr "Lisää soittolistaan"
#~ msgid "Play next"
#~ msgstr "Toista seuraava"
#~ msgid "Clear"
#~ msgstr "Tyhjennä"
#~ msgid "Pause"
#~ msgstr "Tauko"
#~ msgid "Expand"
#~ msgstr "Laajenna"
#~ msgid "Play only Audio" #~ msgid "Play only Audio"
#~ msgstr "Toista vain ääni" #~ msgstr "Toista vain ääni"
+186 -77
View File
@@ -1,18 +1,19 @@
# Xavier Besnard <[email protected]>, 2021. # Xavier Besnard <[email protected]>, 2021, 2022.
# Xavier BESNARD <xavier.besnard]neuf.fr>, 2022, 2023.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: audiotube\n" "Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2021-12-06 10:18+0100\n" "PO-Revision-Date: 2023-01-29 10:52+0100\n"
"Last-Translator: Xavier Besnard <xavier.besnard@neuf.fr>\n" "Last-Translator: Xavier BESNARD <xavier.besnard]neuf.fr>\n"
"Language-Team: French <[email protected]>\n" "Language-Team: fr\n"
"Language: fr\n" "Language: fr\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Lokalize 21.11.90\n" "X-Generator: Lokalize 22.12.1\n"
#, kde-format #, kde-format
msgctxt "NAME OF TRANSLATORS" msgctxt "NAME OF TRANSLATORS"
@@ -24,25 +25,45 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "[email protected]" msgstr "[email protected]"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "Lire" msgstr "Lire"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, kde-format #, kde-format
msgid "Play Next" msgid "Shuffle"
msgstr "Lire le suivant" msgstr "Mélanger"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Open in Browser"
msgstr "Ajouter à la liste de lecture" msgstr "Ouvrir dans un navigateur"
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr "Album • %1"
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr "Et plus encore"
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "Radio"
#: contents/ui/ArtistPage.qml:46
#, kde-format
msgid "Artist"
msgstr "Artiste"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
@@ -51,22 +72,22 @@ msgstr ""
"La lecture de vidéos n'est pas encore prise en charge. Voulez-vous vraiment " "La lecture de vidéos n'est pas encore prise en charge. Voulez-vous vraiment "
"lire uniquement l'audio de « %1 » ?" "lire uniquement l'audio de « %1 » ?"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "Albums" msgstr "Albums"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "Titres uniques" msgstr "Titres uniques"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "Chansons" msgstr "Chansons"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "Vidéos" msgstr "Vidéos"
@@ -81,85 +102,173 @@ msgstr "Ok"
msgid "Cancel" msgid "Cancel"
msgstr "Annuler" msgstr "Annuler"
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr "Favoris"
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "Tout afficher"
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "" msgstr "Les plus lus"
#: contents/ui/main.qml:94 #: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr "Titres lus"
#: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "AudioTube" msgstr "AudioTube"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "Supprimer une piste" msgstr "Supprimer une piste"
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "Effacer"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "Mélanger"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "Pause"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "Aucun média en lecture" msgstr "Aucun média en lecture"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "Développer" msgstr "Bibliothèque"
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Artists"
msgstr "Artistes"
#: contents/ui/SearchPage.qml:29
#, kde-format
msgid "Playlists"
msgstr "Listes de lecture"
#: contents/ui/SearchPage.qml:36
#, kde-format
msgid "Unknown"
msgstr "Inconnu"
#: contents/ui/SearchPage.qml:117
#, kde-format
msgid "Play next"
msgstr "Lire le suivant"
#: contents/ui/SearchPage.qml:129
#, kde-format
msgid "Radio"
msgstr "Radio"
#: contents/ui/SearchPage.qml:147
#, kde-format
msgid "Find music on YouTube Music"
msgstr "Rechercher de la musique sur « YouTube Music »"
#: contents/ui/SearchPage.qml:150
#, kde-format #, kde-format
msgid "Search" msgid "Search"
msgstr "Rechercher" msgstr "Rechercher"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "Titres lus"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "Liste inconnue de titres"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "Aucun titre ici encore"
#: contents/ui/PlaylistPage.qml:42
#, kde-format
msgid "Playlist"
msgstr "Liste de lecture"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr "Recherches précédentes :"
#: contents/ui/SearchPage.qml:28
#, kde-format
msgid "Artists"
msgstr "Artistes"
#: contents/ui/SearchPage.qml:30
#, kde-format
msgid "Playlists"
msgstr "Listes de lecture"
#: contents/ui/SearchPage.qml:37
#, kde-format
msgid "Unknown"
msgstr "Inconnu"
#: 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:322
#, kde-format
msgid "remove from search history"
msgstr "supprimer de l'historique de recherche"
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr "Réduire la barre latérale"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Lire le suivant"
#: 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:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Supprimer un favori"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Ajouter un favori"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr "Supprimer de l'historique"
#~ msgid "Favourite Songs"
#~ msgstr "Titres favoris"
#~ msgid "Back"
#~ msgstr "En arrière"
#~ msgid "Find music on YouTube Music"
#~ msgstr "Rechercher de la musique sur « YouTube Music »"
#~ msgid "Add to Playlist"
#~ msgstr "Ajouter à la liste de lecture"
#~ msgid "Play next"
#~ msgstr "Lire le suivant"
#~ msgid "Clear"
#~ msgstr "Effacer"
#~ msgid "Pause"
#~ msgstr "Pause"
#~ msgid "Expand"
#~ msgstr "Développer"
#~ msgid "Play only Audio" #~ msgid "Play only Audio"
#~ msgstr "Ne lire que l'audio" #~ msgstr "Ne lire que l'audio"
+175 -70
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: audiotube\n" "Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2021-09-17 20:09+0530\n" "PO-Revision-Date: 2021-09-17 20:09+0530\n"
"Last-Translator: Raghavendra Kamath <[email protected]>\n" "Last-Translator: Raghavendra Kamath <[email protected]>\n"
"Language-Team: kde-hindi\n" "Language-Team: kde-hindi\n"
@@ -27,25 +27,46 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "[email protected]" msgstr "[email protected]"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "बजाएँ" msgstr "बजाएँ"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, kde-format #, kde-format
msgid "Play Next" msgid "Shuffle"
msgstr "अगला बजाएँ" msgstr "फेंटें"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Open in Browser"
msgstr "गीत-सूची में जोड़ें" msgstr ""
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr ""
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr ""
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "रेडियो"
#: contents/ui/ArtistPage.qml:46
#, fuzzy, kde-format
#| msgid "Artists"
msgid "Artist"
msgstr "कलाकार"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
@@ -53,22 +74,22 @@ msgid ""
msgstr "" msgstr ""
"वीडियो चलाना अभी तक समर्थित नहीं है। क्या आप केवल \"%1\" का ध्वनी चलाना चाहते हैं?" "वीडियो चलाना अभी तक समर्थित नहीं है। क्या आप केवल \"%1\" का ध्वनी चलाना चाहते हैं?"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "एल्बम्स" msgstr "एल्बम्स"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "एक गीत" msgstr "एक गीत"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "गीत" msgstr "गीत"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "वीडियो" msgstr "वीडियो"
@@ -83,85 +104,169 @@ msgstr ""
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr ""
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr ""
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr ""
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "" msgstr ""
#: contents/ui/main.qml:94 #: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr ""
#: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "ओडियो-ट्यूब" msgstr "ओडियो-ट्यूब"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "गाना हटाएँ" msgstr "गाना हटाएँ"
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "साफ करें"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "फेंटें"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "रोकें"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "कोई मीडिया नहीं बजा रहा है" msgstr "कोई मीडिया नहीं बजा रहा है"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "विस्तृत करें" msgstr ""
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Artists"
msgstr "कलाकार"
#: contents/ui/SearchPage.qml:29
#, kde-format
msgid "Playlists"
msgstr "गीत-सूचीयाँ"
#: contents/ui/SearchPage.qml:36
#, kde-format
msgid "Unknown"
msgstr "अज्ञात"
#: contents/ui/SearchPage.qml:117
#, kde-format
msgid "Play next"
msgstr "अगला बजाएँ"
#: contents/ui/SearchPage.qml:129
#, kde-format
msgid "Radio"
msgstr "रेडियो"
#: contents/ui/SearchPage.qml:147
#, kde-format
msgid "Find music on YouTube Music"
msgstr "यूट्यूब संगीत पर संगीत ढूंढें"
#: contents/ui/SearchPage.qml:150
#, kde-format #, kde-format
msgid "Search" msgid "Search"
msgstr "खोजें" msgstr "खोजें"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr ""
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr ""
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr ""
#: contents/ui/PlaylistPage.qml:42
#, fuzzy, kde-format
#| msgid "Playlists"
msgid "Playlist"
msgstr "गीत-सूचीयाँ"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr ""
#: contents/ui/SearchPage.qml:28
#, kde-format
msgid "Artists"
msgstr "कलाकार"
#: contents/ui/SearchPage.qml:30
#, kde-format
msgid "Playlists"
msgstr "गीत-सूचीयाँ"
#: contents/ui/SearchPage.qml:37
#, kde-format
msgid "Unknown"
msgstr "अज्ञात"
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "अगला बजाएँ"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr ""
#~ msgid "Find music on YouTube Music"
#~ msgstr "यूट्यूब संगीत पर संगीत ढूंढें"
#~ msgid "Add to Playlist"
#~ msgstr "गीत-सूची में जोड़ें"
#~ msgid "Play next"
#~ msgstr "अगला बजाएँ"
#~ msgid "Clear"
#~ msgstr "साफ करें"
#~ msgid "Pause"
#~ msgstr "रोकें"
#~ msgid "Expand"
#~ msgstr "विस्तृत करें"
#~ msgid "Play only Audio" #~ msgid "Play only Audio"
#~ msgstr "केवल ध्वनी चलाएँ" #~ msgstr "केवल ध्वनी चलाएँ"
+264
View File
@@ -0,0 +1,264 @@
# Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the audiotube package.
# Linerly <[email protected]>, 2022, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2023-01-13 08:23+0700\n"
"Last-Translator: Linerly <[email protected]>\n"
"Language-Team: Indonesian <[email protected]>\n"
"Language: id\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 22.12.1\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Linerly"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "[email protected]"
#: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Play"
msgstr "Putar"
#: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:33
#, kde-format
msgid "Shuffle"
msgstr "Acak"
#: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#, kde-format
msgid "Open in Browser"
msgstr "Buka di Peramban"
#: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr "Album • %1"
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr "Lainnya"
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "Radio"
#: contents/ui/ArtistPage.qml:46
#, kde-format
msgid "Artist"
msgstr "Artis"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format
msgid ""
"Video playback is not supported yet. Do you want to play only the audio of "
"\"%1\"?"
msgstr ""
"Pemutaran video belum didukung. Apakah Anda ingin memutar audionya dari "
"\"%1\" saja?"
#: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format
msgid "Albums"
msgstr "Album"
#: contents/ui/ArtistPage.qml:87
#, kde-format
msgid "Singles"
msgstr "Single"
#: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format
msgid "Songs"
msgstr "Lagu"
#: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format
msgid "Videos"
msgstr "Video"
#: contents/ui/ConfirmationMessage.qml:16
#, kde-format
msgid "OK"
msgstr "Oke"
#: contents/ui/ConfirmationMessage.qml:21
#, kde-format
msgid "Cancel"
msgstr "Batalkan"
#: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format
msgid "Favourites"
msgstr "Favorit"
#: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "Tampilkan Semua"
#: contents/ui/LibraryPage.qml:214
#, kde-format
msgid "Most played"
msgstr "Paling banyak diputar"
#: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr "Lagu yang telah diputar"
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "Sekarang Diputarkan"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "Antrean"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr "Lirik"
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "Hapus Trek"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "Tidak ada media yang diputarkan"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
msgstr ""
#: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Search"
msgstr "Cari"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "Lagu yang telah diputar"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "Daftar lagu yang tidak diketahui"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "Belum ada lagu di sini"
#: contents/ui/PlaylistPage.qml:42
#, kde-format
msgid "Playlist"
msgstr "Daftar Putar"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr ""
#: contents/ui/SearchPage.qml:28
#, kde-format
msgid "Artists"
msgstr "Artis"
#: contents/ui/SearchPage.qml:30
#, kde-format
msgid "Playlists"
msgstr "Daftar Putar"
#: contents/ui/SearchPage.qml:37
#, kde-format
msgid "Unknown"
msgstr "Tidak diketahui"
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Putar Berikutnya"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Tambahkan ke antrean"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Hapus Favorit"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Tambahkan Favorit"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr ""
#~ msgid "Favourite Songs"
#~ msgstr "Lagu Favorit"
#~ msgid "Back"
#~ msgstr "Kembali"
#~ msgid "Find music on YouTube Music"
#~ msgstr "Cari musik di YouTube Music"
#~ msgid "Add to Playlist"
#~ msgstr "Tambahkan ke Daftar Putar"
#~ msgid "Play next"
#~ msgstr "Putar berikutnya"
+183 -75
View File
@@ -1,13 +1,13 @@
# Copyright (C) YEAR This file is copyright: # Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the audiotube package. # This file is distributed under the same license as the audiotube package.
# Vincenzo Reale <[email protected]>, 2021. # Vincenzo Reale <[email protected]>, 2021, 2022, 2023.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: audiotube\n" "Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2021-12-06 02:46+0100\n" "PO-Revision-Date: 2023-01-27 19:12+0100\n"
"Last-Translator: Vincenzo Reale <[email protected]>\n" "Last-Translator: Vincenzo Reale <[email protected]>\n"
"Language-Team: Italian <[email protected]>\n" "Language-Team: Italian <[email protected]>\n"
"Language: it\n" "Language: it\n"
@@ -15,7 +15,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 21.08.3\n" "X-Generator: Lokalize 22.12.1\n"
#, kde-format #, kde-format
msgctxt "NAME OF TRANSLATORS" msgctxt "NAME OF TRANSLATORS"
@@ -27,25 +27,45 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "[email protected]" msgstr "[email protected]"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "Riproduci" msgstr "Riproduci"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, kde-format #, kde-format
msgid "Play Next" msgid "Shuffle"
msgstr "Riproduci successivo" msgstr "Mescola"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Open in Browser"
msgstr "Aggiungi alla scaletta" msgstr "Apri nel browser"
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr "Album • %1"
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr "Altro"
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "Radio"
#: contents/ui/ArtistPage.qml:46
#, kde-format
msgid "Artist"
msgstr "Artista"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
@@ -54,22 +74,22 @@ msgstr ""
"La riproduzione dei video non è ancora supportata. Vuoi riprodurre solo " "La riproduzione dei video non è ancora supportata. Vuoi riprodurre solo "
"l'audio di «%1»?" "l'audio di «%1»?"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "Album" msgstr "Album"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "Singoli" msgstr "Singoli"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "Brani" msgstr "Brani"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "Video" msgstr "Video"
@@ -84,85 +104,173 @@ msgstr "OK"
msgid "Cancel" msgid "Cancel"
msgstr "Annulla" msgstr "Annulla"
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr "Preferiti"
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "Mostra tutto"
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "" msgstr "Più riprodotti"
#: contents/ui/main.qml:94 #: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr "Brani riprodotti"
#: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "AudioTube" msgstr "AudioTube"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "Rimuovi traccia" msgstr "Rimuovi traccia"
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "Pulisci"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "Mescola"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "Pausa"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "Nessun supporto in riproduzione" msgstr "Nessun supporto in riproduzione"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "Espandi" msgstr "Raccolta"
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Artists"
msgstr "Artisti"
#: contents/ui/SearchPage.qml:29
#, kde-format
msgid "Playlists"
msgstr "Scalette"
#: contents/ui/SearchPage.qml:36
#, kde-format
msgid "Unknown"
msgstr "Sconosciuto"
#: contents/ui/SearchPage.qml:117
#, kde-format
msgid "Play next"
msgstr "Riproduci successivo"
#: contents/ui/SearchPage.qml:129
#, kde-format
msgid "Radio"
msgstr "Radio"
#: contents/ui/SearchPage.qml:147
#, kde-format
msgid "Find music on YouTube Music"
msgstr "Trova musica su Youtube Music"
#: contents/ui/SearchPage.qml:150
#, kde-format #, kde-format
msgid "Search" msgid "Search"
msgstr "Cerca" msgstr "Cerca"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "Brani riprodotti"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "Elenco di brani sconosciuto"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "Non c'è ancora alcun brano"
#: contents/ui/PlaylistPage.qml:42
#, kde-format
msgid "Playlist"
msgstr "Scaletta"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr "Ricerche precedenti:"
#: contents/ui/SearchPage.qml:28
#, kde-format
msgid "Artists"
msgstr "Artisti"
#: contents/ui/SearchPage.qml:30
#, kde-format
msgid "Playlists"
msgstr "Scalette"
#: contents/ui/SearchPage.qml:37
#, kde-format
msgid "Unknown"
msgstr "Sconosciuto"
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "Nessuna ricerca precedente corrispondente"
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr "rimuovi dalla cronologia delle ricerche"
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr "Contrai la barra laterale"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Riproduci successivo"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Aggiungi alla coda"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Rimuovi preferito"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Aggiungi preferito"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr "Rimuovi dalla cronologia"
#~ msgid "Favourite Songs"
#~ msgstr "Brani preferiti"
#~ msgid "Back"
#~ msgstr "Indietro"
#~ msgid "Find music on YouTube Music"
#~ msgstr "Trova musica su Youtube Music"
#~ msgid "Add to Playlist"
#~ msgstr "Aggiungi alla scaletta"
#~ msgid "Play next"
#~ msgstr "Riproduci successivo"
#~ msgid "Clear"
#~ msgstr "Pulisci"
#~ msgid "Pause"
#~ msgstr "Pausa"
#~ msgid "Expand"
#~ msgstr "Espandi"
#~ msgid "Play only Audio" #~ msgid "Play only Audio"
#~ msgstr "Riproduci solo l'audio" #~ msgstr "Riproduci solo l'audio"
+244
View File
@@ -0,0 +1,244 @@
msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2021-05-29 19:15-0700\n"
"Last-Translator: Japanese KDE translation team <[email protected]>\n"
"Language-Team: Japanese <[email protected]>\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Accelerator-Marker: &\n"
"X-Text-Markup: kde4\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr ""
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr ""
#: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Play"
msgstr ""
#: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:33
#, kde-format
msgid "Shuffle"
msgstr ""
#: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#, kde-format
msgid "Open in Browser"
msgstr ""
#: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr ""
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr ""
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr ""
#: contents/ui/ArtistPage.qml:46
#, kde-format
msgid "Artist"
msgstr ""
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format
msgid ""
"Video playback is not supported yet. Do you want to play only the audio of "
"\"%1\"?"
msgstr ""
#: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format
msgid "Albums"
msgstr ""
#: contents/ui/ArtistPage.qml:87
#, kde-format
msgid "Singles"
msgstr ""
#: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format
msgid "Songs"
msgstr ""
#: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format
msgid "Videos"
msgstr ""
#: contents/ui/ConfirmationMessage.qml:16
#, kde-format
msgid "OK"
msgstr ""
#: contents/ui/ConfirmationMessage.qml:21
#, kde-format
msgid "Cancel"
msgstr ""
#: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format
msgid "Favourites"
msgstr ""
#: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr ""
#: contents/ui/LibraryPage.qml:214
#, kde-format
msgid "Most played"
msgstr ""
#: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr ""
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr ""
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
msgstr ""
#: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Search"
msgstr ""
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr ""
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr ""
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr ""
#: contents/ui/PlaylistPage.qml:42
#, kde-format
msgid "Playlist"
msgstr ""
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr ""
#: contents/ui/SearchPage.qml:28
#, kde-format
msgid "Artists"
msgstr ""
#: contents/ui/SearchPage.qml:30
#, kde-format
msgid "Playlists"
msgstr ""
#: contents/ui/SearchPage.qml:37
#, kde-format
msgid "Unknown"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr ""
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr ""
+264
View File
@@ -0,0 +1,264 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the audiotube package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.2.2\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Temuri Doghonadze"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "[email protected]"
#: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Play"
msgstr "დაკვრა"
#: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:33
#, kde-format
msgid "Shuffle"
msgstr "შემთხვევით"
#: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#, kde-format
msgid "Open in Browser"
msgstr "ბრაუზერში გახსნა"
#: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr "ალბომი • %1"
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr "მეტი"
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "რადიო"
#: contents/ui/ArtistPage.qml:46
#, kde-format
msgid "Artist"
msgstr "შემსრულებელი"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format
msgid ""
"Video playback is not supported yet. Do you want to play only the audio of "
"\"%1\"?"
msgstr ""
"ვიდეოს დაკვრა ჯერ მხარდაჭერილი არაა. გნებავთ \"%1\"-ის მხოლოდ ხმა დავუკრა?"
#: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format
msgid "Albums"
msgstr "ალბომები"
#: contents/ui/ArtistPage.qml:87
#, kde-format
msgid "Singles"
msgstr "სინგლები"
#: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format
msgid "Songs"
msgstr "სიმღერები"
#: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format
msgid "Videos"
msgstr "ვიდეო"
#: contents/ui/ConfirmationMessage.qml:16
#, kde-format
msgid "OK"
msgstr "კარგი"
#: contents/ui/ConfirmationMessage.qml:21
#, kde-format
msgid "Cancel"
msgstr "გაუქმენა"
#: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format
msgid "Favourites"
msgstr "რჩეულები"
#: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "ყველას ჩვენება"
#: contents/ui/LibraryPage.qml:214
#, kde-format
msgid "Most played"
msgstr "ხშირად დაკრულები"
#: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr "დაკრული სიმღერები"
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "მიმდინარეობს დაკვრა"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "რიგი"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr "ლირიკა"
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "აუდიობილიკის წაშლა"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "არაფერს ვუკრავ"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
msgstr "ბიბლიოთეკა"
#: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Search"
msgstr "ძებნა"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "დაკრული სიმღერები"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "უცნობი სიმღერების სია"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "აქ ჯერ სიმღერები არაა"
#: contents/ui/PlaylistPage.qml:42
#, kde-format
msgid "Playlist"
msgstr "დასაკრავი სია"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr "წინა ძებნები:"
#: contents/ui/SearchPage.qml:28
#, kde-format
msgid "Artists"
msgstr "შემსრულებლები"
#: contents/ui/SearchPage.qml:30
#, kde-format
msgid "Playlists"
msgstr "დასაკრავი სიები"
#: contents/ui/SearchPage.qml:37
#, kde-format
msgid "Unknown"
msgstr "უცნობი"
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "წინა ძებნებს არ ემთხვევა"
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr "ძებნის ისტორიიდან წაშლა"
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr "გვერდითი ზოლის ჩაკეცვა"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "შემდეგის დაკვრა"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "რიგში ჩამატება"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "რჩეულის წაშლა"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "რჩეულის დამატება"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr "ისტორიიდან წაშლა"
#~ msgid "Favourite Songs"
#~ msgstr "რჩეული სიმღერები"
#~ msgid "Back"
#~ msgstr "უკან"
#~ msgid "Find music on YouTube Music"
#~ msgstr "იპოვეთ მუსიკა YouTube Music-ზე"
#~ msgid "Add to Playlist"
#~ msgstr "დასაკრავი სიაში დამატება"
#~ msgid "Play next"
#~ msgstr "შემდეგის დაკვრა"
+189 -76
View File
@@ -1,21 +1,21 @@
# Copyright (C) YEAR This file is copyright: # Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the audiotube package. # This file is distributed under the same license as the audiotube package.
# Shinjo Park <[email protected]>, 2021. # Shinjo Park <[email protected]>, 2021, 2022.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: audiotube\n" "Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2021-12-08 00:45+0100\n" "PO-Revision-Date: 2022-10-03 14:20+0200\n"
"Last-Translator: Shinjo Park <[email protected]>\n" "Last-Translator: Shinjo Park <[email protected]>\n"
"Language-Team: Korean <kde-kr@kde.org>\n" "Language-Team: Korean <kde-i18n-doc@kde.org>\n"
"Language: ko\n" "Language: ko\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Lokalize 21.08.1\n" "X-Generator: Lokalize 21.12.3\n"
#, kde-format #, kde-format
msgctxt "NAME OF TRANSLATORS" msgctxt "NAME OF TRANSLATORS"
@@ -27,47 +27,68 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "[email protected]" msgstr "[email protected]"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "재생" msgstr "재생"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, kde-format #, kde-format
msgid "Play Next" msgid "Shuffle"
msgstr "다음 재생" msgstr "무순서 재생"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Open in Browser"
msgstr "재생 목록에 추가" msgstr "브라우저로 열기"
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr ""
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr ""
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "라디오"
#: contents/ui/ArtistPage.qml:46
#, fuzzy, kde-format
#| msgid "Artists"
msgid "Artist"
msgstr "아티스트"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
"\"%1\"?" "\"%1\"?"
msgstr "비디오 재생은 지원하지 않습니다. \"%1\"의 오디오만 재생하시겠습니까?" msgstr "비디오 재생은 지원하지 않습니다. \"%1\"의 오디오만 재생하시겠습니까?"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "앨범" msgstr "앨범"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "싱글" msgstr "싱글"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "곡" msgstr "곡"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "비디오" msgstr "비디오"
@@ -82,85 +103,177 @@ msgstr "확인"
msgid "Cancel" msgid "Cancel"
msgstr "취소" msgstr "취소"
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr "책갈피"
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "모두 표시"
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "" msgstr "가장 많이 재생됨"
#: contents/ui/main.qml:94 #: contents/ui/LibraryPage.qml:230
#, fuzzy, kde-format
#| msgid "Played Songs"
msgid "played Songs"
msgstr "재생한 노래"
#: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "AudioTube" msgstr "AudioTube"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "트랙 삭제" msgstr "트랙 삭제"
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "지우기"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "무순서 재생"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "일시 정지"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "재생 중인 미디어 없음" msgstr "재생 중인 미디어 없음"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "확장" msgstr ""
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Artists"
msgstr "아티스트"
#: contents/ui/SearchPage.qml:29
#, kde-format
msgid "Playlists"
msgstr "재생 목록"
#: contents/ui/SearchPage.qml:36
#, kde-format
msgid "Unknown"
msgstr "알 수 없음"
#: contents/ui/SearchPage.qml:117
#, kde-format
msgid "Play next"
msgstr "다음 재생"
#: contents/ui/SearchPage.qml:129
#, kde-format
msgid "Radio"
msgstr "라디오"
#: contents/ui/SearchPage.qml:147
#, kde-format
msgid "Find music on YouTube Music"
msgstr "YouTube Music에서 음악 찾기"
#: contents/ui/SearchPage.qml:150
#, kde-format #, kde-format
msgid "Search" msgid "Search"
msgstr "검색" msgstr "검색"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "재생한 노래"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "알 수 없는 노래 목록"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "목록에 등록된 곡 없음"
#: contents/ui/PlaylistPage.qml:42
#, fuzzy, kde-format
#| msgid "Playlists"
msgid "Playlist"
msgstr "재생 목록"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr ""
#: contents/ui/SearchPage.qml:28
#, kde-format
msgid "Artists"
msgstr "아티스트"
#: contents/ui/SearchPage.qml:30
#, kde-format
msgid "Playlists"
msgstr "재생 목록"
#: contents/ui/SearchPage.qml:37
#, kde-format
msgid "Unknown"
msgstr "알 수 없음"
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "다음 재생"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Remove Favourite"
msgstr "책갈피"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Add Favourite"
msgstr "책갈피"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr ""
#~ msgid "Favourite Songs"
#~ msgstr "책갈피에 등록된 노래"
#~ msgid "Back"
#~ msgstr "뒤로"
#~ msgid "Find music on YouTube Music"
#~ msgstr "YouTube Music에서 음악 찾기"
#~ msgid "Add to Playlist"
#~ msgstr "재생 목록에 추가"
#~ msgid "Play next"
#~ msgstr "다음 재생"
#~ msgid "Clear"
#~ msgstr "지우기"
#~ msgid "Pause"
#~ msgstr "일시 정지"
#~ msgid "Expand"
#~ msgstr "확장"
#~ msgid "Play only Audio" #~ msgid "Play only Audio"
#~ msgstr "오디오만 재생" #~ msgstr "오디오만 재생"
+184 -76
View File
@@ -1,13 +1,13 @@
# Copyright (C) YEAR This file is copyright: # Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the audiotube package. # This file is distributed under the same license as the audiotube package.
# #
# Freek de Kruijf <[email protected]>, 2021. # Freek de Kruijf <[email protected]>, 2021, 2022, 2023.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: audiotube\n" "Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2021-12-05 16:48+0100\n" "PO-Revision-Date: 2023-01-27 12:41+0100\n"
"Last-Translator: Freek de Kruijf <[email protected]>\n" "Last-Translator: Freek de Kruijf <[email protected]>\n"
"Language-Team: \n" "Language-Team: \n"
"Language: nl\n" "Language: nl\n"
@@ -15,37 +15,57 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Lokalize 21.08.3\n" "X-Generator: Lokalize 22.12.1\n"
#, kde-format #, kde-format
msgctxt "NAME OF TRANSLATORS" msgctxt "NAME OF TRANSLATORS"
msgid "Your names" msgid "Your names"
msgstr "Freek de Kruijf - 2021" msgstr "Freek de Kruijf - 2021 t/m 2023"
#, kde-format #, kde-format
msgctxt "EMAIL OF TRANSLATORS" msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "[email protected]" msgstr "[email protected]"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "Afspelen" msgstr "Afspelen"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, kde-format #, kde-format
msgid "Play Next" msgid "Shuffle"
msgstr "Volgende afspelen" msgstr "Willekeurig afspelen"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Open in Browser"
msgstr "Aan afspeellijst toevoegen" msgstr "In browser openen"
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr "Album • %1"
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr "Meer"
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "Radio"
#: contents/ui/ArtistPage.qml:46
#, kde-format
msgid "Artist"
msgstr "Artiest"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
@@ -54,22 +74,22 @@ msgstr ""
"Afspelen van video wordt nog niet ondersteund. Wilt u alleen het geluid van " "Afspelen van video wordt nog niet ondersteund. Wilt u alleen het geluid van "
"\"%1\" afspelen?" "\"%1\" afspelen?"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "Albums" msgstr "Albums"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "Enkelvoudige" msgstr "Enkelvoudige"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "Songs" msgstr "Songs"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "Video's" msgstr "Video's"
@@ -84,85 +104,173 @@ msgstr "OK"
msgid "Cancel" msgid "Cancel"
msgstr "Annuleren" msgstr "Annuleren"
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr "Favorieten"
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "Alles tonen"
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "" msgstr "Meest afgespeeld"
#: contents/ui/main.qml:94 #: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr "afgespeelde songs"
#: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "AudioTube" msgstr "AudioTube"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "Track verwijderen" msgstr "Track verwijderen"
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "Wissen"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "Willekeurig afspelen"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "Pauzeren"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "Er speelt geen medium" msgstr "Er speelt geen medium"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "Uitbreiden" msgstr "Bibliotheek"
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Artists"
msgstr "Artiesten"
#: contents/ui/SearchPage.qml:29
#, kde-format
msgid "Playlists"
msgstr "Afspeellijsten"
#: contents/ui/SearchPage.qml:36
#, kde-format
msgid "Unknown"
msgstr "Onbekend"
#: contents/ui/SearchPage.qml:117
#, kde-format
msgid "Play next"
msgstr "Volgende afspelen"
#: contents/ui/SearchPage.qml:129
#, kde-format
msgid "Radio"
msgstr "Radio"
#: contents/ui/SearchPage.qml:147
#, kde-format
msgid "Find music on YouTube Music"
msgstr "Muziek zoeken op YouTube Music"
#: contents/ui/SearchPage.qml:150
#, kde-format #, kde-format
msgid "Search" msgid "Search"
msgstr "Zoeken" msgstr "Zoeken"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "Afgespeelde songs"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "Onbekende lijst met songs"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "Er zijn hier nog geen songs"
#: contents/ui/PlaylistPage.qml:42
#, kde-format
msgid "Playlist"
msgstr "Afspeellijst"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr "Vorige zoekopdrachten:"
#: contents/ui/SearchPage.qml:28
#, kde-format
msgid "Artists"
msgstr "Artiesten"
#: contents/ui/SearchPage.qml:30
#, kde-format
msgid "Playlists"
msgstr "Afspeellijsten"
#: contents/ui/SearchPage.qml:37
#, kde-format
msgid "Unknown"
msgstr "Onbekend"
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "Geen overeenkomende vorige zoekopdrachten"
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr "uit zoekgeschiedenis verwijderen"
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr "Zijbalk invouwen"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Volgende afspelen"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Aan wachtrij toevoegen"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Favoriet verwijderen"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Favoriet toevoegen"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr "Uit geschiedenis verwijderen"
#~ msgid "Favourite Songs"
#~ msgstr "Favoriete songs"
#~ msgid "Back"
#~ msgstr "Terug"
#~ msgid "Find music on YouTube Music"
#~ msgstr "Muziek zoeken op YouTube Music"
#~ msgid "Add to Playlist"
#~ msgstr "Aan afspeellijst toevoegen"
#~ msgid "Play next"
#~ msgstr "Volgende afspelen"
#~ msgid "Clear"
#~ msgstr "Wissen"
#~ msgid "Pause"
#~ msgstr "Pauzeren"
#~ msgid "Expand"
#~ msgstr "Uitbreiden"
#~ msgid "Play only Audio" #~ msgid "Play only Audio"
#~ msgstr "Alleen geluid afspelen" #~ msgstr "Alleen geluid afspelen"
+250
View File
@@ -0,0 +1,250 @@
# Translation of audiotube to Norwegian Nynorsk
#
# Øystein Steffensen-Alværvik <[email protected]>, 2022.
# Karl Ove Hufthammer <[email protected]>, 2022, 2023.
msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Lokalize 22.12.1\n"
"X-Environment: kde\n"
"X-Accelerator-Marker: &\n"
"X-Text-Markup: kde4\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Øystein Steffensen-Alværvik"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "[email protected]"
#: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Play"
msgstr "Spel av"
#: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:33
#, kde-format
msgid "Shuffle"
msgstr "Stokk om"
#: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#, kde-format
msgid "Open in Browser"
msgstr "Opna i nettlesar"
#: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr "Album • %1"
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr "Meir"
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "Radio"
#: contents/ui/ArtistPage.qml:46
#, kde-format
msgid "Artist"
msgstr "Artist"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format
msgid ""
"Video playback is not supported yet. Do you want to play only the audio of "
"\"%1\"?"
msgstr "Videoavspeling er endå ikkje støtta. Vil du spela av lyden til «%1»?"
#: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format
msgid "Albums"
msgstr "Album"
#: contents/ui/ArtistPage.qml:87
#, kde-format
msgid "Singles"
msgstr "Singelplater"
#: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format
msgid "Songs"
msgstr "Songar"
#: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format
msgid "Videos"
msgstr "Videoar"
#: contents/ui/ConfirmationMessage.qml:16
#, kde-format
msgid "OK"
msgstr "OK"
#: contents/ui/ConfirmationMessage.qml:21
#, kde-format
msgid "Cancel"
msgstr "Avbryt"
#: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format
msgid "Favourites"
msgstr "Favorittar"
#: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "Vis alle"
#: contents/ui/LibraryPage.qml:214
#, kde-format
msgid "Most played"
msgstr "Oftast avspela"
#: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr "Avspela songar"
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr "AudioTube"
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr "Spelar no"
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr "Kø"
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr "Songtekst"
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr "Fjern spor"
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr "Inkje medium vert spela"
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
msgstr "Bibliotek"
#: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Search"
msgstr "Søk"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "Avspela songar"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "Ukjend songliste"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "Ingen songar enno"
#: contents/ui/PlaylistPage.qml:42
#, kde-format
msgid "Playlist"
msgstr "Speleliste"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr "Tidlegare søk:"
#: contents/ui/SearchPage.qml:28
#, kde-format
msgid "Artists"
msgstr "Artistar"
#: contents/ui/SearchPage.qml:30
#, kde-format
msgid "Playlists"
msgstr "Spelelister"
#: contents/ui/SearchPage.qml:37
#, kde-format
msgid "Unknown"
msgstr "Ukjend"
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr "Fald saman sidestolpe"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Spel som neste"
#: 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:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Fjern frå favorittar"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Legg til favorittar"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr ""
+175 -70
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: audiotube\n" "Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2022-01-01 09:11-0800\n" "PO-Revision-Date: 2022-01-01 09:11-0800\n"
"Last-Translator: A S Alam <[email protected]>\n" "Last-Translator: A S Alam <[email protected]>\n"
"Language-Team: Punjabi <[email protected]>\n" "Language-Team: Punjabi <[email protected]>\n"
@@ -27,47 +27,68 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "alam yellow @ gmail.com" msgstr "alam yellow @ gmail.com"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "ਚਲਾਓ" msgstr "ਚਲਾਓ"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, kde-format #, kde-format
msgid "Play Next" msgid "Shuffle"
msgstr "ਅਗਲਾ ਚਲਾਓ" msgstr "ਰਲਵੇਂ"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Open in Browser"
msgstr "ਪਲੇਅਲਿਸਟ ਵਿੱਚ ਜੋੜੋ" msgstr ""
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr ""
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr ""
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "ਰੇਡੀਓ"
#: contents/ui/ArtistPage.qml:46
#, fuzzy, kde-format
#| msgid "Artists"
msgid "Artist"
msgstr "ਕਲਾਕਾਰ"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
"\"%1\"?" "\"%1\"?"
msgstr "ਵਿਡੀਓ ਪਲੇਅਬੈਕ ਹਾਲੇ ਸਹਾਇਕ ਨਹੀਂ ਹੈ। ਕੀ ਤੁਸੀਂ \"%1\" ਦਾ ਆਡੀਓ ਹੀ ਚਲਾਉਣਾ ਚਾਹੋਗੇ?" msgstr "ਵਿਡੀਓ ਪਲੇਅਬੈਕ ਹਾਲੇ ਸਹਾਇਕ ਨਹੀਂ ਹੈ। ਕੀ ਤੁਸੀਂ \"%1\" ਦਾ ਆਡੀਓ ਹੀ ਚਲਾਉਣਾ ਚਾਹੋਗੇ?"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "ਐਲਬਮਾਂ" msgstr "ਐਲਬਮਾਂ"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "ਇਕੱਲੇ" msgstr "ਇਕੱਲੇ"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "ਗੀਤ" msgstr "ਗੀਤ"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "ਵਿਡੀਓ" msgstr "ਵਿਡੀਓ"
@@ -82,85 +103,169 @@ msgstr "ਠੀਕ ਹੈ"
msgid "Cancel" msgid "Cancel"
msgstr "ਰੱਦ ਕਰੋ" msgstr "ਰੱਦ ਕਰੋ"
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr ""
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr ""
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "" msgstr ""
#: contents/ui/main.qml:94 #: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr ""
#: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "ਆਡੀਓ-ਟਿਊਬ" msgstr "ਆਡੀਓ-ਟਿਊਬ"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "ਟਰੈਕ ਨੂੰ ਹਟਾਓ" msgstr "ਟਰੈਕ ਨੂੰ ਹਟਾਓ"
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "ਮਿਟਾਓ"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "ਰਲਵੇਂ"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "ਵਿਰਾਮ"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "ਕੋਈ ਮੀਡੀਆ ਨਹੀਂ ਚੱਲਦਾ" msgstr "ਕੋਈ ਮੀਡੀਆ ਨਹੀਂ ਚੱਲਦਾ"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "ਫੈਲਾਓ" msgstr ""
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Artists"
msgstr "ਕਲਾਕਾਰ"
#: contents/ui/SearchPage.qml:29
#, kde-format
msgid "Playlists"
msgstr "ਪਲੇਅਲਿਸਟਾਂ"
#: contents/ui/SearchPage.qml:36
#, kde-format
msgid "Unknown"
msgstr "ਅਣਪਛਾਤਾ"
#: contents/ui/SearchPage.qml:117
#, kde-format
msgid "Play next"
msgstr "ਅਗਲਾ ਚਲਾਓ"
#: contents/ui/SearchPage.qml:129
#, kde-format
msgid "Radio"
msgstr "ਰੇਡੀਓ"
#: contents/ui/SearchPage.qml:147
#, kde-format
msgid "Find music on YouTube Music"
msgstr "ਯੂਟਿਊਬ ਸੰਗੀਤ ਉੱਤੇ ਸੰਗੀਤ ਲੱਭੋ"
#: contents/ui/SearchPage.qml:150
#, kde-format #, kde-format
msgid "Search" msgid "Search"
msgstr "ਖੋਜੋ" msgstr "ਖੋਜੋ"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr ""
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr ""
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr ""
#: contents/ui/PlaylistPage.qml:42
#, fuzzy, kde-format
#| msgid "Playlists"
msgid "Playlist"
msgstr "ਪਲੇਅਲਿਸਟਾਂ"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr ""
#: contents/ui/SearchPage.qml:28
#, kde-format
msgid "Artists"
msgstr "ਕਲਾਕਾਰ"
#: contents/ui/SearchPage.qml:30
#, kde-format
msgid "Playlists"
msgstr "ਪਲੇਅਲਿਸਟਾਂ"
#: contents/ui/SearchPage.qml:37
#, kde-format
msgid "Unknown"
msgstr "ਅਣਪਛਾਤਾ"
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "ਅਗਲਾ ਚਲਾਓ"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr ""
#~ msgid "Find music on YouTube Music"
#~ msgstr "ਯੂਟਿਊਬ ਸੰਗੀਤ ਉੱਤੇ ਸੰਗੀਤ ਲੱਭੋ"
#~ msgid "Add to Playlist"
#~ msgstr "ਪਲੇਅਲਿਸਟ ਵਿੱਚ ਜੋੜੋ"
#~ msgid "Play next"
#~ msgstr "ਅਗਲਾ ਚਲਾਓ"
#~ msgid "Clear"
#~ msgstr "ਮਿਟਾਓ"
#~ msgid "Pause"
#~ msgstr "ਵਿਰਾਮ"
#~ msgid "Expand"
#~ msgstr "ਫੈਲਾਓ"
#~ msgid "Play only Audio" #~ msgid "Play only Audio"
#~ msgstr "ਸਿਰਫ਼ ਆਡੀਓ ਹੀ ਚਲਾਓ" #~ msgstr "ਸਿਰਫ਼ ਆਡੀਓ ਹੀ ਚਲਾਓ"
+188 -75
View File
@@ -1,14 +1,14 @@
# Copyright (C) YEAR This file is copyright: # Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the audiotube package. # This file is distributed under the same license as the audiotube package.
# #
# Łukasz Wojniłowicz <[email protected]>, 2021. # Łukasz Wojniłowicz <[email protected]>, 2021, 2022.
# Ignacy Kajdan <[email protected]>, 2021. # Ignacy Kajdan <[email protected]>, 2021.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: audiotube\n" "Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2021-12-30 12:38+0100\n" "PO-Revision-Date: 2022-10-18 18:06+0200\n"
"Last-Translator: Łukasz Wojniłowicz <[email protected]>\n" "Last-Translator: Łukasz Wojniłowicz <[email protected]>\n"
"Language-Team: Polish <[email protected]>\n" "Language-Team: Polish <[email protected]>\n"
"Language: pl\n" "Language: pl\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n" "|| n%100>=20) ? 1 : 2);\n"
"X-Generator: Lokalize 22.03.70\n" "X-Generator: Lokalize 22.08.1\n"
#, kde-format #, kde-format
msgctxt "NAME OF TRANSLATORS" msgctxt "NAME OF TRANSLATORS"
@@ -29,25 +29,46 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "[email protected], [email protected]" msgstr "[email protected], [email protected]"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "Odtwórz" msgstr "Odtwórz"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, kde-format #, kde-format
msgid "Play Next" msgid "Shuffle"
msgstr "Odtwórz następny" msgstr "Wymieszaj"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Open in Browser"
msgstr "Dodaj do listy odtwarzania" msgstr "Otwórz w przeglądarce"
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr ""
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr ""
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "Radio"
#: contents/ui/ArtistPage.qml:46
#, fuzzy, kde-format
#| msgid "Artists"
msgid "Artist"
msgstr "Wykonawcy"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
@@ -56,22 +77,22 @@ msgstr ""
"Odtwarzanie wideo nie jest jeszcze obsługiwane. Czy odtworzyć tylko dźwięk z " "Odtwarzanie wideo nie jest jeszcze obsługiwane. Czy odtworzyć tylko dźwięk z "
"„%1”?" "„%1”?"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "Albumy" msgstr "Albumy"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "Single" msgstr "Single"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "Piosenki" msgstr "Piosenki"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "Filmy" msgstr "Filmy"
@@ -86,85 +107,177 @@ msgstr "OK"
msgid "Cancel" msgid "Cancel"
msgstr "Anuluj" msgstr "Anuluj"
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr "Ulubione"
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "Pokaż wszystkie"
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "" msgstr "Najczęściej odtwarzane"
#: contents/ui/main.qml:94 #: contents/ui/LibraryPage.qml:230
#, fuzzy, kde-format
#| msgid "Played Songs"
msgid "played Songs"
msgstr "Odtwarzane utwory"
#: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "AudioTube" msgstr "AudioTube"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "Usuń utwór" msgstr "Usuń utwór"
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "Wyczyść"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "Wymieszaj"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "Wstrzymaj"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "Nic nie jest odtwarzane" msgstr "Nic nie jest odtwarzane"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "Rozwiń" msgstr ""
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Artists"
msgstr "Wykonawcy"
#: contents/ui/SearchPage.qml:29
#, kde-format
msgid "Playlists"
msgstr "Listy odtwarzania"
#: contents/ui/SearchPage.qml:36
#, kde-format
msgid "Unknown"
msgstr "Nieznany"
#: contents/ui/SearchPage.qml:117
#, kde-format
msgid "Play next"
msgstr "Odtwórz następny"
#: contents/ui/SearchPage.qml:129
#, kde-format
msgid "Radio"
msgstr "Radio"
#: contents/ui/SearchPage.qml:147
#, kde-format
msgid "Find music on YouTube Music"
msgstr "Znajdź muzykę w serwisie YouTube Music"
#: contents/ui/SearchPage.qml:150
#, kde-format #, kde-format
msgid "Search" msgid "Search"
msgstr "Szukaj" msgstr "Szukaj"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "Odtwarzane utwory"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "Nieznana lista utworów"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "Jeszcze nie ma tutaj utworów"
#: contents/ui/PlaylistPage.qml:42
#, fuzzy, kde-format
#| msgid "Playlists"
msgid "Playlist"
msgstr "Listy odtwarzania"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr ""
#: contents/ui/SearchPage.qml:28
#, kde-format
msgid "Artists"
msgstr "Wykonawcy"
#: contents/ui/SearchPage.qml:30
#, kde-format
msgid "Playlists"
msgstr "Listy odtwarzania"
#: contents/ui/SearchPage.qml:37
#, kde-format
msgid "Unknown"
msgstr "Nieznany"
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Odtwórz następny"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Remove Favourite"
msgstr "Ulubione"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Add Favourite"
msgstr "Ulubione"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr ""
#~ msgid "Favourite Songs"
#~ msgstr "Ulubione utwory"
#~ msgid "Back"
#~ msgstr "Wstecz"
#~ msgid "Find music on YouTube Music"
#~ msgstr "Znajdź muzykę w serwisie YouTube Music"
#~ msgid "Add to Playlist"
#~ msgstr "Dodaj do listy odtwarzania"
#~ msgid "Play next"
#~ msgstr "Odtwórz następny"
#~ msgid "Clear"
#~ msgstr "Wyczyść"
#~ msgid "Pause"
#~ msgstr "Wstrzymaj"
#~ msgid "Expand"
#~ msgstr "Rozwiń"
#~ msgid "Play only Audio" #~ msgid "Play only Audio"
#~ msgstr "Odtwórz tylko dźwięk" #~ msgstr "Odtwórz tylko dźwięk"
+157 -75
View File
@@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: audiotube\n" "Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2021-09-04 18:29+0100\n" "PO-Revision-Date: 2023-01-22 23:00+0000\n"
"Last-Translator: José Nuno Coelho Pires <[email protected]>\n" "Last-Translator: José Nuno Coelho Pires <[email protected]>\n"
"Language-Team: Portuguese <[email protected]>\n" "Language-Team: Portuguese <[email protected]>\n"
"Language: pt\n" "Language: pt\n"
@@ -29,25 +29,45 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "[email protected]" msgstr "[email protected]"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "Reproduzir" msgstr "Reproduzir"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, kde-format #, kde-format
msgid "Play Next" msgid "Shuffle"
msgstr "Reproduzir o Seguinte" msgstr "Baralhar"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Open in Browser"
msgstr "Adicionar à Lista de Reprodução" msgstr "Abrir no Navegador"
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr "Álbum • %1"
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr "Mais"
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "Rádio"
#: contents/ui/ArtistPage.qml:46
#, kde-format
msgid "Artist"
msgstr "Artista"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
@@ -56,22 +76,22 @@ msgstr ""
"A reprodução de vídeos ainda não é suportada. Deseja reproduzir apenas o " "A reprodução de vídeos ainda não é suportada. Deseja reproduzir apenas o "
"áudio de \"%1\"?" "áudio de \"%1\"?"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "Álbuns" msgstr "Álbuns"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "'Singles'" msgstr "'Singles'"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "Músicas" msgstr "Músicas"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "Vídeos" msgstr "Vídeos"
@@ -86,85 +106,147 @@ msgstr "OK"
msgid "Cancel" msgid "Cancel"
msgstr "Cancelar" msgstr "Cancelar"
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr "Favoritos"
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "Mostrar Tudo"
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "" msgstr "Mais Tocadas"
#: contents/ui/main.qml:94 #: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr "Músicas tocadas"
#: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "AudioTube" msgstr "AudioTube"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "Remover a Faixa" msgstr "Remover a Faixa"
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "Limpar"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "Baralhar"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "Pausa"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "Nada em reprodução" msgstr "Nada em reprodução"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "Expandir" msgstr "Biblioteca"
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Artists"
msgstr "Artistas"
#: contents/ui/SearchPage.qml:29
#, kde-format
msgid "Playlists"
msgstr "Listas de Reprodução"
#: contents/ui/SearchPage.qml:36
#, kde-format
msgid "Unknown"
msgstr "Desconhecido"
#: contents/ui/SearchPage.qml:117
#, kde-format
msgid "Play next"
msgstr "Reproduzir o seguinte"
#: contents/ui/SearchPage.qml:129
#, kde-format
msgid "Radio"
msgstr "Rádio"
#: contents/ui/SearchPage.qml:147
#, kde-format
msgid "Find music on YouTube Music"
msgstr "Procurar música no YouTube Music"
#: contents/ui/SearchPage.qml:150
#, kde-format #, kde-format
msgid "Search" msgid "Search"
msgstr "Procurar" msgstr "Procurar"
#~ msgid "Play only Audio" #: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#~ msgstr "Reproduzir só o Áudio" #: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "Músicas Tocadas"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "Lista de músicas desconhecida"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "Ainda sem músicas aqui"
#: contents/ui/PlaylistPage.qml:42
#, kde-format
msgid "Playlist"
msgstr "Lista de Reprodução"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr "Pesquisas Anteriores:"
#: contents/ui/SearchPage.qml:28
#, kde-format
msgid "Artists"
msgstr "Artistas"
#: contents/ui/SearchPage.qml:30
#, kde-format
msgid "Playlists"
msgstr "Listas de Reprodução"
#: contents/ui/SearchPage.qml:37
#, kde-format
msgid "Unknown"
msgstr "Desconhecido"
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "Sem pesquisas anteriores correspondentes"
#: contents/ui/SearchWithDropdown.qml:322
#, fuzzy, kde-format
#| msgid "Remove from History"
msgid "remove from search history"
msgstr "Remover do Histórico"
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr "Fechar a Barra Lateral"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Reproduzir o Seguinte"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Adicionar à fila"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Remover o Favorito"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Adicionar aos Favoritos"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr "Remover do Histórico"
+184 -75
View File
@@ -1,14 +1,14 @@
# Copyright (C) YEAR This file is copyright: # Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the audiotube package. # This file is distributed under the same license as the audiotube package.
# #
# Luiz Fernando Ranghetti <[email protected]>, 2021. # Luiz Fernando Ranghetti <[email protected]>, 2021, 2022.
# Thiago Masato Costa Sueto <[email protected]>, 2021. # Thiago Masato Costa Sueto <[email protected]>, 2021.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: audiotube\n" "Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2021-12-09 10:13-0300\n" "PO-Revision-Date: 2022-12-20 10:48-0300\n"
"Last-Translator: Luiz Fernando Ranghetti <[email protected]>\n" "Last-Translator: Luiz Fernando Ranghetti <[email protected]>\n"
"Language-Team: Portuguese <[email protected]>\n" "Language-Team: Portuguese <[email protected]>\n"
"Language: pt_BR\n" "Language: pt_BR\n"
@@ -16,7 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Lokalize 20.04.2\n" "X-Generator: Lokalize 21.12.3\n"
#, kde-format #, kde-format
msgctxt "NAME OF TRANSLATORS" msgctxt "NAME OF TRANSLATORS"
@@ -28,25 +28,45 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "[email protected]" msgstr "[email protected]"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "Reproduzir" msgstr "Reproduzir"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, kde-format #, kde-format
msgid "Play Next" msgid "Shuffle"
msgstr "Reproduzir próxima" msgstr "Embaralhar"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Open in Browser"
msgstr "Adicionar à lista de reprodução" msgstr "Abrir no navegador"
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr "Álbum • %1"
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr "Mais"
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "Rádio"
#: contents/ui/ArtistPage.qml:46
#, kde-format
msgid "Artist"
msgstr "Artista"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
@@ -55,22 +75,22 @@ msgstr ""
"A reprodução de vídeos ainda não é suportada. Deseja reproduzir apenas o " "A reprodução de vídeos ainda não é suportada. Deseja reproduzir apenas o "
"áudio de \"%1\"?" "áudio de \"%1\"?"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "Álbuns" msgstr "Álbuns"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "Singles" msgstr "Singles"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "Músicas" msgstr "Músicas"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "Vídeos" msgstr "Vídeos"
@@ -85,85 +105,174 @@ msgstr "OK"
msgid "Cancel" msgid "Cancel"
msgstr "Cancelar" msgstr "Cancelar"
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr "Favoritas"
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "Mostrar tudo"
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "" msgstr "Mais reproduzidas"
#: contents/ui/main.qml:94 #: contents/ui/LibraryPage.qml:230
#, fuzzy, kde-format
#| msgid "Played Songs"
msgid "played Songs"
msgstr "Músicas reproduzidas"
#: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "AudioTube" msgstr "AudioTube"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "Remover faixa" msgstr "Remover faixa"
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "Limpar"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "Embaralhar"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "Pausar"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "Nenhuma mídia em reprodução" msgstr "Nenhuma mídia em reprodução"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "Expandir" msgstr ""
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Artists"
msgstr "Artistas"
#: contents/ui/SearchPage.qml:29
#, kde-format
msgid "Playlists"
msgstr "Listas de músicas"
#: contents/ui/SearchPage.qml:36
#, kde-format
msgid "Unknown"
msgstr "Desconhecido"
#: contents/ui/SearchPage.qml:117
#, kde-format
msgid "Play next"
msgstr "Reproduzir próxima"
#: contents/ui/SearchPage.qml:129
#, kde-format
msgid "Radio"
msgstr "Rádio"
#: contents/ui/SearchPage.qml:147
#, kde-format
msgid "Find music on YouTube Music"
msgstr "Encontre músicas no YouTube Music"
#: contents/ui/SearchPage.qml:150
#, kde-format #, kde-format
msgid "Search" msgid "Search"
msgstr "Pesquisar" msgstr "Pesquisar"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "Músicas reproduzidas"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "Lista de músicas desconhecida"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "Nenhuma música ainda"
#: contents/ui/PlaylistPage.qml:42
#, kde-format
msgid "Playlist"
msgstr "Lista de músicas"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr ""
#: contents/ui/SearchPage.qml:28
#, kde-format
msgid "Artists"
msgstr "Artistas"
#: contents/ui/SearchPage.qml:30
#, kde-format
msgid "Playlists"
msgstr "Listas de músicas"
#: contents/ui/SearchPage.qml:37
#, kde-format
msgid "Unknown"
msgstr "Desconhecido"
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Reproduzir próxima"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Adicionar à fila"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Remover das favoritas"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Adicionar favorita"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr ""
#~ msgid "Favourite Songs"
#~ msgstr "Músicas favoritas"
#~ msgid "Back"
#~ msgstr "Voltar"
#~ msgid "Find music on YouTube Music"
#~ msgstr "Encontre músicas no YouTube Music"
#~ msgid "Add to Playlist"
#~ msgstr "Adicionar à lista de reprodução"
#~ msgid "Play next"
#~ msgstr "Reproduzir próxima"
#~ msgid "Clear"
#~ msgstr "Limpar"
#~ msgid "Pause"
#~ msgstr "Pausar"
#~ msgid "Expand"
#~ msgstr "Expandir"
#~ msgid "Play only Audio" #~ msgid "Play only Audio"
#~ msgstr "Reproduzir apenas áudio" #~ msgstr "Reproduzir apenas áudio"
+179 -79
View File
@@ -1,13 +1,13 @@
# Copyright (C) YEAR This file is copyright: # Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the audiotube package. # This file is distributed under the same license as the audiotube package.
# #
# Alexander Yavorsky <[email protected]>, 2022. # Alexander Yavorsky <[email protected]>, 2022, 2023.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: audiotube\n" "Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2022-05-10 21:39+0300\n" "PO-Revision-Date: 2023-01-28 13:37+0300\n"
"Last-Translator: Alexander Yavorsky <[email protected]>\n" "Last-Translator: Alexander Yavorsky <[email protected]>\n"
"Language-Team: Russian <[email protected]>\n" "Language-Team: Russian <[email protected]>\n"
"Language: ru\n" "Language: ru\n"
@@ -21,54 +21,75 @@ msgstr ""
#, kde-format #, kde-format
msgctxt "NAME OF TRANSLATORS" msgctxt "NAME OF TRANSLATORS"
msgid "Your names" msgid "Your names"
msgstr "Александр Яворский" msgstr "Александр Яворский, Павел Чернышов"
#, kde-format #, kde-format
msgctxt "EMAIL OF TRANSLATORS" msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "[email protected]" msgstr "[email protected], [email protected]"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "Воспроизвести" msgstr "Воспроизвести"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, kde-format #, kde-format
msgid "Play Next" msgid "Shuffle"
msgstr "Воспроизвести следующий" msgstr "Перемешать"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Open in Browser"
msgstr "" msgstr "Открыть в браузере"
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr "Альбом • %1"
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr "Дополнительно"
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "Радио"
#: contents/ui/ArtistPage.qml:46
#, kde-format
msgid "Artist"
msgstr "Исполнитель"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
"\"%1\"?" "\"%1\"?"
msgstr "" msgstr ""
"Воспроизведение видео пока не поддерживается. Воспроизвести звук трека «%1»?"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "Альбомы" msgstr "Альбомы"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "" msgstr "Синглы"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "" msgstr "Треки"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "Видеозаписи" msgstr "Видеозаписи"
@@ -83,82 +104,161 @@ msgstr "ОК"
msgid "Cancel" msgid "Cancel"
msgstr "Отмена" msgstr "Отмена"
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr "Избранное"
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "Показать все"
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "" msgstr "Часто воспроизводимые"
#: contents/ui/main.qml:94 #: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr "Воспроизведённые треки"
#: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "AudioTube" msgstr "AudioTube"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "Удалить дорожку" msgstr "Удалить дорожку"
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "Очистить"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "Перемешать"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "Приостановить"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "" msgstr "Ничего не воспроизводится"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "" msgstr "Библиотека"
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Artists"
msgstr ""
#: contents/ui/SearchPage.qml:29
#, kde-format
msgid "Playlists"
msgstr ""
#: contents/ui/SearchPage.qml:36
#, kde-format
msgid "Unknown"
msgstr ""
#: contents/ui/SearchPage.qml:117
#, kde-format
msgid "Play next"
msgstr ""
#: contents/ui/SearchPage.qml:129
#, kde-format
msgid "Radio"
msgstr "Радио"
#: contents/ui/SearchPage.qml:147
#, kde-format
msgid "Find music on YouTube Music"
msgstr ""
#: contents/ui/SearchPage.qml:150
#, kde-format #, kde-format
msgid "Search" msgid "Search"
msgstr "Поиск" msgstr "Поиск"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "Воспроизведённые треки"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "Неизвестный список треков"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "Пока нет ни одного трека"
#: contents/ui/PlaylistPage.qml:42
#, kde-format
msgid "Playlist"
msgstr "Список воспроизведения"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr "Предыдущие поисковые запросы:"
#: contents/ui/SearchPage.qml:28
#, kde-format
msgid "Artists"
msgstr "Исполнители"
#: contents/ui/SearchPage.qml:30
#, kde-format
msgid "Playlists"
msgstr "Списки воспроизведения"
#: contents/ui/SearchPage.qml:37
#, kde-format
msgid "Unknown"
msgstr "Неизвестный тип"
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "Не найдено соответствующих предыдущих поисковых запросов"
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr "Свернуть боковую панель"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Воспроизвести следующим"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Добавить в очередь воспроизведения"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Убрать из избранного"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Добавить в избранное"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr "Удалить из журнала"
#~ msgid "Favourite Songs"
#~ msgstr "Избранные треки"
#~ msgid "Back"
#~ msgstr "Назад"
#~ msgid "Find music on YouTube Music"
#~ msgstr "Найти музыку в YouTube Music"
#~ msgid "Clear"
#~ msgstr "Очистить"
#~ msgid "Pause"
#~ msgstr "Приостановить"
+156 -57
View File
@@ -4,7 +4,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: audiotube\n" "Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2022-04-07 18:01+0200\n" "PO-Revision-Date: 2022-04-07 18:01+0200\n"
"Last-Translator: Roman Paholik <[email protected]>\n" "Last-Translator: Roman Paholik <[email protected]>\n"
"Language-Team: Slovak <[email protected]>\n" "Language-Team: Slovak <[email protected]>\n"
@@ -25,48 +25,68 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "[email protected]" msgstr "[email protected]"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "Prehrať" msgstr "Prehrať"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, fuzzy, kde-format
#| msgid "Play"
msgid "Play Next"
msgstr "Prehrať"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Shuffle"
msgstr "Pridať do zoznamu skladieb" msgstr "Zamiešať"
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#, kde-format
msgid "Open in Browser"
msgstr ""
#: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr ""
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr ""
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "Rádio"
#: contents/ui/ArtistPage.qml:46
#, fuzzy, kde-format
#| msgid "Artists"
msgid "Artist"
msgstr "Interpreti"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
"\"%1\"?" "\"%1\"?"
msgstr "" msgstr ""
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "Albumy" msgstr "Albumy"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "Samotné" msgstr "Samotné"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "" msgstr ""
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "Videá" msgstr "Videá"
@@ -81,82 +101,161 @@ msgstr "OK"
msgid "Cancel" msgid "Cancel"
msgstr "Zrušiť" msgstr "Zrušiť"
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr ""
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr ""
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "" msgstr ""
#: contents/ui/main.qml:94 #: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr ""
#: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "AudioTube" msgstr "AudioTube"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "" msgstr ""
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "Vyčistiť"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "Zamiešať"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "Pozastaviť"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "Neprehráva sa žiadne médium" msgstr "Neprehráva sa žiadne médium"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "Rozvinúť" msgstr ""
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Search"
msgstr "Hľadať"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr ""
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr ""
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr ""
#: contents/ui/PlaylistPage.qml:42
#, fuzzy, kde-format
#| msgid "Playlists"
msgid "Playlist"
msgstr "Zoznamy skladieb"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr ""
#: contents/ui/SearchPage.qml:28
#, kde-format #, kde-format
msgid "Artists" msgid "Artists"
msgstr "Interpreti" msgstr "Interpreti"
#: contents/ui/SearchPage.qml:29 #: contents/ui/SearchPage.qml:30
#, kde-format #, kde-format
msgid "Playlists" msgid "Playlists"
msgstr "Zoznamy skladieb" msgstr "Zoznamy skladieb"
#: contents/ui/SearchPage.qml:36 #: contents/ui/SearchPage.qml:37
#, kde-format #, kde-format
msgid "Unknown" msgid "Unknown"
msgstr "Neznáme" msgstr "Neznáme"
#: contents/ui/SearchPage.qml:117 #: contents/ui/SearchWithDropdown.qml:287
#, kde-format #, kde-format
msgid "Play next" msgid "No matching previous searches"
msgstr "" msgstr ""
#: contents/ui/SearchPage.qml:129 #: contents/ui/SearchWithDropdown.qml:322
#, kde-format #, kde-format
msgid "Radio" msgid "remove from search history"
msgstr "Rádio"
#: contents/ui/SearchPage.qml:147
#, kde-format
msgid "Find music on YouTube Music"
msgstr "" msgstr ""
#: contents/ui/SearchPage.qml:150 #: contents/ui/Sidebar.qml:179
#, kde-format #, kde-format
msgid "Search" msgid "Collapse Sidebar"
msgstr "Hľadať" msgstr ""
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, fuzzy, kde-format
#| msgid "Play"
msgid "Play Next"
msgstr "Prehrať"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr ""
#~ msgid "Add to Playlist"
#~ msgstr "Pridať do zoznamu skladieb"
#~ msgid "Clear"
#~ msgstr "Vyčistiť"
#~ msgid "Pause"
#~ msgstr "Pozastaviť"
#~ msgid "Expand"
#~ msgstr "Rozvinúť"
+183 -75
View File
@@ -1,20 +1,20 @@
# Copyright (C) YEAR This file is copyright: # Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the audiotube package. # This file is distributed under the same license as the audiotube package.
# #
# Matjaž Jeran <[email protected]>, 2021. # Matjaž Jeran <[email protected]>, 2021, 2022, 2023.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: audiotube\n" "Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2021-12-09 13:26+0100\n" "PO-Revision-Date: 2023-01-28 09:50+0100\n"
"Last-Translator: Matjaž Jeran <[email protected]>\n" "Last-Translator: Matjaž Jeran <[email protected]>\n"
"Language-Team: Slovenian <[email protected]>\n" "Language-Team: Slovenian <[email protected]>\n"
"Language: sl\n" "Language: sl\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: Lokalize 21.04.3\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" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
"%100==4 ? 3 : 0);\n" "%100==4 ? 3 : 0);\n"
@@ -28,47 +28,67 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "[email protected]" msgstr "[email protected]"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "Predvajaj" msgstr "Predvajaj"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, kde-format #, kde-format
msgid "Play Next" msgid "Shuffle"
msgstr "Predvajaj naslednjo" msgstr "Premešaj"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Open in Browser"
msgstr "Dodaj v seznam predvajanja" msgstr "Odpri v brskalniku"
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr "Album • %1"
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr "Več"
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "Radio"
#: contents/ui/ArtistPage.qml:46
#, kde-format
msgid "Artist"
msgstr "Avtor"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
"\"%1\"?" "\"%1\"?"
msgstr "Video playback še ni podprt. Ali želite predvajati samo zvok \"%1\"?" msgstr "Video playback še ni podprt. Ali želite predvajati samo zvok \"%1\"?"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "Albumi" msgstr "Albumi"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "Singli" msgstr "Singli"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "Glasba" msgstr "Glasba"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "Videposnetki" msgstr "Videposnetki"
@@ -83,85 +103,173 @@ msgstr "V redu"
msgid "Cancel" msgid "Cancel"
msgstr "Prekliči" msgstr "Prekliči"
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr "Priljubljene"
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "Prikaži vse"
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "" msgstr "Največkrat predvajane"
#: contents/ui/main.qml:94 #: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr "predvajane pesmi"
#: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "AudioTube" msgstr "AudioTube"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "Odstrani sled" msgstr "Odstrani sled"
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "Očisti"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "Premešaj"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "Premor"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "Niče se ne predvaja" msgstr "Niče se ne predvaja"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "Razširi" msgstr "Knjižnica"
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Artists"
msgstr "Avtorji"
#: contents/ui/SearchPage.qml:29
#, kde-format
msgid "Playlists"
msgstr "Seznami predvajanja"
#: contents/ui/SearchPage.qml:36
#, kde-format
msgid "Unknown"
msgstr "Neznano"
#: contents/ui/SearchPage.qml:117
#, kde-format
msgid "Play next"
msgstr "Predvajaj naslednjo"
#: contents/ui/SearchPage.qml:129
#, kde-format
msgid "Radio"
msgstr "Radio"
#: contents/ui/SearchPage.qml:147
#, kde-format
msgid "Find music on YouTube Music"
msgstr "Najdi glasbo na Youtube Music"
#: contents/ui/SearchPage.qml:150
#, kde-format #, kde-format
msgid "Search" msgid "Search"
msgstr "Išči" msgstr "Išči"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "Predvajane pesmi"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "Neznan seznam pesmi"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "Tu še ni nobene pesmi"
#: contents/ui/PlaylistPage.qml:42
#, kde-format
msgid "Playlist"
msgstr "Seznam predvajanja"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr "Prejšnja iskanja:"
#: contents/ui/SearchPage.qml:28
#, kde-format
msgid "Artists"
msgstr "Avtorji"
#: contents/ui/SearchPage.qml:30
#, kde-format
msgid "Playlists"
msgstr "Seznami predvajanja"
#: contents/ui/SearchPage.qml:37
#, kde-format
msgid "Unknown"
msgstr "Neznano"
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "Ni zadetkov iz prejšnjih iskanj"
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr "odstrani iz zgodovine iskanj"
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr "Strni stransko vrstico"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Predvajaj naslednjo"
#: 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:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Odstrani priljubljenega"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Dodaj priljubljenega"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr "Odstrani iz zgodovine"
#~ msgid "Favourite Songs"
#~ msgstr "Priljubljene pesmi"
#~ msgid "Back"
#~ msgstr "Nazaj"
#~ msgid "Find music on YouTube Music"
#~ msgstr "Najdi glasbo na Youtube Music"
#~ msgid "Add to Playlist"
#~ msgstr "Dodaj v seznam predvajanja"
#~ msgid "Play next"
#~ msgstr "Predvajaj naslednjo"
#~ msgid "Clear"
#~ msgstr "Očisti"
#~ msgid "Pause"
#~ msgstr "Premor"
#~ msgid "Expand"
#~ msgstr "Razširi"
#~ msgid "Play only Audio" #~ msgid "Play only Audio"
#~ msgstr "Predvajaj samo zvok" #~ msgstr "Predvajaj samo zvok"
+187 -74
View File
@@ -1,13 +1,13 @@
# Copyright (C) YEAR This file is copyright: # Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the audiotube package. # This file is distributed under the same license as the audiotube package.
# #
# Stefan Asserhäll <[email protected]>, 2021. # Stefan Asserhäll <[email protected]>, 2021, 2022.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: audiotube\n" "Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2021-12-05 11:41+0100\n" "PO-Revision-Date: 2022-09-24 14:57+0200\n"
"Last-Translator: Stefan Asserhäll <[email protected]>\n" "Last-Translator: Stefan Asserhäll <[email protected]>\n"
"Language-Team: Swedish <[email protected]>\n" "Language-Team: Swedish <[email protected]>\n"
"Language: sv\n" "Language: sv\n"
@@ -27,47 +27,68 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "[email protected]" msgstr "[email protected]"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "Spela" msgstr "Spela"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, kde-format #, kde-format
msgid "Play Next" msgid "Shuffle"
msgstr "Spela nästa" msgstr "Blanda"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Open in Browser"
msgstr "Lägg till i spellista" msgstr "Öppna i webbläsare"
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr ""
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr ""
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "Radio"
#: contents/ui/ArtistPage.qml:46
#, fuzzy, kde-format
#| msgid "Artists"
msgid "Artist"
msgstr "Artister"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
"\"%1\"?" "\"%1\"?"
msgstr "Videouppspelning stöds inte ännu. Vill du bara spela ljudet på \"%1\"?" msgstr "Videouppspelning stöds inte ännu. Vill du bara spela ljudet på \"%1\"?"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "Album" msgstr "Album"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "Singlar" msgstr "Singlar"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "Låtar" msgstr "Låtar"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "Videor" msgstr "Videor"
@@ -82,85 +103,177 @@ msgstr "Ok"
msgid "Cancel" msgid "Cancel"
msgstr "Avbryt" msgstr "Avbryt"
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr "Favoriter"
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "Visa alla"
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "" msgstr "Mest spelade"
#: contents/ui/main.qml:94 #: contents/ui/LibraryPage.qml:230
#, fuzzy, kde-format
#| msgid "Played Songs"
msgid "played Songs"
msgstr "Spelade låtar"
#: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "AudioTube" msgstr "AudioTube"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "Ta bort spår" msgstr "Ta bort spår"
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "Rensa"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "Blanda"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "Paus"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "Inga media spelar" msgstr "Inga media spelar"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "Expandera" msgstr ""
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Artists"
msgstr "Artister"
#: contents/ui/SearchPage.qml:29
#, kde-format
msgid "Playlists"
msgstr "Spellistor"
#: contents/ui/SearchPage.qml:36
#, kde-format
msgid "Unknown"
msgstr "Okänd"
#: contents/ui/SearchPage.qml:117
#, kde-format
msgid "Play next"
msgstr "Spela nästa"
#: contents/ui/SearchPage.qml:129
#, kde-format
msgid "Radio"
msgstr "Radio"
#: contents/ui/SearchPage.qml:147
#, kde-format
msgid "Find music on YouTube Music"
msgstr "Sök efter musik på YouTube musik"
#: contents/ui/SearchPage.qml:150
#, kde-format #, kde-format
msgid "Search" msgid "Search"
msgstr "Sök" msgstr "Sök"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "Spelade låtar"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "Okänd låtlista"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "Inga låtar här ännu"
#: contents/ui/PlaylistPage.qml:42
#, fuzzy, kde-format
#| msgid "Playlists"
msgid "Playlist"
msgstr "Spellistor"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr ""
#: contents/ui/SearchPage.qml:28
#, kde-format
msgid "Artists"
msgstr "Artister"
#: contents/ui/SearchPage.qml:30
#, kde-format
msgid "Playlists"
msgstr "Spellistor"
#: contents/ui/SearchPage.qml:37
#, kde-format
msgid "Unknown"
msgstr "Okänd"
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Spela nästa"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Remove Favourite"
msgstr "Favoriter"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, fuzzy, kde-format
#| msgid "Favourites"
msgid "Add Favourite"
msgstr "Favoriter"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr ""
#~ msgid "Favourite Songs"
#~ msgstr "Favoritlåtar"
#~ msgid "Back"
#~ msgstr "Bakåt"
#~ msgid "Find music on YouTube Music"
#~ msgstr "Sök efter musik på YouTube musik"
#~ msgid "Add to Playlist"
#~ msgstr "Lägg till i spellista"
#~ msgid "Play next"
#~ msgstr "Spela nästa"
#~ msgid "Clear"
#~ msgstr "Rensa"
#~ msgid "Pause"
#~ msgstr "Paus"
#~ msgid "Expand"
#~ msgstr "Expandera"
#~ msgid "Play only Audio" #~ msgid "Play only Audio"
#~ msgstr "Spela bara ljud" #~ msgstr "Spela bara ljud"
+167 -59
View File
@@ -1,13 +1,13 @@
# Copyright (C) YEAR This file is copyright: # Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the audiotube package. # This file is distributed under the same license as the audiotube package.
# #
# Emir SARI <[email protected]>, 2022. # Emir SARI <[email protected]>, 2022, 2023.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: audiotube\n" "Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2022-04-15 14:41+0300\n" "PO-Revision-Date: 2023-01-27 18:30+0300\n"
"Last-Translator: Emir SARI <[email protected]>\n" "Last-Translator: Emir SARI <[email protected]>\n"
"Language-Team: Turkish <[email protected]>\n" "Language-Team: Turkish <[email protected]>\n"
"Language: tr\n" "Language: tr\n"
@@ -15,7 +15,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Lokalize 21.12.3\n" "X-Generator: Lokalize 22.12.1\n"
#, kde-format #, kde-format
msgctxt "NAME OF TRANSLATORS" msgctxt "NAME OF TRANSLATORS"
@@ -27,25 +27,45 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "[email protected]" msgstr "[email protected]"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "Çal" msgstr "Çal"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, kde-format #, kde-format
msgid "Play Next" msgid "Shuffle"
msgstr "Sonrakini Çal" msgstr "Karıştır"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Open in Browser"
msgstr "Çalma Listesine Ekle" msgstr "Tarayıcıda Aç"
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr "Albüm • %1"
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr "Daha Fazla"
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "Radyo"
#: contents/ui/ArtistPage.qml:46
#, kde-format
msgid "Artist"
msgstr "Sanatçı"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
@@ -54,22 +74,22 @@ msgstr ""
"Video oynatımı henüz desteklenmiyor. \"%1\" videosunun yalnızca sesinin " "Video oynatımı henüz desteklenmiyor. \"%1\" videosunun yalnızca sesinin "
"çalınmasını ister misiniz?" "çalınmasını ister misiniz?"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "Albümler" msgstr "Albümler"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "Tekliler" msgstr "Tekliler"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "Şarkılar" msgstr "Şarkılar"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "Videolar" msgstr "Videolar"
@@ -84,82 +104,170 @@ msgstr "Tamam"
msgid "Cancel" msgid "Cancel"
msgstr "İptal" msgstr "İptal"
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr "Beğeniler"
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "Tümünü Göster"
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "" msgstr "En Çok Çalınanlar"
#: contents/ui/main.qml:94 #: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr "Çalınan Şarkılar"
#: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "AudioTube" msgstr "AudioTube"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "Parçayı Kaldır" msgstr "Parçayı Kaldır"
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "Temizle"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "Karıştır"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "Duraklat"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "Ortam çalmıyor" msgstr "Ortam çalmıyor"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "Genişlet" msgstr "Kitaplık"
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Search"
msgstr "Ara"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "Çalınan Şarkılar"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "Bilinmeyen şarkılar listesi"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "Burada henüz şarkı yok"
#: contents/ui/PlaylistPage.qml:42
#, kde-format
msgid "Playlist"
msgstr "Çalma Listesi"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr "Önceki Aramalar:"
#: contents/ui/SearchPage.qml:28
#, kde-format #, kde-format
msgid "Artists" msgid "Artists"
msgstr "Sanatçılar" msgstr "Sanatçılar"
#: contents/ui/SearchPage.qml:29 #: contents/ui/SearchPage.qml:30
#, kde-format #, kde-format
msgid "Playlists" msgid "Playlists"
msgstr "Çalma Listeleri" msgstr "Çalma Listeleri"
#: contents/ui/SearchPage.qml:36 #: contents/ui/SearchPage.qml:37
#, kde-format #, kde-format
msgid "Unknown" msgid "Unknown"
msgstr "Bilinmiyor" msgstr "Bilinmiyor"
#: contents/ui/SearchPage.qml:117 #: contents/ui/SearchWithDropdown.qml:287
#, kde-format #, kde-format
msgid "Play next" msgid "No matching previous searches"
msgstr "Sonrakini çal" msgstr "Eşleşen daha önceden yapılmış arama yok"
#: contents/ui/SearchPage.qml:129 #: contents/ui/SearchWithDropdown.qml:322
#, kde-format #, kde-format
msgid "Radio" msgid "remove from search history"
msgstr "Radyo" msgstr "arama geçmişinden kaldır"
#: contents/ui/SearchPage.qml:147 #: contents/ui/Sidebar.qml:179
#, kde-format #, kde-format
msgid "Find music on YouTube Music" msgid "Collapse Sidebar"
msgstr "YouTube Müzik'te müzik bul" msgstr "Kenar Çubuğunu Daralt"
#: contents/ui/SearchPage.qml:150 #: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format #, kde-format
msgid "Search" msgid "Play Next"
msgstr "Ara" msgstr "Sonrakini Çal"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Kuyruğa ekle"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Beğenilerden Kaldır"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Beğenilere Ekle"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr "Geçmişten Kaldır"
#~ msgid "Favourite Songs"
#~ msgstr "Beğenilen Şarkılar"
#~ msgid "Back"
#~ msgstr "Geri"
#~ msgid "Find music on YouTube Music"
#~ msgstr "YouTube Müzik'te müzik bul"
#~ msgid "Add to Playlist"
#~ msgstr "Çalma Listesine Ekle"
#~ msgid "Play next"
#~ msgstr "Sonrakini çal"
#~ msgid "Clear"
#~ msgstr "Temizle"
#~ msgid "Pause"
#~ msgstr "Duraklat"
#~ msgid "Expand"
#~ msgstr "Genişlet"
+183 -75
View File
@@ -1,14 +1,14 @@
# Copyright (C) YEAR This file is copyright: # Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the PACKAGE package. # This file is distributed under the same license as the PACKAGE package.
# #
# Yuri Chornoivan <[email protected]>, 2021. # Yuri Chornoivan <[email protected]>, 2021, 2022, 2023.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE\n" "Project-Id-Version: PACKAGE\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2021-12-05 08:42+0200\n" "PO-Revision-Date: 2023-01-27 10:54+0200\n"
"Last-Translator: Yuri Chornoivan <[email protected]>\n" "Last-Translator: Fracture dept <[email protected]>\n"
"Language-Team: Ukrainian <[email protected]>\n" "Language-Team: Ukrainian <[email protected]>\n"
"Language: uk\n" "Language: uk\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -28,25 +28,45 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "[email protected]" msgstr "[email protected]"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "Відтворити" msgstr "Відтворити"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, kde-format #, kde-format
msgid "Play Next" msgid "Shuffle"
msgstr "Відтворити наступну" msgstr "Перемішати"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Open in Browser"
msgstr "Додати до списку відтворення" msgstr "Відкрити у переглядачі"
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr "Альбом • %1"
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr "Більше"
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "Радіо"
#: contents/ui/ArtistPage.qml:46
#, kde-format
msgid "Artist"
msgstr "Виконавець"
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
@@ -55,22 +75,22 @@ msgstr ""
"Підтримки відтворення відео ще не передбачено. Хочете, щоб було відтворено " "Підтримки відтворення відео ще не передбачено. Хочете, щоб було відтворено "
"лише звукову частину «%1»?" "лише звукову частину «%1»?"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "Альбоми" msgstr "Альбоми"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "Одинарні" msgstr "Одинарні"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "Пісні" msgstr "Пісні"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "Відео" msgstr "Відео"
@@ -85,85 +105,173 @@ msgstr "Гаразд"
msgid "Cancel" msgid "Cancel"
msgstr "Скасувати" msgstr "Скасувати"
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr "Улюблені"
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "Показати всі"
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "" msgstr "Часто слухали"
#: contents/ui/main.qml:94 #: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr "Відтворені композиції"
#: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "AudioTube" msgstr "AudioTube"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "Вилучити композицію" msgstr "Вилучити композицію"
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "Спорожнити"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "Перемішати"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "Призупинити"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "Відтворення не відбувається" msgstr "Відтворення не відбувається"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "Розгорнути" msgstr "Бібліотека"
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Artists"
msgstr "Виконавці"
#: contents/ui/SearchPage.qml:29
#, kde-format
msgid "Playlists"
msgstr "Списки відтворення"
#: contents/ui/SearchPage.qml:36
#, kde-format
msgid "Unknown"
msgstr "Невідомий"
#: contents/ui/SearchPage.qml:117
#, kde-format
msgid "Play next"
msgstr "Відтворити наступну"
#: contents/ui/SearchPage.qml:129
#, kde-format
msgid "Radio"
msgstr "Радіо"
#: contents/ui/SearchPage.qml:147
#, kde-format
msgid "Find music on YouTube Music"
msgstr "Шукати музику на сайті «Музика Youtube»"
#: contents/ui/SearchPage.qml:150
#, kde-format #, kde-format
msgid "Search" msgid "Search"
msgstr "Пошук" msgstr "Пошук"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "Відтворені композиції"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "Невідомий список композицій"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "Тут ще немає композицій"
#: contents/ui/PlaylistPage.qml:42
#, kde-format
msgid "Playlist"
msgstr "Список відтворення"
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr "Попередні пошуки:"
#: contents/ui/SearchPage.qml:28
#, kde-format
msgid "Artists"
msgstr "Виконавці"
#: contents/ui/SearchPage.qml:30
#, kde-format
msgid "Playlists"
msgstr "Списки відтворення"
#: contents/ui/SearchPage.qml:37
#, kde-format
msgid "Unknown"
msgstr "Невідомий"
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr "Немає відповідних попередніх пошуків"
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr "вилучити з журналу пошуку"
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr "Згорнути бічну панель"
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "Відтворити наступну"
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr "Додати до черги"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr "Вилучити з улюблених"
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr "Додати до улюблених"
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr "Вилучити із журналу"
#~ msgid "Favourite Songs"
#~ msgstr "Улюблені композиції"
#~ msgid "Back"
#~ msgstr "Назад"
#~ msgid "Find music on YouTube Music"
#~ msgstr "Шукати музику на сайті «Музика Youtube»"
#~ msgid "Add to Playlist"
#~ msgstr "Додати до списку відтворення"
#~ msgid "Play next"
#~ msgstr "Відтворити наступну"
#~ msgid "Clear"
#~ msgstr "Спорожнити"
#~ msgid "Pause"
#~ msgstr "Призупинити"
#~ msgid "Expand"
#~ msgstr "Розгорнути"
#~ msgid "Play only Audio" #~ msgid "Play only Audio"
#~ msgstr "Відтворити лише звук" #~ msgstr "Відтворити лише звук"
-165
View File
@@ -1,165 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the audiotube package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n"
"PO-Revision-Date: 2022-05-23 01:48+0000\n"
"Last-Translator: transxx.py program <[email protected]>\n"
"Language-Team: KDE Test Language <[email protected]>\n"
"Language: x-test\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "xxYour namesxx"
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "xxYour emailsxx"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192
#: contents/ui/PlaylistPage.qml:19
#, kde-format
msgid "Play"
msgstr "xxPlayxx"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101
#: contents/ui/PlaylistPage.qml:67
#, kde-format
msgid "Play Next"
msgstr "xxPlay Nextxx"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format
msgid "Add to Playlist"
msgstr "xxAdd to Playlistxx"
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67
#, kde-format
msgid ""
"Video playback is not supported yet. Do you want to play only the audio of "
"\"%1\"?"
msgstr ""
"xxVideo playback is not supported yet. Do you want to play only the audio of "
"\"%1\"?xx"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25
#, kde-format
msgid "Albums"
msgstr "xxAlbumsxx"
#: contents/ui/ArtistPage.qml:57
#, kde-format
msgid "Singles"
msgstr "xxSinglesxx"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31
#, kde-format
msgid "Songs"
msgstr "xxSongsxx"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33
#, kde-format
msgid "Videos"
msgstr "xxVideosxx"
#: contents/ui/ConfirmationMessage.qml:16
#, kde-format
msgid "OK"
msgstr "xxOKxx"
#: contents/ui/ConfirmationMessage.qml:21
#, kde-format
msgid "Cancel"
msgstr "xxCancelxx"
#: contents/ui/LibraryPage.qml:15
#, kde-format
msgid "Favourites"
msgstr "xxFavouritesxx"
#: contents/ui/LibraryPage.qml:67
#, kde-format
msgid "Most played"
msgstr "xxMost playedxx"
#: contents/ui/main.qml:94
#, kde-format
msgid "AudioTube"
msgstr "xxAudioTubexx"
#: contents/ui/PlayerFooter.qml:124
#, kde-format
msgid "Remove Track"
msgstr "xxRemove Trackxx"
#: contents/ui/PlayerFooter.qml:141
#, kde-format
msgid "Clear"
msgstr "xxClearxx"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "xxShufflexx"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "xxPausexx"
#: contents/ui/PlayerFooter.qml:222
#, kde-format
msgid "No media playing"
msgstr "xxNo media playingxx"
#: contents/ui/PlayerFooter.qml:266
#, kde-format
msgid "Expand"
msgstr "xxExpandxx"
#: contents/ui/SearchPage.qml:27
#, kde-format
msgid "Artists"
msgstr "xxArtistsxx"
#: contents/ui/SearchPage.qml:29
#, kde-format
msgid "Playlists"
msgstr "xxPlaylistsxx"
#: contents/ui/SearchPage.qml:36
#, kde-format
msgid "Unknown"
msgstr "xxUnknownxx"
#: contents/ui/SearchPage.qml:117
#, kde-format
msgid "Play next"
msgstr "xxPlay nextxx"
#: contents/ui/SearchPage.qml:129
#, kde-format
msgid "Radio"
msgstr "xxRadioxx"
#: contents/ui/SearchPage.qml:147
#, kde-format
msgid "Find music on YouTube Music"
msgstr "xxFind music on YouTube Musicxx"
#: contents/ui/SearchPage.qml:150
#, kde-format
msgid "Search"
msgstr "xxSearchxx"
+139 -55
View File
@@ -2,8 +2,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: kdeorg\n" "Project-Id-Version: kdeorg\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-05-23 00:47+0000\n" "POT-Creation-Date: 2023-01-30 01:00+0000\n"
"PO-Revision-Date: 2022-05-15 15:46\n" "PO-Revision-Date: 2023-01-12 10:32\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Chinese Simplified\n" "Language-Team: Chinese Simplified\n"
"Language: zh_CN\n" "Language: zh_CN\n"
@@ -27,47 +27,67 @@ msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails" msgid "Your emails"
msgstr "[email protected], [email protected]" msgstr "[email protected], [email protected]"
#: contents/ui/AlbumPage.qml:19 contents/ui/PlayerFooter.qml:192 #: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#: contents/ui/PlaylistPage.qml:19
#, kde-format #, kde-format
msgid "Play" msgid "Play"
msgstr "播放" msgstr "播放"
#: contents/ui/AlbumPage.qml:61 contents/ui/ArtistPage.qml:101 #: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:67 #: contents/ui/PlaylistPage.qml:33
#, kde-format #, kde-format
msgid "Play Next" msgid "Shuffle"
msgstr "播放下一首" msgstr "随机播放"
#: contents/ui/AlbumPage.qml:66 contents/ui/ArtistPage.qml:107 #: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#: contents/ui/PlaylistPage.qml:72 contents/ui/SearchPage.qml:123
#, kde-format #, kde-format
msgid "Add to Playlist" msgid "Open in Browser"
msgstr "添加到播放列表" msgstr "在浏览器中打开"
#: contents/ui/ArtistPage.qml:39 contents/ui/SearchPage.qml:67 #: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr ""
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr ""
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr "电台"
#: contents/ui/ArtistPage.qml:46
#, kde-format
msgid "Artist"
msgstr ""
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format #, kde-format
msgid "" msgid ""
"Video playback is not supported yet. Do you want to play only the audio of " "Video playback is not supported yet. Do you want to play only the audio of "
"\"%1\"?" "\"%1\"?"
msgstr "视频播放尚未被支持。您想要只播放“%1”中的音频吗?" msgstr "视频播放尚未被支持。您想要只播放“%1”中的音频吗?"
#: contents/ui/ArtistPage.qml:55 contents/ui/SearchPage.qml:25 #: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format #, kde-format
msgid "Albums" msgid "Albums"
msgstr "专辑" msgstr "专辑"
#: contents/ui/ArtistPage.qml:57 #: contents/ui/ArtistPage.qml:87
#, kde-format #, kde-format
msgid "Singles" msgid "Singles"
msgstr "单曲" msgstr "单曲"
#: contents/ui/ArtistPage.qml:59 contents/ui/SearchPage.qml:31 #: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format #, kde-format
msgid "Songs" msgid "Songs"
msgstr "曲目" msgstr "曲目"
#: contents/ui/ArtistPage.qml:61 contents/ui/SearchPage.qml:33 #: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format #, kde-format
msgid "Videos" msgid "Videos"
msgstr "视频" msgstr "视频"
@@ -82,82 +102,146 @@ msgstr "确定"
msgid "Cancel" msgid "Cancel"
msgstr "取消" msgstr "取消"
#: contents/ui/LibraryPage.qml:15 #: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format #, kde-format
msgid "Favourites" msgid "Favourites"
msgstr "" msgstr "收藏夹"
#: contents/ui/LibraryPage.qml:67 #: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr "显示全部"
#: contents/ui/LibraryPage.qml:214
#, kde-format #, kde-format
msgid "Most played" msgid "Most played"
msgstr "最常播放"
#: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr "" msgstr ""
#: contents/ui/main.qml:94 #: contents/ui/main.qml:109
#, kde-format #, kde-format
msgid "AudioTube" msgid "AudioTube"
msgstr "AudioTube" msgstr "AudioTube"
#: contents/ui/PlayerFooter.qml:124 #: 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 #, kde-format
msgid "Remove Track" msgid "Remove Track"
msgstr "移除曲目" msgstr "移除曲目"
#: contents/ui/PlayerFooter.qml:141 #: contents/ui/MaximizedPlayerPage.qml:316
#, kde-format #: contents/ui/MinimizedPlayerControls.qml:90
msgid "Clear"
msgstr "清除"
#: contents/ui/PlayerFooter.qml:146 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Shuffle"
msgstr "随机播放"
#: contents/ui/PlayerFooter.qml:192
#, kde-format
msgid "Pause"
msgstr "暂停"
#: contents/ui/PlayerFooter.qml:222
#, kde-format #, kde-format
msgid "No media playing" msgid "No media playing"
msgstr "没有正在播放的媒体" msgstr "没有正在播放的媒体"
#: contents/ui/PlayerFooter.qml:266 #: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format #, kde-format
msgid "Expand" msgid "Library"
msgstr "展开" msgstr ""
#: contents/ui/SearchPage.qml:27 #: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Search"
msgstr "搜索"
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr "已播放歌曲"
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr "未知歌曲列表"
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr "此处无歌曲"
#: contents/ui/PlaylistPage.qml:42
#, kde-format
msgid "Playlist"
msgstr ""
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr ""
#: contents/ui/SearchPage.qml:28
#, kde-format #, kde-format
msgid "Artists" msgid "Artists"
msgstr "艺人" msgstr "艺人"
#: contents/ui/SearchPage.qml:29 #: contents/ui/SearchPage.qml:30
#, kde-format #, kde-format
msgid "Playlists" msgid "Playlists"
msgstr "播放列表" msgstr "播放列表"
#: contents/ui/SearchPage.qml:36 #: contents/ui/SearchPage.qml:37
#, kde-format #, kde-format
msgid "Unknown" msgid "Unknown"
msgstr "未知" msgstr "未知"
#: contents/ui/SearchPage.qml:117 #: contents/ui/SearchWithDropdown.qml:287
#, kde-format #, kde-format
msgid "Play next" msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr "播放下一首" msgstr "播放下一首"
#: contents/ui/SearchPage.qml:129 #: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format #, kde-format
msgid "Radio" msgid "Add to queue"
msgstr "电台" msgstr ""
#: contents/ui/SearchPage.qml:147 #: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format #, kde-format
msgid "Find music on YouTube Music" msgid "Remove Favourite"
msgstr "查找 YouTube Music 中的音乐" msgstr ""
#: contents/ui/SearchPage.qml:150 #: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format #, kde-format
msgid "Search" msgid "Add Favourite"
msgstr "搜索" msgstr ""
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr ""
+248
View File
@@ -0,0 +1,248 @@
# Chinese translations for audiotube package
# audiotube 套件的正體中文翻譯.
# Copyright (C) 2022 This file is copyright:
# This file is distributed under the same license as the audiotube package.
# Automatically generated, 2022.
#
msgid ""
msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 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"
"Language: zh_TW\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr ""
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr ""
#: contents/ui/AlbumPage.qml:22 contents/ui/PlaylistPage.qml:26
#, kde-format
msgid "Play"
msgstr ""
#: contents/ui/AlbumPage.qml:29 contents/ui/ArtistPage.qml:32
#: contents/ui/PlaylistPage.qml:33
#, kde-format
msgid "Shuffle"
msgstr ""
#: contents/ui/AlbumPage.qml:37 contents/ui/ArtistPage.qml:39
#, kde-format
msgid "Open in Browser"
msgstr ""
#: contents/ui/AlbumPage.qml:44
#, kde-format
msgid "Album • %1"
msgstr ""
#: contents/ui/AlbumPage.qml:88 contents/ui/ArtistPage.qml:126
#: contents/ui/PlaybackHistory.qml:80 contents/ui/PlaylistPage.qml:91
#: contents/ui/SearchPage.qml:130
#, kde-format
msgid "More"
msgstr ""
#: contents/ui/ArtistPage.qml:27
#, kde-format
msgid "Radio"
msgstr ""
#: contents/ui/ArtistPage.qml:46
#, kde-format
msgid "Artist"
msgstr ""
#: contents/ui/ArtistPage.qml:68 contents/ui/SearchPage.qml:70
#, kde-format
msgid ""
"Video playback is not supported yet. Do you want to play only the audio of "
"\"%1\"?"
msgstr ""
#: contents/ui/ArtistPage.qml:85 contents/ui/SearchPage.qml:26
#, kde-format
msgid "Albums"
msgstr ""
#: contents/ui/ArtistPage.qml:87
#, kde-format
msgid "Singles"
msgstr ""
#: contents/ui/ArtistPage.qml:89 contents/ui/SearchPage.qml:32
#, kde-format
msgid "Songs"
msgstr ""
#: contents/ui/ArtistPage.qml:91 contents/ui/SearchPage.qml:34
#, kde-format
msgid "Videos"
msgstr ""
#: contents/ui/ConfirmationMessage.qml:16
#, kde-format
msgid "OK"
msgstr ""
#: contents/ui/ConfirmationMessage.qml:21
#, kde-format
msgid "Cancel"
msgstr ""
#: contents/ui/LibraryPage.qml:28 contents/ui/LibraryPage.qml:44
#: contents/ui/NavigationBar.qml:46 contents/ui/NavigationBar.qml:51
#: contents/ui/Sidebar.qml:124 contents/ui/Sidebar.qml:131
#, kde-format
msgid "Favourites"
msgstr ""
#: contents/ui/LibraryPage.qml:39 contents/ui/LibraryPage.qml:225
#, kde-format
msgid "Show All"
msgstr ""
#: contents/ui/LibraryPage.qml:214
#, kde-format
msgid "Most played"
msgstr ""
#: contents/ui/LibraryPage.qml:230
#, kde-format
msgid "played Songs"
msgstr ""
#: contents/ui/main.qml:109
#, kde-format
msgid "AudioTube"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:107
#, kde-format
msgid "Now Playing"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:132
#, kde-format
msgid "Queue"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:157
#, kde-format
msgid "Lyrics"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:274
#, kde-format
msgid "Remove Track"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:316
#: contents/ui/MinimizedPlayerControls.qml:90
#, kde-format
msgid "No media playing"
msgstr ""
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:93
#, kde-format
msgid "Library"
msgstr ""
#: contents/ui/NavigationBar.qml:35 contents/ui/Sidebar.qml:109
#, kde-format
msgid "Search"
msgstr ""
#: contents/ui/NavigationBar.qml:58 contents/ui/NavigationBar.qml:63
#: contents/ui/Sidebar.qml:143 contents/ui/Sidebar.qml:150
#, kde-format
msgid "Played Songs"
msgstr ""
#: contents/ui/PlaybackHistory.qml:15
#, kde-format
msgid "Unknown list of songs"
msgstr ""
#: contents/ui/PlaybackHistory.qml:27
#, kde-format
msgid "No songs here yet"
msgstr ""
#: contents/ui/PlaylistPage.qml:42
#, kde-format
msgid "Playlist"
msgstr ""
#: contents/ui/SearchPage.qml:16
#, kde-format
msgid "Previous Searches:"
msgstr ""
#: contents/ui/SearchPage.qml:28
#, kde-format
msgid "Artists"
msgstr ""
#: contents/ui/SearchPage.qml:30
#, kde-format
msgid "Playlists"
msgstr ""
#: contents/ui/SearchPage.qml:37
#, kde-format
msgid "Unknown"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:287
#, kde-format
msgid "No matching previous searches"
msgstr ""
#: contents/ui/SearchWithDropdown.qml:322
#, kde-format
msgid "remove from search history"
msgstr ""
#: contents/ui/Sidebar.qml:179
#, kde-format
msgid "Collapse Sidebar"
msgstr ""
#: contents/ui/SongMenu.qml:113 contents/ui/SongMenu.qml:172
#, kde-format
msgid "Play Next"
msgstr ""
#: contents/ui/SongMenu.qml:122 contents/ui/SongMenu.qml:178
#, kde-format
msgid "Add to queue"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Remove Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:132 contents/ui/SongMenu.qml:185
#, kde-format
msgid "Add Favourite"
msgstr ""
#: contents/ui/SongMenu.qml:148 contents/ui/SongMenu.qml:200
#, kde-format
msgid "Remove from History"
msgstr ""
+1 -1
View File
@@ -3,5 +3,5 @@
# #
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL # SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
ytmusicapi==0.22.0 ytmusicapi==0.25.0
yt-dlp yt-dlp
+11 -8
View File
@@ -16,7 +16,7 @@ add_library(asyncdatabase STATIC
) )
target_include_directories(asyncdatabase PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) target_include_directories(asyncdatabase PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(asyncdatabase PUBLIC Qt5::Sql) target_link_libraries(asyncdatabase PUBLIC Qt::Sql)
add_subdirectory(example) add_subdirectory(example)
@@ -36,22 +36,25 @@ add_executable(audiotube
multiiterableview.h multiiterableview.h
library.cpp library.cpp
resources.qrc resources.qrc
blur.cpp
) )
target_link_libraries(audiotube target_link_libraries(audiotube
Qt5::Core Qt::Core
Qt5::Gui Qt::Gui
Qt5::Qml Qt::Qml
Qt5::Quick Qt::Quick
Qt5::QuickControls2 Qt::QuickControls2
Qt5::Svg Qt::Svg
Qt::Widgets
KF5::I18n KF5::I18n
KF5::CoreAddons KF5::CoreAddons
KF5::Crash KF5::Crash
KF5::WindowSystem
ytm ytm
asyncdatabase asyncdatabase
) )
target_compile_definitions(audiotube PRIVATE -DQT_NO_KEYWORDS -DQT_NO_URL_CAST_FROM_STRING -DQT_QML_DEBUG) target_compile_definitions(audiotube PRIVATE -DQT_NO_KEYWORDS -DQT_NO_URL_CAST_FROM_STRING)
install(TARGETS audiotube ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}) install(TARGETS audiotube ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
+25 -2
View File
@@ -3,8 +3,9 @@
// SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
#include "albummodel.h" #include "albummodel.h"
#include "playlistutils.h"
#include <QDebug> #include <QStringBuilder>
AlbumModel::AlbumModel(QObject *parent) AlbumModel::AlbumModel(QObject *parent)
: AbstractYTMusicModel(parent) : AbstractYTMusicModel(parent)
@@ -21,6 +22,7 @@ AlbumModel::AlbumModel(QObject *parent)
std::sort(m_album.thumbnails.begin(), m_album.thumbnails.end()); std::sort(m_album.thumbnails.begin(), m_album.thumbnails.end());
Q_EMIT titleChanged(); Q_EMIT titleChanged();
Q_EMIT artistsChanged();
Q_EMIT thumbnailUrlChanged(); Q_EMIT thumbnailUrlChanged();
Q_EMIT playlistIdChanged(); Q_EMIT playlistIdChanged();
}); });
@@ -45,6 +47,14 @@ QVariant AlbumModel::data(const QModelIndex &index, int role) const
return QString::fromStdString(m_album.tracks[index.row()].video_id.value_or(std::string())); return QString::fromStdString(m_album.tracks[index.row()].video_id.value_or(std::string()));
case Artists: case Artists:
return QVariant::fromValue(m_album.tracks[index.row()].artists); return QVariant::fromValue(m_album.tracks[index.row()].artists);
case ThumbnailUrl:
if (!m_album.thumbnails.empty()) {
return QString::fromStdString(m_album.thumbnails.front().url);
} else {
return {};
}
case ArtistsDisplayString:
return PlaylistUtils::artistsToString(m_album.tracks[index.row()].artists);
} }
Q_UNREACHABLE(); Q_UNREACHABLE();
@@ -57,7 +67,9 @@ QHash<int, QByteArray> AlbumModel::roleNames() const
return { return {
{Title, "title"}, {Title, "title"},
{VideoId, "videoId"}, {VideoId, "videoId"},
{Artists, "artists"} {Artists, "artists"},
{ThumbnailUrl, "thumbnailUrl"},
{ArtistsDisplayString, "artistsDisplayString"}
}; };
} }
@@ -77,6 +89,12 @@ QString AlbumModel::title() const
return QString::fromStdString(m_album.title); return QString::fromStdString(m_album.title);
} }
QString AlbumModel::artists() const
{
return PlaylistUtils::artistsToString(m_album.artists);
}
QUrl AlbumModel::thumbnailUrl() const QUrl AlbumModel::thumbnailUrl() const
{ {
if (m_album.thumbnails.empty()) { if (m_album.thumbnails.empty()) {
@@ -90,3 +108,8 @@ QString AlbumModel::playlistId() const
{ {
return QString::fromStdString(m_album.audio_playlist_id); return QString::fromStdString(m_album.audio_playlist_id);
} }
QUrl AlbumModel::webUrl() const
{
return QUrl(YTMUSIC_WEB_BASE_URL % "/playlist?list=" % QString::fromStdString(m_album.audio_playlist_id));
}
+10 -1
View File
@@ -16,14 +16,18 @@ class AlbumModel : public AbstractYTMusicModel
Q_PROPERTY(QString browseId READ browseId WRITE setBrowseId NOTIFY browseIdChanged REQUIRED) Q_PROPERTY(QString browseId READ browseId WRITE setBrowseId NOTIFY browseIdChanged REQUIRED)
Q_PROPERTY(QString title READ title NOTIFY titleChanged) Q_PROPERTY(QString title READ title NOTIFY titleChanged)
Q_PROPERTY(QString artists READ artists NOTIFY artistsChanged)
Q_PROPERTY(QUrl thumbnailUrl READ thumbnailUrl NOTIFY thumbnailUrlChanged) Q_PROPERTY(QUrl thumbnailUrl READ thumbnailUrl NOTIFY thumbnailUrlChanged)
Q_PROPERTY(QString playlistId READ playlistId NOTIFY playlistIdChanged) Q_PROPERTY(QString playlistId READ playlistId NOTIFY playlistIdChanged)
Q_PROPERTY(QUrl webUrl READ webUrl NOTIFY webUrlChanged)
public: public:
enum Role { enum Role {
Title = Qt::UserRole + 1, Title = Qt::UserRole + 1,
VideoId, VideoId,
Artists Artists,
ThumbnailUrl,
ArtistsDisplayString
}; };
explicit AlbumModel(QObject *parent = nullptr); explicit AlbumModel(QObject *parent = nullptr);
@@ -39,12 +43,17 @@ public:
QString title() const; QString title() const;
Q_SIGNAL void titleChanged(); Q_SIGNAL void titleChanged();
QString artists() const;
Q_SIGNAL void artistsChanged();
QUrl thumbnailUrl() const; QUrl thumbnailUrl() const;
Q_SIGNAL void thumbnailUrlChanged(); Q_SIGNAL void thumbnailUrlChanged();
QString playlistId() const; QString playlistId() const;
Q_SIGNAL void playlistIdChanged(); Q_SIGNAL void playlistIdChanged();
QUrl webUrl() const;
Q_SIGNAL void webUrlChanged();
private: private:
QString m_browseId; QString m_browseId;
+28 -1
View File
@@ -4,6 +4,8 @@
#include "artistmodel.h" #include "artistmodel.h"
#include <QStringBuilder>
#include <asyncytmusic.h> #include <asyncytmusic.h>
ArtistModel::ArtistModel(QObject *parent) ArtistModel::ArtistModel(QObject *parent)
@@ -26,9 +28,21 @@ ArtistModel::ArtistModel(QObject *parent)
std::sort(m_artist.thumbnails.begin(), m_artist.thumbnails.end()); std::sort(m_artist.thumbnails.begin(), m_artist.thumbnails.end());
albums = m_artist.albums ? m_artist.albums->results : std::vector<artist::Artist::Album>(); albums = m_artist.albums ? m_artist.albums->results : std::vector<artist::Artist::Album>();
for (auto &album : albums) {
std::sort(album.thumbnails.begin(), album.thumbnails.end());
}
singles = m_artist.singles ? m_artist.singles->results : std::vector<artist::Artist::Single>(); singles = m_artist.singles ? m_artist.singles->results : std::vector<artist::Artist::Single>();
for (auto &single : singles) {
std::sort(single.thumbnails.begin(), single.thumbnails.end());
}
songs = m_artist.songs ? m_artist.songs->results : std::vector<artist::Artist::Song>(); songs = m_artist.songs ? m_artist.songs->results : std::vector<artist::Artist::Song>();
for (auto &song : songs) {
std::sort(song.thumbnails.begin(), song.thumbnails.end());
}
videos = m_artist.videos ? m_artist.videos->results : std::vector<artist::Artist::Video>(); videos = m_artist.videos ? m_artist.videos->results : std::vector<artist::Artist::Video>();
for (auto &video : videos) {
std::sort(video.thumbnails.begin(), video.thumbnails.end());
}
// std::span can't know if the data pointer underneath it was changed, so re-create // std::span can't know if the data pointer underneath it was changed, so re-create
m_view = MultiIterableView(albums, singles, songs, videos); m_view = MultiIterableView(albums, singles, songs, videos);
@@ -103,6 +117,13 @@ QVariant ArtistModel::data(const QModelIndex &index, int role) const
Q_UNREACHABLE(); Q_UNREACHABLE();
}, m_view[index.row()]); }, m_view[index.row()]);
case ThumbnailUrl:
return std::visit([&](auto&& item) {
if (!item.thumbnails.empty()) {
return QString::fromStdString(item.thumbnails.front().url);
}
return QString();
}, m_view[index.row()]);
} }
Q_UNREACHABLE(); Q_UNREACHABLE();
@@ -116,7 +137,8 @@ QHash<int, QByteArray> ArtistModel::roleNames() const
{Title, "title"}, {Title, "title"},
{Type, "type"}, {Type, "type"},
{Artists, "artists"}, {Artists, "artists"},
{VideoId, "videoId"} {VideoId, "videoId"},
{ThumbnailUrl, "thumbnailUrl"}
}; };
} }
@@ -145,6 +167,11 @@ QUrl ArtistModel::thumbnailUrl() const
return QUrl(QString::fromStdString(m_artist.thumbnails.back().url)); return QUrl(QString::fromStdString(m_artist.thumbnails.back().url));
} }
QUrl ArtistModel::webUrl() const
{
return QUrl(YTMUSIC_WEB_BASE_URL % u"channel/" % QString::fromStdString(m_artist.channel_id));
}
void ArtistModel::triggerItem(int row) void ArtistModel::triggerItem(int row)
{ {
std::visit([&](auto&& item) { std::visit([&](auto&& item) {
+6 -1
View File
@@ -23,6 +23,7 @@ class ArtistModel : public AbstractYTMusicModel
Q_PROPERTY(QString title READ title NOTIFY titleChanged) Q_PROPERTY(QString title READ title NOTIFY titleChanged)
Q_PROPERTY(QUrl thumbnailUrl READ thumbnailUrl NOTIFY thumbnailUrlChanged) Q_PROPERTY(QUrl thumbnailUrl READ thumbnailUrl NOTIFY thumbnailUrlChanged)
Q_PROPERTY(QUrl webUrl READ webUrl NOTIFY webUrlChanged)
public: public:
enum Type { enum Type {
@@ -37,7 +38,8 @@ public:
Title, Title,
Type, Type,
Artists, Artists,
VideoId VideoId,
ThumbnailUrl
}; };
explicit ArtistModel(QObject *parent = nullptr); explicit ArtistModel(QObject *parent = nullptr);
@@ -56,6 +58,9 @@ public:
QUrl thumbnailUrl() const; QUrl thumbnailUrl() const;
Q_SIGNAL void thumbnailUrlChanged(); Q_SIGNAL void thumbnailUrlChanged();
QUrl webUrl() const;
Q_SIGNAL void webUrlChanged();
Q_INVOKABLE void triggerItem(int row); Q_INVOKABLE void triggerItem(int row);
Q_SIGNAL void openAlbum(const QString &browseId); Q_SIGNAL void openAlbum(const QString &browseId);
+1 -1
View File
@@ -120,7 +120,7 @@ struct AsyncSqlDatabasePrivate {
// Internal asynchronous database class // Internal asynchronous database class
QFuture<void> AsyncSqlDatabase::establishConnection(const DatabaseConfiguration &configuration) QFuture<void> AsyncSqlDatabase::establishConnection(const DatabaseConfiguration &configuration)
{ {
return runAsync<void>([=, this] { return runAsync([=, this] {
d->database = QSqlDatabase::addDatabase(configuration.type()); d->database = QSqlDatabase::addDatabase(configuration.type());
if (configuration.databaseName()) { if (configuration.databaseName()) {
d->database.setDatabaseName(*configuration.databaseName()); d->database.setDatabaseName(*configuration.databaseName());
+9 -8
View File
@@ -98,7 +98,7 @@ public:
template <typename T, typename ...Args> template <typename T, typename ...Args>
auto getResults(const QString &sqlQuery, Args... args) -> QFuture<std::vector<T>> { auto getResults(const QString &sqlQuery, Args... args) -> QFuture<std::vector<T>> {
return runAsync<std::vector<T>>([=, this] { return runAsync([=, this] {
auto query = executeQuery(sqlQuery, args...); auto query = executeQuery(sqlQuery, args...);
const auto rows = parseRows<typename T::ColumnTypes>(retrieveRows(query)); const auto rows = parseRows<typename T::ColumnTypes>(retrieveRows(query));
@@ -110,7 +110,7 @@ public:
template <typename T, typename ...Args> template <typename T, typename ...Args>
auto getResult(const QString &sqlQuery, Args... args) -> QFuture<std::optional<T>> { auto getResult(const QString &sqlQuery, Args... args) -> QFuture<std::optional<T>> {
return runAsync<std::optional<T>>([=, this]() -> std::optional<T> { return runAsync([=, this]() -> std::optional<T> {
auto query = executeQuery(sqlQuery, args...); auto query = executeQuery(sqlQuery, args...);
if (const auto row = retrieveOptionalRow(query)) { if (const auto row = retrieveOptionalRow(query)) {
return T::fromSql(parseRow<typename T::ColumnTypes>(*row)); return T::fromSql(parseRow<typename T::ColumnTypes>(*row));
@@ -122,13 +122,13 @@ public:
template <typename ...Args> template <typename ...Args>
auto execute(const QString &sqlQuery, Args... args) -> QFuture<void> { auto execute(const QString &sqlQuery, Args... args) -> QFuture<void> {
return runAsync<void>([=, this] { return runAsync([=, this] {
executeQuery(sqlQuery, args...); executeQuery(sqlQuery, args...);
}); });
} }
auto runMigrations(const QString &migrationDirectory) -> QFuture<void> { auto runMigrations(const QString &migrationDirectory) -> QFuture<void> {
return runAsync<void>([=, this] { return runAsync([=, this] {
runDatabaseMigrations(db(), migrationDirectory); runDatabaseMigrations(db(), migrationDirectory);
}); });
} }
@@ -149,11 +149,12 @@ private:
return runQuery(query); return runQuery(query);
} }
template <typename T, typename Functor> template <typename Functor>
QFuture<T> runAsync(Functor func) { QFuture<std::invoke_result_t<Functor>> runAsync(Functor func) {
auto interface = std::make_shared<QFutureInterface<T>>(); using ReturnType = std::invoke_result_t<Functor>;
auto interface = std::make_shared<QFutureInterface<ReturnType>>();
QMetaObject::invokeMethod(this, [interface, func] { QMetaObject::invokeMethod(this, [interface, func] {
if constexpr (!std::is_same_v<T, void>) { if constexpr (!std::is_same_v<ReturnType, void>) {
auto result = func(); auto result = func();
interface->reportResult(result); interface->reportResult(result);
} else { } else {
+27 -15
View File
@@ -9,6 +9,7 @@
#include <QJsonObject> #include <QJsonObject>
#include <QJsonArray> #include <QJsonArray>
#include <QFutureInterface> #include <QFutureInterface>
#include <QCoreApplication>
#include <pybind11/embed.h> #include <pybind11/embed.h>
@@ -23,8 +24,8 @@ namespace py = pybind11;
#include <type_traits> #include <type_traits>
#include <memory> #include <memory>
template <typename R, typename T, typename OP> template <typename T, typename OP>
std::optional<R> map_optional(const std::optional<T> &optional, OP op) { std::optional<std::invoke_result_t<OP, T>> mapOptional(const std::optional<T> &optional, OP op) {
if (optional.has_value()) { if (optional.has_value()) {
if constexpr (std::is_member_function_pointer<OP>::value) { if constexpr (std::is_member_function_pointer<OP>::value) {
return (&optional.value()->*op)(); return (&optional.value()->*op)();
@@ -61,7 +62,7 @@ AsyncYTMusic::AsyncYTMusic(QObject *parent)
// //
QFuture<std::vector<search::SearchResultItem>> AsyncYTMusic::search(const QString &query) QFuture<std::vector<search::SearchResultItem>> AsyncYTMusic::search(const QString &query)
{ {
return invokeAndCatchOnThread<std::vector<search::SearchResultItem>>([=, this]() { return invokeAndCatchOnThread([=, this]() {
return m_ytm->search(query.toStdString()); return m_ytm->search(query.toStdString());
}); });
} }
@@ -71,7 +72,7 @@ QFuture<std::vector<search::SearchResultItem>> AsyncYTMusic::search(const QStrin
// //
QFuture<artist::Artist> AsyncYTMusic::fetchArtist(const QString &channelId) QFuture<artist::Artist> AsyncYTMusic::fetchArtist(const QString &channelId)
{ {
return invokeAndCatchOnThread<artist::Artist>([=, this]() { return invokeAndCatchOnThread([=, this]() {
return m_ytm->get_artist(channelId.toStdString()); return m_ytm->get_artist(channelId.toStdString());
}); });
} }
@@ -81,7 +82,7 @@ QFuture<artist::Artist> AsyncYTMusic::fetchArtist(const QString &channelId)
// //
QFuture<album::Album> AsyncYTMusic::fetchAlbum(const QString &browseId) QFuture<album::Album> AsyncYTMusic::fetchAlbum(const QString &browseId)
{ {
return invokeAndCatchOnThread<album::Album>([=, this]() { return invokeAndCatchOnThread([=, this]() {
return m_ytm->get_album(browseId.toStdString()); return m_ytm->get_album(browseId.toStdString());
}); });
} }
@@ -91,7 +92,7 @@ QFuture<album::Album> AsyncYTMusic::fetchAlbum(const QString &browseId)
// //
QFuture<std::optional<song::Song>> AsyncYTMusic::fetchSong(const QString &videoId) QFuture<std::optional<song::Song>> AsyncYTMusic::fetchSong(const QString &videoId)
{ {
return invokeAndCatchOnThread<std::optional<song::Song>>([=, this]() { return invokeAndCatchOnThread([=, this]() {
return m_ytm->get_song(videoId.toStdString()); return m_ytm->get_song(videoId.toStdString());
}); });
} }
@@ -100,7 +101,7 @@ QFuture<std::optional<song::Song>> AsyncYTMusic::fetchSong(const QString &videoI
// fetchPlaylist // fetchPlaylist
// //
QFuture<playlist::Playlist> AsyncYTMusic::fetchPlaylist(const QString &playlistId) { QFuture<playlist::Playlist> AsyncYTMusic::fetchPlaylist(const QString &playlistId) {
return invokeAndCatchOnThread<playlist::Playlist>([=, this]() { return invokeAndCatchOnThread([=, this]() {
return m_ytm->get_playlist(playlistId.toStdString()); return m_ytm->get_playlist(playlistId.toStdString());
}); });
} }
@@ -110,7 +111,7 @@ QFuture<playlist::Playlist> AsyncYTMusic::fetchPlaylist(const QString &playlistI
// //
QFuture<std::vector<artist::Artist::Album>> AsyncYTMusic::fetchArtistAlbums(const QString &channelId, const QString &params) QFuture<std::vector<artist::Artist::Album>> AsyncYTMusic::fetchArtistAlbums(const QString &channelId, const QString &params)
{ {
return invokeAndCatchOnThread<std::vector<artist::Artist::Album>>([=, this]() { return invokeAndCatchOnThread([=, this]() {
return m_ytm->get_artist_albums(channelId.toStdString(), params.toStdString()); return m_ytm->get_artist_albums(channelId.toStdString(), params.toStdString());
}); });
} }
@@ -120,7 +121,7 @@ QFuture<std::vector<artist::Artist::Album>> AsyncYTMusic::fetchArtistAlbums(cons
// //
QFuture<video_info::VideoInfo> AsyncYTMusic::extractVideoInfo(const QString &videoId) QFuture<video_info::VideoInfo> AsyncYTMusic::extractVideoInfo(const QString &videoId)
{ {
return invokeAndCatchOnThread<video_info::VideoInfo>([=, this]() { return invokeAndCatchOnThread([=, this]() {
return m_ytm->extract_video_info(videoId.toStdString()); return m_ytm->extract_video_info(videoId.toStdString());
}); });
} }
@@ -130,10 +131,19 @@ QFuture<video_info::VideoInfo> AsyncYTMusic::extractVideoInfo(const QString &vid
// //
QFuture<watch::Playlist> AsyncYTMusic::fetchWatchPlaylist(const std::optional<QString> &videoId, const std::optional<QString> &playlistId) QFuture<watch::Playlist> AsyncYTMusic::fetchWatchPlaylist(const std::optional<QString> &videoId, const std::optional<QString> &playlistId)
{ {
return invokeAndCatchOnThread<watch::Playlist>([=, this]() { return invokeAndCatchOnThread([=, this]() {
return m_ytm->get_watch_playlist( return m_ytm->get_watch_playlist(
map_optional<std::string>(videoId, &QString::toStdString), mapOptional(videoId, &QString::toStdString),
map_optional<std::string>(playlistId, &QString::toStdString) mapOptional(playlistId, &QString::toStdString)
);
});
}
QFuture<Lyrics> AsyncYTMusic::fetchLyrics(const QString &browseId)
{
return invokeAndCatchOnThread([=, this]() {
return m_ytm->get_lyrics(
browseId.toStdString()
); );
}); });
} }
@@ -152,17 +162,19 @@ YTMusicThread::~YTMusicThread()
AsyncYTMusic *YTMusicThread::operator->() AsyncYTMusic *YTMusicThread::operator->()
{ {
return &m_ytm; return m_ytm;
} }
AsyncYTMusic &YTMusicThread::get() AsyncYTMusic &YTMusicThread::get()
{ {
return m_ytm; return *m_ytm;
} }
YTMusicThread::YTMusicThread() YTMusicThread::YTMusicThread()
: m_ytm(new AsyncYTMusic())
{ {
connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, m_ytm, &QObject::deleteLater);
setObjectName(QStringLiteral("YTMusicAPI")); setObjectName(QStringLiteral("YTMusicAPI"));
m_ytm.moveToThread(this); m_ytm->moveToThread(this);
start(); start();
} }
+15 -7
View File
@@ -13,6 +13,8 @@
#include <ytmusic.h> #include <ytmusic.h>
constexpr QStringView YTMUSIC_WEB_BASE_URL = u"https://music.youtube.com/";
Q_DECLARE_METATYPE(std::vector<artist::Artist::Album>); Q_DECLARE_METATYPE(std::vector<artist::Artist::Album>);
Q_DECLARE_METATYPE(std::vector<search::SearchResultItem>) Q_DECLARE_METATYPE(std::vector<search::SearchResultItem>)
Q_DECLARE_METATYPE(artist::Artist) Q_DECLARE_METATYPE(artist::Artist)
@@ -54,17 +56,19 @@ template <typename T, typename QObjectDerivedType, typename Function>
void connectFuture(const QFuture<T> &future, QObjectDerivedType *self, const Function &fun) { void connectFuture(const QFuture<T> &future, QObjectDerivedType *self, const Function &fun) {
auto watcher = std::make_shared<QFutureWatcher<T>>(); auto watcher = std::make_shared<QFutureWatcher<T>>();
watcher->setFuture(future); watcher->setFuture(future);
QObject::connect(watcher.get(), &QFutureWatcherBase::finished, self, [self, watcher, fun, future] { QObject::connect(watcher.get(), &QFutureWatcherBase::finished, self, [self, watcher, fun, future]() {
if constexpr (std::is_same_v<void, T>) { if constexpr (std::is_same_v<void, T>) {
if constexpr (std::is_member_function_pointer_v<Function>) { if constexpr (std::is_member_function_pointer_v<Function>) {
(self->*fun)(); (self->*fun)();
} else { } else {
Q_UNUSED(self);
fun(); fun();
} }
} else if (future.resultCount() > 0) { } else if (future.resultCount() > 0) {
if constexpr (std::is_member_function_pointer_v<Function>) { if constexpr (std::is_member_function_pointer_v<Function>) {
(self->*fun)(watcher->result()); (self->*fun)(watcher->result());
} else { } else {
Q_UNUSED(self);
fun(watcher->result()); fun(watcher->result());
} }
} }
@@ -75,12 +79,13 @@ void connectFuture(const QFuture<T> &future, QObjectDerivedType *self, const Fun
/// Applies a function to a the contained value of a QFuture once it finishes. /// Applies a function to a the contained value of a QFuture once it finishes.
/// @returns a QFuture that finishes once the future given as first argument finished /// @returns a QFuture that finishes once the future given as first argument finished
/// ///
template <typename T, typename U, typename Func> template <typename T, typename Func>
QFuture<U> mapFuture(const QFuture<T> &future, Func mapFunction) { QFuture<std::invoke_result_t<Func, T>> mapFuture(const QFuture<T> &future, Func mapFunction) {
using ReturnType = std::invoke_result_t<Func, T>;
auto watcher = std::make_shared<QFutureWatcher<T>>(); auto watcher = std::make_shared<QFutureWatcher<T>>();
watcher->setFuture(future); watcher->setFuture(future);
auto interface = std::make_shared<QFutureInterface<U>>(); auto interface = std::make_shared<QFutureInterface<ReturnType>>();
QObject::connect(watcher.get(), &QFutureWatcherBase::finished, watcher.get(), [interface, watcher, mapFunction] { QObject::connect(watcher.get(), &QFutureWatcherBase::finished, watcher.get(), [interface, watcher, mapFunction] {
auto result = watcher->result(); auto result = watcher->result();
auto mapped = mapFunction(std::move(result)); auto mapped = mapFunction(std::move(result));
@@ -116,6 +121,8 @@ public:
QFuture<watch::Playlist> fetchWatchPlaylist(const std::optional<QString> &videoId = std::nullopt , QFuture<watch::Playlist> fetchWatchPlaylist(const std::optional<QString> &videoId = std::nullopt ,
const std::optional<QString> &playlistId = std::nullopt); const std::optional<QString> &playlistId = std::nullopt);
QFuture<Lyrics> fetchLyrics(const QString &browseId);
Q_SIGNAL void errorOccurred(const QString &error); Q_SIGNAL void errorOccurred(const QString &error);
protected: protected:
@@ -123,8 +130,9 @@ protected:
private: private:
/// Invokes the given function on the thread of the YTMusic object, and handles exceptions that occur while invoking it. /// Invokes the given function on the thread of the YTMusic object, and handles exceptions that occur while invoking it.
template <typename ReturnType> template <typename Func>
QFuture<ReturnType> invokeAndCatchOnThread(const std::function<ReturnType()> &fun) { QFuture<std::invoke_result_t<Func>> invokeAndCatchOnThread(Func fun) {
using ReturnType = std::invoke_result_t<Func>;
auto interface = std::make_shared<QFutureInterface<ReturnType>>(); auto interface = std::make_shared<QFutureInterface<ReturnType>>();
QMetaObject::invokeMethod(this, [=, this]() { QMetaObject::invokeMethod(this, [=, this]() {
try { try {
@@ -154,5 +162,5 @@ public:
private: private:
YTMusicThread(); YTMusicThread();
AsyncYTMusic m_ytm; AsyncYTMusic *m_ytm;
}; };
+32
View File
@@ -0,0 +1,32 @@
/*
* SPDX-FileCopyrightText: 2020-2021 Devin Lin <[email protected]>
*
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
#include "blur.h"
#include <KWindowEffects>
#include <QQuickWindow>
#include <QQuickItem>
Blur::Blur(QObject *parent): QObject(parent)
{
}
void Blur::setBlur(QQuickItem *item, bool blur)
{
auto setWindows = [item, blur]() {
auto reg = QRect(QPoint(0, 0), item->window()->size());
KWindowEffects::enableBackgroundContrast(item->window(), blur, 1, 1, 1, reg);
KWindowEffects::enableBlurBehind(item->window(), blur, reg);
};
disconnect(item->window(), &QQuickWindow::heightChanged, this, nullptr);
disconnect(item->window(), &QQuickWindow::widthChanged, this, nullptr);
connect(item->window(), &QQuickWindow::heightChanged, this, setWindows);
connect(item->window(), &QQuickWindow::widthChanged, this, setWindows);
setWindows();
}
+20
View File
@@ -0,0 +1,20 @@
/*
* SPDX-FileCopyrightText: 2020-2021 Devin Lin <[email protected]>
*
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
#pragma once
#include <QObject>
class QQuickItem;
class Blur : public QObject
{
Q_OBJECT
public:
Blur(QObject *parent = 0);
Q_INVOKABLE void setBlur(QQuickItem *item, bool blur);
};
+46 -24
View File
@@ -13,39 +13,66 @@ Kirigami.ScrollablePage {
property alias browseId: albumModel.browseId property alias browseId: albumModel.browseId
title: albumModel.title title: albumModel.title
actions {
main: Kirigami.Action {
icon.name: "media-playback-start"
text: i18n("Play")
onTriggered: {
applicationWindow().playPlaylist(albumModel.playlistId)
}
}
}
ListView { ListView {
header: Kirigami.ItemViewHeader { id: songList
backgroundImage.source: albumModel.thumbnailUrl header: ListHeader {
visibleActions: [
Kirigami.Action {
icon.name: "media-playback-start"
text: i18n("Play")
onTriggered: {
applicationWindow().playPlaylist(albumModel.playlistId)
}
},
Kirigami.Action {
icon.name: "media-playlist-shuffle"
text: i18n("Shuffle")
onTriggered: {
applicationWindow().playShufflePlaylist(albumModel.playlistId)
}
}
]
overflowActions: [
Kirigami.Action {
text: i18n("Open in Browser")
icon.name: "internet-services"
onTriggered: Qt.openUrlExternally(albumModel.webUrl)
}
]
title: albumModel.title title: albumModel.title
imageSourceURL: albumModel.thumbnailUrl
subtitle: i18n("Album • %1" , albumModel.artists)
width: songList.width
} }
reuseItems: true reuseItems: true
model: AlbumModel { model: AlbumModel {
id: albumModel id: albumModel
} }
SongMenu {
id: menu
}
delegate: Kirigami.SwipeListItem { delegate: Kirigami.SwipeListItem {
id: delegateItem id: delegateItem
alwaysVisibleActions:true
required property string title required property string title
required property string videoId required property string videoId
required property var artists required property var artists
required property string thumbnailUrl
required property string artistsDisplayString
required property int index
RowLayout { RowLayout {
Layout.fillHeight: true Layout.fillHeight: true
Kirigami.Icon { Controls.Label {
Layout.fillHeight: true text: (index + 1)
source: "emblem-music-symbolic" font.bold: true
leftPadding: 5
color: Kirigami.Theme.disabledTextColor
Layout.preferredWidth: 30
} }
Controls.Label { Controls.Label {
@@ -57,18 +84,13 @@ Kirigami.ScrollablePage {
actions: [ actions: [
Kirigami.Action { Kirigami.Action {
icon.name: "go-next" icon.name: "view-more-horizontal-symbolic"
text: i18n("Play Next") text: i18n("More")
onTriggered: UserPlaylistModel.playNext(delegateItem.videoId, delegateItem.title, delegateItem.artists) onTriggered: menu.openForSong(delegateItem.videoId, delegateItem.title, delegateItem.artists, delegateItem.artistsDisplayString)
},
Kirigami.Action {
icon.name: "media-playlist-append"
text: i18n("Add to Playlist")
onTriggered: UserPlaylistModel.append(delegateItem.videoId, delegateItem.title, delegateItem.artists)
} }
] ]
onClicked: play(videoId) onClicked: play(delegateItem.videoId)
} }
Controls.BusyIndicator { Controls.BusyIndicator {
+46 -27
View File
@@ -11,13 +11,42 @@ import org.kde.ytmusic 1.0
Kirigami.ScrollablePage { Kirigami.ScrollablePage {
property alias channelId: artistModel.channelId property alias channelId: artistModel.channelId
property string radioId
property string shuffleId
title: artistModel.title title: artistModel.title
SongMenu {
id: menu
}
ListView { ListView {
header: Kirigami.ItemViewHeader { id: songList
backgroundImage.source: artistModel.thumbnailUrl
header: ListHeader {
visibleActions: [
Kirigami.Action {
text: i18n("Radio")
icon.name: "radio"
onTriggered: playPlaylist(radioId)
},
Kirigami.Action {
text: i18n("Shuffle")
icon.name: "media-playlist-shuffle"
onTriggered: playPlaylist(shuffleId)
}
]
overflowActions: [
Kirigami.Action {
text: i18n("Open in Browser")
icon.name: "internet-services"
onTriggered: Qt.openUrlExternally(artistModel.webUrl)
}
]
title: artistModel.title title: artistModel.title
imageSourceURL: artistModel.thumbnailUrl
subtitle: i18n("Artist")
rounded: true
width: songList.width
} }
reuseItems: true reuseItems: true
@@ -38,15 +67,16 @@ Kirigami.ScrollablePage {
onOpenVideo: (videoId, title) => { onOpenVideo: (videoId, title) => {
videoPlayMessage.text = i18n("Video playback is not supported yet. Do you want to play only the audio of \"%1\"?", title) videoPlayMessage.text = i18n("Video playback is not supported yet. Do you want to play only the audio of \"%1\"?", title)
videoPlayMessage.visible = true videoPlayMessage.visible = true
videoPlayMessage.okAction = function() { videoPlayMessage.okAction = () => {
play(videoId) play(videoId)
videoPlayMessage.visible = false videoPlayMessage.visible = false
} }
videoPlayMessage.cancelAction = function() { videoPlayMessage.cancelAction = () => {
videoPlayMessage.visible = false videoPlayMessage.visible = false
} }
} }
} }
section.property: "type" section.property: "type"
section.delegate: Kirigami.ListSectionHeader { section.delegate: Kirigami.ListSectionHeader {
text: { text: {
@@ -62,30 +92,25 @@ Kirigami.ScrollablePage {
} }
} }
} }
delegate: Kirigami.SwipeListItem { delegate: Kirigami.SwipeListItem {
id: delegateItem id: delegateItem
alwaysVisibleActions:true
required property string title required property string title
required property int type required property int type
required property int index required property int index
required property var artists required property var artists
required property string videoId required property string videoId
required property string thumbnailUrl
RowLayout { RowLayout {
Layout.fillHeight: true Layout.fillHeight: true
Kirigami.Icon { RoundedImage {
Layout.fillHeight: true source: delegateItem.thumbnailUrl
source: { height: 35
switch (type) { width: height
case ArtistModel.Album: radius:5
return "media-album-cover"
case ArtistModel.Single:
case ArtistModel.Song:
return "emblem-music-symbolic"
case ArtistModel.Video:
return "emblem-videos-symbolic"
}
}
} }
Controls.Label { Controls.Label {
@@ -97,16 +122,10 @@ Kirigami.ScrollablePage {
actions: [ actions: [
Kirigami.Action { Kirigami.Action {
icon.name: "go-next" icon.name: "view-more-horizontal-symbolic"
text: i18n("Play Next") text: i18n("More")
visible: type === ArtistModel.Song visible: type === ArtistModel.Song
onTriggered: UserPlaylistModel.playNext(delegateItem.videoId, delegateItem.title, delegateItem.artists) onTriggered: menu.openForSong(delegateItem.videoId, delegateItem.title, delegateItem.artists, artistModel.title)
},
Kirigami.Action {
icon.name: "media-playlist-append"
text: i18n("Add to Playlist")
visible: type === ArtistModel.Song
onTriggered: UserPlaylistModel.append(delegateItem.videoId, delegateItem.title, delegateItem.artists)
} }
] ]
+318 -39
View File
@@ -10,98 +10,377 @@ import org.kde.kirigami 2.14 as Kirigami
import org.kde.ytmusic 1.0 import org.kde.ytmusic 1.0
Kirigami.ScrollablePage { Kirigami.ScrollablePage {
objectName: "libraryPage"
Kirigami.Theme.colorSet: Kirigami.Theme.View
title: "AudioTube"
rightPadding: 0
leftPadding: 0
SongMenu {
id: menu
}
ColumnLayout { ColumnLayout {
Kirigami.Heading { RowLayout {
text: i18n("Favourites") Layout.fillWidth: true
Kirigami.Heading {
text: i18n("Favourites")
Layout.alignment: Qt.AlignLeft
leftPadding: 15
}
// Spacer
Item {
Layout.fillWidth: true
}
Controls.ToolButton {
text: i18n("Show All")
Layout.alignment: Qt.AlignRight
icon.name: "arrow-right"
onClicked: {pageStack.push("qrc:/PlaybackHistory.qml", {
"dataModel": Library.favourites,
"title": i18n("Favourites"),
"objectName": "favourites"
})}
}
} }
Controls.ScrollView { Controls.ScrollView {
leftPadding: 15
rightPadding: 25
Layout.fillWidth: true Layout.fillWidth: true
RowLayout { RowLayout {
spacing: 20
Repeater { Repeater {
Layout.fillWidth: true Layout.fillWidth: true
model: Library.favourites model: Library.favourites
delegate: ColumnLayout { delegate: ColumnLayout {
id: delegateItem id: delegateItem
required property string title required property string title
required property string artist required property var artists
required property string artistsDisplayString
required property string videoId required property string videoId
required property int index
Layout.fillWidth: false Layout.fillWidth: false
Layout.maximumWidth: 200 Layout.maximumWidth: 200
Kirigami.Card {
id: card
Layout.preferredHeight: 200
onClicked: play(delegateItem.videoId) Kirigami.ShadowedRectangle {
color: Kirigami.Theme.backgroundColor
id: favCover
MouseArea {
id: favArea
anchors.fill: parent
onClicked: play(delegateItem.videoId)
hoverEnabled: !Kirigami.Settings.hasTransientTouchInput
onEntered: {
if (!Kirigami.Settings.hasTransientTouchInput){
favSelected.visible = true
favTitle.color = Kirigami.Theme.hoverColor
favSubtitle.color = Kirigami.Theme.hoverColor
favTitle.font.bold = true
playAnimationPosition.running = true
playAnimationOpacity.running = true
}
}
onExited:{
favSelected.visible = false
favTitle.color = Kirigami.Theme.textColor
favSubtitle.color = Kirigami.Theme.disabledTextColor
favTitle.font.bold = false
}
}
Layout.margins: 5
width: 200
height: 200
radius: 10
shadow.size: 15
shadow.xOffset: 5
shadow.yOffset: 5
shadow.color: Qt.rgba(0, 0, 0, 0.2)
ThumbnailSource { ThumbnailSource {
id: thumbnailSource id: thumbnailSource
videoId: delegateItem.videoId videoId: delegateItem.videoId
} }
RoundedImage {
header: Image {
sourceSize: "200x200"
source: thumbnailSource.cachedPath source: thumbnailSource.cachedPath
fillMode: Image.PreserveAspectCrop height: 200
asynchronous: true width: height
radius: 10
}
Rectangle {
id: favSelected
Rectangle {
anchors.fill: parent
color: Kirigami.Theme.hoverColor
radius: 10
opacity: 0.2
}
Item{
height: parent.height
width: parent.width
NumberAnimation on opacity{
id: playAnimationOpacity
easing.type: Easing.OutCubic
running: false
from: 0; to: 1
}
NumberAnimation on y {
id: playAnimationPosition
easing.type: Easing.OutCubic
running: false
from: 20; to: 0
duration: 100
}
Rectangle {
height: 45
width: 45
radius: 50
color: Kirigami.Theme.hoverColor
opacity: 0.8
anchors.centerIn: parent
}
Kirigami.Icon {
x: 100 - 0.43 * height
y: 100 - 0.5 * height
color: "white"
source: "media-playback-start"
}
}
visible: false
anchors.fill: parent
radius: 9
border.color: Kirigami.Theme.hoverColor
border.width: 2
color: "transparent"
}
}
RowLayout {
ColumnLayout {
Controls.Label {
id:favTitle
text: delegateItem.title
Layout.maximumWidth: 200
Layout.fillWidth: true
leftPadding: 5
elide: Text.ElideRight
}
Controls.Label {
id: favSubtitle
Layout.fillWidth: true
Layout.maximumWidth: 200
leftPadding: 5
color: Kirigami.Theme.disabledTextColor
text: delegateItem.artistsDisplayString
elide: Text.ElideRight
}
}
Controls.ToolButton {
Layout.fillHeight: true
icon.name: "view-more-horizontal-symbolic"
onPressed: menu.openForSong(delegateItem.videoId,
delegateItem.title,
delegateItem.artists,
delegateItem.artistsDisplayString)
} }
actions: [
Kirigami.Action {
icon.name: "delete"
onTriggered: Library.removeFavourite(delegateItem.videoId)
}
]
} }
Controls.Label { Item {
Layout.maximumWidth: 200 height: 5
text: delegateItem.title
elide: Qt.ElideRight
} }
} }
} }
} }
} }
Kirigami.Heading { Item {
text: i18n("Most played") height: 20
}
RowLayout {
Layout.fillWidth: true
Kirigami.Heading {
text: i18n("Most played")
Layout.alignment: Qt.AlignLeft
leftPadding: 15
}
// Spacer
Item {
Layout.fillWidth: true
}
Controls.ToolButton {
text: i18n("Show All")
Layout.alignment: Qt.AlignRight
icon.name: "arrow-right"
onClicked: {pageStack.push("qrc:/PlaybackHistory.qml", {
"dataModel": Library.playbackHistory,
"title": i18n("played Songs"),
"objectName": "history"
})}
}
} }
Controls.ScrollView { Controls.ScrollView {
leftPadding: 15
rightPadding: 25
Layout.fillWidth: true Layout.fillWidth: true
RowLayout { RowLayout {
spacing: 20
Repeater { Repeater {
Layout.fillWidth: true Layout.fillWidth: true
model: Library.mostPlayed model: Library.mostPlayed
delegate: ColumnLayout { delegate: ColumnLayout {
id: mpdelegateItem id: mpdelegateItem
required property string title required property string title
required property string artist required property var artists
required property string artistsDisplayString
required property string videoId required property string videoId
Layout.fillWidth: false Layout.fillWidth: false
Layout.maximumWidth: 200 Layout.maximumWidth: 200
Kirigami.Card {
id: mpcard
Layout.preferredHeight: 200
onClicked: play(mpdelegateItem.videoId) Kirigami.ShadowedRectangle {
color: Kirigami.Theme.backgroundColor
id: recCover
MouseArea {
id: recArea
anchors.fill: parent
onClicked: play(mpdelegateItem.videoId)
hoverEnabled: !Kirigami.Settings.hasTransientTouchInput
onEntered: {
if (!Kirigami.Settings.hasTransientTouchInput)
recSelected.visible = true
recTitle.color = Kirigami.Theme.hoverColor
recSubtitle.color = Kirigami.Theme.hoverColor
recTitle.font.bold = true
playAnimationPositionRec.running = true
playAnimationOpacityRec.running = true
}
onExited:{
recSelected.visible = false
recTitle.color = Kirigami.Theme.textColor
recSubtitle.color = Kirigami.Theme.disabledTextColor
recTitle.font.bold = false
}
}
Layout.margins: 5
width: 200
height: 200
radius: 10
shadow.size: 15
shadow.xOffset: 5
shadow.yOffset: 5
shadow.color: Qt.rgba(0, 0, 0, 0.2)
ThumbnailSource { ThumbnailSource {
id: mpthumbnailSource id: mpthumbnailSource
videoId: mpdelegateItem.videoId videoId: mpdelegateItem.videoId
} }
RoundedImage {
header: Image {
sourceSize: "200x200"
source: mpthumbnailSource.cachedPath source: mpthumbnailSource.cachedPath
fillMode: Image.PreserveAspectCrop height: 200
asynchronous: true width: height
radius: 10
}
Rectangle {
id: recSelected
Rectangle {
anchors.fill: parent
color: Kirigami.Theme.hoverColor
radius: 10
opacity: 0.2
}
Item{
height: parent.height
width: parent.width
NumberAnimation on opacity{
id: playAnimationOpacityRec
easing.type: Easing.OutCubic
running: false
from: 0; to: 1
}
NumberAnimation on y {
id: playAnimationPositionRec
easing.type: Easing.OutCubic
running: false
from: 20; to: 0
duration: 100
}
Rectangle {
height: 45
width: 45
radius: 50
color: Kirigami.Theme.hoverColor
opacity: 0.8
anchors.centerIn: parent
}
Kirigami.Icon {
x: 100 - 0.43 * height
y: 100 - 0.5 * height
color: "white"
source: "media-playback-start"
}
}
visible: false
anchors.fill: parent
radius: 9
border.color: Kirigami.Theme.hoverColor
border.width: 2
color: "transparent"
} }
} }
Controls.Label { RowLayout {
Layout.maximumWidth: 200 ColumnLayout {
text: mpdelegateItem.title Controls.Label {
elide: Qt.ElideRight id: recTitle
text: mpdelegateItem.title
Layout.maximumWidth: 200
Layout.fillWidth: true
leftPadding: 5
elide: Text.ElideRight
}
Controls.Label {
id: recSubtitle
Layout.fillWidth: true
Layout.maximumWidth: 200
leftPadding: 5
color: Kirigami.Theme.disabledTextColor
text: mpdelegateItem.artistsDisplayString
elide: Text.ElideRight
}
}
Controls.ToolButton {
Layout.fillHeight: true
icon.name: "view-more-horizontal-symbolic"
onPressed: menu.openForSong(mpdelegateItem.videoId,
mpdelegateItem.title,
mpdelegateItem.artists,
mpdelegateItem.artistsDisplayString)
}
}
Item {
height: 5
} }
} }
} }
+143
View File
@@ -0,0 +1,143 @@
// 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 QtQuick 2.15
import org.kde.kirigami 2.14 as Kirigami
import QtQuick.Controls 2.14 as Controls
import QtQuick.Layouts 1.3
import QtGraphicalEffects 1.0
import org.kde.ytmusic 1.0
Item {
id:root
required property string imageSourceURL
property bool rounded : false
required property string title
property string subtitle
property list<Kirigami.Action> visibleActions
property list<Kirigami.Action> overflowActions
height: root.width > 500 ? 200 : 400
Item {
anchors.fill: parent
Image {
scale: 1.8
anchors.fill: parent
asynchronous: true
source: imageSourceURL
fillMode: Image.PreserveAspectCrop
sourceSize.width: 512
sourceSize.height: 512
}
layer.enabled: true
layer.effect: HueSaturation {
cached: true
saturation: 1.9
layer.enabled: true
layer.effect: FastBlur {
cached: true
radius: 100
}
}
}
Rectangle {
anchors.fill: parent
gradient: Gradient{
GradientStop { position: -1.0; color: "transparent" }
GradientStop { position: 1.0; color: Kirigami.Theme.backgroundColor }
}
}
GridLayout {
width: parent.width
flow: root.width > 500?GridLayout.LeftToRight:GridLayout.TopToBottom
Kirigami.ShadowedRectangle {
color: Kirigami.Theme.backgroundColor
Layout.margins: 30
width: 150
height: width
radius: rounded ? 100 : 10
shadow.size: 15
shadow.xOffset: 5
shadow.yOffset: 5
shadow.color: Qt.rgba(0, 0, 0, 0.2)
RoundedImage {
source: imageSourceURL
height: parent.height
width: height
radius: rounded ? 100 : 10
}
}
ColumnLayout {
Layout.leftMargin: 30
Layout.fillWidth: true
Controls.Label {
Layout.fillWidth: true
text: title
font.bold: true
font.pixelSize: 22
elide: Qt.ElideRight
}
Controls.Label {
Layout.fillWidth: true
text: subtitle
elide: Qt.ElideRight
}
RowLayout {
visible: root.visibleActions.length>0
Layout.topMargin: 30
Layout.rightMargin: 30
Repeater {
model: root.visibleActions
delegate: Controls.RoundButton{
required property var modelData
Layout.fillWidth: root.width <= 500
leftPadding: 20
rightPadding: 20
icon.name: modelData.icon.name
text:modelData.text
onClicked: modelData.triggered()
}
}
Controls.Menu {
id: overflowMenu
Instantiator {
model: root.overflowActions
onObjectAdded: overflowMenu.insertItem(index, object)
onObjectRemoved: overflowMenu.removeItem(object)
delegate: Controls.MenuItem {
required property var modelData
icon.name: modelData.icon.name
text:modelData.text
onTriggered: modelData.triggered()
}
}
}
Controls.RoundButton {
onClicked: overflowMenu.popup()
visible: root.overflowActions.length > 0
icon.name: "overflow-menu"
}
}
}
}
}
File diff suppressed because it is too large. Load diff
+168 -84
View File
@@ -14,6 +14,7 @@ import org.kde.ytmusic 1.0
Item { Item {
id: root id: root
z: 2000
required property int progressBarHeight required property int progressBarHeight
required property int minimizedPlayerContentHeight required property int minimizedPlayerContentHeight
@@ -21,14 +22,12 @@ Item {
required property var info // VideoInfoExtractor object required property var info // VideoInfoExtractor object
required property var audio // Audio object required property var audio // Audio object
readonly property bool isWidescreen: width >= Kirigami.Units.gridUnit * 40 readonly property bool isWidescreen: width >= Kirigami.Units.gridUnit * 50
signal requestOpen() signal requestOpen()
Rectangle { Rectangle {
id: miniProgressBar id: miniProgressBar
z: 1 z: 1
visible: !root.isWidescreen
anchors.top: parent.top anchors.top: parent.top
anchors.left: parent.left anchors.left: parent.left
height: root.progressBarHeight height: root.progressBarHeight
@@ -37,14 +36,14 @@ Item {
} }
RowLayout { RowLayout {
width: !isWidescreen? root.width- controlButtonBox.width: root.width
anchors.fill: parent anchors.fill: parent
spacing: 0 spacing: 0
Rectangle { Rectangle {
Layout.fillHeight: true Layout.fillHeight: true
Layout.fillWidth: 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) color: Qt.rgba(0, 0, 0, trackClick.containsMouse ? 0.1 : trackClick.pressed ? 0.3 : 0)
RowLayout { RowLayout {
@@ -62,22 +61,27 @@ Item {
Layout.maximumHeight: imageSize Layout.maximumHeight: imageSize
Layout.minimumHeight: imageSize Layout.minimumHeight: imageSize
Image { RoundedImage {
id: mainIcon id: mainIcon
anchors.fill: parent anchors.fill: parent
asynchronous: true visible: !loadingIndicator.visible
mipmap: true
source: info.thumbnail source: info.thumbnail
radius: 5
sourceSize.width: 512
sourceSize.height: 512
fillMode: Image.PreserveAspectCrop
} }
BusyIndicator {
id: loadingIndicator
anchors.centerIn: parent
visible: UserPlaylistModel.loading
Kirigami.Theme.colorSet: Kirigami.Theme.Complementary
Kirigami.Theme.inherit: false
}
} }
// track information // track information
ColumnLayout { ColumnLayout {
Layout.fillWidth: true Layout.fillWidth: true
Layout.fillHeight: true Layout.fillHeight: true
@@ -88,6 +92,7 @@ Item {
wrapMode: Text.Wrap wrapMode: Text.Wrap
Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft
Layout.fillWidth: true Layout.fillWidth: true
Layout.maximumWidth: Kirigami.Units.gridUnit * 15
horizontalAlignment: Text.AlignLeft horizontalAlignment: Text.AlignLeft
elide: Text.ElideRight elide: Text.ElideRight
maximumLineCount: 1 maximumLineCount: 1
@@ -108,14 +113,16 @@ Item {
horizontalAlignment: Text.AlignLeft horizontalAlignment: Text.AlignLeft
elide: Text.ElideRight elide: Text.ElideRight
maximumLineCount: 1 maximumLineCount: 1
Layout.maximumWidth: Kirigami.Units.gridUnit * 15
// Hardcoded because the footerbar blur always makes a dark-ish // Hardcoded because the footerbar blur always makes a dark-ish
// background, so we don't want to use a color scheme color that // background, so we don't want to use a color scheme color that
// might also be dark // might also be dark
color: "white" color: "white"
} }
} }
Item{Layout.fillWidth: true}
} }
MouseArea { MouseArea {
id: trackClick id: trackClick
anchors.fill: parent anchors.fill: parent
@@ -123,85 +130,162 @@ Item {
onClicked: root.requestOpen() onClicked: root.requestOpen()
} }
} }
}
RowLayout {
visible: root.isWidescreen
Layout.preferredWidth: 0
Layout.fillHeight: true
Layout.fillWidth: true
Layout.leftMargin: Kirigami.Units.largeSpacing
Layout.rightMargin: Kirigami.Units.largeSpacing
spacing: Kirigami.Units.smallSpacing
Label {
Layout.alignment: Qt.AlignVCenter
color: "white"
visible: info.title
text: PlayerUtils.formatTimestamp(audio.position)
}
Slider { RowLayout {
Layout.alignment: Qt.AlignVCenter id: controlButtonBox
Layout.fillWidth: true anchors.centerIn: isWidescreen? root:null
from: 0 anchors.right: !isWidescreen? root.right:null
to: audio.duration Layout.fillHeight: true
value: audio.position spacing: 2
enabled: audio.seekable
onMoved: {
console.log("Value:", value);
audio.seek(Math.floor(value));
}
Behavior on value { Label {
NumberAnimation { color: "white"
duration: 1000 visible: info.title && root.isWidescreen
} text: PlayerUtils.formatTimestamp(audio.position)
} Layout.rightMargin: 20
}
Label {
Layout.alignment: Qt.AlignVCenter
color: "white"
visible: info.title
text: PlayerUtils.formatTimestamp(audio.duration)
}
} }
Button {
ToolButton { id: skipBackwardButton
id: playPauseButton height: 40
Layout.preferredHeight: Kirigami.Units.gridUnit * 3 width: 40
Layout.maximumWidth: height
Layout.preferredWidth: height
enabled: info.audioUrl != ""
onClicked: audio.playbackState === Audio.PlayingState ? audio.pause() : audio.play()
icon.name: audio.playbackState === Audio.PlayingState ? "media-playback-pause" : "media-playback-start"
icon.width: Kirigami.Units.gridUnit
icon.height: Kirigami.Units.gridUnit
icon.color: "white"
Kirigami.Theme.colorSet: Kirigami.Theme.Complementary Kirigami.Theme.colorSet: Kirigami.Theme.Complementary
Kirigami.Theme.inherit: false 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: 7
corners.bottomLeftRadius: 7
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"
}
}
}
} }
ToolButton { Button {
id: playPauseButton
height: 40
width: 60
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 id: skipForwardButton
Layout.rightMargin: Math.floor(Kirigami.Units.smallSpacing / 2) height: 40
Layout.preferredHeight: Kirigami.Units.gridUnit * 3 width: 40
Layout.maximumWidth: height Layout.rightMargin:isWidescreen?0:10
Layout.preferredWidth: height
Kirigami.Theme.colorSet: Kirigami.Theme.Complementary
Kirigami.Theme.inherit: false
enabled: UserPlaylistModel.canSkip enabled: UserPlaylistModel.canSkip
onClicked: UserPlaylistModel.next() onClicked: UserPlaylistModel.next()
contentItem: Item{
icon.name: "media-skip-forward" Kirigami.Icon {
icon.width: Kirigami.Units.gridUnit anchors.centerIn:parent
icon.height: Kirigami.Units.gridUnit source:"media-skip-forward"
icon.color: "white" color: "white"
width: Kirigami.Units.gridUnit
Kirigami.Theme.colorSet: Kirigami.Theme.Complementary height: Kirigami.Units.gridUnit
Kirigami.Theme.inherit: false
}
}
background: Kirigami.ShadowedRectangle{
corners.topRightRadius: 7
corners.bottomRightRadius: 7
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
} }
} }
} }
+70
View File
@@ -0,0 +1,70 @@
// 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 QtQuick 2.12
import QtQuick.Controls 2.4
import QtQuick.Layouts 1.2
import org.kde.kirigami 2.20 as Kirigami
import org.kde.ytmusic 1.0
Kirigami.NavigationTabBar {
id: root
anchors.bottom: parent.bottom
width:parent.width
backgroundColor: "transparent"
foregroundColor: "white"
highlightForegroundColor: "white"
shadow: false
actions: [
Kirigami.Action {
iconName: "file-library-symbolic"
text: i18n("Library")
checked: pageStack.currentItem && pageStack.currentItem.objectName == "libraryPage"
onTriggered: {
pageStack.replace("qrc:/LibraryPage.qml")
applicationWindow().showSearch = false
}
},
Kirigami.Action {
iconName: "search"
text: i18n("Search")
checked: pageStack.currentItem && pageStack.currentItem.objectName == "searchPage"
onTriggered: {
pageStack.replace("qrc:/SearchHistoryPage.qml",)
applicationWindow().showSearch = true
applicationWindow().searchField.forceActiveFocus();
}
},
Kirigami.Action {
iconName: "non-starred-symbolic"
text: i18n("Favourites")
checked: pageStack.currentItem && pageStack.currentItem.objectName == "favourites"
onTriggered: {
pageStack.replace("qrc:/PlaybackHistory.qml", {
"dataModel": Library.favourites,
"title": i18n("Favourites"),
"objectName": "favourites"})
applicationWindow().showSearch = false
}
},
Kirigami.Action {
iconName: "edit-undo-history"
text: i18n("Played Songs")
checked: pageStack.currentItem && pageStack.currentItem.objectName == "history"
onTriggered: {
pageStack.replace("qrc:/PlaybackHistory.qml", {
"dataModel": Library.playbackHistory,
"title": i18n("Played Songs"),
"objectName": "history"})
applicationWindow().showSearch = false
}
}
]
}
+86
View File
@@ -0,0 +1,86 @@
// SPDX-FileCopyrightText: 2022 Jonah Brüchert <[email protected]>
//
// SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Controls 2.15 as Controls
import org.kde.kirigami 2.15 as Kirigami
import org.kde.ytmusic 1.0
Kirigami.ScrollablePage {
id: playbackHistoryPage
title: i18n("Unknown list of songs")
property QtObject dataModel
SongMenu {
id:menu
}
ListView {
id: listView
reuseItems: true
Kirigami.PlaceholderMessage {
visible: listView.count < 1
text: i18n("No songs here yet")
anchors.centerIn: parent
}
model: playbackHistoryPage.dataModel
delegate: Kirigami.SwipeListItem {
id: delegateItem
alwaysVisibleActions:true
required property string title
required property string videoId
required property var artists
required property string artistsDisplayString
required property int index
onClicked: {
play(videoId)
}
RowLayout {
ThumbnailSource {
id: thumbnailSource
videoId: delegateItem.videoId
}
RoundedImage {
source: thumbnailSource.cachedPath
height: 35
width: height
radius: 5
}
ColumnLayout {
Controls.Label {
text: delegateItem.title
Layout.fillWidth: true
elide: Qt.ElideRight
}
Controls.Label {
Layout.fillWidth: true
color: Kirigami.Theme.disabledTextColor
text: delegateItem.artistsDisplayString
elide: Qt.ElideRight
}
}
}
actions: [
Kirigami.Action {
icon.name: "view-more-horizontal-symbolic"
text: i18n("More")
onTriggered: menu.openForSong(delegateItem.videoId, delegateItem.title, delegateItem.artists, delegateItem.artistsDisplayString)
}
]
}
}
}
+16 -232
View File
@@ -17,9 +17,10 @@ import org.kde.ytmusic 1.0
Flickable { Flickable {
id: footerItem id: footerItem
property int footerSpacing:0
property bool maximized: false property bool maximized: false
readonly property int progressBarHeight: Kirigami.Units.gridUnit / 6 readonly property int progressBarHeight: Kirigami.Units.gridUnit / 4
readonly property int minimizedPlayerContentHeight: Math.round(Kirigami.Units.gridUnit * 3.5) readonly property int minimizedPlayerContentHeight: Math.round(Kirigami.Units.gridUnit * 3.5)
readonly property int minimizedPlayerHeight: minimizedPlayerContentHeight + progressBarHeight readonly property int minimizedPlayerHeight: minimizedPlayerContentHeight + progressBarHeight
@@ -96,7 +97,14 @@ Flickable {
onSongChanged: audio.play() onSongChanged: audio.play()
videoId: UserPlaylistModel.currentVideoId videoId: UserPlaylistModel.currentVideoId
onTitleChanged: Library.addPlaybackHistoryItem(info.videoId, info.title) onTitleChanged: {
let index = UserPlaylistModel.index(UserPlaylistModel.currentIndex, 0)
let videoId = UserPlaylistModel.data(index, UserPlaylistModel.VideoId)
let title = UserPlaylistModel.data(index, UserPlaylistModel.Title)
let artist = UserPlaylistModel.data(index, UserPlaylistModel.Artists)
let album = UserPlaylistModel.data(index, UserPlaylistModel.Album)
Library.addPlaybackHistoryItem(videoId, title, artist, album)
}
} }
property var audioPlayer: Audio { property var audioPlayer: Audio {
@@ -115,7 +123,7 @@ Flickable {
ColumnLayout { ColumnLayout {
id: footerLayout id: footerLayout
y:-footerSpacing
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
spacing: 0 spacing: 0
@@ -128,7 +136,7 @@ Flickable {
Controls.Control { Controls.Control {
Layout.fillWidth: true Layout.fillWidth: true
padding: 0 padding: 0
implicitHeight: footerItem.minimizedPlayerHeight implicitHeight: footerItem.minimizedPlayerHeight+footerSpacing
// minimized player background // minimized player background
background: Item { background: Item {
@@ -150,8 +158,8 @@ Flickable {
layer.effect: HueSaturation { layer.effect: HueSaturation {
cached: true cached: true
lightness: -0.5 lightness: -0.7
saturation: 1.9 saturation: 3
layer.enabled: true layer.enabled: true
layer.effect: FastBlur { layer.effect: FastBlur {
@@ -178,7 +186,7 @@ Flickable {
onRequestOpen: toOpen.start(); onRequestOpen: toOpen.start();
} }
} }
MaximizedPlayerPage { MaximizedPlayerPage {
id: maximizedPlayerPage id: maximizedPlayerPage
Layout.fillWidth: true Layout.fillWidth: true
@@ -191,232 +199,8 @@ Flickable {
onRequestClose: toClose.start(); onRequestClose: toClose.start();
} }
//GridLayout {
//id: playerLayout
//readonly property bool mobile: width > height
//Layout.fillHeight: footerItem.maximized
//Layout.fillWidth: true
//flow: width > height ? GridLayout.LeftToRight : GridLayout.TopToBottom
//visible: footerItem.maximized
//ColumnLayout {
//Layout.preferredWidth: footerLayout.width * (playerLayout.mobile ? 1 : 0.5)
//Layout.preferredHeight: footerLayout.height * (playerLayout.mobile ? 0.5 : 1)
//Item {
//Layout.fillWidth: true
//Layout.fillHeight: true
//Image {
//anchors.fill: parent
//source: info.thumbnail
//fillMode: Image.PreserveAspectFit
//}
//}
//Controls.RoundButton {
//readonly property QtObject favouriteWatcher: Library.favouriteWatcher(info.videoId)
//Layout.alignment: Qt.AlignHCenter
//icon.name: favouriteWatcher ? (favouriteWatcher.isFavourite ? "starred-symbolic" : "non-starred-symbolic") : ""
//onClicked: if (favouriteWatcher)
//favouriteWatcher.isFavourite
//? Library.removeFavourite(info.videoId)
//: Library.addFavourite(info.videoId, info.title)
//}
//}
//Item {
//Layout.fillWidth: true
//Layout.fillHeight: true
//Layout.preferredWidth: footerLayout.width * (playerLayout.mobile ? 1 : 0.5)
//Layout.preferredHeight: footerLayout.height * (playerLayout.mobile ? 0.5 : 1)
//Controls.ScrollView {
//anchors.fill: parent
//ListView {
//anchors.fill: parent
//id: playlistView
//clip: true
//Controls.BusyIndicator {
//anchors.centerIn: parent
//visible: UserPlaylistModel.loading || UserPlaylistModel.loading
//}
//onCountChanged: {
//if (count < 1) {
//footerItem.maximized = false
//}
//}
//model: UserPlaylistModel
//delegate: Kirigami.SwipeListItem {
//id: delegateItem
//required property string title
//required property string videoId
//required property string artists
//required property bool isCurrent
//highlighted: isCurrent
//onClicked: UserPlaylistModel.skipTo(videoId)
//ColumnLayout {
//Layout.fillWidth: true
//Kirigami.Heading {
//elide: Text.ElideRight
//Layout.fillWidth: true
//level: 2
//text: title
//}
//Controls.Label {
//elide: Text.ElideRight
//Layout.fillWidth: true
//text: artists
//}
//}
//actions: [
//Kirigami.Action {
//text: i18n("Remove Track")
//icon.name: "list-remove"
//onTriggered: UserPlaylistModel.remove(delegateItem.videoId)
//}
//]
//}
//header: Controls.ToolBar {
//anchors.left: parent.left
//anchors.right: parent.right
//RowLayout {
//anchors.fill: parent
//Item {
//Layout.fillWidth: true
//}
//Controls.ToolButton {
//text: i18n("Clear")
//icon.name: "edit-clear-all"
//onClicked: UserPlaylistModel.clear()
//}
//Controls.ToolButton {
//text: i18n("Shuffle")
//icon.name: "media-playlist-shuffle"
//onClicked: UserPlaylistModel.shufflePlaylist()
//}
//}
//}
//}
//}
//}
//}
//Kirigami.Separator {
//Layout.fillWidth: true
//}
//RowLayout {
//id: player
//Layout.fillWidth: true
//Layout.fillHeight: !footer.maximized
//Controls.ToolButton {
//display: Controls.AbstractButton.IconOnly
//Layout.preferredWidth: parent.height
//Layout.fillHeight: true
//enabled: info.audioUrl != ""
//text: audio.playbackState === Audio.PlayingState ? i18n("Pause") : i18n("Play")
//visible: !info.loading
//icon.name: audio.playbackState === Audio.PlayingState ? "media-playback-pause" : "media-playback-start"
//onClicked: audio.playbackState === Audio.PlayingState ? audio.pause() : audio.play()
//}
//Controls.ToolButton {
//display: Controls.AbstractButton.IconOnly
//Layout.preferredWidth: parent.height
//Layout.fillHeight: true
//enabled: UserPlaylistModel.canSkip
//visible: !info.loading
//icon.name: "media-skip-forward"
//onClicked: UserPlaylistModel.next()
//}
//Controls.BusyIndicator {
//Layout.fillHeight: true
//visible: info.loading
//}
//ColumnLayout {
//Layout.fillHeight: true
//Layout.topMargin: Kirigami.Units.smallSpacing
//Layout.bottomMargin: Kirigami.Units.smallSpacing
//Kirigami.Heading {
//level: 3
//Layout.fillWidth: true
//elide: Qt.ElideRight
//text: info.title ? info.title : i18n("No media playing")
//}
//RowLayout{
//Controls.Label{
//visible: info.title
//text: PlayerUtils.formatTimestamp(audio.position)
//}
//Controls.Slider {
//Layout.fillWidth: true
//from: 0
//to: audio.duration
//value: audio.position
//enabled: audio.seekable
//onMoved: {
//console.log("Value:", value);
//audio.seek(Math.floor(value));
//}
//Behavior on value {
//NumberAnimation {
//duration: 1000
//}
//}
//}
//Controls.Label{
//visible: info.title
//text: PlayerUtils.formatTimestamp(audio.duration)
//}
//}
//}
//Controls.ToolButton {
//display: Controls.AbstractButton.IconOnly
//Layout.preferredWidth: parent.height
//text: i18n("Expand")
//enabled: playlistView.count > 0
//Layout.fillHeight: true
//icon.name: footerItem.maximized ? "arrow-down" : "arrow-up"
//onClicked: footerItem.maximized = !footerItem.maximized
//}
//}
} }
//Behavior on height {
//NumberAnimation {
//}
//}
} }
+52 -33
View File
@@ -13,27 +13,34 @@ Kirigami.ScrollablePage {
property alias playlistId: playlistModel.playlistId property alias playlistId: playlistModel.playlistId
title: playlistModel.title title: playlistModel.title
actions { SongMenu {
main: Kirigami.Action { id: menu
icon.name: "media-playback-start"
text: i18n("Play")
onTriggered: {
applicationWindow().playPlaylist(playlistModel.playlistId)
}
}
right: Kirigami.Action {
icon.name: "media-playlist-shuffle"
text: i18n("Shuffle")
onTriggered: {
applicationWindow().playShufflePlaylist(playlistModel.playlistId)
}
}
} }
ListView { ListView {
header: Kirigami.ItemViewHeader { id: songList
backgroundImage.source: playlistModel.thumbnailUrl
header: ListHeader {
visibleActions: [
Kirigami.Action {
icon.name: "media-playback-start"
text: i18n("Play")
onTriggered: {
applicationWindow().playPlaylist(playlistModel.playlistId)
}
},
Kirigami.Action {
icon.name: "media-playlist-shuffle"
text: i18n("Shuffle")
onTriggered: {
applicationWindow().playShufflePlaylist(playlistModel.playlistId)
}
}
]
title: playlistModel.title title: playlistModel.title
imageSourceURL: playlistModel.thumbnailUrl
width: songList.width
subtitle: i18n("Playlist")
} }
model: PlaylistModel { model: PlaylistModel {
id: playlistModel id: playlistModel
@@ -43,34 +50,46 @@ Kirigami.ScrollablePage {
delegate: Kirigami.SwipeListItem { delegate: Kirigami.SwipeListItem {
id: delegateItem id: delegateItem
alwaysVisibleActions:true
required property string title required property string title
required property string videoId required property string videoId
required property var artists required property var artists
required property string thumbnailUrl
required property string artistsDisplayString
required property int index
RowLayout { RowLayout {
Layout.fillHeight: true Layout.fillHeight: true
Kirigami.Icon { RoundedImage {
Layout.fillHeight: true source: delegateItem.thumbnailUrl
source: "emblem-music-symbolic" height: 35
width: height
radius: 5
} }
Controls.Label { ColumnLayout {
Layout.fillWidth: true Controls.Label {
text: title Layout.fillWidth: true
elide: Qt.ElideRight text: title
elide: Qt.ElideRight
}
Controls.Label {
Layout.fillWidth: true
visible: delegateItem.artistsDisplayString
color: Kirigami.Theme.disabledTextColor
text: delegateItem.artistsDisplayString
elide: Qt.ElideRight
}
} }
} }
actions: [ actions: [
Kirigami.Action { Kirigami.Action {
icon.name: "go-next" icon.name: "view-more-horizontal-symbolic"
text: i18n("Play Next") text: i18n("More")
onTriggered: UserPlaylistModel.playNext(delegateItem.videoId, delegateItem.title, delegateItem.artists) onTriggered: menu.openForSong(delegateItem.videoId, delegateItem.title, delegateItem.artists, delegateItem.artistsDisplayString)
},
Kirigami.Action {
icon.name: "media-playlist-append"
text: i18n("Add to Playlist")
onTriggered: UserPlaylistModel.append(delegateItem.videoId, delegateItem.title, delegateItem.artists)
} }
] ]
+33
View File
@@ -0,0 +1,33 @@
// 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 QtQuick 2.15
import QtQuick.Window 2.15
import QtGraphicalEffects 1.0
Item {
property alias radius: mask.radius
property alias source: image.source
id: icon
Image {
id:image
source: source
anchors.fill: parent
fillMode: Image.PreserveAspectCrop
asynchronous: true
sourceSize.width: parent.implicitWidth * Screen.devicePixelRatio
layer.enabled: true
layer.effect: OpacityMask {
maskSource: mask
}
}
Rectangle {
id: mask
anchors.fill: parent
visible: false
}
}
+93
View File
@@ -0,0 +1,93 @@
// SPDX-FileCopyrightText: 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.kirigami 2.12 as Kirigami
import QtQuick.Controls 2.15 as Controls
import QtQuick 2.15
import QtQuick.Layouts 1.15
import org.kde.ytmusic 1.0
Kirigami.ScrollablePage {
objectName: "searchPage"
topPadding: 0
bottomPadding: 0
leftPadding: 0
rightPadding: 0
Kirigami.Theme.colorSet: Kirigami.Theme.View
ColumnLayout {
Controls.ScrollView {
Layout.fillWidth: true
id: recents
visible: searchLoader.text && recentsRepeater.count > 0
leftPadding: 10
topPadding: 10
Controls.ScrollBar.horizontal.policy: Controls.ScrollBar.AlwaysOff
RowLayout {
id: recentsLayout
spacing: 10
Layout.fillWidth: true
Repeater {
id: recentsRepeater
Layout.fillWidth: true
model: SortFilterModel {
filterRole: PlaybackHistoryModel.Title
filterRegularExpression: searchLoader.filterExpression
sourceModel: Library.playbackHistory
}
delegate: Kirigami.DelegateRecycler {
Layout.alignment: Qt.AlignTop
sourceComponent: searchAlbum
}
}
}
}
Kirigami.Separator {
Layout.fillWidth: true
visible: recents.visible
}
id: completionList
Repeater {
Layout.fillHeight: true
Layout.fillWidth: true
model: SortFilterModel {
sourceModel: Library.searches
filterRegularExpression: searchLoader.filterExpression
}
delegate: Kirigami.AbstractListItem {
implicitHeight: Kirigami.Units.gridUnit * 2
Layout.fillWidth: true
RowLayout {
Kirigami.Icon {
source: "search"
implicitHeight: Kirigami.Units.gridUnit
implicitWidth: Kirigami.Units.gridUnit
color: Kirigami.Theme.disabledTextColor
}
Controls.Label {
text: model.display
Layout.fillWidth: true
}
}
onClicked: {
searchLoader.text = model.display
searchLoader.accepted()
}
}
}
}
}
+42 -54
View File
@@ -10,9 +10,10 @@ import org.kde.kirigami 2.14 as Kirigami
import org.kde.ytmusic 1.0 import org.kde.ytmusic 1.0
Kirigami.ScrollablePage { Kirigami.ScrollablePage {
id: searchPage
property alias searchQuery: searchModel.searchQuery property alias searchQuery: searchModel.searchQuery
objectName: "searchPage"
title: searchQuery title: listView.count === 0 && !searchModel.loading? i18n("Previous Searches:") : searchQuery
ListView { ListView {
reuseItems: true reuseItems: true
@@ -37,7 +38,7 @@ Kirigami.ScrollablePage {
} }
} }
section.property: "type" section.property: "type"
id: listView
model: SearchModel { model: SearchModel {
id: searchModel id: searchModel
@@ -47,9 +48,11 @@ Kirigami.ScrollablePage {
}) })
} }
onOpenArtist: (channelId) => { onOpenArtist: (channelId, radioId, shuffleId) => {
pageStack.push("qrc:/ArtistPage.qml", { pageStack.push("qrc:/ArtistPage.qml", {
"channelId": channelId "channelId": channelId,
"radioId": radioId,
"shuffleId": shuffleId
}) })
} }
@@ -75,60 +78,58 @@ Kirigami.ScrollablePage {
} }
} }
} }
SongMenu {
id: menu
}
delegate: Kirigami.SwipeListItem { delegate: Kirigami.SwipeListItem {
id: delegateItem id: delegateItem
alwaysVisibleActions:true
required property int index required property int index
required property string title required property string title
required property int type required property int type
required property string videoId required property string videoId
required property var artists required property var artists
required property string artistsDisplayString
required property string radioPlaylistId required property string radioPlaylistId
required property string thumbnailUrl
RowLayout { RowLayout {
Layout.fillHeight: true Layout.fillHeight: true
Kirigami.Icon { RoundedImage {
Layout.fillHeight: true source: delegateItem.thumbnailUrl
source: { height: 35
switch (type) { width: height
case SearchModel.Artist: radius: delegateItem.type === SearchModel.Artist?height/2:5
return "view-media-artist"
case SearchModel.Album:
return "media-album-cover"
case SearchModel.Playlist:
return "view-media-playlist"
case SearchModel.Song:
return "emblem-music-symbolic"
case SearchModel.Video:
return "emblem-videos-symbolic"
}
}
} }
Controls.Label { ColumnLayout {
Layout.fillWidth: true Controls.Label {
text: title Layout.fillWidth: true
elide: Qt.ElideRight text: title
elide: Qt.ElideRight
}
Controls.Label {
Layout.fillWidth: true
visible: delegateItem.artistsDisplayString
color: Kirigami.Theme.disabledTextColor
text: delegateItem.artistsDisplayString
elide: Qt.ElideRight
}
} }
} }
actions: [ actions: [
Kirigami.Action { Kirigami.Action {
icon.name: "go-next" icon.name: "view-more-horizontal-symbolic"
text: i18n("Play next") text: i18n("More")
visible: delegateItem.type === SearchModel.Song || delegateItem.type == SearchModel.Video visible: delegateItem.type === SearchModel.Song || delegateItem.type === SearchModel.Video
onTriggered: UserPlaylistModel.playNext(delegateItem.videoId, delegateItem.title, delegateItem.artists) onTriggered: menu.openForSong(delegateItem.videoId, delegateItem.title, delegateItem.artists, delegateItem.artistsDisplayString)
},
Kirigami.Action {
icon.name: "media-playlist-append"
text: i18n("Add to Playlist")
visible: delegateItem.type === SearchModel.Song || delegateItem.type == SearchModel.Video
onTriggered: UserPlaylistModel.append(delegateItem.videoId, delegateItem.title, delegateItem.artists)
},
Kirigami.Action {
icon.name: "radio"
text: i18n("Radio")
visible: delegateItem.type === SearchModel.Artist && delegateItem.radioPlaylistId
onTriggered: playPlaylist(delegateItem.radioPlaylistId)
} }
] ]
@@ -138,19 +139,6 @@ Kirigami.ScrollablePage {
anchors.centerIn: parent anchors.centerIn: parent
visible: searchModel.loading visible: searchModel.loading
} }
Kirigami.PlaceholderMessage {
anchors.centerIn: parent
width: parent.width - (Kirigami.Units.largeSpacing * 4)
visible: parent.count === 0 && !searchModel.loading
text: i18n("Find music on YouTube Music")
helpfulAction: Kirigami.Action {
onTriggered: searchField.forceActiveFocus()
text: i18n("Search")
icon.name: "search"
}
}
} }
footer: ConfirmationMessage { footer: ConfirmationMessage {
+343
View File
@@ -0,0 +1,343 @@
// SPDX-FileCopyrightText: 2023 Mathis Brüchert <[email protected]>
// SPDX-FileCopyrightText: 2021 Jonah Brüchert <[email protected]>
//
// SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
import QtQuick 2.1
import QtQuick.Controls 2.12 as Controls
import QtQuick.Layouts 1.3
import org.kde.kirigami 2.14 as Kirigami
import QtGraphicalEffects 1.0
import org.kde.ytmusic 1.0
Item {
function forceFocus(){searchField.forceActiveFocus()}
function accepted(){searchField.accepted()}
property alias filterExpression: searchField.filterExpression
property alias text: searchField.text
id: root
Controls.TextField{
id: dummy
x:searchField.x
y:searchField.y
width: searchField.width
readOnly: true
}
Kirigami.SearchField {
property var filterExpression: new RegExp(`.*${searchField.text}.*`, "i")
id: searchField
autoAccept: false
width: root.width
selectByMouse: true
onFocusChanged: {
if (wideScreen && focus)
popup.open()
}
onAccepted: {
popup.close()
while (pageStack.depth > 0) {
pageStack.pop()
}
pageStack.layers.clear()
if (text) {
Library.addSearch(text)
pageStack.push("qrc:/SearchPage.qml", {
"searchQuery": text,
objectName: "searchPage"
})
} else {
wideScreen
? pageStack.push("qrc:/LibraryPage.qml")
: pageStack.push("qrc:/SearchHistoryPage.qml")
}
searchField.focus = false
}
}
Controls.Popup {
id: popup
property int expansion: 5
property int shadowSize: 15
onAboutToShow:{
searchField.parent = fieldContainer
onOpened: searchField.background.visible = false
playOpenHeight.running = true
playOpenWidth.running = true
playOpenX.running = true
playOpenY.running = true
playOpenRadius.running = true
}
onAboutToHide:{
searchField.parent = root
onOpened: searchField.background.visible = true
searchField.focus = false
playCloseHeight.running = true
playCloseWidth.running = true
playCloseX.running = true
playCloseY.running = true
playCloseRadius.running = true
}
x: -(popup.shadowSize+popup.expansion)
y: -(popup.shadowSize+popup.expansion)
rightPadding:popup.shadowSize+1
leftPadding:popup.shadowSize+1
bottomPadding:popup.shadowSize
rightInset: popup.shadowSize
leftInset: popup.shadowSize
bottomInset: popup.shadowSize
leftMargin:-popup.shadowSize
background: Kirigami.ShadowedRectangle{
id: bg
Kirigami.Theme.inherit: false
Kirigami.Theme.colorSet: Kirigami.Theme.View
color: Kirigami.Theme.backgroundColor
radius: popup.expansion+2
shadow.size: popup.shadowSize
shadow.yOffset: popup.expansion
shadow.color: Qt.rgba(0, 0, 0, 0.2)
border.width: 1
border.color: Kirigami.ColorUtils.linearInterpolation(Kirigami.Theme.backgroundColor, Kirigami.Theme.textColor, 0.3);
NumberAnimation on radius{
id: playOpenRadius
easing.type: Easing.OutCubic
running: false
from: 2
duration: 100
to: popup.expansion+2
}
NumberAnimation on radius{
id: playCloseRadius
easing.type: Easing.OutCubic
running: false
from: popup.expansion+2
duration: 100
to: 2
}
}
width: searchField.width + 2*(popup.shadowSize+popup.expansion)
height: completionList
? (Math.min(content.implicitHeight, Kirigami.Units.gridUnit * 20))+2*(popup.shadowSize+popup.expansion)
: (Kirigami.Units.gridUnit * 20)+2*(popup.shadowSize+popup.expansion)
NumberAnimation on height{
id: playOpenHeight
easing.type: Easing.OutCubic
running: false
from: searchField.height
duration: 200
to: completionList
? (Math.min(fieldContainer.height+ completionList.count * Kirigami.Units.gridUnit * 2 + recents.implicitHeight, Kirigami.Units.gridUnit * 20))+2*(popup.shadowSize+popup.expansion)
: (Kirigami.Units.gridUnit * 20)+2*(popup.shadowSize+popup.expansion)
}
NumberAnimation on width{
id: playOpenWidth
easing.type: Easing.OutCubic
running: false
from: searchField.width
duration: 100
to: searchField.width +2*(popup.shadowSize+popup.expansion)
}
NumberAnimation on x{
id: playOpenX
easing.type: Easing.OutCubic
running: false
from: 0
duration: 100
to: -(popup.shadowSize+popup.expansion)
}
NumberAnimation on y{
id: playOpenY
easing.type: Easing.OutCubic
running: false
from: 0
duration: 100
to: -popup.expansion
}
NumberAnimation on height{
id: playCloseHeight
easing.type: Easing.OutCubic
running: false
from: completionList
? (Math.min(content.implicitHeight, Kirigami.Units.gridUnit * 20))+2*(popup.shadowSize+popup.expansion)
: (Kirigami.Units.gridUnit * 20)+2*(popup.shadowSize+popup.expansion)
duration: 100
to: searchField.heigth
}
NumberAnimation on width{
id: playCloseWidth
easing.type: Easing.OutCubic
running: false
from: searchField.width + 2*(popup.shadowSize+popup.expansion)
duration: 100
to: searchField.width + 2*(popup.shadowSize)
}
NumberAnimation on x{
id: playCloseX
easing.type: Easing.OutCubic
running: false
from: -(popup.shadowSize+popup.expansion)
duration: 100
to: -popup.shadowSize
}
NumberAnimation on y{
id: playCloseY
easing.type: Easing.OutCubic
running: false
from: - popup.expansion
duration: 100
to: -0
}
contentItem: ColumnLayout{
id: content
width: parent.width
Controls.Control{
Layout.fillHeight: true
Layout.fillWidth: true
Controls.Control{
x: popup.expansion
y:-popup.expansion
id: fieldContainer
height:searchField.height
}
implicitHeight: fieldContainer.height
}
Controls.ScrollView {
id: mainScrollView
clip: true
Layout.fillHeight: true
Layout.fillWidth: true
Keys.enabled: false
contentWidth: availableWidth
ColumnLayout {
width: mainScrollView.contentWidth
Controls.ScrollView {
id: recents
Layout.fillWidth: true
Layout.maximumWidth: popup.width
visible: searchField.text && recentsRepeater.count > 0
leftPadding: 10
rightPadding: 40
topPadding: 10
Controls.ScrollBar.horizontal.policy: Controls.ScrollBar.AlwaysOff
RowLayout {
spacing: 10
Layout.fillWidth: true
Layout.maximumWidth: popup.width - 23
Repeater {
id: recentsRepeater
Layout.fillWidth: true
model: SortFilterModel {
filterRole: PlaybackHistoryModel.Title
filterRegularExpression: searchField.filterExpression
sourceModel: Library.playbackHistory
}
delegate: Kirigami.DelegateRecycler {
Layout.alignment: Qt.AlignTop
width: popup.width
sourceComponent: searchAlbum
}
}
}
}
Kirigami.Separator{
Layout.fillWidth: true
visible: searchField.text && recentsRepeater.count > 0
implicitWidth: popup.width
}
RowLayout{
Layout.margins: 10
visible: completionList.count == 0
Kirigami.Icon {
source: "documentinfo"
implicitHeight: Kirigami.Units.gridUnit
implicitWidth: Kirigami.Units.gridUnit
color: Kirigami.Theme.disabledTextColor
}
Controls.Label {
text: i18n("No matching previous searches")
Layout.fillWidth: true
color: Kirigami.Theme.disabledTextColor
}
}
Repeater {
Layout.fillWidth: true
id: completionList
model: SortFilterModel {
sourceModel: Library.searches
filterRegularExpression: searchField.filterExpression
}
delegate: Kirigami.AbstractListItem {
id: completionDelegate
highlighted: focus
Kirigami.Theme.colorSet: Kirigami.Theme.Window
Kirigami.Theme.inherit: false
Layout.fillWidth: true
height: Kirigami.Units.gridUnit * 2
contentItem: RowLayout {
Kirigami.Icon {
source: "search"
implicitHeight: Kirigami.Units.gridUnit
implicitWidth: Kirigami.Units.gridUnit
color: Kirigami.Theme.disabledTextColor
}
Controls.Label{
text: model.display
Layout.fillWidth: true
}
Controls.ToolButton {
icon.name: "list-remove"
text: i18n("remove from search history")
display: Controls.AbstractButton.IconOnly
onClicked: {
Library.removeSearch(model.display)
}
}
}
onClicked: {
searchField.text = model.display
searchField.accepted()
}
}
}
}
}
}
}
}
+194
View File
@@ -0,0 +1,194 @@
// 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 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
Rectangle {
property bool collapsed: false
id: sidebar
width: 200
clip:true
Kirigami.Theme.colorSet: Kirigami.Theme.Window
Kirigami.Theme.inherit: false
color: "transparent"
Rectangle {
anchors.fill: parent
color: Kirigami.Theme.backgroundColor
opacity: 0.8
}
NumberAnimation on width{
id: collapse
easing.type: Easing.OutCubic
running: false
from: 200; to: 60
}
NumberAnimation on width{
id: show
easing.type: Easing.OutCubic
running: false
from: 60; to: 200
//this is only a workaround to stop the text from disappearing
onFinished:{
libraryButton.checked =!libraryButton.checked
libraryButton.checked =!libraryButton.checked
favouritesButton.checked =!favouritesButton.checked
favouritesButton.checked =!favouritesButton.checked
historyButton.checked =!historyButton.checked
historyButton.checked =!historyButton.checked
searchButton.checked =!searchButton.checked
searchButton.checked =!searchButton.checked
collapseButton.checked =!collapseButton.checked
collapseButton.checked =false
}
}
Kirigami.Separator {
height: parent.height
anchors.right: parent.right
z:100
}
ColumnLayout {
anchors.fill: parent
spacing: 0
Kirigami.Separator {
Layout.fillWidth: true
}
Controls.ScrollView {
id: scrollView
Layout.fillWidth: true
Layout.fillHeight: true
Controls.ScrollBar.vertical.policy: Controls.ScrollBar.AlwaysOff
Controls.ScrollBar.horizontal.policy: Controls.ScrollBar.AlwaysOff
contentWidth: -1 // disable horizontal scroll
ColumnLayout {
id: column
width: scrollView.width
spacing: 0
Kirigami.NavigationTabButton {
id: libraryButton
Layout.fillWidth: true
width: column.width - column.Layout.leftMargin - column.Layout.rightMargin
implicitHeight: 50
display: Controls.AbstractButton.TextBesideIcon
text: collapsed? "" : i18n("Library")
icon.name: "file-library-symbolic"
checked: pageStack.currentItem && pageStack.currentItem.objectName == "libraryPage"
onClicked: {
pageStack.clear()
pageStack.push("qrc:/LibraryPage.qml")
}
}
Kirigami.NavigationTabButton {
id: searchButton
Layout.fillWidth: true
width: column.width - column.Layout.leftMargin - column.Layout.rightMargin
implicitHeight: 50
display: Controls.AbstractButton.TextBesideIcon
text: collapsed? "" : i18n("Search")
icon.name: "search"
checked: pageStack.currentItem && pageStack.currentItem.objectName == "searchPage"
onClicked: {
searchField.forceActiveFocus()
focusSearch()
}
}
Kirigami.NavigationTabButton {
id: favouritesButton
Layout.fillWidth: true
width: column.width - column.Layout.leftMargin - column.Layout.rightMargin
implicitHeight: 50
display: Controls.AbstractButton.TextBesideIcon
text: collapsed ? "" : i18n("Favourites")
icon.name: "non-starred-symbolic"
checked: pageStack.currentItem && pageStack.currentItem.objectName == "favourites"
onClicked: {
pageStack.clear()
pageStack.push("qrc:/PlaybackHistory.qml", {
"dataModel": Library.favourites,
"title": i18n("Favourites"),
"objectName": "favourites"
})}
}
Kirigami.NavigationTabButton {
id: historyButton
Layout.fillWidth: true
width: column.width - column.Layout.leftMargin - column.Layout.rightMargin
implicitHeight: 50
display: Controls.AbstractButton.TextBesideIcon
text: collapsed? "" : i18n("Played Songs")
icon.name: "edit-undo-history"
checked: pageStack.currentItem && pageStack.currentItem.objectName == "history"
onClicked: {
pageStack.clear()
pageStack.push("qrc:/PlaybackHistory.qml", {
"dataModel": Library.playbackHistory,
"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: collapseButton
Layout.fillWidth: true
width: column.width - column.Layout.leftMargin - column.Layout.rightMargin
display: Controls.AbstractButton.TextBesideIcon
text: collapsed? "" : i18n("Collapse Sidebar")
checked: collapsed == true
implicitHeight: 50
icon.name: "sidebar-collapse"
onClicked: {
if (!sidebar.collapsed)
collapse.running = true
else
show.running = true
sidebar.collapsed = !sidebar.collapsed
}
}
}
}
+209
View File
@@ -0,0 +1,209 @@
// 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 QtQuick 2.15
import QtQuick.Controls 2.15 as Controls
import org.kde.ytmusic 1.0
import org.kde.kirigami 2.19 as Kirigami
import QtQuick.Layouts 1.15
Item {
function openForSong(videoId, songTitle, artists, artistsDisplayString) {
menu.videoId = videoId
drawer.videoId = videoId
menu.songTitle = songTitle
drawer.songTitle = songTitle
menu.artists = artists
drawer.artists = artists
menu.artistsDisplayString = artistsDisplayString
drawer.artistsDisplayString = artistsDisplayString
if (Kirigami.Settings.isMobile) {
drawer.interactive = true
drawer.open()
} else {
menu.popup()
}
}
Controls.Drawer {
edge: Qt.BottomEdge
height:contents.implicitHeight+20
width: applicationWindow().width
interactive: false
background: Kirigami.ShadowedRectangle{
corners.topRightRadius: 10
corners.topLeftRadius: 10
shadow.size: 20
shadow.color: Qt.rgba(0, 0, 0, 0.5)
color: Kirigami.Theme.backgroundColor
}
onClosed: drawer.interactive = false
id: drawer
property string videoId
property string songTitle
property var artists
property string artistsDisplayString
ColumnLayout {
id: contents
anchors.fill: parent
ThumbnailSource {
id: thumbnailSource
videoId: drawer.videoId
}
// Kirigami.Icon {
// Layout.margins: Kirigami.Units.smallSpacing
// source: "arrow-down"
// implicitWidth: Kirigami.Units.gridUnit
// implicitHeight: Kirigami.Units.gridUnit
// Layout.alignment: Qt.AlignHCenter
// }
RowLayout {
spacing: 10
Kirigami.ShadowedRectangle {
Layout.margins: 10
color: Kirigami.Theme.backgroundColor
width: 60
height: width
radius: 5
shadow.size: 15
shadow.xOffset: 5
shadow.yOffset: 5
shadow.color: Qt.rgba(0, 0, 0, 0.2)
RoundedImage {
source: thumbnailSource.cachedPath
height: width
width: parent.width
radius: parent.radius
}
}
ColumnLayout {
Controls.Label{
text: drawer.songTitle
elide: Text.ElideRight
Layout.fillWidth: true
}
Controls.Label{
text: drawer.artistsDisplayString
color: Kirigami.Theme.disabledTextColor
elide: Text.ElideRight
Layout.fillWidth: true
}
}
}
Kirigami.Separator {
Layout.fillWidth: true
Layout.leftMargin: 10
Layout.rightMargin: 10
}
Kirigami.BasicListItem{
label: i18n("Play Next")
icon: "go-next"
onClicked: {
UserPlaylistModel.playNext(drawer.videoId, drawer.songTitle, drawer.artists)
drawer.close()
}
}
Kirigami.BasicListItem{
label: i18n("Add to queue")
icon: "media-playlist-append"
onClicked: {
UserPlaylistModel.append(drawer.videoId, drawer.songTitle, drawer.artists)
drawer.close()
}
}
Kirigami.BasicListItem{
readonly property QtObject favouriteWatcher: Library.favouriteWatcher(drawer.videoId)
label: favouriteWatcher ? (favouriteWatcher.isFavourite ? i18n("Remove Favourite"): i18n("Add Favourite")): ""
icon: favouriteWatcher ? (favouriteWatcher.isFavourite ? "starred-symbolic" : "non-starred-symbolic") : ""
onClicked: {
if (favouriteWatcher) {
if (favouriteWatcher.isFavourite) {
Library.removeFavourite(drawer.videoId)
} else {
Library.addFavourite(drawer.videoId, drawer.songTitle, drawer.artistsDisplayString, "")
}
}
drawer.close()
}
}
Kirigami.BasicListItem{
readonly property QtObject wasPlayedWatcher: Library.wasPlayedWatcher(drawer.videoId)
label: i18n("Remove from History")
icon: "list-remove"
onClicked: {
Library.removePlaybackHistoryItem(drawer.videoId)
drawer.close()
}
visible: wasPlayedWatcher ? wasPlayedWatcher.wasPlayed : false
enabled: wasPlayedWatcher ? wasPlayedWatcher.wasPlayed : false
}
Item{
Layout.fillHeight: true
}
}
}
Controls.Menu {
property string videoId
property string songTitle
property var artists
property string artistsDisplayString
id: menu
Controls.MenuItem {
text: i18n("Play Next")
icon.name: "go-next"
onTriggered: UserPlaylistModel.playNext(menu.videoId, menu.songTitle, menu.artists)
}
Controls.MenuItem {
text: i18n("Add to queue")
icon.name: "media-playlist-append"
onTriggered: UserPlaylistModel.append(menu.videoId, menu.songTitle, menu.artists)
}
Controls.MenuItem {
readonly property QtObject favouriteWatcher: Library.favouriteWatcher(menu.videoId)
text: favouriteWatcher ? (favouriteWatcher.isFavourite ? i18n("Remove Favourite"): i18n("Add Favourite")): ""
icon.name: favouriteWatcher ? (favouriteWatcher.isFavourite ? "starred-symbolic" : "non-starred-symbolic") : ""
onTriggered: {
if (favouriteWatcher) {
if (favouriteWatcher.isFavourite) {
Library.removeFavourite(menu.videoId)
} else {
Library.addFavourite(menu.videoId, menu.songTitle, menu.artistsDisplayString, "")
}
}
}
}
Controls.MenuItem{
readonly property QtObject wasPlayedWatcher: Library.wasPlayedWatcher(menu.videoId)
text: i18n("Remove from History")
icon.name: "list-remove"
onTriggered: {
Library.removePlaybackHistoryItem(menu.videoId)
}
enabled: wasPlayedWatcher ? wasPlayedWatcher.wasPlayed : false
visible: wasPlayedWatcher ? wasPlayedWatcher.wasPlayed : false
}
}
}
+171 -59
View File
@@ -6,15 +6,50 @@ import QtQuick 2.1
import QtQuick.Controls 2.12 as Controls import QtQuick.Controls 2.12 as Controls
import QtQuick.Layouts 1.3 import QtQuick.Layouts 1.3
import org.kde.kirigami 2.14 as Kirigami import org.kde.kirigami 2.14 as Kirigami
import QtGraphicalEffects 1.0
import org.kde.ytmusic 1.0 import org.kde.ytmusic 1.0
Kirigami.ApplicationWindow { Kirigami.ApplicationWindow {
id: root id: root
property alias searchField: searchField pageStack.globalToolBar.style: wideScreen? Kirigami.ApplicationHeaderStyle.None: Kirigami.ApplicationHeaderStyle.Breadcrumb
color: "transparent"
Blur{id:blur}
Component.onCompleted: {
blur.setBlur(sidebar, true);
}
pageStack.columnView.columnResizeMode: Kirigami.ColumnView.SingleColumn
property alias searchField: searchLoader // TODO
property bool wideScreen: width >= 600
property bool showSearch: false // only applicable if not widescreen
// so that there is still a separator, since the header style is none
Kirigami.Separator {
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
visible: wideScreen
}
Sidebar {
id:sidebar
visible: wideScreen
height: pageStack.height - playerFooter.implicitHeight
}
NavigationBar{
id: bottombar
visible: !wideScreen
}
header: Controls.Control { header: Controls.Control {
visible: wideScreen || root.showSearch
padding: Kirigami.Units.largeSpacing padding: Kirigami.Units.largeSpacing
background: Rectangle { background: Rectangle {
@@ -25,67 +60,48 @@ Kirigami.ApplicationWindow {
Kirigami.Theme.colorSet: Kirigami.Theme.Header Kirigami.Theme.colorSet: Kirigami.Theme.Header
color: Kirigami.Theme.backgroundColor color: Kirigami.Theme.backgroundColor
} }
contentItem: RowLayout{
Item { contentItem: RowLayout {
Layout.fillWidth: true
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
} }
Kirigami.SearchField { Controls.ToolButton {
id: searchField icon.name: "draw-arrow-forward"
delaySearch: true enabled: applicationWindow().pageStack.currentIndex < applicationWindow().pageStack.depth-1
selectByMouse: true onClicked: pageStack.goForward()
Layout.fillWidth: true anchors.left: back.right
Layout.maximumWidth: 400 visible: wideScreen
onPressed: {
popup.open()
}
Controls.Popup {
id: popup
x: searchField.y
y: searchField.y + searchField.height
visible: true
width: searchField.width
height: completionList
? Math.min(completionList.count * Kirigami.Units.gridUnit * 2 + Kirigami.Units.gridUnit * 2, Kirigami.Units.gridUnit * 20)
: Kirigami.Units.gridUnit * 20
contentItem: Controls.ScrollView {
Controls.ScrollBar.horizontal.policy: Controls.ScrollBar.AlwaysOff
ListView {
id: completionList
model: Library.searches
delegate: Controls.ItemDelegate {
Kirigami.Theme.colorSet: Kirigami.Theme.Window
Kirigami.Theme.inherit: false
id: completionDelegate
width: parent.width
height: Kirigami.Units.gridUnit * 2
text: model.display
onClicked: {
searchField.text = model.display
searchField.accepted()
}
}
}
}
}
onAccepted: {
pageStack.clear()
if (text) {
Library.addSearch(text)
pageStack.push("qrc:/SearchPage.qml", {
"searchQuery": text})
} else {
pageStack.replace("qrc:/LibraryPage.qml")
}
popup.close()
}
} }
// spacer
Item { Item {
visible: wideScreen
Layout.fillWidth: !root.wideScreen
}
SearchWithDropdown {
id: searchLoader
visible: root.wideScreen || root.showSearch
Layout.alignment: Qt.AlignHCenter
Layout.fillWidth: true Layout.fillWidth: true
Layout.fillHeight: true
height: back.height
width: wideScreen?null:root.width
Layout.maximumWidth: wideScreen ? 400 : root.width
}
Item {
width: 2*back.width
visible: wideScreen
} }
} }
} }
@@ -97,6 +113,7 @@ Kirigami.ApplicationWindow {
} }
pageStack.initialPage: "qrc:/LibraryPage.qml" pageStack.initialPage: "qrc:/LibraryPage.qml"
pageStack.clip: true
function play(videoId) { function play(videoId) {
UserPlaylistModel.initialVideoId = videoId UserPlaylistModel.initialVideoId = videoId
@@ -110,7 +127,7 @@ Kirigami.ApplicationWindow {
UserPlaylistModel.shuffle = true UserPlaylistModel.shuffle = true
UserPlaylistModel.playlistId = playlistId UserPlaylistModel.playlistId = playlistId
} }
function focusSearch(){searchLoader.forceFocus()}
Connections { Connections {
target: ErrorHandler target: ErrorHandler
@@ -119,15 +136,110 @@ Kirigami.ApplicationWindow {
showPassiveNotification(error) showPassiveNotification(error)
} }
} }
Component {
id: searchAlbum
ColumnLayout {
id: mpdelegateItem
width: 100
Layout.maximumWidth: 70
Kirigami.ShadowedRectangle {
id: recCover
MouseArea {
id: recArea
anchors.fill: parent
onClicked: play(model.videoId)
hoverEnabled: !Kirigami.Settings.hasTransientTouchInput
onEntered: {
if (!Kirigami.Settings.hasTransientTouchInput)
recSelected.visible = true
searchTitle.color = Kirigami.Theme.hoverColor
searchTitle.font.bold = true
}
onExited:{
recSelected.visible = false
searchTitle.color = Kirigami.Theme.textColor
searchTitle.font.bold = false
}
}
Layout.margins: 5
width: 70
height: 70
radius: 10
shadow.size: 15
shadow.xOffset: 5
shadow.yOffset: 5
shadow.color: Qt.rgba(0, 0, 0, 0.2)
Rectangle {
width: 70
height: 70
color: "transparent"
ThumbnailSource {
id: thumbnailSource
videoId: model ? model.videoId : ""
}
RoundedImage {
source: thumbnailSource.cachedPath
height: parent.height
width: height
radius: 10
}
Rectangle {
id: recSelected
Rectangle {
anchors.fill: parent
color: Kirigami.Theme.hoverColor
radius: 10
opacity: 0.2
}
visible: false
anchors.fill: parent
radius: 9
border.color: Kirigami.Theme.hoverColor
border.width: 2
color: "transparent"
}
}
}
Controls.Label {
id: searchTitle
leftPadding:5
Layout.maximumWidth: 70
text: model ? model.title : ""
elide: Qt.ElideRight
wrapMode: Text.WordWrap
Layout.maximumHeight: 40
}
Item {
height: 5
}
}
}
pageStack.anchors.bottomMargin: playerFooter.minimizedPlayerHeight + 1 pageStack.anchors.bottomMargin: wideScreen ? playerFooter.minimizedPlayerHeight: playerFooter.minimizedPlayerHeight+bottombar.height
pageStack.anchors.leftMargin: wideScreen ? sidebar.width:0
// media player // media player
PlayerFooter { PlayerFooter {
id: playerFooter id: playerFooter
anchors.topMargin: -root.header.height anchors.topMargin: -root.header.height
anchors.fill: parent anchors.fill: parent
footerSpacing: wideScreen ? 0 : bottombar.height
// only expand flicking area to full screen when it is open // only expand flicking area to full screen when it is open
z: (contentY === 0) ? -1 : 999 z: (contentY === 0) ? -1 : 999
} }
+104 -23
View File
@@ -40,13 +40,13 @@ Library &Library::instance()
FavouritesModel *Library::favourites() FavouritesModel *Library::favourites()
{ {
auto future = m_database->getResults<Song>("select * from favourites natural join songs"); 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(std::move(future), this);
} }
void Library::addFavourite(const QString &videoId, const QString &title) void Library::addFavourite(const QString &videoId, const QString &title, const QString &artist, const QString &album)
{ {
connectFuture(addSong(videoId, title), this, [=, this] { connectFuture(addSong(videoId, title, artist, album), this, [=, this] {
connectFuture(m_database->execute("insert or ignore into favourites (video_id) values (?)", videoId), this, &Library::favouritesChanged); connectFuture(m_database->execute("insert or ignore into favourites (video_id) values (?)", videoId), this, &Library::favouritesChanged);
}); });
} }
@@ -66,7 +66,7 @@ FavouriteWatcher *Library::favouriteWatcher(const QString &videoId)
SearchHistoryModel *Library::searches() SearchHistoryModel *Library::searches()
{ {
return new SearchHistoryModel(m_database->getResults<SingleValue<QString>>("select (search_query) from searches order by search_id desc"), this); return new SearchHistoryModel(m_database->getResults<SingleValue<QString>>("select distinct (search_query) from searches order by search_id desc"), this);
} }
void Library::addSearch(const QString &text) void Library::addSearch(const QString &text)
@@ -74,21 +74,40 @@ void Library::addSearch(const QString &text)
connectFuture(m_database->execute("insert into searches (search_query) values (?)", text), this, &Library::searchesChanged); connectFuture(m_database->execute("insert into searches (search_query) values (?)", text), this, &Library::searchesChanged);
} }
void Library::removeSearch(const QString &text)
{
connectFuture(m_database->execute("delete from searches where search_query = ?", text), this, &Library::searchesChanged);
}
PlaybackHistoryModel *Library::playbackHistory() PlaybackHistoryModel *Library::playbackHistory()
{ {
auto future = m_database->getResults<PlayedSong>("select * from played_songs natural join songs"); auto future = m_database->getResults<PlayedSong>("select * from played_songs natural join songs");
return new PlaybackHistoryModel(std::move(future), this); return new PlaybackHistoryModel(std::move(future), this);
} }
void Library::addPlaybackHistoryItem(const QString &videoId, const QString &title) void Library::addPlaybackHistoryItem(const QString &videoId, const QString &title, const QString &artist, const QString &album)
{ {
connectFuture(addSong(videoId, title), this, [=, this] { connectFuture(addSong(videoId, title, artist, album), this, [=, this] {
connectFuture(m_database->execute("insert or ignore into played_songs (video_id, plays) values (?, ?)", videoId, 0), this, [=, this] { connectFuture(m_database->execute("insert or ignore into played_songs (video_id, plays) values (?, ?)", videoId, 0), this, [=, this] {
connectFuture(m_database->execute("update played_songs set plays = plays + 1 where video_id = ? ", videoId), this, &Library::playbackHistoryChanged); connectFuture(m_database->execute("update played_songs set plays = plays + 1 where video_id = ? ", videoId), this, &Library::playbackHistoryChanged);
}); });
}); });
} }
void Library::removePlaybackHistoryItem(const QString &videoId)
{
connectFuture(m_database->execute("delete from played_songs where video_id = ?", videoId), this, &Library::playbackHistoryChanged);
}
WasPlayedWatcher *Library::wasPlayedWatcher(const QString& videoId)
{
if(videoId.isEmpty()){
return nullptr;
}
return new WasPlayedWatcher(this, videoId);
}
PlaybackHistoryModel *Library::mostPlayed() PlaybackHistoryModel *Library::mostPlayed()
{ {
auto future = m_database->getResults<PlayedSong>("select * from played_songs natural join songs order by plays desc limit 10"); auto future = m_database->getResults<PlayedSong>("select * from played_songs natural join songs order by plays desc limit 10");
@@ -100,9 +119,10 @@ QNetworkAccessManager &Library::nam()
return m_networkImageCacher; return m_networkImageCacher;
} }
QFuture<void> Library::addSong(const QString &videoId, const QString &title) QFuture<void> Library::addSong(const QString &videoId, const QString &title, const QString &artist, const QString &album)
{ {
return m_database->execute("insert or ignore into songs (video_id, title, artist, album) values (?, ?, null, null)", videoId, title); // replace is used here to update songs from times when we didn't store artist and album
return m_database->execute("insert or replace into songs (video_id, title, artist, album) values (?, ?, ?, ?)", videoId, title, artist, album);
} }
void ThumbnailSource::setVideoId(const QString &id) { void ThumbnailSource::setVideoId(const QString &id) {
@@ -122,15 +142,32 @@ void ThumbnailSource::setVideoId(const QString &id) {
return; return;
} }
auto future = YTMusicThread::instance()->extractVideoInfo(id); auto *reply = Library::instance().nam().get(QNetworkRequest(QUrl("https://i.ytimg.com/vi_webp/" % m_videoId % "/maxresdefault.webp")));
connectFuture(future, this, [this, id, cacheLocation](video_info::VideoInfo &&info) {
auto *reply = Library::instance().nam().get(QNetworkRequest(QUrl(QString::fromStdString(info.thumbnail)))); auto storeResult = [this, cacheLocation](QNetworkReply *reply) {
connect(reply, &QNetworkReply::finished, this, [id, reply, this, cacheLocation]() { QFile file(cacheLocation);
QFile file(cacheLocation); file.open(QFile::WriteOnly);
file.open(QFile::WriteOnly); file.write(reply->readAll());
file.write(reply->readAll()); setCachedPath(QUrl::fromLocalFile(cacheLocation));
setCachedPath(QUrl::fromLocalFile(cacheLocation));
}); reply->deleteLater();
};
connect(reply, &QNetworkReply::errorOccurred, this, [this, storeResult](auto error) {
if (error == QNetworkReply::NetworkError::ContentNotFoundError) {
qDebug() << "Naive thumbnail resolution failed, falling back to yt-dlp (slower)";
connectFuture(YTMusicThread::instance()->extractVideoInfo(m_videoId), this, [this, storeResult](auto info) {
auto *reply = Library::instance().nam().get(QNetworkRequest(QUrl(QString::fromStdString(info.thumbnail))));
connect(reply, &QNetworkReply::finished, this, [reply, storeResult]() {
storeResult(reply);
});
});
}
});
connect(reply, &QNetworkReply::finished, this, [reply, storeResult]() {
storeResult(reply);
}); });
} }
@@ -148,7 +185,8 @@ QHash<int, QByteArray> PlaybackHistoryModel::roleNames() const {
return { return {
{Roles::VideoId, "videoId"}, {Roles::VideoId, "videoId"},
{Roles::Title, "title"}, {Roles::Title, "title"},
{Roles::Artist, "artist"}, {Roles::Artists, "artists"},
{Roles::ArtistsDisplayString, "artistsDisplayString"},
{Roles::Plays, "plays"} {Roles::Plays, "plays"}
}; };
} }
@@ -163,7 +201,14 @@ QVariant PlaybackHistoryModel::data(const QModelIndex &index, int role) const {
return m_playedSongs.at(index.row()).videoId; return m_playedSongs.at(index.row()).videoId;
case Roles::Title: case Roles::Title:
return m_playedSongs.at(index.row()).title; return m_playedSongs.at(index.row()).title;
case Roles::Artist: case Roles::Artists:
return QVariant::fromValue(std::vector<meta::Artist> {
{
m_playedSongs.at(index.row()).artist.toStdString(),
{}
}
});
case Roles::ArtistsDisplayString:
return m_playedSongs.at(index.row()).artist; return m_playedSongs.at(index.row()).artist;
case Roles::Plays: case Roles::Plays:
return m_playedSongs.at(index.row()).plays; return m_playedSongs.at(index.row()).plays;
@@ -186,7 +231,8 @@ QHash<int, QByteArray> FavouritesModel::roleNames() const {
return { return {
{Roles::VideoId, "videoId"}, {Roles::VideoId, "videoId"},
{Roles::Title, "title"}, {Roles::Title, "title"},
{Roles::Artist, "artist"} {Roles::Artists, "artists"},
{Roles::ArtistsDisplayString, "artistsDisplayString"}
}; };
} }
@@ -200,8 +246,15 @@ QVariant FavouritesModel::data(const QModelIndex &index, int role) const {
return m_favouriteSongs.at(index.row()).videoId; return m_favouriteSongs.at(index.row()).videoId;
case Roles::Title: case Roles::Title:
return m_favouriteSongs.at(index.row()).title; return m_favouriteSongs.at(index.row()).title;
case Roles::Artist: case Roles::ArtistsDisplayString:
return m_favouriteSongs.at(index.row()).artist; 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(); Q_UNREACHABLE();
@@ -211,9 +264,9 @@ FavouriteWatcher::FavouriteWatcher(Library *library, const QString &videoId)
: QObject(library), m_videoId(videoId), m_library(library) : QObject(library), m_videoId(videoId), m_library(library)
{ {
auto update = [this] { auto update = [this] {
connectFuture(m_library->database().getResult<SingleValue<int>>("select count(*) from favourites where video_id = ?", m_videoId), this, [this](auto count) { connectFuture(m_library->database().getResult<SingleValue<bool>>("select count(*) > 0 from favourites where video_id = ?", m_videoId), this, [this](auto count) {
if (count) { if (count) {
m_isFavourite = count->value > 0; m_isFavourite = count->value;
Q_EMIT isFavouriteChanged(); Q_EMIT isFavouriteChanged();
} }
}); });
@@ -248,3 +301,31 @@ QVariant SearchHistoryModel::data(const QModelIndex &index, int role) const {
Q_UNREACHABLE(); Q_UNREACHABLE();
} }
WasPlayedWatcher::WasPlayedWatcher(Library* library, const QString& videoId)
: QObject(library), m_videoId(videoId), m_library(library)
{
connect(m_library, &Library::playbackHistoryChanged, this, &WasPlayedWatcher::query);
query();
}
void WasPlayedWatcher::query()
{
connectFuture(m_library->database().getResult<SingleValue<bool>>("select count(*) > 0 from played_songs where video_id = ?", m_videoId), this, &WasPlayedWatcher::update);
}
bool WasPlayedWatcher::wasPlayed() const
{
return m_wasPlayed;
}
void WasPlayedWatcher::update(std::optional<SingleValue<bool>> result)
{
if(result.has_value())
{
m_wasPlayed = result->value;
Q_EMIT wasPlayedChanged();
}
}
+34 -6
View File
@@ -8,6 +8,7 @@
#include <QQuickAsyncImageProvider> #include <QQuickAsyncImageProvider>
#include <QNetworkAccessManager> #include <QNetworkAccessManager>
#include <QAbstractListModel> #include <QAbstractListModel>
#include <QSortFilterProxyModel>
#include <memory> #include <memory>
@@ -15,6 +16,7 @@
#include "asyncdatabase.h" #include "asyncdatabase.h"
class FavouriteWatcher; class FavouriteWatcher;
class WasPlayedWatcher;
struct Song { struct Song {
using ColumnTypes = std::tuple<QString, QString, QString, QString>; using ColumnTypes = std::tuple<QString, QString, QString, QString>;
@@ -36,7 +38,8 @@ class FavouritesModel : public QAbstractListModel {
enum Roles { enum Roles {
VideoId = Qt::UserRole + 1, VideoId = Qt::UserRole + 1,
Title, Title,
Artist, Artists,
ArtistsDisplayString
}; };
public: public:
@@ -68,14 +71,16 @@ struct PlayedSong {
class PlaybackHistoryModel : public QAbstractListModel { class PlaybackHistoryModel : public QAbstractListModel {
Q_OBJECT Q_OBJECT
public:
enum Roles { enum Roles {
VideoId = Qt::UserRole + 1, VideoId = Qt::UserRole + 1,
Title, Title,
Artist, Artists,
ArtistsDisplayString,
Plays Plays
}; };
Q_ENUM(Roles);
public:
PlaybackHistoryModel(QFuture<std::vector<PlayedSong>> &&songs, QObject *parent = nullptr); PlaybackHistoryModel(QFuture<std::vector<PlayedSong>> &&songs, QObject *parent = nullptr);
QHash<int, QByteArray> roleNames() const override; QHash<int, QByteArray> roleNames() const override;
@@ -114,17 +119,20 @@ public:
FavouritesModel *favourites(); FavouritesModel *favourites();
Q_SIGNAL void favouritesChanged(); Q_SIGNAL void favouritesChanged();
Q_INVOKABLE void addFavourite(const QString &videoId, const QString &title); Q_INVOKABLE void addFavourite(const QString &videoId, const QString &title, const QString &artist, const QString &album);
Q_INVOKABLE void removeFavourite(const QString &videoId); Q_INVOKABLE void removeFavourite(const QString &videoId);
Q_INVOKABLE FavouriteWatcher *favouriteWatcher(const QString &videoId); Q_INVOKABLE FavouriteWatcher *favouriteWatcher(const QString &videoId);
SearchHistoryModel *searches(); SearchHistoryModel *searches();
Q_SIGNAL void searchesChanged(); Q_SIGNAL void searchesChanged();
Q_INVOKABLE void addSearch(const QString &text); Q_INVOKABLE void addSearch(const QString &text);
Q_INVOKABLE void removeSearch(const QString &text);
PlaybackHistoryModel *playbackHistory(); PlaybackHistoryModel *playbackHistory();
Q_SIGNAL void playbackHistoryChanged(); Q_SIGNAL void playbackHistoryChanged();
Q_INVOKABLE void addPlaybackHistoryItem(const QString &videoId, const QString &title); Q_INVOKABLE void addPlaybackHistoryItem(const QString &videoId, const QString &title, const QString &artist, const QString &album);
Q_INVOKABLE void removePlaybackHistoryItem(const QString &videoId);
Q_INVOKABLE WasPlayedWatcher *wasPlayedWatcher(const QString &videoId);
PlaybackHistoryModel *mostPlayed(); PlaybackHistoryModel *mostPlayed();
@@ -134,7 +142,7 @@ public:
} }
private: private:
QFuture<void> addSong(const QString &videoId, const QString &title); QFuture<void> addSong(const QString &videoId, const QString &title, const QString &artist, const QString &album);
QNetworkAccessManager m_networkImageCacher; QNetworkAccessManager m_networkImageCacher;
std::unique_ptr<ThreadedDatabase> m_database; std::unique_ptr<ThreadedDatabase> m_database;
@@ -185,3 +193,23 @@ private:
Library *m_library; Library *m_library;
bool m_isFavourite = false; bool m_isFavourite = false;
}; };
class WasPlayedWatcher : public QObject {
Q_OBJECT
Q_PROPERTY(bool wasPlayed READ wasPlayed NOTIFY wasPlayedChanged)
public:
WasPlayedWatcher(Library *Library, const QString &VideoId);
bool wasPlayed() const;
Q_SIGNAL void wasPlayedChanged();
private:
bool m_wasPlayed = false;
QString m_videoId;
Library *m_library;
Q_SLOT void update(std::optional<SingleValue<bool>> result);
Q_SLOT void query();
};
+10
View File
@@ -5,11 +5,13 @@
#include <QApplication> #include <QApplication>
#include <QQmlApplicationEngine> #include <QQmlApplicationEngine>
#include <QtQml> #include <QtQml>
#include <QSortFilterProxyModel>
#include <QUrl> #include <QUrl>
#include <KLocalizedContext> #include <KLocalizedContext>
#include <KLocalizedString> #include <KLocalizedString>
#include <KCrash> #include <KCrash>
#include <KAboutData> #include <KAboutData>
#include <QQuickWindow>
#include "searchmodel.h" #include "searchmodel.h"
#include "albummodel.h" #include "albummodel.h"
@@ -20,6 +22,7 @@
#include "playlistmodel.h" #include "playlistmodel.h"
#include "playerutils.h" #include "playerutils.h"
#include "library.h" #include "library.h"
#include "blur.h"
#include "asyncdatabase.h" #include "asyncdatabase.h"
@@ -45,18 +48,25 @@ Q_DECL_EXPORT int main(int argc, char *argv[])
qmlRegisterType<VideoInfoExtractor>(URI, 1, 0, "VideoInfoExtractor"); qmlRegisterType<VideoInfoExtractor>(URI, 1, 0, "VideoInfoExtractor");
qmlRegisterType<ArtistModel>(URI, 1, 0, "ArtistModel"); qmlRegisterType<ArtistModel>(URI, 1, 0, "ArtistModel");
qmlRegisterType<PlaylistModel>(URI, 1, 0, "PlaylistModel"); qmlRegisterType<PlaylistModel>(URI, 1, 0, "PlaylistModel");
qmlRegisterUncreatableType<PlaybackHistoryModel>(URI, 1, 0, "PlaybackHistoryModel","");
qmlRegisterType<QSortFilterProxyModel>(URI, 1, 0, "SortFilterModel");
qmlRegisterType<Blur>(URI, 1, 0, "Blur");
qmlRegisterSingletonType<UserPlaylistModel>(URI, 1, 0, "UserPlaylistModel", [](QQmlEngine *, QJSEngine *) { qmlRegisterSingletonType<UserPlaylistModel>(URI, 1, 0, "UserPlaylistModel", [](QQmlEngine *, QJSEngine *) {
return new UserPlaylistModel(); return new UserPlaylistModel();
}); });
qmlRegisterSingletonType<ErrorHandler>(URI, 1, 0, "ErrorHandler", [](QQmlEngine *, QJSEngine *) { qmlRegisterSingletonType<ErrorHandler>(URI, 1, 0, "ErrorHandler", [](QQmlEngine *, QJSEngine *) {
return new ErrorHandler(); return new ErrorHandler();
}); });
qmlRegisterSingletonType<PlayerUtils>(URI, 1, 0, "PlayerUtils", [](QQmlEngine *, QJSEngine *) { qmlRegisterSingletonType<PlayerUtils>(URI, 1, 0, "PlayerUtils", [](QQmlEngine *, QJSEngine *) {
return new PlayerUtils(); return new PlayerUtils();
}); });
qmlRegisterSingletonInstance<Library>(URI, 1, 0, "Library", &Library::instance()); qmlRegisterSingletonInstance<Library>(URI, 1, 0, "Library", &Library::instance());
qmlRegisterType<ThumbnailSource>(URI, 1, 0, "ThumbnailSource"); qmlRegisterType<ThumbnailSource>(URI, 1, 0, "ThumbnailSource");
qmlRegisterAnonymousType<FavouriteWatcher>(URI, 1); qmlRegisterAnonymousType<FavouriteWatcher>(URI, 1);
qmlRegisterAnonymousType<WasPlayedWatcher>(URI, 1);
engine.rootContext()->setContextObject(new KLocalizedContext(&engine)); engine.rootContext()->setContextObject(new KLocalizedContext(&engine));
engine.load(QUrl(QStringLiteral("qrc:///main.qml"))); engine.load(QUrl(QStringLiteral("qrc:///main.qml")));
+11 -1
View File
@@ -39,7 +39,9 @@ QHash<int, QByteArray> PlaylistModel::roleNames() const
return { return {
{Title, "title"}, {Title, "title"},
{Artists, "artists"}, {Artists, "artists"},
{VideoId, "videoId"} {VideoId, "videoId"},
{ThumbnailUrl, "thumbnailUrl"},
{ArtistsDisplayString, "artistsDisplayString"}
}; };
} }
@@ -55,6 +57,14 @@ QVariant PlaylistModel::data(const QModelIndex &index, int role) const
return QString::fromStdString(*m_playlist.tracks[index.row()].video_id); return QString::fromStdString(*m_playlist.tracks[index.row()].video_id);
} }
return {}; return {};
case ThumbnailUrl:
if (!m_playlist.tracks[index.row()].thumbnails.empty()) {
return QString::fromStdString(m_playlist.tracks[index.row()].thumbnails.front().url);
} else {
return {};
}
case ArtistsDisplayString:
return PlaylistUtils::artistsToString(m_playlist.tracks[index.row()].artists);
} }
Q_UNREACHABLE(); Q_UNREACHABLE();
+3 -1
View File
@@ -26,7 +26,9 @@ public:
enum Role { enum Role {
Title, Title,
Artists, Artists,
VideoId VideoId,
ThumbnailUrl,
ArtistsDisplayString
}; };
int rowCount(const QModelIndex &parent) const override; int rowCount(const QModelIndex &parent) const override;
+9 -1
View File
@@ -1,5 +1,5 @@
<!-- <!--
SPDX-FileCopyrightText: 2021 Jonah Brüchert <[email protected]> SPDX-FileCopyrightText: 2022 Jonah Brüchert <[email protected]>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
--> -->
@@ -18,5 +18,13 @@ SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted
<file alias="MaximizedPlayerPage.qml">contents/ui/MaximizedPlayerPage.qml</file> <file alias="MaximizedPlayerPage.qml">contents/ui/MaximizedPlayerPage.qml</file>
<file>migrations/2022-05-20-194850_init/down.sql</file> <file>migrations/2022-05-20-194850_init/down.sql</file>
<file>migrations/2022-05-20-194850_init/up.sql</file> <file>migrations/2022-05-20-194850_init/up.sql</file>
<file alias="PlaybackHistory.qml">contents/ui/PlaybackHistory.qml</file>
<file alias="SongMenu.qml">contents/ui/SongMenu.qml</file>
<file alias="ListHeader.qml">contents/ui/ListHeader.qml</file>
<file alias="RoundedImage.qml">contents/ui/RoundedImage.qml</file>
<file alias="Sidebar.qml">contents/ui/Sidebar.qml</file>
<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>
</qresource> </qresource>
</RCC> </RCC>
+23 -1
View File
@@ -3,6 +3,9 @@
// SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
#include "searchmodel.h" #include "searchmodel.h"
#include "playlistutils.h"
#include <ranges>
SearchModel::SearchModel(QObject *parent) SearchModel::SearchModel(QObject *parent)
: AbstractYTMusicModel(parent) : AbstractYTMusicModel(parent)
@@ -21,6 +24,7 @@ SearchModel::SearchModel(QObject *parent)
beginResetModel(); beginResetModel();
setLoading(false); setLoading(false);
m_searchResults = results; m_searchResults = results;
endResetModel(); endResetModel();
}); });
}); });
@@ -117,6 +121,22 @@ QVariant SearchModel::data(const QModelIndex &index, int role) const
return QString(); return QString();
}, m_searchResults.at(index.row())); }, m_searchResults.at(index.row()));
case ThumbnailUrl:
return std::visit([&](auto &&arg) {
if (!arg.thumbnails.empty()) {
return QString::fromStdString(arg.thumbnails.front().url);
}
return QString();
}, m_searchResults.at(index.row()));
case ArtistsDisplayString:
return QVariant::fromValue(std::visit([&](auto&& arg) {
using T = std::decay_t<decltype(arg)>;
if constexpr (std::is_same_v<T, search::Song> || std::is_same_v<T, search::Video> || std::is_same_v<T, search::Album>) {
return PlaylistUtils::artistsToString(arg.artists);
}
return QString();
}, m_searchResults.at(index.row())));
} }
Q_UNREACHABLE(); Q_UNREACHABLE();
@@ -131,7 +151,9 @@ QHash<int, QByteArray> SearchModel::roleNames() const
{Type, "type"}, {Type, "type"},
{VideoId, "videoId"}, {VideoId, "videoId"},
{Artists, "artists"}, {Artists, "artists"},
{ArtistsDisplayString, "artistsDisplayString"},
{RadioPlaylistId, "radioPlaylistId"}, {RadioPlaylistId, "radioPlaylistId"},
{ThumbnailUrl, "thumbnailUrl"}
}; };
} }
@@ -153,7 +175,7 @@ void SearchModel::triggerItem(int row)
if constexpr (std::is_same_v<T, search::Album>) { if constexpr (std::is_same_v<T, search::Album>) {
Q_EMIT openAlbum(QString::fromStdString(arg.browse_id)); Q_EMIT openAlbum(QString::fromStdString(arg.browse_id));
} else if constexpr (std::is_same_v<T, search::Artist>) { } else if constexpr (std::is_same_v<T, search::Artist>) {
Q_EMIT openArtist(QString::fromStdString(arg.browse_id)); Q_EMIT openArtist(QString::fromStdString(arg.browse_id), QString::fromStdString(arg.radio_id.value_or("")), QString::fromStdString(arg.shuffle_id.value_or("")));
} else if constexpr (std::is_same_v<T, search::Playlist>) { } else if constexpr (std::is_same_v<T, search::Playlist>) {
Q_EMIT openPlaylist(QString::fromStdString(arg.browse_id)); Q_EMIT openPlaylist(QString::fromStdString(arg.browse_id));
} else if constexpr (std::is_same_v<T, search::Song>) { } else if constexpr (std::is_same_v<T, search::Song>) {
+4 -2
View File
@@ -19,6 +19,7 @@ class SearchModel : public AbstractYTMusicModel
public: public:
enum Type { enum Type {
Artist, Artist,
ArtistsDisplayString,
Album, Album,
Playlist, Playlist,
Song, Song,
@@ -31,7 +32,8 @@ public:
Type, Type,
VideoId, VideoId,
Artists, Artists,
RadioPlaylistId RadioPlaylistId,
ThumbnailUrl
}; };
explicit SearchModel(QObject *parent = nullptr); explicit SearchModel(QObject *parent = nullptr);
@@ -47,7 +49,7 @@ public:
Q_INVOKABLE void triggerItem(int row); Q_INVOKABLE void triggerItem(int row);
Q_SIGNAL void openAlbum(const QString &browseId); Q_SIGNAL void openAlbum(const QString &browseId);
Q_SIGNAL void openArtist(const QString &browseId); Q_SIGNAL void openArtist(const QString &browseId,const QString &radioId, const QString &shuffleId);
Q_SIGNAL void openPlaylist(const QString &browseId); Q_SIGNAL void openPlaylist(const QString &browseId);
Q_SIGNAL void openSong(const QString &videoId); Q_SIGNAL void openSong(const QString &videoId);
Q_SIGNAL void openVideo(const QString &videoId, const QString &title); Q_SIGNAL void openVideo(const QString &videoId, const QString &title);
+90 -1
View File
@@ -11,6 +11,8 @@
#include <QRandomGenerator> #include <QRandomGenerator>
#include <QFutureWatcher> #include <QFutureWatcher>
#include <iostream>
#include "playlistutils.h" #include "playlistutils.h"
UserPlaylistModel::UserPlaylistModel(QObject *parent) UserPlaylistModel::UserPlaylistModel(QObject *parent)
@@ -55,6 +57,15 @@ UserPlaylistModel::UserPlaylistModel(QObject *parent)
connect(&YTMusicThread::instance().get(), &AsyncYTMusic::errorOccurred, this, [this] { connect(&YTMusicThread::instance().get(), &AsyncYTMusic::errorOccurred, this, [this] {
setLoading(false); setLoading(false);
}); });
connect(this, &UserPlaylistModel::currentVideoIdChanged, this, [this]() {
// Clear lyrics, so we won't display old ones if the next song doesn't have any.
m_lyrics = {};
Q_EMIT lyricsChanged();
if (!m_currentVideoId.isEmpty()) {
fetchLyrics(m_currentVideoId);
}
});
} }
int UserPlaylistModel::rowCount(const QModelIndex &parent) const int UserPlaylistModel::rowCount(const QModelIndex &parent) const
@@ -71,6 +82,8 @@ QVariant UserPlaylistModel::data(const QModelIndex &index, int role) const
return QString::fromStdString(m_playlist.tracks[index.row()].video_id); return QString::fromStdString(m_playlist.tracks[index.row()].video_id);
case Artists: case Artists:
return PlaylistUtils::artistsToString(m_playlist.tracks[index.row()].artists); return PlaylistUtils::artistsToString(m_playlist.tracks[index.row()].artists);
case Album:
return QString::fromStdString(m_playlist.tracks[index.row()].album.value_or(meta::Album()).name);
case IsCurrent: case IsCurrent:
return m_playlist.tracks[index.row()].video_id == m_currentVideoId.toStdString(); return m_playlist.tracks[index.row()].video_id == m_currentVideoId.toStdString();
} }
@@ -86,7 +99,8 @@ QHash<int, QByteArray> UserPlaylistModel::roleNames() const
{Title, "title"}, {Title, "title"},
{VideoId, "videoId"}, {VideoId, "videoId"},
{Artists, "artists"}, {Artists, "artists"},
{IsCurrent, "isCurrent"} {Album, "album"},
{IsCurrent, "isCurrent"},
}; };
} }
@@ -115,6 +129,20 @@ QString UserPlaylistModel::nextVideoId() const
return QString::fromStdString((currentTrack + 1)->video_id); 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 QString UserPlaylistModel::currentVideoId() const
{ {
return m_currentVideoId; return m_currentVideoId;
@@ -127,6 +155,18 @@ void UserPlaylistModel::setCurrentVideoId(const QString &videoId)
emitCurrentVideoChanged(old); emitCurrentVideoChanged(old);
Q_EMIT currentVideoIdChanged(); Q_EMIT currentVideoIdChanged();
Q_EMIT canSkipChanged(); Q_EMIT canSkipChanged();
Q_EMIT canSkipBackChanged();
}
int UserPlaylistModel::currentIndex() 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();
});
return std::distance(m_playlist.tracks.begin(), currentTrack);
} }
bool UserPlaylistModel::canSkip() const bool UserPlaylistModel::canSkip() const
@@ -140,12 +180,32 @@ bool UserPlaylistModel::canSkip() const
&& currentTrackIt != m_playlist.tracks.end() && currentTrackIt != m_playlist.tracks.end()
&& !m_playlist.tracks.empty(); && !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() void UserPlaylistModel::next()
{ {
setCurrentVideoId(nextVideoId()); setCurrentVideoId(nextVideoId());
Q_EMIT currentVideoIdChanged(); Q_EMIT currentVideoIdChanged();
Q_EMIT canSkipChanged(); 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) void UserPlaylistModel::skipTo(const QString &videoId)
@@ -155,6 +215,8 @@ void UserPlaylistModel::skipTo(const QString &videoId)
emitCurrentVideoChanged(old); emitCurrentVideoChanged(old);
Q_EMIT currentVideoIdChanged(); Q_EMIT currentVideoIdChanged();
Q_EMIT canSkipChanged(); Q_EMIT canSkipChanged();
Q_EMIT canSkipBackChanged();
} }
void UserPlaylistModel::playNext(const QString &videoId, const QString &title, const std::vector<meta::Artist> &artists) void UserPlaylistModel::playNext(const QString &videoId, const QString &title, const std::vector<meta::Artist> &artists)
@@ -175,6 +237,8 @@ void UserPlaylistModel::playNext(const QString &videoId, const QString &title, c
endInsertRows(); endInsertRows();
setCurrentVideoId(videoId); setCurrentVideoId(videoId);
Q_EMIT canSkipChanged(); Q_EMIT canSkipChanged();
Q_EMIT canSkipBackChanged();
return; return;
} }
@@ -184,6 +248,8 @@ void UserPlaylistModel::playNext(const QString &videoId, const QString &title, c
m_playlist.tracks.push_back(std::move(track)); m_playlist.tracks.push_back(std::move(track));
endInsertRows(); endInsertRows();
Q_EMIT canSkipChanged(); Q_EMIT canSkipChanged();
Q_EMIT canSkipBackChanged();
return; return;
} }
@@ -192,6 +258,8 @@ void UserPlaylistModel::playNext(const QString &videoId, const QString &title, c
m_playlist.tracks.insert(currentIt + 1, std::move(track)); m_playlist.tracks.insert(currentIt + 1, std::move(track));
endInsertRows(); endInsertRows();
Q_EMIT canSkipChanged(); Q_EMIT canSkipChanged();
Q_EMIT canSkipBackChanged();
} }
void UserPlaylistModel::append(const QString &videoId, const QString &title, const std::vector<meta::Artist> &artists) void UserPlaylistModel::append(const QString &videoId, const QString &title, const std::vector<meta::Artist> &artists)
@@ -218,6 +286,8 @@ void UserPlaylistModel::clear()
setCurrentVideoId({}); setCurrentVideoId({});
Q_EMIT canSkipChanged(); Q_EMIT canSkipChanged();
Q_EMIT canSkipBackChanged();
} }
void UserPlaylistModel::remove(const QString &videoId) void UserPlaylistModel::remove(const QString &videoId)
@@ -235,6 +305,8 @@ void UserPlaylistModel::remove(const QString &videoId)
endRemoveRows(); endRemoveRows();
Q_EMIT canSkipChanged(); Q_EMIT canSkipChanged();
Q_EMIT canSkipBackChanged();
} }
void UserPlaylistModel::shufflePlaylist() void UserPlaylistModel::shufflePlaylist()
@@ -271,11 +343,28 @@ void UserPlaylistModel::emitCurrentVideoChanged(const QString &oldVideoId)
Q_EMIT dataChanged(index(newIndex), index(newIndex), {IsCurrent}); Q_EMIT dataChanged(index(newIndex), index(newIndex), {IsCurrent});
} }
void UserPlaylistModel::fetchLyrics(const QString &videoId)
{
auto future = YTMusicThread::instance()->fetchWatchPlaylist(videoId);
connectFuture(future, this, [=, this](const auto &playlist) {
if (playlist.lyrics) {
connectFuture(YTMusicThread::instance()->fetchLyrics(QString::fromStdString(*playlist.lyrics)), this, [=, this](const auto &lyrics) {
m_lyrics = lyrics;
Q_EMIT lyricsChanged();
});
}
});
}
bool UserPlaylistModel::shuffle() const bool UserPlaylistModel::shuffle() const
{ {
return m_shuffle; return m_shuffle;
} }
QString UserPlaylistModel::lyrics() const {
return QString::fromStdString(m_lyrics.lyrics);
}
void UserPlaylistModel::setShuffle(bool shuffle) void UserPlaylistModel::setShuffle(bool shuffle)
{ {
m_shuffle = shuffle; m_shuffle = shuffle;
+22 -1
View File
@@ -4,6 +4,7 @@
#pragma once #pragma once
#include <QAbstractListModel> #include <QAbstractListModel>
#include <QFuture>
#include <ytmusic.h> #include <ytmusic.h>
@@ -20,15 +21,20 @@ class UserPlaylistModel : public AbstractYTMusicModel
// output // output
Q_PROPERTY(QString currentVideoId READ currentVideoId NOTIFY currentVideoIdChanged) 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 canSkip READ canSkip NOTIFY canSkipChanged)
Q_PROPERTY(bool canSkipBack READ canSkipBack NOTIFY canSkipBackChanged)
Q_PROPERTY(QString lyrics READ lyrics NOTIFY lyricsChanged)
public: public:
enum Role { enum Role {
Title = Qt::UserRole + 1, Title = Qt::UserRole + 1,
VideoId, VideoId,
Artists, Artists,
IsCurrent Album,
IsCurrent,
}; };
Q_ENUM(Role);
explicit UserPlaylistModel(QObject *parent = nullptr); explicit UserPlaylistModel(QObject *parent = nullptr);
@@ -41,13 +47,20 @@ public:
Q_SIGNAL void initialVideoIdChanged(); Q_SIGNAL void initialVideoIdChanged();
QString nextVideoId() const; QString nextVideoId() const;
QString previousVideoId() const;
QString currentVideoId() const; QString currentVideoId() const;
void setCurrentVideoId(const QString &videoId); void setCurrentVideoId(const QString &videoId);
Q_SIGNAL void currentVideoIdChanged(); Q_SIGNAL void currentVideoIdChanged();
int currentIndex() const;
bool canSkip() const; bool canSkip() const;
bool canSkipBack() const;
Q_SIGNAL void canSkipChanged(); Q_SIGNAL void canSkipChanged();
Q_SIGNAL void canSkipBackChanged();
QString playlistId() const; QString playlistId() const;
void setPlaylistId(const QString &playlistId); void setPlaylistId(const QString &playlistId);
@@ -57,7 +70,12 @@ public:
bool shuffle() const; bool shuffle() const;
Q_SIGNAL void shuffleChanged(); Q_SIGNAL void shuffleChanged();
QString lyrics() const;
Q_SIGNAL void lyricsChanged();
Q_INVOKABLE void next(); Q_INVOKABLE void next();
Q_INVOKABLE void previous();
Q_INVOKABLE void skipTo(const QString &videoId); 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 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); Q_INVOKABLE void append(const QString &videoId, const QString &title, const std::vector<meta::Artist> &artists);
@@ -68,10 +86,13 @@ public:
private: private:
void emitCurrentVideoChanged(const QString &oldVideoId); void emitCurrentVideoChanged(const QString &oldVideoId);
void fetchLyrics(const QString &videoId);
QString m_initialVideoId; QString m_initialVideoId;
QString m_playlistId; QString m_playlistId;
QString m_currentVideoId; QString m_currentVideoId;
bool m_shuffle = false; bool m_shuffle = false;
watch::Playlist m_playlist; watch::Playlist m_playlist;
::Lyrics m_lyrics;
}; };
+36 -15
View File
@@ -5,6 +5,7 @@
#include "ytmusic.h" #include "ytmusic.h"
#include <algorithm> #include <algorithm>
#include <iostream>
#include <pybind11/embed.h> #include <pybind11/embed.h>
#include <pybind11/stl.h> #include <pybind11/stl.h>
@@ -21,7 +22,7 @@ void pyPrintPretty(py::handle obj) {
#define UNEXPORT __attribute__ ((visibility("hidden"))) #define UNEXPORT __attribute__ ((visibility("hidden")))
constexpr auto TESTED_YTMUSICAPI_VERSION = "0.22.0"; constexpr auto TESTED_YTMUSICAPI_VERSION = "0.25.0";
struct UNEXPORT YTMusicPrivate { struct UNEXPORT YTMusicPrivate {
py::scoped_interpreter guard {}; py::scoped_interpreter guard {};
@@ -40,10 +41,16 @@ struct UNEXPORT YTMusicPrivate {
// Some of the called python code randomly fails if the encoding is not utf8 // Some of the called python code randomly fails if the encoding is not utf8
setenv("LC_ALL", "en_US.utf8", true); setenv("LC_ALL", "en_US.utf8", true);
const auto version = module.attr("_version").attr("__version__").cast<std::string>(); auto oldVersion = module.attr("__dict__").contains("_version");
if (version != TESTED_YTMUSICAPI_VERSION) { if (oldVersion) {
std::cerr << "Running with untested version of ytmusicapi." << std::endl; 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; std::cerr << "The currently tested and supported version is " << TESTED_YTMUSICAPI_VERSION << std::endl;
} else {
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;
}
} }
} }
@@ -137,7 +144,7 @@ album::Track extract_album_track(py::handle track) {
video_info::Format extract_format(py::handle format) { video_info::Format extract_format(py::handle format) {
return { return {
optional_key<int>(format, "quality"), optional_key<float>(format, "quality"),
format["url"].cast<std::string>(), format["url"].cast<std::string>(),
format["vcodec"].cast<std::string>(), format["vcodec"].cast<std::string>(),
format["acodec"].cast<std::string>() format["acodec"].cast<std::string>()
@@ -268,7 +275,8 @@ std::optional<search::SearchResultItem> extract_search_result(py::handle result)
result["videoId"].cast<std::string>(), result["videoId"].cast<std::string>(),
result["title"].cast<std::string>(), result["title"].cast<std::string>(),
extract_py_list<meta::Artist>(result["artists"]), extract_py_list<meta::Artist>(result["artists"]),
result["views"].cast<std::string>() result["views"].cast<std::string>(),
extract_py_list<meta::Thumbnail>(result["thumbnails"])
}, },
result["duration"].cast<std::string>() result["duration"].cast<std::string>()
}; };
@@ -278,7 +286,8 @@ std::optional<search::SearchResultItem> extract_search_result(py::handle result)
result["videoId"].cast<std::string>(), result["videoId"].cast<std::string>(),
result["title"].cast<std::string>(), result["title"].cast<std::string>(),
extract_py_list<meta::Artist>(result["artists"]), extract_py_list<meta::Artist>(result["artists"]),
result["duration"].cast<std::string>() result["duration"].cast<std::string>(),
extract_py_list<meta::Thumbnail>(result["thumbnails"])
}, },
extract_meta_album(result["album"]), extract_meta_album(result["album"]),
result["isExplicit"].cast<bool>() result["isExplicit"].cast<bool>()
@@ -290,21 +299,24 @@ std::optional<search::SearchResultItem> extract_search_result(py::handle result)
result["type"].cast<std::string>(), result["type"].cast<std::string>(),
extract_py_list<meta::Artist>(result["artists"]), extract_py_list<meta::Artist>(result["artists"]),
result["year"].cast<std::optional<std::string>>(), result["year"].cast<std::optional<std::string>>(),
result["isExplicit"].cast<bool>() result["isExplicit"].cast<bool>(),
extract_py_list<meta::Thumbnail>(result["thumbnails"])
}; };
} else if (resultType == "playlist") { } else if (resultType == "playlist") {
return search::Playlist { return search::Playlist {
result["browseId"].cast<std::string>(), result["browseId"].cast<std::string>(),
result["title"].cast<std::string>(), result["title"].cast<std::string>(),
result["author"].cast<std::string>(), result["author"].cast<std::string>(),
result["itemCount"].cast<std::string>() result["itemCount"].cast<std::string>(),
extract_py_list<meta::Thumbnail>(result["thumbnails"])
}; };
} else if (resultType == "artist") { } else if (resultType == "artist") {
return search::Artist { return search::Artist {
result["browseId"].cast<std::string>(), result["browseId"].cast<std::string>(),
result["artist"].cast<std::string>(), result["artist"].cast<std::string>(),
optional_key<std::string>(result, "shuffleId"), optional_key<std::string>(result, "shuffleId"),
optional_key<std::string>(result, "radioId") optional_key<std::string>(result, "radioId"),
extract_py_list<meta::Thumbnail>(result["thumbnails"])
}; };
} else { } else {
std::cerr << "Warning: Unsupported search result type found" << std::endl; std::cerr << "Warning: Unsupported search result type found" << std::endl;
@@ -358,7 +370,7 @@ artist::Artist YTMusic::get_artist(const std::string &channel_id) const
artist["views"].cast<std::optional<std::string>>(), artist["views"].cast<std::optional<std::string>>(),
artist["name"].cast<std::string>(), artist["name"].cast<std::string>(),
artist["channelId"].cast<std::string>(), artist["channelId"].cast<std::string>(),
artist["subscribers"].cast<std::string>(), artist["subscribers"].cast<std::optional<std::string>>(),
artist["subscribed"].cast<bool>(), artist["subscribed"].cast<bool>(),
extract_py_list<meta::Thumbnail>(artist["thumbnails"]), extract_py_list<meta::Thumbnail>(artist["thumbnails"]),
extract_artist_section<artist::Artist::Song>(artist, "songs"), extract_artist_section<artist::Artist::Song>(artist, "songs"),
@@ -473,16 +485,25 @@ video_info::VideoInfo YTMusic::extract_video_info(const std::string &video_id) c
watch::Playlist YTMusic::get_watch_playlist(const std::optional<std::string> &videoId, watch::Playlist YTMusic::get_watch_playlist(const std::optional<std::string> &videoId,
const std::optional<std::string> &playlistId, const std::optional<std::string> &playlistId,
int limit, int limit) const
const std::optional<std::string> &params) const
{ {
const auto playlist = d->get_ytmusic().attr("get_watch_playlist")("videoId"_a = videoId, const auto playlist = d->get_ytmusic().attr("get_watch_playlist")("videoId"_a = videoId,
"playlistId"_a = playlistId, "playlistId"_a = playlistId,
"limit"_a = py::int_(limit), "limit"_a = py::int_(limit));
"params"_a = params);
return { return {
extract_py_list<watch::Playlist::Track>(playlist["tracks"]), extract_py_list<watch::Playlist::Track>(playlist["tracks"]),
playlist["lyrics"].cast<std::optional<std::string>>() playlist["lyrics"].cast<std::optional<std::string>>()
}; };
} }
Lyrics YTMusic::get_lyrics(const std::string &browse_id) const
{
auto lyrics = d->get_ytmusic().attr("get_lyrics")(browse_id);
return {
lyrics["source"].cast<std::string>(),
lyrics["lyrics"].cast<std::string>()
};
}
+14 -4
View File
@@ -44,6 +44,7 @@ struct Media {
std::string title; std::string title;
std::vector<meta::Artist> artists; std::vector<meta::Artist> artists;
std::string duration; std::string duration;
std::vector<meta::Thumbnail> thumbnails;
}; };
struct Video : public Media { struct Video : public Media {
@@ -55,6 +56,7 @@ struct Playlist {
std::string title; std::string title;
std::string author; std::string author;
std::string item_count; std::string item_count;
std::vector<meta::Thumbnail> thumbnails;
}; };
struct Song : public Media { struct Song : public Media {
@@ -69,6 +71,7 @@ struct Album {
std::vector<meta::Artist> artists; std::vector<meta::Artist> artists;
std::optional<std::string> year; std::optional<std::string> year;
bool is_explicit; bool is_explicit;
std::vector<meta::Thumbnail> thumbnails;
}; };
struct Artist { struct Artist {
@@ -76,6 +79,7 @@ struct Artist {
std::string artist; std::string artist;
std::optional<std::string> shuffle_id; std::optional<std::string> shuffle_id;
std::optional<std::string> radio_id; std::optional<std::string> radio_id;
std::vector<meta::Thumbnail> thumbnails;
}; };
using SearchResultItem = std::variant<Video, Playlist, Song, Album, Artist>; using SearchResultItem = std::variant<Video, Playlist, Song, Album, Artist>;
@@ -131,7 +135,7 @@ struct Artist {
std::optional<std::string> views; std::optional<std::string> views;
std::string name; std::string name;
std::string channel_id; std::string channel_id;
std::string subscribers; std::optional<std::string> subscribers;
bool subscribed; bool subscribed;
std::vector<meta::Thumbnail> thumbnails; std::vector<meta::Thumbnail> thumbnails;
std::optional<Section<Song>> songs; std::optional<Section<Song>> songs;
@@ -230,7 +234,7 @@ struct Playlist {
namespace video_info { namespace video_info {
struct Format { struct Format {
std::optional<int> quality; std::optional<float> quality;
std::string url; std::string url;
std::string vcodec; std::string vcodec;
std::string acodec; std::string acodec;
@@ -268,6 +272,11 @@ struct Playlist {
}; };
} }
struct Lyrics {
std::string source;
std::string lyrics;
};
class YTMusic class YTMusic
{ {
public: public:
@@ -306,8 +315,9 @@ public:
/// https://ytmusicapi.readthedocs.io/en/latest/reference.html#ytmusicapi.YTMusic.get_watch_playlist /// https://ytmusicapi.readthedocs.io/en/latest/reference.html#ytmusicapi.YTMusic.get_watch_playlist
watch::Playlist get_watch_playlist(const std::optional<std::string> &videoId = std::nullopt, watch::Playlist get_watch_playlist(const std::optional<std::string> &videoId = std::nullopt,
const std::optional<std::string> &playlistId = std::nullopt, const std::optional<std::string> &playlistId = std::nullopt,
int limit = 25, int limit = 25) const;
const std::optional<std::string> &params = std::nullopt) const;
Lyrics get_lyrics(const std::string &browse_id) const;
// TODO wrap more methods // TODO wrap more methods