Compare commits

..
Author SHA1 Message Date
Jonah Brüchert f4b2f06484 Small library cleanup 2023-08-07 01:54:55 +02:00
Jonah Brüchert 89dda4c28a Filter search history in the database
Allows to easily limit the default number of history entries.
Previously, limiting the number of sql results would not have worked,
since the filter was being applied on top of them.
2023-08-07 01:45:54 +02:00
Jonah Brüchert e82fb652ee Improve performance of search popup with new local search model 2023-08-07 01:32:07 +02:00
Bart Ribbers 2894ab83e2 Allow building with KF6 2023-08-06 21:32:23 +02:00
Jonah Brüchert 7677ba8bf5 Update ytmusicapi to 1.1.1 2023-08-06 16:37:54 +02:00
Jonah Brüchert 678111a144 Fetch up too 100 search results 2023-08-06 16:36:39 +02:00
l10n daemon script 825ab78b46 GIT_SILENT Sync po/docbooks with svn 2023-08-03 02:04:21 +00:00
l10n daemon script b7ed9d6c2d GIT_SILENT Sync po/docbooks with svn 2023-07-31 02:05:26 +00:00
l10n daemon script cb9b3ef479 GIT_SILENT Sync po/docbooks with svn 2023-07-29 01:45:21 +00:00
l10n daemon script d8f30ae36f GIT_SILENT Sync po/docbooks with svn 2023-07-24 08:59:52 +00:00
l10n daemon script 930c1506a0 GIT_SILENT Sync po/docbooks with svn 2023-07-19 02:31:36 +00:00
Albert Astals Cid aa393e4278 GIT_SILENT Upgrade release service version to 23.11.70. 2023-07-17 12:49:23 +02:00
19 changed files with 243 additions and 293 deletions

No files matched your search

-3
View File
@@ -21,8 +21,5 @@ License: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
Files: logo.png
org.kde.audiotube.svg
snap/gui/logo.png
snapcraft.yaml
Copyright: 2021 Mathis Brüchert <[email protected]>
2023 Scarlett Moore <[email protected]>
License: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
+14 -7
View File
@@ -6,21 +6,28 @@ cmake_minimum_required(VERSION 3.16.0)
# KDE Applications version, managed by release script.
set(RELEASE_SERVICE_VERSION_MAJOR "23")
set(RELEASE_SERVICE_VERSION_MINOR "08")
set(RELEASE_SERVICE_VERSION_MICRO "2")
set(RELEASE_SERVICE_VERSION_MINOR "11")
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)
set(QT5_MIN_VERSION 5.15)
set(KF5_MIN_VERSION 5.81)
if (QT_MAJOR_VERSION STREQUAL "6")
set(QT_MIN_VERSION "6.4.0")
set(KF_MIN_VERSION "5.240.0")
set(KF_MAJOR_VERSION "6")
else()
set(QT_MIN_VERSION "5.15")
set(KF_MIN_VERSION "5.81.0")
set(KF_MAJOR_VERSION "5")
endif()
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(ECM ${KF5_MIN_VERSION} REQUIRED NO_MODULE)
find_package(ECM ${KF_MIN_VERSION} REQUIRED NO_MODULE)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
@@ -39,8 +46,8 @@ ecm_setup_version(${PROJECT_VERSION}
kde_enable_exceptions()
find_package(Qt${QT_MAJOR_VERSION} ${QT5_MIN_VERSION} REQUIRED COMPONENTS Core Gui Qml QuickControls2 Svg Sql Widgets Concurrent DBus)
find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS Kirigami2 I18n CoreAddons Crash WindowSystem)
find_package(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} REQUIRED COMPONENTS Core Gui Qml QuickControls2 Svg Sql Widgets Concurrent DBus)
find_package(KF${KF_MAJOR_VERSION} ${KF_MIN_VERSION} REQUIRED COMPONENTS Kirigami2 I18n CoreAddons Crash WindowSystem)
find_package(pybind11 REQUIRED)
find_package(Ytdlp REQUIRED RUNTIME)
find_package(YTMusicAPI 1.0.2 REQUIRED RUNTIME)
+4 -4
View File
@@ -12,8 +12,8 @@
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/9d/19/59961b522e6757f0c9097e4493fa906031b95b3ebe9360b2c3083561a6b4/certifi-2023.5.7-py3-none-any.whl",
"sha256": "c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"
"url": "https://files.pythonhosted.org/packages/4c/dd/2234eab22353ffc7d94e8d13177aaa050113286e93e7b40eae01fbf7c3d9/certifi-2023.7.22-py3-none-any.whl",
"sha256": "92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"
},
{
"type": "file",
@@ -32,8 +32,8 @@
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/65/9b/21628ca5bcf40f58c33f0fbb4927a1bb91e12f3c33a3cf8e29e03f6bc1d1/yt_dlp-2023.6.22-py2.py3-none-any.whl",
"sha256": "c559885322f7f492c1e7fc8f5a59e2a72e47719b59575599cf8b0e69ea70d0a8"
"url": "https://files.pythonhosted.org/packages/5c/da/ef08140cea3392288a8f6cd60f6f12510a4c5776eead53e90151f139af19/yt_dlp-2023.7.6-py2.py3-none-any.whl",
"sha256": "b33b3f68751f33dd8290f1f61f7a011679b3b512aa223df3bff496688bc0bd19"
}
]
}
+8 -8
View File
@@ -7,13 +7,13 @@
"sources": [
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/9d/19/59961b522e6757f0c9097e4493fa906031b95b3ebe9360b2c3083561a6b4/certifi-2023.5.7-py3-none-any.whl",
"sha256": "c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"
"url": "https://files.pythonhosted.org/packages/4c/dd/2234eab22353ffc7d94e8d13177aaa050113286e93e7b40eae01fbf7c3d9/certifi-2023.7.22-py3-none-any.whl",
"sha256": "92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/ff/d7/8d757f8bd45be079d76309248845a04f09619a7b17d6dfc8c9ff6433cac2/charset-normalizer-3.1.0.tar.gz",
"sha256": "34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"
"url": "https://files.pythonhosted.org/packages/2a/53/cf0a48de1bdcf6ff6e1c9a023f5f523dfe303e4024f216feac64b6eb7f67/charset-normalizer-3.2.0.tar.gz",
"sha256": "3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"
},
{
"type": "file",
@@ -27,13 +27,13 @@
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/8a/03/ad9306a50d05c166e3456fe810f33cee2b8b2a7a6818ec5d4908c4ec6b36/urllib3-2.0.3-py3-none-any.whl",
"sha256": "48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1"
"url": "https://files.pythonhosted.org/packages/9b/81/62fd61001fa4b9d0df6e31d47ff49cfa9de4af03adecf339c7bc30656b37/urllib3-2.0.4-py3-none-any.whl",
"sha256": "de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/50/1c/24829fa937a3555bf782491669ec74e0afbae5adbd724d5ce1fd542062d1/ytmusicapi-1.1.0-py3-none-any.whl",
"sha256": "d7923e9b789b7107c75bd8e9010640cf99ce08d472f42a9bd9402088acfc4d49"
"url": "https://files.pythonhosted.org/packages/28/e2/35adcefca140b4232387b5d7d119abe69c6d1c86d48c949a720c7ccb8bc7/ytmusicapi-1.1.1-py3-none-any.whl",
"sha256": "0c154a052c8f8e2310a51b1f391aa2ed1a2f6693a7ec343cc47b822de5e95783"
}
]
}
-3
View File
@@ -113,9 +113,6 @@ SPDX-License-Identifier: CC0-1.0
<content_rating type="oars-1.0"/>
<url type="homepage">https://apps.kde.org/en/audiotube</url>
<releases>
<release version="23.08.2" date="2023-10-12"/>
<release version="23.08.1" date="2023-09-14"/>
<release version="23.08.0" date="2023-08-24"/>
<release version="23.04.3" date="2023-07-06"/>
<release version="23.04.2" date="2023-06-08"/>
<release version="23.04.1" date="2023-05-11"/>
+28
View File
@@ -532,3 +532,31 @@ msgstr "Sense títol"
#, kde-format
msgid "No album"
msgstr "Sense àlbum"
#~ msgid "Export"
#~ msgstr "Exporta"
#~ msgid "Import Playlist from Url"
#~ msgstr "Importa una llista de reproducció des d'un URL"
#~ msgid "Import Playlist from File"
#~ msgstr "Importa una llista de reproducció des d'un fitxer"
#~ msgid "Export Playlist"
#~ msgstr "Exporta una llista de reproducció"
#~ msgid "m3u, m3u8 Playlist File (*.m3u *.m3u8)"
#~ msgstr "Fitxer de llista de reproducció m3u, m3u8 (*.m3u *.m3u8)"
#~ msgid "Import Playlists"
#~ msgstr "Importa llistes de reproducció"
#~ msgid "m3u, m3u8 Playlist Files (*.m3u *.m3u8)"
#~ msgstr "Fitxers de llista de reproducció m3u, m3u8 (*.m3u *.m3u8)"
#~ msgid "Saving Failed"
#~ msgstr "Ha fallat en desar"
#~ msgctxt "%1 is the path to a playlist file."
#~ msgid "Failed to Import %1"
#~ msgstr "Ha fallat en importar %1"
+29 -1
View File
@@ -429,7 +429,7 @@ msgstr "Copia l'enllaç"
#: contents/ui/ShareMenu.qml:54 contents/ui/ShareMenu.qml:104
#, kde-format
msgid "Link copied to clipboard"
msgstr "L'enllaç s'ha copiat a dins del porta-retalls"
msgstr "L'enllaç s'ha copiat al porta-retalls"
#: contents/ui/Sidebar.qml:189
#, kde-format
@@ -532,3 +532,31 @@ msgstr "Sense títol"
#, kde-format
msgid "No album"
msgstr "Sense àlbum"
#~ msgid "Export"
#~ msgstr "Exporta"
#~ msgid "Import Playlist from Url"
#~ msgstr "Importa una llista de reproducció des d'un URL"
#~ msgid "Import Playlist from File"
#~ msgstr "Importa una llista de reproducció des d'un fitxer"
#~ msgid "Export Playlist"
#~ msgstr "Exporta una llista de reproducció"
#~ msgid "m3u, m3u8 Playlist File (*.m3u *.m3u8)"
#~ msgstr "Fitxer de llista de reproducció m3u, m3u8 (*.m3u *.m3u8)"
#~ msgid "Import Playlists"
#~ msgstr "Importa llistes de reproducció"
#~ msgid "m3u, m3u8 Playlist Files (*.m3u *.m3u8)"
#~ msgstr "Fitxers de llista de reproducció m3u, m3u8 (*.m3u *.m3u8)"
#~ msgid "Saving Failed"
#~ msgstr "No s'ha pogut guardar"
#~ msgctxt "%1 is the path to a playlist file."
#~ msgid "Failed to Import %1"
#~ msgstr "No s'ha pogut importar %1"
+2 -2
View File
@@ -23,7 +23,7 @@ msgid ""
"Running with untested version of ytmusicapi %1. If you experience errors, "
"please report them to your distribution."
msgstr ""
"Usando unha versión non probada de ytmusicapi, a %1. Informe á súa "
"Estase a usar unha versión non probada de ytmusicapi, a %1. Informe á súa "
"distribución de detecta algún erro."
#: contents/ui/AlbumPage.qml:75 contents/ui/LibraryPage.qml:37
@@ -95,7 +95,7 @@ msgstr "Intérprete"
msgid ""
"Video playback is not supported yet. Do you want to play only the audio of "
"\"%1\"?"
msgstr "Non é posíbel reproducir vídeo. Quere reproducir o son de «%1»?"
msgstr "Non se pode reproducir vídeo. Quere reproducir o son de «%1»?"
#: contents/ui/ArtistPage.qml:148 contents/ui/SearchPage.qml:26
#, kde-format
+47 -47
View File
@@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-07-09 00:59+0000\n"
"PO-Revision-Date: 2023-08-24 21:35+0200\n"
"PO-Revision-Date: 2023-07-30 22:10+0200\n"
"Last-Translator: Karl Ove Hufthammer <[email protected]>\n"
"Language-Team: Norwegian Nynorsk <[email protected]>\n"
"Language: nn\n"
@@ -55,7 +55,7 @@ msgstr "Stokk om"
#: contents/ui/PlaybackHistory.qml:114 contents/ui/PlaylistPage.qml:99
#, kde-format
msgid "Append to queue"
msgstr "Legg i avspelingskøen"
msgstr ""
#: contents/ui/AlbumPage.qml:95 contents/ui/ArtistPage.qml:95
#: contents/ui/PlaylistPage.qml:115
@@ -153,7 +153,7 @@ msgstr "Importer speleliste"
#: contents/ui/dialogs/ImportPlaylistDialog.qml:23
#, kde-format
msgid "Playlist URL (Youtube)"
msgstr "Speleliste-URL (YouTube)"
msgstr ""
#: contents/ui/dialogs/PlaylistDialog.qml:20
#, kde-format
@@ -171,7 +171,7 @@ msgstr "Ny speleliste"
#: contents/ui/dialogs/RenamePlaylistDialog.qml:18
#, kde-format
msgid "Rename playlist"
msgstr "Endra namn på speleliste"
msgstr ""
#: contents/ui/LibraryPage.qml:30 contents/ui/LibraryPage.qml:123
#: contents/ui/NavigationBar.qml:48 contents/ui/NavigationBar.qml:54
@@ -189,7 +189,7 @@ msgstr "Vis alle"
#: contents/ui/LibraryPage.qml:147
#, kde-format
msgid "No Favourites Yet"
msgstr "Ingen favorittar enno"
msgstr ""
#: contents/ui/LibraryPage.qml:215
#, kde-format
@@ -206,7 +206,7 @@ msgstr "Avspela songar"
#: contents/ui/LibraryPage.qml:334
#, kde-format
msgid "No Songs Played Yet"
msgstr "Ingen avspela songar enno"
msgstr ""
#: contents/ui/LibraryPage.qml:391 contents/ui/LocalPlaylistsPage.qml:18
#: contents/ui/LocalPlaylistsPage.qml:79 contents/ui/NavigationBar.qml:75
@@ -218,36 +218,36 @@ msgstr "Spelelister"
#: contents/ui/LibraryPage.qml:430
#, kde-format
msgid "No Playlists Yet"
msgstr "Ingen spelelister enno"
msgstr ""
#: contents/ui/LibraryPage.qml:450 contents/ui/LibraryPage.qml:472
#: contents/ui/LocalPlaylistsPage.qml:33 contents/ui/LocalPlaylistsPage.qml:55
#, kde-format
msgid "Rename"
msgstr "Endra namn"
msgstr ""
#: contents/ui/LibraryPage.qml:459 contents/ui/LibraryPage.qml:480
#: contents/ui/LocalPlaylistsPage.qml:42 contents/ui/LocalPlaylistsPage.qml:63
#, kde-format
msgid "Delete"
msgstr "Slett"
msgstr ""
#: contents/ui/LocalPlaylistPage.qml:21
#, kde-format
msgid "Remove from Playlist"
msgstr "Fjern frå speleliste"
msgstr ""
#: contents/ui/LocalPlaylistPage.qml:79
#, kde-format
msgid "This playlist is still empty"
msgstr "Spelelista er framleis tom"
msgstr ""
#: contents/ui/LocalPlaylistsPage.qml:110
#: contents/ui/LocalPlaylistsPage.qml:133
#: contents/ui/LocalPlaylistsPage.qml:148 contents/ui/PlaylistPage.qml:104
#, kde-format
msgid "Import Playlist"
msgstr "Importer speleliste"
msgstr ""
#: contents/ui/main.qml:110 main.cpp:62
#, kde-format
@@ -257,12 +257,12 @@ msgstr "AudioTube"
#: contents/ui/main.qml:260
#, kde-format
msgid "No song playing"
msgstr "Ingen song vert spela av"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:99
#, kde-format
msgid "Close Maximized Player"
msgstr "Lukk maksimert spelar"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:203
#: contents/ui/MinimizedPlayerControls.qml:94
@@ -273,27 +273,27 @@ msgstr "Inkje medium vert spela av"
#: contents/ui/MaximizedPlayerPage.qml:426
#, kde-format
msgid "Remove from Favourites"
msgstr "Fjern frå favorittar"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:426
#, kde-format
msgid "Add to Favourites"
msgstr "Merk som favoritt"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:451
#, kde-format
msgid "Open Volume Drawer"
msgstr "Opna lydstyrke-skuff"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:559
#, kde-format
msgid "Unmute Audio"
msgstr "Slå av lyddemping"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:559
#, kde-format
msgid "Mute Audio"
msgstr "Demp lyd"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:602
#, kde-format
@@ -303,33 +303,33 @@ msgstr "%1 %"
#: contents/ui/MaximizedPlayerPage.qml:633
#, kde-format
msgid "Hide Lyrics"
msgstr "Gøym songtekst"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:633
#, kde-format
msgid "Show Lyrics"
msgstr "Vis songtekst"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:653 contents/ui/SongMenu.qml:183
#: contents/ui/SongMenu.qml:269
#, kde-format
msgid "Share Song"
msgstr "Del song"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:699
#, kde-format
msgid "Add to a local playlist"
msgstr "Legg til i lokal speleliste"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:736
#, kde-format
msgid "Hide Queue"
msgstr "Gøym avspelingskøen"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:736
#, kde-format
msgid "Show Queue"
msgstr "Vis avspelingskøen"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:956
#: contents/ui/MaximizedPlayerPage.qml:1198
@@ -340,17 +340,17 @@ msgstr "Fjern spor"
#: contents/ui/MaximizedPlayerPage.qml:995
#, kde-format
msgid "Clear Queue"
msgstr "Tøm avspelingskøen"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:1020
#, kde-format
msgid "Shuffle Queue"
msgstr "Stokk om på avspelingskøen"
msgstr ""
#: contents/ui/MaximizedPlayerPage.qml:1050
#, kde-format
msgid "Upcoming Songs"
msgstr "Framtidige songar"
msgstr ""
#: contents/ui/NavigationBar.qml:24 contents/ui/Sidebar.qml:100
#, kde-format
@@ -375,7 +375,7 @@ msgstr "Ingen songar enno"
#: contents/ui/PlaylistPage.qml:110
#, kde-format
msgid "Playlist successfully imported"
msgstr "Spelelista vart importert"
msgstr ""
#: contents/ui/PlaylistPage.qml:131
#, kde-format
@@ -400,7 +400,7 @@ msgstr "Artistar"
#: contents/ui/SearchPage.qml:36
#, kde-format
msgid "Top Results"
msgstr "Toppresultat"
msgstr ""
#: contents/ui/SearchPage.qml:39 playlistimporter.cpp:23
#, kde-format
@@ -415,22 +415,22 @@ msgstr "Ingen samsvarande tidlegare søk"
#: contents/ui/ShareMenu.qml:39
#, kde-format
msgid "Share to"
msgstr "Del til"
msgstr ""
#: contents/ui/ShareMenu.qml:49 contents/ui/ShareMenu.qml:99
#, kde-format
msgid "Copy Link"
msgstr "Kopier lenkje"
msgstr ""
#: contents/ui/ShareMenu.qml:54 contents/ui/ShareMenu.qml:104
#, kde-format
msgid "Link copied to clipboard"
msgstr "Lenkje kopiert til utklippstavla"
msgstr ""
#: contents/ui/Sidebar.qml:189
#, kde-format
msgid "About"
msgstr "Om"
msgstr ""
#: contents/ui/Sidebar.qml:203
#, kde-format
@@ -465,66 +465,66 @@ msgstr "Fjern frå loggen"
#: contents/ui/SongMenu.qml:156 contents/ui/SongMenu.qml:244
#, kde-format
msgid "Add to playlist"
msgstr "Legg til i speleliste"
msgstr ""
#: main.cpp:64
#, kde-format
msgid "YouTube Music Player"
msgstr "YouTube Music-spelar"
msgstr ""
#: main.cpp:66
#, kde-format
msgid "© 2021-2023 Jonah Brüchert, 2021-2023 KDE Community"
msgstr "© 2021–2023 Jonah Brüchert, 2021–2023 KDE-fellesskapet"
msgstr ""
#: main.cpp:67
#, kde-format
msgid "Jonah Brüchert"
msgstr "Jonah Brüchert"
msgstr ""
#: main.cpp:67
#, kde-format
msgid "Maintainer"
msgstr "Vedlikehaldar"
msgstr ""
#: main.cpp:68
#, kde-format
msgid "Mathis Brüchert"
msgstr "Mathis Brüchert"
msgstr ""
#: main.cpp:68
#, kde-format
msgid "Designer"
msgstr "Designar"
msgstr ""
#: main.cpp:69
#, kde-format
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Øystein Steffensen-Alværvik,Karl Ove Hufthammer"
msgstr "Øystein Steffensen-Alværvik"
#: main.cpp:69
#, kde-format
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "[email protected],[email protected]"
msgstr "[email protected]"
#: main.cpp:74
#, kde-format
msgid "Unofficial API for YouTube Music"
msgstr "Uoffisielt API for YouTube Music"
msgstr ""
#: playlistimporter.cpp:23
#, kde-format
msgid "No description"
msgstr "Inga skildring"
msgstr ""
#: playlistimporter.cpp:57
#, kde-format
msgid "No title"
msgstr "Utan tittel"
msgstr ""
#: playlistimporter.cpp:59
#, kde-format
msgid "No album"
msgstr "Ingen album"
msgstr ""
+3 -3
View File
@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: audiotube\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-07-09 00:59+0000\n"
"PO-Revision-Date: 2023-08-20 10:50+0200\n"
"PO-Revision-Date: 2023-05-20 09:19+0200\n"
"Last-Translator: Łukasz Wojniłowicz <[email protected]>\n"
"Language-Team: Polish <[email protected]>\n"
"Language: pl\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
"X-Generator: Lokalize 23.04.2\n"
"X-Generator: Lokalize 22.12.3\n"
#: asyncytmusic.cpp:65
#, kde-format
@@ -378,7 +378,7 @@ msgstr "Jeszcze nie ma tutaj utworów"
#: contents/ui/PlaylistPage.qml:110
#, kde-format
msgid "Playlist successfully imported"
msgstr "Pomyślnie zaimportowano listy odtwarzania"
msgstr ""
#: contents/ui/PlaylistPage.qml:131
#, kde-format
+3 -3
View File
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: kdeorg\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-07-09 00:59+0000\n"
"PO-Revision-Date: 2023-09-16 10:12\n"
"PO-Revision-Date: 2023-08-02 12:41\n"
"Last-Translator: \n"
"Language-Team: Chinese Simplified\n"
"Language: zh_CN\n"
@@ -14,8 +14,8 @@ msgstr ""
"X-Crowdin-Project: kdeorg\n"
"X-Crowdin-Project-ID: 269464\n"
"X-Crowdin-Language: zh-CN\n"
"X-Crowdin-File: /kf5-stable/messages/audiotube/audiotube.pot\n"
"X-Crowdin-File-ID: 41997\n"
"X-Crowdin-File: /kf5-trunk/messages/audiotube/audiotube.pot\n"
"X-Crowdin-File-ID: 25474\n"
#: asyncytmusic.cpp:65
#, kde-format
+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
ytmusicapi==1.1.0
ytmusicapi==1.1.1
yt-dlp
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

-173
View File
@@ -1,173 +0,0 @@
# Trigger rebuild
---
name: audiotube
confinement: strict
grade: stable
base: core22
adopt-info: audiotube
icon: $CRAFT_PROJECT_DIR/snap/gui/logo.png
apps:
audiotube:
# extensions:
# - kde-neon
common-id: org.kde.audiotube.desktop
desktop: usr/share/applications/org.kde.audiotube.desktop
command: usr/bin/audiotube
plugs:
- home
- desktop
- desktop-legacy
- opengl
- wayland
- x11
- audio-playback
- unity7
- network
- network-bind
- network-observe
- browser-support
- network-manager-observe
command-chain:
- snap/command-chain/desktop-launch
assumes:
- snapd2.58.3
compression: lzo
plugs:
desktop:
mount-host-font-cache: false
icon-themes:
interface: content
target: $SNAP/data-dir/icons
default-provider: gtk-common-themes
sound-themes:
interface: content
target: $SNAP/data-dir/sounds
default-provider: gtk-common-themes
kf5-5-110-qt-5-15-10-core22:
content: kf5-5-110-qt-5-15-10-core22-all
interface: content
default-provider: kf5-5-110-qt-5-15-10-core22
target: $SNAP/kf5
environment:
SNAP_DESKTOP_RUNTIME: $SNAP/kf5
QML2_IMPORT_PATH: "$QML2_IMPORT_PATH:$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/qml:$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/qt5/qml:$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/qt5/qml/org/kde/kirigami.2:$SNAP/kf5/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/qt5/qml"
PYTHONPYCACHEPREFIX: "$SNAP_USER_COMMON/.pycache"
PYTHONUSERBASE: $SNAP_USER_COMMON/.local
PIP_USER: 1
PYTHONPATH: "$PYTHONUSERBASE/lib/python3.10/site-packages:$SNAP/lib/python3.10/site-packages:$SNAP/usr/lib/python3/dist-packages"
QT_PLUGIN_PATH: "$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/qt5/plugins:$SNAP/kf5/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/qt5/plugins/kf5:$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/qt5/qml/org/kde/kirigami.2"
QT_QUICK_CONTROLS_STYLE: org.kde.desktop
hooks:
configure:
plugs:
- desktop
command-chain:
- snap/command-chain/hooks-configure-desktop
layout:
/usr/share/X11:
symlink: $SNAP/kf5/usr/share/X11
"/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/alsa-lib":
bind: "$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/alsa-lib"
"/usr/share/alsa":
bind: "$SNAP/usr/share/alsa"
slots:
session-dbus-interface:
interface: dbus
name: org.mpris.MediaPlayer2.AudioTube
bus: session
package-repositories:
- type: apt
components:
- main
suites:
- jammy
key-id: 444DABCF3667D0283F894EDDE6D4736255751E5D
url: http://archive.neon.kde.org/user
key-server: keyserver.ubuntu.com
parts:
kde-neon:
source: /snap/snapcraft/current/share/snapcraft/extensions/desktop/kde-neon
source-type: local
plugin: make
make-parameters:
- PLATFORM_PLUG=kf5-5-110-qt-5-15-10-core22
build-snaps:
- kf5-5-110-qt-5-15-10-core22-sdk
build-environment:
- &id001
PATH: /snap/kf5-5-110-qt-5-15-10-core22-sdk/current/usr/bin${PATH:+:$PATH}
- &id002
XDG_DATA_DIRS: $CRAFT_STAGE/usr/share:/snap/kf5-5-110-qt-5-15-10-core22-sdk/current/usr/share:/usr/share${XDG_DATA_DIRS:+:$XDG_DATA_DIRS}
- &id003
XDG_CONFIG_HOME: $CRAFT_STAGE/etc/xdg:/snap/kf5-5-110-qt-5-15-10-core22-sdk/current/etc/xdg:/etc/xdg${XDG_CONFIG_HOME:+:$XDG_CONFIG_HOME}
- &id004
CRAFT_CMAKE_ARGS: -DCMAKE_FIND_ROOT_PATH=/snap/kf5-5-110-qt-5-15-10-core22-sdk/current${CRAFT_CMAKE_ARGS:+:$CRAFT_CMAKE_ARGS}
audiotube:
after:
- kde-neon
parse-info:
- usr/share/metainfo/org.kde.audiotube.appdata.xml
plugin: cmake
build-packages:
- kirigami2-dev
- libfuturesql-dev
- libpython3.10-dev
- kirigami-addons-dev
- pybind11-dev
- qcoro-qt5-dev
- yt-dlp
- ytmusicapi
stage-packages:
- libkf5kirigami2-5
- libfuturesql
- libpython3.10
- python3-pybind11
- libqcoro5core0
- libsqlite3-0
- yt-dlp
- ytmusicapi
- qml-module-org-kde-kirigami-addons-datetime
- qml-module-org-kde-kirigami-addons-labs-mobileform
- qml-module-org-kde-kirigami-addons-sounds
- qml-module-org-kde-kirigami-addons-treeview
- qml-module-org-kde-purpose
- qml-module-org-kde-qqc2desktopstyle
source: .
source-type: local
cmake-parameters:
- "-DCMAKE_INSTALL_PREFIX=/usr"
- "-DCMAKE_BUILD_TYPE=Release"
- "-DENABLE_TESTING=OFF"
- "-DBUILD_TESTING=OFF"
- "-DKDE_SKIP_TEST_SETTINGS=ON"
- "-DPYBIND11_FINDPYTHON=ON"
- "-DCMAKE_FIND_ROOT_PATH=/snap/kf5-5-110-qt-5-15-10-core22-sdk/current\\;$CRAFT_STAGE\\;/usr"
- "-DKDE_INSTALL_PLUGINDIR=/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/qt5/plugins/"
prime:
- "-usr/lib/*/cmake/*"
- "-usr/include/*"
- "-usr/share/ECM/*"
- "-usr/share/doc/*"
- "-usr/share/man/*"
- "-usr/share/icons/breeze-dark*"
- "-usr/bin/X11"
- "-usr/lib/gcc/$CRAFT_ARCH_TRIPLET_BUILD_FOR/6.0.0"
- "-usr/lib/aspell/*"
- "-usr/share/lintian"
- "-run/pulseaudio-enable-autospawn"
- "-etc/pulse/client.conf.d/01-enable-autospawn.conf"
build-environment:
- *id001
- *id002
- *id003
- *id004
- PYTHONPATH: "$CRAFT_STAGE/lib/python3.10/site-packages:$CRAFT_STAGE/usr/lib/python3/dist-packages"
cleanup:
after:
- kde-neon
- audiotube
plugin: nil
override-prime: |
set -eux
# # Unused libraries found by linter
+5 -8
View File
@@ -40,6 +40,7 @@ Item {
onTextEdited: {
filterText = text
Library.searches.filter = text
if(completionList.count === 0) {
//no matching search -> message should display
Library.temporarySearch = ""
@@ -316,11 +317,10 @@ Item {
visible: searchField.filterText && recentsRepeater.count > 0 //if changed, adjust playOpenHeight
model: SortFilterModel {
filterRole: PlaybackHistoryModel.Title
filterRegularExpression: searchField.filterExpression
sourceModel: Library.playbackHistory
model: LocalSearchModel {
searchQuery: searchField.text
}
delegate: searchAlbum
}
Kirigami.Separator {
@@ -355,10 +355,7 @@ Item {
property int empiricDelegateHeight: recentsRepeater.visible ? (mainScrollView.contentHeight - recentsRepeater.height) / count : (mainScrollView.contentHeight + mainScrollViewLayout.spacing) / (count)
id: completionList
model: SortFilterModel {
sourceModel: Library.searches
filterRegularExpression: searchField.filterExpression
}
model: Library.searches
function isSelectedDelegateVisible() {
if(!recentsRepeater.visible) {
+71 -24
View File
@@ -27,25 +27,10 @@ Library::Library(QObject *parent)
}()))
{
m_database->runMigrations(":/migrations/");
m_searches = new SearchHistoryModel(m_database->getResults<SingleValue<QString>>("select distinct (search_query) from searches order by search_id desc"), this);
connect(this, &Library::changeFavourites, [this]() {
auto future = m_database->getResults<Song>("select * from favourites natural join songs order by favourites.rowid desc");
m_favourites= new FavouritesModel(std::move(future), this);
Q_EMIT favouritesChanged();
});
Q_EMIT changeFavourites();
m_searches = new SearchHistoryModel(this);
connect(this, &Library::changePlaybackHistory, [this]() {
//playbackHistory
auto future = m_database->getResults<PlayedSong>("select * from played_songs natural join songs");
m_playbackHistory = new PlaybackHistoryModel(std::move(future), this);
//mostPlayed
auto future2 = m_database->getResults<PlayedSong>("select * from played_songs natural join songs order by plays desc limit 10");
m_mostPlayed = new PlaybackHistoryModel(std::move(future2), this);
Q_EMIT playbackHistoryChanged();
});
Q_EMIT changePlaybackHistory();
refreshFavourites();
refreshPlaybackHistory();
}
Library::~Library() = default;
@@ -64,13 +49,15 @@ FavouritesModel *Library::favourites()
void Library::addFavourite(const QString &videoId, const QString &title, const QString &artist, const QString &album)
{
QCoro::connect(addSong(videoId, title, artist, album), this, [=, this] {
QCoro::connect(m_database->execute("insert or ignore into favourites (video_id) values (?)", videoId), this, &Library::changeFavourites);
QCoro::connect(m_database->execute("insert or ignore into favourites (video_id) values (?)", videoId),
this, &Library::refreshFavourites);
});
}
void Library::removeFavourite(const QString &videoId)
{
QCoro::connect(m_database->execute("delete from favourites where video_id = ?", videoId), this, &Library::changeFavourites);
QCoro::connect(m_database->execute("delete from favourites where video_id = ?", videoId),
this, &Library::refreshFavourites);
}
FavouriteWatcher *Library::favouriteWatcher(const QString &videoId)
@@ -114,17 +101,41 @@ PlaybackHistoryModel *Library::playbackHistory()
return m_playbackHistory;
}
void Library::refreshPlaybackHistory()
{
// playbackHistory
auto future = m_database->getResults<PlayedSong>(
"select * from played_songs natural join songs");
m_playbackHistory = new PlaybackHistoryModel(std::move(future), this);
// mostPlayed
auto future2 = m_database->getResults<PlayedSong>(
"select * from played_songs natural join songs order by plays desc limit 10");
m_mostPlayed = new PlaybackHistoryModel(std::move(future2), this);
Q_EMIT playbackHistoryChanged();
}
void Library::refreshFavourites()
{
auto future = m_database->getResults<Song>(
"select * from favourites natural join songs order by favourites.rowid desc");
m_favourites = new FavouritesModel(std::move(future), this);
Q_EMIT favouritesChanged();
}
void Library::addPlaybackHistoryItem(const QString &videoId, const QString &title, const QString &artist, const QString &album)
{
QCoro::connect(addSong(videoId, title, artist, album), this, [=, this] {
QCoro::connect(m_database->execute("insert or ignore into played_songs (video_id, plays) values (?, ?)", videoId, 0), this, [=, this] {
QCoro::connect(m_database->execute("update played_songs set plays = plays + 1 where video_id = ? ", videoId), this, &Library::changePlaybackHistory);
QCoro::connect(m_database->execute("update played_songs set plays = plays + 1 where video_id = ? ", videoId),
this, &Library::refreshPlaybackHistory);
});
});
}
void Library::removePlaybackHistoryItem(const QString &videoId)
{
QCoro::connect(m_database->execute("delete from played_songs where video_id = ?", videoId), this, &Library::changePlaybackHistory);
QCoro::connect(m_database->execute("delete from played_songs where video_id = ?", videoId),
this, &Library::refreshPlaybackHistory);
}
WasPlayedWatcher *Library::wasPlayedWatcher(const QString& videoId)
@@ -164,6 +175,11 @@ PlaybackHistoryModel::PlaybackHistoryModel(QFuture<std::vector<PlayedSong>> &&so
});
}
PlaybackHistoryModel::PlaybackHistoryModel(QObject *parent)
: QAbstractListModel(parent)
{
}
QHash<int, QByteArray> PlaybackHistoryModel::roleNames() const {
return {
{Roles::VideoId, "videoId"},
@@ -272,9 +288,25 @@ bool FavouriteWatcher::isFavourite() const {
return m_isFavourite;
}
SearchHistoryModel::SearchHistoryModel(QFuture<std::vector<SingleValue<QString>>> &&historyFuture, QObject *parent)
: QAbstractListModel(parent)
SearchHistoryModel::SearchHistoryModel(Library *library)
: QAbstractListModel(library)
{
auto historyFuture = library->database()
.getResults<SingleValue<QString>>("select distinct (search_query) from searches order by search_id desc limit 20");
connect(this, &SearchHistoryModel::filterChanged, this, [library, this]() {
auto future = library->database()
.getResults<SingleValue<QString>>("select distinct (search_query) from searches "
"where search_query like '%" % m_filter % "%'"
"order by search_id desc limit 20");
QCoro::connect(std::move(future), this, [this](auto history) {
beginResetModel();
m_history = history;
endResetModel();
});
});
QCoro::connect(std::move(historyFuture), this, [this](const auto history) {
beginResetModel();
m_history = history;
@@ -391,3 +423,18 @@ void WasPlayedWatcher::update(std::optional<SingleValue<bool> > result)
Q_EMIT wasPlayedChanged();
}
}
LocalSearchModel::LocalSearchModel(QObject *parent) : PlaybackHistoryModel(parent)
{
connect(this, &LocalSearchModel::searchQueryChanged, this, [this]() {
auto resultFuture = Library::instance().database()
.getResults<PlayedSong>("select * from played_songs natural join songs "
"where title like '%" % m_searchQuery % "%' "
"order by plays desc limit 10");
QCoro::connect(std::move(resultFuture), this, [this](auto results) {
beginResetModel();
m_playedSongs = results;
endResetModel();
});
});
}
+25 -4
View File
@@ -84,21 +84,39 @@ public:
Q_ENUM(Roles);
PlaybackHistoryModel(QFuture<std::vector<PlayedSong>> &&songs, QObject *parent = nullptr);
PlaybackHistoryModel(QObject *parent = nullptr);
QHash<int, QByteArray> roleNames() const override;
int rowCount(const QModelIndex &parent) const override;
QVariant data(const QModelIndex &index, int role) const override;
std::vector<PlayedSong> getPlayedSong() const;
private:
protected:
std::vector<PlayedSong> m_playedSongs;
};
class LocalSearchModel : public PlaybackHistoryModel {
Q_OBJECT
Q_PROPERTY(QString searchQuery MEMBER m_searchQuery NOTIFY searchQueryChanged)
Q_SIGNAL void searchQueryChanged();
public:
LocalSearchModel(QObject *parent = nullptr);
QString m_searchQuery;
};
class Library;
class SearchHistoryModel : public QAbstractListModel {
Q_OBJECT
Q_PROPERTY(QString filter MEMBER m_filter NOTIFY filterChanged)
public:
SearchHistoryModel(QFuture<std::vector<SingleValue<QString>>> &&historyFuture, QObject *parent = nullptr);
SearchHistoryModel(Library *library);
int rowCount(const QModelIndex &parent) const override;
void removeSearch(const QString &search);
QVariant data(const QModelIndex &index, int role) const override;
@@ -106,10 +124,13 @@ public:
const QString & temporarySearch() const;
void setTemporarySearch(QString const& text);
Q_SIGNAL void filterChanged();
private:
size_t getRow(QString const &search) const;
std::vector<SingleValue<QString>> m_history;
QString m_temporarySearch;
QString m_filter;
};
class Library : public QObject
@@ -129,7 +150,7 @@ public:
FavouritesModel *favourites();
Q_SIGNAL void favouritesChanged();
Q_SIGNAL void changeFavourites();
void refreshFavourites();
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 FavouriteWatcher *favouriteWatcher(const QString &videoId);
@@ -144,7 +165,7 @@ public:
PlaybackHistoryModel *playbackHistory();
Q_SIGNAL void playbackHistoryChanged();
Q_SIGNAL void changePlaybackHistory();
void refreshPlaybackHistory();
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);
+1
View File
@@ -91,6 +91,7 @@ Q_DECL_EXPORT int main(int argc, char *argv[])
qmlRegisterUncreatableType<PlaybackHistoryModel>(URI, 1, 0, "PlaybackHistoryModel","");
qmlRegisterType<QSortFilterProxyModel>(URI, 1, 0, "SortFilterModel");
qmlRegisterType<Blur>(URI, 1, 0, "Blur");
qmlRegisterType<LocalSearchModel>(URI, 1, 0, "LocalSearchModel");
qmlRegisterType<LocalPlaylistModel>(URI, 1, 0, "LocalPlaylistModel");
qmlRegisterType<LocalPlaylistsModel>(URI, 1, 0, "LocalPlaylistsModel");
qmlRegisterType<PlaylistImporter>(URI, 1, 0, "PlaylistImporter");
+2 -2
View File
@@ -12,7 +12,7 @@
#include <vector>
#include <memory>
constexpr auto TESTED_YTMUSICAPI_VERSION = "1.1.0";
constexpr auto TESTED_YTMUSICAPI_VERSION = "1.1.1";
struct YTMusicPrivate;
@@ -293,7 +293,7 @@ public:
std::vector<search::SearchResultItem> search(const std::string &query,
const std::optional<std::string> &filter = std::nullopt,
const std::optional<std::string> &scope = std::nullopt,
const int limit = 20,
const int limit = 100,
const bool ignore_spelling = false) const;
/// https://ytmusicapi.readthedocs.io/en/latest/reference.html#ytmusicapi.YTMusic.get_artist